@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.
Files changed (590) hide show
  1. package/README.md +4 -0
  2. package/dist/server/client/daemon-client-runtime-metrics.d.ts +6 -6
  3. package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -1
  4. package/dist/server/client/daemon-client-transport-types.d.ts +15 -13
  5. package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -1
  6. package/dist/server/client/daemon-client-websocket-transport.d.ts +3 -2
  7. package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -1
  8. package/dist/server/client/daemon-client-websocket-transport.js +9 -8
  9. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
  10. package/dist/server/client/daemon-client.d.ts +88 -56
  11. package/dist/server/client/daemon-client.d.ts.map +1 -1
  12. package/dist/server/client/daemon-client.js +264 -111
  13. package/dist/server/client/daemon-client.js.map +1 -1
  14. package/dist/server/client/terminal-stream-router.d.ts +24 -0
  15. package/dist/server/client/terminal-stream-router.d.ts.map +1 -0
  16. package/dist/server/client/terminal-stream-router.js +100 -0
  17. package/dist/server/client/terminal-stream-router.js.map +1 -0
  18. package/dist/server/server/agent/activity-curator.d.ts +6 -3
  19. package/dist/server/server/agent/activity-curator.d.ts.map +1 -1
  20. package/dist/server/server/agent/activity-curator.js +45 -138
  21. package/dist/server/server/agent/activity-curator.js.map +1 -1
  22. package/dist/server/server/agent/agent-loading.d.ts.map +1 -1
  23. package/dist/server/server/agent/agent-loading.js +5 -3
  24. package/dist/server/server/agent/agent-loading.js.map +1 -1
  25. package/dist/server/server/agent/agent-manager.d.ts +46 -31
  26. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  27. package/dist/server/server/agent/agent-manager.js +457 -419
  28. package/dist/server/server/agent/agent-manager.js.map +1 -1
  29. package/dist/server/server/agent/agent-metadata-generator.d.ts +6 -11
  30. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  31. package/dist/server/server/agent/agent-metadata-generator.js +3 -85
  32. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  33. package/dist/server/server/agent/agent-projections.d.ts +4 -6
  34. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  35. package/dist/server/server/agent/agent-projections.js +59 -65
  36. package/dist/server/server/agent/agent-projections.js.map +1 -1
  37. package/dist/server/server/agent/agent-response-loop.d.ts +4 -4
  38. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  39. package/dist/server/server/agent/agent-response-loop.js +58 -45
  40. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  41. package/dist/server/server/agent/agent-sdk-types.d.ts +58 -41
  42. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  43. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  44. package/dist/server/server/agent/agent-storage.d.ts +2 -2
  45. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  46. package/dist/server/server/agent/agent-storage.js +29 -36
  47. package/dist/server/server/agent/agent-storage.js.map +1 -1
  48. package/dist/server/server/agent/agent-stream-coalescer.d.ts +7 -7
  49. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
  50. package/dist/server/server/agent/agent-stream-coalescer.js +1 -1
  51. package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -1
  52. package/dist/server/server/agent/agent-timeline-store-types.d.ts +10 -10
  53. package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -1
  54. package/dist/server/server/agent/agent-timeline-store.d.ts +2 -2
  55. package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
  56. package/dist/server/server/agent/agent-timeline-store.js +103 -85
  57. package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
  58. package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
  59. package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -0
  60. package/dist/server/server/agent/foreground-run-state.js +162 -0
  61. package/dist/server/server/agent/foreground-run-state.js.map +1 -0
  62. package/dist/server/server/agent/mcp-server.d.ts +5 -3
  63. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  64. package/dist/server/server/agent/mcp-server.js +282 -234
  65. package/dist/server/server/agent/mcp-server.js.map +1 -1
  66. package/dist/server/server/agent/mcp-shared.d.ts +9 -2
  67. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  68. package/dist/server/server/agent/mcp-shared.js +9 -1
  69. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  70. package/dist/server/server/agent/model-resolver.d.ts +2 -2
  71. package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
  72. package/dist/server/server/agent/model-resolver.js +9 -5
  73. package/dist/server/server/agent/model-resolver.js.map +1 -1
  74. package/dist/server/server/agent/prompt-attachments.d.ts +4 -3
  75. package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
  76. package/dist/server/server/agent/prompt-attachments.js +43 -4
  77. package/dist/server/server/agent/prompt-attachments.js.map +1 -1
  78. package/dist/server/server/agent/provider-launch-config.d.ts +28 -17
  79. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  80. package/dist/server/server/agent/provider-launch-config.js +20 -9
  81. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  82. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  83. package/dist/server/server/agent/provider-manifest.js +7 -0
  84. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  85. package/dist/server/server/agent/provider-registry.d.ts +4 -2
  86. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  87. package/dist/server/server/agent/provider-registry.js +24 -21
  88. package/dist/server/server/agent/provider-registry.js.map +1 -1
  89. package/dist/server/server/agent/provider-snapshot-manager.d.ts +6 -5
  90. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
  91. package/dist/server/server/agent/provider-snapshot-manager.js +40 -31
  92. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  93. package/dist/server/server/agent/providers/acp-agent.d.ts +49 -13
  94. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  95. package/dist/server/server/agent/providers/acp-agent.js +404 -261
  96. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  97. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +2 -0
  98. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts.map +1 -1
  99. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +47 -45
  100. package/dist/server/server/agent/providers/claude/sidechain-tracker.js.map +1 -1
  101. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  102. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts.map +1 -1
  103. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +10 -5
  104. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js.map +1 -1
  105. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -1
  106. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +11 -2
  107. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
  108. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +2 -2
  109. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
  110. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +83 -206
  111. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
  112. package/dist/server/server/agent/providers/claude-agent.d.ts +20 -8
  113. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  114. package/dist/server/server/agent/providers/claude-agent.js +654 -554
  115. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  116. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +2 -2
  117. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -1
  118. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +2 -2
  119. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
  120. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +174 -185
  121. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
  122. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +62 -13
  123. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  124. package/dist/server/server/agent/providers/codex-app-server-agent.js +873 -646
  125. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  126. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +2 -2
  127. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
  128. package/dist/server/server/agent/providers/codex-rollout-timeline.js +58 -47
  129. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
  130. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +2 -2
  131. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  132. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +3 -3
  133. package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
  134. package/dist/server/server/agent/providers/diagnostic-utils.js +82 -9
  135. package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
  136. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +2 -2
  137. package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
  138. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +6 -2
  139. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
  140. package/dist/server/server/agent/providers/mock-load-test-agent.js +294 -113
  141. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
  142. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +1 -1
  143. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -1
  144. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +94 -2
  145. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -1
  146. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +2 -2
  147. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -1
  148. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +24 -115
  149. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -1
  150. package/dist/server/server/agent/providers/opencode-agent.d.ts +104 -3
  151. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  152. package/dist/server/server/agent/providers/opencode-agent.js +786 -503
  153. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  154. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +1 -0
  155. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
  156. package/dist/server/server/agent/providers/pi-direct-agent.js +109 -140
  157. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
  158. package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
  159. package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -0
  160. package/dist/server/server/agent/providers/provider-runner.js +80 -0
  161. package/dist/server/server/agent/providers/provider-runner.js.map +1 -0
  162. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
  163. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +3 -1
  164. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
  165. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +9 -6
  166. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  167. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +102 -73
  168. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
  169. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +4 -2
  170. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -1
  171. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +31 -0
  172. package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -1
  173. package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
  174. package/dist/server/server/agent/stt-manager.js +63 -53
  175. package/dist/server/server/agent/stt-manager.js.map +1 -1
  176. package/dist/server/server/agent/timeline-projection.d.ts +27 -11
  177. package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
  178. package/dist/server/server/agent/timeline-projection.js +70 -15
  179. package/dist/server/server/agent/timeline-projection.js.map +1 -1
  180. package/dist/server/server/agent/tts-manager.d.ts.map +1 -1
  181. package/dist/server/server/agent/tts-manager.js +1 -0
  182. package/dist/server/server/agent/tts-manager.js.map +1 -1
  183. package/dist/server/server/agent-attention-policy.d.ts +2 -2
  184. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  185. package/dist/server/server/auth.d.ts +25 -0
  186. package/dist/server/server/auth.d.ts.map +1 -0
  187. package/dist/server/server/auth.js +93 -0
  188. package/dist/server/server/auth.js.map +1 -0
  189. package/dist/server/server/bootstrap.d.ts +7 -5
  190. package/dist/server/server/bootstrap.d.ts.map +1 -1
  191. package/dist/server/server/bootstrap.js +550 -485
  192. package/dist/server/server/bootstrap.js.map +1 -1
  193. package/dist/server/server/chat/chat-service.d.ts +1 -1
  194. package/dist/server/server/chat/chat-service.d.ts.map +1 -1
  195. package/dist/server/server/chat/chat-service.js +3 -3
  196. package/dist/server/server/chat/chat-service.js.map +1 -1
  197. package/dist/server/server/checkout-diff-manager.d.ts +2 -2
  198. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
  199. package/dist/server/server/checkout-git-utils.d.ts +5 -3
  200. package/dist/server/server/checkout-git-utils.d.ts.map +1 -1
  201. package/dist/server/server/checkout-git-utils.js +1 -2
  202. package/dist/server/server/checkout-git-utils.js.map +1 -1
  203. package/dist/server/server/config.d.ts.map +1 -1
  204. package/dist/server/server/config.js +79 -39
  205. package/dist/server/server/config.js.map +1 -1
  206. package/dist/server/server/connection-offer.d.ts +2 -2
  207. package/dist/server/server/connection-offer.d.ts.map +1 -1
  208. package/dist/server/server/daemon-config-store.d.ts +5 -3
  209. package/dist/server/server/daemon-config-store.d.ts.map +1 -1
  210. package/dist/server/server/daemon-config-store.js +26 -0
  211. package/dist/server/server/daemon-config-store.js.map +1 -1
  212. package/dist/server/server/daemon-keypair.d.ts +2 -2
  213. package/dist/server/server/daemon-keypair.d.ts.map +1 -1
  214. package/dist/server/server/editor-targets.d.ts +4 -4
  215. package/dist/server/server/editor-targets.d.ts.map +1 -1
  216. package/dist/server/server/editor-targets.js +11 -15
  217. package/dist/server/server/editor-targets.js.map +1 -1
  218. package/dist/server/server/exports.d.ts +10 -4
  219. package/dist/server/server/exports.d.ts.map +1 -1
  220. package/dist/server/server/exports.js +7 -4
  221. package/dist/server/server/exports.js.map +1 -1
  222. package/dist/server/server/file-download/token-store.d.ts +4 -4
  223. package/dist/server/server/file-download/token-store.d.ts.map +1 -1
  224. package/dist/server/server/file-explorer/service.d.ts +10 -0
  225. package/dist/server/server/file-explorer/service.d.ts.map +1 -1
  226. package/dist/server/server/file-explorer/service.js +38 -4
  227. package/dist/server/server/file-explorer/service.js.map +1 -1
  228. package/dist/server/server/index.js +25 -18
  229. package/dist/server/server/index.js.map +1 -1
  230. package/dist/server/server/logger.d.ts +4 -4
  231. package/dist/server/server/logger.d.ts.map +1 -1
  232. package/dist/server/server/logger.js +41 -21
  233. package/dist/server/server/logger.js.map +1 -1
  234. package/dist/server/server/loop/rpc-schemas.d.ts +52 -52
  235. package/dist/server/server/loop-service.d.ts +13 -12
  236. package/dist/server/server/loop-service.d.ts.map +1 -1
  237. package/dist/server/server/loop-service.js +22 -18
  238. package/dist/server/server/loop-service.js.map +1 -1
  239. package/dist/server/server/package-version.d.ts +2 -2
  240. package/dist/server/server/package-version.d.ts.map +1 -1
  241. package/dist/server/server/package-version.js +19 -17
  242. package/dist/server/server/package-version.js.map +1 -1
  243. package/dist/server/server/pagination/cursor.d.ts +16 -0
  244. package/dist/server/server/pagination/cursor.d.ts.map +1 -0
  245. package/dist/server/server/pagination/cursor.js +62 -0
  246. package/dist/server/server/pagination/cursor.js.map +1 -0
  247. package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
  248. package/dist/server/server/pagination/sortable-pager.d.ts.map +1 -0
  249. package/dist/server/server/pagination/sortable-pager.js +68 -0
  250. package/dist/server/server/pagination/sortable-pager.js.map +1 -0
  251. package/dist/server/server/pairing-offer.d.ts +2 -2
  252. package/dist/server/server/pairing-offer.d.ts.map +1 -1
  253. package/dist/server/server/paseo-env.d.ts +9 -0
  254. package/dist/server/server/paseo-env.d.ts.map +1 -0
  255. package/dist/server/server/paseo-env.js +70 -0
  256. package/dist/server/server/paseo-env.js.map +1 -0
  257. package/dist/server/server/paseo-worktree-archive-service.d.ts +7 -5
  258. package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -1
  259. package/dist/server/server/paseo-worktree-archive-service.js +70 -62
  260. package/dist/server/server/paseo-worktree-archive-service.js.map +1 -1
  261. package/dist/server/server/paseo-worktree-service.d.ts +13 -0
  262. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
  263. package/dist/server/server/paseo-worktree-service.js +72 -3
  264. package/dist/server/server/paseo-worktree-service.js.map +1 -1
  265. package/dist/server/server/persisted-config.d.ts +87 -62
  266. package/dist/server/server/persisted-config.d.ts.map +1 -1
  267. package/dist/server/server/persisted-config.js +13 -4
  268. package/dist/server/server/persisted-config.js.map +1 -1
  269. package/dist/server/server/persistence-hooks.d.ts +8 -9
  270. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  271. package/dist/server/server/persistence-hooks.js +4 -12
  272. package/dist/server/server/persistence-hooks.js.map +1 -1
  273. package/dist/server/server/pid-lock.js.map +1 -1
  274. package/dist/server/server/push/push-service.d.ts.map +1 -1
  275. package/dist/server/server/push/push-service.js +1 -3
  276. package/dist/server/server/push/push-service.js.map +1 -1
  277. package/dist/server/server/relay-transport.d.ts +8 -8
  278. package/dist/server/server/relay-transport.d.ts.map +1 -1
  279. package/dist/server/server/relay-transport.js +43 -20
  280. package/dist/server/server/relay-transport.js.map +1 -1
  281. package/dist/server/server/resolve-worktree-creation-intent.d.ts +0 -10
  282. package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -1
  283. package/dist/server/server/resolve-worktree-creation-intent.js +1 -45
  284. package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -1
  285. package/dist/server/server/schedule/service.d.ts.map +1 -1
  286. package/dist/server/server/schedule/service.js +2 -2
  287. package/dist/server/server/schedule/service.js.map +1 -1
  288. package/dist/server/server/script-health-monitor.d.ts.map +1 -1
  289. package/dist/server/server/script-health-monitor.js +7 -6
  290. package/dist/server/server/script-health-monitor.js.map +1 -1
  291. package/dist/server/server/script-proxy.js +1 -1
  292. package/dist/server/server/script-proxy.js.map +1 -1
  293. package/dist/server/server/script-status-projection.d.ts +10 -5
  294. package/dist/server/server/script-status-projection.d.ts.map +1 -1
  295. package/dist/server/server/script-status-projection.js +66 -47
  296. package/dist/server/server/script-status-projection.js.map +1 -1
  297. package/dist/server/server/server-id.d.ts +4 -4
  298. package/dist/server/server/server-id.d.ts.map +1 -1
  299. package/dist/server/server/session.d.ts +64 -65
  300. package/dist/server/server/session.d.ts.map +1 -1
  301. package/dist/server/server/session.js +1356 -1734
  302. package/dist/server/server/session.js.map +1 -1
  303. package/dist/server/server/speech/audio.js +1 -1
  304. package/dist/server/server/speech/audio.js.map +1 -1
  305. package/dist/server/server/speech/providers/local/config.d.ts +6 -6
  306. package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
  307. package/dist/server/server/speech/providers/local/config.js +41 -16
  308. package/dist/server/server/speech/providers/local/config.js.map +1 -1
  309. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +2 -2
  310. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
  311. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +42 -19
  312. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
  313. package/dist/server/server/speech/providers/local/runtime.d.ts +4 -4
  314. package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -1
  315. package/dist/server/server/speech/providers/local/runtime.js +108 -77
  316. package/dist/server/server/speech/providers/local/runtime.js.map +1 -1
  317. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +2 -2
  318. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
  319. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +1 -4
  320. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
  321. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +2 -2
  322. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
  323. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +19 -19
  324. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
  325. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -7
  326. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -1
  327. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -1
  328. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +23 -4
  329. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -1
  330. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +35 -28
  331. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -1
  332. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +5 -5
  333. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -1
  334. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +7 -7
  335. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -1
  336. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +5 -0
  337. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -1
  338. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -1
  339. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +3 -1
  340. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -1
  341. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +2 -2
  342. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -1
  343. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +3 -1
  344. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -1
  345. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -1
  346. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +10 -4
  347. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
  348. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +2 -2
  349. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
  350. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +2 -2
  351. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -1
  352. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +4 -1
  353. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
  354. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +2 -2
  355. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -1
  356. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +18 -11
  357. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
  358. package/dist/server/server/speech/providers/openai/config.d.ts +2 -2
  359. package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -1
  360. package/dist/server/server/speech/providers/openai/config.js +58 -31
  361. package/dist/server/server/speech/providers/openai/config.js.map +1 -1
  362. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -1
  363. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +2 -2
  364. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -1
  365. package/dist/server/server/speech/providers/openai/runtime.d.ts +4 -4
  366. package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -1
  367. package/dist/server/server/speech/providers/openai/runtime.js +37 -32
  368. package/dist/server/server/speech/providers/openai/runtime.js.map +1 -1
  369. package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -1
  370. package/dist/server/server/speech/providers/openai/stt.js +4 -3
  371. package/dist/server/server/speech/providers/openai/stt.js.map +1 -1
  372. package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -1
  373. package/dist/server/server/speech/providers/openai/tts.js +3 -2
  374. package/dist/server/server/speech/providers/openai/tts.js.map +1 -1
  375. package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
  376. package/dist/server/server/speech/speech-config-resolver.js +46 -17
  377. package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
  378. package/dist/server/server/speech/speech-provider.d.ts +2 -2
  379. package/dist/server/server/speech/speech-provider.d.ts.map +1 -1
  380. package/dist/server/server/speech/speech-runtime.d.ts +6 -6
  381. package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
  382. package/dist/server/server/speech/speech-runtime.js +17 -17
  383. package/dist/server/server/speech/speech-runtime.js.map +1 -1
  384. package/dist/server/server/speech/speech-types.d.ts +2 -2
  385. package/dist/server/server/speech/speech-types.d.ts.map +1 -1
  386. package/dist/server/server/speech/turn-detection-provider.d.ts +2 -2
  387. package/dist/server/server/speech/turn-detection-provider.d.ts.map +1 -1
  388. package/dist/server/server/utils/diff-highlighter.d.ts +0 -3
  389. package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -1
  390. package/dist/server/server/utils/diff-highlighter.js +67 -66
  391. package/dist/server/server/utils/diff-highlighter.js.map +1 -1
  392. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
  393. package/dist/server/server/voice/voice-turn-controller.js +1 -0
  394. package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
  395. package/dist/server/server/voice-types.d.ts +2 -2
  396. package/dist/server/server/voice-types.d.ts.map +1 -1
  397. package/dist/server/server/websocket-server.d.ts +34 -22
  398. package/dist/server/server/websocket-server.d.ts.map +1 -1
  399. package/dist/server/server/websocket-server.js +360 -205
  400. package/dist/server/server/websocket-server.js.map +1 -1
  401. package/dist/server/server/workspace-directory.d.ts +69 -0
  402. package/dist/server/server/workspace-directory.d.ts.map +1 -0
  403. package/dist/server/server/workspace-directory.js +229 -0
  404. package/dist/server/server/workspace-directory.js.map +1 -0
  405. package/dist/server/server/workspace-git-metadata.d.ts +2 -2
  406. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
  407. package/dist/server/server/workspace-git-metadata.js +2 -32
  408. package/dist/server/server/workspace-git-metadata.js.map +1 -1
  409. package/dist/server/server/workspace-git-service.d.ts +8 -4
  410. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  411. package/dist/server/server/workspace-git-service.js +163 -115
  412. package/dist/server/server/workspace-git-service.js.map +1 -1
  413. package/dist/server/server/workspace-reconciliation-service.d.ts +5 -4
  414. package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -1
  415. package/dist/server/server/workspace-reconciliation-service.js +82 -82
  416. package/dist/server/server/workspace-reconciliation-service.js.map +1 -1
  417. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
  418. package/dist/server/server/workspace-registry-bootstrap.js +40 -33
  419. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
  420. package/dist/server/server/workspace-registry-model.d.ts +19 -6
  421. package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
  422. package/dist/server/server/workspace-registry-model.js +35 -21
  423. package/dist/server/server/workspace-registry-model.js.map +1 -1
  424. package/dist/server/server/workspace-registry.d.ts +2 -2
  425. package/dist/server/server/workspace-script-runtime-store.d.ts +2 -2
  426. package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -1
  427. package/dist/server/server/workspace-service-env.js +3 -3
  428. package/dist/server/server/workspace-service-env.js.map +1 -1
  429. package/dist/server/server/worktree-bootstrap.d.ts +4 -4
  430. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
  431. package/dist/server/server/worktree-bootstrap.js +101 -69
  432. package/dist/server/server/worktree-bootstrap.js.map +1 -1
  433. package/dist/server/server/worktree-core.d.ts +2 -0
  434. package/dist/server/server/worktree-core.d.ts.map +1 -1
  435. package/dist/server/server/worktree-core.js.map +1 -1
  436. package/dist/server/server/worktree-errors.d.ts +1 -1
  437. package/dist/server/server/worktree-errors.d.ts.map +1 -1
  438. package/dist/server/server/worktree-errors.js +1 -4
  439. package/dist/server/server/worktree-errors.js.map +1 -1
  440. package/dist/server/server/worktree-session.d.ts +54 -27
  441. package/dist/server/server/worktree-session.d.ts.map +1 -1
  442. package/dist/server/server/worktree-session.js +95 -44
  443. package/dist/server/server/worktree-session.js.map +1 -1
  444. package/dist/server/services/github-service.d.ts +1 -7
  445. package/dist/server/services/github-service.d.ts.map +1 -1
  446. package/dist/server/services/github-service.js +123 -143
  447. package/dist/server/services/github-service.js.map +1 -1
  448. package/dist/server/shared/agent-attention-notification.d.ts +9 -8
  449. package/dist/server/shared/agent-attention-notification.d.ts.map +1 -1
  450. package/dist/server/shared/agent-attention-notification.js +27 -17
  451. package/dist/server/shared/agent-attention-notification.js.map +1 -1
  452. package/dist/server/shared/binary-frames/file-transfer.d.ts +56 -0
  453. package/dist/server/shared/binary-frames/file-transfer.d.ts.map +1 -0
  454. package/dist/server/shared/binary-frames/file-transfer.js +108 -0
  455. package/dist/server/shared/binary-frames/file-transfer.js.map +1 -0
  456. package/dist/server/shared/binary-frames/index.d.ts +3 -0
  457. package/dist/server/shared/binary-frames/index.d.ts.map +1 -0
  458. package/dist/server/shared/binary-frames/index.js +3 -0
  459. package/dist/server/shared/binary-frames/index.js.map +1 -0
  460. package/dist/server/shared/{terminal-stream-protocol.d.ts → binary-frames/terminal.d.ts} +4 -4
  461. package/dist/server/shared/binary-frames/terminal.d.ts.map +1 -0
  462. package/dist/server/shared/{terminal-stream-protocol.js → binary-frames/terminal.js} +2 -2
  463. package/dist/server/shared/binary-frames/terminal.js.map +1 -0
  464. package/dist/server/shared/client-capabilities.d.ts +5 -0
  465. package/dist/server/shared/client-capabilities.d.ts.map +1 -0
  466. package/dist/server/shared/client-capabilities.js +4 -0
  467. package/dist/server/shared/client-capabilities.js.map +1 -0
  468. package/dist/server/shared/connection-offer.d.ts +8 -0
  469. package/dist/server/shared/connection-offer.d.ts.map +1 -1
  470. package/dist/server/shared/connection-offer.js +35 -0
  471. package/dist/server/shared/connection-offer.js.map +1 -1
  472. package/dist/server/shared/daemon-endpoints.d.ts +18 -3
  473. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
  474. package/dist/server/shared/daemon-endpoints.js +82 -8
  475. package/dist/server/shared/daemon-endpoints.js.map +1 -1
  476. package/dist/server/shared/host-connection-schema.d.ts +23 -0
  477. package/dist/server/shared/host-connection-schema.d.ts.map +1 -0
  478. package/dist/server/shared/host-connection-schema.js +9 -0
  479. package/dist/server/shared/host-connection-schema.js.map +1 -0
  480. package/dist/server/shared/messages.d.ts +25073 -3453
  481. package/dist/server/shared/messages.d.ts.map +1 -1
  482. package/dist/server/shared/messages.js +152 -36
  483. package/dist/server/shared/messages.js.map +1 -1
  484. package/dist/server/shared/tool-call-display.d.ts +2 -2
  485. package/dist/server/shared/tool-call-display.d.ts.map +1 -1
  486. package/dist/server/terminal/terminal-manager-factory.d.ts +7 -0
  487. package/dist/server/terminal/terminal-manager-factory.d.ts.map +1 -0
  488. package/dist/server/terminal/terminal-manager-factory.js +13 -0
  489. package/dist/server/terminal/terminal-manager-factory.js.map +1 -0
  490. package/dist/server/terminal/terminal-manager.d.ts +7 -1
  491. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  492. package/dist/server/terminal/terminal-manager.js +15 -4
  493. package/dist/server/terminal/terminal-manager.js.map +1 -1
  494. package/dist/server/terminal/terminal-output-coalescer.d.ts +6 -6
  495. package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -1
  496. package/dist/server/terminal/terminal-session-controller.d.ts +63 -0
  497. package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -0
  498. package/dist/server/terminal/terminal-session-controller.js +615 -0
  499. package/dist/server/terminal/terminal-session-controller.js.map +1 -0
  500. package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
  501. package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
  502. package/dist/server/terminal/terminal-worker-process.d.ts.map +1 -0
  503. package/dist/server/terminal/terminal-worker-process.js +221 -0
  504. package/dist/server/terminal/terminal-worker-process.js.map +1 -0
  505. package/dist/server/terminal/terminal-worker-protocol.d.ts +113 -0
  506. package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -0
  507. package/dist/server/terminal/terminal-worker-protocol.js +2 -0
  508. package/dist/server/terminal/terminal-worker-protocol.js.map +1 -0
  509. package/dist/server/terminal/terminal.d.ts +10 -2
  510. package/dist/server/terminal/terminal.d.ts.map +1 -1
  511. package/dist/server/terminal/terminal.js +79 -28
  512. package/dist/server/terminal/terminal.js.map +1 -1
  513. package/dist/server/terminal/worker-terminal-manager.d.ts +19 -0
  514. package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -0
  515. package/dist/server/terminal/worker-terminal-manager.js +466 -0
  516. package/dist/server/terminal/worker-terminal-manager.js.map +1 -0
  517. package/dist/server/utils/checkout-git.d.ts +13 -12
  518. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  519. package/dist/server/utils/checkout-git.js +351 -281
  520. package/dist/server/utils/checkout-git.js.map +1 -1
  521. package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
  522. package/dist/server/utils/directory-suggestions.js +22 -34
  523. package/dist/server/utils/directory-suggestions.js.map +1 -1
  524. package/dist/server/utils/executable.d.ts +1 -14
  525. package/dist/server/utils/executable.d.ts.map +1 -1
  526. package/dist/server/utils/executable.js +13 -49
  527. package/dist/server/utils/executable.js.map +1 -1
  528. package/dist/server/utils/github-remote.d.ts +13 -0
  529. package/dist/server/utils/github-remote.d.ts.map +1 -0
  530. package/dist/server/utils/github-remote.js +128 -0
  531. package/dist/server/utils/github-remote.js.map +1 -0
  532. package/dist/server/utils/paseo-config-file.d.ts +30 -0
  533. package/dist/server/utils/paseo-config-file.d.ts.map +1 -0
  534. package/dist/server/utils/paseo-config-file.js +90 -0
  535. package/dist/server/utils/paseo-config-file.js.map +1 -0
  536. package/dist/server/utils/paseo-config-schema.d.ts +290 -0
  537. package/dist/server/utils/paseo-config-schema.d.ts.map +1 -0
  538. package/dist/server/utils/paseo-config-schema.js +60 -0
  539. package/dist/server/utils/paseo-config-schema.js.map +1 -0
  540. package/dist/server/utils/process-tree.d.ts +25 -0
  541. package/dist/server/utils/process-tree.d.ts.map +1 -0
  542. package/dist/server/utils/process-tree.js +96 -0
  543. package/dist/server/utils/process-tree.js.map +1 -0
  544. package/dist/server/utils/project-icon.d.ts.map +1 -1
  545. package/dist/server/utils/project-icon.js +84 -109
  546. package/dist/server/utils/project-icon.js.map +1 -1
  547. package/dist/server/utils/promise-timeout.d.ts +2 -2
  548. package/dist/server/utils/promise-timeout.d.ts.map +1 -1
  549. package/dist/server/utils/run-git-command.d.ts +3 -1
  550. package/dist/server/utils/run-git-command.d.ts.map +1 -1
  551. package/dist/server/utils/run-git-command.js +10 -1
  552. package/dist/server/utils/run-git-command.js.map +1 -1
  553. package/dist/server/utils/script-hostname.d.ts +2 -2
  554. package/dist/server/utils/script-hostname.d.ts.map +1 -1
  555. package/dist/server/utils/spawn.d.ts +10 -3
  556. package/dist/server/utils/spawn.d.ts.map +1 -1
  557. package/dist/server/utils/spawn.js +30 -5
  558. package/dist/server/utils/spawn.js.map +1 -1
  559. package/dist/server/utils/windows-command.d.ts +15 -0
  560. package/dist/server/utils/windows-command.d.ts.map +1 -0
  561. package/dist/server/utils/windows-command.js +41 -0
  562. package/dist/server/utils/windows-command.js.map +1 -0
  563. package/dist/server/utils/worktree-metadata.d.ts +44 -0
  564. package/dist/server/utils/worktree-metadata.d.ts.map +1 -1
  565. package/dist/server/utils/worktree-metadata.js +58 -0
  566. package/dist/server/utils/worktree-metadata.js.map +1 -1
  567. package/dist/server/utils/worktree.d.ts +23 -8
  568. package/dist/server/utils/worktree.d.ts.map +1 -1
  569. package/dist/server/utils/worktree.js +81 -63
  570. package/dist/server/utils/worktree.js.map +1 -1
  571. package/dist/src/server/pid-lock.js.map +1 -1
  572. package/package.json +17 -21
  573. package/dist/server/server/agent/llm-openai.d.ts +0 -7
  574. package/dist/server/server/agent/llm-openai.d.ts.map +0 -1
  575. package/dist/server/server/agent/llm-openai.js +0 -8
  576. package/dist/server/server/agent/llm-openai.js.map +0 -1
  577. package/dist/server/server/agent/orchestrator.d.ts +0 -12
  578. package/dist/server/server/agent/orchestrator.d.ts.map +0 -1
  579. package/dist/server/server/agent/orchestrator.js +0 -12
  580. package/dist/server/server/agent/orchestrator.js.map +0 -1
  581. package/dist/server/server/types.d.ts +0 -5
  582. package/dist/server/server/types.d.ts.map +0 -1
  583. package/dist/server/server/types.js +0 -3
  584. package/dist/server/server/types.js.map +0 -1
  585. package/dist/server/server/workspace-registry.test-helpers.d.ts +0 -37
  586. package/dist/server/server/workspace-registry.test-helpers.d.ts.map +0 -1
  587. package/dist/server/server/workspace-registry.test-helpers.js +0 -121
  588. package/dist/server/server/workspace-registry.test-helpers.js.map +0 -1
  589. package/dist/server/shared/terminal-stream-protocol.d.ts.map +0 -1
  590. 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 { requirePaseoWorktreeBaseRefName } from "./worktree-metadata.js";
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, env: READ_ONLY_GIT_ENV });
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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, env: READ_ONLY_GIT_ENV });
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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, env: READ_ONLY_GIT_ENV });
451
+ await runGitCommand(["rev-parse", "--git-dir"], { cwd, envOverlay: READ_ONLY_GIT_ENV });
453
452
  }
454
- catch (error) {
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
- env: READ_ONLY_GIT_ENV,
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
- for (const path of ["rebase-merge/head-name", "rebase-apply/head-name"]) {
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
- env: READ_ONLY_GIT_ENV,
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
- // Try the other rebase backend.
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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 getConfiguredBaseRefForCwd(cwd, context) {
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 { baseRef: null, isPaseoOwnedWorktree: false };
604
+ return { isPaseoOwnedWorktree: false };
605
605
  }
606
606
  const ownership = await isPaseoOwnedWorktreeCwd(cwd, { paseoHome: context?.paseoHome });
607
607
  if (!ownership.allowed) {
608
- return { baseRef: null, isPaseoOwnedWorktree: false };
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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.includes("main")) {
773
+ .filter((line) => line.length > 0));
774
+ if (branches.has("main")) {
755
775
  return "main";
756
776
  }
757
- if (branches.includes("master")) {
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
- env: READ_ONLY_GIT_ENV,
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, env: READ_ONLY_GIT_ENV });
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, env: READ_ONLY_GIT_ENV });
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, env: READ_ONLY_GIT_ENV });
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
- env: READ_ONLY_GIT_ENV,
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, env: READ_ONLY_GIT_ENV });
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, configured] = await Promise.all([
909
+ const [currentBranch, remoteUrl, paseoWorktree] = await Promise.all([
890
910
  getCurrentBranch(cwd),
891
911
  getOriginRemoteUrl(cwd),
892
- getConfiguredBaseRefForCwd(cwd, context),
912
+ getPaseoWorktreeForCwd(cwd, context),
893
913
  ]);
894
914
  return {
895
915
  worktreeRoot: root,
896
916
  currentBranch,
897
917
  remoteUrl,
898
- configured,
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
- env: READ_ONLY_GIT_ENV,
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 configured = inspected.configured;
1023
+ const paseoWorktree = inspected.paseoWorktree;
1004
1024
  const isDirty = await isWorkingTreeDirty(cwd);
1005
1025
  const hasRemote = remoteUrl !== null;
1006
- const baseRef = configured.baseRef ?? (await resolveBaseRef(cwd));
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 (configured.isPaseoOwnedWorktree) {
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: configured.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 configured = await getConfiguredBaseRefForCwd(cwd, context);
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
- env: READ_ONLY_GIT_ENV,
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
- env: READ_ONLY_GIT_ENV,
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
- export async function getCheckoutDiff(cwd, compare, context) {
1154
- await requireGitRepo(cwd);
1155
- let refsForDiff;
1156
- if (compare.mode === "uncommitted") {
1157
- refsForDiff = { baseRef: "HEAD", includeUntracked: true };
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
- else {
1160
- const configured = await getConfiguredBaseRefForCwd(cwd, context);
1161
- const baseRef = configured.baseRef ?? compare.baseRef ?? (await resolveBaseRef(cwd));
1162
- if (!baseRef) {
1163
- return { diff: "" };
1164
- }
1165
- if (configured.isPaseoOwnedWorktree && compare.baseRef && compare.baseRef !== baseRef) {
1166
- throw new Error(`Base ref mismatch: expected ${baseRef}, got ${compare.baseRef}`);
1167
- }
1168
- const bestBaseRef = await resolveBestComparisonBaseRef(cwd, baseRef);
1169
- refsForDiff = {
1170
- baseRef: (await tryResolveMergeBase(cwd, bestBaseRef)) ?? bestBaseRef,
1171
- targetRef: "HEAD",
1172
- includeUntracked: false,
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
- env: READ_ONLY_GIT_ENV,
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
- const parsedTrackedFiles = trackedDiffText.length > 0
1249
- ? await parseAndHighlightDiff(trackedDiffText, cwd, {
1250
- getOldFileContent: async (file) => {
1251
- const change = trackedChangeByPath.get(file.path);
1252
- if (!change || change.isNew) {
1253
- return null;
1254
- }
1255
- const refPath = change.oldPath ?? change.path;
1256
- return readGitFileContentAtRef(cwd, refsForDiff.baseRef, refPath);
1257
- },
1258
- getNewFileContent: async (file) => {
1259
- if (!refsForDiff.targetRef) {
1260
- return null;
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
- const { text, truncated, stat } = await getUntrackedDiffText(cwd, change, ignoreWhitespace);
1322
- if (!compare.includeStructured) {
1323
- if (stat?.isBinary) {
1324
- appendDiff(`# ${change.path}: binary diff omitted\n`);
1325
- }
1326
- else if (truncated) {
1327
- appendDiff(`# ${change.path}: diff too large omitted\n`);
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 configured = await getConfiguredBaseRefForCwd(cwd, context);
1385
- const baseRef = configured.baseRef ?? options.baseRef ?? (await resolveBaseRef(cwd));
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 (configured.isPaseoOwnedWorktree && options.baseRef && options.baseRef !== baseRef) {
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
- const errorDetails = error instanceof Error
1428
- ? `${error.message}\n${error.stderr ?? ""}\n${error.stdout ?? ""}`
1429
- : String(error);
1430
- try {
1431
- const [unmergedOutput, lsFilesOutput, statusOutput] = await Promise.all([
1432
- runGitCommand(["diff", "--name-only", "--diff-filter=U"], { cwd: operationCwd }),
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 configured = await getConfiguredBaseRefForCwd(cwd, context);
1499
- const baseRef = configured.baseRef ?? options.baseRef ?? (await resolveBaseRef(cwd));
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 (configured.isPaseoOwnedWorktree && options.baseRef && options.baseRef !== baseRef) {
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
- env: READ_ONLY_GIT_ENV,
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
- const errorDetails = error instanceof Error
1526
- ? `${error.message}\n${error.stderr ?? ""}\n${error.stdout ?? ""}`
1527
- : String(error);
1528
- try {
1529
- const [unmergedOutput, lsFilesOutput, statusOutput] = await Promise.all([
1530
- runGitCommand(["diff", "--name-only", "--diff-filter=U"], { cwd }),
1531
- runGitCommand(["ls-files", "-u"], { cwd }),
1532
- runGitCommand(["status", "--porcelain"], { cwd }),
1533
- ]);
1534
- const statusConflicts = statusOutput.stdout
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
- .filter((line) => /^(UU|AA|DD|AU|UA|UD|DU)\s/.test(line))
1539
- .map((line) => line.slice(3).trim());
1540
- const conflicts = [
1541
- ...unmergedOutput.stdout
1542
- .split("\n")
1543
- .map((line) => line.trim())
1544
- .filter(Boolean),
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
- catch (innerError) {
1568
- if (innerError instanceof MergeFromBaseConflictError) {
1569
- throw innerError;
1629
+ catch {
1630
+ // ignore
1570
1631
  }
1571
- // ignore detection failures
1632
+ throw new MergeFromBaseConflictError({
1633
+ baseRef,
1634
+ currentBranch,
1635
+ conflictFiles: conflicts.length > 0 ? conflicts : [],
1636
+ });
1572
1637
  }
1573
- throw error;
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(), workspaceGitService) {
1678
+ export async function createPullRequest(cwd, options, github = createGitHubService(), context) {
1609
1679
  await requireGitRepo(cwd);
1610
- const repo = await resolveGitHubRepo(cwd, { workspaceGitService });
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 configured = await getConfiguredBaseRefForCwd(cwd);
1616
- const base = configured.baseRef ?? options.base ?? (await resolveBaseRef(cwd));
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 (configured.isPaseoOwnedWorktree && options.base && options.base !== base) {
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 });