@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,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Headless Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements the HeadlessProvider interface using the @anthropic-ai/claude-agent-sdk.
|
|
5
|
+
* Extracted from the original spawner.ts to enable provider abstraction.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { query as sdkQuery } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// SDK Input Queue
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Message queue for SDK streaming input mode.
|
|
15
|
+
* Allows pushing messages that will be sent to the SDK query.
|
|
16
|
+
*/
|
|
17
|
+
class SDKInputQueue {
|
|
18
|
+
queue = [];
|
|
19
|
+
waitingResolve = null;
|
|
20
|
+
closed = false;
|
|
21
|
+
sessionId = '';
|
|
22
|
+
setSessionId(id) {
|
|
23
|
+
this.sessionId = id;
|
|
24
|
+
}
|
|
25
|
+
push(content) {
|
|
26
|
+
if (this.closed)
|
|
27
|
+
return;
|
|
28
|
+
const message = {
|
|
29
|
+
type: 'user',
|
|
30
|
+
message: {
|
|
31
|
+
role: 'user',
|
|
32
|
+
content: content,
|
|
33
|
+
},
|
|
34
|
+
parent_tool_use_id: null,
|
|
35
|
+
session_id: this.sessionId,
|
|
36
|
+
};
|
|
37
|
+
if (this.waitingResolve) {
|
|
38
|
+
this.waitingResolve({ value: message, done: false });
|
|
39
|
+
this.waitingResolve = null;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.queue.push(message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
close() {
|
|
46
|
+
this.closed = true;
|
|
47
|
+
if (this.waitingResolve) {
|
|
48
|
+
this.waitingResolve({ value: undefined, done: true });
|
|
49
|
+
this.waitingResolve = null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
[Symbol.asyncIterator]() {
|
|
53
|
+
return {
|
|
54
|
+
next: () => {
|
|
55
|
+
if (this.queue.length > 0) {
|
|
56
|
+
return Promise.resolve({ value: this.queue.shift(), done: false });
|
|
57
|
+
}
|
|
58
|
+
if (this.closed) {
|
|
59
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
60
|
+
}
|
|
61
|
+
return new Promise((resolve) => {
|
|
62
|
+
this.waitingResolve = resolve;
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Claude Headless Session
|
|
70
|
+
// ============================================================================
|
|
71
|
+
/**
|
|
72
|
+
* A running Claude SDK headless session.
|
|
73
|
+
*/
|
|
74
|
+
class ClaudeHeadlessSession {
|
|
75
|
+
inputQueue;
|
|
76
|
+
sdkQuery;
|
|
77
|
+
messageIterator;
|
|
78
|
+
sessionId;
|
|
79
|
+
closed = false;
|
|
80
|
+
constructor(inputQueue, sdkQuery) {
|
|
81
|
+
this.inputQueue = inputQueue;
|
|
82
|
+
this.sdkQuery = sdkQuery;
|
|
83
|
+
this.messageIterator = this.createMessageIterator();
|
|
84
|
+
}
|
|
85
|
+
sendMessage(content) {
|
|
86
|
+
this.inputQueue.push(content);
|
|
87
|
+
}
|
|
88
|
+
[Symbol.asyncIterator]() {
|
|
89
|
+
return this.messageIterator;
|
|
90
|
+
}
|
|
91
|
+
async interrupt() {
|
|
92
|
+
await this.sdkQuery.interrupt();
|
|
93
|
+
}
|
|
94
|
+
close() {
|
|
95
|
+
if (this.closed)
|
|
96
|
+
return;
|
|
97
|
+
this.closed = true;
|
|
98
|
+
this.inputQueue.close();
|
|
99
|
+
}
|
|
100
|
+
getSessionId() {
|
|
101
|
+
return this.sessionId;
|
|
102
|
+
}
|
|
103
|
+
async *createMessageIterator() {
|
|
104
|
+
let resumeErrorDetected = false;
|
|
105
|
+
try {
|
|
106
|
+
for await (const message of this.sdkQuery) {
|
|
107
|
+
if (this.closed)
|
|
108
|
+
break;
|
|
109
|
+
const subtype = 'subtype' in message ? message.subtype : undefined;
|
|
110
|
+
// Check for resume failure (session not found)
|
|
111
|
+
if (message.type === 'result' && subtype === 'error_during_execution') {
|
|
112
|
+
const resultMsg = message;
|
|
113
|
+
const errors = resultMsg.errors || [];
|
|
114
|
+
const sessionNotFoundError = errors.find(e => e.includes('No conversation found with session ID'));
|
|
115
|
+
if (sessionNotFoundError) {
|
|
116
|
+
resumeErrorDetected = true;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Extract session ID from system init message
|
|
120
|
+
if (message.type === 'system' && subtype === 'init') {
|
|
121
|
+
this.sessionId = message.session_id;
|
|
122
|
+
if (this.sessionId) {
|
|
123
|
+
this.inputQueue.setSessionId(this.sessionId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const agentMessages = this.convertSDKMessage(message);
|
|
127
|
+
for (const agentMessage of agentMessages) {
|
|
128
|
+
yield agentMessage;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
134
|
+
// Interrupt - just stop iterating
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (!resumeErrorDetected) {
|
|
138
|
+
yield {
|
|
139
|
+
type: 'error',
|
|
140
|
+
content: error instanceof Error ? error.message : String(error),
|
|
141
|
+
raw: error,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Converts an SDK message into one or more AgentMessages.
|
|
148
|
+
*
|
|
149
|
+
* A single SDK assistant/user message may contain multiple content blocks
|
|
150
|
+
* (text, tool_use, tool_result). We decompose these into separate
|
|
151
|
+
* AgentMessages so downstream consumers see the same event types they
|
|
152
|
+
* saw before the provider abstraction (text as assistant/user, tool blocks
|
|
153
|
+
* as tool_use/tool_result). Messages with no meaningful content are dropped.
|
|
154
|
+
*/
|
|
155
|
+
convertSDKMessage(message) {
|
|
156
|
+
switch (message.type) {
|
|
157
|
+
case 'system':
|
|
158
|
+
return [{
|
|
159
|
+
type: 'system',
|
|
160
|
+
subtype: 'subtype' in message ? message.subtype : undefined,
|
|
161
|
+
sessionId: 'session_id' in message ? message.session_id : undefined,
|
|
162
|
+
raw: message,
|
|
163
|
+
}];
|
|
164
|
+
case 'assistant':
|
|
165
|
+
return this.decomposeContentBlocks('assistant', message);
|
|
166
|
+
case 'user':
|
|
167
|
+
return this.decomposeContentBlocks('user', message);
|
|
168
|
+
case 'result':
|
|
169
|
+
return [{
|
|
170
|
+
type: 'result',
|
|
171
|
+
subtype: 'subtype' in message ? message.subtype : undefined,
|
|
172
|
+
content: 'result' in message ? message.result : undefined,
|
|
173
|
+
raw: message,
|
|
174
|
+
}];
|
|
175
|
+
default:
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Decomposes an SDK assistant or user message into individual AgentMessages.
|
|
181
|
+
*
|
|
182
|
+
* Content blocks are mapped as follows:
|
|
183
|
+
* - text blocks → message of the original type (assistant/user) with text content
|
|
184
|
+
* - tool_use blocks → tool_use message
|
|
185
|
+
* - tool_result blocks → tool_result message
|
|
186
|
+
*
|
|
187
|
+
* If no content blocks produce output, the message is dropped entirely
|
|
188
|
+
* (no empty assistant/user events are emitted).
|
|
189
|
+
*/
|
|
190
|
+
decomposeContentBlocks(messageType, message) {
|
|
191
|
+
const apiMessage = message.message;
|
|
192
|
+
if (!apiMessage || typeof apiMessage !== 'object')
|
|
193
|
+
return [];
|
|
194
|
+
const msg = apiMessage;
|
|
195
|
+
const results = [];
|
|
196
|
+
// Handle simple string content
|
|
197
|
+
if (typeof msg.content === 'string') {
|
|
198
|
+
if (msg.content.length > 0) {
|
|
199
|
+
results.push({ type: messageType, content: msg.content, raw: message });
|
|
200
|
+
}
|
|
201
|
+
return results;
|
|
202
|
+
}
|
|
203
|
+
// Handle array of content blocks
|
|
204
|
+
if (!Array.isArray(msg.content))
|
|
205
|
+
return [];
|
|
206
|
+
const textParts = [];
|
|
207
|
+
for (const block of msg.content) {
|
|
208
|
+
if (typeof block !== 'object' || block === null || !('type' in block))
|
|
209
|
+
continue;
|
|
210
|
+
const typed = block;
|
|
211
|
+
switch (typed.type) {
|
|
212
|
+
case 'text':
|
|
213
|
+
if (typeof typed.text === 'string' && typed.text.length > 0) {
|
|
214
|
+
textParts.push(typed.text);
|
|
215
|
+
}
|
|
216
|
+
break;
|
|
217
|
+
case 'tool_use':
|
|
218
|
+
results.push({
|
|
219
|
+
type: 'tool_use',
|
|
220
|
+
tool: {
|
|
221
|
+
name: typed.name,
|
|
222
|
+
id: typed.id,
|
|
223
|
+
input: typed.input,
|
|
224
|
+
},
|
|
225
|
+
raw: message,
|
|
226
|
+
});
|
|
227
|
+
break;
|
|
228
|
+
case 'tool_result':
|
|
229
|
+
results.push({
|
|
230
|
+
type: 'tool_result',
|
|
231
|
+
content: typeof typed.content === 'string' ? typed.content : undefined,
|
|
232
|
+
tool: { id: typed.tool_use_id },
|
|
233
|
+
raw: message,
|
|
234
|
+
});
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Emit text as the original message type (assistant/user)
|
|
239
|
+
if (textParts.length > 0) {
|
|
240
|
+
// Insert text message first, before tool messages
|
|
241
|
+
results.unshift({
|
|
242
|
+
type: messageType,
|
|
243
|
+
content: textParts.join(''),
|
|
244
|
+
raw: message,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return results;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// Claude Headless Provider
|
|
252
|
+
// ============================================================================
|
|
253
|
+
/**
|
|
254
|
+
* Claude headless provider using @anthropic-ai/claude-agent-sdk.
|
|
255
|
+
*/
|
|
256
|
+
export class ClaudeHeadlessProvider {
|
|
257
|
+
name = 'claude-headless';
|
|
258
|
+
async spawn(options) {
|
|
259
|
+
const initialPrompt = options.initialPrompt ?? 'You are an AI agent. Await further instructions.';
|
|
260
|
+
// Build environment
|
|
261
|
+
const env = {
|
|
262
|
+
...process.env,
|
|
263
|
+
...options.environmentVariables,
|
|
264
|
+
};
|
|
265
|
+
if (options.stoneforgeRoot) {
|
|
266
|
+
env.STONEFORGE_ROOT = options.stoneforgeRoot;
|
|
267
|
+
}
|
|
268
|
+
// Create input queue for streaming input mode
|
|
269
|
+
const inputQueue = new SDKInputQueue();
|
|
270
|
+
// Build SDK options
|
|
271
|
+
const sdkOptions = {
|
|
272
|
+
cwd: options.workingDirectory,
|
|
273
|
+
env,
|
|
274
|
+
permissionMode: 'bypassPermissions',
|
|
275
|
+
allowDangerouslySkipPermissions: true,
|
|
276
|
+
};
|
|
277
|
+
// Pass model if specified
|
|
278
|
+
if (options.model) {
|
|
279
|
+
sdkOptions.model = options.model;
|
|
280
|
+
}
|
|
281
|
+
// Resume if we have a session ID
|
|
282
|
+
if (options.resumeSessionId) {
|
|
283
|
+
sdkOptions.resume = options.resumeSessionId;
|
|
284
|
+
inputQueue.setSessionId(options.resumeSessionId);
|
|
285
|
+
}
|
|
286
|
+
// Create the SDK query
|
|
287
|
+
const queryResult = sdkQuery({
|
|
288
|
+
prompt: inputQueue,
|
|
289
|
+
options: sdkOptions,
|
|
290
|
+
});
|
|
291
|
+
const session = new ClaudeHeadlessSession(inputQueue, queryResult);
|
|
292
|
+
// Push the initial prompt to start the conversation
|
|
293
|
+
inputQueue.push(initialPrompt);
|
|
294
|
+
return session;
|
|
295
|
+
}
|
|
296
|
+
async isAvailable() {
|
|
297
|
+
try {
|
|
298
|
+
// Check if the SDK can be imported
|
|
299
|
+
await import('@anthropic-ai/claude-agent-sdk');
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=headless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../src/providers/claude/headless.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent Provider
|
|
3
|
+
*
|
|
4
|
+
* Combines the Claude headless (SDK) and interactive (PTY) providers
|
|
5
|
+
* into a single AgentProvider implementation.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { type AgentProvider, type HeadlessProvider, type InteractiveProvider, type ModelInfo } from '../types.js';
|
|
10
|
+
export { ClaudeHeadlessProvider } from './headless.js';
|
|
11
|
+
export { ClaudeInteractiveProvider } from './interactive.js';
|
|
12
|
+
/**
|
|
13
|
+
* Claude Agent Provider - the default provider using Claude Code CLI and SDK.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ClaudeAgentProvider implements AgentProvider {
|
|
16
|
+
readonly name = "claude";
|
|
17
|
+
readonly headless: HeadlessProvider;
|
|
18
|
+
readonly interactive: InteractiveProvider;
|
|
19
|
+
constructor(executablePath?: string);
|
|
20
|
+
isAvailable(): Promise<boolean>;
|
|
21
|
+
getInstallInstructions(): string;
|
|
22
|
+
listModels(): Promise<ModelInfo[]>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAIjI,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;gBAE9B,cAAc,SAAW;IAK/B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,sBAAsB,IAAI,MAAM;IAI1B,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAoDzC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent Provider
|
|
3
|
+
*
|
|
4
|
+
* Combines the Claude headless (SDK) and interactive (PTY) providers
|
|
5
|
+
* into a single AgentProvider implementation.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { query as sdkQuery } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
import { ProviderError } from '../types.js';
|
|
11
|
+
import { ClaudeHeadlessProvider } from './headless.js';
|
|
12
|
+
import { ClaudeInteractiveProvider } from './interactive.js';
|
|
13
|
+
export { ClaudeHeadlessProvider } from './headless.js';
|
|
14
|
+
export { ClaudeInteractiveProvider } from './interactive.js';
|
|
15
|
+
/**
|
|
16
|
+
* Claude Agent Provider - the default provider using Claude Code CLI and SDK.
|
|
17
|
+
*/
|
|
18
|
+
export class ClaudeAgentProvider {
|
|
19
|
+
name = 'claude';
|
|
20
|
+
headless;
|
|
21
|
+
interactive;
|
|
22
|
+
constructor(executablePath = 'claude') {
|
|
23
|
+
this.headless = new ClaudeHeadlessProvider();
|
|
24
|
+
this.interactive = new ClaudeInteractiveProvider(executablePath);
|
|
25
|
+
}
|
|
26
|
+
async isAvailable() {
|
|
27
|
+
// Check if at least the headless provider is available (SDK installed)
|
|
28
|
+
return this.headless.isAvailable();
|
|
29
|
+
}
|
|
30
|
+
getInstallInstructions() {
|
|
31
|
+
return 'Install Claude Code: npm install -g @anthropic-ai/claude-code\nInstall Claude Agent SDK: npm install @anthropic-ai/claude-agent-sdk';
|
|
32
|
+
}
|
|
33
|
+
async listModels() {
|
|
34
|
+
// Create a temporary query instance to access supportedModels().
|
|
35
|
+
// We use a minimal prompt and immediately close the query to avoid
|
|
36
|
+
// actually running a session - we just need the query object's methods.
|
|
37
|
+
let queryInstance;
|
|
38
|
+
try {
|
|
39
|
+
queryInstance = sdkQuery({
|
|
40
|
+
prompt: '',
|
|
41
|
+
options: {
|
|
42
|
+
// Use bypassPermissions to avoid permission prompts
|
|
43
|
+
permissionMode: 'bypassPermissions',
|
|
44
|
+
allowDangerouslySkipPermissions: true,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// SDK query creation failed (e.g., missing executable, spawn error)
|
|
50
|
+
throw new ProviderError(`Failed to initialize Claude SDK query: ${error instanceof Error ? error.message : String(error)}`, 'claude');
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const sdkModels = await queryInstance.supportedModels();
|
|
54
|
+
// Map SDK ModelInfo (value, displayName, description) to our ModelInfo (id, displayName, description?)
|
|
55
|
+
// The SDK returns models in default-first order, so mark the first one as default.
|
|
56
|
+
// The SDK's displayName can be generic (e.g. "Default (recommended)", "Sonnet").
|
|
57
|
+
// The description contains the real model name before "·" (e.g. "Opus 4.5 · Most capable...").
|
|
58
|
+
return sdkModels.map((model, index) => {
|
|
59
|
+
// Extract model name from description: "Opus 4.5 · ..." → "Opus 4.5"
|
|
60
|
+
const descriptionName = model.description?.split('·')[0]?.trim();
|
|
61
|
+
const displayName = descriptionName || model.displayName;
|
|
62
|
+
return {
|
|
63
|
+
id: model.value,
|
|
64
|
+
displayName,
|
|
65
|
+
description: model.description,
|
|
66
|
+
...(index === 0 ? { isDefault: true } : {}),
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// SDK query failed (e.g., auth error, process crash, "Query closed before response")
|
|
72
|
+
throw new ProviderError(`Failed to list models from Claude SDK: ${error instanceof Error ? error.message : String(error)}`, 'claude');
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
// Always close the query to clean up resources
|
|
76
|
+
queryInstance.close();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/claude/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAuF,MAAM,aAAa,CAAC;AACjI,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,QAAQ,CAAC;IAChB,QAAQ,CAAmB;IAC3B,WAAW,CAAsB;IAE1C,YAAY,cAAc,GAAG,QAAQ;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAyB,CAAC,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,uEAAuE;QACvE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,sBAAsB;QACpB,OAAO,qIAAqI,CAAC;IAC/I,CAAC;IAED,KAAK,CAAC,UAAU;QACd,iEAAiE;QACjE,mEAAmE;QACnE,wEAAwE;QACxE,IAAI,aAAa,CAAC;QAClB,IAAI,CAAC;YACH,aAAa,GAAG,QAAQ,CAAC;gBACvB,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE;oBACP,oDAAoD;oBACpD,cAAc,EAAE,mBAAmB;oBACnC,+BAA+B,EAAE,IAAI;iBACtC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,MAAM,IAAI,aAAa,CACrB,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClG,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAmB,MAAM,aAAa,CAAC,eAAe,EAAE,CAAC;YAExE,uGAAuG;YACvG,mFAAmF;YACnF,iFAAiF;YACjF,+FAA+F;YAC/F,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpC,qEAAqE;gBACrE,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBACjE,MAAM,WAAW,GAAG,eAAe,IAAI,KAAK,CAAC,WAAW,CAAC;gBAEzD,OAAO;oBACL,EAAE,EAAE,KAAK,CAAC,KAAK;oBACf,WAAW;oBACX,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5C,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qFAAqF;YACrF,MAAM,IAAI,aAAa,CACrB,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClG,QAAQ,CACT,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,+CAA+C;YAC/C,aAAa,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Interactive Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements the InteractiveProvider interface by spawning the `claude` CLI
|
|
5
|
+
* in a PTY. Extracted from the original spawner.ts to enable provider abstraction.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { InteractiveProvider, InteractiveSession, InteractiveSpawnOptions } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Claude interactive provider that spawns the `claude` CLI in a PTY.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ClaudeInteractiveProvider implements InteractiveProvider {
|
|
14
|
+
readonly name = "claude-interactive";
|
|
15
|
+
private readonly executablePath;
|
|
16
|
+
constructor(executablePath?: string);
|
|
17
|
+
spawn(options: InteractiveSpawnOptions): Promise<InteractiveSession>;
|
|
18
|
+
isAvailable(): Promise<boolean>;
|
|
19
|
+
private buildArgs;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,aAAa,CAAC;AA6DrB;;GAEG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,QAAQ,CAAC,IAAI,wBAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,cAAc,SAAW;IAI/B,KAAK,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0DpE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,OAAO,CAAC,SAAS;CAkBlB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Interactive Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements the InteractiveProvider interface by spawning the `claude` CLI
|
|
5
|
+
* in a PTY. Extracted from the original spawner.ts to enable provider abstraction.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import * as pty from 'node-pty';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Helpers
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Shell-quotes a string for safe inclusion in a bash command.
|
|
16
|
+
*/
|
|
17
|
+
function shellQuote(s) {
|
|
18
|
+
return "'" + s.replace(/'/g, "'\\''") + "'";
|
|
19
|
+
}
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Claude Interactive Session
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* A running Claude CLI interactive (PTY) session.
|
|
25
|
+
*/
|
|
26
|
+
class ClaudeInteractiveSession {
|
|
27
|
+
ptyProcess;
|
|
28
|
+
sessionId;
|
|
29
|
+
pid;
|
|
30
|
+
constructor(ptyProcess, sessionId) {
|
|
31
|
+
this.ptyProcess = ptyProcess;
|
|
32
|
+
this.pid = ptyProcess.pid;
|
|
33
|
+
this.sessionId = sessionId;
|
|
34
|
+
}
|
|
35
|
+
write(data) {
|
|
36
|
+
this.ptyProcess.write(data);
|
|
37
|
+
}
|
|
38
|
+
resize(cols, rows) {
|
|
39
|
+
this.ptyProcess.resize(cols, rows);
|
|
40
|
+
}
|
|
41
|
+
kill() {
|
|
42
|
+
this.ptyProcess.kill();
|
|
43
|
+
}
|
|
44
|
+
onData(callback) {
|
|
45
|
+
this.ptyProcess.onData(callback);
|
|
46
|
+
}
|
|
47
|
+
onExit(callback) {
|
|
48
|
+
this.ptyProcess.onExit((e) => callback(e.exitCode, e.signal));
|
|
49
|
+
}
|
|
50
|
+
getSessionId() {
|
|
51
|
+
return this.sessionId;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// Claude Interactive Provider
|
|
56
|
+
// ============================================================================
|
|
57
|
+
/**
|
|
58
|
+
* Claude interactive provider that spawns the `claude` CLI in a PTY.
|
|
59
|
+
*/
|
|
60
|
+
export class ClaudeInteractiveProvider {
|
|
61
|
+
name = 'claude-interactive';
|
|
62
|
+
executablePath;
|
|
63
|
+
constructor(executablePath = 'claude') {
|
|
64
|
+
this.executablePath = executablePath;
|
|
65
|
+
}
|
|
66
|
+
async spawn(options) {
|
|
67
|
+
// For new sessions, generate a UUID so we know the session ID upfront.
|
|
68
|
+
// The Claude CLI accepts --session-id <uuid> to use a specific ID.
|
|
69
|
+
// For resumed sessions, the ID comes from resumeSessionId.
|
|
70
|
+
const sessionId = options.resumeSessionId ?? randomUUID();
|
|
71
|
+
const args = this.buildArgs(options, sessionId);
|
|
72
|
+
// Build environment
|
|
73
|
+
const env = {
|
|
74
|
+
...process.env,
|
|
75
|
+
...options.environmentVariables,
|
|
76
|
+
};
|
|
77
|
+
if (options.stoneforgeRoot) {
|
|
78
|
+
env.STONEFORGE_ROOT = options.stoneforgeRoot;
|
|
79
|
+
}
|
|
80
|
+
const cols = options.cols ?? 120;
|
|
81
|
+
const rows = options.rows ?? 30;
|
|
82
|
+
// Build the CLI command string (simple args only — not the prompt)
|
|
83
|
+
const claudeCommand = [shellQuote(this.executablePath), ...args].join(' ');
|
|
84
|
+
// Spawn PTY using bash -l -c to run the command in a login shell.
|
|
85
|
+
// When an initial prompt is provided, it's passed as a bash positional
|
|
86
|
+
// parameter ($1) via the process argv — this bypasses shell parsing entirely,
|
|
87
|
+
// so the prompt never needs escaping regardless of newlines, quotes, backticks,
|
|
88
|
+
// or other special characters. The prompt goes through execvp() as a raw OS
|
|
89
|
+
// process argument and bash expands "$1" to the exact value.
|
|
90
|
+
const shell = process.platform === 'win32' ? 'cmd.exe' : '/bin/bash';
|
|
91
|
+
const shellArgs = process.platform === 'win32'
|
|
92
|
+
? []
|
|
93
|
+
: options.initialPrompt
|
|
94
|
+
? ['-l', '-c', claudeCommand + ' "$1"', '_', options.initialPrompt]
|
|
95
|
+
: ['-l', '-c', claudeCommand];
|
|
96
|
+
const ptyProcess = pty.spawn(shell, shellArgs, {
|
|
97
|
+
name: 'xterm-256color',
|
|
98
|
+
cols,
|
|
99
|
+
rows,
|
|
100
|
+
cwd: options.workingDirectory,
|
|
101
|
+
env,
|
|
102
|
+
});
|
|
103
|
+
const session = new ClaudeInteractiveSession(ptyProcess, sessionId);
|
|
104
|
+
// On Windows, write the command to cmd.exe stdin (bash -c handles this on Unix)
|
|
105
|
+
if (process.platform === 'win32') {
|
|
106
|
+
await new Promise((resolve) => {
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
ptyProcess.write(claudeCommand + '\r');
|
|
109
|
+
resolve();
|
|
110
|
+
}, 100);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return session;
|
|
114
|
+
}
|
|
115
|
+
async isAvailable() {
|
|
116
|
+
try {
|
|
117
|
+
const { execSync } = await import('node:child_process');
|
|
118
|
+
execSync(`${this.executablePath} --version`, { stdio: 'ignore' });
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
buildArgs(options, sessionId) {
|
|
126
|
+
const args = [
|
|
127
|
+
'--dangerously-skip-permissions',
|
|
128
|
+
];
|
|
129
|
+
if (options.resumeSessionId) {
|
|
130
|
+
args.push('--resume', shellQuote(options.resumeSessionId));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
args.push('--session-id', shellQuote(sessionId));
|
|
134
|
+
}
|
|
135
|
+
// Pass model if specified
|
|
136
|
+
if (options.model) {
|
|
137
|
+
args.push('--model', shellQuote(options.model));
|
|
138
|
+
}
|
|
139
|
+
return args;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/providers/claude/interactive.ts"],"names":[],"mappings":"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"}
|