tools.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {
  2. PipelineRunner,
  3. StateManager,
  4. createInteractionToolsFromDeps,
  5. type InteractionRuntimeTools,
  6. } from "@actalk/inkos-core";
  7. import { buildPipelineConfig, loadConfig } from "../utils.js";
  8. type CliPipelineLike = Pick<PipelineRunner, "writeNextChapter" | "reviseDraft">;
  9. type CliStateLike = Pick<StateManager, "ensureControlDocuments" | "bookDir" | "loadBookConfig" | "loadChapterIndex" | "saveChapterIndex" | "listBooks">;
  10. type CliInteractionToolHooks = {
  11. readonly onChatTextDelta?: (text: string) => void;
  12. readonly getChatRequestOptions?: () => {
  13. readonly temperature?: number;
  14. readonly maxTokens?: number;
  15. };
  16. };
  17. export function createCliInteractionToolsFromDeps(
  18. pipeline: CliPipelineLike,
  19. state: CliStateLike,
  20. hooks?: CliInteractionToolHooks,
  21. ): InteractionRuntimeTools {
  22. return createInteractionToolsFromDeps(pipeline, state, hooks);
  23. }
  24. // Backward-compatible export for the current CLI tests during the extraction phase.
  25. export function createInteractionToolsFromDepsCompat(
  26. _projectRoot: string,
  27. pipeline: CliPipelineLike,
  28. state: CliStateLike,
  29. hooks?: CliInteractionToolHooks,
  30. ): InteractionRuntimeTools {
  31. return createInteractionToolsFromDeps(pipeline, state, hooks);
  32. }
  33. export { createInteractionToolsFromDepsCompat as createInteractionToolsFromDeps };
  34. export async function createInteractionTools(
  35. projectRoot: string,
  36. hooks?: CliInteractionToolHooks,
  37. ): Promise<InteractionRuntimeTools> {
  38. const config = await loadConfig();
  39. const pipeline = new PipelineRunner(buildPipelineConfig(config, projectRoot));
  40. const state = new StateManager(projectRoot);
  41. return createInteractionToolsFromDeps(pipeline, state, hooks);
  42. }