takt 0.3.9 → 0.4.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 +364 -325
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/runner.d.ts +0 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +6 -5
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/types.d.ts +3 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/app/cli/commands.d.ts +1 -1
- package/dist/app/cli/commands.js +9 -1
- package/dist/app/cli/commands.js.map +1 -1
- package/dist/app/cli/routing.js +1 -0
- package/dist/app/cli/routing.js.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/schemas.d.ts +8 -6
- package/dist/core/models/schemas.d.ts.map +1 -1
- package/dist/core/models/schemas.js +16 -15
- package/dist/core/models/schemas.js.map +1 -1
- package/dist/core/models/types.d.ts +1 -1
- package/dist/core/models/types.d.ts.map +1 -1
- package/dist/core/models/workflow-types.d.ts +26 -24
- package/dist/core/models/workflow-types.d.ts.map +1 -1
- package/dist/core/workflow/constants.d.ts +7 -7
- package/dist/core/workflow/constants.d.ts.map +1 -1
- package/dist/core/workflow/constants.js +7 -7
- package/dist/core/workflow/constants.js.map +1 -1
- package/dist/core/workflow/engine/MovementExecutor.d.ts +59 -0
- package/dist/core/workflow/engine/MovementExecutor.d.ts.map +1 -0
- package/dist/core/workflow/engine/{StepExecutor.js → MovementExecutor.js} +30 -25
- package/dist/core/workflow/engine/MovementExecutor.js.map +1 -0
- package/dist/core/workflow/engine/OptionsBuilder.d.ts +6 -6
- package/dist/core/workflow/engine/OptionsBuilder.d.ts.map +1 -1
- package/dist/core/workflow/engine/OptionsBuilder.js +8 -3
- package/dist/core/workflow/engine/OptionsBuilder.js.map +1 -1
- package/dist/core/workflow/engine/ParallelRunner.d.ts +12 -10
- package/dist/core/workflow/engine/ParallelRunner.d.ts.map +1 -1
- package/dist/core/workflow/engine/ParallelRunner.js +46 -41
- package/dist/core/workflow/engine/ParallelRunner.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngine.d.ts +16 -16
- package/dist/core/workflow/engine/WorkflowEngine.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngine.js +105 -92
- package/dist/core/workflow/engine/WorkflowEngine.js.map +1 -1
- package/dist/core/workflow/engine/blocked-handler.d.ts +3 -3
- package/dist/core/workflow/engine/blocked-handler.d.ts.map +1 -1
- package/dist/core/workflow/engine/blocked-handler.js +2 -2
- package/dist/core/workflow/engine/blocked-handler.js.map +1 -1
- package/dist/core/workflow/engine/index.d.ts +2 -1
- package/dist/core/workflow/engine/index.d.ts.map +1 -1
- package/dist/core/workflow/engine/index.js +1 -1
- package/dist/core/workflow/engine/index.js.map +1 -1
- package/dist/core/workflow/engine/loop-detector.d.ts +5 -5
- package/dist/core/workflow/engine/loop-detector.d.ts.map +1 -1
- package/dist/core/workflow/engine/loop-detector.js +8 -8
- package/dist/core/workflow/engine/loop-detector.js.map +1 -1
- package/dist/core/workflow/engine/parallel-logger.d.ts +15 -15
- package/dist/core/workflow/engine/parallel-logger.d.ts.map +1 -1
- package/dist/core/workflow/engine/parallel-logger.js +22 -21
- package/dist/core/workflow/engine/parallel-logger.js.map +1 -1
- package/dist/core/workflow/engine/state-manager.d.ts +6 -6
- package/dist/core/workflow/engine/state-manager.d.ts.map +1 -1
- package/dist/core/workflow/engine/state-manager.js +15 -16
- package/dist/core/workflow/engine/state-manager.js.map +1 -1
- package/dist/core/workflow/engine/transitions.d.ts +5 -5
- package/dist/core/workflow/engine/transitions.d.ts.map +1 -1
- package/dist/core/workflow/engine/transitions.js +4 -4
- package/dist/core/workflow/engine/transitions.js.map +1 -1
- package/dist/core/workflow/evaluation/AggregateEvaluator.d.ts +15 -15
- package/dist/core/workflow/evaluation/AggregateEvaluator.d.ts.map +1 -1
- package/dist/core/workflow/evaluation/AggregateEvaluator.js +35 -33
- package/dist/core/workflow/evaluation/AggregateEvaluator.js.map +1 -1
- package/dist/core/workflow/evaluation/RuleEvaluator.d.ts +8 -8
- package/dist/core/workflow/evaluation/RuleEvaluator.d.ts.map +1 -1
- package/dist/core/workflow/evaluation/RuleEvaluator.js +18 -14
- package/dist/core/workflow/evaluation/RuleEvaluator.js.map +1 -1
- package/dist/core/workflow/evaluation/index.d.ts +4 -4
- package/dist/core/workflow/evaluation/index.d.ts.map +1 -1
- package/dist/core/workflow/evaluation/index.js +1 -1
- package/dist/core/workflow/evaluation/index.js.map +1 -1
- package/dist/core/workflow/evaluation/rule-utils.d.ts +4 -4
- package/dist/core/workflow/evaluation/rule-utils.d.ts.map +1 -1
- package/dist/core/workflow/evaluation/rule-utils.js +2 -2
- package/dist/core/workflow/evaluation/rule-utils.js.map +1 -1
- package/dist/core/workflow/index.d.ts +6 -6
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +5 -5
- package/dist/core/workflow/index.js.map +1 -1
- package/dist/core/workflow/instruction/InstructionBuilder.d.ts +17 -15
- package/dist/core/workflow/instruction/InstructionBuilder.d.ts.map +1 -1
- package/dist/core/workflow/instruction/InstructionBuilder.js +105 -120
- package/dist/core/workflow/instruction/InstructionBuilder.js.map +1 -1
- package/dist/core/workflow/instruction/ReportInstructionBuilder.d.ts +10 -11
- package/dist/core/workflow/instruction/ReportInstructionBuilder.d.ts.map +1 -1
- package/dist/core/workflow/instruction/ReportInstructionBuilder.js +38 -84
- package/dist/core/workflow/instruction/ReportInstructionBuilder.js.map +1 -1
- package/dist/core/workflow/instruction/StatusJudgmentBuilder.d.ts +6 -5
- package/dist/core/workflow/instruction/StatusJudgmentBuilder.d.ts.map +1 -1
- package/dist/core/workflow/instruction/StatusJudgmentBuilder.js +14 -22
- package/dist/core/workflow/instruction/StatusJudgmentBuilder.js.map +1 -1
- package/dist/core/workflow/instruction/escape.d.ts +3 -3
- package/dist/core/workflow/instruction/escape.d.ts.map +1 -1
- package/dist/core/workflow/instruction/escape.js +3 -3
- package/dist/core/workflow/instruction/escape.js.map +1 -1
- package/dist/core/workflow/instruction/instruction-context.d.ts +16 -49
- package/dist/core/workflow/instruction/instruction-context.d.ts.map +1 -1
- package/dist/core/workflow/instruction/instruction-context.js +17 -62
- package/dist/core/workflow/instruction/instruction-context.js.map +1 -1
- package/dist/core/workflow/instruction/status-rules.d.ts +19 -14
- package/dist/core/workflow/instruction/status-rules.d.ts.map +1 -1
- package/dist/core/workflow/instruction/status-rules.js +47 -66
- package/dist/core/workflow/instruction/status-rules.js.map +1 -1
- package/dist/core/workflow/phase-runner.d.ts +14 -8
- package/dist/core/workflow/phase-runner.d.ts.map +1 -1
- package/dist/core/workflow/phase-runner.js +75 -78
- package/dist/core/workflow/phase-runner.js.map +1 -1
- package/dist/core/workflow/types.d.ts +15 -12
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/features/config/ejectBuiltin.js +3 -3
- package/dist/features/config/ejectBuiltin.js.map +1 -1
- package/dist/features/interactive/interactive.d.ts.map +1 -1
- package/dist/features/interactive/interactive.js +38 -169
- package/dist/features/interactive/interactive.js.map +1 -1
- package/dist/features/prompt/index.d.ts +5 -0
- package/dist/features/prompt/index.d.ts.map +1 -0
- package/dist/features/prompt/index.js +5 -0
- package/dist/features/prompt/index.js.map +1 -0
- package/dist/features/prompt/preview.d.ts +14 -0
- package/dist/features/prompt/preview.d.ts.map +1 -0
- package/dist/features/prompt/preview.js +74 -0
- package/dist/features/prompt/preview.js.map +1 -0
- package/dist/features/tasks/add/index.d.ts +6 -9
- package/dist/features/tasks/add/index.d.ts.map +1 -1
- package/dist/features/tasks/add/index.js +23 -55
- package/dist/features/tasks/add/index.js.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.js +1 -0
- package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
- package/dist/features/tasks/execute/taskExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/taskExecution.js +4 -3
- package/dist/features/tasks/execute/taskExecution.js.map +1 -1
- package/dist/features/tasks/execute/types.d.ts +13 -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 +63 -18
- package/dist/features/tasks/execute/workflowExecution.js.map +1 -1
- package/dist/features/tasks/index.d.ts +1 -1
- package/dist/features/tasks/index.d.ts.map +1 -1
- package/dist/features/tasks/index.js +1 -1
- package/dist/features/tasks/index.js.map +1 -1
- package/dist/features/tasks/list/index.d.ts.map +1 -1
- package/dist/features/tasks/list/index.js +0 -1
- package/dist/features/tasks/list/index.js.map +1 -1
- package/dist/features/tasks/list/taskActions.d.ts +1 -0
- package/dist/features/tasks/list/taskActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskActions.js +24 -1
- package/dist/features/tasks/list/taskActions.js.map +1 -1
- package/dist/features/workflowSelection/index.js +1 -1
- package/dist/features/workflowSelection/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/claude/client.d.ts +1 -1
- package/dist/infra/claude/client.d.ts.map +1 -1
- package/dist/infra/claude/client.js +6 -24
- package/dist/infra/claude/client.js.map +1 -1
- package/dist/infra/claude/executor.d.ts +0 -1
- package/dist/infra/claude/executor.d.ts.map +1 -1
- package/dist/infra/claude/executor.js +0 -2
- package/dist/infra/claude/executor.js.map +1 -1
- package/dist/infra/claude/index.js +2 -2
- package/dist/infra/claude/index.js.map +1 -1
- package/dist/infra/claude/options-builder.js +4 -4
- package/dist/infra/claude/options-builder.js.map +1 -1
- package/dist/infra/claude/process.d.ts +1 -1
- package/dist/infra/claude/process.d.ts.map +1 -1
- package/dist/infra/claude/process.js +1 -1
- package/dist/infra/claude/process.js.map +1 -1
- package/dist/infra/claude/query-manager.d.ts +1 -1
- package/dist/infra/claude/query-manager.d.ts.map +1 -1
- package/dist/infra/claude/query-manager.js +1 -2
- package/dist/infra/claude/query-manager.js.map +1 -1
- package/dist/infra/claude/stream-converter.d.ts +2 -2
- package/dist/infra/claude/stream-converter.js +2 -2
- package/dist/infra/claude/types.d.ts +1 -1
- package/dist/infra/claude/types.d.ts.map +1 -1
- package/dist/infra/codex/client.d.ts.map +1 -1
- package/dist/infra/codex/client.js +0 -1
- package/dist/infra/codex/client.js.map +1 -1
- package/dist/infra/config/global/globalConfig.d.ts.map +1 -1
- package/dist/infra/config/global/globalConfig.js +0 -1
- package/dist/infra/config/global/globalConfig.js.map +1 -1
- package/dist/infra/config/loaders/agentLoader.d.ts +1 -1
- package/dist/infra/config/loaders/agentLoader.d.ts.map +1 -1
- package/dist/infra/config/loaders/agentLoader.js +6 -5
- package/dist/infra/config/loaders/agentLoader.js.map +1 -1
- package/dist/infra/config/loaders/loader.d.ts +1 -1
- package/dist/infra/config/loaders/loader.js +1 -1
- package/dist/infra/config/loaders/workflowParser.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowParser.js +9 -5
- package/dist/infra/config/loaders/workflowParser.js.map +1 -1
- package/dist/infra/config/loaders/workflowResolver.d.ts +4 -4
- package/dist/infra/config/loaders/workflowResolver.js +11 -11
- package/dist/infra/config/loaders/workflowResolver.js.map +1 -1
- package/dist/infra/config/paths.d.ts +4 -4
- package/dist/infra/config/paths.d.ts.map +1 -1
- package/dist/infra/config/paths.js +7 -7
- package/dist/infra/config/paths.js.map +1 -1
- package/dist/infra/config/project/index.d.ts +1 -1
- package/dist/infra/config/project/index.d.ts.map +1 -1
- package/dist/infra/config/project/index.js.map +1 -1
- package/dist/infra/config/project/projectConfig.d.ts +2 -2
- package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
- package/dist/infra/config/types.d.ts +0 -2
- package/dist/infra/config/types.d.ts.map +1 -1
- package/dist/infra/fs/index.d.ts +1 -1
- package/dist/infra/fs/index.d.ts.map +1 -1
- package/dist/infra/fs/index.js.map +1 -1
- package/dist/infra/fs/session.d.ts +1 -1
- package/dist/infra/fs/session.d.ts.map +1 -1
- package/dist/infra/fs/session.js +0 -1
- package/dist/infra/fs/session.js.map +1 -1
- package/dist/infra/providers/index.d.ts.map +1 -1
- package/dist/infra/providers/index.js +0 -1
- package/dist/infra/providers/index.js.map +1 -1
- package/dist/infra/task/autoCommit.js +1 -1
- package/dist/infra/task/autoCommit.js.map +1 -1
- package/dist/infra/task/branchList.d.ts +4 -2
- package/dist/infra/task/branchList.d.ts.map +1 -1
- package/dist/infra/task/branchList.js +87 -9
- package/dist/infra/task/branchList.js.map +1 -1
- package/dist/infra/task/clone.js +1 -1
- package/dist/infra/task/clone.js.map +1 -1
- package/dist/infra/task/parser.d.ts +1 -1
- package/dist/infra/task/parser.js +1 -1
- package/dist/infra/task/summarize.d.ts.map +1 -1
- package/dist/infra/task/summarize.js +3 -15
- package/dist/infra/task/summarize.js.map +1 -1
- package/dist/infra/task/types.d.ts +1 -0
- package/dist/infra/task/types.d.ts.map +1 -1
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/context.js +0 -1
- package/dist/shared/context.js.map +1 -1
- package/dist/shared/i18n/index.d.ts +31 -0
- package/dist/shared/i18n/index.d.ts.map +1 -0
- package/dist/shared/i18n/index.js +97 -0
- package/dist/shared/i18n/index.js.map +1 -0
- package/dist/shared/i18n/labels_en.yaml +37 -0
- package/dist/shared/i18n/labels_ja.yaml +37 -0
- package/dist/shared/prompt/select.d.ts +0 -3
- package/dist/shared/prompt/select.d.ts.map +1 -1
- package/dist/shared/prompt/select.js +5 -20
- package/dist/shared/prompt/select.js.map +1 -1
- package/dist/shared/prompts/en/perform_agent_system_prompt.md +7 -0
- package/dist/shared/prompts/en/perform_builtin_agent_system_prompt.md +7 -0
- package/dist/shared/prompts/en/perform_judge_message.md +24 -0
- package/dist/shared/prompts/en/perform_phase1_message.md +45 -0
- package/dist/shared/prompts/en/perform_phase2_message.md +31 -0
- package/dist/shared/prompts/en/perform_phase3_message.md +19 -0
- package/dist/shared/prompts/en/score_interactive_system_prompt.md +53 -0
- package/dist/shared/prompts/en/score_slug_system_prompt.md +19 -0
- package/dist/shared/prompts/en/score_summary_system_prompt.md +25 -0
- package/dist/shared/prompts/index.d.ts +27 -0
- package/dist/shared/prompts/index.d.ts.map +1 -0
- package/dist/shared/prompts/index.js +111 -0
- package/dist/shared/prompts/index.js.map +1 -0
- package/dist/shared/prompts/ja/perform_agent_system_prompt.md +7 -0
- package/dist/shared/prompts/ja/perform_builtin_agent_system_prompt.md +7 -0
- package/dist/shared/prompts/ja/perform_judge_message.md +24 -0
- package/dist/shared/prompts/ja/perform_phase1_message.md +44 -0
- package/dist/shared/prompts/ja/perform_phase2_message.md +30 -0
- package/dist/shared/prompts/ja/perform_phase3_message.md +19 -0
- package/dist/shared/prompts/ja/score_interactive_system_prompt.md +59 -0
- package/dist/shared/prompts/ja/score_slug_system_prompt.md +19 -0
- package/dist/shared/prompts/ja/score_summary_system_prompt.md +32 -0
- package/dist/shared/ui/LogManager.d.ts +1 -1
- package/dist/shared/ui/LogManager.d.ts.map +1 -1
- package/dist/shared/ui/LogManager.js +1 -2
- package/dist/shared/ui/LogManager.js.map +1 -1
- package/dist/shared/utils/debug.js +1 -1
- package/dist/shared/utils/debug.js.map +1 -1
- package/dist/shared/utils/types.d.ts +29 -1
- package/dist/shared/utils/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/resources/global/en/{workflows → pieces}/default.yaml +16 -16
- package/resources/global/en/{workflows → pieces}/expert-cqrs.yaml +17 -17
- package/resources/global/en/{workflows → pieces}/expert.yaml +20 -20
- package/resources/global/en/{workflows → pieces}/magi.yaml +4 -4
- package/resources/global/en/{workflows → pieces}/minimal.yaml +7 -7
- package/resources/global/en/{workflows → pieces}/research.yaml +11 -11
- package/resources/global/en/{workflows → pieces}/review-fix-minimal.yaml +8 -8
- package/resources/global/en/{workflows → pieces}/review-only.yaml +7 -7
- package/resources/global/ja/agents/default/architecture-reviewer.md +3 -3
- package/resources/global/ja/agents/default/supervisor.md +1 -1
- package/resources/global/ja/agents/templates/planner.md +1 -1
- package/resources/global/ja/{workflows → pieces}/default.yaml +12 -12
- package/resources/global/ja/{workflows → pieces}/expert-cqrs.yaml +18 -18
- package/resources/global/ja/{workflows → pieces}/expert.yaml +15 -15
- package/resources/global/ja/{workflows → pieces}/magi.yaml +4 -4
- package/resources/global/ja/{workflows → pieces}/minimal.yaml +8 -8
- package/resources/global/ja/{workflows → pieces}/research.yaml +11 -11
- package/resources/global/ja/{workflows → pieces}/review-fix-minimal.yaml +8 -8
- package/resources/global/ja/{workflows → pieces}/review-only.yaml +7 -7
- package/dist/core/workflow/engine/StepExecutor.d.ts +0 -52
- package/dist/core/workflow/engine/StepExecutor.d.ts.map +0 -1
- package/dist/core/workflow/engine/StepExecutor.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/workflow/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/workflow/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,mCAAmC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,qBAAqB;AACrB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa,EAAE,CAAC,YAAoB,EAAE,KAAa,EAAE,EAAE,CACrD,4BAA4B,YAAY,SAAS,KAAK,wCAAwC;IAChG,gBAAgB,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,qBAAqB,YAAY,EAAE;IAC/E,yBAAyB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,8BAA8B,OAAO,EAAE;IACvF,sBAAsB,EAAE,wBAAwB;CACjD,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executes a single workflow movement through the 3-phase model.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1: Main agent execution (with tools)
|
|
5
|
+
* Phase 2: Report output (Write-only, optional)
|
|
6
|
+
* Phase 3: Status judgment (no tools, optional)
|
|
7
|
+
*/
|
|
8
|
+
import type { WorkflowMovement, WorkflowState, AgentResponse, Language } from '../../models/types.js';
|
|
9
|
+
import type { PhaseName } from '../types.js';
|
|
10
|
+
import type { OptionsBuilder } from './OptionsBuilder.js';
|
|
11
|
+
export interface MovementExecutorDeps {
|
|
12
|
+
readonly optionsBuilder: OptionsBuilder;
|
|
13
|
+
readonly getCwd: () => string;
|
|
14
|
+
readonly getProjectCwd: () => string;
|
|
15
|
+
readonly getReportDir: () => string;
|
|
16
|
+
readonly getLanguage: () => Language | undefined;
|
|
17
|
+
readonly getInteractive: () => boolean;
|
|
18
|
+
readonly getWorkflowMovements: () => ReadonlyArray<{
|
|
19
|
+
name: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
}>;
|
|
22
|
+
readonly detectRuleIndex: (content: string, movementName: string) => number;
|
|
23
|
+
readonly callAiJudge: (agentOutput: string, conditions: Array<{
|
|
24
|
+
index: number;
|
|
25
|
+
text: string;
|
|
26
|
+
}>, options: {
|
|
27
|
+
cwd: string;
|
|
28
|
+
}) => Promise<number>;
|
|
29
|
+
readonly onPhaseStart?: (step: WorkflowMovement, phase: 1 | 2 | 3, phaseName: PhaseName, instruction: string) => void;
|
|
30
|
+
readonly onPhaseComplete?: (step: WorkflowMovement, phase: 1 | 2 | 3, phaseName: PhaseName, content: string, status: string, error?: string) => void;
|
|
31
|
+
}
|
|
32
|
+
export declare class MovementExecutor {
|
|
33
|
+
private readonly deps;
|
|
34
|
+
constructor(deps: MovementExecutorDeps);
|
|
35
|
+
/** Build Phase 1 instruction from template */
|
|
36
|
+
buildInstruction(step: WorkflowMovement, movementIteration: number, state: WorkflowState, task: string, maxIterations: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* Execute a normal (non-parallel) movement through all 3 phases.
|
|
39
|
+
*
|
|
40
|
+
* Returns the final response (with matchedRuleIndex if a rule matched)
|
|
41
|
+
* and the instruction used for Phase 1.
|
|
42
|
+
*/
|
|
43
|
+
runNormalMovement(step: WorkflowMovement, state: WorkflowState, task: string, maxIterations: number, updateAgentSession: (agent: string, sessionId: string | undefined) => void, prebuiltInstruction?: string): Promise<{
|
|
44
|
+
response: AgentResponse;
|
|
45
|
+
instruction: string;
|
|
46
|
+
}>;
|
|
47
|
+
/** Collect movement:report events for each report file that exists */
|
|
48
|
+
emitMovementReports(step: WorkflowMovement): void;
|
|
49
|
+
private reportFiles;
|
|
50
|
+
/** Check if report file exists and collect for emission */
|
|
51
|
+
private checkReportFile;
|
|
52
|
+
/** Drain collected report files (called by engine after movement execution) */
|
|
53
|
+
drainReportFiles(): Array<{
|
|
54
|
+
step: WorkflowMovement;
|
|
55
|
+
filePath: string;
|
|
56
|
+
fileName: string;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=MovementExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MovementExecutor.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/engine/MovementExecutor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3F,QAAQ,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5E,QAAQ,CAAC,WAAW,EAAE,CACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACtH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtJ;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,oBAAoB;IAG7C,8CAA8C;IAC9C,gBAAgB,CACd,IAAI,EAAE,gBAAgB,EACtB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GACpB,MAAM;IAmBT;;;;;OAKG;IACG,iBAAiB,CACrB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,EAC1E,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAmD5D,sEAAsE;IACtE,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAiBjD,OAAO,CAAC,WAAW,CAA6E;IAEhG,2DAA2D;IAC3D,OAAO,CAAC,eAAe;IAOvB,+EAA+E;IAC/E,gBAAgB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,gBAAgB,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAM1F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Executes a single workflow
|
|
2
|
+
* Executes a single workflow movement through the 3-phase model.
|
|
3
3
|
*
|
|
4
4
|
* Phase 1: Main agent execution (with tools)
|
|
5
5
|
* Phase 2: Report output (Write-only, optional)
|
|
@@ -11,21 +11,22 @@ import { runAgent } from '../../../agents/runner.js';
|
|
|
11
11
|
import { InstructionBuilder, isReportObjectConfig } from '../instruction/InstructionBuilder.js';
|
|
12
12
|
import { needsStatusJudgmentPhase, runReportPhase, runStatusJudgmentPhase } from '../phase-runner.js';
|
|
13
13
|
import { detectMatchedRule } from '../evaluation/index.js';
|
|
14
|
-
import {
|
|
14
|
+
import { incrementMovementIteration, getPreviousOutput } from './state-manager.js';
|
|
15
15
|
import { createLogger } from '../../../shared/utils/index.js';
|
|
16
|
-
const log = createLogger('
|
|
17
|
-
export class
|
|
16
|
+
const log = createLogger('movement-executor');
|
|
17
|
+
export class MovementExecutor {
|
|
18
18
|
deps;
|
|
19
19
|
constructor(deps) {
|
|
20
20
|
this.deps = deps;
|
|
21
21
|
}
|
|
22
22
|
/** Build Phase 1 instruction from template */
|
|
23
|
-
buildInstruction(step,
|
|
23
|
+
buildInstruction(step, movementIteration, state, task, maxIterations) {
|
|
24
|
+
const workflowMovements = this.deps.getWorkflowMovements();
|
|
24
25
|
return new InstructionBuilder(step, {
|
|
25
26
|
task,
|
|
26
27
|
iteration: state.iteration,
|
|
27
28
|
maxIterations,
|
|
28
|
-
|
|
29
|
+
movementIteration,
|
|
29
30
|
cwd: this.deps.getCwd(),
|
|
30
31
|
projectCwd: this.deps.getProjectCwd(),
|
|
31
32
|
userInputs: state.userInputs,
|
|
@@ -33,35 +34,39 @@ export class StepExecutor {
|
|
|
33
34
|
reportDir: join(this.deps.getProjectCwd(), this.deps.getReportDir()),
|
|
34
35
|
language: this.deps.getLanguage(),
|
|
35
36
|
interactive: this.deps.getInteractive(),
|
|
37
|
+
workflowMovements: workflowMovements,
|
|
38
|
+
currentMovementIndex: workflowMovements.findIndex(s => s.name === step.name),
|
|
36
39
|
}).build();
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
39
|
-
* Execute a normal (non-parallel)
|
|
42
|
+
* Execute a normal (non-parallel) movement through all 3 phases.
|
|
40
43
|
*
|
|
41
44
|
* Returns the final response (with matchedRuleIndex if a rule matched)
|
|
42
45
|
* and the instruction used for Phase 1.
|
|
43
46
|
*/
|
|
44
|
-
async
|
|
45
|
-
const
|
|
46
|
-
? state.
|
|
47
|
-
:
|
|
48
|
-
const instruction = prebuiltInstruction ?? this.buildInstruction(step,
|
|
47
|
+
async runNormalMovement(step, state, task, maxIterations, updateAgentSession, prebuiltInstruction) {
|
|
48
|
+
const movementIteration = prebuiltInstruction
|
|
49
|
+
? state.movementIterations.get(step.name) ?? 1
|
|
50
|
+
: incrementMovementIteration(state, step.name);
|
|
51
|
+
const instruction = prebuiltInstruction ?? this.buildInstruction(step, movementIteration, state, task, maxIterations);
|
|
49
52
|
const sessionKey = step.agent ?? step.name;
|
|
50
|
-
log.debug('Running
|
|
51
|
-
|
|
53
|
+
log.debug('Running movement', {
|
|
54
|
+
movement: step.name,
|
|
52
55
|
agent: step.agent ?? '(none)',
|
|
53
|
-
|
|
56
|
+
movementIteration,
|
|
54
57
|
iteration: state.iteration,
|
|
55
58
|
sessionId: state.agentSessions.get(sessionKey) ?? 'new',
|
|
56
59
|
});
|
|
57
|
-
// Phase 1: main execution (Write excluded if
|
|
60
|
+
// Phase 1: main execution (Write excluded if movement has report)
|
|
61
|
+
this.deps.onPhaseStart?.(step, 1, 'execute', instruction);
|
|
58
62
|
const agentOptions = this.deps.optionsBuilder.buildAgentOptions(step);
|
|
59
63
|
let response = await runAgent(step.agent, instruction, agentOptions);
|
|
60
64
|
updateAgentSession(sessionKey, response.sessionId);
|
|
61
|
-
|
|
65
|
+
this.deps.onPhaseComplete?.(step, 1, 'execute', response.content, response.status, response.error);
|
|
66
|
+
const phaseCtx = this.deps.optionsBuilder.buildPhaseRunnerContext(state, updateAgentSession, this.deps.onPhaseStart, this.deps.onPhaseComplete);
|
|
62
67
|
// Phase 2: report output (resume same session, Write only)
|
|
63
68
|
if (step.report) {
|
|
64
|
-
await runReportPhase(step,
|
|
69
|
+
await runReportPhase(step, movementIteration, phaseCtx);
|
|
65
70
|
}
|
|
66
71
|
// Phase 3: status judgment (resume session, no tools, output status tag)
|
|
67
72
|
let tagContent = '';
|
|
@@ -76,15 +81,15 @@ export class StepExecutor {
|
|
|
76
81
|
callAiJudge: this.deps.callAiJudge,
|
|
77
82
|
});
|
|
78
83
|
if (match) {
|
|
79
|
-
log.debug('Rule matched', {
|
|
84
|
+
log.debug('Rule matched', { movement: step.name, ruleIndex: match.index, method: match.method });
|
|
80
85
|
response = { ...response, matchedRuleIndex: match.index, matchedRuleMethod: match.method };
|
|
81
86
|
}
|
|
82
|
-
state.
|
|
83
|
-
this.
|
|
87
|
+
state.movementOutputs.set(step.name, response);
|
|
88
|
+
this.emitMovementReports(step);
|
|
84
89
|
return { response, instruction };
|
|
85
90
|
}
|
|
86
|
-
/**
|
|
87
|
-
|
|
91
|
+
/** Collect movement:report events for each report file that exists */
|
|
92
|
+
emitMovementReports(step) {
|
|
88
93
|
if (!step.report)
|
|
89
94
|
return;
|
|
90
95
|
const baseDir = join(this.deps.getProjectCwd(), this.deps.getReportDir());
|
|
@@ -110,11 +115,11 @@ export class StepExecutor {
|
|
|
110
115
|
this.reportFiles.push({ step, filePath, fileName });
|
|
111
116
|
}
|
|
112
117
|
}
|
|
113
|
-
/** Drain collected report files (called by engine after
|
|
118
|
+
/** Drain collected report files (called by engine after movement execution) */
|
|
114
119
|
drainReportFiles() {
|
|
115
120
|
const files = this.reportFiles;
|
|
116
121
|
this.reportFiles = [];
|
|
117
122
|
return files;
|
|
118
123
|
}
|
|
119
124
|
}
|
|
120
|
-
//# sourceMappingURL=
|
|
125
|
+
//# sourceMappingURL=MovementExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MovementExecutor.js","sourceRoot":"","sources":["../../../../src/core/workflow/engine/MovementExecutor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9D,MAAM,GAAG,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;AAoB9C,MAAM,OAAO,gBAAgB;IAER;IADnB,YACmB,IAA0B;QAA1B,SAAI,GAAJ,IAAI,CAAsB;IAC1C,CAAC;IAEJ,8CAA8C;IAC9C,gBAAgB,CACd,IAAsB,EACtB,iBAAyB,EACzB,KAAoB,EACpB,IAAY,EACZ,aAAqB;QAErB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3D,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE;YAClC,IAAI;YACJ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa;YACb,iBAAiB;YACjB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACvB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,cAAc,EAAE,iBAAiB,CAAC,KAAK,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,iBAAiB,EAAE,iBAAiB;YACpC,oBAAoB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;SAC7E,CAAC,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CACrB,IAAsB,EACtB,KAAoB,EACpB,IAAY,EACZ,aAAqB,EACrB,kBAA0E,EAC1E,mBAA4B;QAE5B,MAAM,iBAAiB,GAAG,mBAAmB;YAC3C,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,CAAC,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACtH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;YAC7B,iBAAiB;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK;SACxD,CAAC,CAAC;QAEH,kEAAkE;QAClE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACrE,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEnG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEhJ,2DAA2D;QAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,yEAAyE;QACzE,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,UAAU,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;YACxE,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACvB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;YAC1C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;SACnC,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACjG,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7F,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,sEAAsE;IACtE,mBAAmB,CAAC,IAAsB;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAE1E,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,gFAAgF;IACxE,WAAW,GAA0E,EAAE,CAAC;IAEhG,2DAA2D;IACnD,eAAe,CAAC,IAAsB,EAAE,OAAe,EAAE,QAAgB;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;CAEF"}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* Centralizes the option construction logic that was previously
|
|
5
5
|
* scattered across WorkflowEngine methods.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { WorkflowMovement, WorkflowState, Language } from '../../models/types.js';
|
|
8
8
|
import type { RunAgentOptions } from '../../../agents/runner.js';
|
|
9
9
|
import type { PhaseRunnerContext } from '../phase-runner.js';
|
|
10
|
-
import type { WorkflowEngineOptions } from '../types.js';
|
|
10
|
+
import type { WorkflowEngineOptions, PhaseName } from '../types.js';
|
|
11
11
|
export declare class OptionsBuilder {
|
|
12
12
|
private readonly engineOptions;
|
|
13
13
|
private readonly getCwd;
|
|
@@ -17,12 +17,12 @@ export declare class OptionsBuilder {
|
|
|
17
17
|
private readonly getLanguage;
|
|
18
18
|
constructor(engineOptions: WorkflowEngineOptions, getCwd: () => string, getProjectCwd: () => string, getSessionId: (agent: string) => string | undefined, getReportDir: () => string, getLanguage: () => Language | undefined);
|
|
19
19
|
/** Build common RunAgentOptions shared by all phases */
|
|
20
|
-
buildBaseOptions(step:
|
|
20
|
+
buildBaseOptions(step: WorkflowMovement): RunAgentOptions;
|
|
21
21
|
/** Build RunAgentOptions for Phase 1 (main execution) */
|
|
22
|
-
buildAgentOptions(step:
|
|
22
|
+
buildAgentOptions(step: WorkflowMovement): RunAgentOptions;
|
|
23
23
|
/** Build RunAgentOptions for session-resume phases (Phase 2, Phase 3) */
|
|
24
|
-
buildResumeOptions(step:
|
|
24
|
+
buildResumeOptions(step: WorkflowMovement, sessionId: string, overrides: Pick<RunAgentOptions, 'allowedTools' | 'maxTurns'>): RunAgentOptions;
|
|
25
25
|
/** Build PhaseRunnerContext for Phase 2/3 execution */
|
|
26
|
-
buildPhaseRunnerContext(state: WorkflowState, updateAgentSession: (agent: string, sessionId: string | undefined) => void): PhaseRunnerContext;
|
|
26
|
+
buildPhaseRunnerContext(state: WorkflowState, updateAgentSession: (agent: string, sessionId: string | undefined) => void, onPhaseStart?: (step: WorkflowMovement, phase: 1 | 2 | 3, phaseName: PhaseName, instruction: string) => void, onPhaseComplete?: (step: WorkflowMovement, phase: 1 | 2 | 3, phaseName: PhaseName, content: string, status: string, error?: string) => void): PhaseRunnerContext;
|
|
27
27
|
}
|
|
28
28
|
//# sourceMappingURL=OptionsBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptionsBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/engine/OptionsBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"OptionsBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/engine/OptionsBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpE,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,aAAa,EAAE,qBAAqB,EACpC,MAAM,EAAE,MAAM,MAAM,EACpB,aAAa,EAAE,MAAM,MAAM,EAC3B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACnD,YAAY,EAAE,MAAM,MAAM,EAC1B,WAAW,EAAE,MAAM,QAAQ,GAAG,SAAS;IAG1D,wDAAwD;IACxD,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe;IAezD,yDAAyD;IACzD,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe;IAkB1D,yEAAyE;IACzE,kBAAkB,CAChB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,UAAU,CAAC,GAC5D,eAAe;IAWlB,uDAAuD;IACvD,uBAAuB,CACrB,KAAK,EAAE,aAAa,EACpB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,EAC1E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,EAC5G,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,GAC1I,kBAAkB;CAatB"}
|
|
@@ -28,6 +28,7 @@ export class OptionsBuilder {
|
|
|
28
28
|
provider: step.provider ?? this.engineOptions.provider,
|
|
29
29
|
model: step.model ?? this.engineOptions.model,
|
|
30
30
|
permissionMode: step.permissionMode,
|
|
31
|
+
language: this.getLanguage(),
|
|
31
32
|
onStream: this.engineOptions.onStream,
|
|
32
33
|
onPermissionRequest: this.engineOptions.onPermissionRequest,
|
|
33
34
|
onAskUserQuestion: this.engineOptions.onAskUserQuestion,
|
|
@@ -36,15 +37,17 @@ export class OptionsBuilder {
|
|
|
36
37
|
}
|
|
37
38
|
/** Build RunAgentOptions for Phase 1 (main execution) */
|
|
38
39
|
buildAgentOptions(step) {
|
|
39
|
-
// Phase 1: exclude Write from allowedTools when
|
|
40
|
+
// Phase 1: exclude Write from allowedTools when movement has report config AND edit is NOT enabled
|
|
40
41
|
// (If edit is enabled, Write is needed for code implementation even if report exists)
|
|
41
42
|
// Note: edit defaults to undefined, so check !== true to catch both false and undefined
|
|
42
43
|
const allowedTools = step.report && step.edit !== true
|
|
43
44
|
? step.allowedTools?.filter((t) => t !== 'Write')
|
|
44
45
|
: step.allowedTools;
|
|
46
|
+
// Skip session resume when cwd !== projectCwd (worktree execution) to avoid cross-directory contamination
|
|
47
|
+
const shouldResumeSession = step.session !== 'refresh' && this.getCwd() === this.getProjectCwd();
|
|
45
48
|
return {
|
|
46
49
|
...this.buildBaseOptions(step),
|
|
47
|
-
sessionId:
|
|
50
|
+
sessionId: shouldResumeSession ? this.getSessionId(step.agent ?? step.name) : undefined,
|
|
48
51
|
allowedTools,
|
|
49
52
|
};
|
|
50
53
|
}
|
|
@@ -60,7 +63,7 @@ export class OptionsBuilder {
|
|
|
60
63
|
};
|
|
61
64
|
}
|
|
62
65
|
/** Build PhaseRunnerContext for Phase 2/3 execution */
|
|
63
|
-
buildPhaseRunnerContext(state, updateAgentSession) {
|
|
66
|
+
buildPhaseRunnerContext(state, updateAgentSession, onPhaseStart, onPhaseComplete) {
|
|
64
67
|
return {
|
|
65
68
|
cwd: this.getCwd(),
|
|
66
69
|
reportDir: join(this.getProjectCwd(), this.getReportDir()),
|
|
@@ -69,6 +72,8 @@ export class OptionsBuilder {
|
|
|
69
72
|
getSessionId: (agent) => state.agentSessions.get(agent),
|
|
70
73
|
buildResumeOptions: this.buildResumeOptions.bind(this),
|
|
71
74
|
updateAgentSession,
|
|
75
|
+
onPhaseStart,
|
|
76
|
+
onPhaseComplete,
|
|
72
77
|
};
|
|
73
78
|
}
|
|
74
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptionsBuilder.js","sourceRoot":"","sources":["../../../../src/core/workflow/engine/OptionsBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,MAAM,OAAO,cAAc;IAEN;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,aAAoC,EACpC,MAAoB,EACpB,aAA2B,EAC3B,YAAmD,EACnD,YAA0B,EAC1B,WAAuC;QALvC,kBAAa,GAAb,aAAa,CAAuB;QACpC,WAAM,GAAN,MAAM,CAAc;QACpB,kBAAa,GAAb,aAAa,CAAc;QAC3B,iBAAY,GAAZ,YAAY,CAAuC;QACnD,iBAAY,GAAZ,YAAY,CAAc;QAC1B,gBAAW,GAAX,WAAW,CAA4B;IACvD,CAAC;IAEJ,wDAAwD;IACxD,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"OptionsBuilder.js","sourceRoot":"","sources":["../../../../src/core/workflow/engine/OptionsBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Executes parallel workflow
|
|
2
|
+
* Executes parallel workflow movements concurrently and aggregates results.
|
|
3
3
|
*
|
|
4
4
|
* When onStream is provided, uses ParallelLogger to prefix each
|
|
5
|
-
* sub-
|
|
5
|
+
* sub-movement's output with `[name]` for readable interleaved display.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { WorkflowMovement, WorkflowState, AgentResponse } from '../../models/types.js';
|
|
8
8
|
import type { OptionsBuilder } from './OptionsBuilder.js';
|
|
9
|
-
import type {
|
|
10
|
-
import type { WorkflowEngineOptions } from '../types.js';
|
|
9
|
+
import type { MovementExecutor } from './MovementExecutor.js';
|
|
10
|
+
import type { WorkflowEngineOptions, PhaseName } from '../types.js';
|
|
11
11
|
export interface ParallelRunnerDeps {
|
|
12
12
|
readonly optionsBuilder: OptionsBuilder;
|
|
13
|
-
readonly
|
|
13
|
+
readonly movementExecutor: MovementExecutor;
|
|
14
14
|
readonly engineOptions: WorkflowEngineOptions;
|
|
15
15
|
readonly getCwd: () => string;
|
|
16
16
|
readonly getReportDir: () => string;
|
|
17
17
|
readonly getInteractive: () => boolean;
|
|
18
|
-
readonly detectRuleIndex: (content: string,
|
|
18
|
+
readonly detectRuleIndex: (content: string, movementName: string) => number;
|
|
19
19
|
readonly callAiJudge: (agentOutput: string, conditions: Array<{
|
|
20
20
|
index: number;
|
|
21
21
|
text: string;
|
|
22
22
|
}>, options: {
|
|
23
23
|
cwd: string;
|
|
24
24
|
}) => Promise<number>;
|
|
25
|
+
readonly onPhaseStart?: (step: WorkflowMovement, phase: 1 | 2 | 3, phaseName: PhaseName, instruction: string) => void;
|
|
26
|
+
readonly onPhaseComplete?: (step: WorkflowMovement, phase: 1 | 2 | 3, phaseName: PhaseName, content: string, status: string, error?: string) => void;
|
|
25
27
|
}
|
|
26
28
|
export declare class ParallelRunner {
|
|
27
29
|
private readonly deps;
|
|
28
30
|
constructor(deps: ParallelRunnerDeps);
|
|
29
31
|
/**
|
|
30
|
-
* Run a parallel
|
|
31
|
-
* The aggregated output becomes the parent
|
|
32
|
+
* Run a parallel movement: execute all sub-movements concurrently, then aggregate results.
|
|
33
|
+
* The aggregated output becomes the parent movement's response for rules evaluation.
|
|
32
34
|
*/
|
|
33
|
-
|
|
35
|
+
runParallelMovement(step: WorkflowMovement, state: WorkflowState, task: string, maxIterations: number, updateAgentSession: (agent: string, sessionId: string | undefined) => void): Promise<{
|
|
34
36
|
response: AgentResponse;
|
|
35
37
|
instruction: string;
|
|
36
38
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParallelRunner.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/engine/ParallelRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"ParallelRunner.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/engine/ParallelRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,EACd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5E,QAAQ,CAAC,WAAW,EAAE,CACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACtH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtJ;AAED,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,kBAAkB;IAG3C;;;OAGG;IACG,mBAAmB,CACvB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GACzE,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CA8G7D"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Executes parallel workflow
|
|
2
|
+
* Executes parallel workflow movements concurrently and aggregates results.
|
|
3
3
|
*
|
|
4
4
|
* When onStream is provided, uses ParallelLogger to prefix each
|
|
5
|
-
* sub-
|
|
5
|
+
* sub-movement's output with `[name]` for readable interleaved display.
|
|
6
6
|
*/
|
|
7
7
|
import { runAgent } from '../../../agents/runner.js';
|
|
8
8
|
import { ParallelLogger } from './parallel-logger.js';
|
|
9
9
|
import { needsStatusJudgmentPhase, runReportPhase, runStatusJudgmentPhase } from '../phase-runner.js';
|
|
10
10
|
import { detectMatchedRule } from '../evaluation/index.js';
|
|
11
|
-
import {
|
|
11
|
+
import { incrementMovementIteration } from './state-manager.js';
|
|
12
12
|
import { createLogger } from '../../../shared/utils/index.js';
|
|
13
13
|
const log = createLogger('parallel-runner');
|
|
14
14
|
export class ParallelRunner {
|
|
@@ -17,25 +17,28 @@ export class ParallelRunner {
|
|
|
17
17
|
this.deps = deps;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Run a parallel
|
|
21
|
-
* The aggregated output becomes the parent
|
|
20
|
+
* Run a parallel movement: execute all sub-movements concurrently, then aggregate results.
|
|
21
|
+
* The aggregated output becomes the parent movement's response for rules evaluation.
|
|
22
22
|
*/
|
|
23
|
-
async
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
async runParallelMovement(step, state, task, maxIterations, updateAgentSession) {
|
|
24
|
+
if (!step.parallel) {
|
|
25
|
+
throw new Error(`Movement "${step.name}" has no parallel sub-movements`);
|
|
26
|
+
}
|
|
27
|
+
const subMovements = step.parallel;
|
|
28
|
+
const movementIteration = incrementMovementIteration(state, step.name);
|
|
29
|
+
log.debug('Running parallel movement', {
|
|
30
|
+
movement: step.name,
|
|
31
|
+
subMovements: subMovements.map(s => s.name),
|
|
32
|
+
movementIteration,
|
|
30
33
|
});
|
|
31
34
|
// Create parallel logger for prefixed output (only when streaming is enabled)
|
|
32
35
|
const parallelLogger = this.deps.engineOptions.onStream
|
|
33
36
|
? new ParallelLogger({
|
|
34
|
-
|
|
37
|
+
subMovementNames: subMovements.map((s) => s.name),
|
|
35
38
|
parentOnStream: this.deps.engineOptions.onStream,
|
|
36
39
|
})
|
|
37
40
|
: undefined;
|
|
38
|
-
const phaseCtx = this.deps.optionsBuilder.buildPhaseRunnerContext(state, updateAgentSession);
|
|
41
|
+
const phaseCtx = this.deps.optionsBuilder.buildPhaseRunnerContext(state, updateAgentSession, this.deps.onPhaseStart, this.deps.onPhaseComplete);
|
|
39
42
|
const ruleCtx = {
|
|
40
43
|
state,
|
|
41
44
|
cwd: this.deps.getCwd(),
|
|
@@ -43,53 +46,55 @@ export class ParallelRunner {
|
|
|
43
46
|
detectRuleIndex: this.deps.detectRuleIndex,
|
|
44
47
|
callAiJudge: this.deps.callAiJudge,
|
|
45
48
|
};
|
|
46
|
-
// Run all sub-
|
|
47
|
-
const subResults = await Promise.all(
|
|
48
|
-
const subIteration =
|
|
49
|
-
const subInstruction = this.deps.
|
|
50
|
-
// Phase 1: main execution (Write excluded if sub-
|
|
51
|
-
const baseOptions = this.deps.optionsBuilder.buildAgentOptions(
|
|
49
|
+
// Run all sub-movements concurrently
|
|
50
|
+
const subResults = await Promise.all(subMovements.map(async (subMovement, index) => {
|
|
51
|
+
const subIteration = incrementMovementIteration(state, subMovement.name);
|
|
52
|
+
const subInstruction = this.deps.movementExecutor.buildInstruction(subMovement, subIteration, state, task, maxIterations);
|
|
53
|
+
// Phase 1: main execution (Write excluded if sub-movement has report)
|
|
54
|
+
const baseOptions = this.deps.optionsBuilder.buildAgentOptions(subMovement);
|
|
52
55
|
// Override onStream with parallel logger's prefixed handler (immutable)
|
|
53
56
|
const agentOptions = parallelLogger
|
|
54
|
-
? { ...baseOptions, onStream: parallelLogger.createStreamHandler(
|
|
57
|
+
? { ...baseOptions, onStream: parallelLogger.createStreamHandler(subMovement.name, index) }
|
|
55
58
|
: baseOptions;
|
|
56
|
-
const subSessionKey =
|
|
57
|
-
|
|
59
|
+
const subSessionKey = subMovement.agent ?? subMovement.name;
|
|
60
|
+
this.deps.onPhaseStart?.(subMovement, 1, 'execute', subInstruction);
|
|
61
|
+
const subResponse = await runAgent(subMovement.agent, subInstruction, agentOptions);
|
|
58
62
|
updateAgentSession(subSessionKey, subResponse.sessionId);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
this.deps.onPhaseComplete?.(subMovement, 1, 'execute', subResponse.content, subResponse.status, subResponse.error);
|
|
64
|
+
// Phase 2: report output for sub-movement
|
|
65
|
+
if (subMovement.report) {
|
|
66
|
+
await runReportPhase(subMovement, subIteration, phaseCtx);
|
|
62
67
|
}
|
|
63
|
-
// Phase 3: status judgment for sub-
|
|
68
|
+
// Phase 3: status judgment for sub-movement
|
|
64
69
|
let subTagContent = '';
|
|
65
|
-
if (needsStatusJudgmentPhase(
|
|
66
|
-
subTagContent = await runStatusJudgmentPhase(
|
|
70
|
+
if (needsStatusJudgmentPhase(subMovement)) {
|
|
71
|
+
subTagContent = await runStatusJudgmentPhase(subMovement, phaseCtx);
|
|
67
72
|
}
|
|
68
|
-
const match = await detectMatchedRule(
|
|
73
|
+
const match = await detectMatchedRule(subMovement, subResponse.content, subTagContent, ruleCtx);
|
|
69
74
|
const finalResponse = match
|
|
70
75
|
? { ...subResponse, matchedRuleIndex: match.index, matchedRuleMethod: match.method }
|
|
71
76
|
: subResponse;
|
|
72
|
-
state.
|
|
73
|
-
this.deps.
|
|
74
|
-
return {
|
|
77
|
+
state.movementOutputs.set(subMovement.name, finalResponse);
|
|
78
|
+
this.deps.movementExecutor.emitMovementReports(subMovement);
|
|
79
|
+
return { subMovement, response: finalResponse, instruction: subInstruction };
|
|
75
80
|
}));
|
|
76
81
|
// Print completion summary
|
|
77
82
|
if (parallelLogger) {
|
|
78
83
|
parallelLogger.printSummary(step.name, subResults.map((r) => ({
|
|
79
|
-
name: r.
|
|
80
|
-
condition: r.response.matchedRuleIndex != null && r.
|
|
81
|
-
? r.
|
|
84
|
+
name: r.subMovement.name,
|
|
85
|
+
condition: r.response.matchedRuleIndex != null && r.subMovement.rules
|
|
86
|
+
? r.subMovement.rules[r.response.matchedRuleIndex]?.condition
|
|
82
87
|
: undefined,
|
|
83
88
|
})));
|
|
84
89
|
}
|
|
85
|
-
// Aggregate sub-
|
|
90
|
+
// Aggregate sub-movement outputs into parent movement's response
|
|
86
91
|
const aggregatedContent = subResults
|
|
87
|
-
.map((r) => `## ${r.
|
|
92
|
+
.map((r) => `## ${r.subMovement.name}\n${r.response.content}`)
|
|
88
93
|
.join('\n\n---\n\n');
|
|
89
94
|
const aggregatedInstruction = subResults
|
|
90
95
|
.map((r) => r.instruction)
|
|
91
96
|
.join('\n\n');
|
|
92
|
-
// Parent
|
|
97
|
+
// Parent movement uses aggregate conditions, so tagContent is empty
|
|
93
98
|
const match = await detectMatchedRule(step, aggregatedContent, '', ruleCtx);
|
|
94
99
|
const aggregatedResponse = {
|
|
95
100
|
agent: step.name,
|
|
@@ -98,8 +103,8 @@ export class ParallelRunner {
|
|
|
98
103
|
timestamp: new Date(),
|
|
99
104
|
...(match && { matchedRuleIndex: match.index, matchedRuleMethod: match.method }),
|
|
100
105
|
};
|
|
101
|
-
state.
|
|
102
|
-
this.deps.
|
|
106
|
+
state.movementOutputs.set(step.name, aggregatedResponse);
|
|
107
|
+
this.deps.movementExecutor.emitMovementReports(step);
|
|
103
108
|
return { response: aggregatedResponse, instruction: aggregatedInstruction };
|
|
104
109
|
}
|
|
105
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParallelRunner.js","sourceRoot":"","sources":["../../../../src/core/workflow/engine/ParallelRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ParallelRunner.js","sourceRoot":"","sources":["../../../../src/core/workflow/engine/ParallelRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAK9D,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAmB5C,MAAM,OAAO,cAAc;IAEN;IADnB,YACmB,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IACxC,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CACvB,IAAsB,EACtB,KAAoB,EACpB,IAAY,EACZ,aAAqB,EACrB,kBAA0E;QAE1E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,iCAAiC,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE;YACrC,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3C,iBAAiB;SAClB,CAAC,CAAC;QAEH,8EAA8E;QAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ;YACrD,CAAC,CAAC,IAAI,cAAc,CAAC;gBACjB,gBAAgB,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ;aACjD,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChJ,MAAM,OAAO,GAAG;YACd,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACvB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;YAC1C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;SACnC,CAAC;QAEF,qCAAqC;QACrC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;YAC5C,MAAM,YAAY,GAAG,0BAA0B,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAE1H,sEAAsE;YACtE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAE5E,wEAAwE;YACxE,MAAM,YAAY,GAAG,cAAc;gBACjC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBAC3F,CAAC,CAAC,WAAW,CAAC;YAEhB,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;YACpF,kBAAkB,CAAC,aAAa,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YAEnH,0CAA0C;YAC1C,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC5D,CAAC;YAED,4CAA4C;YAC5C,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1C,aAAa,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAChG,MAAM,aAAa,GAAG,KAAK;gBACzB,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE;gBACpF,CAAC,CAAC,WAAW,CAAC;YAEhB,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAE5D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;QAC/E,CAAC,CAAC,CACH,CAAC;QAEF,2BAA2B;QAC3B,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,YAAY,CACzB,IAAI,CAAC,IAAI,EACT,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrB,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI;gBACxB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK;oBACnE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS;oBAC7D,CAAC,CAAC,SAAS;aACd,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,MAAM,iBAAiB,GAAG,UAAU;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;aAC7D,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,MAAM,qBAAqB,GAAG,UAAU;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;aACzB,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,oEAAoE;QACpE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAE5E,MAAM,kBAAkB,GAAkB;YACxC,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,iBAAiB;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,GAAG,CAAC,KAAK,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SACjF,CAAC;QAEF,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IAC9E,CAAC;CAEF"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Workflow execution engine.
|
|
3
3
|
*
|
|
4
|
-
* Orchestrates the main execution loop:
|
|
5
|
-
* loop detection, and iteration limits. Delegates
|
|
6
|
-
*
|
|
4
|
+
* Orchestrates the main execution loop: movement transitions, abort handling,
|
|
5
|
+
* loop detection, and iteration limits. Delegates movement execution to
|
|
6
|
+
* MovementExecutor (normal movements) and ParallelRunner (parallel movements).
|
|
7
7
|
*/
|
|
8
8
|
import { EventEmitter } from 'node:events';
|
|
9
|
-
import type { WorkflowConfig, WorkflowState,
|
|
9
|
+
import type { WorkflowConfig, WorkflowState, WorkflowMovement, AgentResponse } from '../../models/types.js';
|
|
10
10
|
import type { WorkflowEngineOptions } from '../types.js';
|
|
11
11
|
export type { WorkflowEvents, UserInputRequest, IterationLimitRequest, SessionUpdateCallback, IterationLimitCallback, WorkflowEngineOptions, } from '../types.js';
|
|
12
|
-
export {
|
|
12
|
+
export { COMPLETE_MOVEMENT, ABORT_MOVEMENT } from '../constants.js';
|
|
13
13
|
/** Workflow engine for orchestrating agent execution */
|
|
14
14
|
export declare class WorkflowEngine extends EventEmitter {
|
|
15
15
|
private state;
|
|
@@ -22,7 +22,7 @@ export declare class WorkflowEngine extends EventEmitter {
|
|
|
22
22
|
private reportDir;
|
|
23
23
|
private abortRequested;
|
|
24
24
|
private readonly optionsBuilder;
|
|
25
|
-
private readonly
|
|
25
|
+
private readonly movementExecutor;
|
|
26
26
|
private readonly parallelRunner;
|
|
27
27
|
private readonly detectRuleIndex;
|
|
28
28
|
private readonly callAiJudge;
|
|
@@ -41,30 +41,30 @@ export declare class WorkflowEngine extends EventEmitter {
|
|
|
41
41
|
getCwd(): string;
|
|
42
42
|
/** Get project root directory (where .takt/ lives) */
|
|
43
43
|
getProjectCwd(): string;
|
|
44
|
-
/** Request graceful abort: interrupt running queries and stop after current
|
|
44
|
+
/** Request graceful abort: interrupt running queries and stop after current movement */
|
|
45
45
|
abort(): void;
|
|
46
46
|
/** Check if abort has been requested */
|
|
47
47
|
isAbortRequested(): boolean;
|
|
48
|
-
/** Get
|
|
49
|
-
private
|
|
48
|
+
/** Get movement by name */
|
|
49
|
+
private getMovement;
|
|
50
50
|
/** Update agent session and notify via callback if session changed */
|
|
51
51
|
private updateAgentSession;
|
|
52
|
-
/** Emit
|
|
52
|
+
/** Emit movement:report events collected by MovementExecutor */
|
|
53
53
|
private emitCollectedReports;
|
|
54
|
-
/** Run a single
|
|
55
|
-
private
|
|
54
|
+
/** Run a single movement (delegates to ParallelRunner if movement has parallel sub-movements) */
|
|
55
|
+
private runMovement;
|
|
56
56
|
/**
|
|
57
|
-
* Determine next
|
|
57
|
+
* Determine next movement for a completed movement using rules-based routing.
|
|
58
58
|
*/
|
|
59
|
-
private
|
|
59
|
+
private resolveNextMovement;
|
|
60
60
|
/** Build instruction (public, used by workflowExecution.ts for logging) */
|
|
61
|
-
buildInstruction(step:
|
|
61
|
+
buildInstruction(step: WorkflowMovement, movementIteration: number): string;
|
|
62
62
|
/** Run the workflow to completion */
|
|
63
63
|
run(): Promise<WorkflowState>;
|
|
64
64
|
/** Run a single iteration (for interactive mode) */
|
|
65
65
|
runSingleIteration(): Promise<{
|
|
66
66
|
response: AgentResponse;
|
|
67
|
-
|
|
67
|
+
nextMovement: string;
|
|
68
68
|
isComplete: boolean;
|
|
69
69
|
loopDetected?: boolean;
|
|
70
70
|
}>;
|