takt 0.41.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -28
- package/builtins/en/config.yaml +9 -1
- package/builtins/en/facets/instructions/dual-team-leader-implement.md +7 -2
- package/builtins/en/facets/instructions/fix-maintenance.md +43 -0
- package/builtins/en/facets/instructions/implement-maintenance.md +72 -0
- package/builtins/en/facets/instructions/plan-maintenance.md +51 -0
- package/builtins/en/facets/instructions/review-coding.md +8 -0
- package/builtins/en/facets/instructions/supervise-maintenance.md +110 -0
- package/builtins/en/facets/instructions/team-leader-implement.md +6 -1
- package/builtins/en/facets/instructions/write-tests-first.md +5 -0
- package/builtins/en/facets/instructions/write-tests-maintenance.md +45 -0
- package/builtins/en/facets/knowledge/architecture.md +18 -13
- package/builtins/en/facets/knowledge/cqrs-es.md +48 -0
- package/builtins/en/facets/knowledge/existing-system.md +70 -0
- package/builtins/en/facets/knowledge/frontend.md +25 -0
- package/builtins/en/facets/knowledge/react.md +35 -0
- package/builtins/en/facets/output-contracts/coding-review.md +41 -0
- package/builtins/en/facets/output-contracts/frontend-review.md +1 -0
- package/builtins/en/facets/output-contracts/maintenance-scope.md +29 -0
- package/builtins/en/facets/personas/coding-reviewer.md +27 -0
- package/builtins/en/facets/personas/dual-supervisor.md +1 -1
- package/builtins/en/facets/policies/ai-antipattern.md +59 -0
- package/builtins/en/facets/policies/coding.md +85 -3
- package/builtins/en/facets/policies/existing-system-respect.md +73 -0
- package/builtins/en/facets/policies/qa.md +3 -1
- package/builtins/en/facets/policies/review.md +25 -12
- package/builtins/en/facets/policies/testing.md +33 -0
- package/builtins/en/workflow-categories.yaml +1 -0
- package/builtins/en/workflows/auto-improvement-loop.yaml +20 -4
- package/builtins/en/workflows/default-peer-review.yaml +25 -3
- package/builtins/en/workflows/frontend-maintenance.yaml +499 -0
- package/builtins/en/workflows/peer-review.yaml +23 -1
- package/builtins/en/workflows/review-fix-takt-default.yaml +30 -2
- package/builtins/ja/config.yaml +9 -1
- package/builtins/ja/facets/instructions/dual-team-leader-implement.md +7 -2
- package/builtins/ja/facets/instructions/fix-maintenance.md +43 -0
- package/builtins/ja/facets/instructions/implement-maintenance.md +72 -0
- package/builtins/ja/facets/instructions/plan-maintenance.md +51 -0
- package/builtins/ja/facets/instructions/review-coding.md +8 -0
- package/builtins/ja/facets/instructions/supervise-maintenance.md +110 -0
- package/builtins/ja/facets/instructions/team-leader-implement.md +6 -1
- package/builtins/ja/facets/instructions/write-tests-first.md +5 -0
- package/builtins/ja/facets/instructions/write-tests-maintenance.md +45 -0
- package/builtins/ja/facets/knowledge/architecture.md +18 -13
- package/builtins/ja/facets/knowledge/cqrs-es.md +48 -0
- package/builtins/ja/facets/knowledge/existing-system.md +70 -0
- package/builtins/ja/facets/knowledge/frontend.md +25 -0
- package/builtins/ja/facets/knowledge/react.md +35 -0
- package/builtins/ja/facets/output-contracts/coding-review.md +41 -0
- package/builtins/ja/facets/output-contracts/frontend-review.md +1 -0
- package/builtins/ja/facets/output-contracts/maintenance-scope.md +29 -0
- package/builtins/ja/facets/personas/coding-reviewer.md +27 -0
- package/builtins/ja/facets/personas/dual-supervisor.md +2 -2
- package/builtins/ja/facets/policies/ai-antipattern.md +59 -0
- package/builtins/ja/facets/policies/coding.md +85 -3
- package/builtins/ja/facets/policies/existing-system-respect.md +73 -0
- package/builtins/ja/facets/policies/qa.md +3 -1
- package/builtins/ja/facets/policies/review.md +25 -12
- package/builtins/ja/facets/policies/testing.md +33 -0
- package/builtins/ja/workflow-categories.yaml +1 -0
- package/builtins/ja/workflows/auto-improvement-loop.yaml +20 -4
- package/builtins/ja/workflows/default-peer-review.yaml +25 -3
- package/builtins/ja/workflows/frontend-maintenance.yaml +499 -0
- package/builtins/ja/workflows/peer-review.yaml +23 -1
- package/builtins/ja/workflows/review-fix-takt-default.yaml +30 -2
- package/builtins/skill/references/yaml-schema.md +8 -3
- package/builtins/skill-codex/references/yaml-schema.md +8 -3
- package/dist/agents/decompose-task-usecase.d.ts.map +1 -1
- package/dist/agents/decompose-task-usecase.js +3 -2
- package/dist/agents/decompose-task-usecase.js.map +1 -1
- package/dist/agents/judge-status-usecase.d.ts.map +1 -1
- package/dist/agents/judge-status-usecase.js +4 -3
- package/dist/agents/judge-status-usecase.js.map +1 -1
- package/dist/agents/provider-call-options.d.ts +4 -0
- package/dist/agents/provider-call-options.d.ts.map +1 -0
- package/dist/agents/provider-call-options.js +9 -0
- package/dist/agents/provider-call-options.js.map +1 -0
- package/dist/agents/runner.js +1 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts.map +1 -1
- package/dist/agents/structured-caller/prompt-based-structured-caller.js +5 -4
- package/dist/agents/structured-caller/prompt-based-structured-caller.js.map +1 -1
- package/dist/agents/team-leader-structured-output.d.ts.map +1 -1
- package/dist/agents/team-leader-structured-output.js +21 -0
- package/dist/agents/team-leader-structured-output.js.map +1 -1
- package/dist/app/cli/commands.js +7 -1
- package/dist/app/cli/commands.js.map +1 -1
- package/dist/app/cli/program.js +1 -1
- package/dist/app/cli/program.js.map +1 -1
- package/dist/app/cli/routing.d.ts.map +1 -1
- package/dist/app/cli/routing.js +8 -1
- package/dist/app/cli/routing.js.map +1 -1
- package/dist/core/models/assistant-config.d.ts +4 -0
- package/dist/core/models/assistant-config.d.ts.map +1 -0
- package/dist/core/models/assistant-config.js +4 -0
- package/dist/core/models/assistant-config.js.map +1 -0
- package/dist/core/models/config-schemas.d.ts +160 -9
- package/dist/core/models/config-schemas.d.ts.map +1 -1
- package/dist/core/models/config-schemas.js +12 -2
- package/dist/core/models/config-schemas.js.map +1 -1
- package/dist/core/models/config-types.d.ts +30 -4
- package/dist/core/models/config-types.d.ts.map +1 -1
- package/dist/core/models/index.d.ts +1 -1
- package/dist/core/models/index.d.ts.map +1 -1
- package/dist/core/models/index.js.map +1 -1
- package/dist/core/models/provider-profiles.d.ts +1 -1
- package/dist/core/models/provider-profiles.d.ts.map +1 -1
- package/dist/core/models/quality-gate-defaults.d.ts +2 -0
- package/dist/core/models/quality-gate-defaults.d.ts.map +1 -0
- package/dist/core/models/quality-gate-defaults.js +2 -0
- package/dist/core/models/quality-gate-defaults.js.map +1 -0
- package/dist/core/models/response.d.ts +1 -1
- package/dist/core/models/response.d.ts.map +1 -1
- package/dist/core/models/response.js +1 -1
- package/dist/core/models/response.js.map +1 -1
- package/dist/core/models/schema-base.d.ts +80 -3
- package/dist/core/models/schema-base.d.ts.map +1 -1
- package/dist/core/models/schema-base.js +76 -2
- package/dist/core/models/schema-base.js.map +1 -1
- package/dist/core/models/types.d.ts +2 -2
- package/dist/core/models/types.d.ts.map +1 -1
- package/dist/core/models/workflow-provider-options.d.ts +7 -0
- package/dist/core/models/workflow-provider-options.d.ts.map +1 -1
- package/dist/core/models/workflow-schemas.d.ts +368 -51
- package/dist/core/models/workflow-schemas.d.ts.map +1 -1
- package/dist/core/models/workflow-system-input-types.d.ts +8 -1
- package/dist/core/models/workflow-system-input-types.d.ts.map +1 -1
- package/dist/core/models/workflow-system-schemas.d.ts +7 -1
- package/dist/core/models/workflow-system-schemas.d.ts.map +1 -1
- package/dist/core/models/workflow-system-schemas.js +12 -1
- package/dist/core/models/workflow-system-schemas.js.map +1 -1
- package/dist/core/models/workflow-types.d.ts +13 -5
- package/dist/core/models/workflow-types.d.ts.map +1 -1
- package/dist/core/models/workflow-types.js.map +1 -1
- package/dist/core/workflow/engine/OptionsBuilder.d.ts +1 -0
- package/dist/core/workflow/engine/OptionsBuilder.d.ts.map +1 -1
- package/dist/core/workflow/engine/OptionsBuilder.js +9 -4
- package/dist/core/workflow/engine/OptionsBuilder.js.map +1 -1
- package/dist/core/workflow/engine/ParallelRunner.d.ts +11 -0
- package/dist/core/workflow/engine/ParallelRunner.d.ts.map +1 -1
- package/dist/core/workflow/engine/ParallelRunner.js +139 -19
- package/dist/core/workflow/engine/ParallelRunner.js.map +1 -1
- package/dist/core/workflow/engine/TeamLeaderRunner.d.ts.map +1 -1
- package/dist/core/workflow/engine/TeamLeaderRunner.js +55 -23
- package/dist/core/workflow/engine/TeamLeaderRunner.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngine.d.ts +1 -0
- package/dist/core/workflow/engine/WorkflowEngine.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngine.js +29 -4
- package/dist/core/workflow/engine/WorkflowEngine.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngineSetup.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngineSetup.js +2 -0
- package/dist/core/workflow/engine/WorkflowEngineSetup.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowRunLoop.d.ts +8 -0
- package/dist/core/workflow/engine/WorkflowRunLoop.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowRunLoop.js +78 -7
- package/dist/core/workflow/engine/WorkflowRunLoop.js.map +1 -1
- package/dist/core/workflow/engine/team-leader-execution.d.ts +1 -0
- package/dist/core/workflow/engine/team-leader-execution.d.ts.map +1 -1
- package/dist/core/workflow/engine/team-leader-execution.js +22 -0
- package/dist/core/workflow/engine/team-leader-execution.js.map +1 -1
- package/dist/core/workflow/engine/team-leader-timeout-fallback.d.ts +13 -0
- package/dist/core/workflow/engine/team-leader-timeout-fallback.d.ts.map +1 -0
- package/dist/core/workflow/engine/team-leader-timeout-fallback.js +125 -0
- package/dist/core/workflow/engine/team-leader-timeout-fallback.js.map +1 -0
- package/dist/core/workflow/instruction/InstructionBuilder.d.ts.map +1 -1
- package/dist/core/workflow/instruction/InstructionBuilder.js +4 -3
- package/dist/core/workflow/instruction/InstructionBuilder.js.map +1 -1
- package/dist/core/workflow/observability/workflowSpans.d.ts +28 -0
- package/dist/core/workflow/observability/workflowSpans.d.ts.map +1 -0
- package/dist/core/workflow/observability/workflowSpans.js +107 -0
- package/dist/core/workflow/observability/workflowSpans.js.map +1 -0
- package/dist/core/workflow/part-definition-validator.d.ts.map +1 -1
- package/dist/core/workflow/part-definition-validator.js +4 -0
- package/dist/core/workflow/part-definition-validator.js.map +1 -1
- package/dist/core/workflow/permission-profile-resolution.d.ts.map +1 -1
- package/dist/core/workflow/permission-profile-resolution.js +1 -0
- package/dist/core/workflow/permission-profile-resolution.js.map +1 -1
- package/dist/core/workflow/phase-runner.d.ts +1 -3
- package/dist/core/workflow/phase-runner.d.ts.map +1 -1
- package/dist/core/workflow/phase-runner.js.map +1 -1
- package/dist/core/workflow/quality-gates/commandGateMessage.d.ts +4 -0
- package/dist/core/workflow/quality-gates/commandGateMessage.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/commandGateMessage.js +84 -0
- package/dist/core/workflow/quality-gates/commandGateMessage.js.map +1 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.d.ts +3 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.js +242 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.js.map +1 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.d.ts +3 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.js +29 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.js.map +1 -0
- package/dist/core/workflow/quality-gates/types.d.ts +41 -0
- package/dist/core/workflow/quality-gates/types.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/types.js +2 -0
- package/dist/core/workflow/quality-gates/types.js.map +1 -0
- package/dist/core/workflow/report-phase-runner.d.ts.map +1 -1
- package/dist/core/workflow/report-phase-runner.js +3 -2
- package/dist/core/workflow/report-phase-runner.js.map +1 -1
- package/dist/core/workflow/run/run-meta.d.ts +3 -1
- package/dist/core/workflow/run/run-meta.d.ts.map +1 -1
- package/dist/core/workflow/run/run-meta.js +2 -0
- package/dist/core/workflow/run/run-meta.js.map +1 -1
- package/dist/core/workflow/run/run-slug.d.ts +2 -0
- package/dist/core/workflow/run/run-slug.d.ts.map +1 -0
- package/dist/core/workflow/run/run-slug.js +19 -0
- package/dist/core/workflow/run/run-slug.js.map +1 -0
- package/dist/core/workflow/status-judgment-phase.d.ts.map +1 -1
- package/dist/core/workflow/status-judgment-phase.js +7 -3
- package/dist/core/workflow/status-judgment-phase.js.map +1 -1
- package/dist/core/workflow/system/system-step-effect-runner.d.ts.map +1 -1
- package/dist/core/workflow/system/system-step-effect-runner.js +16 -1
- package/dist/core/workflow/system/system-step-effect-runner.js.map +1 -1
- package/dist/core/workflow/team-leader-continuation-ids.d.ts +3 -0
- package/dist/core/workflow/team-leader-continuation-ids.d.ts.map +1 -0
- package/dist/core/workflow/team-leader-continuation-ids.js +6 -0
- package/dist/core/workflow/team-leader-continuation-ids.js.map +1 -0
- package/dist/core/workflow/types.d.ts +7 -1
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/features/interactive/assistantInitFiles.d.ts +2 -0
- package/dist/features/interactive/assistantInitFiles.d.ts.map +1 -0
- package/dist/features/interactive/assistantInitFiles.js +110 -0
- package/dist/features/interactive/assistantInitFiles.js.map +1 -0
- package/dist/features/interactive/conversationLoop.d.ts +5 -1
- package/dist/features/interactive/conversationLoop.d.ts.map +1 -1
- package/dist/features/interactive/conversationLoop.js +33 -11
- package/dist/features/interactive/conversationLoop.js.map +1 -1
- package/dist/features/interactive/imageAttachments.d.ts +20 -0
- package/dist/features/interactive/imageAttachments.d.ts.map +1 -0
- package/dist/features/interactive/imageAttachments.js +75 -0
- package/dist/features/interactive/imageAttachments.js.map +1 -0
- package/dist/features/interactive/index.d.ts +2 -1
- package/dist/features/interactive/index.d.ts.map +1 -1
- package/dist/features/interactive/index.js +1 -1
- package/dist/features/interactive/index.js.map +1 -1
- package/dist/features/interactive/inlineImagePaste.d.ts +21 -0
- package/dist/features/interactive/inlineImagePaste.d.ts.map +1 -0
- package/dist/features/interactive/inlineImagePaste.js +136 -0
- package/dist/features/interactive/inlineImagePaste.js.map +1 -0
- package/dist/features/interactive/instructModeTypes.d.ts +23 -0
- package/dist/features/interactive/instructModeTypes.d.ts.map +1 -0
- package/dist/features/interactive/instructModeTypes.js +2 -0
- package/dist/features/interactive/instructModeTypes.js.map +1 -0
- package/dist/features/interactive/interactive-summary.d.ts +1 -1
- package/dist/features/interactive/interactive-summary.d.ts.map +1 -1
- package/dist/features/interactive/interactive-summary.js +4 -3
- package/dist/features/interactive/interactive-summary.js.map +1 -1
- package/dist/features/interactive/interactive.d.ts +8 -3
- package/dist/features/interactive/interactive.d.ts.map +1 -1
- package/dist/features/interactive/interactive.js +4 -0
- package/dist/features/interactive/interactive.js.map +1 -1
- package/dist/features/interactive/interactiveInput.d.ts +2 -1
- package/dist/features/interactive/interactiveInput.d.ts.map +1 -1
- package/dist/features/interactive/interactiveInput.js +5 -1
- package/dist/features/interactive/interactiveInput.js.map +1 -1
- package/dist/features/interactive/lineEditor.d.ts +2 -0
- package/dist/features/interactive/lineEditor.d.ts.map +1 -1
- package/dist/features/interactive/lineEditor.js +130 -9
- package/dist/features/interactive/lineEditor.js.map +1 -1
- package/dist/features/interactive/passthroughMode.d.ts.map +1 -1
- package/dist/features/interactive/passthroughMode.js +8 -4
- package/dist/features/interactive/passthroughMode.js.map +1 -1
- package/dist/features/interactive/promptSections.d.ts +2 -0
- package/dist/features/interactive/promptSections.d.ts.map +1 -1
- package/dist/features/interactive/promptSections.js +7 -1
- package/dist/features/interactive/promptSections.js.map +1 -1
- package/dist/features/interactive/quietMode.d.ts.map +1 -1
- package/dist/features/interactive/quietMode.js +12 -8
- package/dist/features/interactive/quietMode.js.map +1 -1
- package/dist/features/interactive/retryMode.d.ts +10 -13
- package/dist/features/interactive/retryMode.d.ts.map +1 -1
- package/dist/features/interactive/retryMode.js +42 -22
- package/dist/features/interactive/retryMode.js.map +1 -1
- package/dist/features/interactive/slashCommandRegistry.d.ts.map +1 -1
- package/dist/features/interactive/slashCommandRegistry.js +1 -0
- package/dist/features/interactive/slashCommandRegistry.js.map +1 -1
- package/dist/features/tasks/add/index.d.ts +4 -0
- package/dist/features/tasks/add/index.d.ts.map +1 -1
- package/dist/features/tasks/add/index.js +12 -29
- package/dist/features/tasks/add/index.js.map +1 -1
- package/dist/features/tasks/attachments.d.ts +19 -0
- package/dist/features/tasks/attachments.d.ts.map +1 -0
- package/dist/features/tasks/attachments.js +129 -0
- package/dist/features/tasks/attachments.js.map +1 -0
- package/dist/features/tasks/execute/resolveTask.d.ts.map +1 -1
- package/dist/features/tasks/execute/resolveTask.js +4 -3
- package/dist/features/tasks/execute/resolveTask.js.map +1 -1
- package/dist/features/tasks/execute/runMeta.d.ts +5 -1
- package/dist/features/tasks/execute/runMeta.d.ts.map +1 -1
- package/dist/features/tasks/execute/runMeta.js +10 -4
- package/dist/features/tasks/execute/runMeta.js.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.js +48 -4
- package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
- package/dist/features/tasks/execute/taskSpecContext.d.ts +7 -2
- package/dist/features/tasks/execute/taskSpecContext.d.ts.map +1 -1
- package/dist/features/tasks/execute/taskSpecContext.js +23 -36
- package/dist/features/tasks/execute/taskSpecContext.js.map +1 -1
- package/dist/features/tasks/execute/taskWorkflowExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/taskWorkflowExecution.js +2 -1
- package/dist/features/tasks/execute/taskWorkflowExecution.js.map +1 -1
- package/dist/features/tasks/execute/traceReportRedaction.d.ts +0 -1
- package/dist/features/tasks/execute/traceReportRedaction.d.ts.map +1 -1
- package/dist/features/tasks/execute/traceReportRedaction.js +1 -9
- package/dist/features/tasks/execute/traceReportRedaction.js.map +1 -1
- package/dist/features/tasks/execute/types.d.ts +8 -0
- package/dist/features/tasks/execute/types.d.ts.map +1 -1
- package/dist/features/tasks/execute/workflowExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/workflowExecution.js +12 -1
- package/dist/features/tasks/execute/workflowExecution.js.map +1 -1
- package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts +5 -1
- package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts.map +1 -1
- package/dist/features/tasks/execute/workflowExecutionBootstrap.js +7 -2
- package/dist/features/tasks/execute/workflowExecutionBootstrap.js.map +1 -1
- package/dist/features/tasks/index.d.ts +1 -0
- package/dist/features/tasks/index.d.ts.map +1 -1
- package/dist/features/tasks/index.js +1 -0
- package/dist/features/tasks/index.js.map +1 -1
- package/dist/features/tasks/list/instructMode.d.ts +2 -20
- package/dist/features/tasks/list/instructMode.d.ts.map +1 -1
- package/dist/features/tasks/list/instructMode.js +15 -4
- package/dist/features/tasks/list/instructMode.js.map +1 -1
- package/dist/features/tasks/list/retryTaskSpecAttachments.d.ts +8 -0
- package/dist/features/tasks/list/retryTaskSpecAttachments.d.ts.map +1 -0
- package/dist/features/tasks/list/retryTaskSpecAttachments.js +87 -0
- package/dist/features/tasks/list/retryTaskSpecAttachments.js.map +1 -0
- package/dist/features/tasks/list/taskInstructionActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskInstructionActions.js +20 -2
- package/dist/features/tasks/list/taskInstructionActions.js.map +1 -1
- package/dist/features/tasks/list/taskRetryActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskRetryActions.js +24 -6
- package/dist/features/tasks/list/taskRetryActions.js.map +1 -1
- package/dist/features/tasks/resume/directInstructMode.d.ts +13 -0
- package/dist/features/tasks/resume/directInstructMode.d.ts.map +1 -0
- package/dist/features/tasks/resume/directInstructMode.js +67 -0
- package/dist/features/tasks/resume/directInstructMode.js.map +1 -0
- package/dist/features/tasks/resume/directRunFinder.d.ts +7 -0
- package/dist/features/tasks/resume/directRunFinder.d.ts.map +1 -0
- package/dist/features/tasks/resume/directRunFinder.js +43 -0
- package/dist/features/tasks/resume/directRunFinder.js.map +1 -0
- package/dist/features/tasks/resume/index.d.ts +3 -0
- package/dist/features/tasks/resume/index.d.ts.map +1 -0
- package/dist/features/tasks/resume/index.js +229 -0
- package/dist/features/tasks/resume/index.js.map +1 -0
- package/dist/features/tasks/taskSpecFile.d.ts +2 -0
- package/dist/features/tasks/taskSpecFile.d.ts.map +1 -0
- package/dist/features/tasks/taskSpecFile.js +38 -0
- package/dist/features/tasks/taskSpecFile.js.map +1 -0
- package/dist/infra/claude/executor.d.ts.map +1 -1
- package/dist/infra/claude/executor.js +27 -6
- package/dist/infra/claude/executor.js.map +1 -1
- package/dist/infra/claude/mcp-config.d.ts +7 -0
- package/dist/infra/claude/mcp-config.d.ts.map +1 -0
- package/dist/infra/claude/mcp-config.js +30 -0
- package/dist/infra/claude/mcp-config.js.map +1 -0
- package/dist/infra/claude-headless/client.d.ts.map +1 -1
- package/dist/infra/claude-headless/client.js +5 -40
- package/dist/infra/claude-headless/client.js.map +1 -1
- package/dist/infra/claude-headless/result-response.js +1 -1
- package/dist/infra/claude-headless/result-response.js.map +1 -1
- package/dist/infra/claude-terminal/client.d.ts +4 -0
- package/dist/infra/claude-terminal/client.d.ts.map +1 -0
- package/dist/infra/claude-terminal/client.js +314 -0
- package/dist/infra/claude-terminal/client.js.map +1 -0
- package/dist/infra/claude-terminal/command.d.ts +4 -0
- package/dist/infra/claude-terminal/command.d.ts.map +1 -0
- package/dist/infra/claude-terminal/command.js +50 -0
- package/dist/infra/claude-terminal/command.js.map +1 -0
- package/dist/infra/claude-terminal/response-normalizer.d.ts +14 -0
- package/dist/infra/claude-terminal/response-normalizer.d.ts.map +1 -0
- package/dist/infra/claude-terminal/response-normalizer.js +118 -0
- package/dist/infra/claude-terminal/response-normalizer.js.map +1 -0
- package/dist/infra/claude-terminal/tmux-backend.d.ts +7 -0
- package/dist/infra/claude-terminal/tmux-backend.d.ts.map +1 -0
- package/dist/infra/claude-terminal/tmux-backend.js +177 -0
- package/dist/infra/claude-terminal/tmux-backend.js.map +1 -0
- package/dist/infra/claude-terminal/transcript-reader.d.ts +13 -0
- package/dist/infra/claude-terminal/transcript-reader.d.ts.map +1 -0
- package/dist/infra/claude-terminal/transcript-reader.js +329 -0
- package/dist/infra/claude-terminal/transcript-reader.js.map +1 -0
- package/dist/infra/claude-terminal/types.d.ts +106 -0
- package/dist/infra/claude-terminal/types.d.ts.map +1 -0
- package/dist/infra/claude-terminal/types.js +2 -0
- package/dist/infra/claude-terminal/types.js.map +1 -0
- package/dist/infra/codex/CodexStreamHandler.d.ts +4 -2
- package/dist/infra/codex/CodexStreamHandler.d.ts.map +1 -1
- package/dist/infra/codex/CodexStreamHandler.js +55 -21
- package/dist/infra/codex/CodexStreamHandler.js.map +1 -1
- package/dist/infra/codex/client.d.ts +2 -0
- package/dist/infra/codex/client.d.ts.map +1 -1
- package/dist/infra/codex/client.js +42 -6
- package/dist/infra/codex/client.js.map +1 -1
- package/dist/infra/config/configNormalizers.d.ts +23 -16
- package/dist/infra/config/configNormalizers.d.ts.map +1 -1
- package/dist/infra/config/configNormalizers.js +69 -7
- package/dist/infra/config/configNormalizers.js.map +1 -1
- package/dist/infra/config/env/global-current-env-specs.d.ts.map +1 -1
- package/dist/infra/config/env/global-current-env-specs.js +7 -0
- package/dist/infra/config/env/global-current-env-specs.js.map +1 -1
- package/dist/infra/config/env/project-current-env-specs.d.ts.map +1 -1
- package/dist/infra/config/env/project-current-env-specs.js +7 -0
- package/dist/infra/config/env/project-current-env-specs.js.map +1 -1
- package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
- package/dist/infra/config/global/globalConfigCore.js +5 -0
- package/dist/infra/config/global/globalConfigCore.js.map +1 -1
- package/dist/infra/config/global/globalConfigSerializer.d.ts.map +1 -1
- package/dist/infra/config/global/globalConfigSerializer.js +10 -0
- package/dist/infra/config/global/globalConfigSerializer.js.map +1 -1
- package/dist/infra/config/global/initialization.d.ts +1 -1
- package/dist/infra/config/global/initialization.d.ts.map +1 -1
- package/dist/infra/config/global/initialization.js +1 -0
- package/dist/infra/config/global/initialization.js.map +1 -1
- package/dist/infra/config/loaders/qualityGateOverrides.d.ts +3 -2
- package/dist/infra/config/loaders/qualityGateOverrides.d.ts.map +1 -1
- package/dist/infra/config/loaders/qualityGateOverrides.js +42 -3
- package/dist/infra/config/loaders/qualityGateOverrides.js.map +1 -1
- package/dist/infra/config/loaders/workflowFileLoader.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowFileLoader.js +2 -2
- package/dist/infra/config/loaders/workflowFileLoader.js.map +1 -1
- package/dist/infra/config/loaders/workflowNormalizationPolicies.d.ts +3 -1
- package/dist/infra/config/loaders/workflowNormalizationPolicies.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowNormalizationPolicies.js +28 -0
- package/dist/infra/config/loaders/workflowNormalizationPolicies.js.map +1 -1
- package/dist/infra/config/loaders/workflowParser.d.ts +2 -2
- package/dist/infra/config/loaders/workflowParser.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowParser.js +3 -2
- package/dist/infra/config/loaders/workflowParser.js.map +1 -1
- package/dist/infra/config/loaders/workflowStepNormalizer.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowStepNormalizer.js +2 -1
- package/dist/infra/config/loaders/workflowStepNormalizer.js.map +1 -1
- package/dist/infra/config/observabilityConfig.d.ts +13 -0
- package/dist/infra/config/observabilityConfig.d.ts.map +1 -0
- package/dist/infra/config/observabilityConfig.js +52 -0
- package/dist/infra/config/observabilityConfig.js.map +1 -0
- package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
- package/dist/infra/config/project/projectConfig.js +23 -5
- package/dist/infra/config/project/projectConfig.js.map +1 -1
- package/dist/infra/config/project/projectConfigTransforms.d.ts +5 -1
- package/dist/infra/config/project/projectConfigTransforms.d.ts.map +1 -1
- package/dist/infra/config/project/projectConfigTransforms.js +8 -0
- package/dist/infra/config/project/projectConfigTransforms.js.map +1 -1
- package/dist/infra/config/providerOptions.d.ts +8 -2
- package/dist/infra/config/providerOptions.d.ts.map +1 -1
- package/dist/infra/config/providerOptions.js +49 -1
- package/dist/infra/config/providerOptions.js.map +1 -1
- package/dist/infra/config/providerOptionsContract.d.ts +3 -3
- package/dist/infra/config/providerOptionsContract.d.ts.map +1 -1
- package/dist/infra/config/providerOptionsContract.js +14 -0
- package/dist/infra/config/providerOptionsContract.js.map +1 -1
- package/dist/infra/config/resolveConfigValue.d.ts.map +1 -1
- package/dist/infra/config/resolveConfigValue.js +18 -0
- package/dist/infra/config/resolveConfigValue.js.map +1 -1
- package/dist/infra/config/resolvedConfig.d.ts +2 -1
- package/dist/infra/config/resolvedConfig.d.ts.map +1 -1
- package/dist/infra/config/traced/tracedConfigSchema.d.ts.map +1 -1
- package/dist/infra/config/traced/tracedConfigSchema.js +16 -0
- package/dist/infra/config/traced/tracedConfigSchema.js.map +1 -1
- package/dist/infra/git/format.d.ts.map +1 -1
- package/dist/infra/git/format.js +75 -8
- package/dist/infra/git/format.js.map +1 -1
- package/dist/infra/git/index.d.ts +1 -1
- package/dist/infra/git/index.d.ts.map +1 -1
- package/dist/infra/git/types.d.ts +5 -0
- package/dist/infra/git/types.d.ts.map +1 -1
- package/dist/infra/github/pr.d.ts.map +1 -1
- package/dist/infra/github/pr.js +174 -28
- package/dist/infra/github/pr.js.map +1 -1
- package/dist/infra/observability/otelFoundation.d.ts +6 -0
- package/dist/infra/observability/otelFoundation.d.ts.map +1 -0
- package/dist/infra/observability/otelFoundation.js +89 -0
- package/dist/infra/observability/otelFoundation.js.map +1 -0
- package/dist/infra/opencode/client.d.ts.map +1 -1
- package/dist/infra/opencode/client.js +19 -15
- package/dist/infra/opencode/client.js.map +1 -1
- package/dist/infra/providers/claude-terminal.d.ts +6 -0
- package/dist/infra/providers/claude-terminal.d.ts.map +1 -0
- package/dist/infra/providers/claude-terminal.js +70 -0
- package/dist/infra/providers/claude-terminal.js.map +1 -0
- package/dist/infra/providers/index.d.ts.map +1 -1
- package/dist/infra/providers/index.js +2 -0
- package/dist/infra/providers/index.js.map +1 -1
- package/dist/infra/providers/provider-capabilities.d.ts +1 -0
- package/dist/infra/providers/provider-capabilities.d.ts.map +1 -1
- package/dist/infra/providers/provider-capabilities.js +16 -0
- package/dist/infra/providers/provider-capabilities.js.map +1 -1
- package/dist/infra/rate-limit/detection.d.ts +2 -0
- package/dist/infra/rate-limit/detection.d.ts.map +1 -1
- package/dist/infra/rate-limit/detection.js +14 -1
- package/dist/infra/rate-limit/detection.js.map +1 -1
- package/dist/infra/task/clone-base-branch.d.ts +11 -0
- package/dist/infra/task/clone-base-branch.d.ts.map +1 -1
- package/dist/infra/task/clone-base-branch.js +34 -4
- package/dist/infra/task/clone-base-branch.js.map +1 -1
- package/dist/infra/task/clone.d.ts +2 -1
- package/dist/infra/task/clone.d.ts.map +1 -1
- package/dist/infra/task/clone.js +20 -3
- package/dist/infra/task/clone.js.map +1 -1
- package/dist/infra/task/index.d.ts +1 -1
- package/dist/infra/task/index.d.ts.map +1 -1
- package/dist/infra/task/index.js +1 -1
- package/dist/infra/task/index.js.map +1 -1
- package/dist/infra/task/projectLocalTaktSync.d.ts.map +1 -1
- package/dist/infra/task/projectLocalTaktSync.js +6 -2
- package/dist/infra/task/projectLocalTaktSync.js.map +1 -1
- package/dist/infra/task/runner.d.ts +2 -2
- package/dist/infra/task/runner.d.ts.map +1 -1
- package/dist/infra/task/runner.js +4 -4
- package/dist/infra/task/runner.js.map +1 -1
- package/dist/infra/task/taskRecordMutations.d.ts +1 -1
- package/dist/infra/task/taskRecordMutations.d.ts.map +1 -1
- package/dist/infra/task/taskRecordMutations.js +5 -1
- package/dist/infra/task/taskRecordMutations.js.map +1 -1
- package/dist/infra/task/taskRetryService.d.ts +2 -2
- package/dist/infra/task/taskRetryService.d.ts.map +1 -1
- package/dist/infra/task/taskRetryService.js +4 -4
- package/dist/infra/task/taskRetryService.js.map +1 -1
- package/dist/infra/workflow/system/system-enqueue-effect.d.ts +2 -2
- package/dist/infra/workflow/system/system-enqueue-effect.d.ts.map +1 -1
- package/dist/infra/workflow/system/system-enqueue-effect.js +5 -2
- package/dist/infra/workflow/system/system-enqueue-effect.js.map +1 -1
- package/dist/shared/constants.d.ts +1 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +1 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/i18n/labels_en.yaml +3 -1
- package/dist/shared/i18n/labels_ja.yaml +3 -1
- package/dist/shared/prompts/en/score_direct_instruct_system_prompt.md +63 -0
- package/dist/shared/prompts/en/score_retry_system_prompt.md +2 -2
- package/dist/shared/prompts/ja/score_direct_instruct_system_prompt.md +63 -0
- package/dist/shared/prompts/ja/score_retry_system_prompt.md +2 -2
- package/dist/shared/types/provider.d.ts +1 -1
- package/dist/shared/types/provider.d.ts.map +1 -1
- package/dist/shared/utils/debug.d.ts +2 -0
- package/dist/shared/utils/debug.d.ts.map +1 -1
- package/dist/shared/utils/debug.js +1 -0
- package/dist/shared/utils/debug.js.map +1 -1
- package/dist/shared/utils/sensitiveText.d.ts +2 -0
- package/dist/shared/utils/sensitiveText.d.ts.map +1 -0
- package/dist/shared/utils/sensitiveText.js +40 -0
- package/dist/shared/utils/sensitiveText.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import * as childProcess from 'node:child_process';
|
|
2
|
+
import { setTimeout as sleep } from 'node:timers/promises';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
import { stripAnsi } from '../../shared/utils/text.js';
|
|
5
|
+
import { createLogger, getErrorMessage } from '../../shared/utils/index.js';
|
|
6
|
+
import { createClaudeTerminalSessionName } from './command.js';
|
|
7
|
+
const log = createLogger('claude-terminal-tmux');
|
|
8
|
+
const CLAUDE_READY_TIMEOUT_MS = 60000;
|
|
9
|
+
const PANE_CHANGE_TIMEOUT_MS = 5000;
|
|
10
|
+
const PANE_POLL_INTERVAL_MS = 100;
|
|
11
|
+
const CLAUDE_READY_TAIL_LINES = 3;
|
|
12
|
+
const CLAUDE_BUSY_PATTERN = /(Running|thinking|Searching|Reading|Writing|Editing|Crunched)/i;
|
|
13
|
+
const CLAUDE_PROMPT_PATTERN = /^[❯❱>](?:\s+(?!\d+\.\s)|$)/;
|
|
14
|
+
function getProperty(error, property) {
|
|
15
|
+
return error[property];
|
|
16
|
+
}
|
|
17
|
+
function getFailureCode(error) {
|
|
18
|
+
const code = getProperty(error, 'code');
|
|
19
|
+
if (typeof code === 'string' || typeof code === 'number') {
|
|
20
|
+
return String(code);
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
function getFailureStderr(error) {
|
|
25
|
+
const stderr = getProperty(error, 'stderr');
|
|
26
|
+
if (typeof stderr !== 'string') {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const trimmed = stderr.trim();
|
|
30
|
+
return trimmed.length > 0 ? redactSensitiveClaudeArgs(trimmed) : undefined;
|
|
31
|
+
}
|
|
32
|
+
function redactSensitiveClaudeArgs(text) {
|
|
33
|
+
return text
|
|
34
|
+
.replace(/(--system-prompt(?:=|\s+)).*/g, '$1[redacted]')
|
|
35
|
+
.replace(/(--json-schema(?:=|\s+)).*/g, '$1[redacted]');
|
|
36
|
+
}
|
|
37
|
+
function formatTmuxError(error) {
|
|
38
|
+
if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
|
|
39
|
+
return new Error('tmux command not found. Install tmux to use provider: claude-terminal.');
|
|
40
|
+
}
|
|
41
|
+
if (error && typeof error === 'object') {
|
|
42
|
+
const execError = error;
|
|
43
|
+
const code = getFailureCode(execError);
|
|
44
|
+
const stderr = getFailureStderr(execError);
|
|
45
|
+
const codeText = code ? ` with code ${code}` : '';
|
|
46
|
+
const stderrText = stderr ? `: ${stderr}` : '.';
|
|
47
|
+
return new Error(`tmux command failed${codeText}${stderrText}`);
|
|
48
|
+
}
|
|
49
|
+
return new Error('tmux command failed.');
|
|
50
|
+
}
|
|
51
|
+
async function runTmux(args, options) {
|
|
52
|
+
if (!childProcess.execFile) {
|
|
53
|
+
throw new Error('node:child_process.execFile is required to run tmux.');
|
|
54
|
+
}
|
|
55
|
+
const execFileAsync = promisify(childProcess.execFile);
|
|
56
|
+
try {
|
|
57
|
+
const result = await execFileAsync('tmux', args, {
|
|
58
|
+
cwd: options?.cwd,
|
|
59
|
+
encoding: 'utf-8',
|
|
60
|
+
maxBuffer: 1024 * 1024 * 4,
|
|
61
|
+
});
|
|
62
|
+
return result.stdout;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw formatTmuxError(error);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function loadBuffer(bufferName, text) {
|
|
69
|
+
if (!childProcess.spawn) {
|
|
70
|
+
throw new Error('node:child_process.spawn is required to run tmux.');
|
|
71
|
+
}
|
|
72
|
+
await new Promise((resolve, reject) => {
|
|
73
|
+
const child = childProcess.spawn('tmux', ['load-buffer', '-b', bufferName, '-'], {
|
|
74
|
+
stdio: ['pipe', 'ignore', 'pipe'],
|
|
75
|
+
});
|
|
76
|
+
let stderr = '';
|
|
77
|
+
child.stderr?.setEncoding('utf-8');
|
|
78
|
+
child.stderr?.on('data', (chunk) => {
|
|
79
|
+
stderr += chunk;
|
|
80
|
+
});
|
|
81
|
+
child.on('error', (error) => reject(formatTmuxError(error)));
|
|
82
|
+
child.on('close', (code) => {
|
|
83
|
+
if (code === 0) {
|
|
84
|
+
resolve();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
reject(new Error(`tmux load-buffer failed (${code}): ${stderr.trim()}`));
|
|
88
|
+
});
|
|
89
|
+
child.stdin.end(text);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async function capturePane(session, lines) {
|
|
93
|
+
return runTmux(['capture-pane', '-p', '-t', session.name, '-S', `-${lines}`]);
|
|
94
|
+
}
|
|
95
|
+
function isClaudeInputReady(capturedPane) {
|
|
96
|
+
const plain = stripAnsi(capturedPane);
|
|
97
|
+
const tailLines = plain
|
|
98
|
+
.split(/\r?\n/)
|
|
99
|
+
.map((line) => line.trim())
|
|
100
|
+
.filter((line) => line.length > 0)
|
|
101
|
+
.slice(-CLAUDE_READY_TAIL_LINES);
|
|
102
|
+
const hasPrompt = tailLines.some((line) => CLAUDE_PROMPT_PATTERN.test(line));
|
|
103
|
+
const isBusy = CLAUDE_BUSY_PATTERN.test(tailLines.join('\n'));
|
|
104
|
+
return hasPrompt && !isBusy;
|
|
105
|
+
}
|
|
106
|
+
async function waitForClaudeInputReady(session) {
|
|
107
|
+
const deadline = Date.now() + CLAUDE_READY_TIMEOUT_MS;
|
|
108
|
+
while (Date.now() < deadline) {
|
|
109
|
+
const captured = await capturePane(session, 20);
|
|
110
|
+
if (isClaudeInputReady(captured)) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await sleep(PANE_POLL_INTERVAL_MS);
|
|
114
|
+
}
|
|
115
|
+
throw new Error('Timed out waiting for Claude terminal input prompt.');
|
|
116
|
+
}
|
|
117
|
+
async function waitForPaneChange(session, before) {
|
|
118
|
+
const deadline = Date.now() + PANE_CHANGE_TIMEOUT_MS;
|
|
119
|
+
while (Date.now() < deadline) {
|
|
120
|
+
const captured = await capturePane(session, 40);
|
|
121
|
+
if (captured !== before) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
await sleep(PANE_POLL_INTERVAL_MS);
|
|
125
|
+
}
|
|
126
|
+
throw new Error('Timed out waiting for Claude terminal paste to appear in pane.');
|
|
127
|
+
}
|
|
128
|
+
export class TmuxTerminalBackend {
|
|
129
|
+
async start(options) {
|
|
130
|
+
const name = createClaudeTerminalSessionName();
|
|
131
|
+
await runTmux([
|
|
132
|
+
'new-session',
|
|
133
|
+
'-d',
|
|
134
|
+
'-s',
|
|
135
|
+
name,
|
|
136
|
+
'-c',
|
|
137
|
+
options.cwd,
|
|
138
|
+
options.command.executable,
|
|
139
|
+
...options.command.args,
|
|
140
|
+
], { cwd: options.cwd });
|
|
141
|
+
return { id: name, name };
|
|
142
|
+
}
|
|
143
|
+
async pasteText(session, text) {
|
|
144
|
+
const bufferName = `${session.name}-prompt`;
|
|
145
|
+
await waitForClaudeInputReady(session);
|
|
146
|
+
const beforePaste = await capturePane(session, 40);
|
|
147
|
+
await loadBuffer(bufferName, text);
|
|
148
|
+
let pasteError;
|
|
149
|
+
try {
|
|
150
|
+
await runTmux(['paste-buffer', '-p', '-b', bufferName, '-t', session.name]);
|
|
151
|
+
await waitForPaneChange(session, beforePaste);
|
|
152
|
+
await runTmux(['send-keys', '-t', session.name, 'Enter']);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
pasteError = error;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
await runTmux(['delete-buffer', '-b', bufferName]);
|
|
159
|
+
}
|
|
160
|
+
catch (deleteError) {
|
|
161
|
+
if (!pasteError) {
|
|
162
|
+
throw deleteError;
|
|
163
|
+
}
|
|
164
|
+
log.error('Failed to delete Claude terminal tmux buffer after paste failure', {
|
|
165
|
+
buffer: bufferName,
|
|
166
|
+
error: getErrorMessage(deleteError),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
if (pasteError) {
|
|
170
|
+
throw pasteError;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async stop(session) {
|
|
174
|
+
await runTmux(['kill-session', '-t', session.name]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=tmux-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-backend.js","sourceRoot":"","sources":["../../../src/infra/claude-terminal/tmux-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ClaudeSessionRef, ClaudeTranscriptBaseline, ClaudeTerminalTranscript, ClaudeTranscriptReader, FindClaudeSessionOptions, WaitForClaudeResponseOptions } from './types.js';
|
|
2
|
+
interface ParseClaudeTerminalTranscriptOptions {
|
|
3
|
+
baseline?: ClaudeTranscriptBaseline;
|
|
4
|
+
allowIncompleteFinalLine?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseClaudeTerminalTranscript(transcript: string, options?: ParseClaudeTerminalTranscriptOptions): ClaudeTerminalTranscript;
|
|
7
|
+
export declare class ProjectClaudeTranscriptReader implements ClaudeTranscriptReader {
|
|
8
|
+
readBaseline(options: Pick<FindClaudeSessionOptions, 'cwd' | 'sessionId'>): Promise<ClaudeTranscriptBaseline>;
|
|
9
|
+
findSession(options: FindClaudeSessionOptions): Promise<ClaudeSessionRef>;
|
|
10
|
+
waitForAssistantResponse(options: WaitForClaudeResponseOptions): Promise<ClaudeTerminalTranscript>;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=transcript-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-reader.d.ts","sourceRoot":"","sources":["../../../src/infra/claude-terminal/transcript-reader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EAExB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AA6KpB,UAAU,oCAAoC;IAC5C,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAwCD,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,oCAAyC,GACjD,wBAAwB,CAgB1B;AA2GD,qBAAa,6BAA8B,YAAW,sBAAsB;IACpE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAW7G,WAAW,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBzE,wBAAwB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,wBAAwB,CAAC;CA+BzG"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { resolve, sep } from 'node:path';
|
|
3
|
+
import { setTimeout as sleep } from 'node:timers/promises';
|
|
4
|
+
import { getClaudeProjectSessionsDir } from '../config/project/sessionStore.js';
|
|
5
|
+
function toRecord(value) {
|
|
6
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
7
|
+
? value
|
|
8
|
+
: undefined;
|
|
9
|
+
}
|
|
10
|
+
function requireString(value, field) {
|
|
11
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
12
|
+
throw new Error(`Malformed Claude terminal transcript: ${field} must be a non-empty string.`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
function requireRecord(value, field) {
|
|
17
|
+
const record = toRecord(value);
|
|
18
|
+
if (!record) {
|
|
19
|
+
throw new Error(`Malformed Claude terminal transcript: ${field} must be an object.`);
|
|
20
|
+
}
|
|
21
|
+
return record;
|
|
22
|
+
}
|
|
23
|
+
function extractTextContent(content) {
|
|
24
|
+
if (!Array.isArray(content)) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return content.flatMap((item) => {
|
|
28
|
+
const record = toRecord(item);
|
|
29
|
+
return record?.type === 'text' && typeof record.text === 'string' ? [record.text] : [];
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function readQuestion(record, field) {
|
|
33
|
+
const question = requireString(record.question, `${field}.question`);
|
|
34
|
+
const output = { question };
|
|
35
|
+
if (typeof record.header === 'string') {
|
|
36
|
+
output.header = record.header;
|
|
37
|
+
}
|
|
38
|
+
if (typeof record.multiSelect === 'boolean') {
|
|
39
|
+
output.multiSelect = record.multiSelect;
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(record.options)) {
|
|
42
|
+
output.options = record.options.map((option, index) => {
|
|
43
|
+
const optionRecord = requireRecord(option, `${field}.options[${index}]`);
|
|
44
|
+
const parsed = { label: requireString(optionRecord.label, `${field}.options[${index}].label`) };
|
|
45
|
+
return typeof optionRecord.description === 'string'
|
|
46
|
+
? { ...parsed, description: optionRecord.description }
|
|
47
|
+
: parsed;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return output;
|
|
51
|
+
}
|
|
52
|
+
function readQuestions(input, field) {
|
|
53
|
+
if (!Array.isArray(input.questions) || input.questions.length === 0) {
|
|
54
|
+
throw new Error(`Malformed Claude terminal transcript: ${field}.questions must be a non-empty array.`);
|
|
55
|
+
}
|
|
56
|
+
return input.questions.map((question, index) => readQuestion(requireRecord(question, `${field}.questions[${index}]`), `${field}.questions[${index}]`));
|
|
57
|
+
}
|
|
58
|
+
function extractToolUseEvents(content) {
|
|
59
|
+
if (!Array.isArray(content)) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return content.flatMap((item) => {
|
|
63
|
+
const record = toRecord(item);
|
|
64
|
+
if (record?.type !== 'tool_use') {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const tool = requireString(record.name, 'tool_use.name');
|
|
68
|
+
const input = requireRecord(record.input, 'tool_use.input');
|
|
69
|
+
if (tool === 'AskUserQuestion') {
|
|
70
|
+
return [{
|
|
71
|
+
type: 'ask_user_question',
|
|
72
|
+
questions: readQuestions(input, 'tool_use.input'),
|
|
73
|
+
}];
|
|
74
|
+
}
|
|
75
|
+
return [{
|
|
76
|
+
type: 'tool_use',
|
|
77
|
+
id: requireString(record.id, 'tool_use.id'),
|
|
78
|
+
tool,
|
|
79
|
+
input,
|
|
80
|
+
}];
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function readSessionId(entry, currentSessionId) {
|
|
84
|
+
if (typeof entry.session_id === 'string' && entry.session_id.length > 0) {
|
|
85
|
+
return entry.session_id;
|
|
86
|
+
}
|
|
87
|
+
if (typeof entry.sessionId === 'string' && entry.sessionId.length > 0) {
|
|
88
|
+
return entry.sessionId;
|
|
89
|
+
}
|
|
90
|
+
return currentSessionId;
|
|
91
|
+
}
|
|
92
|
+
function appendTranscriptEntry(parsed, entry) {
|
|
93
|
+
const sessionId = readSessionId(entry, parsed.sessionId);
|
|
94
|
+
if (entry.type === 'assistant') {
|
|
95
|
+
const message = toRecord(entry.message);
|
|
96
|
+
const text = extractTextContent(message?.content);
|
|
97
|
+
const events = extractToolUseEvents(message?.content);
|
|
98
|
+
return {
|
|
99
|
+
sessionId,
|
|
100
|
+
assistantText: [...(parsed.assistantText ? [parsed.assistantText] : []), ...text].join('\n'),
|
|
101
|
+
events: [...parsed.events, ...events],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (entry.type === 'permission_request') {
|
|
105
|
+
return {
|
|
106
|
+
sessionId,
|
|
107
|
+
assistantText: parsed.assistantText,
|
|
108
|
+
events: [...parsed.events, {
|
|
109
|
+
type: 'permission_request',
|
|
110
|
+
tool: requireString(entry.tool, 'permission_request.tool'),
|
|
111
|
+
input: requireRecord(entry.input, 'permission_request.input'),
|
|
112
|
+
}],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (entry.type === 'ask_user_question') {
|
|
116
|
+
return {
|
|
117
|
+
sessionId,
|
|
118
|
+
assistantText: parsed.assistantText,
|
|
119
|
+
events: [...parsed.events, {
|
|
120
|
+
type: 'ask_user_question',
|
|
121
|
+
questions: [{
|
|
122
|
+
question: requireString(entry.question, 'ask_user_question.question'),
|
|
123
|
+
}],
|
|
124
|
+
}],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return { ...parsed, sessionId };
|
|
128
|
+
}
|
|
129
|
+
function parseTranscriptLineForPolling(line, lineNumber, allowIncomplete) {
|
|
130
|
+
try {
|
|
131
|
+
return requireRecord(JSON.parse(line), `line ${lineNumber}`);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof SyntaxError && allowIncomplete) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
if (error instanceof SyntaxError) {
|
|
138
|
+
throw new Error(`Malformed Claude terminal transcript JSON at line ${lineNumber}: ${error.message}`);
|
|
139
|
+
}
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function countLineNumberOffset(transcript) {
|
|
144
|
+
return [...transcript.matchAll(/\n/g)].length;
|
|
145
|
+
}
|
|
146
|
+
function transcriptSinceBaseline(transcript, baseline) {
|
|
147
|
+
if (!baseline) {
|
|
148
|
+
return transcript;
|
|
149
|
+
}
|
|
150
|
+
const transcriptBytes = Buffer.from(transcript, 'utf-8');
|
|
151
|
+
if (transcriptBytes.byteLength < baseline.byteOffset) {
|
|
152
|
+
throw new Error('Malformed Claude terminal transcript: transcript is shorter than the response baseline.');
|
|
153
|
+
}
|
|
154
|
+
return transcriptBytes.subarray(baseline.byteOffset).toString('utf-8');
|
|
155
|
+
}
|
|
156
|
+
function hasFinalNewline(transcript) {
|
|
157
|
+
return transcript.endsWith('\n') || transcript.endsWith('\r');
|
|
158
|
+
}
|
|
159
|
+
function canIgnoreLineParseError(index, lines, transcript, allowIncompleteFinalLine) {
|
|
160
|
+
return allowIncompleteFinalLine === true
|
|
161
|
+
&& !hasFinalNewline(transcript)
|
|
162
|
+
&& index === lines.length - 1;
|
|
163
|
+
}
|
|
164
|
+
function hasCompletionEntry(transcript, options) {
|
|
165
|
+
const { baseline, allowIncompleteFinalLine } = options;
|
|
166
|
+
const lineNumberOffset = baseline.lineNumberOffset;
|
|
167
|
+
const transcriptBody = transcriptSinceBaseline(transcript, baseline);
|
|
168
|
+
const lines = transcriptBody.split(/\r?\n/);
|
|
169
|
+
return lines.some((rawLine, index) => {
|
|
170
|
+
const line = rawLine.trim();
|
|
171
|
+
if (line.length === 0) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const entry = parseTranscriptLineForPolling(line, index + 1 + lineNumberOffset, canIgnoreLineParseError(index, lines, transcriptBody, allowIncompleteFinalLine));
|
|
175
|
+
return entry?.type === 'result'
|
|
176
|
+
|| (entry?.type === 'system' && entry.subtype === 'turn_duration');
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
export function parseClaudeTerminalTranscript(transcript, options = {}) {
|
|
180
|
+
const lineNumberOffset = options.baseline?.lineNumberOffset ?? 0;
|
|
181
|
+
const transcriptBody = transcriptSinceBaseline(transcript, options.baseline);
|
|
182
|
+
const lines = transcriptBody.split(/\r?\n/);
|
|
183
|
+
return lines.reduce((parsed, rawLine, index) => {
|
|
184
|
+
const line = rawLine.trim();
|
|
185
|
+
if (line.length === 0) {
|
|
186
|
+
return parsed;
|
|
187
|
+
}
|
|
188
|
+
const entry = parseTranscriptLineForPolling(line, index + 1 + lineNumberOffset, canIgnoreLineParseError(index, lines, transcriptBody, options.allowIncompleteFinalLine));
|
|
189
|
+
return entry ? appendTranscriptEntry(parsed, entry) : parsed;
|
|
190
|
+
}, { sessionId: '', assistantText: '', events: [] });
|
|
191
|
+
}
|
|
192
|
+
function hasBlockingInteractiveEvent(transcript) {
|
|
193
|
+
return transcript.events.some((event) => event.type === 'permission_request' || event.type === 'ask_user_question');
|
|
194
|
+
}
|
|
195
|
+
function withSessionIdFallback(transcript, sessionId) {
|
|
196
|
+
return transcript.sessionId ? transcript : { ...transcript, sessionId };
|
|
197
|
+
}
|
|
198
|
+
function throwIfAborted(signal) {
|
|
199
|
+
if (!signal?.aborted) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (signal.reason instanceof Error) {
|
|
203
|
+
throw signal.reason;
|
|
204
|
+
}
|
|
205
|
+
if (typeof signal.reason === 'string' && signal.reason.length > 0) {
|
|
206
|
+
throw new Error(signal.reason);
|
|
207
|
+
}
|
|
208
|
+
throw new Error('Claude terminal transcript polling aborted.');
|
|
209
|
+
}
|
|
210
|
+
async function sleepWithAbort(pollIntervalMs, signal) {
|
|
211
|
+
throwIfAborted(signal);
|
|
212
|
+
try {
|
|
213
|
+
if (signal) {
|
|
214
|
+
await sleep(pollIntervalMs, undefined, { signal });
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
await sleep(pollIntervalMs);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
if (signal?.aborted) {
|
|
221
|
+
throwIfAborted(signal);
|
|
222
|
+
}
|
|
223
|
+
throw error;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async function pollUntil(timeoutMs, pollIntervalMs, abortSignal, attempt, timeoutMessage) {
|
|
227
|
+
const deadline = Date.now() + timeoutMs;
|
|
228
|
+
throwIfAborted(abortSignal);
|
|
229
|
+
while (Date.now() <= deadline) {
|
|
230
|
+
throwIfAborted(abortSignal);
|
|
231
|
+
const value = await attempt();
|
|
232
|
+
throwIfAborted(abortSignal);
|
|
233
|
+
if (value !== undefined) {
|
|
234
|
+
return value;
|
|
235
|
+
}
|
|
236
|
+
await sleepWithAbort(pollIntervalMs, abortSignal);
|
|
237
|
+
throwIfAborted(abortSignal);
|
|
238
|
+
}
|
|
239
|
+
throwIfAborted(abortSignal);
|
|
240
|
+
throw new Error(timeoutMessage);
|
|
241
|
+
}
|
|
242
|
+
function requireSafeSessionFilename(sessionId) {
|
|
243
|
+
if (sessionId.length === 0
|
|
244
|
+
|| sessionId === '.'
|
|
245
|
+
|| sessionId === '..'
|
|
246
|
+
|| sessionId.includes('/')
|
|
247
|
+
|| sessionId.includes('\\')) {
|
|
248
|
+
throw new Error('Invalid Claude terminal session id: session id must be a single transcript filename.');
|
|
249
|
+
}
|
|
250
|
+
return `${sessionId}.jsonl`;
|
|
251
|
+
}
|
|
252
|
+
function transcriptPath(cwd, sessionId) {
|
|
253
|
+
const baseDir = resolve(getClaudeProjectSessionsDir(cwd));
|
|
254
|
+
const resolvedPath = resolve(baseDir, requireSafeSessionFilename(sessionId));
|
|
255
|
+
if (!resolvedPath.startsWith(`${baseDir}${sep}`)) {
|
|
256
|
+
throw new Error('Invalid Claude terminal session id: transcript path escapes the project session directory.');
|
|
257
|
+
}
|
|
258
|
+
return resolvedPath;
|
|
259
|
+
}
|
|
260
|
+
function isFileMissing(error) {
|
|
261
|
+
return error !== null
|
|
262
|
+
&& typeof error === 'object'
|
|
263
|
+
&& 'code' in error
|
|
264
|
+
&& error.code === 'ENOENT';
|
|
265
|
+
}
|
|
266
|
+
async function readTranscript(cwd, sessionId) {
|
|
267
|
+
try {
|
|
268
|
+
return await readFile(transcriptPath(cwd, sessionId), 'utf-8');
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
if (isFileMissing(error)) {
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
export class ProjectClaudeTranscriptReader {
|
|
278
|
+
async readBaseline(options) {
|
|
279
|
+
const transcript = await readTranscript(options.cwd, options.sessionId);
|
|
280
|
+
if (transcript === undefined) {
|
|
281
|
+
return { byteOffset: 0, lineNumberOffset: 0 };
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
byteOffset: Buffer.byteLength(transcript, 'utf-8'),
|
|
285
|
+
lineNumberOffset: countLineNumberOffset(transcript),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
async findSession(options) {
|
|
289
|
+
return pollUntil(options.timeoutMs, options.pollIntervalMs, options.abortSignal, async () => {
|
|
290
|
+
const transcript = await readTranscript(options.cwd, options.sessionId);
|
|
291
|
+
if (transcript === undefined || transcript.trim().length === 0) {
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
const parsed = parseClaudeTerminalTranscript(transcript, {
|
|
295
|
+
allowIncompleteFinalLine: true,
|
|
296
|
+
});
|
|
297
|
+
if (!parsed.sessionId && !parsed.assistantText && parsed.events.length === 0) {
|
|
298
|
+
return undefined;
|
|
299
|
+
}
|
|
300
|
+
return { sessionId: parsed.sessionId || options.sessionId };
|
|
301
|
+
}, 'Timed out waiting for Claude terminal session id.');
|
|
302
|
+
}
|
|
303
|
+
async waitForAssistantResponse(options) {
|
|
304
|
+
return pollUntil(options.timeoutMs, options.pollIntervalMs, options.abortSignal, async () => {
|
|
305
|
+
const transcript = await readTranscript(options.cwd, options.session.sessionId);
|
|
306
|
+
if (transcript === undefined || transcript.trim().length === 0) {
|
|
307
|
+
return undefined;
|
|
308
|
+
}
|
|
309
|
+
const parsed = parseClaudeTerminalTranscript(transcript, {
|
|
310
|
+
baseline: options.baseline,
|
|
311
|
+
allowIncompleteFinalLine: true,
|
|
312
|
+
});
|
|
313
|
+
if (hasBlockingInteractiveEvent(parsed)) {
|
|
314
|
+
return withSessionIdFallback(parsed, options.session.sessionId);
|
|
315
|
+
}
|
|
316
|
+
if (!parsed.assistantText) {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
if (!hasCompletionEntry(transcript, {
|
|
320
|
+
baseline: options.baseline,
|
|
321
|
+
allowIncompleteFinalLine: true,
|
|
322
|
+
})) {
|
|
323
|
+
return undefined;
|
|
324
|
+
}
|
|
325
|
+
return withSessionIdFallback(parsed, options.session.sessionId);
|
|
326
|
+
}, 'Timed out waiting for Claude terminal assistant response.');
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=transcript-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-reader.js","sourceRoot":"","sources":["../../../src/infra/claude-terminal/transcript-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { McpServerConfig, PermissionMode } from '../../core/models/index.js';
|
|
2
|
+
import type { ClaudeEffort } from '../../core/models/workflow-types.js';
|
|
3
|
+
import type { PermissionHandler, AskUserQuestionHandler, AskUserQuestionInput } from '../../core/workflow/types.js';
|
|
4
|
+
import type { StreamCallback } from '../../shared/types/provider.js';
|
|
5
|
+
export type ClaudeTerminalBackendName = 'tmux';
|
|
6
|
+
export interface ClaudeTerminalCommand {
|
|
7
|
+
executable: string;
|
|
8
|
+
args: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface TerminalSession {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
}
|
|
14
|
+
export interface TerminalStartOptions {
|
|
15
|
+
cwd: string;
|
|
16
|
+
backend: ClaudeTerminalBackendName;
|
|
17
|
+
command: ClaudeTerminalCommand;
|
|
18
|
+
}
|
|
19
|
+
export interface TerminalBackend {
|
|
20
|
+
start(options: TerminalStartOptions): Promise<TerminalSession>;
|
|
21
|
+
pasteText(session: TerminalSession, text: string): Promise<void>;
|
|
22
|
+
stop(session: TerminalSession): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export type ClaudeTerminalEvent = {
|
|
25
|
+
type: 'tool_use';
|
|
26
|
+
id: string;
|
|
27
|
+
tool: string;
|
|
28
|
+
input: Record<string, unknown>;
|
|
29
|
+
} | {
|
|
30
|
+
type: 'permission_request';
|
|
31
|
+
tool: string;
|
|
32
|
+
input: Record<string, unknown>;
|
|
33
|
+
} | {
|
|
34
|
+
type: 'ask_user_question';
|
|
35
|
+
questions: AskUserQuestionInput['questions'];
|
|
36
|
+
};
|
|
37
|
+
export interface ClaudeTerminalTranscript {
|
|
38
|
+
sessionId: string;
|
|
39
|
+
assistantText: string;
|
|
40
|
+
events: ClaudeTerminalEvent[];
|
|
41
|
+
}
|
|
42
|
+
export interface ClaudeTranscriptBaseline {
|
|
43
|
+
byteOffset: number;
|
|
44
|
+
lineNumberOffset: number;
|
|
45
|
+
}
|
|
46
|
+
export interface ClaudeSessionRef {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
}
|
|
49
|
+
export interface FindClaudeSessionOptions {
|
|
50
|
+
cwd: string;
|
|
51
|
+
sessionId: string;
|
|
52
|
+
timeoutMs: number;
|
|
53
|
+
pollIntervalMs: number;
|
|
54
|
+
abortSignal?: AbortSignal;
|
|
55
|
+
}
|
|
56
|
+
export interface WaitForClaudeResponseOptions {
|
|
57
|
+
session: ClaudeSessionRef;
|
|
58
|
+
baseline: ClaudeTranscriptBaseline;
|
|
59
|
+
cwd: string;
|
|
60
|
+
timeoutMs: number;
|
|
61
|
+
pollIntervalMs: number;
|
|
62
|
+
abortSignal?: AbortSignal;
|
|
63
|
+
}
|
|
64
|
+
export interface ClaudeTranscriptReader {
|
|
65
|
+
readBaseline(options: Pick<FindClaudeSessionOptions, 'cwd' | 'sessionId'>): Promise<ClaudeTranscriptBaseline>;
|
|
66
|
+
findSession(options: FindClaudeSessionOptions): Promise<ClaudeSessionRef>;
|
|
67
|
+
waitForAssistantResponse(options: WaitForClaudeResponseOptions): Promise<ClaudeTerminalTranscript>;
|
|
68
|
+
}
|
|
69
|
+
export interface ClaudeTerminalCallOptions {
|
|
70
|
+
cwd: string;
|
|
71
|
+
abortSignal?: AbortSignal;
|
|
72
|
+
sessionId?: string;
|
|
73
|
+
model?: string;
|
|
74
|
+
effort?: ClaudeEffort;
|
|
75
|
+
allowedTools?: string[];
|
|
76
|
+
mcpServers?: Record<string, McpServerConfig>;
|
|
77
|
+
maxTurns?: number;
|
|
78
|
+
permissionMode?: PermissionMode;
|
|
79
|
+
bypassPermissions?: boolean;
|
|
80
|
+
backend?: ClaudeTerminalBackendName;
|
|
81
|
+
timeoutMs?: number;
|
|
82
|
+
keepSession?: boolean;
|
|
83
|
+
transcriptPollIntervalMs?: number;
|
|
84
|
+
onStream?: StreamCallback;
|
|
85
|
+
onPermissionRequest?: PermissionHandler;
|
|
86
|
+
onAskUserQuestion?: AskUserQuestionHandler;
|
|
87
|
+
outputSchema?: Record<string, unknown>;
|
|
88
|
+
systemPrompt?: string;
|
|
89
|
+
pathToClaudeCodeExecutable?: string;
|
|
90
|
+
terminalBackend?: TerminalBackend;
|
|
91
|
+
transcriptReader?: ClaudeTranscriptReader;
|
|
92
|
+
}
|
|
93
|
+
export interface BuildClaudeTerminalCommandOptions {
|
|
94
|
+
pathToClaudeCodeExecutable?: string;
|
|
95
|
+
model?: string;
|
|
96
|
+
effort?: ClaudeEffort;
|
|
97
|
+
allowedTools?: string[];
|
|
98
|
+
mcpConfigPath?: string;
|
|
99
|
+
permissionMode?: PermissionMode;
|
|
100
|
+
bypassPermissions?: boolean;
|
|
101
|
+
sessionId?: string;
|
|
102
|
+
newSessionId?: string;
|
|
103
|
+
systemPrompt?: string;
|
|
104
|
+
outputSchema?: Record<string, unknown>;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=types.d.ts.map
|