mcp-agent-foundry 1.0.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/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/install-skills.d.ts +11 -0
- package/dist/cli/install-skills.d.ts.map +1 -0
- package/dist/cli/install-skills.js +143 -0
- package/dist/cli/install-skills.js.map +1 -0
- package/dist/cli/recovery-commands.d.ts +41 -0
- package/dist/cli/recovery-commands.d.ts.map +1 -0
- package/dist/cli/recovery-commands.js +241 -0
- package/dist/cli/recovery-commands.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +25 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1417 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +45 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +317 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +75 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +704 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +99 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +22 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +184 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +347 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/merger.d.ts +76 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +189 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/schema.d.ts +20 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +20 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +254 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +363 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/worktree-defaults.d.ts +23 -0
- package/dist/config/worktree-defaults.d.ts.map +1 -0
- package/dist/config/worktree-defaults.js +78 -0
- package/dist/config/worktree-defaults.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools/compare-agents.d.ts +25 -0
- package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
- package/dist/mcp/tools/compare-agents.js +177 -0
- package/dist/mcp/tools/compare-agents.js.map +1 -0
- package/dist/mcp/tools/critique-plan.d.ts +26 -0
- package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
- package/dist/mcp/tools/critique-plan.js +162 -0
- package/dist/mcp/tools/critique-plan.js.map +1 -0
- package/dist/mcp/tools/design-feedback.d.ts +26 -0
- package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
- package/dist/mcp/tools/design-feedback.js +216 -0
- package/dist/mcp/tools/design-feedback.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +50 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +191 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/invoke-agent.d.ts +25 -0
- package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
- package/dist/mcp/tools/invoke-agent.js +141 -0
- package/dist/mcp/tools/invoke-agent.js.map +1 -0
- package/dist/mcp/tools/review-code.d.ts +25 -0
- package/dist/mcp/tools/review-code.d.ts.map +1 -0
- package/dist/mcp/tools/review-code.js +170 -0
- package/dist/mcp/tools/review-code.js.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
- package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
- package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.js +284 -0
- package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
- package/dist/mcp/tools/tasks/index.d.ts +36 -0
- package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/index.js +66 -0
- package/dist/mcp/tools/tasks/index.js.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
- package/dist/mcp/tools/worktree/index.d.ts +41 -0
- package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/index.js +69 -0
- package/dist/mcp/tools/worktree/index.js.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
- package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
- package/dist/mcp/transport/stdio.d.ts +13 -0
- package/dist/mcp/transport/stdio.d.ts.map +1 -0
- package/dist/mcp/transport/stdio.js +15 -0
- package/dist/mcp/transport/stdio.js.map +1 -0
- package/dist/observability/logger.d.ts +137 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +235 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +250 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +364 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/persistence/index.d.ts +9 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +9 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/state-schema.d.ts +116 -0
- package/dist/persistence/state-schema.d.ts.map +1 -0
- package/dist/persistence/state-schema.js +28 -0
- package/dist/persistence/state-schema.js.map +1 -0
- package/dist/persistence/state-store.d.ts +111 -0
- package/dist/persistence/state-store.d.ts.map +1 -0
- package/dist/persistence/state-store.js +291 -0
- package/dist/persistence/state-store.js.map +1 -0
- package/dist/providers/anthropic.d.ts +164 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +500 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +151 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +20 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +160 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +264 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +453 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +96 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +457 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +20 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/router/context-manager.d.ts +2 -0
- package/dist/router/context-manager.d.ts.map +1 -0
- package/dist/router/context-manager.js +3 -0
- package/dist/router/context-manager.js.map +1 -0
- package/dist/router/engine.d.ts +169 -0
- package/dist/router/engine.d.ts.map +1 -0
- package/dist/router/engine.js +435 -0
- package/dist/router/engine.js.map +1 -0
- package/dist/router/pattern-executor.d.ts +317 -0
- package/dist/router/pattern-executor.d.ts.map +1 -0
- package/dist/router/pattern-executor.js +571 -0
- package/dist/router/pattern-executor.js.map +1 -0
- package/dist/router/role-resolver.d.ts +59 -0
- package/dist/router/role-resolver.d.ts.map +1 -0
- package/dist/router/role-resolver.js +95 -0
- package/dist/router/role-resolver.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +223 -0
- package/dist/server.js.map +1 -0
- package/dist/startup.d.ts +78 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +107 -0
- package/dist/startup.js.map +1 -0
- package/dist/tasks/coordinator.d.ts +141 -0
- package/dist/tasks/coordinator.d.ts.map +1 -0
- package/dist/tasks/coordinator.js +331 -0
- package/dist/tasks/coordinator.js.map +1 -0
- package/dist/tasks/index.d.ts +13 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +13 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
- package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
- package/dist/tasks/persistent-state-coordinator.js +371 -0
- package/dist/tasks/persistent-state-coordinator.js.map +1 -0
- package/dist/tasks/pipeline-manager.d.ts +103 -0
- package/dist/tasks/pipeline-manager.d.ts.map +1 -0
- package/dist/tasks/pipeline-manager.js +358 -0
- package/dist/tasks/pipeline-manager.js.map +1 -0
- package/dist/tasks/state-coordinator.d.ts +79 -0
- package/dist/tasks/state-coordinator.d.ts.map +1 -0
- package/dist/tasks/state-coordinator.js +200 -0
- package/dist/tasks/state-coordinator.js.map +1 -0
- package/dist/tasks/worker-mode.d.ts +65 -0
- package/dist/tasks/worker-mode.d.ts.map +1 -0
- package/dist/tasks/worker-mode.js +208 -0
- package/dist/tasks/worker-mode.js.map +1 -0
- package/dist/translation/errors.d.ts +203 -0
- package/dist/translation/errors.d.ts.map +1 -0
- package/dist/translation/errors.js +477 -0
- package/dist/translation/errors.js.map +1 -0
- package/dist/translation/index.d.ts +12 -0
- package/dist/translation/index.d.ts.map +1 -0
- package/dist/translation/index.js +32 -0
- package/dist/translation/index.js.map +1 -0
- package/dist/translation/messages.d.ts +295 -0
- package/dist/translation/messages.d.ts.map +1 -0
- package/dist/translation/messages.js +557 -0
- package/dist/translation/messages.js.map +1 -0
- package/dist/translation/streaming.d.ts +226 -0
- package/dist/translation/streaming.d.ts.map +1 -0
- package/dist/translation/streaming.js +520 -0
- package/dist/translation/streaming.js.map +1 -0
- package/dist/translation/tools.d.ts +209 -0
- package/dist/translation/tools.d.ts.map +1 -0
- package/dist/translation/tools.js +331 -0
- package/dist/translation/tools.js.map +1 -0
- package/dist/types.d.ts +747 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +86 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +175 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +315 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +3 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/git.d.ts +58 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +197 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-ordering.d.ts +45 -0
- package/dist/utils/merge-ordering.d.ts.map +1 -0
- package/dist/utils/merge-ordering.js +128 -0
- package/dist/utils/merge-ordering.js.map +1 -0
- package/dist/utils/retry.d.ts +106 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +188 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/worktrees/branch-manager.d.ts +55 -0
- package/dist/worktrees/branch-manager.d.ts.map +1 -0
- package/dist/worktrees/branch-manager.js +129 -0
- package/dist/worktrees/branch-manager.js.map +1 -0
- package/dist/worktrees/conflict-handler.d.ts +72 -0
- package/dist/worktrees/conflict-handler.d.ts.map +1 -0
- package/dist/worktrees/conflict-handler.js +287 -0
- package/dist/worktrees/conflict-handler.js.map +1 -0
- package/dist/worktrees/conflict-parser.d.ts +28 -0
- package/dist/worktrees/conflict-parser.d.ts.map +1 -0
- package/dist/worktrees/conflict-parser.js +140 -0
- package/dist/worktrees/conflict-parser.js.map +1 -0
- package/dist/worktrees/index.d.ts +20 -0
- package/dist/worktrees/index.d.ts.map +1 -0
- package/dist/worktrees/index.js +20 -0
- package/dist/worktrees/index.js.map +1 -0
- package/dist/worktrees/instructions.d.ts +20 -0
- package/dist/worktrees/instructions.d.ts.map +1 -0
- package/dist/worktrees/instructions.js +84 -0
- package/dist/worktrees/instructions.js.map +1 -0
- package/dist/worktrees/manager.d.ts +76 -0
- package/dist/worktrees/manager.d.ts.map +1 -0
- package/dist/worktrees/manager.js +277 -0
- package/dist/worktrees/manager.js.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
- package/dist/worktrees/pool.d.ts +95 -0
- package/dist/worktrees/pool.d.ts.map +1 -0
- package/dist/worktrees/pool.js +271 -0
- package/dist/worktrees/pool.js.map +1 -0
- package/dist/worktrees/recovery.d.ts +94 -0
- package/dist/worktrees/recovery.d.ts.map +1 -0
- package/dist/worktrees/recovery.js +371 -0
- package/dist/worktrees/recovery.js.map +1 -0
- package/dist/worktrees/resource-manager.d.ts +74 -0
- package/dist/worktrees/resource-manager.d.ts.map +1 -0
- package/dist/worktrees/resource-manager.js +228 -0
- package/dist/worktrees/resource-manager.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Mode
|
|
3
|
+
*
|
|
4
|
+
* Enables background task processing via Claude Code subagents.
|
|
5
|
+
* Workers claim tasks, execute them via AgentRouter, and loop until done.
|
|
6
|
+
*/
|
|
7
|
+
import type { Logger } from "../observability/logger.js";
|
|
8
|
+
import type { WorkerConfig, WorkerState } from "../types.js";
|
|
9
|
+
export declare class WorkerMode {
|
|
10
|
+
private state;
|
|
11
|
+
private config;
|
|
12
|
+
private logger;
|
|
13
|
+
private lastActivityTime;
|
|
14
|
+
constructor(config: WorkerConfig, logger: Logger);
|
|
15
|
+
/**
|
|
16
|
+
* Generate instructions for the subagent on how to claim and execute tasks.
|
|
17
|
+
* Returns markdown that tells the subagent the worker claim protocol.
|
|
18
|
+
*/
|
|
19
|
+
generateClaimInstructions(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Update worker state.
|
|
22
|
+
*/
|
|
23
|
+
updateState(updates: Partial<WorkerState>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get current worker status.
|
|
26
|
+
*/
|
|
27
|
+
getStatus(): WorkerState;
|
|
28
|
+
/**
|
|
29
|
+
* Mark that the worker is starting work on a task.
|
|
30
|
+
*/
|
|
31
|
+
markTaskStarted(taskId: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Mark that the worker completed a task successfully.
|
|
34
|
+
*/
|
|
35
|
+
markTaskCompleted(taskId: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Mark that the worker failed a task.
|
|
38
|
+
*/
|
|
39
|
+
markTaskFailed(taskId: string, error?: Error): void;
|
|
40
|
+
/**
|
|
41
|
+
* Add a task ID to the exclusion list (e.g., after failed claim due to race).
|
|
42
|
+
*/
|
|
43
|
+
excludeTask(taskId: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Record a heartbeat (keeps the worker alive).
|
|
46
|
+
*/
|
|
47
|
+
heartbeat(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Check if the worker should shut down due to idle timeout.
|
|
50
|
+
*/
|
|
51
|
+
shouldShutdown(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Mark the worker as shut down.
|
|
54
|
+
*/
|
|
55
|
+
shutdown(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Get the worker name.
|
|
58
|
+
*/
|
|
59
|
+
getName(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Check if the worker is currently working.
|
|
62
|
+
*/
|
|
63
|
+
isWorking(): boolean;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=worker-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-mode.d.ts","sourceRoot":"","sources":["../../src/tasks/worker-mode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAa,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AASxE,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA2F;IACzG,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM;IA4BhD;;;OAGG;IACH,yBAAyB,IAAI,MAAM;IA+CnC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAKhD;;OAEG;IACH,SAAS,IAAI,WAAW;IAIxB;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYrC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAcvC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAqBnD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,cAAc,IAAI,OAAO;IAezB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAShB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Mode
|
|
3
|
+
*
|
|
4
|
+
* Enables background task processing via Claude Code subagents.
|
|
5
|
+
* Workers claim tasks, execute them via AgentRouter, and loop until done.
|
|
6
|
+
*/
|
|
7
|
+
/** Default worker configuration values */
|
|
8
|
+
const DEFAULTS = {
|
|
9
|
+
maxConcurrent: 1,
|
|
10
|
+
heartbeatMs: 30000,
|
|
11
|
+
idleTimeoutMs: 300000,
|
|
12
|
+
};
|
|
13
|
+
export class WorkerMode {
|
|
14
|
+
state;
|
|
15
|
+
config;
|
|
16
|
+
logger;
|
|
17
|
+
lastActivityTime;
|
|
18
|
+
constructor(config, logger) {
|
|
19
|
+
this.config = {
|
|
20
|
+
name: config.name,
|
|
21
|
+
allowedRoles: config.allowedRoles ?? undefined,
|
|
22
|
+
maxConcurrent: config.maxConcurrent ?? DEFAULTS.maxConcurrent,
|
|
23
|
+
heartbeatMs: config.heartbeatMs ?? DEFAULTS.heartbeatMs,
|
|
24
|
+
idleTimeoutMs: config.idleTimeoutMs ?? DEFAULTS.idleTimeoutMs,
|
|
25
|
+
};
|
|
26
|
+
this.state = {
|
|
27
|
+
name: config.name,
|
|
28
|
+
status: "idle",
|
|
29
|
+
completedCount: 0,
|
|
30
|
+
failedCount: 0,
|
|
31
|
+
lastHeartbeat: Date.now(),
|
|
32
|
+
excludeTaskIds: [],
|
|
33
|
+
};
|
|
34
|
+
this.lastActivityTime = Date.now();
|
|
35
|
+
this.logger = logger;
|
|
36
|
+
this.logger.info("Worker mode initialized", {
|
|
37
|
+
name: config.name,
|
|
38
|
+
allowedRoles: config.allowedRoles,
|
|
39
|
+
maxConcurrent: this.config.maxConcurrent,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generate instructions for the subagent on how to claim and execute tasks.
|
|
44
|
+
* Returns markdown that tells the subagent the worker claim protocol.
|
|
45
|
+
*/
|
|
46
|
+
generateClaimInstructions() {
|
|
47
|
+
const roleFilter = this.config.allowedRoles?.length
|
|
48
|
+
? `metadata.role IN [${this.config.allowedRoles.map(r => `"${r}"`).join(", ")}]`
|
|
49
|
+
: "any role";
|
|
50
|
+
const excludeClause = this.state.excludeTaskIds?.length
|
|
51
|
+
? ` - id NOT IN [${this.state.excludeTaskIds.join(", ")}]`
|
|
52
|
+
: "";
|
|
53
|
+
return `
|
|
54
|
+
## Worker Task Claim Protocol
|
|
55
|
+
|
|
56
|
+
**Worker:** ${this.state.name}
|
|
57
|
+
**Allowed Roles:** ${this.config.allowedRoles?.join(", ") ?? "any"}
|
|
58
|
+
**Status:** ${this.state.status}
|
|
59
|
+
**Completed:** ${this.state.completedCount} | **Failed:** ${this.state.failedCount}
|
|
60
|
+
|
|
61
|
+
### Instructions
|
|
62
|
+
|
|
63
|
+
1. **Get current tasks:**
|
|
64
|
+
\`TaskList()\`
|
|
65
|
+
|
|
66
|
+
2. **Find a task matching:**
|
|
67
|
+
- status = "pending"
|
|
68
|
+
- owner = null (unclaimed)
|
|
69
|
+
- blockedBy is empty OR all blockers completed
|
|
70
|
+
- ${roleFilter}
|
|
71
|
+
${excludeClause}
|
|
72
|
+
|
|
73
|
+
3. **If found, claim it:**
|
|
74
|
+
\`TaskUpdate({ taskId: <found_id>, status: "in_progress", owner: "${this.state.name}" })\`
|
|
75
|
+
|
|
76
|
+
4. **Execute via AgentRouter:**
|
|
77
|
+
\`execute_task({ taskId: <found_id> })\`
|
|
78
|
+
|
|
79
|
+
5. **On completion, loop back to step 1.**
|
|
80
|
+
|
|
81
|
+
6. **If no tasks match, worker can exit:**
|
|
82
|
+
\`Teammate({ operation: "requestShutdown" })\`
|
|
83
|
+
|
|
84
|
+
### Notes
|
|
85
|
+
- If a claim fails (another worker claimed first), add the taskId to excludeTaskIds and retry
|
|
86
|
+
- The execute_task tool automatically marks tasks complete on success
|
|
87
|
+
- If execution fails, the task is released for retry
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Update worker state.
|
|
92
|
+
*/
|
|
93
|
+
updateState(updates) {
|
|
94
|
+
Object.assign(this.state, updates);
|
|
95
|
+
this.state.lastHeartbeat = Date.now();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get current worker status.
|
|
99
|
+
*/
|
|
100
|
+
getStatus() {
|
|
101
|
+
return { ...this.state };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Mark that the worker is starting work on a task.
|
|
105
|
+
*/
|
|
106
|
+
markTaskStarted(taskId) {
|
|
107
|
+
this.state.status = "working";
|
|
108
|
+
this.state.currentTask = taskId;
|
|
109
|
+
this.lastActivityTime = Date.now();
|
|
110
|
+
this.state.lastHeartbeat = Date.now();
|
|
111
|
+
this.logger.debug("Worker starting task", {
|
|
112
|
+
worker: this.state.name,
|
|
113
|
+
taskId,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Mark that the worker completed a task successfully.
|
|
118
|
+
*/
|
|
119
|
+
markTaskCompleted(taskId) {
|
|
120
|
+
this.state.status = "idle";
|
|
121
|
+
delete this.state.currentTask;
|
|
122
|
+
this.state.completedCount++;
|
|
123
|
+
this.lastActivityTime = Date.now();
|
|
124
|
+
this.state.lastHeartbeat = Date.now();
|
|
125
|
+
this.logger.info("Worker completed task", {
|
|
126
|
+
worker: this.state.name,
|
|
127
|
+
taskId,
|
|
128
|
+
completedCount: this.state.completedCount,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Mark that the worker failed a task.
|
|
133
|
+
*/
|
|
134
|
+
markTaskFailed(taskId, error) {
|
|
135
|
+
this.state.status = "idle";
|
|
136
|
+
delete this.state.currentTask;
|
|
137
|
+
this.state.failedCount++;
|
|
138
|
+
this.lastActivityTime = Date.now();
|
|
139
|
+
this.state.lastHeartbeat = Date.now();
|
|
140
|
+
// Add to exclude list to avoid retrying immediately
|
|
141
|
+
if (!this.state.excludeTaskIds) {
|
|
142
|
+
this.state.excludeTaskIds = [];
|
|
143
|
+
}
|
|
144
|
+
this.state.excludeTaskIds.push(taskId);
|
|
145
|
+
this.logger.warn("Worker failed task", {
|
|
146
|
+
worker: this.state.name,
|
|
147
|
+
taskId,
|
|
148
|
+
failedCount: this.state.failedCount,
|
|
149
|
+
error: error?.message,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Add a task ID to the exclusion list (e.g., after failed claim due to race).
|
|
154
|
+
*/
|
|
155
|
+
excludeTask(taskId) {
|
|
156
|
+
if (!this.state.excludeTaskIds) {
|
|
157
|
+
this.state.excludeTaskIds = [];
|
|
158
|
+
}
|
|
159
|
+
if (!this.state.excludeTaskIds.includes(taskId)) {
|
|
160
|
+
this.state.excludeTaskIds.push(taskId);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Record a heartbeat (keeps the worker alive).
|
|
165
|
+
*/
|
|
166
|
+
heartbeat() {
|
|
167
|
+
this.state.lastHeartbeat = Date.now();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if the worker should shut down due to idle timeout.
|
|
171
|
+
*/
|
|
172
|
+
shouldShutdown() {
|
|
173
|
+
const idleTime = Date.now() - this.lastActivityTime;
|
|
174
|
+
const shouldStop = idleTime > this.config.idleTimeoutMs;
|
|
175
|
+
if (shouldStop) {
|
|
176
|
+
this.logger.info("Worker idle timeout reached", {
|
|
177
|
+
worker: this.state.name,
|
|
178
|
+
idleTimeMs: idleTime,
|
|
179
|
+
idleTimeoutMs: this.config.idleTimeoutMs,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return shouldStop;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Mark the worker as shut down.
|
|
186
|
+
*/
|
|
187
|
+
shutdown() {
|
|
188
|
+
this.state.status = "shutdown";
|
|
189
|
+
this.logger.info("Worker shutdown", {
|
|
190
|
+
worker: this.state.name,
|
|
191
|
+
completedCount: this.state.completedCount,
|
|
192
|
+
failedCount: this.state.failedCount,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get the worker name.
|
|
197
|
+
*/
|
|
198
|
+
getName() {
|
|
199
|
+
return this.state.name;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if the worker is currently working.
|
|
203
|
+
*/
|
|
204
|
+
isWorking() {
|
|
205
|
+
return this.state.status === "working";
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=worker-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-mode.js","sourceRoot":"","sources":["../../src/tasks/worker-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Translation Layer
|
|
3
|
+
*
|
|
4
|
+
* Normalizes error formats from different LLM providers (Anthropic, OpenAI, Gemini)
|
|
5
|
+
* into AgentRouter's standardized error types. This allows consistent error handling
|
|
6
|
+
* regardless of which provider produced the error.
|
|
7
|
+
*
|
|
8
|
+
* Provider error format differences:
|
|
9
|
+
* - Anthropic: { type: "error", error: { type, message } }
|
|
10
|
+
* - OpenAI: { error: { message, type, code } }
|
|
11
|
+
* - Gemini: { error: { message, status, code } }
|
|
12
|
+
*
|
|
13
|
+
* All errors are mapped to the appropriate AgentRouterError subclass with the
|
|
14
|
+
* original error preserved in the `cause` property for debugging.
|
|
15
|
+
*/
|
|
16
|
+
import { AgentRouterError } from '../types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Anthropic API error structure.
|
|
19
|
+
* Format: { type: "error", error: { type: string, message: string } }
|
|
20
|
+
*/
|
|
21
|
+
export interface AnthropicError {
|
|
22
|
+
type?: 'error';
|
|
23
|
+
error?: {
|
|
24
|
+
type?: string;
|
|
25
|
+
message?: string;
|
|
26
|
+
};
|
|
27
|
+
status?: number;
|
|
28
|
+
statusCode?: number;
|
|
29
|
+
message?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* OpenAI API error structure.
|
|
33
|
+
* Format: { error: { message: string, type: string, code: string } }
|
|
34
|
+
*/
|
|
35
|
+
export interface OpenAIError {
|
|
36
|
+
error?: {
|
|
37
|
+
message?: string;
|
|
38
|
+
type?: string;
|
|
39
|
+
code?: string | null;
|
|
40
|
+
param?: string | null;
|
|
41
|
+
};
|
|
42
|
+
status?: number;
|
|
43
|
+
statusCode?: number;
|
|
44
|
+
message?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Google Gemini API error structure.
|
|
48
|
+
* Format: { error: { message: string, status: string, code: number } }
|
|
49
|
+
*/
|
|
50
|
+
export interface GeminiError {
|
|
51
|
+
error?: {
|
|
52
|
+
message?: string;
|
|
53
|
+
status?: string;
|
|
54
|
+
code?: number;
|
|
55
|
+
details?: {
|
|
56
|
+
'@type'?: string;
|
|
57
|
+
reason?: string;
|
|
58
|
+
domain?: string;
|
|
59
|
+
metadata?: Record<string, string>;
|
|
60
|
+
}[];
|
|
61
|
+
};
|
|
62
|
+
status?: number;
|
|
63
|
+
statusCode?: number;
|
|
64
|
+
message?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generic error with HTTP-like properties (for errors from fetch, SDK wrappers, etc.)
|
|
68
|
+
*/
|
|
69
|
+
export interface HttpError extends Error {
|
|
70
|
+
status?: number;
|
|
71
|
+
statusCode?: number;
|
|
72
|
+
code?: string;
|
|
73
|
+
response?: {
|
|
74
|
+
status?: number;
|
|
75
|
+
data?: unknown;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Translate an Anthropic API error to an AgentRouterError.
|
|
80
|
+
*
|
|
81
|
+
* Anthropic error format:
|
|
82
|
+
* ```json
|
|
83
|
+
* {
|
|
84
|
+
* "type": "error",
|
|
85
|
+
* "error": {
|
|
86
|
+
* "type": "invalid_request_error" | "authentication_error" | "rate_limit_error" | ...,
|
|
87
|
+
* "message": "Human-readable error message"
|
|
88
|
+
* }
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* Error types from Anthropic:
|
|
93
|
+
* - invalid_request_error: Bad request parameters (400)
|
|
94
|
+
* - authentication_error: Invalid API key (401)
|
|
95
|
+
* - permission_error: Forbidden (403)
|
|
96
|
+
* - not_found_error: Resource not found (404)
|
|
97
|
+
* - rate_limit_error: Rate limited (429)
|
|
98
|
+
* - api_error: Internal server error (500)
|
|
99
|
+
* - overloaded_error: Overloaded (529)
|
|
100
|
+
*
|
|
101
|
+
* @param error - The raw Anthropic error
|
|
102
|
+
* @returns Normalized AgentRouterError
|
|
103
|
+
*/
|
|
104
|
+
export declare function translateAnthropicError(error: AnthropicError): AgentRouterError;
|
|
105
|
+
/**
|
|
106
|
+
* Translate an OpenAI API error to an AgentRouterError.
|
|
107
|
+
*
|
|
108
|
+
* OpenAI error format:
|
|
109
|
+
* ```json
|
|
110
|
+
* {
|
|
111
|
+
* "error": {
|
|
112
|
+
* "message": "Human-readable error message",
|
|
113
|
+
* "type": "invalid_request_error" | "authentication_error" | "rate_limit_error" | ...,
|
|
114
|
+
* "code": "specific_error_code" | null,
|
|
115
|
+
* "param": "parameter_name" | null
|
|
116
|
+
* }
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* Common error types from OpenAI:
|
|
121
|
+
* - invalid_request_error: Bad request (400)
|
|
122
|
+
* - invalid_api_key: Invalid API key (401)
|
|
123
|
+
* - insufficient_quota: Quota exceeded (429)
|
|
124
|
+
* - rate_limit_exceeded: Rate limited (429)
|
|
125
|
+
* - server_error: Internal error (500)
|
|
126
|
+
* - engine_overloaded: Overloaded (503)
|
|
127
|
+
*
|
|
128
|
+
* @param error - The raw OpenAI error
|
|
129
|
+
* @returns Normalized AgentRouterError
|
|
130
|
+
*/
|
|
131
|
+
export declare function translateOpenAIError(error: OpenAIError): AgentRouterError;
|
|
132
|
+
/**
|
|
133
|
+
* Translate a Google Gemini API error to an AgentRouterError.
|
|
134
|
+
*
|
|
135
|
+
* Gemini error format:
|
|
136
|
+
* ```json
|
|
137
|
+
* {
|
|
138
|
+
* "error": {
|
|
139
|
+
* "code": 400,
|
|
140
|
+
* "message": "Human-readable error message",
|
|
141
|
+
* "status": "INVALID_ARGUMENT" | "UNAUTHENTICATED" | "RESOURCE_EXHAUSTED" | ...,
|
|
142
|
+
* "details": [...]
|
|
143
|
+
* }
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*
|
|
147
|
+
* Common status values from Gemini:
|
|
148
|
+
* - INVALID_ARGUMENT: Bad request (400)
|
|
149
|
+
* - UNAUTHENTICATED: Invalid API key (401)
|
|
150
|
+
* - PERMISSION_DENIED: Forbidden (403)
|
|
151
|
+
* - NOT_FOUND: Resource not found (404)
|
|
152
|
+
* - RESOURCE_EXHAUSTED: Rate limited or quota exceeded (429)
|
|
153
|
+
* - INTERNAL: Internal server error (500)
|
|
154
|
+
* - UNAVAILABLE: Service unavailable (503)
|
|
155
|
+
*
|
|
156
|
+
* @param error - The raw Gemini error
|
|
157
|
+
* @returns Normalized AgentRouterError
|
|
158
|
+
*/
|
|
159
|
+
export declare function translateGeminiError(error: GeminiError): AgentRouterError;
|
|
160
|
+
/**
|
|
161
|
+
* Translate any error into an AgentRouterError.
|
|
162
|
+
* Used when the provider is unknown or for generic error handling.
|
|
163
|
+
*
|
|
164
|
+
* @param error - Any error object
|
|
165
|
+
* @param provider - Provider name for error context
|
|
166
|
+
* @returns Normalized AgentRouterError
|
|
167
|
+
*/
|
|
168
|
+
export declare function translateGenericError(error: unknown, provider: string): AgentRouterError;
|
|
169
|
+
/**
|
|
170
|
+
* Translate an error from a specific provider.
|
|
171
|
+
* Routes to the appropriate provider-specific translator.
|
|
172
|
+
*
|
|
173
|
+
* @param error - The raw error from the provider
|
|
174
|
+
* @param provider - Provider name ('anthropic', 'openai', 'google', etc.)
|
|
175
|
+
* @returns Normalized AgentRouterError
|
|
176
|
+
*/
|
|
177
|
+
export declare function translateProviderError(error: unknown, provider: string): AgentRouterError;
|
|
178
|
+
/**
|
|
179
|
+
* Wrap an async function to translate provider errors.
|
|
180
|
+
* Useful for wrapping provider calls to ensure consistent error handling.
|
|
181
|
+
*
|
|
182
|
+
* @param fn - Async function to wrap
|
|
183
|
+
* @param provider - Provider name for error context
|
|
184
|
+
* @returns Wrapped function that translates errors
|
|
185
|
+
*/
|
|
186
|
+
export declare function withErrorTranslation<T extends unknown[], R>(fn: (...args: T) => Promise<R>, provider: string): (...args: T) => Promise<R>;
|
|
187
|
+
/**
|
|
188
|
+
* Check if an error is retryable (transient error that may succeed on retry).
|
|
189
|
+
*
|
|
190
|
+
* @param error - The error to check
|
|
191
|
+
* @returns True if the error is retryable
|
|
192
|
+
*/
|
|
193
|
+
export declare function isRetryableError(error: unknown): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Get recommended retry delay for an error.
|
|
196
|
+
*
|
|
197
|
+
* @param error - The error to get retry delay for
|
|
198
|
+
* @param attempt - Current attempt number (1-based)
|
|
199
|
+
* @param baseDelayMs - Base delay in milliseconds (default: 1000)
|
|
200
|
+
* @returns Recommended delay in milliseconds, or undefined if not retryable
|
|
201
|
+
*/
|
|
202
|
+
export declare function getRetryDelay(error: unknown, attempt: number, baseDelayMs?: number): number | undefined;
|
|
203
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/translation/errors.ts"],"names":[],"mappings":"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"}
|