@getpaseo/server 0.1.62 → 0.1.65
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/README.md +4 -0
- package/dist/server/client/daemon-client-runtime-metrics.d.ts +6 -6
- package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -1
- package/dist/server/client/daemon-client-transport-types.d.ts +15 -13
- package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.d.ts +3 -2
- package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.js +9 -8
- package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +88 -56
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +264 -111
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/client/terminal-stream-router.d.ts +24 -0
- package/dist/server/client/terminal-stream-router.d.ts.map +1 -0
- package/dist/server/client/terminal-stream-router.js +100 -0
- package/dist/server/client/terminal-stream-router.js.map +1 -0
- package/dist/server/server/agent/activity-curator.d.ts +6 -3
- package/dist/server/server/agent/activity-curator.d.ts.map +1 -1
- package/dist/server/server/agent/activity-curator.js +45 -138
- package/dist/server/server/agent/activity-curator.js.map +1 -1
- package/dist/server/server/agent/agent-loading.d.ts.map +1 -1
- package/dist/server/server/agent/agent-loading.js +5 -3
- package/dist/server/server/agent/agent-loading.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +46 -31
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +457 -419
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts +6 -11
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +3 -85
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts +4 -6
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +59 -65
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-response-loop.d.ts +4 -4
- package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
- package/dist/server/server/agent/agent-response-loop.js +58 -45
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +58 -41
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +2 -2
- package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
- package/dist/server/server/agent/agent-storage.js +29 -36
- package/dist/server/server/agent/agent-storage.js.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +7 -7
- package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.js +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -1
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +10 -10
- package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.d.ts +2 -2
- package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.js +103 -85
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
- package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
- package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -0
- package/dist/server/server/agent/foreground-run-state.js +162 -0
- package/dist/server/server/agent/foreground-run-state.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts +5 -3
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +282 -234
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +9 -2
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-shared.js +9 -1
- package/dist/server/server/agent/mcp-shared.js.map +1 -1
- package/dist/server/server/agent/model-resolver.d.ts +2 -2
- package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
- package/dist/server/server/agent/model-resolver.js +9 -5
- package/dist/server/server/agent/model-resolver.js.map +1 -1
- package/dist/server/server/agent/prompt-attachments.d.ts +4 -3
- package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
- package/dist/server/server/agent/prompt-attachments.js +43 -4
- package/dist/server/server/agent/prompt-attachments.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.d.ts +28 -17
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +20 -9
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +7 -0
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts +4 -2
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +24 -21
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +6 -5
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +40 -31
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +49 -13
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +404 -261
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +2 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js +47 -45
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js.map +1 -1
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +10 -5
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +11 -2
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +2 -2
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +83 -206
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts +20 -8
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +654 -554
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +2 -2
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +2 -2
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +174 -185
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +62 -13
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +873 -646
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +2 -2
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.js +58 -47
- package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +2 -2
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +3 -3
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
- package/dist/server/server/agent/providers/diagnostic-utils.js +82 -9
- package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +2 -2
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +6 -2
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.js +294 -113
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +94 -2
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +2 -2
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +24 -115
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +104 -3
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +786 -503
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts +1 -0
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.js +109 -140
- package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
- package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -0
- package/dist/server/server/agent/providers/provider-runner.js +80 -0
- package/dist/server/server/agent/providers/provider-runner.js.map +1 -0
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +3 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +9 -6
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +102 -73
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +4 -2
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +31 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -1
- package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.js +63 -53
- package/dist/server/server/agent/stt-manager.js.map +1 -1
- package/dist/server/server/agent/timeline-projection.d.ts +27 -11
- package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
- package/dist/server/server/agent/timeline-projection.js +70 -15
- package/dist/server/server/agent/timeline-projection.js.map +1 -1
- package/dist/server/server/agent/tts-manager.d.ts.map +1 -1
- package/dist/server/server/agent/tts-manager.js +1 -0
- package/dist/server/server/agent/tts-manager.js.map +1 -1
- package/dist/server/server/agent-attention-policy.d.ts +2 -2
- package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
- package/dist/server/server/auth.d.ts +25 -0
- package/dist/server/server/auth.d.ts.map +1 -0
- package/dist/server/server/auth.js +93 -0
- package/dist/server/server/auth.js.map +1 -0
- package/dist/server/server/bootstrap.d.ts +7 -5
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +550 -485
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/chat/chat-service.d.ts +1 -1
- package/dist/server/server/chat/chat-service.d.ts.map +1 -1
- package/dist/server/server/chat/chat-service.js +3 -3
- package/dist/server/server/chat/chat-service.js.map +1 -1
- package/dist/server/server/checkout-diff-manager.d.ts +2 -2
- package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
- package/dist/server/server/checkout-git-utils.d.ts +5 -3
- package/dist/server/server/checkout-git-utils.d.ts.map +1 -1
- package/dist/server/server/checkout-git-utils.js +1 -2
- package/dist/server/server/checkout-git-utils.js.map +1 -1
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +79 -39
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/connection-offer.d.ts +2 -2
- package/dist/server/server/connection-offer.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.d.ts +5 -3
- package/dist/server/server/daemon-config-store.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.js +26 -0
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/daemon-keypair.d.ts +2 -2
- package/dist/server/server/daemon-keypair.d.ts.map +1 -1
- package/dist/server/server/editor-targets.d.ts +4 -4
- package/dist/server/server/editor-targets.d.ts.map +1 -1
- package/dist/server/server/editor-targets.js +11 -15
- package/dist/server/server/editor-targets.js.map +1 -1
- package/dist/server/server/exports.d.ts +10 -4
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +7 -4
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/file-download/token-store.d.ts +4 -4
- package/dist/server/server/file-download/token-store.d.ts.map +1 -1
- package/dist/server/server/file-explorer/service.d.ts +10 -0
- package/dist/server/server/file-explorer/service.d.ts.map +1 -1
- package/dist/server/server/file-explorer/service.js +38 -4
- package/dist/server/server/file-explorer/service.js.map +1 -1
- package/dist/server/server/index.js +25 -18
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/logger.d.ts +4 -4
- package/dist/server/server/logger.d.ts.map +1 -1
- package/dist/server/server/logger.js +41 -21
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +52 -52
- package/dist/server/server/loop-service.d.ts +13 -12
- package/dist/server/server/loop-service.d.ts.map +1 -1
- package/dist/server/server/loop-service.js +22 -18
- package/dist/server/server/loop-service.js.map +1 -1
- package/dist/server/server/package-version.d.ts +2 -2
- package/dist/server/server/package-version.d.ts.map +1 -1
- package/dist/server/server/package-version.js +19 -17
- package/dist/server/server/package-version.js.map +1 -1
- package/dist/server/server/pagination/cursor.d.ts +16 -0
- package/dist/server/server/pagination/cursor.d.ts.map +1 -0
- package/dist/server/server/pagination/cursor.js +62 -0
- package/dist/server/server/pagination/cursor.js.map +1 -0
- package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
- package/dist/server/server/pagination/sortable-pager.d.ts.map +1 -0
- package/dist/server/server/pagination/sortable-pager.js +68 -0
- package/dist/server/server/pagination/sortable-pager.js.map +1 -0
- package/dist/server/server/pairing-offer.d.ts +2 -2
- package/dist/server/server/pairing-offer.d.ts.map +1 -1
- package/dist/server/server/paseo-env.d.ts +9 -0
- package/dist/server/server/paseo-env.d.ts.map +1 -0
- package/dist/server/server/paseo-env.js +70 -0
- package/dist/server/server/paseo-env.js.map +1 -0
- package/dist/server/server/paseo-worktree-archive-service.d.ts +7 -5
- package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -1
- package/dist/server/server/paseo-worktree-archive-service.js +70 -62
- package/dist/server/server/paseo-worktree-archive-service.js.map +1 -1
- package/dist/server/server/paseo-worktree-service.d.ts +13 -0
- package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
- package/dist/server/server/paseo-worktree-service.js +72 -3
- package/dist/server/server/paseo-worktree-service.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +87 -62
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +13 -4
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/persistence-hooks.d.ts +8 -9
- package/dist/server/server/persistence-hooks.d.ts.map +1 -1
- package/dist/server/server/persistence-hooks.js +4 -12
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/push/push-service.d.ts.map +1 -1
- package/dist/server/server/push/push-service.js +1 -3
- package/dist/server/server/push/push-service.js.map +1 -1
- package/dist/server/server/relay-transport.d.ts +8 -8
- package/dist/server/server/relay-transport.d.ts.map +1 -1
- package/dist/server/server/relay-transport.js +43 -20
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +0 -10
- package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -1
- package/dist/server/server/resolve-worktree-creation-intent.js +1 -45
- package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/service.js +2 -2
- package/dist/server/server/schedule/service.js.map +1 -1
- package/dist/server/server/script-health-monitor.d.ts.map +1 -1
- package/dist/server/server/script-health-monitor.js +7 -6
- package/dist/server/server/script-health-monitor.js.map +1 -1
- package/dist/server/server/script-proxy.js +1 -1
- package/dist/server/server/script-proxy.js.map +1 -1
- package/dist/server/server/script-status-projection.d.ts +10 -5
- package/dist/server/server/script-status-projection.d.ts.map +1 -1
- package/dist/server/server/script-status-projection.js +66 -47
- package/dist/server/server/script-status-projection.js.map +1 -1
- package/dist/server/server/server-id.d.ts +4 -4
- package/dist/server/server/server-id.d.ts.map +1 -1
- package/dist/server/server/session.d.ts +64 -65
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +1356 -1734
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/audio.js +1 -1
- package/dist/server/server/speech/audio.js.map +1 -1
- package/dist/server/server/speech/providers/local/config.d.ts +6 -6
- package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/config.js +41 -16
- package/dist/server/server/speech/providers/local/config.js.map +1 -1
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +2 -2
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +42 -19
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
- package/dist/server/server/speech/providers/local/runtime.d.ts +4 -4
- package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/runtime.js +108 -77
- package/dist/server/server/speech/providers/local/runtime.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +2 -2
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +1 -4
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +2 -2
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +19 -19
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -7
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +23 -4
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +35 -28
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +5 -5
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +7 -7
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +5 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +3 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +2 -2
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +3 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +10 -4
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +2 -2
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +2 -2
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +4 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +2 -2
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +18 -11
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
- package/dist/server/server/speech/providers/openai/config.d.ts +2 -2
- package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/config.js +58 -31
- package/dist/server/server/speech/providers/openai/config.js.map +1 -1
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +2 -2
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -1
- package/dist/server/server/speech/providers/openai/runtime.d.ts +4 -4
- package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/runtime.js +37 -32
- package/dist/server/server/speech/providers/openai/runtime.js.map +1 -1
- package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/stt.js +4 -3
- package/dist/server/server/speech/providers/openai/stt.js.map +1 -1
- package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/tts.js +3 -2
- package/dist/server/server/speech/providers/openai/tts.js.map +1 -1
- package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
- package/dist/server/server/speech/speech-config-resolver.js +46 -17
- package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
- package/dist/server/server/speech/speech-provider.d.ts +2 -2
- package/dist/server/server/speech/speech-provider.d.ts.map +1 -1
- package/dist/server/server/speech/speech-runtime.d.ts +6 -6
- package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
- package/dist/server/server/speech/speech-runtime.js +17 -17
- package/dist/server/server/speech/speech-runtime.js.map +1 -1
- package/dist/server/server/speech/speech-types.d.ts +2 -2
- package/dist/server/server/speech/speech-types.d.ts.map +1 -1
- package/dist/server/server/speech/turn-detection-provider.d.ts +2 -2
- package/dist/server/server/speech/turn-detection-provider.d.ts.map +1 -1
- package/dist/server/server/utils/diff-highlighter.d.ts +0 -3
- package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -1
- package/dist/server/server/utils/diff-highlighter.js +67 -66
- package/dist/server/server/utils/diff-highlighter.js.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.js +1 -0
- package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
- package/dist/server/server/voice-types.d.ts +2 -2
- package/dist/server/server/voice-types.d.ts.map +1 -1
- package/dist/server/server/websocket-server.d.ts +34 -22
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +360 -205
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-directory.d.ts +69 -0
- package/dist/server/server/workspace-directory.d.ts.map +1 -0
- package/dist/server/server/workspace-directory.js +229 -0
- package/dist/server/server/workspace-directory.js.map +1 -0
- package/dist/server/server/workspace-git-metadata.d.ts +2 -2
- package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
- package/dist/server/server/workspace-git-metadata.js +2 -32
- package/dist/server/server/workspace-git-metadata.js.map +1 -1
- package/dist/server/server/workspace-git-service.d.ts +8 -4
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +163 -115
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.d.ts +5 -4
- package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.js +82 -82
- package/dist/server/server/workspace-reconciliation-service.js.map +1 -1
- package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-bootstrap.js +40 -33
- package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
- package/dist/server/server/workspace-registry-model.d.ts +19 -6
- package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-model.js +35 -21
- package/dist/server/server/workspace-registry-model.js.map +1 -1
- package/dist/server/server/workspace-registry.d.ts +2 -2
- package/dist/server/server/workspace-script-runtime-store.d.ts +2 -2
- package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -1
- package/dist/server/server/workspace-service-env.js +3 -3
- package/dist/server/server/workspace-service-env.js.map +1 -1
- package/dist/server/server/worktree-bootstrap.d.ts +4 -4
- package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
- package/dist/server/server/worktree-bootstrap.js +101 -69
- package/dist/server/server/worktree-bootstrap.js.map +1 -1
- package/dist/server/server/worktree-core.d.ts +2 -0
- package/dist/server/server/worktree-core.d.ts.map +1 -1
- package/dist/server/server/worktree-core.js.map +1 -1
- package/dist/server/server/worktree-errors.d.ts +1 -1
- package/dist/server/server/worktree-errors.d.ts.map +1 -1
- package/dist/server/server/worktree-errors.js +1 -4
- package/dist/server/server/worktree-errors.js.map +1 -1
- package/dist/server/server/worktree-session.d.ts +54 -27
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +95 -44
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts +1 -7
- package/dist/server/services/github-service.d.ts.map +1 -1
- package/dist/server/services/github-service.js +123 -143
- package/dist/server/services/github-service.js.map +1 -1
- package/dist/server/shared/agent-attention-notification.d.ts +9 -8
- package/dist/server/shared/agent-attention-notification.d.ts.map +1 -1
- package/dist/server/shared/agent-attention-notification.js +27 -17
- package/dist/server/shared/agent-attention-notification.js.map +1 -1
- package/dist/server/shared/binary-frames/file-transfer.d.ts +56 -0
- package/dist/server/shared/binary-frames/file-transfer.d.ts.map +1 -0
- package/dist/server/shared/binary-frames/file-transfer.js +108 -0
- package/dist/server/shared/binary-frames/file-transfer.js.map +1 -0
- package/dist/server/shared/binary-frames/index.d.ts +3 -0
- package/dist/server/shared/binary-frames/index.d.ts.map +1 -0
- package/dist/server/shared/binary-frames/index.js +3 -0
- package/dist/server/shared/binary-frames/index.js.map +1 -0
- package/dist/server/shared/{terminal-stream-protocol.d.ts → binary-frames/terminal.d.ts} +4 -4
- package/dist/server/shared/binary-frames/terminal.d.ts.map +1 -0
- package/dist/server/shared/{terminal-stream-protocol.js → binary-frames/terminal.js} +2 -2
- package/dist/server/shared/binary-frames/terminal.js.map +1 -0
- package/dist/server/shared/client-capabilities.d.ts +5 -0
- package/dist/server/shared/client-capabilities.d.ts.map +1 -0
- package/dist/server/shared/client-capabilities.js +4 -0
- package/dist/server/shared/client-capabilities.js.map +1 -0
- package/dist/server/shared/connection-offer.d.ts +8 -0
- package/dist/server/shared/connection-offer.d.ts.map +1 -1
- package/dist/server/shared/connection-offer.js +35 -0
- package/dist/server/shared/connection-offer.js.map +1 -1
- package/dist/server/shared/daemon-endpoints.d.ts +18 -3
- package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
- package/dist/server/shared/daemon-endpoints.js +82 -8
- package/dist/server/shared/daemon-endpoints.js.map +1 -1
- package/dist/server/shared/host-connection-schema.d.ts +23 -0
- package/dist/server/shared/host-connection-schema.d.ts.map +1 -0
- package/dist/server/shared/host-connection-schema.js +9 -0
- package/dist/server/shared/host-connection-schema.js.map +1 -0
- package/dist/server/shared/messages.d.ts +25073 -3453
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +152 -36
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/tool-call-display.d.ts +2 -2
- package/dist/server/shared/tool-call-display.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager-factory.d.ts +7 -0
- package/dist/server/terminal/terminal-manager-factory.d.ts.map +1 -0
- package/dist/server/terminal/terminal-manager-factory.js +13 -0
- package/dist/server/terminal/terminal-manager-factory.js.map +1 -0
- package/dist/server/terminal/terminal-manager.d.ts +7 -1
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +15 -4
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-output-coalescer.d.ts +6 -6
- package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -1
- package/dist/server/terminal/terminal-session-controller.d.ts +63 -0
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -0
- package/dist/server/terminal/terminal-session-controller.js +615 -0
- package/dist/server/terminal/terminal-session-controller.js.map +1 -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.d.ts.map +1 -0
- package/dist/server/terminal/terminal-worker-process.js +221 -0
- package/dist/server/terminal/terminal-worker-process.js.map +1 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts +113 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -0
- package/dist/server/terminal/terminal-worker-protocol.js +2 -0
- package/dist/server/terminal/terminal-worker-protocol.js.map +1 -0
- package/dist/server/terminal/terminal.d.ts +10 -2
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +79 -28
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.d.ts +19 -0
- package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -0
- package/dist/server/terminal/worker-terminal-manager.js +466 -0
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -0
- package/dist/server/utils/checkout-git.d.ts +13 -12
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +351 -281
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
- package/dist/server/utils/directory-suggestions.js +22 -34
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/server/utils/executable.d.ts +1 -14
- package/dist/server/utils/executable.d.ts.map +1 -1
- package/dist/server/utils/executable.js +13 -49
- package/dist/server/utils/executable.js.map +1 -1
- package/dist/server/utils/github-remote.d.ts +13 -0
- package/dist/server/utils/github-remote.d.ts.map +1 -0
- package/dist/server/utils/github-remote.js +128 -0
- package/dist/server/utils/github-remote.js.map +1 -0
- package/dist/server/utils/paseo-config-file.d.ts +30 -0
- package/dist/server/utils/paseo-config-file.d.ts.map +1 -0
- package/dist/server/utils/paseo-config-file.js +90 -0
- package/dist/server/utils/paseo-config-file.js.map +1 -0
- package/dist/server/utils/paseo-config-schema.d.ts +290 -0
- package/dist/server/utils/paseo-config-schema.d.ts.map +1 -0
- package/dist/server/utils/paseo-config-schema.js +60 -0
- package/dist/server/utils/paseo-config-schema.js.map +1 -0
- package/dist/server/utils/process-tree.d.ts +25 -0
- package/dist/server/utils/process-tree.d.ts.map +1 -0
- package/dist/server/utils/process-tree.js +96 -0
- package/dist/server/utils/process-tree.js.map +1 -0
- package/dist/server/utils/project-icon.d.ts.map +1 -1
- package/dist/server/utils/project-icon.js +84 -109
- package/dist/server/utils/project-icon.js.map +1 -1
- package/dist/server/utils/promise-timeout.d.ts +2 -2
- package/dist/server/utils/promise-timeout.d.ts.map +1 -1
- package/dist/server/utils/run-git-command.d.ts +3 -1
- package/dist/server/utils/run-git-command.d.ts.map +1 -1
- package/dist/server/utils/run-git-command.js +10 -1
- package/dist/server/utils/run-git-command.js.map +1 -1
- package/dist/server/utils/script-hostname.d.ts +2 -2
- package/dist/server/utils/script-hostname.d.ts.map +1 -1
- package/dist/server/utils/spawn.d.ts +10 -3
- package/dist/server/utils/spawn.d.ts.map +1 -1
- package/dist/server/utils/spawn.js +30 -5
- package/dist/server/utils/spawn.js.map +1 -1
- package/dist/server/utils/windows-command.d.ts +15 -0
- package/dist/server/utils/windows-command.d.ts.map +1 -0
- package/dist/server/utils/windows-command.js +41 -0
- package/dist/server/utils/windows-command.js.map +1 -0
- package/dist/server/utils/worktree-metadata.d.ts +44 -0
- package/dist/server/utils/worktree-metadata.d.ts.map +1 -1
- package/dist/server/utils/worktree-metadata.js +58 -0
- package/dist/server/utils/worktree-metadata.js.map +1 -1
- package/dist/server/utils/worktree.d.ts +23 -8
- package/dist/server/utils/worktree.d.ts.map +1 -1
- package/dist/server/utils/worktree.js +81 -63
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/src/server/pid-lock.js.map +1 -1
- package/package.json +17 -21
- package/dist/server/server/agent/llm-openai.d.ts +0 -7
- package/dist/server/server/agent/llm-openai.d.ts.map +0 -1
- package/dist/server/server/agent/llm-openai.js +0 -8
- package/dist/server/server/agent/llm-openai.js.map +0 -1
- package/dist/server/server/agent/orchestrator.d.ts +0 -12
- package/dist/server/server/agent/orchestrator.d.ts.map +0 -1
- package/dist/server/server/agent/orchestrator.js +0 -12
- package/dist/server/server/agent/orchestrator.js.map +0 -1
- package/dist/server/server/types.d.ts +0 -5
- package/dist/server/server/types.d.ts.map +0 -1
- package/dist/server/server/types.js +0 -3
- package/dist/server/server/types.js.map +0 -1
- package/dist/server/server/workspace-registry.test-helpers.d.ts +0 -37
- package/dist/server/server/workspace-registry.test-helpers.d.ts.map +0 -1
- package/dist/server/server/workspace-registry.test-helpers.js +0 -121
- package/dist/server/server/workspace-registry.test-helpers.js.map +0 -1
- package/dist/server/shared/terminal-stream-protocol.d.ts.map +0 -1
- package/dist/server/shared/terminal-stream-protocol.js.map +0 -1
|
@@ -8,9 +8,8 @@ import { GitHubAuthenticationError, GitHubCliMissingError, GitHubCommandError, c
|
|
|
8
8
|
import { parseGitRevParsePath, resolveGitRevParsePath } from "./git-rev-parse-path.js";
|
|
9
9
|
import { runGitCommand } from "./run-git-command.js";
|
|
10
10
|
import { isPaseoOwnedWorktreeCwd } from "./worktree.js";
|
|
11
|
-
import {
|
|
11
|
+
import { readPaseoWorktreeMetadata } from "./worktree-metadata.js";
|
|
12
12
|
const READ_ONLY_GIT_ENV = {
|
|
13
|
-
...process.env,
|
|
14
13
|
GIT_OPTIONAL_LOCKS: "0",
|
|
15
14
|
};
|
|
16
15
|
const DEFAULT_PULL_REQUEST_STATUS_CACHE_TTL_MS = 30000;
|
|
@@ -113,7 +112,7 @@ async function listGitRefs(cwd, refPrefix) {
|
|
|
113
112
|
"--sort=-committerdate",
|
|
114
113
|
"--format=%(refname)%09%(committerdate:unix)",
|
|
115
114
|
refPrefix,
|
|
116
|
-
], { cwd,
|
|
115
|
+
], { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
117
116
|
return stdout
|
|
118
117
|
.split("\n")
|
|
119
118
|
.map((line) => {
|
|
@@ -213,7 +212,7 @@ export async function resolveBranchCheckout(cwd, name) {
|
|
|
213
212
|
const localRef = `refs/heads/${normalized}`;
|
|
214
213
|
const localResult = await runGitCommand(["rev-parse", "--verify", "--quiet", localRef], {
|
|
215
214
|
cwd,
|
|
216
|
-
|
|
215
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
217
216
|
acceptExitCodes: [0, 1],
|
|
218
217
|
});
|
|
219
218
|
const hasLocal = localResult.exitCode === 0;
|
|
@@ -224,7 +223,7 @@ export async function resolveBranchCheckout(cwd, name) {
|
|
|
224
223
|
const remoteRefPath = `refs/remotes/${remoteRef}`;
|
|
225
224
|
const remoteResult = await runGitCommand(["rev-parse", "--verify", "--quiet", remoteRefPath], {
|
|
226
225
|
cwd,
|
|
227
|
-
|
|
226
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
228
227
|
acceptExitCodes: [0, 1],
|
|
229
228
|
});
|
|
230
229
|
const hasRemote = remoteResult.exitCode === 0;
|
|
@@ -259,7 +258,7 @@ async function listCheckoutFileChanges(cwd, refs, ignoreWhitespace = false) {
|
|
|
259
258
|
const { stdout: nameStatusOut } = await runGitCommand(buildGitDiffArgs({
|
|
260
259
|
ignoreWhitespace,
|
|
261
260
|
extra: ["--name-status", ...getCheckoutDiffRefArgs(refs)],
|
|
262
|
-
}), { cwd,
|
|
261
|
+
}), { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
263
262
|
for (const line of nameStatusOut
|
|
264
263
|
.split("\n")
|
|
265
264
|
.map((l) => l.trim())
|
|
@@ -297,7 +296,7 @@ async function listCheckoutFileChanges(cwd, refs, ignoreWhitespace = false) {
|
|
|
297
296
|
if (refs.includeUntracked) {
|
|
298
297
|
const { stdout: untrackedOut } = await runGitCommand(["ls-files", "--others", "--exclude-standard"], {
|
|
299
298
|
cwd,
|
|
300
|
-
|
|
299
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
301
300
|
});
|
|
302
301
|
for (const file of untrackedOut
|
|
303
302
|
.split("\n")
|
|
@@ -330,7 +329,7 @@ async function readGitFileContentAtRef(cwd, ref, path) {
|
|
|
330
329
|
try {
|
|
331
330
|
const { stdout } = await runGitCommand(["show", `${ref}:${path}`], {
|
|
332
331
|
cwd,
|
|
333
|
-
|
|
332
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
334
333
|
});
|
|
335
334
|
return stdout;
|
|
336
335
|
}
|
|
@@ -342,7 +341,7 @@ async function tryResolveMergeBase(cwd, baseRef) {
|
|
|
342
341
|
try {
|
|
343
342
|
const { stdout } = await runGitCommand(["merge-base", baseRef, "HEAD"], {
|
|
344
343
|
cwd,
|
|
345
|
-
|
|
344
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
346
345
|
});
|
|
347
346
|
const sha = stdout.trim();
|
|
348
347
|
return sha.length > 0 ? sha : null;
|
|
@@ -374,7 +373,7 @@ async function getTrackedNumstatByPath(cwd, refs, ignoreWhitespace = false) {
|
|
|
374
373
|
extra: ["--numstat", ...getCheckoutDiffRefArgs(refs)],
|
|
375
374
|
}), {
|
|
376
375
|
cwd,
|
|
377
|
-
|
|
376
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
378
377
|
maxOutputBytes: TRACKED_DIFF_NUMSTAT_MAX_BYTES,
|
|
379
378
|
acceptExitCodes: [0],
|
|
380
379
|
});
|
|
@@ -449,9 +448,9 @@ function isGitError(error) {
|
|
|
449
448
|
}
|
|
450
449
|
async function requireGitRepo(cwd) {
|
|
451
450
|
try {
|
|
452
|
-
await runGitCommand(["rev-parse", "--git-dir"], { cwd,
|
|
451
|
+
await runGitCommand(["rev-parse", "--git-dir"], { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
453
452
|
}
|
|
454
|
-
catch
|
|
453
|
+
catch {
|
|
455
454
|
throw new NotGitRepoError(cwd);
|
|
456
455
|
}
|
|
457
456
|
}
|
|
@@ -459,7 +458,7 @@ export async function getCurrentBranch(cwd) {
|
|
|
459
458
|
try {
|
|
460
459
|
const { stdout } = await runGitCommand(["rev-parse", "--abbrev-ref", "HEAD"], {
|
|
461
460
|
cwd,
|
|
462
|
-
|
|
461
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
463
462
|
});
|
|
464
463
|
const branch = stdout.trim();
|
|
465
464
|
if (branch === "HEAD") {
|
|
@@ -472,11 +471,12 @@ export async function getCurrentBranch(cwd) {
|
|
|
472
471
|
}
|
|
473
472
|
}
|
|
474
473
|
async function getRebaseHeadBranch(cwd) {
|
|
475
|
-
|
|
474
|
+
const paths = ["rebase-merge/head-name", "rebase-apply/head-name"];
|
|
475
|
+
const results = await Promise.all(paths.map(async (path) => {
|
|
476
476
|
try {
|
|
477
477
|
const { stdout } = await runGitCommand(["rev-parse", "--git-path", path], {
|
|
478
478
|
cwd,
|
|
479
|
-
|
|
479
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
480
480
|
});
|
|
481
481
|
const headName = (await readFile(resolve(cwd, stdout.trim()), "utf8")).trim();
|
|
482
482
|
if (headName.startsWith("refs/heads/")) {
|
|
@@ -485,16 +485,16 @@ async function getRebaseHeadBranch(cwd) {
|
|
|
485
485
|
return headName || null;
|
|
486
486
|
}
|
|
487
487
|
catch {
|
|
488
|
-
|
|
488
|
+
return null;
|
|
489
489
|
}
|
|
490
|
-
}
|
|
491
|
-
return null;
|
|
490
|
+
}));
|
|
491
|
+
return results.find((result) => result !== null) ?? null;
|
|
492
492
|
}
|
|
493
493
|
async function getWorktreeRoot(cwd) {
|
|
494
494
|
try {
|
|
495
495
|
const { stdout } = await runGitCommand(["rev-parse", "--show-toplevel"], {
|
|
496
496
|
cwd,
|
|
497
|
-
|
|
497
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
498
498
|
});
|
|
499
499
|
return parseGitRevParsePath(stdout);
|
|
500
500
|
}
|
|
@@ -505,7 +505,7 @@ async function getWorktreeRoot(cwd) {
|
|
|
505
505
|
export async function getMainRepoRoot(cwd) {
|
|
506
506
|
const { stdout: commonDirOut } = await runGitCommand(["rev-parse", "--git-common-dir"], {
|
|
507
507
|
cwd,
|
|
508
|
-
|
|
508
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
509
509
|
});
|
|
510
510
|
const commonDir = resolveGitRevParsePath(cwd, commonDirOut);
|
|
511
511
|
if (!commonDir) {
|
|
@@ -517,7 +517,7 @@ export async function getMainRepoRoot(cwd) {
|
|
|
517
517
|
}
|
|
518
518
|
const { stdout: worktreeOut } = await runGitCommand(["worktree", "list", "--porcelain"], {
|
|
519
519
|
cwd,
|
|
520
|
-
|
|
520
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
521
521
|
});
|
|
522
522
|
const worktrees = parseWorktreeList(worktreeOut);
|
|
523
523
|
const nonBareNonPaseo = worktrees.filter((wt) => !wt.isBare && !isPaseoWorktreePath(wt.path));
|
|
@@ -575,7 +575,7 @@ async function getWorktreePathForBranch(cwd, branchName) {
|
|
|
575
575
|
try {
|
|
576
576
|
const { stdout } = await runGitCommand(["worktree", "list", "--porcelain"], {
|
|
577
577
|
cwd,
|
|
578
|
-
|
|
578
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
579
579
|
});
|
|
580
580
|
const entries = parseWorktreeList(stdout);
|
|
581
581
|
const ref = branchName.startsWith("refs/heads/") ? branchName : `refs/heads/${branchName}`;
|
|
@@ -598,25 +598,45 @@ export async function renameCurrentBranch(cwd, newName) {
|
|
|
598
598
|
const currentBranch = await getCurrentBranch(cwd);
|
|
599
599
|
return { previousBranch, currentBranch };
|
|
600
600
|
}
|
|
601
|
-
async function
|
|
601
|
+
async function getPaseoWorktreeForCwd(cwd, context) {
|
|
602
602
|
// Fast-path reject: non-worktree paths do not need expensive ownership checks.
|
|
603
603
|
if (!/[\\/]worktrees[\\/]/.test(cwd)) {
|
|
604
|
-
return {
|
|
604
|
+
return { isPaseoOwnedWorktree: false };
|
|
605
605
|
}
|
|
606
606
|
const ownership = await isPaseoOwnedWorktreeCwd(cwd, { paseoHome: context?.paseoHome });
|
|
607
607
|
if (!ownership.allowed) {
|
|
608
|
-
return {
|
|
608
|
+
return { isPaseoOwnedWorktree: false };
|
|
609
609
|
}
|
|
610
|
-
const worktreeRoot = (await getWorktreeRoot(cwd)) ?? cwd;
|
|
611
610
|
return {
|
|
612
|
-
baseRef: requirePaseoWorktreeBaseRefName(worktreeRoot),
|
|
613
611
|
isPaseoOwnedWorktree: true,
|
|
612
|
+
worktreeRoot: (await getWorktreeRoot(cwd)) ?? cwd,
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
function readPaseoWorktreeBaseRef(worktreeRoot) {
|
|
616
|
+
return readPaseoWorktreeMetadata(worktreeRoot)?.baseRefName ?? null;
|
|
617
|
+
}
|
|
618
|
+
async function getStoredBaseRefForCwd(cwd, context) {
|
|
619
|
+
const paseoWorktree = await getPaseoWorktreeForCwd(cwd, context);
|
|
620
|
+
if (!paseoWorktree.isPaseoOwnedWorktree) {
|
|
621
|
+
return null;
|
|
622
|
+
}
|
|
623
|
+
return readPaseoWorktreeBaseRef(paseoWorktree.worktreeRoot);
|
|
624
|
+
}
|
|
625
|
+
async function getResolvedBaseRefForCwd(cwd, context) {
|
|
626
|
+
const { resolvedBaseRef } = await resolveBaseRefForCwd(cwd, context);
|
|
627
|
+
return resolvedBaseRef;
|
|
628
|
+
}
|
|
629
|
+
async function resolveBaseRefForCwd(cwd, context) {
|
|
630
|
+
const storedBaseRef = await getStoredBaseRefForCwd(cwd, context);
|
|
631
|
+
return {
|
|
632
|
+
storedBaseRef,
|
|
633
|
+
resolvedBaseRef: storedBaseRef ?? (await resolveBaseRef(cwd)),
|
|
614
634
|
};
|
|
615
635
|
}
|
|
616
636
|
async function isWorkingTreeDirty(cwd) {
|
|
617
637
|
const { stdout } = await runGitCommand(["status", "--porcelain"], {
|
|
618
638
|
cwd,
|
|
619
|
-
|
|
639
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
620
640
|
});
|
|
621
641
|
return stdout.trim().length > 0;
|
|
622
642
|
}
|
|
@@ -624,7 +644,7 @@ export async function getOriginRemoteUrl(cwd) {
|
|
|
624
644
|
try {
|
|
625
645
|
const { stdout } = await runGitCommand(["config", "--get", "remote.origin.url"], {
|
|
626
646
|
cwd,
|
|
627
|
-
|
|
647
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
628
648
|
});
|
|
629
649
|
const url = stdout.trim();
|
|
630
650
|
return url.length > 0 ? url : null;
|
|
@@ -641,7 +661,7 @@ async function getGitConfigValue(cwd, key) {
|
|
|
641
661
|
try {
|
|
642
662
|
const { stdout } = await runGitCommand(["config", "--get", key], {
|
|
643
663
|
cwd,
|
|
644
|
-
|
|
664
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
645
665
|
});
|
|
646
666
|
const value = stdout.trim();
|
|
647
667
|
return value.length > 0 ? value : null;
|
|
@@ -680,7 +700,7 @@ export async function resolveAbsoluteGitDir(cwd) {
|
|
|
680
700
|
try {
|
|
681
701
|
const { stdout } = await runGitCommand(["rev-parse", "--absolute-git-dir"], {
|
|
682
702
|
cwd,
|
|
683
|
-
|
|
703
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
684
704
|
});
|
|
685
705
|
const gitDir = stdout.trim();
|
|
686
706
|
return gitDir.length > 0 ? gitDir : null;
|
|
@@ -718,7 +738,7 @@ export async function resolveRepositoryDefaultBranch(repoRoot) {
|
|
|
718
738
|
try {
|
|
719
739
|
const { stdout } = await runGitCommand(["symbolic-ref", "--quiet", "refs/remotes/origin/HEAD"], {
|
|
720
740
|
cwd: repoRoot,
|
|
721
|
-
|
|
741
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
722
742
|
});
|
|
723
743
|
const ref = stdout.trim();
|
|
724
744
|
if (ref) {
|
|
@@ -731,7 +751,7 @@ export async function resolveRepositoryDefaultBranch(repoRoot) {
|
|
|
731
751
|
try {
|
|
732
752
|
await runGitCommand(["show-ref", "--verify", "--quiet", `refs/heads/${localName}`], {
|
|
733
753
|
cwd: repoRoot,
|
|
734
|
-
|
|
754
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
735
755
|
});
|
|
736
756
|
return localName;
|
|
737
757
|
}
|
|
@@ -745,16 +765,16 @@ export async function resolveRepositoryDefaultBranch(repoRoot) {
|
|
|
745
765
|
}
|
|
746
766
|
const { stdout } = await runGitCommand(["branch", "--format=%(refname:short)"], {
|
|
747
767
|
cwd: repoRoot,
|
|
748
|
-
|
|
768
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
749
769
|
});
|
|
750
|
-
const branches = stdout
|
|
770
|
+
const branches = new Set(stdout
|
|
751
771
|
.split("\n")
|
|
752
772
|
.map((line) => line.trim())
|
|
753
|
-
.filter((line) => line.length > 0);
|
|
754
|
-
if (branches.
|
|
773
|
+
.filter((line) => line.length > 0));
|
|
774
|
+
if (branches.has("main")) {
|
|
755
775
|
return "main";
|
|
756
776
|
}
|
|
757
|
-
if (branches.
|
|
777
|
+
if (branches.has("master")) {
|
|
758
778
|
return "master";
|
|
759
779
|
}
|
|
760
780
|
return null;
|
|
@@ -781,7 +801,7 @@ function normalizeComparisonBaseRefName(input) {
|
|
|
781
801
|
async function doesGitRefExist(cwd, fullRef) {
|
|
782
802
|
const result = await runGitCommand(["show-ref", "--verify", "--quiet", fullRef], {
|
|
783
803
|
cwd,
|
|
784
|
-
|
|
804
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
785
805
|
acceptExitCodes: [0, 1],
|
|
786
806
|
});
|
|
787
807
|
return result.exitCode === 0;
|
|
@@ -817,7 +837,7 @@ async function resolveMostAheadBaseRef(cwd, normalizedBaseRef) {
|
|
|
817
837
|
if (!hasLocal && !hasOrigin) {
|
|
818
838
|
throw new Error(`Base branch not found locally or on origin: ${normalizedBaseRef}`);
|
|
819
839
|
}
|
|
820
|
-
const { stdout } = await runGitCommand(["rev-list", "--left-right", "--count", `${normalizedBaseRef}...origin/${normalizedBaseRef}`], { cwd,
|
|
840
|
+
const { stdout } = await runGitCommand(["rev-list", "--left-right", "--count", `${normalizedBaseRef}...origin/${normalizedBaseRef}`], { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
821
841
|
const [localOnlyRaw, originOnlyRaw] = stdout.trim().split(/\s+/);
|
|
822
842
|
const localOnly = Number.parseInt(localOnlyRaw ?? "0", 10);
|
|
823
843
|
const originOnly = Number.parseInt(originOnlyRaw ?? "0", 10);
|
|
@@ -835,7 +855,7 @@ async function getAheadBehind(cwd, baseRef, currentBranch) {
|
|
|
835
855
|
return null;
|
|
836
856
|
}
|
|
837
857
|
const comparisonBaseRef = await resolveBestComparisonBaseRef(cwd, baseRef);
|
|
838
|
-
const { stdout } = await runGitCommand(["rev-list", "--left-right", "--count", `${comparisonBaseRef}...${currentBranch}`], { cwd,
|
|
858
|
+
const { stdout } = await runGitCommand(["rev-list", "--left-right", "--count", `${comparisonBaseRef}...${currentBranch}`], { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
839
859
|
const [behindRaw, aheadRaw] = stdout.trim().split(/\s+/);
|
|
840
860
|
const behind = Number.parseInt(behindRaw ?? "0", 10);
|
|
841
861
|
const ahead = Number.parseInt(aheadRaw ?? "0", 10);
|
|
@@ -849,7 +869,7 @@ async function getAheadOfOrigin(cwd, currentBranch) {
|
|
|
849
869
|
return null;
|
|
850
870
|
}
|
|
851
871
|
try {
|
|
852
|
-
const { stdout } = await runGitCommand(["rev-list", "--count", `origin/${currentBranch}..${currentBranch}`], { cwd,
|
|
872
|
+
const { stdout } = await runGitCommand(["rev-list", "--count", `origin/${currentBranch}..${currentBranch}`], { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
853
873
|
const count = Number.parseInt(stdout.trim(), 10);
|
|
854
874
|
return Number.isNaN(count) ? null : count;
|
|
855
875
|
}
|
|
@@ -857,7 +877,7 @@ async function getAheadOfOrigin(cwd, currentBranch) {
|
|
|
857
877
|
try {
|
|
858
878
|
const { stdout } = await runGitCommand(["rev-list", "--count", currentBranch], {
|
|
859
879
|
cwd,
|
|
860
|
-
|
|
880
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
861
881
|
});
|
|
862
882
|
const count = Number.parseInt(stdout.trim(), 10);
|
|
863
883
|
return Number.isNaN(count) ? null : count;
|
|
@@ -872,7 +892,7 @@ async function getBehindOfOrigin(cwd, currentBranch) {
|
|
|
872
892
|
return null;
|
|
873
893
|
}
|
|
874
894
|
try {
|
|
875
|
-
const { stdout } = await runGitCommand(["rev-list", "--count", `${currentBranch}..origin/${currentBranch}`], { cwd,
|
|
895
|
+
const { stdout } = await runGitCommand(["rev-list", "--count", `${currentBranch}..origin/${currentBranch}`], { cwd, envOverlay: READ_ONLY_GIT_ENV });
|
|
876
896
|
const count = Number.parseInt(stdout.trim(), 10);
|
|
877
897
|
return Number.isNaN(count) ? null : count;
|
|
878
898
|
}
|
|
@@ -886,16 +906,16 @@ async function inspectCheckoutContext(cwd, context) {
|
|
|
886
906
|
if (!root) {
|
|
887
907
|
return null;
|
|
888
908
|
}
|
|
889
|
-
const [currentBranch, remoteUrl,
|
|
909
|
+
const [currentBranch, remoteUrl, paseoWorktree] = await Promise.all([
|
|
890
910
|
getCurrentBranch(cwd),
|
|
891
911
|
getOriginRemoteUrl(cwd),
|
|
892
|
-
|
|
912
|
+
getPaseoWorktreeForCwd(cwd, context),
|
|
893
913
|
]);
|
|
894
914
|
return {
|
|
895
915
|
worktreeRoot: root,
|
|
896
916
|
currentBranch,
|
|
897
917
|
remoteUrl,
|
|
898
|
-
|
|
918
|
+
paseoWorktree,
|
|
899
919
|
};
|
|
900
920
|
}
|
|
901
921
|
catch (error) {
|
|
@@ -982,7 +1002,7 @@ async function getUntrackedDiffText(cwd, change, ignoreWhitespace = false) {
|
|
|
982
1002
|
extra: ["--no-index", "/dev/null", "--", change.path],
|
|
983
1003
|
}), {
|
|
984
1004
|
cwd,
|
|
985
|
-
|
|
1005
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
986
1006
|
maxOutputBytes: PER_FILE_DIFF_MAX_BYTES,
|
|
987
1007
|
acceptExitCodes: [0, 1],
|
|
988
1008
|
});
|
|
@@ -1000,24 +1020,24 @@ export async function getCheckoutStatus(cwd, context) {
|
|
|
1000
1020
|
const worktreeRoot = inspected.worktreeRoot;
|
|
1001
1021
|
const currentBranch = inspected.currentBranch;
|
|
1002
1022
|
const remoteUrl = inspected.remoteUrl;
|
|
1003
|
-
const
|
|
1023
|
+
const paseoWorktree = inspected.paseoWorktree;
|
|
1004
1024
|
const isDirty = await isWorkingTreeDirty(cwd);
|
|
1005
1025
|
const hasRemote = remoteUrl !== null;
|
|
1006
|
-
const
|
|
1026
|
+
const { resolvedBaseRef: baseRef } = await resolveBaseRefForCwd(cwd, context);
|
|
1027
|
+
const mainRepoRoot = await getMainRepoRoot(cwd).catch(() => null);
|
|
1007
1028
|
const [aheadBehind, aheadOfOrigin, behindOfOrigin] = await Promise.all([
|
|
1008
1029
|
baseRef && currentBranch ? getAheadBehind(cwd, baseRef, currentBranch) : Promise.resolve(null),
|
|
1009
1030
|
hasRemote && currentBranch ? getAheadOfOrigin(cwd, currentBranch) : Promise.resolve(null),
|
|
1010
1031
|
hasRemote && currentBranch ? getBehindOfOrigin(cwd, currentBranch) : Promise.resolve(null),
|
|
1011
1032
|
]);
|
|
1012
|
-
if (
|
|
1013
|
-
const mainRepoRoot = await getMainRepoRoot(cwd);
|
|
1033
|
+
if (paseoWorktree.isPaseoOwnedWorktree && baseRef) {
|
|
1014
1034
|
return {
|
|
1015
1035
|
isGit: true,
|
|
1016
1036
|
repoRoot: worktreeRoot,
|
|
1017
|
-
mainRepoRoot,
|
|
1037
|
+
mainRepoRoot: mainRepoRoot ?? worktreeRoot,
|
|
1018
1038
|
currentBranch,
|
|
1019
1039
|
isDirty,
|
|
1020
|
-
baseRef
|
|
1040
|
+
baseRef,
|
|
1021
1041
|
aheadBehind,
|
|
1022
1042
|
aheadOfOrigin,
|
|
1023
1043
|
behindOfOrigin,
|
|
@@ -1029,6 +1049,7 @@ export async function getCheckoutStatus(cwd, context) {
|
|
|
1029
1049
|
return {
|
|
1030
1050
|
isGit: true,
|
|
1031
1051
|
repoRoot: worktreeRoot,
|
|
1052
|
+
mainRepoRoot: mainRepoRoot && resolve(mainRepoRoot) !== resolve(worktreeRoot) ? mainRepoRoot : null,
|
|
1032
1053
|
currentBranch,
|
|
1033
1054
|
isDirty,
|
|
1034
1055
|
baseRef,
|
|
@@ -1067,8 +1088,7 @@ async function getCheckoutShortstatUncached(cwd, context) {
|
|
|
1067
1088
|
catch {
|
|
1068
1089
|
return null;
|
|
1069
1090
|
}
|
|
1070
|
-
const
|
|
1071
|
-
const localBaseRef = configured.baseRef ?? (await resolveBaseRef(cwd));
|
|
1091
|
+
const localBaseRef = await getResolvedBaseRefForCwd(cwd, context);
|
|
1072
1092
|
const currentBranch = await getCurrentBranch(cwd);
|
|
1073
1093
|
let comparisonRef;
|
|
1074
1094
|
if (currentBranch && localBaseRef && currentBranch !== localBaseRef) {
|
|
@@ -1092,7 +1112,7 @@ async function getCheckoutShortstatUncached(cwd, context) {
|
|
|
1092
1112
|
try {
|
|
1093
1113
|
const { stdout: mergeBaseOut } = await runGitCommand(["merge-base", "HEAD", comparisonRef], {
|
|
1094
1114
|
cwd,
|
|
1095
|
-
|
|
1115
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
1096
1116
|
});
|
|
1097
1117
|
const mergeBase = mergeBaseOut.trim();
|
|
1098
1118
|
if (!mergeBase) {
|
|
@@ -1100,7 +1120,7 @@ async function getCheckoutShortstatUncached(cwd, context) {
|
|
|
1100
1120
|
}
|
|
1101
1121
|
const { stdout } = await runGitCommand(["diff", "--shortstat", mergeBase], {
|
|
1102
1122
|
cwd,
|
|
1103
|
-
|
|
1123
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
1104
1124
|
});
|
|
1105
1125
|
return parseCheckoutShortstat(stdout);
|
|
1106
1126
|
}
|
|
@@ -1145,32 +1165,143 @@ export function warmCheckoutShortstatInBackground(cwd, context, onComplete) {
|
|
|
1145
1165
|
void getOrLoadCheckoutShortstat(cwd, context)
|
|
1146
1166
|
.then(() => {
|
|
1147
1167
|
onComplete?.();
|
|
1168
|
+
return;
|
|
1148
1169
|
})
|
|
1149
1170
|
.catch(() => {
|
|
1150
1171
|
// Non-critical: keep listing path resilient even if git commands fail.
|
|
1151
1172
|
});
|
|
1152
1173
|
}
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1174
|
+
async function appendStructuredTrackedDiffs(input) {
|
|
1175
|
+
const { cwd, trackedChanges, trackedChangeByPath, trackedNumstatByPath, trackedPlaceholderByPath, trackedDiffText, trackedDiffTruncated, refsForDiff, ignoreWhitespace, structured, appendTrackedPlaceholderComment, } = input;
|
|
1176
|
+
const parsedTrackedFiles = trackedDiffText.length > 0
|
|
1177
|
+
? await parseAndHighlightDiff(trackedDiffText, cwd, {
|
|
1178
|
+
getOldFileContent: async (file) => {
|
|
1179
|
+
const change = trackedChangeByPath.get(file.path);
|
|
1180
|
+
if (!change || change.isNew) {
|
|
1181
|
+
return null;
|
|
1182
|
+
}
|
|
1183
|
+
const refPath = change.oldPath ?? change.path;
|
|
1184
|
+
return readGitFileContentAtRef(cwd, refsForDiff.baseRef, refPath);
|
|
1185
|
+
},
|
|
1186
|
+
getNewFileContent: async (file) => {
|
|
1187
|
+
if (!refsForDiff.targetRef) {
|
|
1188
|
+
return null;
|
|
1189
|
+
}
|
|
1190
|
+
return readGitFileContentAtRef(cwd, refsForDiff.targetRef, file.path);
|
|
1191
|
+
},
|
|
1192
|
+
})
|
|
1193
|
+
: [];
|
|
1194
|
+
const parsedTrackedByPath = new Map(parsedTrackedFiles.map((file) => [file.path, file]));
|
|
1195
|
+
for (const change of trackedChanges) {
|
|
1196
|
+
const placeholder = trackedPlaceholderByPath.get(change.path);
|
|
1197
|
+
if (placeholder) {
|
|
1198
|
+
structured.push(buildPlaceholderParsedDiffFile(change, {
|
|
1199
|
+
status: placeholder.status,
|
|
1200
|
+
stat: placeholder.stat,
|
|
1201
|
+
}));
|
|
1202
|
+
appendTrackedPlaceholderComment(change, placeholder.status);
|
|
1203
|
+
continue;
|
|
1204
|
+
}
|
|
1205
|
+
const stat = trackedNumstatByPath.get(change.path) ?? null;
|
|
1206
|
+
const parsedFile = parsedTrackedByPath.get(change.path);
|
|
1207
|
+
if (parsedFile) {
|
|
1208
|
+
structured.push({
|
|
1209
|
+
...parsedFile,
|
|
1210
|
+
path: change.path,
|
|
1211
|
+
isNew: change.isNew,
|
|
1212
|
+
isDeleted: change.isDeleted,
|
|
1213
|
+
status: "ok",
|
|
1214
|
+
});
|
|
1215
|
+
continue;
|
|
1216
|
+
}
|
|
1217
|
+
// `git diff -w --name-status` can still report a modified path even when the
|
|
1218
|
+
// whitespace-filtered patch and numstat are both empty. Skip emitting a
|
|
1219
|
+
// structured placeholder in that case so whitespace-only edits truly disappear.
|
|
1220
|
+
if (ignoreWhitespace &&
|
|
1221
|
+
!trackedDiffTruncated &&
|
|
1222
|
+
change.status.startsWith("M") &&
|
|
1223
|
+
(!stat || (!stat.isBinary && stat.additions === 0 && stat.deletions === 0))) {
|
|
1224
|
+
continue;
|
|
1225
|
+
}
|
|
1226
|
+
structured.push({
|
|
1227
|
+
path: change.path,
|
|
1228
|
+
isNew: change.isNew,
|
|
1229
|
+
isDeleted: change.isDeleted,
|
|
1230
|
+
additions: stat?.additions ?? 0,
|
|
1231
|
+
deletions: stat?.deletions ?? 0,
|
|
1232
|
+
hunks: [],
|
|
1233
|
+
status: trackedDiffTruncated ? "too_large" : "ok",
|
|
1234
|
+
});
|
|
1158
1235
|
}
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1236
|
+
}
|
|
1237
|
+
async function processUntrackedChange(input) {
|
|
1238
|
+
const { cwd, change, ignoreWhitespace, includeStructured, structured, appendDiff } = input;
|
|
1239
|
+
const { text, truncated, stat } = await getUntrackedDiffText(cwd, change, ignoreWhitespace);
|
|
1240
|
+
if (!includeStructured) {
|
|
1241
|
+
if (stat?.isBinary) {
|
|
1242
|
+
appendDiff(`# ${change.path}: binary diff omitted\n`);
|
|
1243
|
+
}
|
|
1244
|
+
else if (truncated) {
|
|
1245
|
+
appendDiff(`# ${change.path}: diff too large omitted\n`);
|
|
1246
|
+
}
|
|
1247
|
+
else {
|
|
1248
|
+
appendDiff(text);
|
|
1249
|
+
}
|
|
1250
|
+
return;
|
|
1251
|
+
}
|
|
1252
|
+
if (stat?.isBinary) {
|
|
1253
|
+
structured.push(buildPlaceholderParsedDiffFile(change, { status: "binary", stat }));
|
|
1254
|
+
appendDiff(`# ${change.path}: binary diff omitted\n`);
|
|
1255
|
+
return;
|
|
1256
|
+
}
|
|
1257
|
+
if (truncated) {
|
|
1258
|
+
structured.push(buildPlaceholderParsedDiffFile(change, { status: "too_large", stat }));
|
|
1259
|
+
appendDiff(`# ${change.path}: diff too large omitted\n`);
|
|
1260
|
+
return;
|
|
1261
|
+
}
|
|
1262
|
+
appendDiff(text);
|
|
1263
|
+
const parsed = await parseAndHighlightDiff(text, cwd);
|
|
1264
|
+
const parsedFile = parsed[0] ??
|
|
1265
|
+
{
|
|
1266
|
+
path: change.path,
|
|
1267
|
+
isNew: change.isNew,
|
|
1268
|
+
isDeleted: change.isDeleted,
|
|
1269
|
+
additions: stat?.additions ?? 0,
|
|
1270
|
+
deletions: stat?.deletions ?? 0,
|
|
1271
|
+
hunks: [],
|
|
1173
1272
|
};
|
|
1273
|
+
structured.push({
|
|
1274
|
+
...parsedFile,
|
|
1275
|
+
path: change.path,
|
|
1276
|
+
isNew: change.isNew,
|
|
1277
|
+
isDeleted: change.isDeleted,
|
|
1278
|
+
status: "ok",
|
|
1279
|
+
});
|
|
1280
|
+
}
|
|
1281
|
+
async function resolveCheckoutDiffRefs(cwd, compare, context) {
|
|
1282
|
+
if (compare.mode === "uncommitted") {
|
|
1283
|
+
return { baseRef: "HEAD", includeUntracked: true };
|
|
1284
|
+
}
|
|
1285
|
+
const { storedBaseRef, resolvedBaseRef } = await resolveBaseRefForCwd(cwd, context);
|
|
1286
|
+
const baseRef = compare.baseRef ?? resolvedBaseRef;
|
|
1287
|
+
if (!baseRef) {
|
|
1288
|
+
return null;
|
|
1289
|
+
}
|
|
1290
|
+
if (storedBaseRef && compare.baseRef && compare.baseRef !== storedBaseRef) {
|
|
1291
|
+
throw new Error(`Base ref mismatch: expected ${baseRef}, got ${compare.baseRef}`);
|
|
1292
|
+
}
|
|
1293
|
+
const bestBaseRef = await resolveBestComparisonBaseRef(cwd, baseRef);
|
|
1294
|
+
return {
|
|
1295
|
+
baseRef: (await tryResolveMergeBase(cwd, bestBaseRef)) ?? bestBaseRef,
|
|
1296
|
+
targetRef: "HEAD",
|
|
1297
|
+
includeUntracked: false,
|
|
1298
|
+
};
|
|
1299
|
+
}
|
|
1300
|
+
export async function getCheckoutDiff(cwd, compare, context) {
|
|
1301
|
+
await requireGitRepo(cwd);
|
|
1302
|
+
const refsForDiff = await resolveCheckoutDiffRefs(cwd, compare, context);
|
|
1303
|
+
if (!refsForDiff) {
|
|
1304
|
+
return { diff: "" };
|
|
1174
1305
|
}
|
|
1175
1306
|
const ignoreWhitespace = compare.ignoreWhitespace === true;
|
|
1176
1307
|
const changes = await listCheckoutFileChanges(cwd, refsForDiff, ignoreWhitespace);
|
|
@@ -1227,7 +1358,7 @@ export async function getCheckoutDiff(cwd, compare, context) {
|
|
|
1227
1358
|
extra: [...getCheckoutDiffRefArgs(refsForDiff), "--", ...trackedDiffPaths],
|
|
1228
1359
|
}), {
|
|
1229
1360
|
cwd,
|
|
1230
|
-
|
|
1361
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
1231
1362
|
maxOutputBytes: TOTAL_DIFF_MAX_BYTES,
|
|
1232
1363
|
});
|
|
1233
1364
|
trackedDiffText = trackedDiffResult.stdout;
|
|
@@ -1245,66 +1376,20 @@ export async function getCheckoutDiff(cwd, compare, context) {
|
|
|
1245
1376
|
appendDiff(`# ${change.path}: diff too large omitted\n`);
|
|
1246
1377
|
};
|
|
1247
1378
|
if (compare.includeStructured) {
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
return readGitFileContentAtRef(cwd, refsForDiff.targetRef, file.path);
|
|
1263
|
-
},
|
|
1264
|
-
})
|
|
1265
|
-
: [];
|
|
1266
|
-
const parsedTrackedByPath = new Map(parsedTrackedFiles.map((file) => [file.path, file]));
|
|
1267
|
-
for (const change of trackedChanges) {
|
|
1268
|
-
const placeholder = trackedPlaceholderByPath.get(change.path);
|
|
1269
|
-
if (placeholder) {
|
|
1270
|
-
structured.push(buildPlaceholderParsedDiffFile(change, {
|
|
1271
|
-
status: placeholder.status,
|
|
1272
|
-
stat: placeholder.stat,
|
|
1273
|
-
}));
|
|
1274
|
-
appendTrackedPlaceholderComment(change, placeholder.status);
|
|
1275
|
-
continue;
|
|
1276
|
-
}
|
|
1277
|
-
const stat = trackedNumstatByPath.get(change.path) ?? null;
|
|
1278
|
-
const parsedFile = parsedTrackedByPath.get(change.path);
|
|
1279
|
-
if (parsedFile) {
|
|
1280
|
-
structured.push({
|
|
1281
|
-
...parsedFile,
|
|
1282
|
-
path: change.path,
|
|
1283
|
-
isNew: change.isNew,
|
|
1284
|
-
isDeleted: change.isDeleted,
|
|
1285
|
-
status: "ok",
|
|
1286
|
-
});
|
|
1287
|
-
continue;
|
|
1288
|
-
}
|
|
1289
|
-
// `git diff -w --name-status` can still report a modified path even when the
|
|
1290
|
-
// whitespace-filtered patch and numstat are both empty. Skip emitting a
|
|
1291
|
-
// structured placeholder in that case so whitespace-only edits truly disappear.
|
|
1292
|
-
if (ignoreWhitespace &&
|
|
1293
|
-
!trackedDiffTruncated &&
|
|
1294
|
-
change.status.startsWith("M") &&
|
|
1295
|
-
(!stat || (!stat.isBinary && stat.additions === 0 && stat.deletions === 0))) {
|
|
1296
|
-
continue;
|
|
1297
|
-
}
|
|
1298
|
-
structured.push({
|
|
1299
|
-
path: change.path,
|
|
1300
|
-
isNew: change.isNew,
|
|
1301
|
-
isDeleted: change.isDeleted,
|
|
1302
|
-
additions: stat?.additions ?? 0,
|
|
1303
|
-
deletions: stat?.deletions ?? 0,
|
|
1304
|
-
hunks: [],
|
|
1305
|
-
status: trackedDiffTruncated ? "too_large" : "ok",
|
|
1306
|
-
});
|
|
1307
|
-
}
|
|
1379
|
+
await appendStructuredTrackedDiffs({
|
|
1380
|
+
cwd,
|
|
1381
|
+
trackedChanges,
|
|
1382
|
+
trackedChangeByPath,
|
|
1383
|
+
trackedNumstatByPath,
|
|
1384
|
+
trackedPlaceholderByPath,
|
|
1385
|
+
trackedDiffText,
|
|
1386
|
+
trackedDiffTruncated,
|
|
1387
|
+
refsForDiff,
|
|
1388
|
+
ignoreWhitespace,
|
|
1389
|
+
structured,
|
|
1390
|
+
appendDiff,
|
|
1391
|
+
appendTrackedPlaceholderComment,
|
|
1392
|
+
});
|
|
1308
1393
|
}
|
|
1309
1394
|
else {
|
|
1310
1395
|
for (const change of trackedChanges) {
|
|
@@ -1318,46 +1403,13 @@ export async function getCheckoutDiff(cwd, compare, context) {
|
|
|
1318
1403
|
if (diffBytes >= TOTAL_DIFF_MAX_BYTES) {
|
|
1319
1404
|
break;
|
|
1320
1405
|
}
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
}
|
|
1329
|
-
else {
|
|
1330
|
-
appendDiff(text);
|
|
1331
|
-
}
|
|
1332
|
-
continue;
|
|
1333
|
-
}
|
|
1334
|
-
if (stat?.isBinary) {
|
|
1335
|
-
structured.push(buildPlaceholderParsedDiffFile(change, { status: "binary", stat }));
|
|
1336
|
-
appendDiff(`# ${change.path}: binary diff omitted\n`);
|
|
1337
|
-
continue;
|
|
1338
|
-
}
|
|
1339
|
-
if (truncated) {
|
|
1340
|
-
structured.push(buildPlaceholderParsedDiffFile(change, { status: "too_large", stat }));
|
|
1341
|
-
appendDiff(`# ${change.path}: diff too large omitted\n`);
|
|
1342
|
-
continue;
|
|
1343
|
-
}
|
|
1344
|
-
appendDiff(text);
|
|
1345
|
-
const parsed = await parseAndHighlightDiff(text, cwd);
|
|
1346
|
-
const parsedFile = parsed[0] ??
|
|
1347
|
-
{
|
|
1348
|
-
path: change.path,
|
|
1349
|
-
isNew: change.isNew,
|
|
1350
|
-
isDeleted: change.isDeleted,
|
|
1351
|
-
additions: stat?.additions ?? 0,
|
|
1352
|
-
deletions: stat?.deletions ?? 0,
|
|
1353
|
-
hunks: [],
|
|
1354
|
-
};
|
|
1355
|
-
structured.push({
|
|
1356
|
-
...parsedFile,
|
|
1357
|
-
path: change.path,
|
|
1358
|
-
isNew: change.isNew,
|
|
1359
|
-
isDeleted: change.isDeleted,
|
|
1360
|
-
status: "ok",
|
|
1406
|
+
await processUntrackedChange({
|
|
1407
|
+
cwd,
|
|
1408
|
+
change,
|
|
1409
|
+
ignoreWhitespace,
|
|
1410
|
+
includeStructured: compare.includeStructured === true,
|
|
1411
|
+
structured,
|
|
1412
|
+
appendDiff,
|
|
1361
1413
|
});
|
|
1362
1414
|
}
|
|
1363
1415
|
if (compare.includeStructured) {
|
|
@@ -1378,15 +1430,66 @@ export async function commitChanges(cwd, options) {
|
|
|
1378
1430
|
export async function commitAll(cwd, message) {
|
|
1379
1431
|
await commitChanges(cwd, { message, addAll: true });
|
|
1380
1432
|
}
|
|
1433
|
+
async function detectAndThrowMergeToBaseConflict(input) {
|
|
1434
|
+
const { operationCwd, error, baseRef, currentBranch } = input;
|
|
1435
|
+
const errorDetails = error instanceof Error
|
|
1436
|
+
? `${error.message}\n${error.stderr ?? ""}\n${error.stdout ?? ""}`
|
|
1437
|
+
: String(error);
|
|
1438
|
+
try {
|
|
1439
|
+
const [unmergedOutput, lsFilesOutput, statusOutput] = await Promise.all([
|
|
1440
|
+
runGitCommand(["diff", "--name-only", "--diff-filter=U"], { cwd: operationCwd }),
|
|
1441
|
+
runGitCommand(["ls-files", "-u"], { cwd: operationCwd }),
|
|
1442
|
+
runGitCommand(["status", "--porcelain"], { cwd: operationCwd }),
|
|
1443
|
+
]);
|
|
1444
|
+
const statusConflicts = statusOutput.stdout
|
|
1445
|
+
.split("\n")
|
|
1446
|
+
.map((line) => line.trim())
|
|
1447
|
+
.filter(Boolean)
|
|
1448
|
+
.filter((line) => /^(UU|AA|DD|AU|UA|UD|DU)\s/.test(line))
|
|
1449
|
+
.map((line) => line.slice(3).trim());
|
|
1450
|
+
const conflicts = [
|
|
1451
|
+
...unmergedOutput.stdout
|
|
1452
|
+
.split("\n")
|
|
1453
|
+
.map((line) => line.trim())
|
|
1454
|
+
.filter(Boolean),
|
|
1455
|
+
...lsFilesOutput.stdout
|
|
1456
|
+
.split("\n")
|
|
1457
|
+
.map((line) => line.trim())
|
|
1458
|
+
.filter(Boolean)
|
|
1459
|
+
.map((line) => line.split("\t").pop()),
|
|
1460
|
+
...statusConflicts,
|
|
1461
|
+
].filter(Boolean);
|
|
1462
|
+
const conflictDetected = conflicts.length > 0 || /CONFLICT|Automatic merge failed/i.test(errorDetails);
|
|
1463
|
+
if (conflictDetected) {
|
|
1464
|
+
try {
|
|
1465
|
+
await runGitCommand(["merge", "--abort"], { cwd: operationCwd, timeout: 120000 });
|
|
1466
|
+
}
|
|
1467
|
+
catch {
|
|
1468
|
+
// ignore
|
|
1469
|
+
}
|
|
1470
|
+
throw new MergeConflictError({
|
|
1471
|
+
baseRef,
|
|
1472
|
+
currentBranch,
|
|
1473
|
+
conflictFiles: conflicts.length > 0 ? conflicts : [],
|
|
1474
|
+
});
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
catch (innerError) {
|
|
1478
|
+
if (innerError instanceof MergeConflictError) {
|
|
1479
|
+
throw innerError;
|
|
1480
|
+
}
|
|
1481
|
+
// ignore detection failures
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1381
1484
|
export async function mergeToBase(cwd, options = {}, context) {
|
|
1382
1485
|
await requireGitRepo(cwd);
|
|
1383
1486
|
const currentBranch = await getCurrentBranch(cwd);
|
|
1384
|
-
const
|
|
1385
|
-
const baseRef =
|
|
1487
|
+
const { storedBaseRef, resolvedBaseRef } = await resolveBaseRefForCwd(cwd, context);
|
|
1488
|
+
const baseRef = options.baseRef ?? resolvedBaseRef;
|
|
1386
1489
|
if (!baseRef) {
|
|
1387
1490
|
throw new Error("Unable to determine base branch for merge");
|
|
1388
1491
|
}
|
|
1389
|
-
if (
|
|
1492
|
+
if (storedBaseRef && options.baseRef && options.baseRef !== storedBaseRef) {
|
|
1390
1493
|
throw new Error(`Base ref mismatch: expected ${baseRef}, got ${options.baseRef}`);
|
|
1391
1494
|
}
|
|
1392
1495
|
if (!currentBranch) {
|
|
@@ -1424,54 +1527,12 @@ export async function mergeToBase(cwd, options = {}, context) {
|
|
|
1424
1527
|
}
|
|
1425
1528
|
}
|
|
1426
1529
|
catch (error) {
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
runGitCommand(["ls-files", "-u"], { cwd: operationCwd }),
|
|
1434
|
-
runGitCommand(["status", "--porcelain"], { cwd: operationCwd }),
|
|
1435
|
-
]);
|
|
1436
|
-
const statusConflicts = statusOutput.stdout
|
|
1437
|
-
.split("\n")
|
|
1438
|
-
.map((line) => line.trim())
|
|
1439
|
-
.filter(Boolean)
|
|
1440
|
-
.filter((line) => /^(UU|AA|DD|AU|UA|UD|DU)\s/.test(line))
|
|
1441
|
-
.map((line) => line.slice(3).trim());
|
|
1442
|
-
const conflicts = [
|
|
1443
|
-
...unmergedOutput.stdout
|
|
1444
|
-
.split("\n")
|
|
1445
|
-
.map((line) => line.trim())
|
|
1446
|
-
.filter(Boolean),
|
|
1447
|
-
...lsFilesOutput.stdout
|
|
1448
|
-
.split("\n")
|
|
1449
|
-
.map((line) => line.trim())
|
|
1450
|
-
.filter(Boolean)
|
|
1451
|
-
.map((line) => line.split("\t").pop()),
|
|
1452
|
-
...statusConflicts,
|
|
1453
|
-
].filter(Boolean);
|
|
1454
|
-
const conflictDetected = conflicts.length > 0 || /CONFLICT|Automatic merge failed/i.test(errorDetails);
|
|
1455
|
-
if (conflictDetected) {
|
|
1456
|
-
try {
|
|
1457
|
-
await runGitCommand(["merge", "--abort"], { cwd: operationCwd, timeout: 120000 });
|
|
1458
|
-
}
|
|
1459
|
-
catch {
|
|
1460
|
-
// ignore
|
|
1461
|
-
}
|
|
1462
|
-
throw new MergeConflictError({
|
|
1463
|
-
baseRef: normalizedBaseRef,
|
|
1464
|
-
currentBranch,
|
|
1465
|
-
conflictFiles: conflicts.length > 0 ? conflicts : [],
|
|
1466
|
-
});
|
|
1467
|
-
}
|
|
1468
|
-
}
|
|
1469
|
-
catch (innerError) {
|
|
1470
|
-
if (innerError instanceof MergeConflictError) {
|
|
1471
|
-
throw innerError;
|
|
1472
|
-
}
|
|
1473
|
-
// ignore detection failures
|
|
1474
|
-
}
|
|
1530
|
+
await detectAndThrowMergeToBaseConflict({
|
|
1531
|
+
operationCwd,
|
|
1532
|
+
error,
|
|
1533
|
+
baseRef: normalizedBaseRef,
|
|
1534
|
+
currentBranch,
|
|
1535
|
+
});
|
|
1475
1536
|
throw error;
|
|
1476
1537
|
}
|
|
1477
1538
|
finally {
|
|
@@ -1495,19 +1556,19 @@ export async function mergeFromBase(cwd, options = {}, context) {
|
|
|
1495
1556
|
if (!currentBranch || currentBranch === "HEAD") {
|
|
1496
1557
|
throw new Error("Unable to determine current branch for merge");
|
|
1497
1558
|
}
|
|
1498
|
-
const
|
|
1499
|
-
const baseRef =
|
|
1559
|
+
const { storedBaseRef, resolvedBaseRef } = await resolveBaseRefForCwd(cwd, context);
|
|
1560
|
+
const baseRef = options.baseRef ?? resolvedBaseRef;
|
|
1500
1561
|
if (!baseRef) {
|
|
1501
1562
|
throw new Error("Unable to determine base branch for merge");
|
|
1502
1563
|
}
|
|
1503
|
-
if (
|
|
1564
|
+
if (storedBaseRef && options.baseRef && options.baseRef !== storedBaseRef) {
|
|
1504
1565
|
throw new Error(`Base ref mismatch: expected ${baseRef}, got ${options.baseRef}`);
|
|
1505
1566
|
}
|
|
1506
1567
|
const requireCleanTarget = options.requireCleanTarget ?? true;
|
|
1507
1568
|
if (requireCleanTarget) {
|
|
1508
1569
|
const { stdout } = await runGitCommand(["status", "--porcelain"], {
|
|
1509
1570
|
cwd,
|
|
1510
|
-
|
|
1571
|
+
envOverlay: READ_ONLY_GIT_ENV,
|
|
1511
1572
|
});
|
|
1512
1573
|
if (stdout.trim().length > 0) {
|
|
1513
1574
|
throw new Error("Working directory has uncommitted changes.");
|
|
@@ -1522,55 +1583,64 @@ export async function mergeFromBase(cwd, options = {}, context) {
|
|
|
1522
1583
|
await runGitCommand(["merge", bestBaseRef], { cwd, timeout: 120000 });
|
|
1523
1584
|
}
|
|
1524
1585
|
catch (error) {
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1586
|
+
await detectAndThrowMergeFromBaseConflict({
|
|
1587
|
+
cwd,
|
|
1588
|
+
error,
|
|
1589
|
+
baseRef: bestBaseRef,
|
|
1590
|
+
currentBranch,
|
|
1591
|
+
});
|
|
1592
|
+
throw error;
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
async function detectAndThrowMergeFromBaseConflict(input) {
|
|
1596
|
+
const { cwd, error, baseRef, currentBranch } = input;
|
|
1597
|
+
const errorDetails = error instanceof Error
|
|
1598
|
+
? `${error.message}\n${error.stderr ?? ""}\n${error.stdout ?? ""}`
|
|
1599
|
+
: String(error);
|
|
1600
|
+
try {
|
|
1601
|
+
const [unmergedOutput, lsFilesOutput, statusOutput] = await Promise.all([
|
|
1602
|
+
runGitCommand(["diff", "--name-only", "--diff-filter=U"], { cwd }),
|
|
1603
|
+
runGitCommand(["ls-files", "-u"], { cwd }),
|
|
1604
|
+
runGitCommand(["status", "--porcelain"], { cwd }),
|
|
1605
|
+
]);
|
|
1606
|
+
const statusConflicts = statusOutput.stdout
|
|
1607
|
+
.split("\n")
|
|
1608
|
+
.map((line) => line.trim())
|
|
1609
|
+
.filter(Boolean)
|
|
1610
|
+
.filter((line) => /^(UU|AA|DD|AU|UA|UD|DU)\s/.test(line))
|
|
1611
|
+
.map((line) => line.slice(3).trim());
|
|
1612
|
+
const conflicts = [
|
|
1613
|
+
...unmergedOutput.stdout
|
|
1614
|
+
.split("\n")
|
|
1615
|
+
.map((line) => line.trim())
|
|
1616
|
+
.filter(Boolean),
|
|
1617
|
+
...lsFilesOutput.stdout
|
|
1535
1618
|
.split("\n")
|
|
1536
1619
|
.map((line) => line.trim())
|
|
1537
1620
|
.filter(Boolean)
|
|
1538
|
-
.
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
...lsFilesOutput.stdout
|
|
1546
|
-
.split("\n")
|
|
1547
|
-
.map((line) => line.trim())
|
|
1548
|
-
.filter(Boolean)
|
|
1549
|
-
.map((line) => line.split("\t").pop()),
|
|
1550
|
-
...statusConflicts,
|
|
1551
|
-
].filter(Boolean);
|
|
1552
|
-
const conflictDetected = conflicts.length > 0 || /CONFLICT|Automatic merge failed/i.test(errorDetails);
|
|
1553
|
-
if (conflictDetected) {
|
|
1554
|
-
try {
|
|
1555
|
-
await runGitCommand(["merge", "--abort"], { cwd, timeout: 120000 });
|
|
1556
|
-
}
|
|
1557
|
-
catch {
|
|
1558
|
-
// ignore
|
|
1559
|
-
}
|
|
1560
|
-
throw new MergeFromBaseConflictError({
|
|
1561
|
-
baseRef: bestBaseRef,
|
|
1562
|
-
currentBranch,
|
|
1563
|
-
conflictFiles: conflicts.length > 0 ? conflicts : [],
|
|
1564
|
-
});
|
|
1621
|
+
.map((line) => line.split("\t").pop()),
|
|
1622
|
+
...statusConflicts,
|
|
1623
|
+
].filter(Boolean);
|
|
1624
|
+
const conflictDetected = conflicts.length > 0 || /CONFLICT|Automatic merge failed/i.test(errorDetails);
|
|
1625
|
+
if (conflictDetected) {
|
|
1626
|
+
try {
|
|
1627
|
+
await runGitCommand(["merge", "--abort"], { cwd, timeout: 120000 });
|
|
1565
1628
|
}
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
if (innerError instanceof MergeFromBaseConflictError) {
|
|
1569
|
-
throw innerError;
|
|
1629
|
+
catch {
|
|
1630
|
+
// ignore
|
|
1570
1631
|
}
|
|
1571
|
-
|
|
1632
|
+
throw new MergeFromBaseConflictError({
|
|
1633
|
+
baseRef,
|
|
1634
|
+
currentBranch,
|
|
1635
|
+
conflictFiles: conflicts.length > 0 ? conflicts : [],
|
|
1636
|
+
});
|
|
1572
1637
|
}
|
|
1573
|
-
|
|
1638
|
+
}
|
|
1639
|
+
catch (innerError) {
|
|
1640
|
+
if (innerError instanceof MergeFromBaseConflictError) {
|
|
1641
|
+
throw innerError;
|
|
1642
|
+
}
|
|
1643
|
+
// ignore detection failures
|
|
1574
1644
|
}
|
|
1575
1645
|
}
|
|
1576
1646
|
export async function pullCurrentBranch(cwd, github) {
|
|
@@ -1605,15 +1675,15 @@ export async function pushCurrentBranch(cwd, github) {
|
|
|
1605
1675
|
await runGitCommand(["push", "-u", "origin", currentBranch], { cwd, timeout: 120000 });
|
|
1606
1676
|
github?.invalidate({ cwd });
|
|
1607
1677
|
}
|
|
1608
|
-
export async function createPullRequest(cwd, options, github = createGitHubService(),
|
|
1678
|
+
export async function createPullRequest(cwd, options, github = createGitHubService(), context) {
|
|
1609
1679
|
await requireGitRepo(cwd);
|
|
1610
|
-
const repo = await resolveGitHubRepo(cwd
|
|
1680
|
+
const repo = await resolveGitHubRepo(cwd);
|
|
1611
1681
|
if (!repo) {
|
|
1612
1682
|
throw new Error("Unable to determine GitHub repo from git remote");
|
|
1613
1683
|
}
|
|
1614
1684
|
const head = options.head ?? (await getCurrentBranch(cwd));
|
|
1615
|
-
const
|
|
1616
|
-
const base =
|
|
1685
|
+
const { storedBaseRef, resolvedBaseRef } = await resolveBaseRefForCwd(cwd, context);
|
|
1686
|
+
const base = options.base ?? resolvedBaseRef;
|
|
1617
1687
|
if (!head) {
|
|
1618
1688
|
throw new Error("Unable to determine head branch for PR");
|
|
1619
1689
|
}
|
|
@@ -1621,7 +1691,7 @@ export async function createPullRequest(cwd, options, github = createGitHubServi
|
|
|
1621
1691
|
throw new Error("Unable to determine base branch for PR");
|
|
1622
1692
|
}
|
|
1623
1693
|
const normalizedBase = normalizeLocalBranchRefName(base);
|
|
1624
|
-
if (
|
|
1694
|
+
if (storedBaseRef && options.base && options.base !== storedBaseRef) {
|
|
1625
1695
|
throw new Error(`Base ref mismatch: expected ${base}, got ${options.base}`);
|
|
1626
1696
|
}
|
|
1627
1697
|
await runGitCommand(["push", "-u", "origin", head], { cwd, timeout: 120000 });
|