@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,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Merge Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared squash-merge-in-temp-worktree logic used by both the Merge Steward
|
|
5
|
+
* and the Docs Steward services.
|
|
6
|
+
*
|
|
7
|
+
* Pattern:
|
|
8
|
+
* 1. Fetch origin
|
|
9
|
+
* 2. (Optional) Pre-flight conflict detection via git merge-tree
|
|
10
|
+
* 3. Create temp worktree with detached HEAD at origin/<target>
|
|
11
|
+
* 4. Squash merge (or regular merge) source branch
|
|
12
|
+
* 5. Commit with provided message
|
|
13
|
+
* 6. Push HEAD:<target> to remote
|
|
14
|
+
* 7. Remove temp worktree (always, in finally)
|
|
15
|
+
* 8. (Optional) Sync local target branch via fast-forward
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
export interface MergeBranchOptions {
|
|
20
|
+
/** Workspace root (the main repo checkout) */
|
|
21
|
+
workspaceRoot: string;
|
|
22
|
+
/** Branch to merge from */
|
|
23
|
+
sourceBranch: string;
|
|
24
|
+
/** Branch to merge into (auto-detected if omitted) */
|
|
25
|
+
targetBranch?: string;
|
|
26
|
+
/** 'squash' (default) or 'merge' (--no-ff) */
|
|
27
|
+
mergeStrategy?: 'squash' | 'merge';
|
|
28
|
+
/** Push to remote after merge (default: true) */
|
|
29
|
+
autoPush?: boolean;
|
|
30
|
+
/** Commit message (required for squash, auto-generated for merge) */
|
|
31
|
+
commitMessage?: string;
|
|
32
|
+
/** Run pre-flight conflict detection via merge-tree (default: true) */
|
|
33
|
+
preflight?: boolean;
|
|
34
|
+
/** Fast-forward local target branch after push (default: true) */
|
|
35
|
+
syncLocal?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface MergeBranchResult {
|
|
38
|
+
/** Whether the merge succeeded */
|
|
39
|
+
success: boolean;
|
|
40
|
+
/** Merge/squash commit hash if successful */
|
|
41
|
+
commitHash?: string;
|
|
42
|
+
/** Whether a conflict was detected */
|
|
43
|
+
hasConflict: boolean;
|
|
44
|
+
/** Error message if merge failed */
|
|
45
|
+
error?: string;
|
|
46
|
+
/** Files with conflicts, if any */
|
|
47
|
+
conflictFiles?: string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Run a git command in a worktree directory.
|
|
51
|
+
* Refuses to run in the workspace root to prevent corrupting the main repo HEAD.
|
|
52
|
+
*/
|
|
53
|
+
export declare function execGitSafe(command: string, worktreePath: string, workspaceRoot: string): Promise<{
|
|
54
|
+
stdout: string;
|
|
55
|
+
stderr: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Detect the default target branch for the repo by checking origin/HEAD,
|
|
59
|
+
* then falling back to origin/main, then origin/master, then 'main'.
|
|
60
|
+
*/
|
|
61
|
+
export declare function detectTargetBranch(workspaceRoot: string): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Perform a merge of `sourceBranch` into `targetBranch` using a temporary
|
|
64
|
+
* worktree. This never touches the main repo's HEAD or index.
|
|
65
|
+
*/
|
|
66
|
+
export declare function mergeBranch(options: MergeBranchOptions): Promise<MergeBranchResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Fast-forward the local target branch ref to match origin, without
|
|
69
|
+
* the dangerous checkout dance.
|
|
70
|
+
*
|
|
71
|
+
* - When NOT on the target branch: `git fetch origin target:target`
|
|
72
|
+
* updates the local ref without touching the working tree at all.
|
|
73
|
+
* - When ON the target branch: `git merge --ff-only origin/target`
|
|
74
|
+
* fast-forwards in place (unavoidably touches working tree files).
|
|
75
|
+
* - If either fails (e.g. non-ff divergence): logs a warning and
|
|
76
|
+
* returns silently. The merge is already pushed to remote.
|
|
77
|
+
*/
|
|
78
|
+
export declare function syncLocalBranch(workspaceRoot: string, targetBranch: string): Promise<void>;
|
|
79
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/git/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACnC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAO7C;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC/E;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmJzF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAmCf"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Merge Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared squash-merge-in-temp-worktree logic used by both the Merge Steward
|
|
5
|
+
* and the Docs Steward services.
|
|
6
|
+
*
|
|
7
|
+
* Pattern:
|
|
8
|
+
* 1. Fetch origin
|
|
9
|
+
* 2. (Optional) Pre-flight conflict detection via git merge-tree
|
|
10
|
+
* 3. Create temp worktree with detached HEAD at origin/<target>
|
|
11
|
+
* 4. Squash merge (or regular merge) source branch
|
|
12
|
+
* 5. Commit with provided message
|
|
13
|
+
* 6. Push HEAD:<target> to remote
|
|
14
|
+
* 7. Remove temp worktree (always, in finally)
|
|
15
|
+
* 8. (Optional) Sync local target branch via fast-forward
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
import { exec } from 'node:child_process';
|
|
20
|
+
import fs from 'node:fs';
|
|
21
|
+
import path from 'node:path';
|
|
22
|
+
import { promisify } from 'node:util';
|
|
23
|
+
const execAsync = promisify(exec);
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Helpers
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Run a git command in a worktree directory.
|
|
29
|
+
* Refuses to run in the workspace root to prevent corrupting the main repo HEAD.
|
|
30
|
+
*/
|
|
31
|
+
export async function execGitSafe(command, worktreePath, workspaceRoot) {
|
|
32
|
+
if (path.resolve(worktreePath) === path.resolve(workspaceRoot)) {
|
|
33
|
+
throw new Error(`SAFETY: Refusing to run "git ${command}" in main repo. Use a worktree.`);
|
|
34
|
+
}
|
|
35
|
+
return execAsync(`git ${command}`, { cwd: worktreePath, encoding: 'utf8' });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Detect the default target branch for the repo by checking origin/HEAD,
|
|
39
|
+
* then falling back to origin/main, then origin/master, then 'main'.
|
|
40
|
+
*/
|
|
41
|
+
export async function detectTargetBranch(workspaceRoot) {
|
|
42
|
+
// Try origin/HEAD symref
|
|
43
|
+
try {
|
|
44
|
+
const { stdout } = await execAsync('git symbolic-ref refs/remotes/origin/HEAD', {
|
|
45
|
+
cwd: workspaceRoot,
|
|
46
|
+
encoding: 'utf8',
|
|
47
|
+
});
|
|
48
|
+
const match = stdout.trim().match(/refs\/remotes\/origin\/(.+)/);
|
|
49
|
+
if (match)
|
|
50
|
+
return match[1];
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Fall through
|
|
54
|
+
}
|
|
55
|
+
// Try origin/main
|
|
56
|
+
try {
|
|
57
|
+
await execAsync('git rev-parse --verify origin/main', {
|
|
58
|
+
cwd: workspaceRoot,
|
|
59
|
+
encoding: 'utf8',
|
|
60
|
+
});
|
|
61
|
+
return 'main';
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Fall through
|
|
65
|
+
}
|
|
66
|
+
// Try origin/master
|
|
67
|
+
try {
|
|
68
|
+
await execAsync('git rev-parse --verify origin/master', {
|
|
69
|
+
cwd: workspaceRoot,
|
|
70
|
+
encoding: 'utf8',
|
|
71
|
+
});
|
|
72
|
+
return 'master';
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Fall through
|
|
76
|
+
}
|
|
77
|
+
return 'main';
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Main
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Perform a merge of `sourceBranch` into `targetBranch` using a temporary
|
|
84
|
+
* worktree. This never touches the main repo's HEAD or index.
|
|
85
|
+
*/
|
|
86
|
+
export async function mergeBranch(options) {
|
|
87
|
+
const { workspaceRoot, sourceBranch, mergeStrategy = 'squash', autoPush = true, commitMessage, preflight = true, syncLocal = true, } = options;
|
|
88
|
+
const targetBranch = options.targetBranch ?? await detectTargetBranch(workspaceRoot);
|
|
89
|
+
// Build commit message
|
|
90
|
+
const message = commitMessage
|
|
91
|
+
?? (mergeStrategy === 'squash'
|
|
92
|
+
? `Squash merge ${sourceBranch} into ${targetBranch}`
|
|
93
|
+
: `Merge branch '${sourceBranch}'`);
|
|
94
|
+
// 1. Fetch latest remote state
|
|
95
|
+
await execAsync('git fetch origin', { cwd: workspaceRoot, encoding: 'utf8' });
|
|
96
|
+
// 2. Pre-flight conflict detection via merge-tree
|
|
97
|
+
if (preflight) {
|
|
98
|
+
try {
|
|
99
|
+
const { stdout: mergeBase } = await execAsync(`git merge-base origin/${targetBranch} ${sourceBranch}`, { cwd: workspaceRoot, encoding: 'utf8' });
|
|
100
|
+
const dryRun = await execAsync(`git merge-tree ${mergeBase.trim()} origin/${targetBranch} ${sourceBranch}`, { cwd: workspaceRoot, encoding: 'utf8' }).catch((e) => e);
|
|
101
|
+
if (dryRun.stdout?.includes('<<<<<<<')) {
|
|
102
|
+
const dryRunOutput = dryRun.stdout;
|
|
103
|
+
const conflictFiles = [...dryRunOutput.matchAll(/\+\+\+ b\/(.+)/g)].map(m => m[1]);
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
hasConflict: true,
|
|
107
|
+
error: 'Pre-flight: merge conflicts detected',
|
|
108
|
+
conflictFiles: conflictFiles.length > 0 ? conflictFiles : undefined,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// merge-base can fail if branches have no common ancestor; continue to worktree merge
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// 3. Create temp worktree
|
|
117
|
+
const safeName = sourceBranch.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
118
|
+
const mergeDirName = `_merge-${safeName}-${Date.now()}`;
|
|
119
|
+
const mergeDir = path.join(workspaceRoot, '.stoneforge/.worktrees', mergeDirName);
|
|
120
|
+
// Clean up leftover worktree from a previously crashed run
|
|
121
|
+
if (fs.existsSync(mergeDir)) {
|
|
122
|
+
await execAsync(`git worktree remove --force "${mergeDir}"`, {
|
|
123
|
+
cwd: workspaceRoot, encoding: 'utf8',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// Create with detached HEAD at origin/<target> (avoids locking the target branch)
|
|
127
|
+
await execAsync(`git worktree add --detach "${mergeDir}" origin/${targetBranch}`, {
|
|
128
|
+
cwd: workspaceRoot, encoding: 'utf8',
|
|
129
|
+
});
|
|
130
|
+
let mergeResult;
|
|
131
|
+
try {
|
|
132
|
+
let commitHash;
|
|
133
|
+
if (mergeStrategy === 'squash') {
|
|
134
|
+
await execGitSafe(`merge --squash ${sourceBranch}`, mergeDir, workspaceRoot);
|
|
135
|
+
await execGitSafe(`commit -m "${message.replace(/"/g, '\\"')}"`, mergeDir, workspaceRoot);
|
|
136
|
+
const { stdout: hash } = await execGitSafe('rev-parse HEAD', mergeDir, workspaceRoot);
|
|
137
|
+
commitHash = hash.trim();
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
await execGitSafe(`merge --no-ff -m "${message.replace(/"/g, '\\"')}" ${sourceBranch}`, mergeDir, workspaceRoot);
|
|
141
|
+
const { stdout: hash } = await execGitSafe('rev-parse HEAD', mergeDir, workspaceRoot);
|
|
142
|
+
commitHash = hash.trim();
|
|
143
|
+
}
|
|
144
|
+
// 6. Push to remote
|
|
145
|
+
if (autoPush) {
|
|
146
|
+
try {
|
|
147
|
+
await execGitSafe(`push origin HEAD:${targetBranch}`, mergeDir, workspaceRoot);
|
|
148
|
+
}
|
|
149
|
+
catch (pushError) {
|
|
150
|
+
const pushErrorMsg = pushError instanceof Error ? pushError.message : String(pushError);
|
|
151
|
+
console.warn(`[git/merge] Failed to push to remote: ${pushErrorMsg}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
mergeResult = { success: true, commitHash, hasConflict: false };
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
const execError = error;
|
|
158
|
+
const output = (execError.stdout ?? '') + (execError.stderr ?? '') + (execError.message ?? '');
|
|
159
|
+
if (output.includes('CONFLICT') || output.includes('Automatic merge failed')) {
|
|
160
|
+
// Abort the merge to clean up
|
|
161
|
+
try {
|
|
162
|
+
if (mergeStrategy === 'squash') {
|
|
163
|
+
await execGitSafe('reset --hard HEAD', mergeDir, workspaceRoot);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
await execGitSafe('merge --abort', mergeDir, workspaceRoot);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Ignore abort errors
|
|
171
|
+
}
|
|
172
|
+
const conflictMatch = output.match(/CONFLICT \([^)]+\): Merge conflict in (.+)/g);
|
|
173
|
+
const conflictFiles = conflictMatch?.map((m) => {
|
|
174
|
+
const match = m.match(/in (.+)$/);
|
|
175
|
+
return match ? match[1] : '';
|
|
176
|
+
}).filter(Boolean);
|
|
177
|
+
mergeResult = {
|
|
178
|
+
success: false,
|
|
179
|
+
hasConflict: true,
|
|
180
|
+
error: 'Merge conflict detected',
|
|
181
|
+
conflictFiles,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
mergeResult = {
|
|
186
|
+
success: false,
|
|
187
|
+
hasConflict: false,
|
|
188
|
+
error: output || 'Merge failed',
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
// 7. Always remove temp worktree
|
|
194
|
+
try {
|
|
195
|
+
await execAsync(`git worktree remove --force "${mergeDir}"`, {
|
|
196
|
+
cwd: workspaceRoot, encoding: 'utf8',
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Ignore cleanup errors
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 8. Sync local target branch with remote (best-effort)
|
|
204
|
+
if (mergeResult.success && autoPush && syncLocal) {
|
|
205
|
+
await syncLocalBranch(workspaceRoot, targetBranch);
|
|
206
|
+
}
|
|
207
|
+
return mergeResult;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Fast-forward the local target branch ref to match origin, without
|
|
211
|
+
* the dangerous checkout dance.
|
|
212
|
+
*
|
|
213
|
+
* - When NOT on the target branch: `git fetch origin target:target`
|
|
214
|
+
* updates the local ref without touching the working tree at all.
|
|
215
|
+
* - When ON the target branch: `git merge --ff-only origin/target`
|
|
216
|
+
* fast-forwards in place (unavoidably touches working tree files).
|
|
217
|
+
* - If either fails (e.g. non-ff divergence): logs a warning and
|
|
218
|
+
* returns silently. The merge is already pushed to remote.
|
|
219
|
+
*/
|
|
220
|
+
export async function syncLocalBranch(workspaceRoot, targetBranch) {
|
|
221
|
+
try {
|
|
222
|
+
// Determine current branch (may be detached HEAD in worktrees)
|
|
223
|
+
let currentBranch;
|
|
224
|
+
try {
|
|
225
|
+
const { stdout } = await execAsync('git symbolic-ref --short HEAD', { cwd: workspaceRoot, encoding: 'utf8' });
|
|
226
|
+
currentBranch = stdout.trim();
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Detached HEAD — not on any branch
|
|
230
|
+
}
|
|
231
|
+
if (!currentBranch) {
|
|
232
|
+
console.warn('[git/merge] WARNING: workspace is in detached HEAD state during syncLocalBranch. Skipping sync. Run `git checkout master` to fix.');
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (currentBranch === targetBranch) {
|
|
236
|
+
// We're on the target branch — fast-forward in place
|
|
237
|
+
await execAsync(`git merge --ff-only origin/${targetBranch}`, {
|
|
238
|
+
cwd: workspaceRoot, encoding: 'utf8',
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
// Not on target branch — update the ref without touching the worktree
|
|
243
|
+
await execAsync(`git fetch origin ${targetBranch}:${targetBranch}`, {
|
|
244
|
+
cwd: workspaceRoot, encoding: 'utf8',
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Non-fatal: local branch sync is best-effort.
|
|
250
|
+
// The merge is already pushed to remote — user can `git pull` manually.
|
|
251
|
+
console.warn('[git/merge] Failed to fast-forward local target branch (non-ff divergence or missing ref). Run `git pull` to sync manually.');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/git/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree Manager
|
|
3
|
+
*
|
|
4
|
+
* This module provides git worktree management for the orchestration system.
|
|
5
|
+
* Each worker agent gets a dedicated git worktree for true parallel development.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Verify git repo exists before operations
|
|
9
|
+
* - Create isolated worktrees for workers
|
|
10
|
+
* - Branch naming: agent/{worker-name}/{task-id}-{slug}
|
|
11
|
+
* - Worktree path: .stoneforge/.worktrees/{worker-name}-{task-slug}/
|
|
12
|
+
* - Clean up worktrees after merge
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import type { ElementId, Timestamp } from '@stoneforge/core';
|
|
17
|
+
/**
|
|
18
|
+
* Lifecycle state of a worktree
|
|
19
|
+
*/
|
|
20
|
+
export type WorktreeState = 'creating' | 'active' | 'suspended' | 'merging' | 'cleaning' | 'archived';
|
|
21
|
+
/**
|
|
22
|
+
* All valid worktree states
|
|
23
|
+
*/
|
|
24
|
+
export declare const WorktreeStates: readonly ["creating", "active", "suspended", "merging", "cleaning", "archived"];
|
|
25
|
+
/**
|
|
26
|
+
* Valid state transitions for worktrees
|
|
27
|
+
*/
|
|
28
|
+
export declare const WorktreeStateTransitions: Record<WorktreeState, WorktreeState[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Information about a git worktree
|
|
31
|
+
*/
|
|
32
|
+
export interface WorktreeInfo {
|
|
33
|
+
/** Full path to the worktree directory */
|
|
34
|
+
readonly path: string;
|
|
35
|
+
/** Relative path from workspace root (e.g., ".stoneforge/.worktrees/alice-feature") */
|
|
36
|
+
readonly relativePath: string;
|
|
37
|
+
/** Branch checked out in this worktree */
|
|
38
|
+
readonly branch: string;
|
|
39
|
+
/** HEAD commit hash */
|
|
40
|
+
readonly head: string;
|
|
41
|
+
/** Whether this is the main worktree */
|
|
42
|
+
readonly isMain: boolean;
|
|
43
|
+
/** Worktree lifecycle state */
|
|
44
|
+
state: WorktreeState;
|
|
45
|
+
/** Agent name associated with this worktree */
|
|
46
|
+
readonly agentName?: string;
|
|
47
|
+
/** Task ID associated with this worktree */
|
|
48
|
+
readonly taskId?: string;
|
|
49
|
+
/** When the worktree was created */
|
|
50
|
+
readonly createdAt?: Timestamp;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Options for creating a worktree
|
|
54
|
+
*/
|
|
55
|
+
export interface CreateWorktreeOptions {
|
|
56
|
+
/** Agent name for path generation */
|
|
57
|
+
readonly agentName: string;
|
|
58
|
+
/** Task ID for branch naming */
|
|
59
|
+
readonly taskId: ElementId;
|
|
60
|
+
/** Task title for slug generation (optional) */
|
|
61
|
+
readonly taskTitle?: string;
|
|
62
|
+
/** Custom branch name (overrides auto-generated) */
|
|
63
|
+
readonly customBranch?: string;
|
|
64
|
+
/** Custom worktree path (overrides auto-generated) */
|
|
65
|
+
readonly customPath?: string;
|
|
66
|
+
/** Base branch to create from (default: current branch) */
|
|
67
|
+
readonly baseBranch?: string;
|
|
68
|
+
/** Track remote branch (default: true) */
|
|
69
|
+
readonly trackRemote?: boolean;
|
|
70
|
+
/** Install dependencies after worktree creation (default: false) */
|
|
71
|
+
readonly installDependencies?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Options for removing a worktree
|
|
75
|
+
*/
|
|
76
|
+
export interface RemoveWorktreeOptions {
|
|
77
|
+
/** Force removal even if there are uncommitted changes */
|
|
78
|
+
readonly force?: boolean;
|
|
79
|
+
/** Also delete the branch (local) */
|
|
80
|
+
readonly deleteBranch?: boolean;
|
|
81
|
+
/** Force delete branch even if not fully merged */
|
|
82
|
+
readonly forceBranchDelete?: boolean;
|
|
83
|
+
/** Also delete the remote branch (requires deleteBranch to be true) */
|
|
84
|
+
readonly deleteRemoteBranch?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Result of creating a worktree
|
|
88
|
+
*/
|
|
89
|
+
export interface CreateWorktreeResult {
|
|
90
|
+
/** The created worktree info */
|
|
91
|
+
readonly worktree: WorktreeInfo;
|
|
92
|
+
/** The branch name created/checked out */
|
|
93
|
+
readonly branch: string;
|
|
94
|
+
/** Full path to the worktree */
|
|
95
|
+
readonly path: string;
|
|
96
|
+
/** Whether a new branch was created */
|
|
97
|
+
readonly branchCreated: boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Configuration for the WorktreeManager
|
|
101
|
+
*/
|
|
102
|
+
export interface WorktreeManagerConfig {
|
|
103
|
+
/** Workspace root directory (must be a git repo) */
|
|
104
|
+
readonly workspaceRoot: string;
|
|
105
|
+
/** Directory for worktrees relative to workspace root (default: ".stoneforge/.worktrees") */
|
|
106
|
+
readonly worktreeDir?: string;
|
|
107
|
+
/** Default base branch (default: auto-detect from git) */
|
|
108
|
+
readonly defaultBaseBranch?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Error thrown when git repository is not found
|
|
112
|
+
*/
|
|
113
|
+
export declare class GitRepositoryNotFoundError extends Error {
|
|
114
|
+
constructor(path: string);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Error thrown when a worktree operation fails
|
|
118
|
+
*/
|
|
119
|
+
export declare class WorktreeError extends Error {
|
|
120
|
+
readonly code: string;
|
|
121
|
+
readonly details?: string;
|
|
122
|
+
constructor(message: string, code: string, details?: string);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* WorktreeManager interface for git worktree operations.
|
|
126
|
+
*
|
|
127
|
+
* The manager provides methods for:
|
|
128
|
+
* - Initializing workspace and verifying git repo
|
|
129
|
+
* - Creating worktrees for workers
|
|
130
|
+
* - Removing worktrees after merge
|
|
131
|
+
* - Listing and querying worktrees
|
|
132
|
+
*/
|
|
133
|
+
export interface WorktreeManager {
|
|
134
|
+
/**
|
|
135
|
+
* Initializes the workspace, verifying git repo exists.
|
|
136
|
+
*
|
|
137
|
+
* @throws GitRepositoryNotFoundError if no git repo found
|
|
138
|
+
*/
|
|
139
|
+
initWorkspace(): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Checks if the workspace has been initialized.
|
|
142
|
+
*/
|
|
143
|
+
isInitialized(): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Gets the workspace root directory.
|
|
146
|
+
*/
|
|
147
|
+
getWorkspaceRoot(): string;
|
|
148
|
+
/**
|
|
149
|
+
* Creates a new worktree for a worker.
|
|
150
|
+
*
|
|
151
|
+
* @param options - Worktree creation options
|
|
152
|
+
* @returns The created worktree result
|
|
153
|
+
*/
|
|
154
|
+
createWorktree(options: CreateWorktreeOptions): Promise<CreateWorktreeResult>;
|
|
155
|
+
/**
|
|
156
|
+
* Creates a read-only worktree detached on the default branch.
|
|
157
|
+
* Used for triage sessions that should not create new branches.
|
|
158
|
+
*
|
|
159
|
+
* @param options - Agent name and purpose for path generation
|
|
160
|
+
* @returns The created worktree result
|
|
161
|
+
*/
|
|
162
|
+
createReadOnlyWorktree(options: {
|
|
163
|
+
agentName: string;
|
|
164
|
+
purpose: string;
|
|
165
|
+
}): Promise<CreateWorktreeResult>;
|
|
166
|
+
/**
|
|
167
|
+
* Removes a worktree.
|
|
168
|
+
*
|
|
169
|
+
* @param worktreePath - Path to the worktree (relative or absolute)
|
|
170
|
+
* @param options - Removal options
|
|
171
|
+
*/
|
|
172
|
+
removeWorktree(worktreePath: string, options?: RemoveWorktreeOptions): Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* Suspends a worktree (marks it inactive but preserves it).
|
|
175
|
+
*
|
|
176
|
+
* @param worktreePath - Path to the worktree
|
|
177
|
+
*/
|
|
178
|
+
suspendWorktree(worktreePath: string): Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* Resumes a suspended worktree.
|
|
181
|
+
*
|
|
182
|
+
* @param worktreePath - Path to the worktree
|
|
183
|
+
*/
|
|
184
|
+
resumeWorktree(worktreePath: string): Promise<void>;
|
|
185
|
+
/**
|
|
186
|
+
* Lists all worktrees in the workspace.
|
|
187
|
+
*
|
|
188
|
+
* @param includeMain - Whether to include the main worktree (default: false)
|
|
189
|
+
*/
|
|
190
|
+
listWorktrees(includeMain?: boolean): Promise<WorktreeInfo[]>;
|
|
191
|
+
/**
|
|
192
|
+
* Gets information about a specific worktree.
|
|
193
|
+
*
|
|
194
|
+
* @param worktreePath - Path to the worktree (relative or absolute)
|
|
195
|
+
*/
|
|
196
|
+
getWorktree(worktreePath: string): Promise<WorktreeInfo | undefined>;
|
|
197
|
+
/**
|
|
198
|
+
* Gets the worktree path for an agent/task combination.
|
|
199
|
+
*
|
|
200
|
+
* @param agentName - The agent's name
|
|
201
|
+
* @param taskTitle - The task title (optional, used for slug)
|
|
202
|
+
*/
|
|
203
|
+
getWorktreePath(agentName: string, taskTitle?: string): string;
|
|
204
|
+
/**
|
|
205
|
+
* Gets worktrees for a specific agent.
|
|
206
|
+
*
|
|
207
|
+
* @param agentName - The agent's name
|
|
208
|
+
*/
|
|
209
|
+
getWorktreesForAgent(agentName: string): Promise<WorktreeInfo[]>;
|
|
210
|
+
/**
|
|
211
|
+
* Checks if a worktree exists at the given path.
|
|
212
|
+
*
|
|
213
|
+
* @param worktreePath - Path to check
|
|
214
|
+
*/
|
|
215
|
+
worktreeExists(worktreePath: string): Promise<boolean>;
|
|
216
|
+
/**
|
|
217
|
+
* Gets the current branch of the main worktree.
|
|
218
|
+
*/
|
|
219
|
+
getCurrentBranch(): Promise<string>;
|
|
220
|
+
/**
|
|
221
|
+
* Gets the default base branch (main, master, etc).
|
|
222
|
+
*/
|
|
223
|
+
getDefaultBranch(): Promise<string>;
|
|
224
|
+
/**
|
|
225
|
+
* Checks if a branch exists.
|
|
226
|
+
*
|
|
227
|
+
* @param branchName - The branch name to check
|
|
228
|
+
*/
|
|
229
|
+
branchExists(branchName: string): Promise<boolean>;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Implementation of the WorktreeManager.
|
|
233
|
+
*/
|
|
234
|
+
export declare class WorktreeManagerImpl implements WorktreeManager {
|
|
235
|
+
private readonly config;
|
|
236
|
+
private initialized;
|
|
237
|
+
private defaultBranch;
|
|
238
|
+
private worktreeStates;
|
|
239
|
+
private realWorkspaceRoot;
|
|
240
|
+
constructor(config: WorktreeManagerConfig);
|
|
241
|
+
initWorkspace(): Promise<void>;
|
|
242
|
+
isInitialized(): boolean;
|
|
243
|
+
getWorkspaceRoot(): string;
|
|
244
|
+
createWorktree(options: CreateWorktreeOptions): Promise<CreateWorktreeResult>;
|
|
245
|
+
/**
|
|
246
|
+
* Create a read-only (detached HEAD) worktree for triage sessions.
|
|
247
|
+
* Uses `git worktree add --detach` so no new branch is created.
|
|
248
|
+
*/
|
|
249
|
+
createReadOnlyWorktree(options: {
|
|
250
|
+
agentName: string;
|
|
251
|
+
purpose: string;
|
|
252
|
+
}): Promise<CreateWorktreeResult>;
|
|
253
|
+
removeWorktree(worktreePath: string, options?: RemoveWorktreeOptions): Promise<void>;
|
|
254
|
+
suspendWorktree(worktreePath: string): Promise<void>;
|
|
255
|
+
resumeWorktree(worktreePath: string): Promise<void>;
|
|
256
|
+
listWorktrees(includeMain?: boolean): Promise<WorktreeInfo[]>;
|
|
257
|
+
getWorktree(worktreePath: string): Promise<WorktreeInfo | undefined>;
|
|
258
|
+
getWorktreePath(agentName: string, taskTitle?: string): string;
|
|
259
|
+
getWorktreesForAgent(agentName: string): Promise<WorktreeInfo[]>;
|
|
260
|
+
worktreeExists(worktreePath: string): Promise<boolean>;
|
|
261
|
+
getCurrentBranch(): Promise<string>;
|
|
262
|
+
getDefaultBranch(): Promise<string>;
|
|
263
|
+
branchExists(branchName: string): Promise<boolean>;
|
|
264
|
+
private ensureInitialized;
|
|
265
|
+
private execGit;
|
|
266
|
+
/**
|
|
267
|
+
* Installs dependencies in a worktree directory.
|
|
268
|
+
* Detects the package manager (pnpm, npm, yarn, bun) and runs install.
|
|
269
|
+
* Uses a longer timeout since dependency installation can take a while.
|
|
270
|
+
*
|
|
271
|
+
* Tries a strict install first (--frozen-lockfile / ci) and falls back to
|
|
272
|
+
* a plain install when the lockfile is out of sync with package.json
|
|
273
|
+
* (common when the base branch has uncommitted lockfile changes).
|
|
274
|
+
*/
|
|
275
|
+
private installDependencies;
|
|
276
|
+
private resolvePath;
|
|
277
|
+
private getRelativePath;
|
|
278
|
+
private parseWorktreeList;
|
|
279
|
+
private finalizeWorktreeInfo;
|
|
280
|
+
private detectDefaultBranch;
|
|
281
|
+
private ensureGitignore;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Creates a WorktreeManager instance
|
|
285
|
+
*/
|
|
286
|
+
export declare function createWorktreeManager(config: WorktreeManagerConfig): WorktreeManager;
|
|
287
|
+
/**
|
|
288
|
+
* Type guard to check if a value is a valid WorktreeState
|
|
289
|
+
*/
|
|
290
|
+
export declare function isWorktreeState(value: unknown): value is WorktreeState;
|
|
291
|
+
/**
|
|
292
|
+
* Checks if a state transition is valid
|
|
293
|
+
*/
|
|
294
|
+
export declare function isValidStateTransition(from: WorktreeState, to: WorktreeState): boolean;
|
|
295
|
+
/**
|
|
296
|
+
* Gets human-readable description of a worktree state
|
|
297
|
+
*/
|
|
298
|
+
export declare function getWorktreeStateDescription(state: WorktreeState): string;
|
|
299
|
+
//# sourceMappingURL=worktree-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-manager.d.ts","sourceRoot":"","sources":["../../src/git/worktree-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAiB7D;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,CAAC;AAEf;;GAEG;AACH,eAAO,MAAM,cAAc,iFAOjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,CAO3E,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,mDAAmD;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,uEAAuE;IACvE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,IAAI,EAAE,MAAM;CAYzB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAM5D;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAK9B;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC;IAM3B;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE9E;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAO,EAAE;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAElC;;;;;OAKG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErF;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;;OAIG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAMpD;;;;OAIG;IACH,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE9D;;;;OAIG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAErE;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE/D;;;;OAIG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEjE;;;;OAIG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAMvD;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpD;AAMD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,EAAE,qBAAqB;IAYnC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCpC,aAAa,IAAI,OAAO;IAIxB,gBAAgB,IAAI,MAAM;IAQpB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiHnF;;;OAGG;IACG,sBAAsB,CAAC,OAAO,EAAE;QACpC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA2E3B,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsFpF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBpD,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BnD,aAAa,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoB3D,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAwB1E,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAMxD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgBhE,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAStD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IASnC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxD,OAAO,CAAC,iBAAiB;YASX,OAAO;IAQrB;;;;;;;;OAQG;YACW,mBAAmB;IAgEjC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IAsDzB,OAAO,CAAC,oBAAoB;YAiCd,mBAAmB;YA4BnB,eAAe;CAgB9B;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAEpF;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAEtF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAiBxE"}
|