@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,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role Definition Service
|
|
3
|
+
*
|
|
4
|
+
* This service provides methods for managing agent role definitions.
|
|
5
|
+
* Role definitions store system prompts and behavioral configurations
|
|
6
|
+
* for agents, enabling consistent agent behavior across the workspace.
|
|
7
|
+
*
|
|
8
|
+
* Key features:
|
|
9
|
+
* - Create role definitions with system prompts stored as Documents
|
|
10
|
+
* - Update role definitions (creates new Document versions for prompt changes)
|
|
11
|
+
* - Query role definitions by various criteria
|
|
12
|
+
* - Link role definitions to agents
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { ContentType, createDocument, createTimestamp } from '@stoneforge/core';
|
|
17
|
+
import { isAgentRoleDefinition, ROLE_DEFINITION_TAGS, generateRoleDefinitionTags, } from '../types/index.js';
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Constants
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Metadata key for storing role definition data in the Document
|
|
23
|
+
*/
|
|
24
|
+
const ROLE_DEF_META_KEY = 'roleDefinition';
|
|
25
|
+
/**
|
|
26
|
+
* Content type used for role definition storage
|
|
27
|
+
*/
|
|
28
|
+
const ROLE_DEF_CONTENT_TYPE = ContentType.JSON;
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Role Definition Service Implementation
|
|
31
|
+
// ============================================================================
|
|
32
|
+
/**
|
|
33
|
+
* Implementation of the Role Definition Service
|
|
34
|
+
*/
|
|
35
|
+
export class RoleDefinitionServiceImpl {
|
|
36
|
+
api;
|
|
37
|
+
constructor(api) {
|
|
38
|
+
this.api = api;
|
|
39
|
+
}
|
|
40
|
+
async createRoleDefinition(input) {
|
|
41
|
+
const now = createTimestamp();
|
|
42
|
+
// Create the system prompt document first
|
|
43
|
+
const systemPromptDoc = await createDocument({
|
|
44
|
+
contentType: ContentType.MARKDOWN,
|
|
45
|
+
content: input.systemPrompt,
|
|
46
|
+
createdBy: input.createdBy,
|
|
47
|
+
tags: [
|
|
48
|
+
ROLE_DEFINITION_TAGS.AGENT_PROMPT,
|
|
49
|
+
`${ROLE_DEFINITION_TAGS.ROLE_PREFIX}${input.role}`,
|
|
50
|
+
],
|
|
51
|
+
metadata: {
|
|
52
|
+
purpose: 'agent-system-prompt',
|
|
53
|
+
role: input.role,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
// Save the system prompt document
|
|
57
|
+
const savedPromptDoc = await this.api.create(systemPromptDoc);
|
|
58
|
+
// Build the role definition based on role type
|
|
59
|
+
let definition;
|
|
60
|
+
const baseDefinition = {
|
|
61
|
+
name: input.name,
|
|
62
|
+
description: input.description,
|
|
63
|
+
systemPromptRef: savedPromptDoc.id,
|
|
64
|
+
maxConcurrentTasks: input.maxConcurrentTasks ?? 1,
|
|
65
|
+
behaviors: input.behaviors,
|
|
66
|
+
tags: input.tags,
|
|
67
|
+
createdAt: now,
|
|
68
|
+
createdBy: input.createdBy,
|
|
69
|
+
updatedAt: now,
|
|
70
|
+
};
|
|
71
|
+
switch (input.role) {
|
|
72
|
+
case 'director':
|
|
73
|
+
definition = {
|
|
74
|
+
...baseDefinition,
|
|
75
|
+
role: 'director',
|
|
76
|
+
};
|
|
77
|
+
break;
|
|
78
|
+
case 'worker':
|
|
79
|
+
definition = {
|
|
80
|
+
...baseDefinition,
|
|
81
|
+
role: 'worker',
|
|
82
|
+
workerMode: input.workerMode,
|
|
83
|
+
};
|
|
84
|
+
break;
|
|
85
|
+
case 'steward':
|
|
86
|
+
definition = {
|
|
87
|
+
...baseDefinition,
|
|
88
|
+
role: 'steward',
|
|
89
|
+
stewardFocus: input.stewardFocus,
|
|
90
|
+
};
|
|
91
|
+
break;
|
|
92
|
+
default:
|
|
93
|
+
throw new Error(`Unknown role type: ${input.role}`);
|
|
94
|
+
}
|
|
95
|
+
// Create the role definition document
|
|
96
|
+
const roleDefDoc = await createDocument({
|
|
97
|
+
contentType: ROLE_DEF_CONTENT_TYPE,
|
|
98
|
+
content: JSON.stringify(definition, null, 2),
|
|
99
|
+
createdBy: input.createdBy,
|
|
100
|
+
tags: generateRoleDefinitionTags(input.role, input.tags),
|
|
101
|
+
metadata: {
|
|
102
|
+
[ROLE_DEF_META_KEY]: definition,
|
|
103
|
+
systemPromptDocId: savedPromptDoc.id,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
// Save the role definition document
|
|
107
|
+
const savedRoleDefDoc = await this.api.create(roleDefDoc);
|
|
108
|
+
return {
|
|
109
|
+
id: savedRoleDefDoc.id,
|
|
110
|
+
definition,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
async getRoleDefinition(id) {
|
|
114
|
+
const doc = await this.api.get(id);
|
|
115
|
+
if (!doc || doc.type !== 'document') {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
// Check if the document has been soft-deleted
|
|
119
|
+
// Soft-deleted documents have a deletedAt timestamp in their data
|
|
120
|
+
const docAny = doc;
|
|
121
|
+
if (docAny.deletedAt !== undefined && docAny.deletedAt !== null) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
// Try to extract from metadata first (faster)
|
|
125
|
+
const metaDef = doc.metadata?.[ROLE_DEF_META_KEY];
|
|
126
|
+
if (metaDef && isAgentRoleDefinition(metaDef)) {
|
|
127
|
+
return {
|
|
128
|
+
id: doc.id,
|
|
129
|
+
definition: metaDef,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// Fall back to parsing the content
|
|
133
|
+
if (doc.contentType === ROLE_DEF_CONTENT_TYPE) {
|
|
134
|
+
try {
|
|
135
|
+
const parsed = JSON.parse(doc.content);
|
|
136
|
+
if (isAgentRoleDefinition(parsed)) {
|
|
137
|
+
return {
|
|
138
|
+
id: doc.id,
|
|
139
|
+
definition: parsed,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Content is not valid JSON, ignore
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
async getSystemPrompt(id) {
|
|
150
|
+
const stored = await this.getRoleDefinition(id);
|
|
151
|
+
if (!stored) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
return this.getSystemPromptFromRef(stored.definition.systemPromptRef);
|
|
155
|
+
}
|
|
156
|
+
async getSystemPromptFromRef(documentId) {
|
|
157
|
+
const doc = await this.api.get(documentId);
|
|
158
|
+
if (!doc || doc.type !== 'document') {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
return doc.content;
|
|
162
|
+
}
|
|
163
|
+
async updateRoleDefinition(id, updates) {
|
|
164
|
+
const existing = await this.getRoleDefinition(id);
|
|
165
|
+
if (!existing) {
|
|
166
|
+
throw new Error(`Role definition not found: ${id}`);
|
|
167
|
+
}
|
|
168
|
+
const now = createTimestamp();
|
|
169
|
+
let newSystemPromptRef = existing.definition.systemPromptRef;
|
|
170
|
+
// If system prompt is being updated, create a new version
|
|
171
|
+
if (updates.systemPrompt !== undefined) {
|
|
172
|
+
const currentPromptDoc = await this.api.get(existing.definition.systemPromptRef);
|
|
173
|
+
if (!currentPromptDoc) {
|
|
174
|
+
throw new Error(`System prompt document not found: ${existing.definition.systemPromptRef}`);
|
|
175
|
+
}
|
|
176
|
+
// Create new version of the system prompt document
|
|
177
|
+
const updatedPromptDoc = await this.api.update(existing.definition.systemPromptRef, { content: updates.systemPrompt });
|
|
178
|
+
newSystemPromptRef = updatedPromptDoc.id;
|
|
179
|
+
}
|
|
180
|
+
// Determine maxConcurrentTasks
|
|
181
|
+
const newMaxConcurrentTasks = updates.maxConcurrentTasks ?? existing.definition.maxConcurrentTasks ?? 1;
|
|
182
|
+
// Merge behaviors
|
|
183
|
+
const newBehaviors = updates.behaviors || existing.definition.behaviors
|
|
184
|
+
? {
|
|
185
|
+
...existing.definition.behaviors,
|
|
186
|
+
...updates.behaviors,
|
|
187
|
+
}
|
|
188
|
+
: undefined;
|
|
189
|
+
// Build updated definition
|
|
190
|
+
const updatedDefinition = {
|
|
191
|
+
...existing.definition,
|
|
192
|
+
name: updates.name ?? existing.definition.name,
|
|
193
|
+
description: updates.description ?? existing.definition.description,
|
|
194
|
+
systemPromptRef: newSystemPromptRef,
|
|
195
|
+
maxConcurrentTasks: newMaxConcurrentTasks,
|
|
196
|
+
behaviors: newBehaviors,
|
|
197
|
+
tags: updates.tags ?? existing.definition.tags,
|
|
198
|
+
updatedAt: now,
|
|
199
|
+
};
|
|
200
|
+
// Update the role definition document
|
|
201
|
+
await this.api.update(id, {
|
|
202
|
+
content: JSON.stringify(updatedDefinition, null, 2),
|
|
203
|
+
metadata: {
|
|
204
|
+
[ROLE_DEF_META_KEY]: updatedDefinition,
|
|
205
|
+
systemPromptDocId: newSystemPromptRef,
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
return {
|
|
209
|
+
id,
|
|
210
|
+
definition: updatedDefinition,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
async listRoleDefinitions(filter) {
|
|
214
|
+
// Get all documents with the role-definition tag
|
|
215
|
+
const docs = await this.api.list({ type: 'document' });
|
|
216
|
+
// Filter to role definition documents
|
|
217
|
+
const roleDefDocs = docs.filter((doc) => doc.tags.includes(ROLE_DEFINITION_TAGS.ROLE_DEFINITION));
|
|
218
|
+
// Extract role definitions
|
|
219
|
+
const results = [];
|
|
220
|
+
for (const doc of roleDefDocs) {
|
|
221
|
+
const stored = await this.getRoleDefinition(doc.id);
|
|
222
|
+
if (stored) {
|
|
223
|
+
results.push(stored);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Apply filters
|
|
227
|
+
let filtered = results;
|
|
228
|
+
if (filter) {
|
|
229
|
+
if (filter.role !== undefined) {
|
|
230
|
+
filtered = filtered.filter((r) => r.definition.role === filter.role);
|
|
231
|
+
}
|
|
232
|
+
if (filter.workerMode !== undefined) {
|
|
233
|
+
filtered = filtered.filter((r) => {
|
|
234
|
+
if (r.definition.role !== 'worker')
|
|
235
|
+
return false;
|
|
236
|
+
const workerDef = r.definition;
|
|
237
|
+
return workerDef.workerMode === filter.workerMode;
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
if (filter.stewardFocus !== undefined) {
|
|
241
|
+
filtered = filtered.filter((r) => {
|
|
242
|
+
if (r.definition.role !== 'steward')
|
|
243
|
+
return false;
|
|
244
|
+
const stewardDef = r.definition;
|
|
245
|
+
return stewardDef.stewardFocus === filter.stewardFocus;
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
if (filter.tags && filter.tags.length > 0) {
|
|
249
|
+
filtered = filtered.filter((r) => {
|
|
250
|
+
const defTags = r.definition.tags ?? [];
|
|
251
|
+
return filter.tags.every((tag) => defTags.includes(tag));
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
if (filter.nameContains !== undefined) {
|
|
255
|
+
const searchTerm = filter.nameContains.toLowerCase();
|
|
256
|
+
filtered = filtered.filter((r) => r.definition.name.toLowerCase().includes(searchTerm));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return filtered;
|
|
260
|
+
}
|
|
261
|
+
async getRoleDefinitionsByRole(role) {
|
|
262
|
+
return this.listRoleDefinitions({ role });
|
|
263
|
+
}
|
|
264
|
+
async getDefaultRoleDefinition(role) {
|
|
265
|
+
const definitions = await this.getRoleDefinitionsByRole(role);
|
|
266
|
+
return definitions[0];
|
|
267
|
+
}
|
|
268
|
+
async deleteRoleDefinition(id) {
|
|
269
|
+
const existing = await this.getRoleDefinition(id);
|
|
270
|
+
if (!existing) {
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
// Delete the role definition document
|
|
274
|
+
await this.api.delete(id);
|
|
275
|
+
// Note: We don't delete the system prompt document as it may be
|
|
276
|
+
// referenced by other role definitions or historical records
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// Factory Function
|
|
282
|
+
// ============================================================================
|
|
283
|
+
/**
|
|
284
|
+
* Creates a RoleDefinitionService instance
|
|
285
|
+
*/
|
|
286
|
+
export function createRoleDefinitionService(api) {
|
|
287
|
+
return new RoleDefinitionServiceImpl(api);
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=role-definition-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-definition-service.js","sourceRoot":"","sources":["../../src/services/role-definition-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steward Scheduler Service
|
|
3
|
+
*
|
|
4
|
+
* This service executes stewards on schedule (cron) or in response to events.
|
|
5
|
+
* It manages the lifecycle of scheduled steward executions and tracks execution history.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Cron-based scheduling using node-cron
|
|
9
|
+
* - Event-driven triggers with condition evaluation
|
|
10
|
+
* - Execution history tracking
|
|
11
|
+
* - Graceful shutdown support
|
|
12
|
+
*
|
|
13
|
+
* TB-O23: Steward Scheduler Service
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import type { EntityId, Timestamp } from '@stoneforge/core';
|
|
18
|
+
import type { StewardTrigger, CronTrigger, EventTrigger } from '../types/index.js';
|
|
19
|
+
import type { AgentRegistry, AgentEntity } from './agent-registry.js';
|
|
20
|
+
/**
|
|
21
|
+
* Result of a steward execution
|
|
22
|
+
*/
|
|
23
|
+
export interface StewardExecutionResult {
|
|
24
|
+
/** Whether the execution succeeded */
|
|
25
|
+
readonly success: boolean;
|
|
26
|
+
/** Error message if execution failed */
|
|
27
|
+
readonly error?: string;
|
|
28
|
+
/** Output from the steward (summary or relevant data) */
|
|
29
|
+
readonly output?: string;
|
|
30
|
+
/** Duration of execution in ms */
|
|
31
|
+
readonly durationMs: number;
|
|
32
|
+
/** Items processed (if applicable) */
|
|
33
|
+
readonly itemsProcessed?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Entry in the execution history
|
|
37
|
+
*/
|
|
38
|
+
export interface StewardExecutionEntry {
|
|
39
|
+
/** Unique execution ID */
|
|
40
|
+
readonly executionId: string;
|
|
41
|
+
/** The steward entity ID */
|
|
42
|
+
readonly stewardId: EntityId;
|
|
43
|
+
/** Steward name for convenience */
|
|
44
|
+
readonly stewardName: string;
|
|
45
|
+
/** The trigger that caused the execution */
|
|
46
|
+
readonly trigger: StewardTrigger;
|
|
47
|
+
/** Whether this was a manual execution */
|
|
48
|
+
readonly manual: boolean;
|
|
49
|
+
/** Timestamp when execution started */
|
|
50
|
+
readonly startedAt: Timestamp;
|
|
51
|
+
/** Timestamp when execution completed */
|
|
52
|
+
readonly completedAt?: Timestamp;
|
|
53
|
+
/** Execution result (set when completed) */
|
|
54
|
+
readonly result?: StewardExecutionResult;
|
|
55
|
+
/** Event context if triggered by event */
|
|
56
|
+
readonly eventContext?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Filter options for querying execution history
|
|
60
|
+
*/
|
|
61
|
+
export interface ExecutionHistoryFilter {
|
|
62
|
+
/** Filter by steward ID */
|
|
63
|
+
readonly stewardId?: EntityId;
|
|
64
|
+
/** Filter by trigger type */
|
|
65
|
+
readonly triggerType?: 'cron' | 'event';
|
|
66
|
+
/** Filter by success/failure */
|
|
67
|
+
readonly success?: boolean;
|
|
68
|
+
/** Filter by date range (start) */
|
|
69
|
+
readonly startedAfter?: Timestamp;
|
|
70
|
+
/** Filter by date range (end) */
|
|
71
|
+
readonly startedBefore?: Timestamp;
|
|
72
|
+
/** Maximum number of entries to return */
|
|
73
|
+
readonly limit?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Configuration for the scheduler
|
|
77
|
+
*/
|
|
78
|
+
export interface StewardSchedulerConfig {
|
|
79
|
+
/** Maximum execution history entries to keep per steward */
|
|
80
|
+
readonly maxHistoryPerSteward?: number;
|
|
81
|
+
/** Default timeout for steward execution in ms */
|
|
82
|
+
readonly defaultTimeoutMs?: number;
|
|
83
|
+
/** Whether to start scheduled stewards immediately */
|
|
84
|
+
readonly startImmediately?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Information about a scheduled job
|
|
88
|
+
*/
|
|
89
|
+
export interface ScheduledJobInfo {
|
|
90
|
+
/** The steward entity ID */
|
|
91
|
+
readonly stewardId: EntityId;
|
|
92
|
+
/** Steward name */
|
|
93
|
+
readonly stewardName: string;
|
|
94
|
+
/** The cron trigger */
|
|
95
|
+
readonly trigger: CronTrigger;
|
|
96
|
+
/** Whether the job is currently running */
|
|
97
|
+
readonly isRunning: boolean;
|
|
98
|
+
/** Next scheduled execution time (if available) */
|
|
99
|
+
readonly nextRunAt?: Date;
|
|
100
|
+
/** Last execution time */
|
|
101
|
+
readonly lastRunAt?: Timestamp;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Event subscription info
|
|
105
|
+
*/
|
|
106
|
+
export interface EventSubscriptionInfo {
|
|
107
|
+
/** The steward entity ID */
|
|
108
|
+
readonly stewardId: EntityId;
|
|
109
|
+
/** Steward name */
|
|
110
|
+
readonly stewardName: string;
|
|
111
|
+
/** The event trigger */
|
|
112
|
+
readonly trigger: EventTrigger;
|
|
113
|
+
/** Whether currently listening */
|
|
114
|
+
readonly isActive: boolean;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Steward execution function type
|
|
118
|
+
* This is what actually runs the steward's logic
|
|
119
|
+
*/
|
|
120
|
+
export type StewardExecutor = (steward: AgentEntity, context: {
|
|
121
|
+
trigger: StewardTrigger;
|
|
122
|
+
eventContext?: Record<string, unknown>;
|
|
123
|
+
}) => Promise<StewardExecutionResult>;
|
|
124
|
+
/**
|
|
125
|
+
* Steward Scheduler Service interface for executing stewards on schedule or events.
|
|
126
|
+
*
|
|
127
|
+
* The service provides methods for:
|
|
128
|
+
* - Starting/stopping scheduled executions
|
|
129
|
+
* - Publishing events for event-triggered stewards
|
|
130
|
+
* - Manual steward execution
|
|
131
|
+
* - Execution history queries
|
|
132
|
+
*/
|
|
133
|
+
export interface StewardScheduler {
|
|
134
|
+
/**
|
|
135
|
+
* Starts the scheduler, activating all cron jobs and event listeners
|
|
136
|
+
* for registered stewards.
|
|
137
|
+
*/
|
|
138
|
+
start(): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Stops the scheduler, cleaning up all cron jobs and event listeners.
|
|
141
|
+
* Running executions are allowed to complete.
|
|
142
|
+
*/
|
|
143
|
+
stop(): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Whether the scheduler is currently running
|
|
146
|
+
*/
|
|
147
|
+
isRunning(): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Registers a steward with the scheduler.
|
|
150
|
+
* This sets up cron jobs and event subscriptions based on the steward's triggers.
|
|
151
|
+
*
|
|
152
|
+
* @param stewardId - The steward entity ID
|
|
153
|
+
* @returns True if registered successfully
|
|
154
|
+
*/
|
|
155
|
+
registerSteward(stewardId: EntityId): Promise<boolean>;
|
|
156
|
+
/**
|
|
157
|
+
* Unregisters a steward from the scheduler.
|
|
158
|
+
* This removes cron jobs and event subscriptions.
|
|
159
|
+
*
|
|
160
|
+
* @param stewardId - The steward entity ID
|
|
161
|
+
* @returns True if unregistered successfully
|
|
162
|
+
*/
|
|
163
|
+
unregisterSteward(stewardId: EntityId): Promise<boolean>;
|
|
164
|
+
/**
|
|
165
|
+
* Refreshes a steward's registration (useful if triggers changed).
|
|
166
|
+
*
|
|
167
|
+
* @param stewardId - The steward entity ID
|
|
168
|
+
*/
|
|
169
|
+
refreshSteward(stewardId: EntityId): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Registers all stewards from the agent registry.
|
|
172
|
+
*/
|
|
173
|
+
registerAllStewards(): Promise<number>;
|
|
174
|
+
/**
|
|
175
|
+
* Manually triggers a steward execution.
|
|
176
|
+
*
|
|
177
|
+
* @param stewardId - The steward to execute
|
|
178
|
+
* @param context - Optional context data
|
|
179
|
+
* @returns The execution result
|
|
180
|
+
*/
|
|
181
|
+
executeSteward(stewardId: EntityId, context?: Record<string, unknown>): Promise<StewardExecutionResult>;
|
|
182
|
+
/**
|
|
183
|
+
* Publishes an event that may trigger stewards.
|
|
184
|
+
* Stewards with matching event triggers will be executed.
|
|
185
|
+
*
|
|
186
|
+
* @param eventName - The event name (e.g., 'task_completed')
|
|
187
|
+
* @param eventData - Event data for condition evaluation
|
|
188
|
+
* @returns Number of stewards triggered
|
|
189
|
+
*/
|
|
190
|
+
publishEvent(eventName: string, eventData: Record<string, unknown>): Promise<number>;
|
|
191
|
+
/**
|
|
192
|
+
* Gets scheduled job information for a steward.
|
|
193
|
+
*/
|
|
194
|
+
getScheduledJobs(stewardId?: EntityId): ScheduledJobInfo[];
|
|
195
|
+
/**
|
|
196
|
+
* Gets event subscription information.
|
|
197
|
+
*/
|
|
198
|
+
getEventSubscriptions(stewardId?: EntityId): EventSubscriptionInfo[];
|
|
199
|
+
/**
|
|
200
|
+
* Gets execution history.
|
|
201
|
+
*/
|
|
202
|
+
getExecutionHistory(filter?: ExecutionHistoryFilter): StewardExecutionEntry[];
|
|
203
|
+
/**
|
|
204
|
+
* Gets the last execution for a steward.
|
|
205
|
+
*/
|
|
206
|
+
getLastExecution(stewardId: EntityId): StewardExecutionEntry | undefined;
|
|
207
|
+
/**
|
|
208
|
+
* Gets statistics about steward executions.
|
|
209
|
+
*/
|
|
210
|
+
getStats(): StewardSchedulerStats;
|
|
211
|
+
/**
|
|
212
|
+
* Subscribe to scheduler events.
|
|
213
|
+
*/
|
|
214
|
+
on(event: 'execution:started', listener: (entry: StewardExecutionEntry) => void): void;
|
|
215
|
+
on(event: 'execution:completed', listener: (entry: StewardExecutionEntry) => void): void;
|
|
216
|
+
on(event: 'execution:failed', listener: (entry: StewardExecutionEntry) => void): void;
|
|
217
|
+
on(event: 'steward:registered', listener: (stewardId: EntityId) => void): void;
|
|
218
|
+
on(event: 'steward:unregistered', listener: (stewardId: EntityId) => void): void;
|
|
219
|
+
/**
|
|
220
|
+
* Unsubscribe from scheduler events.
|
|
221
|
+
*/
|
|
222
|
+
off(event: string, listener: (...args: unknown[]) => void): void;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Statistics about steward executions
|
|
226
|
+
*/
|
|
227
|
+
export interface StewardSchedulerStats {
|
|
228
|
+
/** Number of registered stewards */
|
|
229
|
+
readonly registeredStewards: number;
|
|
230
|
+
/** Number of active cron jobs */
|
|
231
|
+
readonly activeCronJobs: number;
|
|
232
|
+
/** Number of active event subscriptions */
|
|
233
|
+
readonly activeEventSubscriptions: number;
|
|
234
|
+
/** Total executions */
|
|
235
|
+
readonly totalExecutions: number;
|
|
236
|
+
/** Successful executions */
|
|
237
|
+
readonly successfulExecutions: number;
|
|
238
|
+
/** Failed executions */
|
|
239
|
+
readonly failedExecutions: number;
|
|
240
|
+
/** Currently running executions */
|
|
241
|
+
readonly runningExecutions: number;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Validates a cron expression.
|
|
245
|
+
* This is a basic validation - we check the format but not all edge cases.
|
|
246
|
+
*/
|
|
247
|
+
export declare function isValidCronExpression(schedule: string): boolean;
|
|
248
|
+
/**
|
|
249
|
+
* Calculates the next run time for a cron expression.
|
|
250
|
+
* This is a simplified implementation - for production use node-cron handles this.
|
|
251
|
+
*/
|
|
252
|
+
export declare function getNextCronRunTime(_schedule: string): Date | undefined;
|
|
253
|
+
/**
|
|
254
|
+
* Evaluates a simple condition expression against event data.
|
|
255
|
+
* Supports basic JavaScript-like expressions with property access.
|
|
256
|
+
*
|
|
257
|
+
* Examples:
|
|
258
|
+
* - "task.status === 'closed'"
|
|
259
|
+
* - "task.assignedAgent?.role === 'worker'"
|
|
260
|
+
* - "branch.tests === 'passing'"
|
|
261
|
+
*/
|
|
262
|
+
export declare function evaluateCondition(condition: string, context: Record<string, unknown>): boolean;
|
|
263
|
+
/**
|
|
264
|
+
* Implementation of the Steward Scheduler Service.
|
|
265
|
+
*/
|
|
266
|
+
export declare class StewardSchedulerImpl implements StewardScheduler {
|
|
267
|
+
private readonly agentRegistry;
|
|
268
|
+
private readonly config;
|
|
269
|
+
private readonly executor;
|
|
270
|
+
private readonly emitter;
|
|
271
|
+
private running;
|
|
272
|
+
private cronJobs;
|
|
273
|
+
private eventSubscriptions;
|
|
274
|
+
private executionHistory;
|
|
275
|
+
private runningExecutions;
|
|
276
|
+
private executionCounter;
|
|
277
|
+
constructor(agentRegistry: AgentRegistry, executor: StewardExecutor, config?: StewardSchedulerConfig);
|
|
278
|
+
start(): Promise<void>;
|
|
279
|
+
stop(): Promise<void>;
|
|
280
|
+
isRunning(): boolean;
|
|
281
|
+
registerSteward(stewardId: EntityId): Promise<boolean>;
|
|
282
|
+
unregisterSteward(stewardId: EntityId): Promise<boolean>;
|
|
283
|
+
refreshSteward(stewardId: EntityId): Promise<void>;
|
|
284
|
+
registerAllStewards(): Promise<number>;
|
|
285
|
+
executeSteward(stewardId: EntityId, context?: Record<string, unknown>): Promise<StewardExecutionResult>;
|
|
286
|
+
publishEvent(eventName: string, eventData: Record<string, unknown>): Promise<number>;
|
|
287
|
+
getScheduledJobs(stewardId?: EntityId): ScheduledJobInfo[];
|
|
288
|
+
getEventSubscriptions(stewardId?: EntityId): EventSubscriptionInfo[];
|
|
289
|
+
getExecutionHistory(filter?: ExecutionHistoryFilter): StewardExecutionEntry[];
|
|
290
|
+
getLastExecution(stewardId: EntityId): StewardExecutionEntry | undefined;
|
|
291
|
+
getStats(): StewardSchedulerStats;
|
|
292
|
+
on(event: 'execution:started', listener: (entry: StewardExecutionEntry) => void): void;
|
|
293
|
+
on(event: 'execution:completed', listener: (entry: StewardExecutionEntry) => void): void;
|
|
294
|
+
on(event: 'execution:failed', listener: (entry: StewardExecutionEntry) => void): void;
|
|
295
|
+
on(event: 'steward:registered', listener: (stewardId: EntityId) => void): void;
|
|
296
|
+
on(event: 'steward:unregistered', listener: (stewardId: EntityId) => void): void;
|
|
297
|
+
off(event: string, listener: (...args: unknown[]) => void): void;
|
|
298
|
+
private startCronJob;
|
|
299
|
+
private scheduleNextRun;
|
|
300
|
+
private stopCronJob;
|
|
301
|
+
/**
|
|
302
|
+
* Calculates the next fire time for a cron expression after the given date.
|
|
303
|
+
* Supports 5-field cron (minute hour dom month dow) with optional 6th seconds field (ignored).
|
|
304
|
+
* Supports: *, specific values, step (* /N), range (N-M), and lists (N,M).
|
|
305
|
+
* Returns null for invalid expressions.
|
|
306
|
+
*/
|
|
307
|
+
getNextCronTime(schedule: string, after?: Date): Date | null;
|
|
308
|
+
/**
|
|
309
|
+
* Parses a single cron field into a set of valid values.
|
|
310
|
+
* Supports: *, N, N-M, N,M, * /N, N-M/S
|
|
311
|
+
*/
|
|
312
|
+
private parseCronField;
|
|
313
|
+
private runExecution;
|
|
314
|
+
private addHistoryEntry;
|
|
315
|
+
private updateHistoryEntry;
|
|
316
|
+
private pruneHistory;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Creates a StewardScheduler instance
|
|
320
|
+
*
|
|
321
|
+
* @param agentRegistry - The agent registry for looking up stewards
|
|
322
|
+
* @param executor - Function to execute steward logic
|
|
323
|
+
* @param config - Optional configuration
|
|
324
|
+
*/
|
|
325
|
+
export declare function createStewardScheduler(agentRegistry: AgentRegistry, executor: StewardExecutor, config?: StewardSchedulerConfig): StewardScheduler;
|
|
326
|
+
/**
|
|
327
|
+
* Creates a default steward executor that delegates to the appropriate
|
|
328
|
+
* service based on the steward's focus.
|
|
329
|
+
*
|
|
330
|
+
* This is a placeholder - the actual executor would integrate with:
|
|
331
|
+
* - MergeStewardService for 'merge' focus
|
|
332
|
+
* - HealthStewardService for 'health' focus (TB-O24)
|
|
333
|
+
* - etc.
|
|
334
|
+
*/
|
|
335
|
+
export declare function createDefaultStewardExecutor(): StewardExecutor;
|
|
336
|
+
//# sourceMappingURL=steward-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steward-scheduler.d.ts","sourceRoot":"","sources":["../../src/services/steward-scheduler.ts"],"names":[],"mappings":"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"}
|