@stoneforge/smithy 0.1.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 +13 -0
- package/README.md +114 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +7 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/orchestrator-api.d.ts +153 -0
- package/dist/api/orchestrator-api.d.ts.map +1 -0
- package/dist/api/orchestrator-api.js +374 -0
- package/dist/api/orchestrator-api.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +10 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +20 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +861 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +14 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +272 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/dispatch.d.ts +9 -0
- package/dist/cli/commands/dispatch.d.ts.map +1 -0
- package/dist/cli/commands/dispatch.js +128 -0
- package/dist/cli/commands/dispatch.js.map +1 -0
- package/dist/cli/commands/merge.d.ts +11 -0
- package/dist/cli/commands/merge.d.ts.map +1 -0
- package/dist/cli/commands/merge.js +246 -0
- package/dist/cli/commands/merge.js.map +1 -0
- package/dist/cli/commands/pool.d.ts +21 -0
- package/dist/cli/commands/pool.d.ts.map +1 -0
- package/dist/cli/commands/pool.js +762 -0
- package/dist/cli/commands/pool.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +54 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +57 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/task.d.ts +36 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +889 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/test-orchestration.d.ts +32 -0
- package/dist/cli/commands/test-orchestration.d.ts.map +1 -0
- package/dist/cli/commands/test-orchestration.js +392 -0
- package/dist/cli/commands/test-orchestration.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/plugin.d.ts +23 -0
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +36 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/git/index.d.ts +10 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +12 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/merge.d.ts +79 -0
- package/dist/git/merge.d.ts.map +1 -0
- package/dist/git/merge.js +254 -0
- package/dist/git/merge.js.map +1 -0
- package/dist/git/worktree-manager.d.ts +299 -0
- package/dist/git/worktree-manager.d.ts.map +1 -0
- package/dist/git/worktree-manager.js +744 -0
- package/dist/git/worktree-manager.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/director.md +272 -0
- package/dist/prompts/index.d.ts +100 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +294 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/message-triage.md +50 -0
- package/dist/prompts/persistent-worker.md +240 -0
- package/dist/prompts/steward-base.md +64 -0
- package/dist/prompts/steward-docs.md +118 -0
- package/dist/prompts/steward-health.md +39 -0
- package/dist/prompts/steward-merge.md +168 -0
- package/dist/prompts/steward-ops.md +28 -0
- package/dist/prompts/steward-reminder.md +26 -0
- package/dist/prompts/worker.md +282 -0
- package/dist/providers/claude/headless.d.ts +18 -0
- package/dist/providers/claude/headless.d.ts.map +1 -0
- package/dist/providers/claude/headless.js +307 -0
- package/dist/providers/claude/headless.js.map +1 -0
- package/dist/providers/claude/index.d.ts +24 -0
- package/dist/providers/claude/index.d.ts.map +1 -0
- package/dist/providers/claude/index.js +80 -0
- package/dist/providers/claude/index.js.map +1 -0
- package/dist/providers/claude/interactive.d.ts +21 -0
- package/dist/providers/claude/interactive.d.ts.map +1 -0
- package/dist/providers/claude/interactive.js +142 -0
- package/dist/providers/claude/interactive.js.map +1 -0
- package/dist/providers/codex/event-mapper.d.ts +91 -0
- package/dist/providers/codex/event-mapper.d.ts.map +1 -0
- package/dist/providers/codex/event-mapper.js +299 -0
- package/dist/providers/codex/event-mapper.js.map +1 -0
- package/dist/providers/codex/headless.d.ts +20 -0
- package/dist/providers/codex/headless.d.ts.map +1 -0
- package/dist/providers/codex/headless.js +174 -0
- package/dist/providers/codex/headless.js.map +1 -0
- package/dist/providers/codex/index.d.ts +30 -0
- package/dist/providers/codex/index.d.ts.map +1 -0
- package/dist/providers/codex/index.js +55 -0
- package/dist/providers/codex/index.js.map +1 -0
- package/dist/providers/codex/interactive.d.ts +21 -0
- package/dist/providers/codex/interactive.d.ts.map +1 -0
- package/dist/providers/codex/interactive.js +141 -0
- package/dist/providers/codex/interactive.js.map +1 -0
- package/dist/providers/codex/jsonrpc-client.d.ts +52 -0
- package/dist/providers/codex/jsonrpc-client.d.ts.map +1 -0
- package/dist/providers/codex/jsonrpc-client.js +141 -0
- package/dist/providers/codex/jsonrpc-client.js.map +1 -0
- package/dist/providers/codex/server-manager.d.ts +100 -0
- package/dist/providers/codex/server-manager.d.ts.map +1 -0
- package/dist/providers/codex/server-manager.js +153 -0
- package/dist/providers/codex/server-manager.js.map +1 -0
- package/dist/providers/index.d.ts +15 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/opencode/async-queue.d.ts +21 -0
- package/dist/providers/opencode/async-queue.d.ts.map +1 -0
- package/dist/providers/opencode/async-queue.js +51 -0
- package/dist/providers/opencode/async-queue.js.map +1 -0
- package/dist/providers/opencode/event-mapper.d.ts +132 -0
- package/dist/providers/opencode/event-mapper.d.ts.map +1 -0
- package/dist/providers/opencode/event-mapper.js +204 -0
- package/dist/providers/opencode/event-mapper.js.map +1 -0
- package/dist/providers/opencode/headless.d.ts +25 -0
- package/dist/providers/opencode/headless.d.ts.map +1 -0
- package/dist/providers/opencode/headless.js +190 -0
- package/dist/providers/opencode/headless.js.map +1 -0
- package/dist/providers/opencode/index.d.ts +33 -0
- package/dist/providers/opencode/index.d.ts.map +1 -0
- package/dist/providers/opencode/index.js +42 -0
- package/dist/providers/opencode/index.js.map +1 -0
- package/dist/providers/opencode/interactive.d.ts +21 -0
- package/dist/providers/opencode/interactive.d.ts.map +1 -0
- package/dist/providers/opencode/interactive.js +135 -0
- package/dist/providers/opencode/interactive.js.map +1 -0
- package/dist/providers/opencode/server-manager.d.ts +145 -0
- package/dist/providers/opencode/server-manager.d.ts.map +1 -0
- package/dist/providers/opencode/server-manager.js +163 -0
- package/dist/providers/opencode/server-manager.js.map +1 -0
- package/dist/providers/registry.d.ts +38 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +82 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +144 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +25 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/runtime/event-utils.d.ts +8 -0
- package/dist/runtime/event-utils.d.ts.map +1 -0
- package/dist/runtime/event-utils.js +23 -0
- package/dist/runtime/event-utils.js.map +1 -0
- package/dist/runtime/handoff.d.ts +195 -0
- package/dist/runtime/handoff.d.ts.map +1 -0
- package/dist/runtime/handoff.js +332 -0
- package/dist/runtime/handoff.js.map +1 -0
- package/dist/runtime/index.d.ts +17 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +60 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/message-mapper.d.ts +99 -0
- package/dist/runtime/message-mapper.d.ts.map +1 -0
- package/dist/runtime/message-mapper.js +202 -0
- package/dist/runtime/message-mapper.js.map +1 -0
- package/dist/runtime/predecessor-query.d.ts +212 -0
- package/dist/runtime/predecessor-query.d.ts.map +1 -0
- package/dist/runtime/predecessor-query.js +283 -0
- package/dist/runtime/predecessor-query.js.map +1 -0
- package/dist/runtime/session-manager.d.ts +466 -0
- package/dist/runtime/session-manager.d.ts.map +1 -0
- package/dist/runtime/session-manager.js +986 -0
- package/dist/runtime/session-manager.js.map +1 -0
- package/dist/runtime/spawner.d.ts +407 -0
- package/dist/runtime/spawner.d.ts.map +1 -0
- package/dist/runtime/spawner.js +781 -0
- package/dist/runtime/spawner.js.map +1 -0
- package/dist/server/config.d.ts +22 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +59 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/daemon-state.d.ts +50 -0
- package/dist/server/daemon-state.d.ts.map +1 -0
- package/dist/server/daemon-state.js +100 -0
- package/dist/server/daemon-state.js.map +1 -0
- package/dist/server/events-websocket.d.ts +32 -0
- package/dist/server/events-websocket.d.ts.map +1 -0
- package/dist/server/events-websocket.js +96 -0
- package/dist/server/events-websocket.js.map +1 -0
- package/dist/server/formatters.d.ts +94 -0
- package/dist/server/formatters.d.ts.map +1 -0
- package/dist/server/formatters.js +142 -0
- package/dist/server/formatters.js.map +1 -0
- package/dist/server/index.d.ts +17 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +153 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lsp-websocket.d.ts +33 -0
- package/dist/server/lsp-websocket.d.ts.map +1 -0
- package/dist/server/lsp-websocket.js +161 -0
- package/dist/server/lsp-websocket.js.map +1 -0
- package/dist/server/routes/agents.d.ts +9 -0
- package/dist/server/routes/agents.d.ts.map +1 -0
- package/dist/server/routes/agents.js +369 -0
- package/dist/server/routes/agents.js.map +1 -0
- package/dist/server/routes/daemon.d.ts +13 -0
- package/dist/server/routes/daemon.d.ts.map +1 -0
- package/dist/server/routes/daemon.js +187 -0
- package/dist/server/routes/daemon.js.map +1 -0
- package/dist/server/routes/events.d.ts +23 -0
- package/dist/server/routes/events.d.ts.map +1 -0
- package/dist/server/routes/events.js +282 -0
- package/dist/server/routes/events.js.map +1 -0
- package/dist/server/routes/extensions.d.ts +9 -0
- package/dist/server/routes/extensions.d.ts.map +1 -0
- package/dist/server/routes/extensions.js +202 -0
- package/dist/server/routes/extensions.js.map +1 -0
- package/dist/server/routes/health.d.ts +7 -0
- package/dist/server/routes/health.d.ts.map +1 -0
- package/dist/server/routes/health.js +33 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/index.d.ts +21 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +21 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/lsp.d.ts +9 -0
- package/dist/server/routes/lsp.d.ts.map +1 -0
- package/dist/server/routes/lsp.js +50 -0
- package/dist/server/routes/lsp.js.map +1 -0
- package/dist/server/routes/plugins.d.ts +9 -0
- package/dist/server/routes/plugins.d.ts.map +1 -0
- package/dist/server/routes/plugins.js +109 -0
- package/dist/server/routes/plugins.js.map +1 -0
- package/dist/server/routes/pools.d.ts +9 -0
- package/dist/server/routes/pools.d.ts.map +1 -0
- package/dist/server/routes/pools.js +189 -0
- package/dist/server/routes/pools.js.map +1 -0
- package/dist/server/routes/scheduler.d.ts +9 -0
- package/dist/server/routes/scheduler.d.ts.map +1 -0
- package/dist/server/routes/scheduler.js +162 -0
- package/dist/server/routes/scheduler.js.map +1 -0
- package/dist/server/routes/sessions.d.ts +27 -0
- package/dist/server/routes/sessions.d.ts.map +1 -0
- package/dist/server/routes/sessions.js +773 -0
- package/dist/server/routes/sessions.js.map +1 -0
- package/dist/server/routes/tasks.d.ts +9 -0
- package/dist/server/routes/tasks.d.ts.map +1 -0
- package/dist/server/routes/tasks.js +954 -0
- package/dist/server/routes/tasks.js.map +1 -0
- package/dist/server/routes/upload.d.ts +8 -0
- package/dist/server/routes/upload.d.ts.map +1 -0
- package/dist/server/routes/upload.js +40 -0
- package/dist/server/routes/upload.js.map +1 -0
- package/dist/server/routes/workflows.d.ts +9 -0
- package/dist/server/routes/workflows.d.ts.map +1 -0
- package/dist/server/routes/workflows.js +532 -0
- package/dist/server/routes/workflows.js.map +1 -0
- package/dist/server/routes/workspace-files.d.ts +12 -0
- package/dist/server/routes/workspace-files.d.ts.map +1 -0
- package/dist/server/routes/workspace-files.js +520 -0
- package/dist/server/routes/workspace-files.js.map +1 -0
- package/dist/server/routes/worktrees.d.ts +9 -0
- package/dist/server/routes/worktrees.d.ts.map +1 -0
- package/dist/server/routes/worktrees.js +94 -0
- package/dist/server/routes/worktrees.js.map +1 -0
- package/dist/server/server.d.ts +14 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +258 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/services/lsp-manager.d.ts +93 -0
- package/dist/server/services/lsp-manager.d.ts.map +1 -0
- package/dist/server/services/lsp-manager.js +291 -0
- package/dist/server/services/lsp-manager.js.map +1 -0
- package/dist/server/services/session-messages.d.ts +61 -0
- package/dist/server/services/session-messages.d.ts.map +1 -0
- package/dist/server/services/session-messages.js +101 -0
- package/dist/server/services/session-messages.js.map +1 -0
- package/dist/server/services.d.ts +35 -0
- package/dist/server/services.d.ts.map +1 -0
- package/dist/server/services.js +159 -0
- package/dist/server/services.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/types.d.ts +20 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +7 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/websocket.d.ts +16 -0
- package/dist/server/websocket.d.ts.map +1 -0
- package/dist/server/websocket.js +143 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/services/agent-pool-service.d.ts +181 -0
- package/dist/services/agent-pool-service.d.ts.map +1 -0
- package/dist/services/agent-pool-service.js +590 -0
- package/dist/services/agent-pool-service.js.map +1 -0
- package/dist/services/agent-registry.d.ts +185 -0
- package/dist/services/agent-registry.d.ts.map +1 -0
- package/dist/services/agent-registry.js +432 -0
- package/dist/services/agent-registry.js.map +1 -0
- package/dist/services/dispatch-daemon.d.ts +429 -0
- package/dist/services/dispatch-daemon.d.ts.map +1 -0
- package/dist/services/dispatch-daemon.js +1833 -0
- package/dist/services/dispatch-daemon.js.map +1 -0
- package/dist/services/dispatch-service.d.ts +148 -0
- package/dist/services/dispatch-service.d.ts.map +1 -0
- package/dist/services/dispatch-service.js +170 -0
- package/dist/services/dispatch-service.js.map +1 -0
- package/dist/services/docs-steward-service.d.ts +199 -0
- package/dist/services/docs-steward-service.d.ts.map +1 -0
- package/dist/services/docs-steward-service.js +599 -0
- package/dist/services/docs-steward-service.js.map +1 -0
- package/dist/services/health-steward-service.d.ts +446 -0
- package/dist/services/health-steward-service.d.ts.map +1 -0
- package/dist/services/health-steward-service.js +866 -0
- package/dist/services/health-steward-service.js.map +1 -0
- package/dist/services/index.d.ts +26 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +111 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/merge-request-provider.d.ts +59 -0
- package/dist/services/merge-request-provider.d.ts.map +1 -0
- package/dist/services/merge-request-provider.js +89 -0
- package/dist/services/merge-request-provider.js.map +1 -0
- package/dist/services/merge-steward-service.d.ts +268 -0
- package/dist/services/merge-steward-service.d.ts.map +1 -0
- package/dist/services/merge-steward-service.js +568 -0
- package/dist/services/merge-steward-service.js.map +1 -0
- package/dist/services/plugin-executor.d.ts +247 -0
- package/dist/services/plugin-executor.d.ts.map +1 -0
- package/dist/services/plugin-executor.js +451 -0
- package/dist/services/plugin-executor.js.map +1 -0
- package/dist/services/role-definition-service.d.ts +117 -0
- package/dist/services/role-definition-service.d.ts.map +1 -0
- package/dist/services/role-definition-service.js +289 -0
- package/dist/services/role-definition-service.js.map +1 -0
- package/dist/services/steward-scheduler.d.ts +336 -0
- package/dist/services/steward-scheduler.d.ts.map +1 -0
- package/dist/services/steward-scheduler.js +732 -0
- package/dist/services/steward-scheduler.js.map +1 -0
- package/dist/services/task-assignment-service.d.ts +291 -0
- package/dist/services/task-assignment-service.d.ts.map +1 -0
- package/dist/services/task-assignment-service.js +454 -0
- package/dist/services/task-assignment-service.js.map +1 -0
- package/dist/services/worker-task-service.d.ts +202 -0
- package/dist/services/worker-task-service.d.ts.map +1 -0
- package/dist/services/worker-task-service.js +228 -0
- package/dist/services/worker-task-service.js.map +1 -0
- package/dist/testing/index.d.ts +13 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +17 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/orchestration-tests.d.ts +62 -0
- package/dist/testing/orchestration-tests.d.ts.map +1 -0
- package/dist/testing/orchestration-tests.js +1115 -0
- package/dist/testing/orchestration-tests.js.map +1 -0
- package/dist/testing/test-context.d.ts +171 -0
- package/dist/testing/test-context.d.ts.map +1 -0
- package/dist/testing/test-context.js +665 -0
- package/dist/testing/test-context.js.map +1 -0
- package/dist/testing/test-prompts.d.ts +46 -0
- package/dist/testing/test-prompts.d.ts.map +1 -0
- package/dist/testing/test-prompts.js +140 -0
- package/dist/testing/test-prompts.js.map +1 -0
- package/dist/testing/test-utils.d.ts +200 -0
- package/dist/testing/test-utils.d.ts.map +1 -0
- package/dist/testing/test-utils.js +378 -0
- package/dist/testing/test-utils.js.map +1 -0
- package/dist/types/agent-pool.d.ts +215 -0
- package/dist/types/agent-pool.d.ts.map +1 -0
- package/dist/types/agent-pool.js +143 -0
- package/dist/types/agent-pool.js.map +1 -0
- package/dist/types/agent.d.ts +265 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +127 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +40 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/message-types.d.ts +294 -0
- package/dist/types/message-types.d.ts.map +1 -0
- package/dist/types/message-types.js +354 -0
- package/dist/types/message-types.js.map +1 -0
- package/dist/types/role-definition.d.ts +272 -0
- package/dist/types/role-definition.d.ts.map +1 -0
- package/dist/types/role-definition.js +144 -0
- package/dist/types/role-definition.js.map +1 -0
- package/dist/types/task-meta.d.ts +248 -0
- package/dist/types/task-meta.d.ts.map +1 -0
- package/dist/types/task-meta.js +213 -0
- package/dist/types/task-meta.js.map +1 -0
- package/package.json +120 -0
- package/web/assets/abap-BrgZPUOV.js +6 -0
- package/web/assets/apex-DyP6w7ZV.js +6 -0
- package/web/assets/azcli-BaLxmfj-.js +6 -0
- package/web/assets/bat-CFOPXBzS.js +6 -0
- package/web/assets/bicep-BfEKNvv3.js +7 -0
- package/web/assets/cameligo-BFG1Mk7z.js +6 -0
- package/web/assets/clojure-DTECt2xU.js +6 -0
- package/web/assets/codicon-DCmgc-ay.ttf +0 -0
- package/web/assets/coffee-CDGzqUPQ.js +6 -0
- package/web/assets/cpp-CLLBncYj.js +6 -0
- package/web/assets/csharp-dUCx_-0o.js +6 -0
- package/web/assets/csp-5Rap-vPy.js +6 -0
- package/web/assets/css-D3h14YRZ.js +8 -0
- package/web/assets/cssMode-DMo-5YLA.js +9 -0
- package/web/assets/cypher-DrQuvNYM.js +6 -0
- package/web/assets/dart-CFKIUWau.js +6 -0
- package/web/assets/dockerfile-Zznr-cwX.js +6 -0
- package/web/assets/ecl-Ce3n6wWz.js +6 -0
- package/web/assets/elixir-deUWdS0T.js +6 -0
- package/web/assets/flow9-i9-g7ZhI.js +6 -0
- package/web/assets/freemarker2-D4qgkQzN.js +8 -0
- package/web/assets/fsharp-CzKuDChf.js +6 -0
- package/web/assets/go-Cphgjts3.js +6 -0
- package/web/assets/graphql-Cg7bfA9N.js +6 -0
- package/web/assets/handlebars-CXFvNjQC.js +6 -0
- package/web/assets/hcl-0cvrggvQ.js +6 -0
- package/web/assets/html-oyuB_D-B.js +6 -0
- package/web/assets/htmlMode-iWuZ24-r.js +9 -0
- package/web/assets/index-DqP-_E4F.css +32 -0
- package/web/assets/index-R1cylSgw.js +1665 -0
- package/web/assets/ini-Drc7WvVn.js +6 -0
- package/web/assets/java-B_fMsGYe.js +6 -0
- package/web/assets/javascript-CRIkN2Pg.js +6 -0
- package/web/assets/jsonMode-DVDkDgex.js +15 -0
- package/web/assets/julia-Bqgm2twL.js +6 -0
- package/web/assets/kotlin-BSkB5QuD.js +6 -0
- package/web/assets/less-BsTHnhdd.js +7 -0
- package/web/assets/lexon-YWi4-JPR.js +6 -0
- package/web/assets/liquid-CSfldbB5.js +6 -0
- package/web/assets/lua-nf6ki56Z.js +6 -0
- package/web/assets/m3-Cpb6xl2v.js +6 -0
- package/web/assets/markdown-DSZPf7rp.js +6 -0
- package/web/assets/mdx-Dd58iymR.js +6 -0
- package/web/assets/mips-B_c3zf-v.js +6 -0
- package/web/assets/monaco-editor-B4lwqA13.js +751 -0
- package/web/assets/monaco-editor-CQpyCxOA.css +1 -0
- package/web/assets/msdax-rUNN04Wq.js +6 -0
- package/web/assets/mysql-DDwshQtU.js +6 -0
- package/web/assets/objective-c-B5zXfXm9.js +6 -0
- package/web/assets/pascal-CXOwvkN_.js +6 -0
- package/web/assets/pascaligo-Bc-ZgV77.js +6 -0
- package/web/assets/perl-CwNk8-XU.js +6 -0
- package/web/assets/pgsql-tGk8EFnU.js +6 -0
- package/web/assets/php-CpIb_Oan.js +6 -0
- package/web/assets/pla-B03wrqEc.js +6 -0
- package/web/assets/postiats-BKlk5iyT.js +6 -0
- package/web/assets/powerquery-Bhzvs7bI.js +6 -0
- package/web/assets/powershell-Dd3NCNK9.js +6 -0
- package/web/assets/protobuf-COyEY5Pt.js +7 -0
- package/web/assets/pug-BaJupSGV.js +6 -0
- package/web/assets/python-XWrMqdhO.js +6 -0
- package/web/assets/qsharp-DXyYeYxl.js +6 -0
- package/web/assets/r-CdQndTaG.js +6 -0
- package/web/assets/razor-DPlhCpIs.js +6 -0
- package/web/assets/redis-CVwtpugi.js +6 -0
- package/web/assets/redshift-25W9uPmb.js +6 -0
- package/web/assets/restructuredtext-DfzH4Xui.js +6 -0
- package/web/assets/router-vendor-DHlGizSU.js +41 -0
- package/web/assets/ruby-Cp1zYvxS.js +6 -0
- package/web/assets/rust-D5C2fndG.js +6 -0
- package/web/assets/sb-CDntyWJ8.js +6 -0
- package/web/assets/scala-BoFRg7Ot.js +6 -0
- package/web/assets/scheme-Bio4gycK.js +6 -0
- package/web/assets/scss-4Ik7cdeQ.js +8 -0
- package/web/assets/shell-CX-rkNHf.js +6 -0
- package/web/assets/solidity-Tw7wswEv.js +6 -0
- package/web/assets/sophia-C5WLch3f.js +6 -0
- package/web/assets/sparql-DHaeiCBh.js +6 -0
- package/web/assets/sql-CCSDG5nI.js +6 -0
- package/web/assets/st-pnP8ivHi.js +6 -0
- package/web/assets/swift-DwJ7jVG9.js +8 -0
- package/web/assets/systemverilog-B9Xyijhd.js +6 -0
- package/web/assets/tcl-DnHyzjbg.js +6 -0
- package/web/assets/tsMode-BbA1Jbf3.js +16 -0
- package/web/assets/twig-CPajHgWi.js +6 -0
- package/web/assets/typescript-DcLHYzvH.js +6 -0
- package/web/assets/typespec-D-MeaMDU.js +6 -0
- package/web/assets/ui-vendor-BSco96uv.js +51 -0
- package/web/assets/utils-vendor-DaJ2Dubl.js +911 -0
- package/web/assets/vb-DgyLZaXg.js +6 -0
- package/web/assets/wgsl-DYQUnd45.js +303 -0
- package/web/assets/xml-xKYS3dO6.js +6 -0
- package/web/assets/yaml-CNmlXqzH.js +6 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +22 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Assignment Service
|
|
3
|
+
*
|
|
4
|
+
* This service provides task assignment functionality for the orchestration system.
|
|
5
|
+
* It manages the assignment of tasks to agents with orchestrator metadata tracking
|
|
6
|
+
* including branch, worktree, and session associations.
|
|
7
|
+
*
|
|
8
|
+
* Key features:
|
|
9
|
+
* - Assign tasks to agents with orchestrator metadata
|
|
10
|
+
* - Query agent workload (tasks assigned to an agent)
|
|
11
|
+
* - Query unassigned tasks
|
|
12
|
+
* - Query tasks by assignment status
|
|
13
|
+
* - Track branch, worktree, sessionId in task metadata
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { createTimestamp, TaskStatus, ElementType, asElementId } from '@stoneforge/core';
|
|
18
|
+
import { getOrchestratorTaskMeta, setOrchestratorTaskMeta, updateOrchestratorTaskMeta, closeTaskSessionHistory, generateBranchName, generateWorktreePath, createSlugFromTitle, } from '../types/index.js';
|
|
19
|
+
import { isAgentEntity, getAgentMetadata, } from '../api/orchestrator-api.js';
|
|
20
|
+
/**
|
|
21
|
+
* All valid assignment status values
|
|
22
|
+
*/
|
|
23
|
+
export const AssignmentStatusValues = [
|
|
24
|
+
'unassigned',
|
|
25
|
+
'assigned',
|
|
26
|
+
'in_progress',
|
|
27
|
+
'completed',
|
|
28
|
+
'merged',
|
|
29
|
+
];
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Task Assignment Service Implementation
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Implementation of the Task Assignment Service.
|
|
35
|
+
*
|
|
36
|
+
* This implementation uses the QuarryAPI for storage operations.
|
|
37
|
+
*/
|
|
38
|
+
export class TaskAssignmentServiceImpl {
|
|
39
|
+
api;
|
|
40
|
+
mergeRequestProvider;
|
|
41
|
+
constructor(api, mergeRequestProvider) {
|
|
42
|
+
this.api = api;
|
|
43
|
+
this.mergeRequestProvider = mergeRequestProvider;
|
|
44
|
+
}
|
|
45
|
+
// ----------------------------------------
|
|
46
|
+
// Assignment Operations
|
|
47
|
+
// ----------------------------------------
|
|
48
|
+
async assignToAgent(taskId, agentId, options) {
|
|
49
|
+
// Get and validate the task
|
|
50
|
+
const task = await this.api.get(taskId);
|
|
51
|
+
if (!task || task.type !== ElementType.TASK) {
|
|
52
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
53
|
+
}
|
|
54
|
+
// Note: Previously there was a guard against reassignment here, but
|
|
55
|
+
// the dispatch service needs to support task reassignment. The dispatch
|
|
56
|
+
// layer is responsible for determining when reassignment is appropriate
|
|
57
|
+
// (e.g., for handoffs). Callers who want to prevent reassignment should
|
|
58
|
+
// check task.assignee before calling assignToAgent.
|
|
59
|
+
// Get and validate the agent
|
|
60
|
+
const agent = await this.api.get(asElementId(agentId));
|
|
61
|
+
if (!agent || agent.type !== ElementType.ENTITY || !isAgentEntity(agent)) {
|
|
62
|
+
throw new Error(`Agent not found: ${agentId}`);
|
|
63
|
+
}
|
|
64
|
+
// Generate branch and worktree names if not provided
|
|
65
|
+
const slug = createSlugFromTitle(task.title);
|
|
66
|
+
const branch = options?.branch ?? generateBranchName(agent.name, taskId, slug);
|
|
67
|
+
const worktree = options?.worktree ?? generateWorktreePath(agent.name, slug);
|
|
68
|
+
// Update task assignee
|
|
69
|
+
await this.api.update(taskId, { assignee: agentId });
|
|
70
|
+
// Get existing orchestrator metadata to preserve handoff history
|
|
71
|
+
const existingMeta = getOrchestratorTaskMeta(task.metadata);
|
|
72
|
+
// Build new orchestrator metadata, preserving handoff context if this is a reassignment
|
|
73
|
+
const orchestratorMeta = {
|
|
74
|
+
assignedAgent: agentId,
|
|
75
|
+
branch: options?.branch ?? existingMeta?.handoffBranch ?? branch,
|
|
76
|
+
worktree: options?.worktree ?? existingMeta?.handoffWorktree ?? worktree,
|
|
77
|
+
sessionId: options?.sessionId,
|
|
78
|
+
mergeStatus: 'pending',
|
|
79
|
+
// Preserve handoff history from previous assignments
|
|
80
|
+
handoffHistory: existingMeta?.handoffHistory,
|
|
81
|
+
};
|
|
82
|
+
// If marking as started, add start time
|
|
83
|
+
if (options?.markAsStarted) {
|
|
84
|
+
orchestratorMeta.startedAt = createTimestamp();
|
|
85
|
+
}
|
|
86
|
+
const currentMeta = task.metadata;
|
|
87
|
+
const newMetadata = setOrchestratorTaskMeta(currentMeta, orchestratorMeta);
|
|
88
|
+
// Update status to active if marking as started
|
|
89
|
+
const updates = { metadata: newMetadata };
|
|
90
|
+
if (options?.markAsStarted) {
|
|
91
|
+
updates.status = TaskStatus.IN_PROGRESS;
|
|
92
|
+
}
|
|
93
|
+
return this.api.update(taskId, updates);
|
|
94
|
+
}
|
|
95
|
+
async unassignTask(taskId) {
|
|
96
|
+
const task = await this.api.get(taskId);
|
|
97
|
+
if (!task || task.type !== ElementType.TASK) {
|
|
98
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
99
|
+
}
|
|
100
|
+
// Clear assignee
|
|
101
|
+
await this.api.update(taskId, { assignee: undefined });
|
|
102
|
+
// Update orchestrator metadata - preserve branch info but clear agent-specific data
|
|
103
|
+
const currentMeta = getOrchestratorTaskMeta(task.metadata);
|
|
104
|
+
if (currentMeta) {
|
|
105
|
+
const newMeta = updateOrchestratorTaskMeta(task.metadata, {
|
|
106
|
+
assignedAgent: undefined,
|
|
107
|
+
sessionId: undefined,
|
|
108
|
+
worktree: undefined,
|
|
109
|
+
startedAt: undefined,
|
|
110
|
+
});
|
|
111
|
+
return this.api.update(taskId, { metadata: newMeta });
|
|
112
|
+
}
|
|
113
|
+
return this.api.get(taskId);
|
|
114
|
+
}
|
|
115
|
+
async startTask(taskId, sessionId) {
|
|
116
|
+
const task = await this.api.get(taskId);
|
|
117
|
+
if (!task || task.type !== ElementType.TASK) {
|
|
118
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
119
|
+
}
|
|
120
|
+
const updates = {
|
|
121
|
+
startedAt: createTimestamp(),
|
|
122
|
+
};
|
|
123
|
+
if (sessionId) {
|
|
124
|
+
updates.sessionId = sessionId;
|
|
125
|
+
}
|
|
126
|
+
const newMeta = updateOrchestratorTaskMeta(task.metadata, updates);
|
|
127
|
+
return this.api.update(taskId, {
|
|
128
|
+
status: TaskStatus.IN_PROGRESS,
|
|
129
|
+
metadata: newMeta,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async completeTask(taskId, options) {
|
|
133
|
+
const task = await this.api.get(taskId);
|
|
134
|
+
if (!task || task.type !== ElementType.TASK) {
|
|
135
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
136
|
+
}
|
|
137
|
+
if (task.status === TaskStatus.CLOSED || task.status === TaskStatus.REVIEW) {
|
|
138
|
+
throw new Error(`Cannot complete task ${taskId}: task is already in '${task.status}' status`);
|
|
139
|
+
}
|
|
140
|
+
const currentMeta = getOrchestratorTaskMeta(task.metadata);
|
|
141
|
+
const branch = currentMeta?.branch;
|
|
142
|
+
const currentSessionId = currentMeta?.sessionId;
|
|
143
|
+
// Close the current session's history entry
|
|
144
|
+
let metadataWithClosedSession = task.metadata;
|
|
145
|
+
if (currentSessionId) {
|
|
146
|
+
metadataWithClosedSession = closeTaskSessionHistory(metadataWithClosedSession, currentSessionId, createTimestamp());
|
|
147
|
+
}
|
|
148
|
+
// Build the base metadata updates
|
|
149
|
+
const metaUpdates = {
|
|
150
|
+
completedAt: createTimestamp(),
|
|
151
|
+
mergeStatus: 'pending',
|
|
152
|
+
};
|
|
153
|
+
// Add optional completion info
|
|
154
|
+
if (options?.summary) {
|
|
155
|
+
metaUpdates.completionSummary = options.summary;
|
|
156
|
+
}
|
|
157
|
+
if (options?.commitHash) {
|
|
158
|
+
metaUpdates.lastCommitHash = options.commitHash;
|
|
159
|
+
}
|
|
160
|
+
// PR creation is attempted when a provider is configured and not explicitly disabled
|
|
161
|
+
let mergeRequestUrl;
|
|
162
|
+
let mergeRequestId;
|
|
163
|
+
if (branch && this.mergeRequestProvider && options?.createMergeRequest !== false) {
|
|
164
|
+
const baseBranch = options?.baseBranch || 'main';
|
|
165
|
+
let body = `## Task\n\n**ID:** ${task.id}\n**Title:** ${task.title}\n\n`;
|
|
166
|
+
if (options?.summary) {
|
|
167
|
+
body += `## Summary\n\n${options.summary}\n\n`;
|
|
168
|
+
}
|
|
169
|
+
body += `---\n_Created by Stoneforge Smithy_`;
|
|
170
|
+
const mrResult = await this.mergeRequestProvider.createMergeRequest(task, {
|
|
171
|
+
title: options?.mergeRequestTitle || task.title,
|
|
172
|
+
body: options?.mergeRequestBody || body,
|
|
173
|
+
sourceBranch: branch,
|
|
174
|
+
targetBranch: baseBranch,
|
|
175
|
+
});
|
|
176
|
+
mergeRequestUrl = mrResult.url;
|
|
177
|
+
mergeRequestId = mrResult.id;
|
|
178
|
+
metaUpdates.mergeRequestUrl = mergeRequestUrl;
|
|
179
|
+
metaUpdates.mergeRequestId = mergeRequestId;
|
|
180
|
+
metaUpdates.mergeRequestProvider = this.mergeRequestProvider.name;
|
|
181
|
+
}
|
|
182
|
+
// When no provider is configured, skip PR creation but still complete the task.
|
|
183
|
+
// The merge steward can create PRs later if needed.
|
|
184
|
+
// Apply metadata updates on top of the closed session history
|
|
185
|
+
const newMeta = updateOrchestratorTaskMeta(metadataWithClosedSession, metaUpdates);
|
|
186
|
+
// Set status to REVIEW (not CLOSED) - merge steward will set CLOSED after merge
|
|
187
|
+
// Clear assignee - task is now awaiting merge review, not actively being worked on
|
|
188
|
+
const updatedTask = await this.api.update(taskId, {
|
|
189
|
+
status: TaskStatus.REVIEW,
|
|
190
|
+
assignee: undefined,
|
|
191
|
+
metadata: newMeta,
|
|
192
|
+
});
|
|
193
|
+
return {
|
|
194
|
+
task: updatedTask,
|
|
195
|
+
mergeRequestUrl,
|
|
196
|
+
mergeRequestId,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async handoffTask(taskId, options) {
|
|
200
|
+
const task = await this.api.get(taskId);
|
|
201
|
+
if (!task || task.type !== ElementType.TASK) {
|
|
202
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
203
|
+
}
|
|
204
|
+
const currentMeta = getOrchestratorTaskMeta(task.metadata);
|
|
205
|
+
const { sessionId, message, branch, worktree } = options;
|
|
206
|
+
// Close the current session's history entry using the sessionId from orchestrator metadata
|
|
207
|
+
// (the options.sessionId is the provider session ID, but we match on internal sessionId)
|
|
208
|
+
const currentSessionId = currentMeta?.sessionId;
|
|
209
|
+
let metadataWithClosedSession = task.metadata;
|
|
210
|
+
if (currentSessionId) {
|
|
211
|
+
metadataWithClosedSession = closeTaskSessionHistory(metadataWithClosedSession, currentSessionId, createTimestamp());
|
|
212
|
+
}
|
|
213
|
+
// Determine the branch and worktree to preserve
|
|
214
|
+
const handoffBranch = branch || currentMeta?.branch;
|
|
215
|
+
const handoffWorktree = worktree || currentMeta?.worktree;
|
|
216
|
+
// Build handoff history (append to existing history)
|
|
217
|
+
const existingHistory = currentMeta?.handoffHistory;
|
|
218
|
+
const handoffEntry = {
|
|
219
|
+
sessionId,
|
|
220
|
+
message,
|
|
221
|
+
branch: handoffBranch,
|
|
222
|
+
worktree: handoffWorktree,
|
|
223
|
+
handoffAt: createTimestamp(),
|
|
224
|
+
};
|
|
225
|
+
const handoffHistory = [...(existingHistory || []), handoffEntry];
|
|
226
|
+
// Append handoff note to the task's description Document
|
|
227
|
+
if (task.descriptionRef && message) {
|
|
228
|
+
try {
|
|
229
|
+
const doc = await this.api.get(asElementId(task.descriptionRef));
|
|
230
|
+
if (doc) {
|
|
231
|
+
const handoffLine = `\n\n[AGENT HANDOFF NOTE]: ${message}`;
|
|
232
|
+
await this.api.update(asElementId(task.descriptionRef), {
|
|
233
|
+
content: doc.content + handoffLine,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
// Non-fatal: handoff note is also preserved in handoffHistory
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Update orchestrator metadata with handoff info
|
|
242
|
+
const metaUpdates = {
|
|
243
|
+
// Clear assignment but preserve branch/worktree for continuation
|
|
244
|
+
assignedAgent: undefined,
|
|
245
|
+
sessionId: undefined,
|
|
246
|
+
startedAt: undefined,
|
|
247
|
+
// Clear mergeStatus so merge steward doesn't pick up the task
|
|
248
|
+
mergeStatus: undefined,
|
|
249
|
+
// Store handoff context
|
|
250
|
+
handoffBranch,
|
|
251
|
+
handoffWorktree,
|
|
252
|
+
lastSessionId: sessionId,
|
|
253
|
+
handoffAt: createTimestamp(),
|
|
254
|
+
handoffHistory,
|
|
255
|
+
};
|
|
256
|
+
// Apply metadata updates on top of the closed session history
|
|
257
|
+
const newMeta = updateOrchestratorTaskMeta(metadataWithClosedSession, metaUpdates);
|
|
258
|
+
// Update task: clear assignee, reset status to OPEN, update metadata
|
|
259
|
+
// Note: We store the handoff note in metadata since tasks use descriptionRef
|
|
260
|
+
// Setting status to OPEN ensures dispatch daemon can pick up the task
|
|
261
|
+
return this.api.update(taskId, {
|
|
262
|
+
assignee: undefined,
|
|
263
|
+
status: TaskStatus.OPEN,
|
|
264
|
+
metadata: newMeta,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
async updateSessionId(taskId, sessionId) {
|
|
268
|
+
const task = await this.api.get(taskId);
|
|
269
|
+
if (!task || task.type !== ElementType.TASK) {
|
|
270
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
271
|
+
}
|
|
272
|
+
const newMeta = updateOrchestratorTaskMeta(task.metadata, { sessionId });
|
|
273
|
+
return this.api.update(taskId, { metadata: newMeta });
|
|
274
|
+
}
|
|
275
|
+
// ----------------------------------------
|
|
276
|
+
// Workload Queries
|
|
277
|
+
// ----------------------------------------
|
|
278
|
+
async getAgentTasks(agentId, filter) {
|
|
279
|
+
return this.listAssignments({
|
|
280
|
+
...filter,
|
|
281
|
+
agentId,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
async getAgentWorkload(agentId) {
|
|
285
|
+
const tasks = await this.getAgentTasks(agentId);
|
|
286
|
+
const byStatus = {
|
|
287
|
+
open: 0,
|
|
288
|
+
in_progress: 0,
|
|
289
|
+
blocked: 0,
|
|
290
|
+
deferred: 0,
|
|
291
|
+
backlog: 0,
|
|
292
|
+
review: 0,
|
|
293
|
+
closed: 0,
|
|
294
|
+
tombstone: 0,
|
|
295
|
+
};
|
|
296
|
+
let inProgressCount = 0;
|
|
297
|
+
let awaitingMergeCount = 0;
|
|
298
|
+
for (const { task, orchestratorMeta } of tasks) {
|
|
299
|
+
// Count by task status
|
|
300
|
+
byStatus[task.status] = (byStatus[task.status] || 0) + 1;
|
|
301
|
+
// Count in-progress (in_progress with start time)
|
|
302
|
+
if (task.status === TaskStatus.IN_PROGRESS && orchestratorMeta?.startedAt) {
|
|
303
|
+
inProgressCount++;
|
|
304
|
+
}
|
|
305
|
+
// Count awaiting merge (review status with pending merge status)
|
|
306
|
+
if (task.status === TaskStatus.REVIEW) {
|
|
307
|
+
const mergeStatus = orchestratorMeta?.mergeStatus;
|
|
308
|
+
if (!mergeStatus || mergeStatus === 'pending' || mergeStatus === 'testing') {
|
|
309
|
+
awaitingMergeCount++;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
agentId,
|
|
315
|
+
totalTasks: tasks.length,
|
|
316
|
+
byStatus,
|
|
317
|
+
inProgressCount,
|
|
318
|
+
awaitingMergeCount,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
async agentHasCapacity(agentId) {
|
|
322
|
+
// Get the agent to check their max concurrent tasks
|
|
323
|
+
const agent = await this.api.get(asElementId(agentId));
|
|
324
|
+
if (!agent || !isAgentEntity(agent)) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
const meta = getAgentMetadata(agent);
|
|
328
|
+
const maxConcurrent = meta?.maxConcurrentTasks ?? 1;
|
|
329
|
+
// Count currently active tasks
|
|
330
|
+
const workload = await this.getAgentWorkload(agentId);
|
|
331
|
+
const activeTasks = workload.byStatus.in_progress || 0;
|
|
332
|
+
return activeTasks < maxConcurrent;
|
|
333
|
+
}
|
|
334
|
+
// ----------------------------------------
|
|
335
|
+
// Task Status Queries
|
|
336
|
+
// ----------------------------------------
|
|
337
|
+
async getUnassignedTasks(filter) {
|
|
338
|
+
const assignments = await this.listAssignments({
|
|
339
|
+
...filter,
|
|
340
|
+
assignmentStatus: 'unassigned',
|
|
341
|
+
});
|
|
342
|
+
return assignments.map((a) => a.task);
|
|
343
|
+
}
|
|
344
|
+
async getTasksByAssignmentStatus(status, filter) {
|
|
345
|
+
return this.listAssignments({
|
|
346
|
+
...filter,
|
|
347
|
+
assignmentStatus: status,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
async listAssignments(filter) {
|
|
351
|
+
// Build task filter from assignment filter
|
|
352
|
+
const taskFilter = {
|
|
353
|
+
type: 'task',
|
|
354
|
+
};
|
|
355
|
+
if (filter?.taskStatus) {
|
|
356
|
+
taskFilter.status = filter.taskStatus;
|
|
357
|
+
}
|
|
358
|
+
// Push assignee filter to API level when available (M-2)
|
|
359
|
+
if (filter?.agentId !== undefined) {
|
|
360
|
+
taskFilter.assignee = filter.agentId;
|
|
361
|
+
}
|
|
362
|
+
// Get tasks (pre-filtered by assignee at API level when possible)
|
|
363
|
+
const tasks = await this.api.list(taskFilter);
|
|
364
|
+
// Convert to assignments and apply filters
|
|
365
|
+
let assignments = tasks.map((task) => ({
|
|
366
|
+
taskId: task.id,
|
|
367
|
+
task,
|
|
368
|
+
orchestratorMeta: getOrchestratorTaskMeta(task.metadata),
|
|
369
|
+
}));
|
|
370
|
+
// Apply agent filter
|
|
371
|
+
if (filter?.agentId !== undefined) {
|
|
372
|
+
assignments = assignments.filter((a) => {
|
|
373
|
+
// Check both task.assignee and orchestrator metadata
|
|
374
|
+
return (a.task.assignee === filter.agentId ||
|
|
375
|
+
a.orchestratorMeta?.assignedAgent === filter.agentId);
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
// Apply assignment status filter
|
|
379
|
+
if (filter?.assignmentStatus !== undefined) {
|
|
380
|
+
const statuses = Array.isArray(filter.assignmentStatus)
|
|
381
|
+
? filter.assignmentStatus
|
|
382
|
+
: [filter.assignmentStatus];
|
|
383
|
+
assignments = assignments.filter((a) => {
|
|
384
|
+
const assignmentStatus = this.determineAssignmentStatus(a);
|
|
385
|
+
return statuses.includes(assignmentStatus);
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
// Apply merge status filter
|
|
389
|
+
if (filter?.mergeStatus !== undefined) {
|
|
390
|
+
const mergeStatuses = Array.isArray(filter.mergeStatus)
|
|
391
|
+
? filter.mergeStatus
|
|
392
|
+
: [filter.mergeStatus];
|
|
393
|
+
assignments = assignments.filter((a) => {
|
|
394
|
+
const mergeStatus = a.orchestratorMeta?.mergeStatus;
|
|
395
|
+
return mergeStatus !== undefined && mergeStatuses.includes(mergeStatus);
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
return assignments;
|
|
399
|
+
}
|
|
400
|
+
async getTasksAwaitingMerge() {
|
|
401
|
+
return this.listAssignments({
|
|
402
|
+
taskStatus: TaskStatus.REVIEW,
|
|
403
|
+
mergeStatus: ['pending', 'testing'],
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
// ----------------------------------------
|
|
407
|
+
// Private Helpers
|
|
408
|
+
// ----------------------------------------
|
|
409
|
+
/**
|
|
410
|
+
* Determines the assignment status of a task
|
|
411
|
+
*/
|
|
412
|
+
determineAssignmentStatus(assignment) {
|
|
413
|
+
const { task, orchestratorMeta } = assignment;
|
|
414
|
+
// Check status-based assignment states first (regardless of assignee)
|
|
415
|
+
// REVIEW status = task completed, awaiting merge review
|
|
416
|
+
if (task.status === TaskStatus.REVIEW) {
|
|
417
|
+
return 'completed';
|
|
418
|
+
}
|
|
419
|
+
// CLOSED status = either merged or completed
|
|
420
|
+
if (task.status === TaskStatus.CLOSED) {
|
|
421
|
+
const mergeStatus = orchestratorMeta?.mergeStatus;
|
|
422
|
+
if (mergeStatus === 'merged') {
|
|
423
|
+
return 'merged';
|
|
424
|
+
}
|
|
425
|
+
// CLOSED without 'merged' status is still 'completed'
|
|
426
|
+
return 'completed';
|
|
427
|
+
}
|
|
428
|
+
// Check if unassigned (only for tasks not in terminal states)
|
|
429
|
+
const hasAssignment = task.assignee || orchestratorMeta?.assignedAgent;
|
|
430
|
+
if (!hasAssignment) {
|
|
431
|
+
return 'unassigned';
|
|
432
|
+
}
|
|
433
|
+
// Check if actively being worked on
|
|
434
|
+
if (task.status === TaskStatus.IN_PROGRESS && orchestratorMeta?.startedAt) {
|
|
435
|
+
return 'in_progress';
|
|
436
|
+
}
|
|
437
|
+
// Assigned but not started
|
|
438
|
+
return 'assigned';
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
// ============================================================================
|
|
442
|
+
// Factory Function
|
|
443
|
+
// ============================================================================
|
|
444
|
+
/**
|
|
445
|
+
* Creates a TaskAssignmentService instance
|
|
446
|
+
*
|
|
447
|
+
* @param api - The QuarryAPI instance
|
|
448
|
+
* @param mergeRequestProvider - Optional provider for creating merge requests.
|
|
449
|
+
* When omitted, merge request creation is silently skipped.
|
|
450
|
+
*/
|
|
451
|
+
export function createTaskAssignmentService(api, mergeRequestProvider) {
|
|
452
|
+
return new TaskAssignmentServiceImpl(api, mergeRequestProvider);
|
|
453
|
+
}
|
|
454
|
+
//# sourceMappingURL=task-assignment-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-assignment-service.js","sourceRoot":"","sources":["../../src/services/task-assignment-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Task Service
|
|
3
|
+
*
|
|
4
|
+
* This service provides the complete workflow for workers picking up tasks
|
|
5
|
+
* and working in isolated worktrees. It orchestrates:
|
|
6
|
+
* - Task dispatch to worker
|
|
7
|
+
* - Worktree creation for task isolation
|
|
8
|
+
* - Worker spawning in the worktree
|
|
9
|
+
* - Task context delivery to worker
|
|
10
|
+
* - Task completion with branch ready for merge
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { Task, ElementId, EntityId, Timestamp } from '@stoneforge/core';
|
|
15
|
+
import type { QuarryAPI } from '@stoneforge/quarry';
|
|
16
|
+
import type { AgentEntity } from '../api/orchestrator-api.js';
|
|
17
|
+
import type { TaskAssignmentService } from './task-assignment-service.js';
|
|
18
|
+
import type { AgentRegistry } from './agent-registry.js';
|
|
19
|
+
import type { DispatchService, DispatchResult } from './dispatch-service.js';
|
|
20
|
+
import type { WorktreeManager, CreateWorktreeResult, WorktreeInfo } from '../git/worktree-manager.js';
|
|
21
|
+
import type { SpawnerService } from '../runtime/spawner.js';
|
|
22
|
+
import type { SessionManager, SessionRecord } from '../runtime/session-manager.js';
|
|
23
|
+
/**
|
|
24
|
+
* Options for starting a worker on a task
|
|
25
|
+
*/
|
|
26
|
+
export interface StartWorkerOnTaskOptions {
|
|
27
|
+
/** Custom branch name (auto-generated if not provided) */
|
|
28
|
+
branch?: string;
|
|
29
|
+
/** Custom worktree path (auto-generated if not provided) */
|
|
30
|
+
worktreePath?: string;
|
|
31
|
+
/** Base branch to create the worktree from (defaults to default branch) */
|
|
32
|
+
baseBranch?: string;
|
|
33
|
+
/** Additional initial prompt to prepend to task context */
|
|
34
|
+
additionalPrompt?: string;
|
|
35
|
+
/** Entity performing the operation */
|
|
36
|
+
performedBy?: EntityId;
|
|
37
|
+
/** Skip worktree creation (use existing working directory) */
|
|
38
|
+
skipWorktree?: boolean;
|
|
39
|
+
/** Custom working directory (used if skipWorktree is true) */
|
|
40
|
+
workingDirectory?: string;
|
|
41
|
+
/** Dispatch priority for notification */
|
|
42
|
+
priority?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Result of starting a worker on a task
|
|
46
|
+
*/
|
|
47
|
+
export interface StartWorkerOnTaskResult {
|
|
48
|
+
/** The task being worked on */
|
|
49
|
+
task: Task;
|
|
50
|
+
/** The worker agent */
|
|
51
|
+
agent: AgentEntity;
|
|
52
|
+
/** The dispatch result (notification sent) */
|
|
53
|
+
dispatch: DispatchResult;
|
|
54
|
+
/** The worktree created (if applicable) */
|
|
55
|
+
worktree?: CreateWorktreeResult;
|
|
56
|
+
/** The session spawned */
|
|
57
|
+
session: SessionRecord;
|
|
58
|
+
/** The task context prompt that was sent */
|
|
59
|
+
taskContextPrompt: string;
|
|
60
|
+
/** Timestamp when the worker started */
|
|
61
|
+
startedAt: Timestamp;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Options for completing a task
|
|
65
|
+
*/
|
|
66
|
+
export interface CompleteTaskOptions {
|
|
67
|
+
/** Summary of what was accomplished */
|
|
68
|
+
summary?: string;
|
|
69
|
+
/** Commit hash for the final commit */
|
|
70
|
+
commitHash?: string;
|
|
71
|
+
/** Whether to run tests before marking complete (defaults to false) */
|
|
72
|
+
runTests?: boolean;
|
|
73
|
+
/** Entity performing the completion */
|
|
74
|
+
performedBy?: EntityId;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Result of completing a task
|
|
78
|
+
*/
|
|
79
|
+
export interface CompleteTaskResult {
|
|
80
|
+
/** The completed task */
|
|
81
|
+
task: Task;
|
|
82
|
+
/** The worktree info (if applicable) */
|
|
83
|
+
worktree?: WorktreeInfo;
|
|
84
|
+
/** Whether the branch is ready for merge */
|
|
85
|
+
readyForMerge: boolean;
|
|
86
|
+
/** Timestamp when the task was completed */
|
|
87
|
+
completedAt: Timestamp;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Task context information for generating prompts
|
|
91
|
+
*/
|
|
92
|
+
export interface TaskContext {
|
|
93
|
+
/** Task ID */
|
|
94
|
+
taskId: ElementId;
|
|
95
|
+
/** Task title */
|
|
96
|
+
title: string;
|
|
97
|
+
/** Task description (from metadata) */
|
|
98
|
+
description?: string;
|
|
99
|
+
/** Task tags */
|
|
100
|
+
tags: string[];
|
|
101
|
+
/** Task priority (enum value) */
|
|
102
|
+
priority?: number;
|
|
103
|
+
/** Task complexity (enum value) */
|
|
104
|
+
complexity?: number;
|
|
105
|
+
/** Branch name */
|
|
106
|
+
branch?: string;
|
|
107
|
+
/** Worktree path */
|
|
108
|
+
worktreePath?: string;
|
|
109
|
+
/** Additional instructions */
|
|
110
|
+
additionalInstructions?: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Worker Task Service interface for orchestrating worker task workflow.
|
|
114
|
+
*
|
|
115
|
+
* This service provides the complete lifecycle management for workers:
|
|
116
|
+
* 1. Start worker on a task (dispatch + worktree + spawn)
|
|
117
|
+
* 2. Build task context prompts
|
|
118
|
+
* 3. Complete tasks (close + ready for merge)
|
|
119
|
+
* 4. Clean up after task completion
|
|
120
|
+
*/
|
|
121
|
+
export interface WorkerTaskService {
|
|
122
|
+
/**
|
|
123
|
+
* Starts a worker on a task with full worktree isolation.
|
|
124
|
+
*
|
|
125
|
+
* This method performs the complete workflow:
|
|
126
|
+
* 1. Dispatches the task to the worker (assigns + notifies)
|
|
127
|
+
* 2. Creates a worktree for the task (if worktrees enabled)
|
|
128
|
+
* 3. Spawns the worker session in the worktree
|
|
129
|
+
* 4. Sends task context to the worker
|
|
130
|
+
*
|
|
131
|
+
* @param taskId - The task to start
|
|
132
|
+
* @param agentId - The worker agent
|
|
133
|
+
* @param options - Options for starting
|
|
134
|
+
* @returns The complete result
|
|
135
|
+
*/
|
|
136
|
+
startWorkerOnTask(taskId: ElementId, agentId: EntityId, options?: StartWorkerOnTaskOptions): Promise<StartWorkerOnTaskResult>;
|
|
137
|
+
/**
|
|
138
|
+
* Completes a task and marks the branch as ready for merge.
|
|
139
|
+
*
|
|
140
|
+
* This method:
|
|
141
|
+
* 1. Marks the task as completed
|
|
142
|
+
* 2. Updates merge status to 'pending' (ready for Merge Steward)
|
|
143
|
+
* 3. Optionally runs tests
|
|
144
|
+
*
|
|
145
|
+
* @param taskId - The task to complete
|
|
146
|
+
* @param options - Completion options
|
|
147
|
+
* @returns The completion result
|
|
148
|
+
*/
|
|
149
|
+
completeTask(taskId: ElementId, options?: CompleteTaskOptions): Promise<CompleteTaskResult>;
|
|
150
|
+
/**
|
|
151
|
+
* Builds the task context prompt for a worker.
|
|
152
|
+
*
|
|
153
|
+
* @param taskId - The task
|
|
154
|
+
* @param workerId - The worker entity ID
|
|
155
|
+
* @param additionalInstructions - Additional instructions to include
|
|
156
|
+
* @returns The formatted task context prompt
|
|
157
|
+
*/
|
|
158
|
+
buildTaskContextPrompt(taskId: ElementId, workerId: EntityId, additionalInstructions?: string): Promise<string>;
|
|
159
|
+
/**
|
|
160
|
+
* Gets the task context information.
|
|
161
|
+
*
|
|
162
|
+
* @param taskId - The task
|
|
163
|
+
* @returns The task context
|
|
164
|
+
*/
|
|
165
|
+
getTaskContext(taskId: ElementId): Promise<TaskContext>;
|
|
166
|
+
/**
|
|
167
|
+
* Cleans up after a task is merged or abandoned.
|
|
168
|
+
*
|
|
169
|
+
* This method:
|
|
170
|
+
* 1. Removes the worktree
|
|
171
|
+
* 2. Optionally deletes the branch
|
|
172
|
+
* 3. Updates task metadata
|
|
173
|
+
*
|
|
174
|
+
* @param taskId - The task to clean up
|
|
175
|
+
* @param deleteBranch - Whether to delete the branch
|
|
176
|
+
* @returns Success status
|
|
177
|
+
*/
|
|
178
|
+
cleanupTask(taskId: ElementId, deleteBranch?: boolean): Promise<boolean>;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Implementation of the Worker Task Service.
|
|
182
|
+
*/
|
|
183
|
+
export declare class WorkerTaskServiceImpl implements WorkerTaskService {
|
|
184
|
+
private readonly api;
|
|
185
|
+
private readonly taskAssignment;
|
|
186
|
+
private readonly agentRegistry;
|
|
187
|
+
private readonly dispatchService;
|
|
188
|
+
private readonly worktreeManager;
|
|
189
|
+
private readonly _spawnerService;
|
|
190
|
+
private readonly sessionManager;
|
|
191
|
+
constructor(api: QuarryAPI, taskAssignment: TaskAssignmentService, agentRegistry: AgentRegistry, dispatchService: DispatchService, spawnerService: SpawnerService, sessionManager: SessionManager, worktreeManager?: WorktreeManager);
|
|
192
|
+
startWorkerOnTask(taskId: ElementId, agentId: EntityId, options?: StartWorkerOnTaskOptions): Promise<StartWorkerOnTaskResult>;
|
|
193
|
+
completeTask(taskId: ElementId, options?: CompleteTaskOptions): Promise<CompleteTaskResult>;
|
|
194
|
+
buildTaskContextPrompt(taskId: ElementId, workerId: EntityId, additionalInstructions?: string): Promise<string>;
|
|
195
|
+
getTaskContext(taskId: ElementId): Promise<TaskContext>;
|
|
196
|
+
cleanupTask(taskId: ElementId, deleteBranch?: boolean): Promise<boolean>;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Creates a WorkerTaskService instance
|
|
200
|
+
*/
|
|
201
|
+
export declare function createWorkerTaskService(api: QuarryAPI, taskAssignment: TaskAssignmentService, agentRegistry: AgentRegistry, dispatchService: DispatchService, spawnerService: SpawnerService, sessionManager: SessionManager, worktreeManager?: WorktreeManager): WorkerTaskService;
|
|
202
|
+
//# sourceMappingURL=worker-task-service.d.ts.map
|