@camerontaylor/paseo-server 0.8.0-fork.1
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/.env.example +31 -0
- package/README.md +111 -0
- package/dist/scripts/dev-runner.js +37 -0
- package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
- package/dist/scripts/supervisor-entrypoint.js +160 -0
- package/dist/scripts/supervisor-log-config.js +31 -0
- package/dist/scripts/supervisor.js +313 -0
- package/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
- package/dist/server/executable-resolution/executable-resolution.js +121 -0
- package/dist/server/executable-resolution/windows.d.ts +18 -0
- package/dist/server/executable-resolution/windows.js +65 -0
- package/dist/server/server/agent/activity-curator.d.ts +40 -0
- package/dist/server/server/agent/activity-curator.js +243 -0
- package/dist/server/server/agent/agent-archive.d.ts +11 -0
- package/dist/server/server/agent/agent-archive.js +16 -0
- package/dist/server/server/agent/agent-configuration-validator.d.ts +18 -0
- package/dist/server/server/agent/agent-configuration-validator.js +42 -0
- package/dist/server/server/agent/agent-loading.d.ts +17 -0
- package/dist/server/server/agent/agent-loading.js +88 -0
- package/dist/server/server/agent/agent-manager.d.ts +555 -0
- package/dist/server/server/agent/agent-manager.js +3930 -0
- package/dist/server/server/agent/agent-owner.d.ts +12 -0
- package/dist/server/server/agent/agent-owner.js +12 -0
- package/dist/server/server/agent/agent-projections.d.ts +26 -0
- package/dist/server/server/agent/agent-projections.js +414 -0
- package/dist/server/server/agent/agent-prompt.d.ts +91 -0
- package/dist/server/server/agent/agent-prompt.js +359 -0
- package/dist/server/server/agent/agent-response-loop.d.ts +72 -0
- package/dist/server/server/agent/agent-response-loop.js +336 -0
- package/dist/server/server/agent/agent-run-state.d.ts +76 -0
- package/dist/server/server/agent/agent-run-state.js +212 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts +742 -0
- package/dist/server/server/agent/agent-sdk-types.js +25 -0
- package/dist/server/server/agent/agent-storage.d.ts +148 -0
- package/dist/server/server/agent/agent-storage.js +401 -0
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +43 -0
- package/dist/server/server/agent/agent-stream-coalescer.js +187 -0
- package/dist/server/server/agent/agent-timeline-content.d.ts +6 -0
- package/dist/server/server/agent/agent-timeline-content.js +62 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
- package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts +31 -0
- package/dist/server/server/agent/agent-timeline-store.js +249 -0
- package/dist/server/server/agent/audio-utils.d.ts +3 -0
- package/dist/server/server/agent/audio-utils.js +19 -0
- package/dist/server/server/agent/create-agent/create.d.ts +102 -0
- package/dist/server/server/agent/create-agent/create.js +362 -0
- package/dist/server/server/agent/create-agent/intent.d.ts +25 -0
- package/dist/server/server/agent/create-agent/intent.js +30 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +65 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +166 -0
- package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
- package/dist/server/server/agent/create-agent-mode.js +65 -0
- package/dist/server/server/agent/create-agent-title.d.ts +10 -0
- package/dist/server/server/agent/create-agent-title.js +34 -0
- package/dist/server/server/agent/dictation-debug.d.ts +13 -0
- package/dist/server/server/agent/dictation-debug.js +50 -0
- package/dist/server/server/agent/import-sessions.d.ts +57 -0
- package/dist/server/server/agent/import-sessions.js +240 -0
- package/dist/server/server/agent/lifecycle-command.d.ts +73 -0
- package/dist/server/server/agent/lifecycle-command.js +99 -0
- package/dist/server/server/agent/mcp-server.d.ts +5 -0
- package/dist/server/server/agent/mcp-server.js +31 -0
- package/dist/server/server/agent/mcp-shared.d.ts +181 -0
- package/dist/server/server/agent/mcp-shared.js +199 -0
- package/dist/server/server/agent/mutable-provider-config-owner.d.ts +8 -0
- package/dist/server/server/agent/mutable-provider-config-owner.js +35 -0
- package/dist/server/server/agent/paseo-tool-policy.d.ts +9 -0
- package/dist/server/server/agent/paseo-tool-policy.js +16 -0
- package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
- package/dist/server/server/agent/pcm16-resampler.js +63 -0
- package/dist/server/server/agent/permission-response.d.ts +15 -0
- package/dist/server/server/agent/permission-response.js +14 -0
- package/dist/server/server/agent/plugin-provider.d.ts +16 -0
- package/dist/server/server/agent/plugin-provider.js +1356 -0
- package/dist/server/server/agent/prompt-attachments.d.ts +12 -0
- package/dist/server/server/agent/prompt-attachments.js +182 -0
- package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
- package/dist/server/server/agent/provider-history-timestamps.js +16 -0
- package/dist/server/server/agent/provider-launch-config.d.ts +43 -0
- package/dist/server/server/agent/provider-launch-config.js +167 -0
- package/dist/server/server/agent/provider-notices.d.ts +4 -0
- package/dist/server/server/agent/provider-notices.js +9 -0
- package/dist/server/server/agent/provider-options.d.ts +19 -0
- package/dist/server/server/agent/provider-options.js +53 -0
- package/dist/server/server/agent/provider-refresh-deadline.d.ts +11 -0
- package/dist/server/server/agent/provider-refresh-deadline.js +65 -0
- package/dist/server/server/agent/provider-registry.d.ts +72 -0
- package/dist/server/server/agent/provider-registry.js +604 -0
- package/dist/server/server/agent/provider-runtime.d.ts +16 -0
- package/dist/server/server/agent/provider-runtime.js +35 -0
- package/dist/server/server/agent/provider-session-import.d.ts +10 -0
- package/dist/server/server/agent/provider-session-import.js +55 -0
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +166 -0
- package/dist/server/server/agent/provider-snapshot-manager.js +843 -0
- package/dist/server/server/agent/provider-subagents/store.d.ts +68 -0
- package/dist/server/server/agent/provider-subagents/store.js +111 -0
- package/dist/server/server/agent/providers/acp-agent.d.ts +703 -0
- package/dist/server/server/agent/providers/acp-agent.js +3412 -0
- package/dist/server/server/agent/providers/claude/agent.d.ts +74 -0
- package/dist/server/server/agent/providers/claude/agent.js +5236 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
- package/dist/server/server/agent/providers/claude/hooks.d.ts +12 -0
- package/dist/server/server/agent/providers/claude/hooks.js +20 -0
- package/dist/server/server/agent/providers/claude/model-manifest.d.ts +147 -0
- package/dist/server/server/agent/providers/claude/model-manifest.js +342 -0
- package/dist/server/server/agent/providers/claude/models.d.ts +28 -0
- package/dist/server/server/agent/providers/claude/models.js +141 -0
- package/dist/server/server/agent/providers/claude/options.d.ts +85 -0
- package/dist/server/server/agent/providers/claude/options.js +93 -0
- package/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
- package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
- package/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
- package/dist/server/server/agent/providers/claude/project-dir.js +57 -0
- package/dist/server/server/agent/providers/claude/query.d.ts +17 -0
- package/dist/server/server/agent/providers/claude/query.js +86 -0
- package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
- package/dist/server/server/agent/providers/claude/rewind.js +30 -0
- package/dist/server/server/agent/providers/claude/side-question.d.ts +16 -0
- package/dist/server/server/agent/providers/claude/side-question.js +57 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +35 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js +392 -0
- package/dist/server/server/agent/providers/claude/subagents/live-source.d.ts +161 -0
- package/dist/server/server/agent/providers/claude/subagents/live-source.js +415 -0
- package/dist/server/server/agent/providers/claude/subagents/observation.d.ts +53 -0
- package/dist/server/server/agent/providers/claude/subagents/observation.js +57 -0
- package/dist/server/server/agent/providers/claude/subagents/presentation.d.ts +12 -0
- package/dist/server/server/agent/providers/claude/subagents/presentation.js +41 -0
- package/dist/server/server/agent/providers/claude/subagents/replay-source.d.ts +70 -0
- package/dist/server/server/agent/providers/claude/subagents/replay-source.js +305 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-output.d.ts +4 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-output.js +86 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-replay-source.d.ts +38 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-replay-source.js +225 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +37 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +296 -0
- package/dist/server/server/agent/providers/claude/task-state.d.ts +18 -0
- package/dist/server/server/agent/providers/claude/task-state.js +185 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +130 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +129 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +101 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.js +290 -0
- package/dist/server/server/agent/providers/codex/async-questions.d.ts +18 -0
- package/dist/server/server/agent/providers/codex/async-questions.js +135 -0
- package/dist/server/server/agent/providers/codex/options.d.ts +59 -0
- package/dist/server/server/agent/providers/codex/options.js +82 -0
- package/dist/server/server/agent/providers/codex/rewind.d.ts +24 -0
- package/dist/server/server/agent/providers/codex/rewind.js +77 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +909 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +384 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js +5877 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.js +55 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.js +187 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +17 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +31 -0
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +356 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +55 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +178 -0
- package/dist/server/server/agent/providers/gjc-acp-agent.d.ts +155 -0
- package/dist/server/server/agent/providers/gjc-acp-agent.js +588 -0
- package/dist/server/server/agent/providers/jsonl-frame-decoder.d.ts +17 -0
- package/dist/server/server/agent/providers/jsonl-frame-decoder.js +149 -0
- package/dist/server/server/agent/providers/jsonl-rpc-process.d.ts +63 -0
- package/dist/server/server/agent/providers/jsonl-rpc-process.js +207 -0
- package/dist/server/server/agent/providers/kimi-acp-agent.d.ts +35 -0
- package/dist/server/server/agent/providers/kimi-acp-agent.js +65 -0
- package/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
- package/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +111 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js +1340 -0
- package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
- package/dist/server/server/agent/providers/mock-slow-provider.js +40 -0
- package/dist/server/server/agent/providers/omp/advisor-message.d.ts +11 -0
- package/dist/server/server/agent/providers/omp/advisor-message.js +80 -0
- package/dist/server/server/agent/providers/omp/agent.d.ts +178 -0
- package/dist/server/server/agent/providers/omp/agent.js +1952 -0
- package/dist/server/server/agent/providers/omp/cli-runtime.d.ts +22 -0
- package/dist/server/server/agent/providers/omp/cli-runtime.js +208 -0
- package/dist/server/server/agent/providers/omp/commands.d.ts +8 -0
- package/dist/server/server/agent/providers/omp/commands.js +62 -0
- package/dist/server/server/agent/providers/omp/custom-message.d.ts +7 -0
- package/dist/server/server/agent/providers/omp/custom-message.js +4 -0
- package/dist/server/server/agent/providers/omp/event-mapper.d.ts +13 -0
- package/dist/server/server/agent/providers/omp/event-mapper.js +267 -0
- package/dist/server/server/agent/providers/omp/history-hooks.d.ts +3 -0
- package/dist/server/server/agent/providers/omp/history-hooks.js +13 -0
- package/dist/server/server/agent/providers/omp/history.d.ts +19 -0
- package/dist/server/server/agent/providers/omp/history.js +306 -0
- package/dist/server/server/agent/providers/omp/host-tools.d.ts +14 -0
- package/dist/server/server/agent/providers/omp/host-tools.js +196 -0
- package/dist/server/server/agent/providers/omp/map-omp-model.d.ts +11 -0
- package/dist/server/server/agent/providers/omp/map-omp-model.js +67 -0
- package/dist/server/server/agent/providers/omp/message-history.d.ts +38 -0
- package/dist/server/server/agent/providers/omp/message-history.js +216 -0
- package/dist/server/server/agent/providers/omp/protocol-session.d.ts +13 -0
- package/dist/server/server/agent/providers/omp/protocol-session.js +39 -0
- package/dist/server/server/agent/providers/omp/provider-config.d.ts +43 -0
- package/dist/server/server/agent/providers/omp/provider-config.js +120 -0
- package/dist/server/server/agent/providers/omp/rpc-types.d.ts +2040 -0
- package/dist/server/server/agent/providers/omp/rpc-types.js +551 -0
- package/dist/server/server/agent/providers/omp/rpc-ui-permission-mapper.d.ts +24 -0
- package/dist/server/server/agent/providers/omp/rpc-ui-permission-mapper.js +156 -0
- package/dist/server/server/agent/providers/omp/runtime.d.ts +85 -0
- package/dist/server/server/agent/providers/omp/runtime.js +62 -0
- package/dist/server/server/agent/providers/omp/session-descriptor.d.ts +16 -0
- package/dist/server/server/agent/providers/omp/session-descriptor.js +389 -0
- package/dist/server/server/agent/providers/omp/subagent-card-tracker.d.ts +33 -0
- package/dist/server/server/agent/providers/omp/subagent-card-tracker.js +264 -0
- package/dist/server/server/agent/providers/omp/subagent-index.d.ts +13 -0
- package/dist/server/server/agent/providers/omp/subagent-index.js +111 -0
- package/dist/server/server/agent/providers/omp/subagent-title.d.ts +2 -0
- package/dist/server/server/agent/providers/omp/subagent-title.js +14 -0
- package/dist/server/server/agent/providers/omp/system-notice.d.ts +8 -0
- package/dist/server/server/agent/providers/omp/system-notice.js +68 -0
- package/dist/server/server/agent/providers/omp/todo-mapper.d.ts +9 -0
- package/dist/server/server/agent/providers/omp/todo-mapper.js +52 -0
- package/dist/server/server/agent/providers/omp/tool-call-detail.d.ts +110 -0
- package/dist/server/server/agent/providers/omp/tool-call-detail.js +288 -0
- package/dist/server/server/agent/providers/omp/tool-call-id.d.ts +4 -0
- package/dist/server/server/agent/providers/omp/tool-call-id.js +34 -0
- package/dist/server/server/agent/providers/omp/tool-call-mapper.d.ts +7 -0
- package/dist/server/server/agent/providers/omp/tool-call-mapper.js +98 -0
- package/dist/server/server/agent/providers/omp/usage-poller.d.ts +32 -0
- package/dist/server/server/agent/providers/omp/usage-poller.js +141 -0
- package/dist/server/server/agent/providers/opencode/bridge-plugin.bundle.mjs +14678 -0
- package/dist/server/server/agent/providers/opencode/bridge.d.ts +39 -0
- package/dist/server/server/agent/providers/opencode/bridge.js +249 -0
- package/dist/server/server/agent/providers/opencode/event-consumer.d.ts +60 -0
- package/dist/server/server/agent/providers/opencode/event-consumer.js +221 -0
- package/dist/server/server/agent/providers/opencode/options.d.ts +156 -0
- package/dist/server/server/agent/providers/opencode/options.js +62 -0
- package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/paths.js +7 -0
- package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
- package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
- package/dist/server/server/agent/providers/opencode/server-manager.d.ts +101 -0
- package/dist/server/server/agent/providers/opencode/server-manager.js +513 -0
- package/dist/server/server/agent/providers/opencode/side-question.d.ts +78 -0
- package/dist/server/server/agent/providers/opencode/side-question.js +172 -0
- package/dist/server/server/agent/providers/opencode/subagent-presentation.d.ts +36 -0
- package/dist/server/server/agent/providers/opencode/subagent-presentation.js +62 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +22 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.js +43 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +256 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +53 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +393 -0
- package/dist/server/server/agent/providers/opencode-agent.js +4106 -0
- package/dist/server/server/agent/providers/pi/agent.d.ts +164 -0
- package/dist/server/server/agent/providers/pi/agent.js +2236 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.js +177 -0
- package/dist/server/server/agent/providers/pi/history-mapper.d.ts +36 -0
- package/dist/server/server/agent/providers/pi/history-mapper.js +212 -0
- package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
- package/dist/server/server/agent/providers/pi/rewind.js +8 -0
- package/dist/server/server/agent/providers/pi/rpc-types.d.ts +252 -0
- package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
- package/dist/server/server/agent/providers/pi/runtime.d.ts +77 -0
- package/dist/server/server/agent/providers/pi/runtime.js +65 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.js +355 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +113 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.js +340 -0
- package/dist/server/server/agent/providers/pi/usage-poller.d.ts +32 -0
- package/dist/server/server/agent/providers/pi/usage-poller.js +141 -0
- package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
- package/dist/server/server/agent/providers/provider-image-output.js +165 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
- package/dist/server/server/agent/providers/provider-runner.js +81 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
- package/dist/server/server/agent/providers/trae-acp-agent.d.ts +15 -0
- package/dist/server/server/agent/providers/trae-acp-agent.js +18 -0
- package/dist/server/server/agent/recordings-debug.d.ts +3 -0
- package/dist/server/server/agent/recordings-debug.js +19 -0
- package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
- package/dist/server/server/agent/rewind/rewind.js +29 -0
- package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
- package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
- package/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
- package/dist/server/server/agent/runtime-mcp-config.js +53 -0
- package/dist/server/server/agent/side-conversations/store.d.ts +33 -0
- package/dist/server/server/agent/side-conversations/store.js +62 -0
- package/dist/server/server/agent/stale-provider-session-error.d.ts +6 -0
- package/dist/server/server/agent/stale-provider-session-error.js +11 -0
- package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
- package/dist/server/server/agent/structured-generation-providers.js +193 -0
- package/dist/server/server/agent/stt-debug.d.ts +10 -0
- package/dist/server/server/agent/stt-debug.js +33 -0
- package/dist/server/server/agent/stt-manager.d.ts +38 -0
- package/dist/server/server/agent/stt-manager.js +246 -0
- package/dist/server/server/agent/system-prompt.d.ts +2 -0
- package/dist/server/server/agent/system-prompt.js +8 -0
- package/dist/server/server/agent/timeline-append.d.ts +10 -0
- package/dist/server/server/agent/timeline-append.js +27 -0
- package/dist/server/server/agent/timeline-page-bounds.d.ts +19 -0
- package/dist/server/server/agent/timeline-page-bounds.js +37 -0
- package/dist/server/server/agent/timeline-projection.d.ts +74 -0
- package/dist/server/server/agent/timeline-projection.js +467 -0
- package/dist/server/server/agent/timeline-prompt-index.d.ts +12 -0
- package/dist/server/server/agent/timeline-prompt-index.js +23 -0
- package/dist/server/server/agent/tools/paseo-tool-serialization.d.ts +4 -0
- package/dist/server/server/agent/tools/paseo-tool-serialization.js +58 -0
- package/dist/server/server/agent/tools/paseo-tools.d.ts +62 -0
- package/dist/server/server/agent/tools/paseo-tools.js +2445 -0
- package/dist/server/server/agent/tools/types.d.ts +39 -0
- package/dist/server/server/agent/tools/types.js +2 -0
- package/dist/server/server/agent/tts-debug.d.ts +8 -0
- package/dist/server/server/agent/tts-debug.js +24 -0
- package/dist/server/server/agent/tts-manager.d.ts +41 -0
- package/dist/server/server/agent/tts-manager.js +375 -0
- package/dist/server/server/agent-attention-policy.d.ts +29 -0
- package/dist/server/server/agent-attention-policy.js +36 -0
- package/dist/server/server/agent-history-search.d.ts +48 -0
- package/dist/server/server/agent-history-search.js +129 -0
- package/dist/server/server/atomic-file.d.ts +3 -0
- package/dist/server/server/atomic-file.js +19 -0
- package/dist/server/server/auth.d.ts +38 -0
- package/dist/server/server/auth.js +122 -0
- package/dist/server/server/authorization/index.d.ts +18 -0
- package/dist/server/server/authorization/index.js +47 -0
- package/dist/server/server/authorization/operation-permissions.d.ts +8 -0
- package/dist/server/server/authorization/operation-permissions.js +438 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +64 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts +13 -0
- package/dist/server/server/auto-archive-on-merge/index.js +77 -0
- package/dist/server/server/bootstrap.d.ts +166 -0
- package/dist/server/server/bootstrap.js +1388 -0
- package/dist/server/server/browser-tools/broker.d.ts +45 -0
- package/dist/server/server/browser-tools/broker.js +390 -0
- package/dist/server/server/browser-tools/errors.d.ts +22 -0
- package/dist/server/server/browser-tools/errors.js +27 -0
- package/dist/server/server/browser-tools/policy.d.ts +10 -0
- package/dist/server/server/browser-tools/policy.js +16 -0
- package/dist/server/server/browser-tools/tools.d.ts +16 -0
- package/dist/server/server/browser-tools/tools.js +796 -0
- package/dist/server/server/checkout/status-projection.d.ts +19 -0
- package/dist/server/server/checkout/status-projection.js +127 -0
- package/dist/server/server/checkout-diff-manager.d.ts +48 -0
- package/dist/server/server/checkout-diff-manager.js +284 -0
- package/dist/server/server/checkout-git-utils.d.ts +11 -0
- package/dist/server/server/checkout-git-utils.js +34 -0
- package/dist/server/server/client-message-id.d.ts +3 -0
- package/dist/server/server/client-message-id.js +12 -0
- package/dist/server/server/config.d.ts +26 -0
- package/dist/server/server/config.js +594 -0
- package/dist/server/server/connection-offer.d.ts +20 -0
- package/dist/server/server/connection-offer.js +59 -0
- package/dist/server/server/creation/index.d.ts +41 -0
- package/dist/server/server/creation/index.js +250 -0
- package/dist/server/server/daemon-config-store.d.ts +63 -0
- package/dist/server/server/daemon-config-store.js +524 -0
- package/dist/server/server/daemon-keypair.d.ts +8 -0
- package/dist/server/server/daemon-keypair.js +42 -0
- package/dist/server/server/daemon-version.d.ts +5 -0
- package/dist/server/server/daemon-version.js +22 -0
- package/dist/server/server/daemon-worker.d.ts +2 -0
- package/dist/server/server/daemon-worker.js +287 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +88 -0
- package/dist/server/server/dictation/dictation-stream-manager.js +578 -0
- package/dist/server/server/directory-sync/index.d.ts +45 -0
- package/dist/server/server/directory-sync/index.js +98 -0
- package/dist/server/server/directory-sync/internal/versioned-collection.d.ts +56 -0
- package/dist/server/server/directory-sync/internal/versioned-collection.js +94 -0
- package/dist/server/server/exports.d.ts +24 -0
- package/dist/server/server/exports.js +24 -0
- package/dist/server/server/file-download/token-store.d.ts +24 -0
- package/dist/server/server/file-download/token-store.js +40 -0
- package/dist/server/server/file-explorer/observer.d.ts +32 -0
- package/dist/server/server/file-explorer/observer.js +130 -0
- package/dist/server/server/file-explorer/service.d.ts +125 -0
- package/dist/server/server/file-explorer/service.js +663 -0
- package/dist/server/server/file-observer/index.d.ts +43 -0
- package/dist/server/server/file-observer/index.js +114 -0
- package/dist/server/server/file-observer/internal/contracts.d.ts +26 -0
- package/dist/server/server/file-observer/internal/contracts.js +2 -0
- package/dist/server/server/file-observer/internal/linux.d.ts +4 -0
- package/dist/server/server/file-observer/internal/linux.js +260 -0
- package/dist/server/server/file-observer/internal/native-recursive.d.ts +9 -0
- package/dist/server/server/file-observer/internal/native-recursive.js +577 -0
- package/dist/server/server/file-observer/internal/observation.d.ts +21 -0
- package/dist/server/server/file-observer/internal/observation.js +129 -0
- package/dist/server/server/file-observer/internal/paths.d.ts +10 -0
- package/dist/server/server/file-observer/internal/paths.js +43 -0
- package/dist/server/server/file-upload/index.d.ts +27 -0
- package/dist/server/server/file-upload/index.js +158 -0
- package/dist/server/server/git-metadata-event-rules.d.ts +123 -0
- package/dist/server/server/git-metadata-event-rules.js +152 -0
- package/dist/server/server/hostnames.d.ts +13 -0
- package/dist/server/server/hostnames.js +94 -0
- package/dist/server/server/hub/daemon-executions.d.ts +89 -0
- package/dist/server/server/hub/daemon-executions.js +287 -0
- package/dist/server/server/hub/execution-controller.d.ts +30 -0
- package/dist/server/server/hub/execution-controller.js +220 -0
- package/dist/server/server/hub/relationship-controller.d.ts +116 -0
- package/dist/server/server/hub/relationship-controller.js +534 -0
- package/dist/server/server/hub/relationship-remote.d.ts +68 -0
- package/dist/server/server/hub/relationship-remote.js +159 -0
- package/dist/server/server/hub/relationship-retry.d.ts +7 -0
- package/dist/server/server/hub/relationship-retry.js +15 -0
- package/dist/server/server/json-utils.d.ts +11 -0
- package/dist/server/server/json-utils.js +45 -0
- package/dist/server/server/lifecycle-reasons.d.ts +4 -0
- package/dist/server/server/lifecycle-reasons.js +6 -0
- package/dist/server/server/logger.d.ts +29 -0
- package/dist/server/server/logger.js +127 -0
- package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
- package/dist/server/server/managed-processes/managed-processes.js +326 -0
- package/dist/server/server/messages.d.ts +9 -0
- package/dist/server/server/messages.js +29 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
- package/dist/server/server/orchestration-skills/index.d.ts +18 -0
- package/dist/server/server/orchestration-skills/index.js +18 -0
- package/dist/server/server/orchestration-skills/internal/controller.d.ts +39 -0
- package/dist/server/server/orchestration-skills/internal/controller.js +108 -0
- package/dist/server/server/orchestration-skills/internal/operations.d.ts +43 -0
- package/dist/server/server/orchestration-skills/internal/operations.js +178 -0
- package/dist/server/server/orchestration-skills/internal/paths.d.ts +4 -0
- package/dist/server/server/orchestration-skills/internal/paths.js +21 -0
- package/dist/server/server/orchestration-skills/internal/selection-store.d.ts +12 -0
- package/dist/server/server/orchestration-skills/internal/selection-store.js +39 -0
- package/dist/server/server/orchestration-skills/internal/sync.d.ts +21 -0
- package/dist/server/server/orchestration-skills/internal/sync.js +177 -0
- package/dist/server/server/orchestration-skills/internal/transaction.d.ts +22 -0
- package/dist/server/server/orchestration-skills/internal/transaction.js +483 -0
- package/dist/server/server/package-version.d.ts +19 -0
- package/dist/server/server/package-version.js +60 -0
- package/dist/server/server/pagination/cursor.d.ts +16 -0
- package/dist/server/server/pagination/cursor.js +62 -0
- package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
- package/dist/server/server/pagination/sortable-pager.js +68 -0
- package/dist/server/server/pairing-offer.d.ts +18 -0
- package/dist/server/server/pairing-offer.js +47 -0
- package/dist/server/server/pairing-qr.d.ts +2 -0
- package/dist/server/server/pairing-qr.js +15 -0
- package/dist/server/server/paseo-env.d.ts +13 -0
- package/dist/server/server/paseo-env.js +54 -0
- package/dist/server/server/paseo-home.d.ts +2 -0
- package/dist/server/server/paseo-home.js +19 -0
- package/dist/server/server/paseo-worktree-service.d.ts +45 -0
- package/dist/server/server/paseo-worktree-service.js +191 -0
- package/dist/server/server/path-utils.d.ts +5 -0
- package/dist/server/server/path-utils.js +34 -0
- package/dist/server/server/persisted-config.d.ts +397 -0
- package/dist/server/server/persisted-config.js +411 -0
- package/dist/server/server/persistence-hooks.d.ts +32 -0
- package/dist/server/server/persistence-hooks.js +96 -0
- package/dist/server/server/pid-lock.d.ts +44 -0
- package/dist/server/server/pid-lock.js +285 -0
- package/dist/server/server/plugins/compiler-imports.d.ts +13 -0
- package/dist/server/server/plugins/compiler-imports.js +90 -0
- package/dist/server/server/plugins/compiler.d.ts +10 -0
- package/dist/server/server/plugins/compiler.js +354 -0
- package/dist/server/server/plugins/daemon-transport.d.ts +9 -0
- package/dist/server/server/plugins/daemon-transport.js +68 -0
- package/dist/server/server/plugins/index.d.ts +102 -0
- package/dist/server/server/plugins/index.js +575 -0
- package/dist/server/server/plugins/lifecycle/index.d.ts +40 -0
- package/dist/server/server/plugins/lifecycle/index.js +200 -0
- package/dist/server/server/plugins/managed-source.d.ts +50 -0
- package/dist/server/server/plugins/managed-source.js +327 -0
- package/dist/server/server/plugins/manifest.d.ts +12 -0
- package/dist/server/server/plugins/manifest.js +26 -0
- package/dist/server/server/plugins/plugin-process-protocol.d.ts +120 -0
- package/dist/server/server/plugins/plugin-process-protocol.js +154 -0
- package/dist/server/server/plugins/plugin-process.d.ts +2 -0
- package/dist/server/server/plugins/plugin-process.js +419 -0
- package/dist/server/server/plugins/plugin-sdk-specifiers.d.ts +5 -0
- package/dist/server/server/plugins/plugin-sdk-specifiers.js +23 -0
- package/dist/server/server/plugins/plugin-session-identity.d.ts +4 -0
- package/dist/server/server/plugins/plugin-session-identity.js +11 -0
- package/dist/server/server/plugins/preparation.d.ts +4 -0
- package/dist/server/server/plugins/preparation.js +49 -0
- package/dist/server/server/plugins/provider-icon.d.ts +2 -0
- package/dist/server/server/plugins/provider-icon.js +55 -0
- package/dist/server/server/plugins/runtime.d.ts +83 -0
- package/dist/server/server/plugins/runtime.js +836 -0
- package/dist/server/server/plugins/session-socket.d.ts +23 -0
- package/dist/server/server/plugins/session-socket.js +82 -0
- package/dist/server/server/plugins/settings/index.d.ts +96 -0
- package/dist/server/server/plugins/settings/index.js +115 -0
- package/dist/server/server/private-files.d.ts +6 -0
- package/dist/server/server/private-files.js +37 -0
- package/dist/server/server/process-diagnostics.d.ts +17 -0
- package/dist/server/server/process-diagnostics.js +22 -0
- package/dist/server/server/project-directory-service.d.ts +30 -0
- package/dist/server/server/project-directory-service.js +120 -0
- package/dist/server/server/project-key.d.ts +14 -0
- package/dist/server/server/project-key.js +44 -0
- package/dist/server/server/push/index.d.ts +16 -0
- package/dist/server/server/push/index.js +26 -0
- package/dist/server/server/push/push-service.d.ts +19 -0
- package/dist/server/server/push/push-service.js +66 -0
- package/dist/server/server/push/token-store.d.ts +22 -0
- package/dist/server/server/push/token-store.js +125 -0
- package/dist/server/server/relay-runtime.d.ts +27 -0
- package/dist/server/server/relay-runtime.js +46 -0
- package/dist/server/server/relay-transport.d.ts +33 -0
- package/dist/server/server/relay-transport.js +481 -0
- package/dist/server/server/request-receipts/index.d.ts +33 -0
- package/dist/server/server/request-receipts/index.js +131 -0
- package/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
- package/dist/server/server/resolve-workspace-id-for-path.js +41 -0
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +44 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +186 -0
- package/dist/server/server/schedule/cron.d.ts +4 -0
- package/dist/server/server/schedule/cron.js +83 -0
- package/dist/server/server/schedule/service.d.ts +75 -0
- package/dist/server/server/schedule/service.js +810 -0
- package/dist/server/server/schedule/store.d.ts +27 -0
- package/dist/server/server/schedule/store.js +190 -0
- package/dist/server/server/script-health-monitor.d.ts +39 -0
- package/dist/server/server/script-health-monitor.js +159 -0
- package/dist/server/server/script-proxy.d.ts +3 -0
- package/dist/server/server/script-proxy.js +2 -0
- package/dist/server/server/script-route-branch-handler.d.ts +10 -0
- package/dist/server/server/script-route-branch-handler.js +11 -0
- package/dist/server/server/script-status-projection.d.ts +36 -0
- package/dist/server/server/script-status-projection.js +200 -0
- package/dist/server/server/server-id.d.ts +17 -0
- package/dist/server/server/server-id.js +68 -0
- package/dist/server/server/service-proxy.d.ts +237 -0
- package/dist/server/server/service-proxy.js +679 -0
- package/dist/server/server/session/agent-config/agent-config-session.d.ts +75 -0
- package/dist/server/server/session/agent-config/agent-config-session.js +151 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +65 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.js +266 -0
- package/dist/server/server/session/checkout/checkout-session.d.ts +150 -0
- package/dist/server/server/session/checkout/checkout-session.js +1187 -0
- package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
- package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +34 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +90 -0
- package/dist/server/server/session/daemon/daemon-self-updater.d.ts +33 -0
- package/dist/server/server/session/daemon/daemon-self-updater.js +60 -0
- package/dist/server/server/session/daemon/daemon-session.d.ts +90 -0
- package/dist/server/server/session/daemon/daemon-session.js +224 -0
- package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
- package/dist/server/server/session/daemon/diagnostics.js +431 -0
- package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
- package/dist/server/server/session/daemon/install-origin.js +64 -0
- package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
- package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
- package/dist/server/server/session/files/workspace-files-session.d.ts +55 -0
- package/dist/server/server/session/files/workspace-files-session.js +359 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +32 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.js +74 -0
- package/dist/server/server/session/project-config/project-config-session.d.ts +35 -0
- package/dist/server/server/session/project-config/project-config-session.js +143 -0
- package/dist/server/server/session/project-config/worktree-setup-commit-status.d.ts +6 -0
- package/dist/server/server/session/project-config/worktree-setup-commit-status.js +38 -0
- package/dist/server/server/session/provider/provider-catalog-session.d.ts +78 -0
- package/dist/server/server/session/provider/provider-catalog-session.js +388 -0
- package/dist/server/server/session/schedule/schedule-session.d.ts +47 -0
- package/dist/server/server/session/schedule/schedule-session.js +188 -0
- package/dist/server/server/session/voice/voice-session.d.ts +166 -0
- package/dist/server/server/session/voice/voice-session.js +904 -0
- package/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
- package/dist/server/server/session/voice/voice-turn-controller.js +393 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +42 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +170 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +59 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +326 -0
- package/dist/server/server/session/workspace-recovery/workspace-recovery-service.d.ts +30 -0
- package/dist/server/server/session/workspace-recovery/workspace-recovery-service.js +178 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +54 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +156 -0
- package/dist/server/server/session.d.ts +555 -0
- package/dist/server/server/session.js +6540 -0
- package/dist/server/server/speech/audio.d.ts +10 -0
- package/dist/server/server/speech/audio.js +101 -0
- package/dist/server/server/speech/provider-resolver.d.ts +3 -0
- package/dist/server/server/speech/provider-resolver.js +7 -0
- package/dist/server/server/speech/providers/local/config.d.ts +30 -0
- package/dist/server/server/speech/providers/local/config.js +134 -0
- package/dist/server/server/speech/providers/local/models.d.ts +12 -0
- package/dist/server/server/speech/providers/local/models.js +18 -0
- package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
- package/dist/server/server/speech/providers/local/runtime.js +135 -0
- package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +56 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +74 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +17 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +145 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +137 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +133 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +101 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
- package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
- package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
- package/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
- package/dist/server/server/speech/providers/local/worker-client.js +590 -0
- package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
- package/dist/server/server/speech/providers/local/worker-process.js +270 -0
- package/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
- package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
- package/dist/server/server/speech/providers/openai/config.d.ts +19 -0
- package/dist/server/server/speech/providers/openai/config.js +148 -0
- package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
- package/dist/server/server/speech/providers/openai/runtime.js +102 -0
- package/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
- package/dist/server/server/speech/providers/openai/stt.js +209 -0
- package/dist/server/server/speech/providers/openai/tts.d.ts +19 -0
- package/dist/server/server/speech/providers/openai/tts.js +48 -0
- package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
- package/dist/server/server/speech/speech-config-resolver.js +132 -0
- package/dist/server/server/speech/speech-provider.d.ts +59 -0
- package/dist/server/server/speech/speech-provider.js +2 -0
- package/dist/server/server/speech/speech-runtime.d.ts +45 -0
- package/dist/server/server/speech/speech-runtime.js +571 -0
- package/dist/server/server/speech/speech-types.d.ts +22 -0
- package/dist/server/server/speech/speech-types.js +8 -0
- package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
- package/dist/server/server/speech/turn-detection-provider.js +2 -0
- package/dist/server/server/utils/diff-highlighter.d.ts +57 -0
- package/dist/server/server/utils/diff-highlighter.js +304 -0
- package/dist/server/server/voice-config.d.ts +15 -0
- package/dist/server/server/voice-config.js +54 -0
- package/dist/server/server/voice-permission-policy.d.ts +4 -0
- package/dist/server/server/voice-permission-policy.js +13 -0
- package/dist/server/server/voice-types.d.ts +12 -0
- package/dist/server/server/voice-types.js +2 -0
- package/dist/server/server/watcher-liveness-canary.d.ts +11 -0
- package/dist/server/server/watcher-liveness-canary.js +53 -0
- package/dist/server/server/web-ui.d.ts +10 -0
- package/dist/server/server/web-ui.js +205 -0
- package/dist/server/server/websocket/encrypted-relay-socket.d.ts +23 -0
- package/dist/server/server/websocket/encrypted-relay-socket.js +64 -0
- package/dist/server/server/websocket/physical-socket.d.ts +36 -0
- package/dist/server/server/websocket/physical-socket.js +95 -0
- package/dist/server/server/websocket/runtime-metrics.d.ts +95 -0
- package/dist/server/server/websocket/runtime-metrics.js +148 -0
- package/dist/server/server/websocket-server.d.ts +214 -0
- package/dist/server/server/websocket-server.js +2258 -0
- package/dist/server/server/workspace-archive-service.d.ts +63 -0
- package/dist/server/server/workspace-archive-service.js +355 -0
- package/dist/server/server/workspace-auto-name.d.ts +55 -0
- package/dist/server/server/workspace-auto-name.js +127 -0
- package/dist/server/server/workspace-automation-gate.d.ts +16 -0
- package/dist/server/server/workspace-automation-gate.js +35 -0
- package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
- package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
- package/dist/server/server/workspace-directory.d.ts +99 -0
- package/dist/server/server/workspace-directory.js +467 -0
- package/dist/server/server/workspace-git-fetch.d.ts +33 -0
- package/dist/server/server/workspace-git-fetch.js +108 -0
- package/dist/server/server/workspace-git-metadata.d.ts +8 -0
- package/dist/server/server/workspace-git-metadata.js +24 -0
- package/dist/server/server/workspace-git-service.d.ts +348 -0
- package/dist/server/server/workspace-git-service.js +2534 -0
- package/dist/server/server/workspace-labels/index.d.ts +14 -0
- package/dist/server/server/workspace-labels/index.js +10 -0
- package/dist/server/server/workspace-labels/internal/catalog-store.d.ts +50 -0
- package/dist/server/server/workspace-labels/internal/catalog-store.js +203 -0
- package/dist/server/server/workspace-labels/internal/sequence.d.ts +43 -0
- package/dist/server/server/workspace-labels/internal/sequence.js +80 -0
- package/dist/server/server/workspace-labels/internal/service.d.ts +57 -0
- package/dist/server/server/workspace-labels/internal/service.js +224 -0
- package/dist/server/server/workspace-reconciliation-service.d.ts +103 -0
- package/dist/server/server/workspace-reconciliation-service.js +379 -0
- package/dist/server/server/workspace-registry-bootstrap-legacy.d.ts +21 -0
- package/dist/server/server/workspace-registry-bootstrap-legacy.js +57 -0
- package/dist/server/server/workspace-registry-bootstrap.d.ts +14 -0
- package/dist/server/server/workspace-registry-bootstrap.js +155 -0
- package/dist/server/server/workspace-registry-model.d.ts +56 -0
- package/dist/server/server/workspace-registry-model.js +150 -0
- package/dist/server/server/workspace-registry.d.ts +228 -0
- package/dist/server/server/workspace-registry.js +468 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
- package/dist/server/server/workspace-script-runtime-store.js +78 -0
- package/dist/server/server/workspace-service-env.d.ts +18 -0
- package/dist/server/server/workspace-service-env.js +85 -0
- package/dist/server/server/workspace-service-port-allocator.d.ts +11 -0
- package/dist/server/server/workspace-service-port-allocator.js +89 -0
- package/dist/server/server/workspace-service-port-registry.d.ts +24 -0
- package/dist/server/server/workspace-service-port-registry.js +172 -0
- package/dist/server/server/workspace-setup-runtime.d.ts +7 -0
- package/dist/server/server/workspace-setup-runtime.js +30 -0
- package/dist/server/server/workspace-source.d.ts +7 -0
- package/dist/server/server/workspace-source.js +15 -0
- package/dist/server/server/worktree/commands.d.ts +55 -0
- package/dist/server/server/worktree/commands.js +99 -0
- package/dist/server/server/worktree-bootstrap.d.ts +86 -0
- package/dist/server/server/worktree-bootstrap.js +753 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
- package/dist/server/server/worktree-branch-name-generator.js +89 -0
- package/dist/server/server/worktree-core.d.ts +32 -0
- package/dist/server/server/worktree-core.js +114 -0
- package/dist/server/server/worktree-errors.d.ts +12 -0
- package/dist/server/server/worktree-errors.js +28 -0
- package/dist/server/server/worktree-session.d.ts +165 -0
- package/dist/server/server/worktree-session.js +594 -0
- package/dist/server/services/forge-cli-command.d.ts +128 -0
- package/dist/server/services/forge-cli-command.js +212 -0
- package/dist/server/services/forge-registry.d.ts +25 -0
- package/dist/server/services/forge-registry.js +155 -0
- package/dist/server/services/forge-resolver.d.ts +38 -0
- package/dist/server/services/forge-resolver.js +191 -0
- package/dist/server/services/forge-service.d.ts +430 -0
- package/dist/server/services/forge-service.js +50 -0
- package/dist/server/services/gitea-facts.d.ts +11 -0
- package/dist/server/services/gitea-facts.js +4 -0
- package/dist/server/services/gitea-service.d.ts +62 -0
- package/dist/server/services/gitea-service.js +1844 -0
- package/dist/server/services/github-facts.d.ts +27 -0
- package/dist/server/services/github-facts.js +4 -0
- package/dist/server/services/github-service.d.ts +76 -0
- package/dist/server/services/github-service.js +3297 -0
- package/dist/server/services/gitlab-facts.d.ts +26 -0
- package/dist/server/services/gitlab-facts.js +4 -0
- package/dist/server/services/gitlab-service.d.ts +43 -0
- package/dist/server/services/gitlab-service.js +1092 -0
- package/dist/server/services/quota-fetcher/manifest.d.ts +5 -0
- package/dist/server/services/quota-fetcher/manifest.js +118 -0
- package/dist/server/services/quota-fetcher/provider.d.ts +18 -0
- package/dist/server/services/quota-fetcher/provider.js +2 -0
- package/dist/server/services/quota-fetcher/providers/claude.d.ts +40 -0
- package/dist/server/services/quota-fetcher/providers/claude.js +389 -0
- package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/codex.js +167 -0
- package/dist/server/services/quota-fetcher/providers/copilot.d.ts +21 -0
- package/dist/server/services/quota-fetcher/providers/copilot.js +77 -0
- package/dist/server/services/quota-fetcher/providers/cursor.d.ts +19 -0
- package/dist/server/services/quota-fetcher/providers/cursor.js +185 -0
- package/dist/server/services/quota-fetcher/providers/grok.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/grok.js +137 -0
- package/dist/server/services/quota-fetcher/providers/kimi.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/kimi.js +260 -0
- package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
- package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
- package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
- package/dist/server/services/quota-fetcher/service.d.ts +34 -0
- package/dist/server/services/quota-fetcher/service.js +74 -0
- package/dist/server/services/quota-fetcher/usage.d.ts +39 -0
- package/dist/server/services/quota-fetcher/usage.js +78 -0
- package/dist/server/skills/paseo/SKILL.md +129 -0
- package/dist/server/skills/paseo-advisor/SKILL.md +63 -0
- package/dist/server/skills/paseo-committee/SKILL.md +46 -0
- package/dist/server/skills/paseo-handoff/SKILL.md +65 -0
- package/dist/server/skills/paseo-help/SKILL.md +92 -0
- package/dist/server/skills/paseo-plugin/SKILL.md +639 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +21 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.js +65 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
- package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
- package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
- package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
- package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
- package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
- package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +81 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
- package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
- package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
- package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
- package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
- package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/server/terminal/terminal-capture.d.ts +12 -0
- package/dist/server/terminal/terminal-capture.js +43 -0
- package/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
- package/dist/server/terminal/terminal-manager-factory.js +5 -0
- package/dist/server/terminal/terminal-manager.d.ts +80 -0
- package/dist/server/terminal/terminal-manager.js +321 -0
- package/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
- package/dist/server/terminal/terminal-output-coalescer.js +73 -0
- package/dist/server/terminal/terminal-restore.d.ts +18 -0
- package/dist/server/terminal/terminal-restore.js +52 -0
- package/dist/server/terminal/terminal-session-controller.d.ts +90 -0
- package/dist/server/terminal/terminal-session-controller.js +849 -0
- package/dist/server/terminal/terminal-size-ownership.d.ts +9 -0
- package/dist/server/terminal/terminal-size-ownership.js +23 -0
- package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
- package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
- package/dist/server/terminal/terminal-worker-process.js +308 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts +121 -0
- package/dist/server/terminal/terminal-worker-protocol.js +2 -0
- package/dist/server/terminal/terminal.d.ts +151 -0
- package/dist/server/terminal/terminal.js +1234 -0
- package/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
- package/dist/server/terminal/worker-terminal-manager.js +688 -0
- package/dist/server/utils/build-metadata-prompt.d.ts +19 -0
- package/dist/server/utils/build-metadata-prompt.js +29 -0
- package/dist/server/utils/checkout-git.d.ts +317 -0
- package/dist/server/utils/checkout-git.js +2886 -0
- package/dist/server/utils/directory-suggestions.d.ts +29 -0
- package/dist/server/utils/directory-suggestions.js +596 -0
- package/dist/server/utils/git-command-runtime-metrics.d.ts +67 -0
- package/dist/server/utils/git-command-runtime-metrics.js +126 -0
- package/dist/server/utils/git-command-trace.d.ts +29 -0
- package/dist/server/utils/git-command-trace.js +74 -0
- package/dist/server/utils/git-process-scheduler.d.ts +34 -0
- package/dist/server/utils/git-process-scheduler.js +112 -0
- package/dist/server/utils/git-rev-parse-path.d.ts +3 -0
- package/dist/server/utils/git-rev-parse-path.js +21 -0
- package/dist/server/utils/paseo-config-file.d.ts +30 -0
- package/dist/server/utils/paseo-config-file.js +90 -0
- package/dist/server/utils/path.d.ts +27 -0
- package/dist/server/utils/path.js +156 -0
- package/dist/server/utils/project-custom-icon.d.ts +40 -0
- package/dist/server/utils/project-custom-icon.js +144 -0
- package/dist/server/utils/project-icon.d.ts +54 -0
- package/dist/server/utils/project-icon.js +445 -0
- package/dist/server/utils/promise-timeout.d.ts +9 -0
- package/dist/server/utils/promise-timeout.js +25 -0
- package/dist/server/utils/run-git-command.d.ts +59 -0
- package/dist/server/utils/run-git-command.js +393 -0
- package/dist/server/utils/spawn.d.ts +26 -0
- package/dist/server/utils/spawn.js +60 -0
- package/dist/server/utils/ssh-hostname.d.ts +8 -0
- package/dist/server/utils/ssh-hostname.js +60 -0
- package/dist/server/utils/string-command-shell.d.ts +13 -0
- package/dist/server/utils/string-command-shell.js +37 -0
- package/dist/server/utils/tree-kill.d.ts +19 -0
- package/dist/server/utils/tree-kill.js +77 -0
- package/dist/server/utils/windows-command.d.ts +15 -0
- package/dist/server/utils/windows-command.js +41 -0
- package/dist/server/utils/worktree-metadata.d.ts +77 -0
- package/dist/server/utils/worktree-metadata.js +280 -0
- package/dist/server/utils/worktree.d.ts +232 -0
- package/dist/server/utils/worktree.js +1193 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js +16819 -0
- package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js.gz +0 -0
- package/dist/server/web-ui/apple-touch-icon.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
- package/dist/server/web-ui/favicon.ico +0 -0
- package/dist/server/web-ui/index.html +90 -0
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/dist/server/web-ui/manifest.json +27 -0
- package/dist/server/web-ui/manifest.json.br +0 -0
- package/dist/server/web-ui/manifest.json.gz +0 -0
- package/dist/server/web-ui/metadata.json +1 -0
- package/dist/server/web-ui/metadata.json.br +1 -0
- package/dist/server/web-ui/metadata.json.gz +0 -0
- package/dist/server/web-ui/pwa-icon-192.png +0 -0
- package/dist/server/web-ui/pwa-icon-512.png +0 -0
- package/dist/server/web-ui/robots.txt +2 -0
- package/dist/src/executable-resolution/executable-resolution.js +121 -0
- package/dist/src/executable-resolution/windows.js +65 -0
- package/dist/src/server/agent/provider-launch-config.js +167 -0
- package/dist/src/server/paseo-env.js +54 -0
- package/dist/src/server/paseo-home.js +19 -0
- package/dist/src/server/persisted-config.js +411 -0
- package/dist/src/server/pid-lock.js +285 -0
- package/dist/src/server/private-files.js +37 -0
- package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
- package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/src/utils/spawn.js +60 -0
- package/dist/src/utils/tree-kill.js +77 -0
- package/dist/src/utils/windows-command.js +41 -0
- package/package.json +125 -0
|
@@ -0,0 +1,1092 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { parseGitRemoteLocation } from "@camerontaylor/paseo-protocol/git-remote";
|
|
3
|
+
import { findExecutable } from "../executable-resolution/executable-resolution.js";
|
|
4
|
+
import { createCachedCliPathResolver, createForgeCliRunner, ForgeAuthenticationError, ForgeCliMissingError, defaultResolveRemoteUrl, parseCliJsonOutput, probeHostViaCliAuthStatus, ForgeCommandError, } from "./forge-cli-command.js";
|
|
5
|
+
import { compareTimelineItems, createUnavailableSearchResult, normalizeForgeSearchKinds, parseOptionalTime, } from "./forge-service.js";
|
|
6
|
+
import { CHECK_TRAIT_ACTION_REQUIRED, CHECK_TRAIT_MANUAL, CHECK_TRAIT_WARNING, } from "@camerontaylor/paseo-protocol/check-traits";
|
|
7
|
+
import { GITLAB_ACTIVE_PIPELINE_STATUS_SET } from "@camerontaylor/paseo-protocol/gitlab-pipeline";
|
|
8
|
+
import { isGitLabStatusFacts } from "./gitlab-facts.js";
|
|
9
|
+
const GLAB_ENV = {
|
|
10
|
+
GIT_TERMINAL_PROMPT: "0",
|
|
11
|
+
GLAB_CHECK_UPDATE: "0",
|
|
12
|
+
};
|
|
13
|
+
const GLAB_COMMAND_TIMEOUT_MS = 30000;
|
|
14
|
+
const GITLAB_DETAILED_MERGEABLE_STATUS = "mergeable";
|
|
15
|
+
const GITLAB_LEGACY_MERGEABLE_STATUS = "can_be_merged";
|
|
16
|
+
export class GlabCliMissingError extends ForgeCliMissingError {
|
|
17
|
+
constructor() {
|
|
18
|
+
super("GitLab CLI (glab) is not installed or not in PATH");
|
|
19
|
+
this.name = "GlabCliMissingError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class GlabAuthenticationError extends ForgeAuthenticationError {
|
|
23
|
+
constructor(params) {
|
|
24
|
+
super("GitLab CLI authentication failed", params);
|
|
25
|
+
this.name = "GlabAuthenticationError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class GlabCommandError extends ForgeCommandError {
|
|
29
|
+
constructor(params) {
|
|
30
|
+
super({ brand: "GitLab", binary: "glab" }, params);
|
|
31
|
+
this.name = "GlabCommandError";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const GitLabPipelineSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
id: z.number().optional(),
|
|
37
|
+
status: z.string().optional(),
|
|
38
|
+
web_url: z.string().optional(),
|
|
39
|
+
})
|
|
40
|
+
.passthrough();
|
|
41
|
+
const GitLabPipelineJobSchema = z
|
|
42
|
+
.object({
|
|
43
|
+
id: z.number(),
|
|
44
|
+
name: z.string(),
|
|
45
|
+
stage: z.string(),
|
|
46
|
+
status: z.string(),
|
|
47
|
+
allow_failure: z.boolean().optional(),
|
|
48
|
+
web_url: z.string().nullable().optional(),
|
|
49
|
+
duration: z.number().nullable().optional(),
|
|
50
|
+
})
|
|
51
|
+
.passthrough();
|
|
52
|
+
const GitLabPipelineDetailsSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
id: z.number(),
|
|
55
|
+
status: z.string(),
|
|
56
|
+
ref: z.string().nullable().optional(),
|
|
57
|
+
sha: z.string().nullable().optional(),
|
|
58
|
+
web_url: z.string().nullable().optional(),
|
|
59
|
+
jobs: z.array(GitLabPipelineJobSchema).optional().default([]),
|
|
60
|
+
})
|
|
61
|
+
.passthrough();
|
|
62
|
+
const GitLabMergeRequestSchema = z
|
|
63
|
+
.object({
|
|
64
|
+
iid: z.number(),
|
|
65
|
+
title: z.string(),
|
|
66
|
+
web_url: z.string(),
|
|
67
|
+
state: z.string(),
|
|
68
|
+
source_branch: z.string(),
|
|
69
|
+
target_branch: z.string(),
|
|
70
|
+
sha: z.string().optional(),
|
|
71
|
+
source_project_id: z.number().nullable().optional(),
|
|
72
|
+
target_project_id: z.number().nullable().optional(),
|
|
73
|
+
draft: z.boolean().optional(),
|
|
74
|
+
work_in_progress: z.boolean().optional(),
|
|
75
|
+
has_conflicts: z.boolean().optional(),
|
|
76
|
+
blocking_discussions_resolved: z.boolean().optional(),
|
|
77
|
+
merge_when_pipeline_succeeds: z.boolean().optional(),
|
|
78
|
+
approvals_required: z.number().nullable().optional(),
|
|
79
|
+
approvals_given: z.number().nullable().optional(),
|
|
80
|
+
merged_at: z.string().nullable().optional(),
|
|
81
|
+
detailed_merge_status: z.string().optional(),
|
|
82
|
+
merge_status: z.string().optional(),
|
|
83
|
+
description: z.string().nullable().optional(),
|
|
84
|
+
labels: z.array(z.string()).optional(),
|
|
85
|
+
updated_at: z.string().optional(),
|
|
86
|
+
references: z.object({ full: z.string().optional() }).passthrough().optional(),
|
|
87
|
+
head_pipeline: GitLabPipelineSchema.nullable().optional(),
|
|
88
|
+
})
|
|
89
|
+
.passthrough();
|
|
90
|
+
const GitLabIssueSchema = z
|
|
91
|
+
.object({
|
|
92
|
+
iid: z.number(),
|
|
93
|
+
title: z.string(),
|
|
94
|
+
web_url: z.string(),
|
|
95
|
+
state: z.string(),
|
|
96
|
+
description: z.string().nullable().optional(),
|
|
97
|
+
labels: z.array(z.string()).optional(),
|
|
98
|
+
updated_at: z.string().optional(),
|
|
99
|
+
references: z.object({ full: z.string().optional() }).passthrough().optional(),
|
|
100
|
+
})
|
|
101
|
+
.passthrough();
|
|
102
|
+
const GitLabNoteAuthorSchema = z
|
|
103
|
+
.object({
|
|
104
|
+
username: z.string().optional(),
|
|
105
|
+
name: z.string().optional(),
|
|
106
|
+
web_url: z.string().nullable().optional(),
|
|
107
|
+
avatar_url: z.string().nullable().optional(),
|
|
108
|
+
})
|
|
109
|
+
.passthrough();
|
|
110
|
+
const GitLabNoteLineRangeEndpointSchema = z
|
|
111
|
+
.object({
|
|
112
|
+
new_line: z.number().nullable().optional(),
|
|
113
|
+
old_line: z.number().nullable().optional(),
|
|
114
|
+
})
|
|
115
|
+
.passthrough();
|
|
116
|
+
const GitLabNotePositionSchema = z
|
|
117
|
+
.object({
|
|
118
|
+
new_path: z.string().nullable().optional(),
|
|
119
|
+
old_path: z.string().nullable().optional(),
|
|
120
|
+
new_line: z.number().nullable().optional(),
|
|
121
|
+
old_line: z.number().nullable().optional(),
|
|
122
|
+
line_range: z
|
|
123
|
+
.object({
|
|
124
|
+
start: GitLabNoteLineRangeEndpointSchema.nullable().optional(),
|
|
125
|
+
end: GitLabNoteLineRangeEndpointSchema.nullable().optional(),
|
|
126
|
+
})
|
|
127
|
+
.passthrough()
|
|
128
|
+
.nullable()
|
|
129
|
+
.optional(),
|
|
130
|
+
})
|
|
131
|
+
.passthrough();
|
|
132
|
+
const GitLabNoteSchema = z
|
|
133
|
+
.object({
|
|
134
|
+
id: z.number(),
|
|
135
|
+
body: z.string().nullable().optional(),
|
|
136
|
+
system: z.boolean().optional(),
|
|
137
|
+
type: z.string().nullable().optional(),
|
|
138
|
+
created_at: z.string().nullable().optional(),
|
|
139
|
+
resolvable: z.boolean().optional(),
|
|
140
|
+
resolved: z.boolean().optional(),
|
|
141
|
+
author: GitLabNoteAuthorSchema.nullable().optional(),
|
|
142
|
+
position: GitLabNotePositionSchema.nullable().optional(),
|
|
143
|
+
})
|
|
144
|
+
.passthrough();
|
|
145
|
+
const GitLabDiscussionSchema = z
|
|
146
|
+
.object({
|
|
147
|
+
id: z.string(),
|
|
148
|
+
individual_note: z.boolean().optional(),
|
|
149
|
+
notes: z.array(GitLabNoteSchema).optional().default([]),
|
|
150
|
+
})
|
|
151
|
+
.passthrough();
|
|
152
|
+
const GitLabApprovalsSchema = z
|
|
153
|
+
.object({
|
|
154
|
+
approvals_required: z.number().nullable().optional(),
|
|
155
|
+
approvals_left: z.number().nullable().optional(),
|
|
156
|
+
approved_by: z.array(z.unknown()).nullable().optional(),
|
|
157
|
+
})
|
|
158
|
+
.passthrough();
|
|
159
|
+
const TIMELINE_PAGE_SIZE = 100;
|
|
160
|
+
async function resolveGlabPath() {
|
|
161
|
+
return findExecutable("glab");
|
|
162
|
+
}
|
|
163
|
+
const glabCliRunner = createForgeCliRunner({
|
|
164
|
+
binary: "glab",
|
|
165
|
+
envOverlay: GLAB_ENV,
|
|
166
|
+
timeoutMs: GLAB_COMMAND_TIMEOUT_MS,
|
|
167
|
+
isAuthFailureText,
|
|
168
|
+
errorClasses: {
|
|
169
|
+
isAlreadyClassified: (candidate) => candidate instanceof GlabAuthenticationError || candidate instanceof GlabCliMissingError,
|
|
170
|
+
isCommandError: (candidate) => candidate instanceof GlabCommandError,
|
|
171
|
+
createAuthError: (stderr) => new GlabAuthenticationError({ stderr }),
|
|
172
|
+
createMissingError: () => new GlabCliMissingError(),
|
|
173
|
+
createCommandError: (params) => new GlabCommandError(params),
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
async function runGlabCommand(args, options) {
|
|
177
|
+
return glabCliRunner.run(args, options);
|
|
178
|
+
}
|
|
179
|
+
export function parseGitLabHostFromRemoteUrl(url) {
|
|
180
|
+
return parseGitRemoteLocation(url)?.host ?? null;
|
|
181
|
+
}
|
|
182
|
+
function mapMergeRequestState(state) {
|
|
183
|
+
if (state === "opened") {
|
|
184
|
+
return "open";
|
|
185
|
+
}
|
|
186
|
+
return state === "merged" ? "merged" : "closed";
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Direct-merge readiness from GitLab's merge signals. `detailed_merge_status` is
|
|
190
|
+
* GitLab 15.6+ only; when it is absent (older self-managed instances) fall back
|
|
191
|
+
* to the legacy `merge_status === "can_be_merged"` with no conflicts instead of
|
|
192
|
+
* refusing every merge.
|
|
193
|
+
*/
|
|
194
|
+
function isGitLabMergeReady(params) {
|
|
195
|
+
if (params.detailedMergeStatus != null) {
|
|
196
|
+
return params.detailedMergeStatus === GITLAB_DETAILED_MERGEABLE_STATUS;
|
|
197
|
+
}
|
|
198
|
+
return params.mergeStatus === GITLAB_LEGACY_MERGEABLE_STATUS && !params.hasConflicts;
|
|
199
|
+
}
|
|
200
|
+
function mapMergeable(mr) {
|
|
201
|
+
if (mr.has_conflicts === true) {
|
|
202
|
+
return "CONFLICTING";
|
|
203
|
+
}
|
|
204
|
+
if (isGitLabMergeReady({
|
|
205
|
+
detailedMergeStatus: mr.detailed_merge_status,
|
|
206
|
+
mergeStatus: mr.merge_status,
|
|
207
|
+
hasConflicts: mr.has_conflicts ?? false,
|
|
208
|
+
})) {
|
|
209
|
+
return "MERGEABLE";
|
|
210
|
+
}
|
|
211
|
+
return "UNKNOWN";
|
|
212
|
+
}
|
|
213
|
+
function mapPipelineChecksStatus(status) {
|
|
214
|
+
switch (status) {
|
|
215
|
+
case "success":
|
|
216
|
+
case "passed":
|
|
217
|
+
return "success";
|
|
218
|
+
case "failed":
|
|
219
|
+
return "failure";
|
|
220
|
+
case "canceled":
|
|
221
|
+
case "cancelled":
|
|
222
|
+
return "none";
|
|
223
|
+
case "manual":
|
|
224
|
+
return "pending";
|
|
225
|
+
default:
|
|
226
|
+
return status && GITLAB_ACTIVE_PIPELINE_STATUS_SET.has(status) ? "pending" : "none";
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function splitProjectPath(fullReference) {
|
|
230
|
+
if (!fullReference) {
|
|
231
|
+
return {};
|
|
232
|
+
}
|
|
233
|
+
const projectPath = fullReference.split("!")[0]?.split("#")[0];
|
|
234
|
+
if (!projectPath) {
|
|
235
|
+
return {};
|
|
236
|
+
}
|
|
237
|
+
const segments = projectPath.split("/").filter((segment) => segment.length > 0);
|
|
238
|
+
if (segments.length === 0) {
|
|
239
|
+
return {};
|
|
240
|
+
}
|
|
241
|
+
return { owner: segments[0], name: segments[segments.length - 1] };
|
|
242
|
+
}
|
|
243
|
+
function toPullRequestSummary(mr) {
|
|
244
|
+
const projectPath = extractProjectPath(mr.references?.full);
|
|
245
|
+
return {
|
|
246
|
+
number: mr.iid,
|
|
247
|
+
title: mr.title,
|
|
248
|
+
url: mr.web_url,
|
|
249
|
+
state: mapMergeRequestState(mr.state),
|
|
250
|
+
body: mr.description ?? null,
|
|
251
|
+
baseRefName: mr.target_branch,
|
|
252
|
+
headRefName: mr.source_branch,
|
|
253
|
+
labels: mr.labels ?? [],
|
|
254
|
+
...(projectPath ? { projectPath } : {}),
|
|
255
|
+
updatedAt: mr.updated_at ?? "",
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function toIssueSummary(issue) {
|
|
259
|
+
const projectPath = extractProjectPath(issue.references?.full);
|
|
260
|
+
return {
|
|
261
|
+
number: issue.iid,
|
|
262
|
+
title: issue.title,
|
|
263
|
+
url: issue.web_url,
|
|
264
|
+
state: issue.state,
|
|
265
|
+
body: issue.description ?? null,
|
|
266
|
+
labels: issue.labels ?? [],
|
|
267
|
+
...(projectPath ? { projectPath } : {}),
|
|
268
|
+
updatedAt: issue.updated_at ?? "",
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function extractProjectPath(fullReference) {
|
|
272
|
+
if (!fullReference) {
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
const projectPath = fullReference.split("!")[0]?.split("#")[0];
|
|
276
|
+
return projectPath && projectPath.length > 0 ? projectPath : undefined;
|
|
277
|
+
}
|
|
278
|
+
function countApprovalsGiven(approvals) {
|
|
279
|
+
if (!approvals) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
if (Array.isArray(approvals.approved_by)) {
|
|
283
|
+
return approvals.approved_by.length;
|
|
284
|
+
}
|
|
285
|
+
if (approvals.approvals_required != null && approvals.approvals_left != null) {
|
|
286
|
+
return Math.max(0, approvals.approvals_required - approvals.approvals_left);
|
|
287
|
+
}
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
function toGitLabStatusFacts(mr, approvals) {
|
|
291
|
+
return {
|
|
292
|
+
detailedMergeStatus: mr.detailed_merge_status ?? null,
|
|
293
|
+
mergeStatus: mr.merge_status ?? null,
|
|
294
|
+
hasConflicts: mr.has_conflicts ?? false,
|
|
295
|
+
blockingDiscussionsResolved: mr.blocking_discussions_resolved ?? true,
|
|
296
|
+
approvalsRequired: approvals?.approvals_required ?? mr.approvals_required ?? 0,
|
|
297
|
+
approvalsGiven: countApprovalsGiven(approvals) ?? mr.approvals_given ?? 0,
|
|
298
|
+
pipelineStatus: mr.head_pipeline?.status ?? null,
|
|
299
|
+
pipelineId: mr.head_pipeline?.id ?? null,
|
|
300
|
+
pipelineUrl: mr.head_pipeline?.web_url ?? null,
|
|
301
|
+
mergeWhenPipelineSucceeds: mr.merge_when_pipeline_succeeds ?? false,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function parseGitLabTimestamp(value) {
|
|
305
|
+
if (!value) {
|
|
306
|
+
return 0;
|
|
307
|
+
}
|
|
308
|
+
const ms = Date.parse(value);
|
|
309
|
+
return Number.isFinite(ms) ? ms : 0;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* A GitLab discussion is a reply chain when it is not an explicit standalone
|
|
313
|
+
* note (`individual_note: true`). Older payloads may omit the flag, so a
|
|
314
|
+
* discussion that already holds multiple notes is also treated as a thread.
|
|
315
|
+
*/
|
|
316
|
+
function isThreadDiscussion(discussion) {
|
|
317
|
+
if (discussion.individual_note === true) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
return discussion.individual_note === false || discussion.notes.length > 1;
|
|
321
|
+
}
|
|
322
|
+
function resolvePositionLine(endpoint) {
|
|
323
|
+
return endpoint.new_line ?? endpoint.old_line ?? undefined;
|
|
324
|
+
}
|
|
325
|
+
function toTimelineCommentLocation(note, discussion) {
|
|
326
|
+
const position = note.position;
|
|
327
|
+
const path = position?.new_path ?? position?.old_path ?? undefined;
|
|
328
|
+
if (!position || !path) {
|
|
329
|
+
return undefined;
|
|
330
|
+
}
|
|
331
|
+
const line = resolvePositionLine(position);
|
|
332
|
+
const start = position.line_range?.start;
|
|
333
|
+
const startLine = start ? resolvePositionLine(start) : undefined;
|
|
334
|
+
// Only emit a resolution state GitLab can actually own: a note that is not
|
|
335
|
+
// resolvable (ordinary comments, system context) has no meaningful resolved
|
|
336
|
+
// flag, and defaulting it to `false` would render a fake "unresolved" badge.
|
|
337
|
+
const isResolved = note.resolvable === true ? (note.resolved ?? false) : undefined;
|
|
338
|
+
return {
|
|
339
|
+
path,
|
|
340
|
+
...(line != null ? { line } : {}),
|
|
341
|
+
...(startLine != null && startLine !== line ? { startLine } : {}),
|
|
342
|
+
threadId: discussion.id,
|
|
343
|
+
...(isResolved !== undefined ? { isResolved } : {}),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Maps a GitLab note to a neutral timeline item. The forge has no GitHub-style
|
|
348
|
+
* review verdict on a note, so every human note becomes a `comment`; approvals
|
|
349
|
+
* are surfaced separately on the status facts, not as timeline reviews. System
|
|
350
|
+
* notes (events like "approved", "mentioned in commit") are dropped.
|
|
351
|
+
*/
|
|
352
|
+
function toTimelineComment(note, discussion, mrWebUrl) {
|
|
353
|
+
if (note.system === true) {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
const location = toTimelineCommentLocation(note, discussion);
|
|
357
|
+
// Top-level thread id groups every note of a reply chain — including general
|
|
358
|
+
// (non-file) discussions that carry no `location` — into one timeline thread.
|
|
359
|
+
const threadId = isThreadDiscussion(discussion) ? discussion.id : undefined;
|
|
360
|
+
// A resolvable discussion without a file position (a general thread) carries its
|
|
361
|
+
// resolution here, since `location.isResolved` only exists for file threads.
|
|
362
|
+
const threadIsResolved = !location && note.resolvable === true ? (note.resolved ?? false) : undefined;
|
|
363
|
+
return {
|
|
364
|
+
kind: "comment",
|
|
365
|
+
id: String(note.id),
|
|
366
|
+
author: note.author?.username ?? note.author?.name ?? "unknown",
|
|
367
|
+
authorUrl: note.author?.web_url ?? null,
|
|
368
|
+
avatarUrl: note.author?.avatar_url ?? null,
|
|
369
|
+
body: note.body ?? "",
|
|
370
|
+
createdAt: parseGitLabTimestamp(note.created_at),
|
|
371
|
+
url: `${mrWebUrl}#note_${note.id}`,
|
|
372
|
+
...(threadId ? { threadId } : {}),
|
|
373
|
+
...(threadIsResolved !== undefined ? { threadIsResolved } : {}),
|
|
374
|
+
...(location ? { location } : {}),
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
function classifyGlabTimelineErrorKind(stderr) {
|
|
378
|
+
const normalized = stderr.toLowerCase();
|
|
379
|
+
if (normalized.includes("404") || normalized.includes("not found")) {
|
|
380
|
+
return "not_found";
|
|
381
|
+
}
|
|
382
|
+
if (normalized.includes("403") || normalized.includes("forbidden") || isAuthFailureText(stderr)) {
|
|
383
|
+
return "forbidden";
|
|
384
|
+
}
|
|
385
|
+
return "unknown";
|
|
386
|
+
}
|
|
387
|
+
function mapGlabTimelineError(error) {
|
|
388
|
+
if (error instanceof GlabAuthenticationError) {
|
|
389
|
+
return { kind: "forbidden", message: error.stderr || error.message };
|
|
390
|
+
}
|
|
391
|
+
if (error instanceof GlabCommandError) {
|
|
392
|
+
return {
|
|
393
|
+
kind: classifyGlabTimelineErrorKind(error.stderr),
|
|
394
|
+
message: error.stderr || error.message,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
return { kind: "unknown", message: error instanceof Error ? error.message : String(error) };
|
|
398
|
+
}
|
|
399
|
+
function normalizePipelineJobStatus(raw) {
|
|
400
|
+
switch (raw) {
|
|
401
|
+
case "success":
|
|
402
|
+
case "passed":
|
|
403
|
+
return "success";
|
|
404
|
+
case "failed":
|
|
405
|
+
return "failed";
|
|
406
|
+
case "running":
|
|
407
|
+
return "running";
|
|
408
|
+
case "created":
|
|
409
|
+
return "created";
|
|
410
|
+
case "canceled":
|
|
411
|
+
case "cancelled":
|
|
412
|
+
return "canceled";
|
|
413
|
+
case "skipped":
|
|
414
|
+
return "skipped";
|
|
415
|
+
case "manual":
|
|
416
|
+
return "manual";
|
|
417
|
+
default:
|
|
418
|
+
return GITLAB_ACTIVE_PIPELINE_STATUS_SET.has(raw) ? "pending" : "unknown";
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
function getPullRequestCheckMetadata(rawStatus, allowFailure) {
|
|
422
|
+
if (rawStatus === "manual") {
|
|
423
|
+
return {
|
|
424
|
+
traits: allowFailure
|
|
425
|
+
? [CHECK_TRAIT_MANUAL]
|
|
426
|
+
: [CHECK_TRAIT_MANUAL, CHECK_TRAIT_ACTION_REQUIRED],
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
return rawStatus === "failed" && allowFailure ? { traits: [CHECK_TRAIT_WARNING] } : {};
|
|
430
|
+
}
|
|
431
|
+
const PULL_REQUEST_CHECK_STATUS_BY_PIPELINE_JOB_STATUS = {
|
|
432
|
+
success: "success",
|
|
433
|
+
failed: "failure",
|
|
434
|
+
running: "pending",
|
|
435
|
+
pending: "pending",
|
|
436
|
+
canceled: "cancelled",
|
|
437
|
+
skipped: "skipped",
|
|
438
|
+
manual: "pending",
|
|
439
|
+
created: "pending",
|
|
440
|
+
unknown: "pending",
|
|
441
|
+
};
|
|
442
|
+
function toPullRequestCheck(job) {
|
|
443
|
+
const rawStatus = job.status.toLowerCase();
|
|
444
|
+
const allowFailure = job.allow_failure ?? false;
|
|
445
|
+
let status;
|
|
446
|
+
if (rawStatus === "failed" && allowFailure) {
|
|
447
|
+
// GitLab treats this as passed-with-warning: retain a successful aggregate
|
|
448
|
+
// while giving the client the presentation distinction it cannot express
|
|
449
|
+
// through the neutral status enum alone.
|
|
450
|
+
status = "success";
|
|
451
|
+
}
|
|
452
|
+
else if (rawStatus === "manual" && allowFailure) {
|
|
453
|
+
status = "skipped";
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
status =
|
|
457
|
+
PULL_REQUEST_CHECK_STATUS_BY_PIPELINE_JOB_STATUS[normalizePipelineJobStatus(rawStatus)];
|
|
458
|
+
}
|
|
459
|
+
return {
|
|
460
|
+
name: job.name,
|
|
461
|
+
status,
|
|
462
|
+
...getPullRequestCheckMetadata(rawStatus, allowFailure),
|
|
463
|
+
url: job.web_url ?? null,
|
|
464
|
+
workflow: job.stage,
|
|
465
|
+
checkRunId: job.id,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
function toPullRequestChecks(pipeline) {
|
|
469
|
+
return [...pipeline.jobs].sort((a, b) => a.id - b.id).map(toPullRequestCheck);
|
|
470
|
+
}
|
|
471
|
+
const STAGE_STATUS_PRIORITY = [
|
|
472
|
+
"running",
|
|
473
|
+
"failed",
|
|
474
|
+
"pending",
|
|
475
|
+
"created",
|
|
476
|
+
"manual",
|
|
477
|
+
"canceled",
|
|
478
|
+
"skipped",
|
|
479
|
+
"success",
|
|
480
|
+
];
|
|
481
|
+
function aggregateStageStatus(jobs) {
|
|
482
|
+
const present = new Set(jobs.map((job) => job.allowFailure && (job.status === "failed" || job.status === "manual")
|
|
483
|
+
? "success"
|
|
484
|
+
: job.status));
|
|
485
|
+
for (const status of STAGE_STATUS_PRIORITY) {
|
|
486
|
+
if (present.has(status)) {
|
|
487
|
+
return status;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return "unknown";
|
|
491
|
+
}
|
|
492
|
+
function toPipelineDetails(pipeline) {
|
|
493
|
+
// glab returns jobs newest-first; ascending id restores creation order.
|
|
494
|
+
const jobs = [...pipeline.jobs]
|
|
495
|
+
.sort((a, b) => a.id - b.id)
|
|
496
|
+
.map((job) => ({
|
|
497
|
+
id: job.id,
|
|
498
|
+
name: job.name,
|
|
499
|
+
stage: job.stage,
|
|
500
|
+
status: normalizePipelineJobStatus(job.status),
|
|
501
|
+
rawStatus: job.status,
|
|
502
|
+
url: job.web_url ?? null,
|
|
503
|
+
allowFailure: job.allow_failure ?? false,
|
|
504
|
+
durationSeconds: job.duration ?? null,
|
|
505
|
+
}));
|
|
506
|
+
const stages = [];
|
|
507
|
+
const stageIndex = new Map();
|
|
508
|
+
for (const job of jobs) {
|
|
509
|
+
let stage = stageIndex.get(job.stage);
|
|
510
|
+
if (!stage) {
|
|
511
|
+
stage = { name: job.stage, status: "unknown", jobs: [] };
|
|
512
|
+
stageIndex.set(job.stage, stage);
|
|
513
|
+
stages.push(stage);
|
|
514
|
+
}
|
|
515
|
+
stage.jobs.push(job);
|
|
516
|
+
}
|
|
517
|
+
for (const stage of stages) {
|
|
518
|
+
stage.status = aggregateStageStatus(stage.jobs);
|
|
519
|
+
}
|
|
520
|
+
return {
|
|
521
|
+
id: pipeline.id,
|
|
522
|
+
status: normalizePipelineJobStatus(pipeline.status),
|
|
523
|
+
rawStatus: pipeline.status,
|
|
524
|
+
url: pipeline.web_url ?? null,
|
|
525
|
+
ref: pipeline.ref ?? null,
|
|
526
|
+
sha: pipeline.sha ?? null,
|
|
527
|
+
stages,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
function toCheckDetails(pipeline) {
|
|
531
|
+
return {
|
|
532
|
+
checkRunId: pipeline.id,
|
|
533
|
+
workflowRunId: null,
|
|
534
|
+
name: pipeline.ref ? `Pipeline (${pipeline.ref})` : `Pipeline #${pipeline.id}`,
|
|
535
|
+
status: null,
|
|
536
|
+
conclusion: null,
|
|
537
|
+
url: pipeline.web_url ?? null,
|
|
538
|
+
detailsUrl: pipeline.web_url ?? null,
|
|
539
|
+
output: null,
|
|
540
|
+
annotations: [],
|
|
541
|
+
failedJobs: [],
|
|
542
|
+
truncated: false,
|
|
543
|
+
pipeline: toPipelineDetails(pipeline),
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
function toCurrentPullRequestStatus(mr, approvals, checks = [], pipelineStatus) {
|
|
547
|
+
const { owner, name } = splitProjectPath(mr.references?.full);
|
|
548
|
+
const projectPath = extractProjectPath(mr.references?.full);
|
|
549
|
+
return {
|
|
550
|
+
number: mr.iid,
|
|
551
|
+
...(owner ? { repoOwner: owner } : {}),
|
|
552
|
+
...(name ? { repoName: name } : {}),
|
|
553
|
+
...(projectPath ? { projectPath } : {}),
|
|
554
|
+
url: mr.web_url,
|
|
555
|
+
title: mr.title,
|
|
556
|
+
state: mapMergeRequestState(mr.state),
|
|
557
|
+
baseRefName: mr.target_branch,
|
|
558
|
+
headRefName: mr.source_branch,
|
|
559
|
+
isMerged: mr.state === "merged" || mr.merged_at != null,
|
|
560
|
+
isDraft: mr.draft ?? mr.work_in_progress ?? false,
|
|
561
|
+
mergeable: mapMergeable(mr),
|
|
562
|
+
checks,
|
|
563
|
+
// Aggregate and job list must come from the same pipeline: glab resolves
|
|
564
|
+
// the MR's latest pipeline, which can differ from head_pipeline (detached
|
|
565
|
+
// vs branch pipelines, or a newer run). GitLab's own pipeline status stays
|
|
566
|
+
// authoritative for the aggregate - deriving it from the mapped jobs would
|
|
567
|
+
// hold MRs at "pending" forever on post-success manual deploy jobs.
|
|
568
|
+
checksStatus: mapPipelineChecksStatus(pipelineStatus ?? mr.head_pipeline?.status),
|
|
569
|
+
reviewDecision: null,
|
|
570
|
+
forgeSpecific: { forge: "gitlab", ...toGitLabStatusFacts(mr, approvals) },
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
function isAuthFailureText(text) {
|
|
574
|
+
return /\b(401|unauthorized|not logged in|authentication failed|no token|invalid token)\b/i.test(text);
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Matches only glab's genuine "no open merge request for this branch" phrasing.
|
|
578
|
+
* A broad `not found` match would swallow a 404/403 for a private or missing
|
|
579
|
+
* project as "no MR", so those are left to propagate as errors instead.
|
|
580
|
+
*/
|
|
581
|
+
function isNoMergeRequestText(text) {
|
|
582
|
+
return /no (open )?merge requests?/i.test(text);
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Guards a positional glab argument (a branch/ref or MR selector) so a value
|
|
586
|
+
* beginning with `-` cannot be reinterpreted as a flag. glab positionals carry
|
|
587
|
+
* no `--` separator here; git already forbids ref names that start with `-`, so
|
|
588
|
+
* a leading dash is treated as injection rather than a legitimate ref.
|
|
589
|
+
*/
|
|
590
|
+
function assertSafeGlabPositional(value) {
|
|
591
|
+
if (value.startsWith("-")) {
|
|
592
|
+
throw new Error(`Refusing to pass a GitLab argument that begins with '-': ${value}`);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
function extractMergeRequestUrl(stdout) {
|
|
596
|
+
const match = stdout.match(/https?:\/\/\S+\/-\/merge_requests\/\d+/);
|
|
597
|
+
return match ? match[0] : null;
|
|
598
|
+
}
|
|
599
|
+
function parseIidFromUrl(url) {
|
|
600
|
+
const match = url.match(/\/merge_requests\/(\d+)/);
|
|
601
|
+
return match ? Number(match[1]) : null;
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Probe whether `host` is a GitLab instance by asking glab about its auth status
|
|
605
|
+
* for that hostname (exit 0 => a configured GitLab instance, even for
|
|
606
|
+
* self-managed hosts whose name carries no "gitlab" hint). The forge resolver
|
|
607
|
+
* uses this to detect self-managed hosts the name heuristic can't classify.
|
|
608
|
+
*/
|
|
609
|
+
export async function probeGitLabHost(host) {
|
|
610
|
+
return probeHostViaCliAuthStatus({
|
|
611
|
+
cli: "glab",
|
|
612
|
+
host,
|
|
613
|
+
envOverlay: GLAB_ENV,
|
|
614
|
+
});
|
|
615
|
+
}
|
|
616
|
+
function getGitlabStatusFacts(status) {
|
|
617
|
+
const forgeSpecific = status?.forgeSpecific;
|
|
618
|
+
return isGitLabStatusFacts(forgeSpecific) ? forgeSpecific : null;
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Server-side guard for GitLab auto-merge: `glab mr merge --auto-merge` only
|
|
622
|
+
* schedules the merge while a pipeline is active. Without one it merges on the
|
|
623
|
+
* spot, so this is enforced at execution time as well as in UI policy.
|
|
624
|
+
*/
|
|
625
|
+
export function assertGitLabAutoMergeEnableReady(input) {
|
|
626
|
+
const gitlab = getGitlabStatusFacts(input.status);
|
|
627
|
+
if (!gitlab) {
|
|
628
|
+
throw new Error("GitLab auto-merge facts are unavailable for this merge request");
|
|
629
|
+
}
|
|
630
|
+
if (gitlab.mergeWhenPipelineSucceeds) {
|
|
631
|
+
throw new Error("Auto-merge is already enabled for this merge request");
|
|
632
|
+
}
|
|
633
|
+
if (gitlab.pipelineStatus === null ||
|
|
634
|
+
!GITLAB_ACTIVE_PIPELINE_STATUS_SET.has(gitlab.pipelineStatus)) {
|
|
635
|
+
throw new Error("GitLab auto-merge requires an in-progress pipeline; without one the merge would run immediately");
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Server-side guard for a GitLab direct merge, mirroring the GitHub adapter's
|
|
640
|
+
* assertDirectPullRequestMergeReady: refuse the merge unless GitLab reports the
|
|
641
|
+
* MR as directly mergeable and auto-merge is not already scheduled. Enforced
|
|
642
|
+
* here (not just in the UI policy) because the resolved status can go stale
|
|
643
|
+
* between the client check and execution, and the RPC can be called directly.
|
|
644
|
+
*/
|
|
645
|
+
function assertGitLabDirectMergeReady(input) {
|
|
646
|
+
const gitlab = getGitlabStatusFacts(input.status);
|
|
647
|
+
if (!gitlab) {
|
|
648
|
+
throw new Error("GitLab merge facts are unavailable for this merge request");
|
|
649
|
+
}
|
|
650
|
+
if (gitlab.mergeWhenPipelineSucceeds) {
|
|
651
|
+
throw new Error("Direct merge is not available because auto-merge is already enabled");
|
|
652
|
+
}
|
|
653
|
+
if (!isGitLabMergeReady({
|
|
654
|
+
detailedMergeStatus: gitlab.detailedMergeStatus,
|
|
655
|
+
mergeStatus: gitlab.mergeStatus,
|
|
656
|
+
hasConflicts: gitlab.hasConflicts,
|
|
657
|
+
})) {
|
|
658
|
+
throw new Error("GitLab does not report this merge request as ready for direct merge");
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
function isGlabSearchAuthFailure(reason) {
|
|
662
|
+
return reason instanceof GlabCliMissingError || reason instanceof GlabAuthenticationError;
|
|
663
|
+
}
|
|
664
|
+
function getGlabUnavailableSearchAuthState(results) {
|
|
665
|
+
if (results.length === 0 ||
|
|
666
|
+
!results.every((result) => result.status === "rejected" && isGlabSearchAuthFailure(result.reason))) {
|
|
667
|
+
return null;
|
|
668
|
+
}
|
|
669
|
+
return results.some((result) => result.status === "rejected" && result.reason instanceof GlabCliMissingError)
|
|
670
|
+
? "cli_missing"
|
|
671
|
+
: "unauthenticated";
|
|
672
|
+
}
|
|
673
|
+
function throwFirstNonGlabAuthSearchRejection(results) {
|
|
674
|
+
const failed = results.find((result) => result.status === "rejected" && !isGlabSearchAuthFailure(result.reason));
|
|
675
|
+
if (failed) {
|
|
676
|
+
throw failed.reason;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
export function createGitLabService(options = {}) {
|
|
680
|
+
const runner = options.runner ?? runGlabCommand;
|
|
681
|
+
const resolveGlab = createCachedCliPathResolver(options.resolveGlabPath ?? resolveGlabPath);
|
|
682
|
+
const resolveRemoteUrl = options.resolveRemoteUrl ?? defaultResolveRemoteUrl;
|
|
683
|
+
async function run(args, runOptions) {
|
|
684
|
+
const glabPath = await resolveGlab();
|
|
685
|
+
if (!glabPath) {
|
|
686
|
+
throw new GlabCliMissingError();
|
|
687
|
+
}
|
|
688
|
+
try {
|
|
689
|
+
const result = await runner(args, runOptions);
|
|
690
|
+
return result.stdout.trim();
|
|
691
|
+
}
|
|
692
|
+
catch (error) {
|
|
693
|
+
throw glabCliRunner.normalizeError(error, { args, cwd: runOptions.cwd });
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
// Centralize parse + validate so a malformed or empty glab payload surfaces as
|
|
697
|
+
// a classified GlabCommandError (with args + cwd) instead of a raw
|
|
698
|
+
// SyntaxError/ZodError that bypasses the Glab* error classification.
|
|
699
|
+
async function runJson(args, runOptions, schema) {
|
|
700
|
+
const stdout = await run(args, runOptions);
|
|
701
|
+
return parseCliJsonOutput({
|
|
702
|
+
commandName: "glab",
|
|
703
|
+
args,
|
|
704
|
+
cwd: runOptions.cwd,
|
|
705
|
+
stdout,
|
|
706
|
+
schema,
|
|
707
|
+
createCommandError: (params) => new GlabCommandError(params),
|
|
708
|
+
});
|
|
709
|
+
}
|
|
710
|
+
async function viewMergeRequest(cwd, ref) {
|
|
711
|
+
assertSafeGlabPositional(ref);
|
|
712
|
+
return runJson(["mr", "view", ref, "-F", "json"], { cwd }, GitLabMergeRequestSchema);
|
|
713
|
+
}
|
|
714
|
+
async function listMergeRequestsBySourceBranch(cwd, sourceBranch) {
|
|
715
|
+
return runJson([
|
|
716
|
+
"mr",
|
|
717
|
+
"list",
|
|
718
|
+
"--all",
|
|
719
|
+
"--source-branch",
|
|
720
|
+
sourceBranch,
|
|
721
|
+
"--order",
|
|
722
|
+
"updated_at",
|
|
723
|
+
"--sort",
|
|
724
|
+
"desc",
|
|
725
|
+
"--per-page",
|
|
726
|
+
"100",
|
|
727
|
+
"-F",
|
|
728
|
+
"json",
|
|
729
|
+
], { cwd }, z.array(GitLabMergeRequestSchema));
|
|
730
|
+
}
|
|
731
|
+
async function resolveCurrentMergeRequest(cwd, headRef, headSha) {
|
|
732
|
+
const mergeRequests = await listMergeRequestsBySourceBranch(cwd, headRef);
|
|
733
|
+
const candidates = mergeRequests.filter((mr) => mr.source_branch === headRef);
|
|
734
|
+
const match = candidates.find((mr) => mapMergeRequestState(mr.state) === "open") ??
|
|
735
|
+
candidates.find((mr) => mapMergeRequestState(mr.state) !== "open" && headSha !== undefined && mr.sha === headSha) ??
|
|
736
|
+
null;
|
|
737
|
+
return match ? viewMergeRequest(cwd, String(match.iid)) : null;
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* Detects whether discussions exist beyond the first fetched page. The command
|
|
741
|
+
* runner exposes no pagination headers, so instead of a bare `length >= 100`
|
|
742
|
+
* (which falsely flags an exactly-full page as truncated) we probe for a single
|
|
743
|
+
* discussion on the next page. Best-effort: if the probe fails we keep the
|
|
744
|
+
* already-fetched notes and conservatively report truncation, since a full
|
|
745
|
+
* first page means at least one page of discussions exists.
|
|
746
|
+
*/
|
|
747
|
+
async function hasDiscussionsAfterFirstPage(cwd, projectPath, iid) {
|
|
748
|
+
try {
|
|
749
|
+
const probe = await runJson([
|
|
750
|
+
"api",
|
|
751
|
+
`projects/${encodeURIComponent(projectPath)}/merge_requests/${iid}/discussions?per_page=1&page=${TIMELINE_PAGE_SIZE + 1}`,
|
|
752
|
+
], { cwd }, z.array(GitLabDiscussionSchema));
|
|
753
|
+
return probe.length > 0;
|
|
754
|
+
}
|
|
755
|
+
catch {
|
|
756
|
+
return true;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* Fetches MR approval counts from the dedicated approvals endpoint, which
|
|
761
|
+
* `glab mr view` omits. Best-effort: a host without the endpoint must not
|
|
762
|
+
* break the MR status, so failures leave the counts at their fallback (0).
|
|
763
|
+
*/
|
|
764
|
+
async function fetchApprovals(cwd, mr) {
|
|
765
|
+
const projectPath = extractProjectPath(mr.references?.full);
|
|
766
|
+
if (!projectPath) {
|
|
767
|
+
return null;
|
|
768
|
+
}
|
|
769
|
+
try {
|
|
770
|
+
return await runJson(["api", `projects/${encodeURIComponent(projectPath)}/merge_requests/${mr.iid}/approvals`], { cwd }, GitLabApprovalsSchema);
|
|
771
|
+
}
|
|
772
|
+
catch {
|
|
773
|
+
return null;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
async function fetchPipelineChecks(cwd, mr) {
|
|
777
|
+
if (mr.head_pipeline?.id === undefined) {
|
|
778
|
+
return { checks: [], pipelineStatus: null };
|
|
779
|
+
}
|
|
780
|
+
try {
|
|
781
|
+
const pipeline = await runJson(["ci", "get", "--merge-request", String(mr.iid), "--with-job-details", "-F", "json"], { cwd }, GitLabPipelineDetailsSchema);
|
|
782
|
+
return { checks: toPullRequestChecks(pipeline), pipelineStatus: pipeline.status };
|
|
783
|
+
}
|
|
784
|
+
catch (error) {
|
|
785
|
+
if (error instanceof GlabCommandError) {
|
|
786
|
+
console.warn(`Failed to load GitLab pipeline jobs for MR !${mr.iid}: ${error.stderr?.trim() || error.message}`);
|
|
787
|
+
return { checks: [], pipelineStatus: null };
|
|
788
|
+
}
|
|
789
|
+
throw error;
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
async function runMergeRequestList(input) {
|
|
793
|
+
const args = ["mr", "list", "-F", "json"];
|
|
794
|
+
const query = input.query?.trim();
|
|
795
|
+
if (query) {
|
|
796
|
+
args.push("--search", query);
|
|
797
|
+
}
|
|
798
|
+
if (typeof input.limit === "number") {
|
|
799
|
+
args.push("-P", String(input.limit));
|
|
800
|
+
}
|
|
801
|
+
const mergeRequests = await runJson(args, { cwd: input.cwd }, z.array(GitLabMergeRequestSchema));
|
|
802
|
+
return mergeRequests.map(toPullRequestSummary);
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* `glab issue list` toggles JSON output with `-O/--output` (text|json); its
|
|
806
|
+
* `-F/--output-format` flag means something else (details|ids|urls) and
|
|
807
|
+
* silently falls back to the human-readable table for an unknown value. This
|
|
808
|
+
* differs from `glab mr list`, where `-F/--output` is the JSON toggle. Using
|
|
809
|
+
* the wrong flag here would emit a text table that fails JSON parsing.
|
|
810
|
+
*/
|
|
811
|
+
async function runIssueList(input) {
|
|
812
|
+
const args = ["issue", "list", "-O", "json"];
|
|
813
|
+
const query = input.query?.trim();
|
|
814
|
+
if (query) {
|
|
815
|
+
args.push("--search", query);
|
|
816
|
+
}
|
|
817
|
+
if (typeof input.limit === "number") {
|
|
818
|
+
args.push("-P", String(input.limit));
|
|
819
|
+
}
|
|
820
|
+
const issues = await runJson(args, { cwd: input.cwd }, z.array(GitLabIssueSchema));
|
|
821
|
+
return issues.map(toIssueSummary);
|
|
822
|
+
}
|
|
823
|
+
return {
|
|
824
|
+
async isAuthenticated(input) {
|
|
825
|
+
const glabPath = await resolveGlab();
|
|
826
|
+
if (!glabPath) {
|
|
827
|
+
return false;
|
|
828
|
+
}
|
|
829
|
+
const remoteUrl = await resolveRemoteUrl(input.cwd);
|
|
830
|
+
const host = remoteUrl ? parseGitLabHostFromRemoteUrl(remoteUrl) : null;
|
|
831
|
+
if (!host) {
|
|
832
|
+
return false;
|
|
833
|
+
}
|
|
834
|
+
try {
|
|
835
|
+
await runner(["auth", "status", "--hostname", host], { cwd: input.cwd });
|
|
836
|
+
return true;
|
|
837
|
+
}
|
|
838
|
+
catch {
|
|
839
|
+
return false;
|
|
840
|
+
}
|
|
841
|
+
},
|
|
842
|
+
async getCurrentPullRequestStatus(input) {
|
|
843
|
+
try {
|
|
844
|
+
const mr = await resolveCurrentMergeRequest(input.cwd, input.headRef, input.headSha);
|
|
845
|
+
if (!mr) {
|
|
846
|
+
return null;
|
|
847
|
+
}
|
|
848
|
+
const [approvals, pipelineChecks] = await Promise.all([
|
|
849
|
+
fetchApprovals(input.cwd, mr),
|
|
850
|
+
fetchPipelineChecks(input.cwd, mr),
|
|
851
|
+
]);
|
|
852
|
+
return toCurrentPullRequestStatus(mr, approvals, pipelineChecks.checks, pipelineChecks.pipelineStatus);
|
|
853
|
+
}
|
|
854
|
+
catch (error) {
|
|
855
|
+
if (error instanceof GlabCommandError && isNoMergeRequestText(error.stderr)) {
|
|
856
|
+
return null;
|
|
857
|
+
}
|
|
858
|
+
throw error;
|
|
859
|
+
}
|
|
860
|
+
},
|
|
861
|
+
async getPullRequest(input) {
|
|
862
|
+
const mr = await viewMergeRequest(input.cwd, String(input.number));
|
|
863
|
+
return toPullRequestSummary(mr);
|
|
864
|
+
},
|
|
865
|
+
async getPullRequestHeadRef(input) {
|
|
866
|
+
const mr = await viewMergeRequest(input.cwd, String(input.number));
|
|
867
|
+
return mr.source_branch;
|
|
868
|
+
},
|
|
869
|
+
async getPullRequestCheckoutTarget(input) {
|
|
870
|
+
const mr = await viewMergeRequest(input.cwd, String(input.number));
|
|
871
|
+
return {
|
|
872
|
+
number: mr.iid,
|
|
873
|
+
baseRefName: mr.target_branch,
|
|
874
|
+
headRefName: mr.source_branch,
|
|
875
|
+
checkoutRefs: [
|
|
876
|
+
{ remoteName: "origin", remoteRef: `refs/merge-requests/${mr.iid}/head` },
|
|
877
|
+
{ remoteName: "origin", remoteRef: `refs/heads/${mr.source_branch}` },
|
|
878
|
+
],
|
|
879
|
+
headOwnerLogin: null,
|
|
880
|
+
headRepositorySshUrl: null,
|
|
881
|
+
headRepositoryUrl: null,
|
|
882
|
+
isCrossRepository: mr.source_project_id !== undefined &&
|
|
883
|
+
mr.source_project_id !== null &&
|
|
884
|
+
mr.target_project_id !== undefined &&
|
|
885
|
+
mr.target_project_id !== null &&
|
|
886
|
+
mr.source_project_id !== mr.target_project_id,
|
|
887
|
+
};
|
|
888
|
+
},
|
|
889
|
+
listPullRequests(input) {
|
|
890
|
+
return runMergeRequestList(input);
|
|
891
|
+
},
|
|
892
|
+
listIssues(input) {
|
|
893
|
+
return runIssueList(input);
|
|
894
|
+
},
|
|
895
|
+
async createPullRequest(input) {
|
|
896
|
+
const args = [
|
|
897
|
+
"mr",
|
|
898
|
+
"create",
|
|
899
|
+
"--title",
|
|
900
|
+
input.title,
|
|
901
|
+
"--description",
|
|
902
|
+
input.body ?? "",
|
|
903
|
+
"--source-branch",
|
|
904
|
+
input.head,
|
|
905
|
+
"--target-branch",
|
|
906
|
+
input.base,
|
|
907
|
+
"--yes",
|
|
908
|
+
];
|
|
909
|
+
const stdout = await run(args, { cwd: input.cwd });
|
|
910
|
+
const url = extractMergeRequestUrl(stdout);
|
|
911
|
+
if (!url) {
|
|
912
|
+
throw new Error("GitLab merge request was created but no URL was returned by glab");
|
|
913
|
+
}
|
|
914
|
+
const number = parseIidFromUrl(url);
|
|
915
|
+
if (number === null) {
|
|
916
|
+
throw new Error(`GitLab merge request URL did not contain an iid: ${url}`);
|
|
917
|
+
}
|
|
918
|
+
return { url, number };
|
|
919
|
+
},
|
|
920
|
+
async mergePullRequest(input) {
|
|
921
|
+
assertGitLabDirectMergeReady(input);
|
|
922
|
+
// `--auto-merge=false` forces an immediate merge: without it glab's default
|
|
923
|
+
// would schedule "merge when the pipeline succeeds" while a pipeline runs,
|
|
924
|
+
// turning a direct merge into an auto-merge. Mirrors `gh pr merge` without
|
|
925
|
+
// `--auto`. The pre-flight guard above stays — both are needed.
|
|
926
|
+
const args = ["mr", "merge", String(input.prNumber), "--auto-merge=false", "--yes"];
|
|
927
|
+
if (input.mergeMethod === "squash") {
|
|
928
|
+
args.push("--squash");
|
|
929
|
+
}
|
|
930
|
+
else if (input.mergeMethod === "rebase") {
|
|
931
|
+
args.push("--rebase");
|
|
932
|
+
}
|
|
933
|
+
await run(args, { cwd: input.cwd });
|
|
934
|
+
return { success: true };
|
|
935
|
+
},
|
|
936
|
+
async getPullRequestTimeline(input) {
|
|
937
|
+
const identity = {
|
|
938
|
+
prNumber: input.prNumber,
|
|
939
|
+
repoOwner: input.repoOwner,
|
|
940
|
+
repoName: input.repoName,
|
|
941
|
+
};
|
|
942
|
+
try {
|
|
943
|
+
const mr = await viewMergeRequest(input.cwd, String(input.prNumber));
|
|
944
|
+
const projectPath = extractProjectPath(mr.references?.full);
|
|
945
|
+
if (!projectPath) {
|
|
946
|
+
return {
|
|
947
|
+
...identity,
|
|
948
|
+
items: [],
|
|
949
|
+
truncated: false,
|
|
950
|
+
error: {
|
|
951
|
+
kind: "not_found",
|
|
952
|
+
message: "GitLab merge request project path is unavailable",
|
|
953
|
+
},
|
|
954
|
+
};
|
|
955
|
+
}
|
|
956
|
+
const discussions = await runJson([
|
|
957
|
+
"api",
|
|
958
|
+
`projects/${encodeURIComponent(projectPath)}/merge_requests/${mr.iid}/discussions?per_page=${TIMELINE_PAGE_SIZE}`,
|
|
959
|
+
], { cwd: input.cwd }, z.array(GitLabDiscussionSchema));
|
|
960
|
+
const items = discussions
|
|
961
|
+
.flatMap((discussion) => discussion.notes.map((note) => toTimelineComment(note, discussion, mr.web_url)))
|
|
962
|
+
.filter((item) => item !== null)
|
|
963
|
+
.sort(compareTimelineItems);
|
|
964
|
+
const truncated = discussions.length >= TIMELINE_PAGE_SIZE
|
|
965
|
+
? await hasDiscussionsAfterFirstPage(input.cwd, projectPath, mr.iid)
|
|
966
|
+
: false;
|
|
967
|
+
return {
|
|
968
|
+
...identity,
|
|
969
|
+
items,
|
|
970
|
+
truncated,
|
|
971
|
+
error: null,
|
|
972
|
+
};
|
|
973
|
+
}
|
|
974
|
+
catch (error) {
|
|
975
|
+
return { ...identity, items: [], truncated: false, error: mapGlabTimelineError(error) };
|
|
976
|
+
}
|
|
977
|
+
},
|
|
978
|
+
/**
|
|
979
|
+
* Fetches a pipeline's stages/jobs for the drill-down. Addressing it by MR
|
|
980
|
+
* iid uses `glab ci get --merge-request`, which requires a recent glab
|
|
981
|
+
* (roughly 1.40+); on an older CLI the command errors and the drill-down
|
|
982
|
+
* surfaces that failure. The `--pipeline-id` path works on older glab.
|
|
983
|
+
*/
|
|
984
|
+
async getCheckDetails(input) {
|
|
985
|
+
// Prefer addressing the change request's head pipeline by iid: glab then
|
|
986
|
+
// resolves a fork/detached MR pipeline in its source project, which
|
|
987
|
+
// `--pipeline-id` run in the checkout's target project would 404 on. Fall
|
|
988
|
+
// back to the pipeline id when no iid is available.
|
|
989
|
+
const selector = input.changeRequestNumber !== undefined
|
|
990
|
+
? ["--merge-request", String(input.changeRequestNumber)]
|
|
991
|
+
: ["--pipeline-id", String(input.checkRunId)];
|
|
992
|
+
const pipeline = await runJson(["ci", "get", ...selector, "--with-job-details", "-F", "json"], { cwd: input.cwd }, GitLabPipelineDetailsSchema);
|
|
993
|
+
return toCheckDetails(pipeline);
|
|
994
|
+
},
|
|
995
|
+
async searchIssuesAndPrs(input) {
|
|
996
|
+
if (input.force && !input.reason) {
|
|
997
|
+
throw new Error("ForgeService forced read requires a reason");
|
|
998
|
+
}
|
|
999
|
+
const kinds = normalizeForgeSearchKinds(input.kinds);
|
|
1000
|
+
const shouldFetchIssues = kinds.includes("issue");
|
|
1001
|
+
const shouldFetchMergeRequests = kinds.includes("change_request");
|
|
1002
|
+
const [issuesResult, mergeRequestsResult] = await Promise.allSettled([
|
|
1003
|
+
shouldFetchIssues
|
|
1004
|
+
? runIssueList({ cwd: input.cwd, query: input.query, limit: input.limit })
|
|
1005
|
+
: Promise.resolve(null),
|
|
1006
|
+
shouldFetchMergeRequests
|
|
1007
|
+
? runMergeRequestList({ cwd: input.cwd, query: input.query, limit: input.limit })
|
|
1008
|
+
: Promise.resolve(null),
|
|
1009
|
+
]);
|
|
1010
|
+
const requestedResults = [
|
|
1011
|
+
shouldFetchIssues ? issuesResult : null,
|
|
1012
|
+
shouldFetchMergeRequests ? mergeRequestsResult : null,
|
|
1013
|
+
].filter((result) => result !== null);
|
|
1014
|
+
const unavailableAuthState = getGlabUnavailableSearchAuthState(requestedResults);
|
|
1015
|
+
if (unavailableAuthState) {
|
|
1016
|
+
return createUnavailableSearchResult(unavailableAuthState);
|
|
1017
|
+
}
|
|
1018
|
+
throwFirstNonGlabAuthSearchRejection(requestedResults);
|
|
1019
|
+
const items = [];
|
|
1020
|
+
if (shouldFetchIssues && issuesResult.status === "fulfilled") {
|
|
1021
|
+
for (const issue of issuesResult.value ?? []) {
|
|
1022
|
+
items.push({
|
|
1023
|
+
kind: "issue",
|
|
1024
|
+
number: issue.number,
|
|
1025
|
+
title: issue.title,
|
|
1026
|
+
url: issue.url,
|
|
1027
|
+
state: issue.state,
|
|
1028
|
+
body: issue.body,
|
|
1029
|
+
labels: issue.labels,
|
|
1030
|
+
...(issue.projectPath ? { projectPath: issue.projectPath } : {}),
|
|
1031
|
+
baseRefName: null,
|
|
1032
|
+
headRefName: null,
|
|
1033
|
+
updatedAt: issue.updatedAt,
|
|
1034
|
+
});
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
if (shouldFetchMergeRequests && mergeRequestsResult.status === "fulfilled") {
|
|
1038
|
+
for (const mergeRequest of mergeRequestsResult.value ?? []) {
|
|
1039
|
+
items.push({
|
|
1040
|
+
kind: "change_request",
|
|
1041
|
+
number: mergeRequest.number,
|
|
1042
|
+
title: mergeRequest.title,
|
|
1043
|
+
url: mergeRequest.url,
|
|
1044
|
+
state: mergeRequest.state,
|
|
1045
|
+
body: mergeRequest.body,
|
|
1046
|
+
labels: mergeRequest.labels,
|
|
1047
|
+
...(mergeRequest.projectPath ? { projectPath: mergeRequest.projectPath } : {}),
|
|
1048
|
+
baseRefName: mergeRequest.baseRefName,
|
|
1049
|
+
headRefName: mergeRequest.headRefName,
|
|
1050
|
+
updatedAt: mergeRequest.updatedAt,
|
|
1051
|
+
});
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
items.sort((left, right) => parseOptionalTime(right.updatedAt) - parseOptionalTime(left.updatedAt));
|
|
1055
|
+
return {
|
|
1056
|
+
items,
|
|
1057
|
+
featuresEnabled: true,
|
|
1058
|
+
authState: "authenticated",
|
|
1059
|
+
githubFeaturesEnabled: true,
|
|
1060
|
+
};
|
|
1061
|
+
},
|
|
1062
|
+
async enablePullRequestAutoMerge(input) {
|
|
1063
|
+
// GitLab's auto-merge is "merge when pipeline succeeds": passing
|
|
1064
|
+
// `--auto-merge` while a pipeline is running schedules the merge instead
|
|
1065
|
+
// of performing it immediately. The merge strategy mirrors mergePullRequest.
|
|
1066
|
+
assertGitLabAutoMergeEnableReady({ status: input.status });
|
|
1067
|
+
const args = ["mr", "merge", String(input.prNumber), "--auto-merge", "--yes"];
|
|
1068
|
+
if (input.mergeMethod === "squash") {
|
|
1069
|
+
args.push("--squash");
|
|
1070
|
+
}
|
|
1071
|
+
else if (input.mergeMethod === "rebase") {
|
|
1072
|
+
args.push("--rebase");
|
|
1073
|
+
}
|
|
1074
|
+
await run(args, { cwd: input.cwd });
|
|
1075
|
+
return { success: true };
|
|
1076
|
+
},
|
|
1077
|
+
async disablePullRequestAutoMerge(input) {
|
|
1078
|
+
// `glab mr merge --auto-merge=false` would merge immediately rather than
|
|
1079
|
+
// cancel a scheduled auto-merge, so cancel via the REST endpoint instead.
|
|
1080
|
+
// The `:fullpath` placeholder resolves the project from the cwd's remote.
|
|
1081
|
+
await run([
|
|
1082
|
+
"api",
|
|
1083
|
+
"--method",
|
|
1084
|
+
"POST",
|
|
1085
|
+
`projects/:fullpath/merge_requests/${input.prNumber}/cancel_merge_when_pipeline_succeeds`,
|
|
1086
|
+
], { cwd: input.cwd });
|
|
1087
|
+
return { success: true };
|
|
1088
|
+
},
|
|
1089
|
+
invalidate(_input) { },
|
|
1090
|
+
};
|
|
1091
|
+
}
|
|
1092
|
+
//# sourceMappingURL=gitlab-service.js.map
|