@camerontaylor/paseo-server 0.8.0-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (928) hide show
  1. package/.env.example +31 -0
  2. package/README.md +111 -0
  3. package/dist/scripts/dev-runner.js +37 -0
  4. package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
  5. package/dist/scripts/supervisor-entrypoint.js +160 -0
  6. package/dist/scripts/supervisor-log-config.js +31 -0
  7. package/dist/scripts/supervisor.js +313 -0
  8. package/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
  9. package/dist/server/executable-resolution/executable-resolution.js +121 -0
  10. package/dist/server/executable-resolution/windows.d.ts +18 -0
  11. package/dist/server/executable-resolution/windows.js +65 -0
  12. package/dist/server/server/agent/activity-curator.d.ts +40 -0
  13. package/dist/server/server/agent/activity-curator.js +243 -0
  14. package/dist/server/server/agent/agent-archive.d.ts +11 -0
  15. package/dist/server/server/agent/agent-archive.js +16 -0
  16. package/dist/server/server/agent/agent-configuration-validator.d.ts +18 -0
  17. package/dist/server/server/agent/agent-configuration-validator.js +42 -0
  18. package/dist/server/server/agent/agent-loading.d.ts +17 -0
  19. package/dist/server/server/agent/agent-loading.js +88 -0
  20. package/dist/server/server/agent/agent-manager.d.ts +555 -0
  21. package/dist/server/server/agent/agent-manager.js +3930 -0
  22. package/dist/server/server/agent/agent-owner.d.ts +12 -0
  23. package/dist/server/server/agent/agent-owner.js +12 -0
  24. package/dist/server/server/agent/agent-projections.d.ts +26 -0
  25. package/dist/server/server/agent/agent-projections.js +414 -0
  26. package/dist/server/server/agent/agent-prompt.d.ts +91 -0
  27. package/dist/server/server/agent/agent-prompt.js +359 -0
  28. package/dist/server/server/agent/agent-response-loop.d.ts +72 -0
  29. package/dist/server/server/agent/agent-response-loop.js +336 -0
  30. package/dist/server/server/agent/agent-run-state.d.ts +76 -0
  31. package/dist/server/server/agent/agent-run-state.js +212 -0
  32. package/dist/server/server/agent/agent-sdk-types.d.ts +742 -0
  33. package/dist/server/server/agent/agent-sdk-types.js +25 -0
  34. package/dist/server/server/agent/agent-storage.d.ts +148 -0
  35. package/dist/server/server/agent/agent-storage.js +401 -0
  36. package/dist/server/server/agent/agent-stream-coalescer.d.ts +43 -0
  37. package/dist/server/server/agent/agent-stream-coalescer.js +187 -0
  38. package/dist/server/server/agent/agent-timeline-content.d.ts +6 -0
  39. package/dist/server/server/agent/agent-timeline-content.js +62 -0
  40. package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
  41. package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
  42. package/dist/server/server/agent/agent-timeline-store.d.ts +31 -0
  43. package/dist/server/server/agent/agent-timeline-store.js +249 -0
  44. package/dist/server/server/agent/audio-utils.d.ts +3 -0
  45. package/dist/server/server/agent/audio-utils.js +19 -0
  46. package/dist/server/server/agent/create-agent/create.d.ts +102 -0
  47. package/dist/server/server/agent/create-agent/create.js +362 -0
  48. package/dist/server/server/agent/create-agent/intent.d.ts +25 -0
  49. package/dist/server/server/agent/create-agent/intent.js +30 -0
  50. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +65 -0
  51. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +166 -0
  52. package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
  53. package/dist/server/server/agent/create-agent-mode.js +65 -0
  54. package/dist/server/server/agent/create-agent-title.d.ts +10 -0
  55. package/dist/server/server/agent/create-agent-title.js +34 -0
  56. package/dist/server/server/agent/dictation-debug.d.ts +13 -0
  57. package/dist/server/server/agent/dictation-debug.js +50 -0
  58. package/dist/server/server/agent/import-sessions.d.ts +57 -0
  59. package/dist/server/server/agent/import-sessions.js +240 -0
  60. package/dist/server/server/agent/lifecycle-command.d.ts +73 -0
  61. package/dist/server/server/agent/lifecycle-command.js +99 -0
  62. package/dist/server/server/agent/mcp-server.d.ts +5 -0
  63. package/dist/server/server/agent/mcp-server.js +31 -0
  64. package/dist/server/server/agent/mcp-shared.d.ts +181 -0
  65. package/dist/server/server/agent/mcp-shared.js +199 -0
  66. package/dist/server/server/agent/mutable-provider-config-owner.d.ts +8 -0
  67. package/dist/server/server/agent/mutable-provider-config-owner.js +35 -0
  68. package/dist/server/server/agent/paseo-tool-policy.d.ts +9 -0
  69. package/dist/server/server/agent/paseo-tool-policy.js +16 -0
  70. package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  71. package/dist/server/server/agent/pcm16-resampler.js +63 -0
  72. package/dist/server/server/agent/permission-response.d.ts +15 -0
  73. package/dist/server/server/agent/permission-response.js +14 -0
  74. package/dist/server/server/agent/plugin-provider.d.ts +16 -0
  75. package/dist/server/server/agent/plugin-provider.js +1356 -0
  76. package/dist/server/server/agent/prompt-attachments.d.ts +12 -0
  77. package/dist/server/server/agent/prompt-attachments.js +182 -0
  78. package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
  79. package/dist/server/server/agent/provider-history-timestamps.js +16 -0
  80. package/dist/server/server/agent/provider-launch-config.d.ts +43 -0
  81. package/dist/server/server/agent/provider-launch-config.js +167 -0
  82. package/dist/server/server/agent/provider-notices.d.ts +4 -0
  83. package/dist/server/server/agent/provider-notices.js +9 -0
  84. package/dist/server/server/agent/provider-options.d.ts +19 -0
  85. package/dist/server/server/agent/provider-options.js +53 -0
  86. package/dist/server/server/agent/provider-refresh-deadline.d.ts +11 -0
  87. package/dist/server/server/agent/provider-refresh-deadline.js +65 -0
  88. package/dist/server/server/agent/provider-registry.d.ts +72 -0
  89. package/dist/server/server/agent/provider-registry.js +604 -0
  90. package/dist/server/server/agent/provider-runtime.d.ts +16 -0
  91. package/dist/server/server/agent/provider-runtime.js +35 -0
  92. package/dist/server/server/agent/provider-session-import.d.ts +10 -0
  93. package/dist/server/server/agent/provider-session-import.js +55 -0
  94. package/dist/server/server/agent/provider-snapshot-manager.d.ts +166 -0
  95. package/dist/server/server/agent/provider-snapshot-manager.js +843 -0
  96. package/dist/server/server/agent/provider-subagents/store.d.ts +68 -0
  97. package/dist/server/server/agent/provider-subagents/store.js +111 -0
  98. package/dist/server/server/agent/providers/acp-agent.d.ts +703 -0
  99. package/dist/server/server/agent/providers/acp-agent.js +3412 -0
  100. package/dist/server/server/agent/providers/claude/agent.d.ts +74 -0
  101. package/dist/server/server/agent/providers/claude/agent.js +5236 -0
  102. package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
  103. package/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
  104. package/dist/server/server/agent/providers/claude/hooks.d.ts +12 -0
  105. package/dist/server/server/agent/providers/claude/hooks.js +20 -0
  106. package/dist/server/server/agent/providers/claude/model-manifest.d.ts +147 -0
  107. package/dist/server/server/agent/providers/claude/model-manifest.js +342 -0
  108. package/dist/server/server/agent/providers/claude/models.d.ts +28 -0
  109. package/dist/server/server/agent/providers/claude/models.js +141 -0
  110. package/dist/server/server/agent/providers/claude/options.d.ts +85 -0
  111. package/dist/server/server/agent/providers/claude/options.js +93 -0
  112. package/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
  113. package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
  114. package/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
  115. package/dist/server/server/agent/providers/claude/project-dir.js +57 -0
  116. package/dist/server/server/agent/providers/claude/query.d.ts +17 -0
  117. package/dist/server/server/agent/providers/claude/query.js +86 -0
  118. package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
  119. package/dist/server/server/agent/providers/claude/rewind.js +30 -0
  120. package/dist/server/server/agent/providers/claude/side-question.d.ts +16 -0
  121. package/dist/server/server/agent/providers/claude/side-question.js +57 -0
  122. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +35 -0
  123. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +392 -0
  124. package/dist/server/server/agent/providers/claude/subagents/live-source.d.ts +161 -0
  125. package/dist/server/server/agent/providers/claude/subagents/live-source.js +415 -0
  126. package/dist/server/server/agent/providers/claude/subagents/observation.d.ts +53 -0
  127. package/dist/server/server/agent/providers/claude/subagents/observation.js +57 -0
  128. package/dist/server/server/agent/providers/claude/subagents/presentation.d.ts +12 -0
  129. package/dist/server/server/agent/providers/claude/subagents/presentation.js +41 -0
  130. package/dist/server/server/agent/providers/claude/subagents/replay-source.d.ts +70 -0
  131. package/dist/server/server/agent/providers/claude/subagents/replay-source.js +305 -0
  132. package/dist/server/server/agent/providers/claude/subagents/workflow-output.d.ts +4 -0
  133. package/dist/server/server/agent/providers/claude/subagents/workflow-output.js +86 -0
  134. package/dist/server/server/agent/providers/claude/subagents/workflow-replay-source.d.ts +38 -0
  135. package/dist/server/server/agent/providers/claude/subagents/workflow-replay-source.js +225 -0
  136. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +37 -0
  137. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +296 -0
  138. package/dist/server/server/agent/providers/claude/task-state.d.ts +18 -0
  139. package/dist/server/server/agent/providers/claude/task-state.js +185 -0
  140. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
  141. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
  142. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  143. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +130 -0
  144. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  145. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +129 -0
  146. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +101 -0
  147. package/dist/server/server/agent/providers/codex/app-server-transport.js +290 -0
  148. package/dist/server/server/agent/providers/codex/async-questions.d.ts +18 -0
  149. package/dist/server/server/agent/providers/codex/async-questions.js +135 -0
  150. package/dist/server/server/agent/providers/codex/options.d.ts +59 -0
  151. package/dist/server/server/agent/providers/codex/options.js +82 -0
  152. package/dist/server/server/agent/providers/codex/rewind.d.ts +24 -0
  153. package/dist/server/server/agent/providers/codex/rewind.js +77 -0
  154. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
  155. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
  156. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
  157. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +909 -0
  158. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +384 -0
  159. package/dist/server/server/agent/providers/codex-app-server-agent.js +5877 -0
  160. package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
  161. package/dist/server/server/agent/providers/codex-feature-definitions.js +55 -0
  162. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
  163. package/dist/server/server/agent/providers/copilot-acp-agent.js +187 -0
  164. package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +17 -0
  165. package/dist/server/server/agent/providers/cursor-acp-agent.js +31 -0
  166. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
  167. package/dist/server/server/agent/providers/diagnostic-utils.js +356 -0
  168. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +55 -0
  169. package/dist/server/server/agent/providers/generic-acp-agent.js +178 -0
  170. package/dist/server/server/agent/providers/gjc-acp-agent.d.ts +155 -0
  171. package/dist/server/server/agent/providers/gjc-acp-agent.js +588 -0
  172. package/dist/server/server/agent/providers/jsonl-frame-decoder.d.ts +17 -0
  173. package/dist/server/server/agent/providers/jsonl-frame-decoder.js +149 -0
  174. package/dist/server/server/agent/providers/jsonl-rpc-process.d.ts +63 -0
  175. package/dist/server/server/agent/providers/jsonl-rpc-process.js +207 -0
  176. package/dist/server/server/agent/providers/kimi-acp-agent.d.ts +35 -0
  177. package/dist/server/server/agent/providers/kimi-acp-agent.js +65 -0
  178. package/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
  179. package/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
  180. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +111 -0
  181. package/dist/server/server/agent/providers/mock-load-test-agent.js +1340 -0
  182. package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
  183. package/dist/server/server/agent/providers/mock-slow-provider.js +40 -0
  184. package/dist/server/server/agent/providers/omp/advisor-message.d.ts +11 -0
  185. package/dist/server/server/agent/providers/omp/advisor-message.js +80 -0
  186. package/dist/server/server/agent/providers/omp/agent.d.ts +178 -0
  187. package/dist/server/server/agent/providers/omp/agent.js +1952 -0
  188. package/dist/server/server/agent/providers/omp/cli-runtime.d.ts +22 -0
  189. package/dist/server/server/agent/providers/omp/cli-runtime.js +208 -0
  190. package/dist/server/server/agent/providers/omp/commands.d.ts +8 -0
  191. package/dist/server/server/agent/providers/omp/commands.js +62 -0
  192. package/dist/server/server/agent/providers/omp/custom-message.d.ts +7 -0
  193. package/dist/server/server/agent/providers/omp/custom-message.js +4 -0
  194. package/dist/server/server/agent/providers/omp/event-mapper.d.ts +13 -0
  195. package/dist/server/server/agent/providers/omp/event-mapper.js +267 -0
  196. package/dist/server/server/agent/providers/omp/history-hooks.d.ts +3 -0
  197. package/dist/server/server/agent/providers/omp/history-hooks.js +13 -0
  198. package/dist/server/server/agent/providers/omp/history.d.ts +19 -0
  199. package/dist/server/server/agent/providers/omp/history.js +306 -0
  200. package/dist/server/server/agent/providers/omp/host-tools.d.ts +14 -0
  201. package/dist/server/server/agent/providers/omp/host-tools.js +196 -0
  202. package/dist/server/server/agent/providers/omp/map-omp-model.d.ts +11 -0
  203. package/dist/server/server/agent/providers/omp/map-omp-model.js +67 -0
  204. package/dist/server/server/agent/providers/omp/message-history.d.ts +38 -0
  205. package/dist/server/server/agent/providers/omp/message-history.js +216 -0
  206. package/dist/server/server/agent/providers/omp/protocol-session.d.ts +13 -0
  207. package/dist/server/server/agent/providers/omp/protocol-session.js +39 -0
  208. package/dist/server/server/agent/providers/omp/provider-config.d.ts +43 -0
  209. package/dist/server/server/agent/providers/omp/provider-config.js +120 -0
  210. package/dist/server/server/agent/providers/omp/rpc-types.d.ts +2040 -0
  211. package/dist/server/server/agent/providers/omp/rpc-types.js +551 -0
  212. package/dist/server/server/agent/providers/omp/rpc-ui-permission-mapper.d.ts +24 -0
  213. package/dist/server/server/agent/providers/omp/rpc-ui-permission-mapper.js +156 -0
  214. package/dist/server/server/agent/providers/omp/runtime.d.ts +85 -0
  215. package/dist/server/server/agent/providers/omp/runtime.js +62 -0
  216. package/dist/server/server/agent/providers/omp/session-descriptor.d.ts +16 -0
  217. package/dist/server/server/agent/providers/omp/session-descriptor.js +389 -0
  218. package/dist/server/server/agent/providers/omp/subagent-card-tracker.d.ts +33 -0
  219. package/dist/server/server/agent/providers/omp/subagent-card-tracker.js +264 -0
  220. package/dist/server/server/agent/providers/omp/subagent-index.d.ts +13 -0
  221. package/dist/server/server/agent/providers/omp/subagent-index.js +111 -0
  222. package/dist/server/server/agent/providers/omp/subagent-title.d.ts +2 -0
  223. package/dist/server/server/agent/providers/omp/subagent-title.js +14 -0
  224. package/dist/server/server/agent/providers/omp/system-notice.d.ts +8 -0
  225. package/dist/server/server/agent/providers/omp/system-notice.js +68 -0
  226. package/dist/server/server/agent/providers/omp/todo-mapper.d.ts +9 -0
  227. package/dist/server/server/agent/providers/omp/todo-mapper.js +52 -0
  228. package/dist/server/server/agent/providers/omp/tool-call-detail.d.ts +110 -0
  229. package/dist/server/server/agent/providers/omp/tool-call-detail.js +288 -0
  230. package/dist/server/server/agent/providers/omp/tool-call-id.d.ts +4 -0
  231. package/dist/server/server/agent/providers/omp/tool-call-id.js +34 -0
  232. package/dist/server/server/agent/providers/omp/tool-call-mapper.d.ts +7 -0
  233. package/dist/server/server/agent/providers/omp/tool-call-mapper.js +98 -0
  234. package/dist/server/server/agent/providers/omp/usage-poller.d.ts +32 -0
  235. package/dist/server/server/agent/providers/omp/usage-poller.js +141 -0
  236. package/dist/server/server/agent/providers/opencode/bridge-plugin.bundle.mjs +14678 -0
  237. package/dist/server/server/agent/providers/opencode/bridge.d.ts +39 -0
  238. package/dist/server/server/agent/providers/opencode/bridge.js +249 -0
  239. package/dist/server/server/agent/providers/opencode/event-consumer.d.ts +60 -0
  240. package/dist/server/server/agent/providers/opencode/event-consumer.js +221 -0
  241. package/dist/server/server/agent/providers/opencode/options.d.ts +156 -0
  242. package/dist/server/server/agent/providers/opencode/options.js +62 -0
  243. package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
  244. package/dist/server/server/agent/providers/opencode/paths.js +7 -0
  245. package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
  246. package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
  247. package/dist/server/server/agent/providers/opencode/server-manager.d.ts +101 -0
  248. package/dist/server/server/agent/providers/opencode/server-manager.js +513 -0
  249. package/dist/server/server/agent/providers/opencode/side-question.d.ts +78 -0
  250. package/dist/server/server/agent/providers/opencode/side-question.js +172 -0
  251. package/dist/server/server/agent/providers/opencode/subagent-presentation.d.ts +36 -0
  252. package/dist/server/server/agent/providers/opencode/subagent-presentation.js +62 -0
  253. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +22 -0
  254. package/dist/server/server/agent/providers/opencode/test-server-manager.js +43 -0
  255. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  256. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +256 -0
  257. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  258. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +53 -0
  259. package/dist/server/server/agent/providers/opencode-agent.d.ts +393 -0
  260. package/dist/server/server/agent/providers/opencode-agent.js +4106 -0
  261. package/dist/server/server/agent/providers/pi/agent.d.ts +164 -0
  262. package/dist/server/server/agent/providers/pi/agent.js +2236 -0
  263. package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
  264. package/dist/server/server/agent/providers/pi/cli-runtime.js +177 -0
  265. package/dist/server/server/agent/providers/pi/history-mapper.d.ts +36 -0
  266. package/dist/server/server/agent/providers/pi/history-mapper.js +212 -0
  267. package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
  268. package/dist/server/server/agent/providers/pi/rewind.js +8 -0
  269. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +252 -0
  270. package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
  271. package/dist/server/server/agent/providers/pi/runtime.d.ts +77 -0
  272. package/dist/server/server/agent/providers/pi/runtime.js +65 -0
  273. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
  274. package/dist/server/server/agent/providers/pi/session-descriptor.js +355 -0
  275. package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +113 -0
  276. package/dist/server/server/agent/providers/pi/tool-call-mapper.js +340 -0
  277. package/dist/server/server/agent/providers/pi/usage-poller.d.ts +32 -0
  278. package/dist/server/server/agent/providers/pi/usage-poller.js +141 -0
  279. package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
  280. package/dist/server/server/agent/providers/provider-image-output.js +165 -0
  281. package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
  282. package/dist/server/server/agent/providers/provider-runner.js +81 -0
  283. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
  284. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
  285. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
  286. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
  287. package/dist/server/server/agent/providers/trae-acp-agent.d.ts +15 -0
  288. package/dist/server/server/agent/providers/trae-acp-agent.js +18 -0
  289. package/dist/server/server/agent/recordings-debug.d.ts +3 -0
  290. package/dist/server/server/agent/recordings-debug.js +19 -0
  291. package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
  292. package/dist/server/server/agent/rewind/rewind.js +29 -0
  293. package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
  294. package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
  295. package/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
  296. package/dist/server/server/agent/runtime-mcp-config.js +53 -0
  297. package/dist/server/server/agent/side-conversations/store.d.ts +33 -0
  298. package/dist/server/server/agent/side-conversations/store.js +62 -0
  299. package/dist/server/server/agent/stale-provider-session-error.d.ts +6 -0
  300. package/dist/server/server/agent/stale-provider-session-error.js +11 -0
  301. package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
  302. package/dist/server/server/agent/structured-generation-providers.js +193 -0
  303. package/dist/server/server/agent/stt-debug.d.ts +10 -0
  304. package/dist/server/server/agent/stt-debug.js +33 -0
  305. package/dist/server/server/agent/stt-manager.d.ts +38 -0
  306. package/dist/server/server/agent/stt-manager.js +246 -0
  307. package/dist/server/server/agent/system-prompt.d.ts +2 -0
  308. package/dist/server/server/agent/system-prompt.js +8 -0
  309. package/dist/server/server/agent/timeline-append.d.ts +10 -0
  310. package/dist/server/server/agent/timeline-append.js +27 -0
  311. package/dist/server/server/agent/timeline-page-bounds.d.ts +19 -0
  312. package/dist/server/server/agent/timeline-page-bounds.js +37 -0
  313. package/dist/server/server/agent/timeline-projection.d.ts +74 -0
  314. package/dist/server/server/agent/timeline-projection.js +467 -0
  315. package/dist/server/server/agent/timeline-prompt-index.d.ts +12 -0
  316. package/dist/server/server/agent/timeline-prompt-index.js +23 -0
  317. package/dist/server/server/agent/tools/paseo-tool-serialization.d.ts +4 -0
  318. package/dist/server/server/agent/tools/paseo-tool-serialization.js +58 -0
  319. package/dist/server/server/agent/tools/paseo-tools.d.ts +62 -0
  320. package/dist/server/server/agent/tools/paseo-tools.js +2445 -0
  321. package/dist/server/server/agent/tools/types.d.ts +39 -0
  322. package/dist/server/server/agent/tools/types.js +2 -0
  323. package/dist/server/server/agent/tts-debug.d.ts +8 -0
  324. package/dist/server/server/agent/tts-debug.js +24 -0
  325. package/dist/server/server/agent/tts-manager.d.ts +41 -0
  326. package/dist/server/server/agent/tts-manager.js +375 -0
  327. package/dist/server/server/agent-attention-policy.d.ts +29 -0
  328. package/dist/server/server/agent-attention-policy.js +36 -0
  329. package/dist/server/server/agent-history-search.d.ts +48 -0
  330. package/dist/server/server/agent-history-search.js +129 -0
  331. package/dist/server/server/atomic-file.d.ts +3 -0
  332. package/dist/server/server/atomic-file.js +19 -0
  333. package/dist/server/server/auth.d.ts +38 -0
  334. package/dist/server/server/auth.js +122 -0
  335. package/dist/server/server/authorization/index.d.ts +18 -0
  336. package/dist/server/server/authorization/index.js +47 -0
  337. package/dist/server/server/authorization/operation-permissions.d.ts +8 -0
  338. package/dist/server/server/authorization/operation-permissions.js +438 -0
  339. package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
  340. package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +64 -0
  341. package/dist/server/server/auto-archive-on-merge/index.d.ts +13 -0
  342. package/dist/server/server/auto-archive-on-merge/index.js +77 -0
  343. package/dist/server/server/bootstrap.d.ts +166 -0
  344. package/dist/server/server/bootstrap.js +1388 -0
  345. package/dist/server/server/browser-tools/broker.d.ts +45 -0
  346. package/dist/server/server/browser-tools/broker.js +390 -0
  347. package/dist/server/server/browser-tools/errors.d.ts +22 -0
  348. package/dist/server/server/browser-tools/errors.js +27 -0
  349. package/dist/server/server/browser-tools/policy.d.ts +10 -0
  350. package/dist/server/server/browser-tools/policy.js +16 -0
  351. package/dist/server/server/browser-tools/tools.d.ts +16 -0
  352. package/dist/server/server/browser-tools/tools.js +796 -0
  353. package/dist/server/server/checkout/status-projection.d.ts +19 -0
  354. package/dist/server/server/checkout/status-projection.js +127 -0
  355. package/dist/server/server/checkout-diff-manager.d.ts +48 -0
  356. package/dist/server/server/checkout-diff-manager.js +284 -0
  357. package/dist/server/server/checkout-git-utils.d.ts +11 -0
  358. package/dist/server/server/checkout-git-utils.js +34 -0
  359. package/dist/server/server/client-message-id.d.ts +3 -0
  360. package/dist/server/server/client-message-id.js +12 -0
  361. package/dist/server/server/config.d.ts +26 -0
  362. package/dist/server/server/config.js +594 -0
  363. package/dist/server/server/connection-offer.d.ts +20 -0
  364. package/dist/server/server/connection-offer.js +59 -0
  365. package/dist/server/server/creation/index.d.ts +41 -0
  366. package/dist/server/server/creation/index.js +250 -0
  367. package/dist/server/server/daemon-config-store.d.ts +63 -0
  368. package/dist/server/server/daemon-config-store.js +524 -0
  369. package/dist/server/server/daemon-keypair.d.ts +8 -0
  370. package/dist/server/server/daemon-keypair.js +42 -0
  371. package/dist/server/server/daemon-version.d.ts +5 -0
  372. package/dist/server/server/daemon-version.js +22 -0
  373. package/dist/server/server/daemon-worker.d.ts +2 -0
  374. package/dist/server/server/daemon-worker.js +287 -0
  375. package/dist/server/server/dictation/dictation-stream-manager.d.ts +88 -0
  376. package/dist/server/server/dictation/dictation-stream-manager.js +578 -0
  377. package/dist/server/server/directory-sync/index.d.ts +45 -0
  378. package/dist/server/server/directory-sync/index.js +98 -0
  379. package/dist/server/server/directory-sync/internal/versioned-collection.d.ts +56 -0
  380. package/dist/server/server/directory-sync/internal/versioned-collection.js +94 -0
  381. package/dist/server/server/exports.d.ts +24 -0
  382. package/dist/server/server/exports.js +24 -0
  383. package/dist/server/server/file-download/token-store.d.ts +24 -0
  384. package/dist/server/server/file-download/token-store.js +40 -0
  385. package/dist/server/server/file-explorer/observer.d.ts +32 -0
  386. package/dist/server/server/file-explorer/observer.js +130 -0
  387. package/dist/server/server/file-explorer/service.d.ts +125 -0
  388. package/dist/server/server/file-explorer/service.js +663 -0
  389. package/dist/server/server/file-observer/index.d.ts +43 -0
  390. package/dist/server/server/file-observer/index.js +114 -0
  391. package/dist/server/server/file-observer/internal/contracts.d.ts +26 -0
  392. package/dist/server/server/file-observer/internal/contracts.js +2 -0
  393. package/dist/server/server/file-observer/internal/linux.d.ts +4 -0
  394. package/dist/server/server/file-observer/internal/linux.js +260 -0
  395. package/dist/server/server/file-observer/internal/native-recursive.d.ts +9 -0
  396. package/dist/server/server/file-observer/internal/native-recursive.js +577 -0
  397. package/dist/server/server/file-observer/internal/observation.d.ts +21 -0
  398. package/dist/server/server/file-observer/internal/observation.js +129 -0
  399. package/dist/server/server/file-observer/internal/paths.d.ts +10 -0
  400. package/dist/server/server/file-observer/internal/paths.js +43 -0
  401. package/dist/server/server/file-upload/index.d.ts +27 -0
  402. package/dist/server/server/file-upload/index.js +158 -0
  403. package/dist/server/server/git-metadata-event-rules.d.ts +123 -0
  404. package/dist/server/server/git-metadata-event-rules.js +152 -0
  405. package/dist/server/server/hostnames.d.ts +13 -0
  406. package/dist/server/server/hostnames.js +94 -0
  407. package/dist/server/server/hub/daemon-executions.d.ts +89 -0
  408. package/dist/server/server/hub/daemon-executions.js +287 -0
  409. package/dist/server/server/hub/execution-controller.d.ts +30 -0
  410. package/dist/server/server/hub/execution-controller.js +220 -0
  411. package/dist/server/server/hub/relationship-controller.d.ts +116 -0
  412. package/dist/server/server/hub/relationship-controller.js +534 -0
  413. package/dist/server/server/hub/relationship-remote.d.ts +68 -0
  414. package/dist/server/server/hub/relationship-remote.js +159 -0
  415. package/dist/server/server/hub/relationship-retry.d.ts +7 -0
  416. package/dist/server/server/hub/relationship-retry.js +15 -0
  417. package/dist/server/server/json-utils.d.ts +11 -0
  418. package/dist/server/server/json-utils.js +45 -0
  419. package/dist/server/server/lifecycle-reasons.d.ts +4 -0
  420. package/dist/server/server/lifecycle-reasons.js +6 -0
  421. package/dist/server/server/logger.d.ts +29 -0
  422. package/dist/server/server/logger.js +127 -0
  423. package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
  424. package/dist/server/server/managed-processes/managed-processes.js +326 -0
  425. package/dist/server/server/messages.d.ts +9 -0
  426. package/dist/server/server/messages.js +29 -0
  427. package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
  428. package/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
  429. package/dist/server/server/orchestration-skills/index.d.ts +18 -0
  430. package/dist/server/server/orchestration-skills/index.js +18 -0
  431. package/dist/server/server/orchestration-skills/internal/controller.d.ts +39 -0
  432. package/dist/server/server/orchestration-skills/internal/controller.js +108 -0
  433. package/dist/server/server/orchestration-skills/internal/operations.d.ts +43 -0
  434. package/dist/server/server/orchestration-skills/internal/operations.js +178 -0
  435. package/dist/server/server/orchestration-skills/internal/paths.d.ts +4 -0
  436. package/dist/server/server/orchestration-skills/internal/paths.js +21 -0
  437. package/dist/server/server/orchestration-skills/internal/selection-store.d.ts +12 -0
  438. package/dist/server/server/orchestration-skills/internal/selection-store.js +39 -0
  439. package/dist/server/server/orchestration-skills/internal/sync.d.ts +21 -0
  440. package/dist/server/server/orchestration-skills/internal/sync.js +177 -0
  441. package/dist/server/server/orchestration-skills/internal/transaction.d.ts +22 -0
  442. package/dist/server/server/orchestration-skills/internal/transaction.js +483 -0
  443. package/dist/server/server/package-version.d.ts +19 -0
  444. package/dist/server/server/package-version.js +60 -0
  445. package/dist/server/server/pagination/cursor.d.ts +16 -0
  446. package/dist/server/server/pagination/cursor.js +62 -0
  447. package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
  448. package/dist/server/server/pagination/sortable-pager.js +68 -0
  449. package/dist/server/server/pairing-offer.d.ts +18 -0
  450. package/dist/server/server/pairing-offer.js +47 -0
  451. package/dist/server/server/pairing-qr.d.ts +2 -0
  452. package/dist/server/server/pairing-qr.js +15 -0
  453. package/dist/server/server/paseo-env.d.ts +13 -0
  454. package/dist/server/server/paseo-env.js +54 -0
  455. package/dist/server/server/paseo-home.d.ts +2 -0
  456. package/dist/server/server/paseo-home.js +19 -0
  457. package/dist/server/server/paseo-worktree-service.d.ts +45 -0
  458. package/dist/server/server/paseo-worktree-service.js +191 -0
  459. package/dist/server/server/path-utils.d.ts +5 -0
  460. package/dist/server/server/path-utils.js +34 -0
  461. package/dist/server/server/persisted-config.d.ts +397 -0
  462. package/dist/server/server/persisted-config.js +411 -0
  463. package/dist/server/server/persistence-hooks.d.ts +32 -0
  464. package/dist/server/server/persistence-hooks.js +96 -0
  465. package/dist/server/server/pid-lock.d.ts +44 -0
  466. package/dist/server/server/pid-lock.js +285 -0
  467. package/dist/server/server/plugins/compiler-imports.d.ts +13 -0
  468. package/dist/server/server/plugins/compiler-imports.js +90 -0
  469. package/dist/server/server/plugins/compiler.d.ts +10 -0
  470. package/dist/server/server/plugins/compiler.js +354 -0
  471. package/dist/server/server/plugins/daemon-transport.d.ts +9 -0
  472. package/dist/server/server/plugins/daemon-transport.js +68 -0
  473. package/dist/server/server/plugins/index.d.ts +102 -0
  474. package/dist/server/server/plugins/index.js +575 -0
  475. package/dist/server/server/plugins/lifecycle/index.d.ts +40 -0
  476. package/dist/server/server/plugins/lifecycle/index.js +200 -0
  477. package/dist/server/server/plugins/managed-source.d.ts +50 -0
  478. package/dist/server/server/plugins/managed-source.js +327 -0
  479. package/dist/server/server/plugins/manifest.d.ts +12 -0
  480. package/dist/server/server/plugins/manifest.js +26 -0
  481. package/dist/server/server/plugins/plugin-process-protocol.d.ts +120 -0
  482. package/dist/server/server/plugins/plugin-process-protocol.js +154 -0
  483. package/dist/server/server/plugins/plugin-process.d.ts +2 -0
  484. package/dist/server/server/plugins/plugin-process.js +419 -0
  485. package/dist/server/server/plugins/plugin-sdk-specifiers.d.ts +5 -0
  486. package/dist/server/server/plugins/plugin-sdk-specifiers.js +23 -0
  487. package/dist/server/server/plugins/plugin-session-identity.d.ts +4 -0
  488. package/dist/server/server/plugins/plugin-session-identity.js +11 -0
  489. package/dist/server/server/plugins/preparation.d.ts +4 -0
  490. package/dist/server/server/plugins/preparation.js +49 -0
  491. package/dist/server/server/plugins/provider-icon.d.ts +2 -0
  492. package/dist/server/server/plugins/provider-icon.js +55 -0
  493. package/dist/server/server/plugins/runtime.d.ts +83 -0
  494. package/dist/server/server/plugins/runtime.js +836 -0
  495. package/dist/server/server/plugins/session-socket.d.ts +23 -0
  496. package/dist/server/server/plugins/session-socket.js +82 -0
  497. package/dist/server/server/plugins/settings/index.d.ts +96 -0
  498. package/dist/server/server/plugins/settings/index.js +115 -0
  499. package/dist/server/server/private-files.d.ts +6 -0
  500. package/dist/server/server/private-files.js +37 -0
  501. package/dist/server/server/process-diagnostics.d.ts +17 -0
  502. package/dist/server/server/process-diagnostics.js +22 -0
  503. package/dist/server/server/project-directory-service.d.ts +30 -0
  504. package/dist/server/server/project-directory-service.js +120 -0
  505. package/dist/server/server/project-key.d.ts +14 -0
  506. package/dist/server/server/project-key.js +44 -0
  507. package/dist/server/server/push/index.d.ts +16 -0
  508. package/dist/server/server/push/index.js +26 -0
  509. package/dist/server/server/push/push-service.d.ts +19 -0
  510. package/dist/server/server/push/push-service.js +66 -0
  511. package/dist/server/server/push/token-store.d.ts +22 -0
  512. package/dist/server/server/push/token-store.js +125 -0
  513. package/dist/server/server/relay-runtime.d.ts +27 -0
  514. package/dist/server/server/relay-runtime.js +46 -0
  515. package/dist/server/server/relay-transport.d.ts +33 -0
  516. package/dist/server/server/relay-transport.js +481 -0
  517. package/dist/server/server/request-receipts/index.d.ts +33 -0
  518. package/dist/server/server/request-receipts/index.js +131 -0
  519. package/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
  520. package/dist/server/server/resolve-workspace-id-for-path.js +41 -0
  521. package/dist/server/server/resolve-worktree-creation-intent.d.ts +44 -0
  522. package/dist/server/server/resolve-worktree-creation-intent.js +186 -0
  523. package/dist/server/server/schedule/cron.d.ts +4 -0
  524. package/dist/server/server/schedule/cron.js +83 -0
  525. package/dist/server/server/schedule/service.d.ts +75 -0
  526. package/dist/server/server/schedule/service.js +810 -0
  527. package/dist/server/server/schedule/store.d.ts +27 -0
  528. package/dist/server/server/schedule/store.js +190 -0
  529. package/dist/server/server/script-health-monitor.d.ts +39 -0
  530. package/dist/server/server/script-health-monitor.js +159 -0
  531. package/dist/server/server/script-proxy.d.ts +3 -0
  532. package/dist/server/server/script-proxy.js +2 -0
  533. package/dist/server/server/script-route-branch-handler.d.ts +10 -0
  534. package/dist/server/server/script-route-branch-handler.js +11 -0
  535. package/dist/server/server/script-status-projection.d.ts +36 -0
  536. package/dist/server/server/script-status-projection.js +200 -0
  537. package/dist/server/server/server-id.d.ts +17 -0
  538. package/dist/server/server/server-id.js +68 -0
  539. package/dist/server/server/service-proxy.d.ts +237 -0
  540. package/dist/server/server/service-proxy.js +679 -0
  541. package/dist/server/server/session/agent-config/agent-config-session.d.ts +75 -0
  542. package/dist/server/server/session/agent-config/agent-config-session.js +151 -0
  543. package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +65 -0
  544. package/dist/server/server/session/agent-updates/agent-updates-service.js +266 -0
  545. package/dist/server/server/session/checkout/checkout-session.d.ts +150 -0
  546. package/dist/server/server/session/checkout/checkout-session.js +1187 -0
  547. package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
  548. package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
  549. package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +34 -0
  550. package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +90 -0
  551. package/dist/server/server/session/daemon/daemon-self-updater.d.ts +33 -0
  552. package/dist/server/server/session/daemon/daemon-self-updater.js +60 -0
  553. package/dist/server/server/session/daemon/daemon-session.d.ts +90 -0
  554. package/dist/server/server/session/daemon/daemon-session.js +224 -0
  555. package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
  556. package/dist/server/server/session/daemon/diagnostics.js +431 -0
  557. package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
  558. package/dist/server/server/session/daemon/install-origin.js +64 -0
  559. package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
  560. package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
  561. package/dist/server/server/session/files/workspace-files-session.d.ts +55 -0
  562. package/dist/server/server/session/files/workspace-files-session.js +359 -0
  563. package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +32 -0
  564. package/dist/server/server/session/git-mutation/git-mutation-service.js +74 -0
  565. package/dist/server/server/session/project-config/project-config-session.d.ts +35 -0
  566. package/dist/server/server/session/project-config/project-config-session.js +143 -0
  567. package/dist/server/server/session/project-config/worktree-setup-commit-status.d.ts +6 -0
  568. package/dist/server/server/session/project-config/worktree-setup-commit-status.js +38 -0
  569. package/dist/server/server/session/provider/provider-catalog-session.d.ts +78 -0
  570. package/dist/server/server/session/provider/provider-catalog-session.js +388 -0
  571. package/dist/server/server/session/schedule/schedule-session.d.ts +47 -0
  572. package/dist/server/server/session/schedule/schedule-session.js +188 -0
  573. package/dist/server/server/session/voice/voice-session.d.ts +166 -0
  574. package/dist/server/server/session/voice/voice-session.js +904 -0
  575. package/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
  576. package/dist/server/server/session/voice/voice-turn-controller.js +393 -0
  577. package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +42 -0
  578. package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +170 -0
  579. package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +59 -0
  580. package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +326 -0
  581. package/dist/server/server/session/workspace-recovery/workspace-recovery-service.d.ts +30 -0
  582. package/dist/server/server/session/workspace-recovery/workspace-recovery-service.js +178 -0
  583. package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +54 -0
  584. package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +156 -0
  585. package/dist/server/server/session.d.ts +555 -0
  586. package/dist/server/server/session.js +6540 -0
  587. package/dist/server/server/speech/audio.d.ts +10 -0
  588. package/dist/server/server/speech/audio.js +101 -0
  589. package/dist/server/server/speech/provider-resolver.d.ts +3 -0
  590. package/dist/server/server/speech/provider-resolver.js +7 -0
  591. package/dist/server/server/speech/providers/local/config.d.ts +30 -0
  592. package/dist/server/server/speech/providers/local/config.js +134 -0
  593. package/dist/server/server/speech/providers/local/models.d.ts +12 -0
  594. package/dist/server/server/speech/providers/local/models.js +18 -0
  595. package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
  596. package/dist/server/server/speech/providers/local/runtime.js +135 -0
  597. package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
  598. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +56 -0
  599. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +74 -0
  600. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +17 -0
  601. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +145 -0
  602. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
  603. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
  604. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
  605. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -0
  606. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
  607. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +137 -0
  608. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
  609. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +133 -0
  610. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
  611. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  612. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
  613. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +101 -0
  614. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
  615. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
  616. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
  617. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
  618. package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
  619. package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
  620. package/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
  621. package/dist/server/server/speech/providers/local/worker-client.js +590 -0
  622. package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
  623. package/dist/server/server/speech/providers/local/worker-process.js +270 -0
  624. package/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
  625. package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
  626. package/dist/server/server/speech/providers/openai/config.d.ts +19 -0
  627. package/dist/server/server/speech/providers/openai/config.js +148 -0
  628. package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
  629. package/dist/server/server/speech/providers/openai/runtime.js +102 -0
  630. package/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
  631. package/dist/server/server/speech/providers/openai/stt.js +209 -0
  632. package/dist/server/server/speech/providers/openai/tts.d.ts +19 -0
  633. package/dist/server/server/speech/providers/openai/tts.js +48 -0
  634. package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
  635. package/dist/server/server/speech/speech-config-resolver.js +132 -0
  636. package/dist/server/server/speech/speech-provider.d.ts +59 -0
  637. package/dist/server/server/speech/speech-provider.js +2 -0
  638. package/dist/server/server/speech/speech-runtime.d.ts +45 -0
  639. package/dist/server/server/speech/speech-runtime.js +571 -0
  640. package/dist/server/server/speech/speech-types.d.ts +22 -0
  641. package/dist/server/server/speech/speech-types.js +8 -0
  642. package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
  643. package/dist/server/server/speech/turn-detection-provider.js +2 -0
  644. package/dist/server/server/utils/diff-highlighter.d.ts +57 -0
  645. package/dist/server/server/utils/diff-highlighter.js +304 -0
  646. package/dist/server/server/voice-config.d.ts +15 -0
  647. package/dist/server/server/voice-config.js +54 -0
  648. package/dist/server/server/voice-permission-policy.d.ts +4 -0
  649. package/dist/server/server/voice-permission-policy.js +13 -0
  650. package/dist/server/server/voice-types.d.ts +12 -0
  651. package/dist/server/server/voice-types.js +2 -0
  652. package/dist/server/server/watcher-liveness-canary.d.ts +11 -0
  653. package/dist/server/server/watcher-liveness-canary.js +53 -0
  654. package/dist/server/server/web-ui.d.ts +10 -0
  655. package/dist/server/server/web-ui.js +205 -0
  656. package/dist/server/server/websocket/encrypted-relay-socket.d.ts +23 -0
  657. package/dist/server/server/websocket/encrypted-relay-socket.js +64 -0
  658. package/dist/server/server/websocket/physical-socket.d.ts +36 -0
  659. package/dist/server/server/websocket/physical-socket.js +95 -0
  660. package/dist/server/server/websocket/runtime-metrics.d.ts +95 -0
  661. package/dist/server/server/websocket/runtime-metrics.js +148 -0
  662. package/dist/server/server/websocket-server.d.ts +214 -0
  663. package/dist/server/server/websocket-server.js +2258 -0
  664. package/dist/server/server/workspace-archive-service.d.ts +63 -0
  665. package/dist/server/server/workspace-archive-service.js +355 -0
  666. package/dist/server/server/workspace-auto-name.d.ts +55 -0
  667. package/dist/server/server/workspace-auto-name.js +127 -0
  668. package/dist/server/server/workspace-automation-gate.d.ts +16 -0
  669. package/dist/server/server/workspace-automation-gate.js +35 -0
  670. package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
  671. package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
  672. package/dist/server/server/workspace-directory.d.ts +99 -0
  673. package/dist/server/server/workspace-directory.js +467 -0
  674. package/dist/server/server/workspace-git-fetch.d.ts +33 -0
  675. package/dist/server/server/workspace-git-fetch.js +108 -0
  676. package/dist/server/server/workspace-git-metadata.d.ts +8 -0
  677. package/dist/server/server/workspace-git-metadata.js +24 -0
  678. package/dist/server/server/workspace-git-service.d.ts +348 -0
  679. package/dist/server/server/workspace-git-service.js +2534 -0
  680. package/dist/server/server/workspace-labels/index.d.ts +14 -0
  681. package/dist/server/server/workspace-labels/index.js +10 -0
  682. package/dist/server/server/workspace-labels/internal/catalog-store.d.ts +50 -0
  683. package/dist/server/server/workspace-labels/internal/catalog-store.js +203 -0
  684. package/dist/server/server/workspace-labels/internal/sequence.d.ts +43 -0
  685. package/dist/server/server/workspace-labels/internal/sequence.js +80 -0
  686. package/dist/server/server/workspace-labels/internal/service.d.ts +57 -0
  687. package/dist/server/server/workspace-labels/internal/service.js +224 -0
  688. package/dist/server/server/workspace-reconciliation-service.d.ts +103 -0
  689. package/dist/server/server/workspace-reconciliation-service.js +379 -0
  690. package/dist/server/server/workspace-registry-bootstrap-legacy.d.ts +21 -0
  691. package/dist/server/server/workspace-registry-bootstrap-legacy.js +57 -0
  692. package/dist/server/server/workspace-registry-bootstrap.d.ts +14 -0
  693. package/dist/server/server/workspace-registry-bootstrap.js +155 -0
  694. package/dist/server/server/workspace-registry-model.d.ts +56 -0
  695. package/dist/server/server/workspace-registry-model.js +150 -0
  696. package/dist/server/server/workspace-registry.d.ts +228 -0
  697. package/dist/server/server/workspace-registry.js +468 -0
  698. package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  699. package/dist/server/server/workspace-script-runtime-store.js +78 -0
  700. package/dist/server/server/workspace-service-env.d.ts +18 -0
  701. package/dist/server/server/workspace-service-env.js +85 -0
  702. package/dist/server/server/workspace-service-port-allocator.d.ts +11 -0
  703. package/dist/server/server/workspace-service-port-allocator.js +89 -0
  704. package/dist/server/server/workspace-service-port-registry.d.ts +24 -0
  705. package/dist/server/server/workspace-service-port-registry.js +172 -0
  706. package/dist/server/server/workspace-setup-runtime.d.ts +7 -0
  707. package/dist/server/server/workspace-setup-runtime.js +30 -0
  708. package/dist/server/server/workspace-source.d.ts +7 -0
  709. package/dist/server/server/workspace-source.js +15 -0
  710. package/dist/server/server/worktree/commands.d.ts +55 -0
  711. package/dist/server/server/worktree/commands.js +99 -0
  712. package/dist/server/server/worktree-bootstrap.d.ts +86 -0
  713. package/dist/server/server/worktree-bootstrap.js +753 -0
  714. package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
  715. package/dist/server/server/worktree-branch-name-generator.js +89 -0
  716. package/dist/server/server/worktree-core.d.ts +32 -0
  717. package/dist/server/server/worktree-core.js +114 -0
  718. package/dist/server/server/worktree-errors.d.ts +12 -0
  719. package/dist/server/server/worktree-errors.js +28 -0
  720. package/dist/server/server/worktree-session.d.ts +165 -0
  721. package/dist/server/server/worktree-session.js +594 -0
  722. package/dist/server/services/forge-cli-command.d.ts +128 -0
  723. package/dist/server/services/forge-cli-command.js +212 -0
  724. package/dist/server/services/forge-registry.d.ts +25 -0
  725. package/dist/server/services/forge-registry.js +155 -0
  726. package/dist/server/services/forge-resolver.d.ts +38 -0
  727. package/dist/server/services/forge-resolver.js +191 -0
  728. package/dist/server/services/forge-service.d.ts +430 -0
  729. package/dist/server/services/forge-service.js +50 -0
  730. package/dist/server/services/gitea-facts.d.ts +11 -0
  731. package/dist/server/services/gitea-facts.js +4 -0
  732. package/dist/server/services/gitea-service.d.ts +62 -0
  733. package/dist/server/services/gitea-service.js +1844 -0
  734. package/dist/server/services/github-facts.d.ts +27 -0
  735. package/dist/server/services/github-facts.js +4 -0
  736. package/dist/server/services/github-service.d.ts +76 -0
  737. package/dist/server/services/github-service.js +3297 -0
  738. package/dist/server/services/gitlab-facts.d.ts +26 -0
  739. package/dist/server/services/gitlab-facts.js +4 -0
  740. package/dist/server/services/gitlab-service.d.ts +43 -0
  741. package/dist/server/services/gitlab-service.js +1092 -0
  742. package/dist/server/services/quota-fetcher/manifest.d.ts +5 -0
  743. package/dist/server/services/quota-fetcher/manifest.js +118 -0
  744. package/dist/server/services/quota-fetcher/provider.d.ts +18 -0
  745. package/dist/server/services/quota-fetcher/provider.js +2 -0
  746. package/dist/server/services/quota-fetcher/providers/claude.d.ts +40 -0
  747. package/dist/server/services/quota-fetcher/providers/claude.js +389 -0
  748. package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
  749. package/dist/server/services/quota-fetcher/providers/codex.js +167 -0
  750. package/dist/server/services/quota-fetcher/providers/copilot.d.ts +21 -0
  751. package/dist/server/services/quota-fetcher/providers/copilot.js +77 -0
  752. package/dist/server/services/quota-fetcher/providers/cursor.d.ts +19 -0
  753. package/dist/server/services/quota-fetcher/providers/cursor.js +185 -0
  754. package/dist/server/services/quota-fetcher/providers/grok.d.ts +23 -0
  755. package/dist/server/services/quota-fetcher/providers/grok.js +137 -0
  756. package/dist/server/services/quota-fetcher/providers/kimi.d.ts +23 -0
  757. package/dist/server/services/quota-fetcher/providers/kimi.js +260 -0
  758. package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
  759. package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
  760. package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
  761. package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
  762. package/dist/server/services/quota-fetcher/service.d.ts +34 -0
  763. package/dist/server/services/quota-fetcher/service.js +74 -0
  764. package/dist/server/services/quota-fetcher/usage.d.ts +39 -0
  765. package/dist/server/services/quota-fetcher/usage.js +78 -0
  766. package/dist/server/skills/paseo/SKILL.md +129 -0
  767. package/dist/server/skills/paseo-advisor/SKILL.md +63 -0
  768. package/dist/server/skills/paseo-committee/SKILL.md +46 -0
  769. package/dist/server/skills/paseo-handoff/SKILL.md +65 -0
  770. package/dist/server/skills/paseo-help/SKILL.md +92 -0
  771. package/dist/server/skills/paseo-plugin/SKILL.md +639 -0
  772. package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +21 -0
  773. package/dist/server/terminal/activity/terminal-activity-tracker.js +65 -0
  774. package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
  775. package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
  776. package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
  777. package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
  778. package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
  779. package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
  780. package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
  781. package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
  782. package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
  783. package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
  784. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
  785. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +81 -0
  786. package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
  787. package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
  788. package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
  789. package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
  790. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
  791. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
  792. package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  793. package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  794. package/dist/server/terminal/terminal-capture.d.ts +12 -0
  795. package/dist/server/terminal/terminal-capture.js +43 -0
  796. package/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
  797. package/dist/server/terminal/terminal-manager-factory.js +5 -0
  798. package/dist/server/terminal/terminal-manager.d.ts +80 -0
  799. package/dist/server/terminal/terminal-manager.js +321 -0
  800. package/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
  801. package/dist/server/terminal/terminal-output-coalescer.js +73 -0
  802. package/dist/server/terminal/terminal-restore.d.ts +18 -0
  803. package/dist/server/terminal/terminal-restore.js +52 -0
  804. package/dist/server/terminal/terminal-session-controller.d.ts +90 -0
  805. package/dist/server/terminal/terminal-session-controller.js +849 -0
  806. package/dist/server/terminal/terminal-size-ownership.d.ts +9 -0
  807. package/dist/server/terminal/terminal-size-ownership.js +23 -0
  808. package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
  809. package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
  810. package/dist/server/terminal/terminal-worker-process.js +308 -0
  811. package/dist/server/terminal/terminal-worker-protocol.d.ts +121 -0
  812. package/dist/server/terminal/terminal-worker-protocol.js +2 -0
  813. package/dist/server/terminal/terminal.d.ts +151 -0
  814. package/dist/server/terminal/terminal.js +1234 -0
  815. package/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
  816. package/dist/server/terminal/worker-terminal-manager.js +688 -0
  817. package/dist/server/utils/build-metadata-prompt.d.ts +19 -0
  818. package/dist/server/utils/build-metadata-prompt.js +29 -0
  819. package/dist/server/utils/checkout-git.d.ts +317 -0
  820. package/dist/server/utils/checkout-git.js +2886 -0
  821. package/dist/server/utils/directory-suggestions.d.ts +29 -0
  822. package/dist/server/utils/directory-suggestions.js +596 -0
  823. package/dist/server/utils/git-command-runtime-metrics.d.ts +67 -0
  824. package/dist/server/utils/git-command-runtime-metrics.js +126 -0
  825. package/dist/server/utils/git-command-trace.d.ts +29 -0
  826. package/dist/server/utils/git-command-trace.js +74 -0
  827. package/dist/server/utils/git-process-scheduler.d.ts +34 -0
  828. package/dist/server/utils/git-process-scheduler.js +112 -0
  829. package/dist/server/utils/git-rev-parse-path.d.ts +3 -0
  830. package/dist/server/utils/git-rev-parse-path.js +21 -0
  831. package/dist/server/utils/paseo-config-file.d.ts +30 -0
  832. package/dist/server/utils/paseo-config-file.js +90 -0
  833. package/dist/server/utils/path.d.ts +27 -0
  834. package/dist/server/utils/path.js +156 -0
  835. package/dist/server/utils/project-custom-icon.d.ts +40 -0
  836. package/dist/server/utils/project-custom-icon.js +144 -0
  837. package/dist/server/utils/project-icon.d.ts +54 -0
  838. package/dist/server/utils/project-icon.js +445 -0
  839. package/dist/server/utils/promise-timeout.d.ts +9 -0
  840. package/dist/server/utils/promise-timeout.js +25 -0
  841. package/dist/server/utils/run-git-command.d.ts +59 -0
  842. package/dist/server/utils/run-git-command.js +393 -0
  843. package/dist/server/utils/spawn.d.ts +26 -0
  844. package/dist/server/utils/spawn.js +60 -0
  845. package/dist/server/utils/ssh-hostname.d.ts +8 -0
  846. package/dist/server/utils/ssh-hostname.js +60 -0
  847. package/dist/server/utils/string-command-shell.d.ts +13 -0
  848. package/dist/server/utils/string-command-shell.js +37 -0
  849. package/dist/server/utils/tree-kill.d.ts +19 -0
  850. package/dist/server/utils/tree-kill.js +77 -0
  851. package/dist/server/utils/windows-command.d.ts +15 -0
  852. package/dist/server/utils/windows-command.js +41 -0
  853. package/dist/server/utils/worktree-metadata.d.ts +77 -0
  854. package/dist/server/utils/worktree-metadata.js +280 -0
  855. package/dist/server/utils/worktree.d.ts +232 -0
  856. package/dist/server/utils/worktree.js +1193 -0
  857. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
  858. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
  859. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
  860. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js +1 -0
  861. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js.br +0 -0
  862. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js.gz +0 -0
  863. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js +1 -0
  864. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js.br +0 -0
  865. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js.gz +0 -0
  866. package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js +16819 -0
  867. package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js.br +0 -0
  868. package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js.gz +0 -0
  869. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js +1 -0
  870. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js.br +0 -0
  871. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js.gz +0 -0
  872. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js +3 -0
  873. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js.br +0 -0
  874. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js.gz +0 -0
  875. package/dist/server/web-ui/apple-touch-icon.png +0 -0
  876. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  877. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  878. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  879. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  880. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  881. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  882. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  883. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  884. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  885. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  886. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  887. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  888. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  889. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  890. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  891. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  892. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  893. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  894. package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  895. package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  896. package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  897. package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  898. package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  899. package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  900. package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
  901. package/dist/server/web-ui/favicon.ico +0 -0
  902. package/dist/server/web-ui/index.html +90 -0
  903. package/dist/server/web-ui/index.html.br +0 -0
  904. package/dist/server/web-ui/index.html.gz +0 -0
  905. package/dist/server/web-ui/manifest.json +27 -0
  906. package/dist/server/web-ui/manifest.json.br +0 -0
  907. package/dist/server/web-ui/manifest.json.gz +0 -0
  908. package/dist/server/web-ui/metadata.json +1 -0
  909. package/dist/server/web-ui/metadata.json.br +1 -0
  910. package/dist/server/web-ui/metadata.json.gz +0 -0
  911. package/dist/server/web-ui/pwa-icon-192.png +0 -0
  912. package/dist/server/web-ui/pwa-icon-512.png +0 -0
  913. package/dist/server/web-ui/robots.txt +2 -0
  914. package/dist/src/executable-resolution/executable-resolution.js +121 -0
  915. package/dist/src/executable-resolution/windows.js +65 -0
  916. package/dist/src/server/agent/provider-launch-config.js +167 -0
  917. package/dist/src/server/paseo-env.js +54 -0
  918. package/dist/src/server/paseo-home.js +19 -0
  919. package/dist/src/server/persisted-config.js +411 -0
  920. package/dist/src/server/pid-lock.js +285 -0
  921. package/dist/src/server/private-files.js +37 -0
  922. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  923. package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  924. package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  925. package/dist/src/utils/spawn.js +60 -0
  926. package/dist/src/utils/tree-kill.js +77 -0
  927. package/dist/src/utils/windows-command.js +41 -0
  928. package/package.json +125 -0
@@ -0,0 +1,1193 @@
1
+ import { execFile } from "child_process";
2
+ import { promisify } from "util";
3
+ import { constants as fsConstants, existsSync, mkdirSync, realpathSync, rmSync, statSync, } from "fs";
4
+ import { copyFile, rm, stat } from "fs/promises";
5
+ import { join, basename, dirname, isAbsolute, resolve, sep } from "path";
6
+ import net from "node:net";
7
+ import { createHash } from "node:crypto";
8
+ import stripAnsi from "strip-ansi";
9
+ import { buildStringCommandShellInvocation, createStringCommandShellEnv, } from "./string-command-shell.js";
10
+ import { readPaseoConfigJson, resolvePaseoConfigPath } from "./paseo-config-file.js";
11
+ export { PaseoConfigRawSchema, PaseoLifecycleCommandRawSchema, PaseoScriptEntryRawSchema, PaseoWorktreeConfigRawSchema, PaseoConfigSchema, } from "@camerontaylor/paseo-protocol/paseo-config-schema";
12
+ import { PaseoConfigSchema } from "@camerontaylor/paseo-protocol/paseo-config-schema";
13
+ import { createPaseoWorktreeChangeRequestHint, normalizeBaseRefName, readPaseoWorktreeMetadata, readPaseoWorktreeRuntimePort, writePaseoWorktreeMetadata, writePaseoWorktreeRuntimeMetadata, } from "./worktree-metadata.js";
14
+ import { runGitCommand } from "./run-git-command.js";
15
+ import { spawnProcess } from "./spawn.js";
16
+ import { resolvePaseoHome } from "../server/paseo-home.js";
17
+ import { createExternalProcessEnv } from "../server/paseo-env.js";
18
+ import { parseGitRevParsePath, resolveGitRevParsePath } from "./git-rev-parse-path.js";
19
+ import { expandTilde, getRealpathAwareRelativePath, isPathInsideRoot } from "./path.js";
20
+ import { terminateWithTreeKill } from "./tree-kill.js";
21
+ export { slugify, validateBranchSlug } from "@camerontaylor/paseo-protocol/branch-slug";
22
+ const execFileAsync = promisify(execFile);
23
+ const READ_ONLY_GIT_ENV = {
24
+ GIT_OPTIONAL_LOCKS: "0",
25
+ };
26
+ export function isServiceScript(config) {
27
+ return "type" in config && config.type === "service";
28
+ }
29
+ export class WorktreeSetupError extends Error {
30
+ constructor(message, results) {
31
+ super(message);
32
+ this.name = "WorktreeSetupError";
33
+ this.results = results;
34
+ }
35
+ }
36
+ export class WorktreeTeardownError extends Error {
37
+ constructor(message, results) {
38
+ super(message);
39
+ this.name = "WorktreeTeardownError";
40
+ this.results = results;
41
+ }
42
+ }
43
+ export class BranchAlreadyCheckedOutError extends Error {
44
+ constructor(branchName) {
45
+ super(`Branch already checked out: ${branchName}`);
46
+ this.name = "BranchAlreadyCheckedOutError";
47
+ this.branchName = branchName;
48
+ }
49
+ }
50
+ export class UnknownBranchError extends Error {
51
+ constructor(params) {
52
+ super(`Unknown branch: ${params.branchName}`);
53
+ this.name = "UnknownBranchError";
54
+ this.branchName = params.branchName;
55
+ this.cwd = params.cwd;
56
+ }
57
+ }
58
+ export class InvalidGitBranchNameError extends Error {
59
+ constructor(branchName) {
60
+ super(`Invalid branch name: Git rejected ref name '${branchName}'`);
61
+ this.name = "InvalidGitBranchNameError";
62
+ this.branchName = branchName;
63
+ }
64
+ }
65
+ export function readPaseoConfig(repoRoot) {
66
+ try {
67
+ const json = readPaseoConfigJson(repoRoot);
68
+ if (json === null) {
69
+ return { ok: true, config: null };
70
+ }
71
+ return { ok: true, config: PaseoConfigSchema.parse(json) };
72
+ }
73
+ catch (error) {
74
+ return { ok: false, configPath: resolvePaseoConfigPath(repoRoot), error };
75
+ }
76
+ }
77
+ export function paseoConfigParseError(failure) {
78
+ const detail = failure.error instanceof Error ? failure.error.message : String(failure.error);
79
+ return new Error(`Failed to parse paseo.json at ${failure.configPath}: ${detail}`, {
80
+ cause: failure.error,
81
+ });
82
+ }
83
+ function readPaseoConfigOrThrow(repoRoot) {
84
+ const result = readPaseoConfig(repoRoot);
85
+ if (!result.ok) {
86
+ throw paseoConfigParseError(result);
87
+ }
88
+ return result.config;
89
+ }
90
+ export function getWorktreeSetupCommands(repoRoot) {
91
+ return readPaseoConfigOrThrow(repoRoot)?.worktree?.setup ?? [];
92
+ }
93
+ export function getWorktreeTeardownCommands(repoRoot) {
94
+ return readPaseoConfigOrThrow(repoRoot)?.worktree?.teardown ?? [];
95
+ }
96
+ export function getWorktreeTerminalSpecs(repoRoot) {
97
+ const terminals = readPaseoConfigOrThrow(repoRoot)?.worktree?.terminals;
98
+ if (!Array.isArray(terminals) || terminals.length === 0) {
99
+ return [];
100
+ }
101
+ const specs = [];
102
+ for (const terminal of terminals) {
103
+ if (!terminal || typeof terminal !== "object") {
104
+ continue;
105
+ }
106
+ const rawCommand = terminal.command;
107
+ if (typeof rawCommand !== "string") {
108
+ continue;
109
+ }
110
+ const command = rawCommand.trim();
111
+ if (!command) {
112
+ continue;
113
+ }
114
+ const rawName = terminal.name;
115
+ const name = typeof rawName === "string" && rawName.trim().length > 0 ? rawName.trim() : undefined;
116
+ specs.push({
117
+ ...(name ? { name } : {}),
118
+ command,
119
+ });
120
+ }
121
+ return specs;
122
+ }
123
+ export function getScriptConfigs(config) {
124
+ const scripts = config?.scripts;
125
+ if (!scripts || typeof scripts !== "object") {
126
+ return new Map();
127
+ }
128
+ const result = new Map();
129
+ for (const [name, entry] of Object.entries(scripts)) {
130
+ if (!entry || typeof entry !== "object") {
131
+ continue;
132
+ }
133
+ const rawCommand = entry.command;
134
+ if (typeof rawCommand !== "string") {
135
+ continue;
136
+ }
137
+ const command = rawCommand.trim();
138
+ if (!command) {
139
+ continue;
140
+ }
141
+ const scriptConfig = entry.type === "service"
142
+ ? {
143
+ type: "service",
144
+ command,
145
+ }
146
+ : { command };
147
+ if (isServiceScript(scriptConfig) &&
148
+ typeof entry.port === "number" &&
149
+ Number.isFinite(entry.port)) {
150
+ scriptConfig.port = entry.port;
151
+ }
152
+ result.set(name, scriptConfig);
153
+ }
154
+ return result;
155
+ }
156
+ export function processCarriageReturns(text) {
157
+ if (!text.includes("\r")) {
158
+ return text;
159
+ }
160
+ const output = [];
161
+ let line = [];
162
+ let cursor = 0;
163
+ const flushLine = () => {
164
+ output.push(line.join(""));
165
+ line = [];
166
+ cursor = 0;
167
+ };
168
+ for (let index = 0; index < text.length; index += 1) {
169
+ const char = text[index];
170
+ if (char === "\r") {
171
+ if (text[index + 1] === "\n") {
172
+ flushLine();
173
+ output.push("\n");
174
+ index += 1;
175
+ continue;
176
+ }
177
+ cursor = 0;
178
+ continue;
179
+ }
180
+ if (char === "\n") {
181
+ flushLine();
182
+ output.push("\n");
183
+ continue;
184
+ }
185
+ if (cursor < line.length) {
186
+ line[cursor] = char;
187
+ }
188
+ else {
189
+ line.push(char);
190
+ }
191
+ cursor += 1;
192
+ }
193
+ if (line.length > 0) {
194
+ output.push(line.join(""));
195
+ }
196
+ return output.join("");
197
+ }
198
+ async function execSetupCommand(command, options) {
199
+ const startedAt = Date.now();
200
+ const shellInvocation = buildStringCommandShellInvocation({ command });
201
+ try {
202
+ const { stdout, stderr } = await execFileAsync(shellInvocation.shell, shellInvocation.args, {
203
+ cwd: options.cwd,
204
+ env: options.env,
205
+ });
206
+ return {
207
+ command,
208
+ cwd: options.cwd,
209
+ stdout: stdout ?? "",
210
+ stderr: stderr ?? "",
211
+ exitCode: 0,
212
+ durationMs: Date.now() - startedAt,
213
+ };
214
+ }
215
+ catch (error) {
216
+ const execErr = error;
217
+ return {
218
+ command,
219
+ cwd: options.cwd,
220
+ stdout: execErr?.stdout ?? "",
221
+ stderr: execErr?.stderr ?? (error instanceof Error ? error.message : String(error)),
222
+ exitCode: typeof execErr?.code === "number" ? execErr.code : null,
223
+ durationMs: Date.now() - startedAt,
224
+ };
225
+ }
226
+ }
227
+ async function execSetupCommandStreamed(options) {
228
+ return new Promise((resolvePromise) => {
229
+ const startedAt = Date.now();
230
+ const stdoutChunks = [];
231
+ const stderrChunks = [];
232
+ let settled = false;
233
+ let termination = null;
234
+ const emitOutput = (stream, chunk) => {
235
+ const text = stripAnsi(chunk);
236
+ if (!text) {
237
+ return;
238
+ }
239
+ if (stream === "stdout") {
240
+ stdoutChunks.push(text);
241
+ }
242
+ else {
243
+ stderrChunks.push(text);
244
+ }
245
+ options.onEvent?.({
246
+ type: "output",
247
+ index: options.index,
248
+ total: options.total,
249
+ command: options.command,
250
+ cwd: options.cwd,
251
+ stream,
252
+ chunk: text,
253
+ });
254
+ };
255
+ const finish = async (exitCode) => {
256
+ if (settled) {
257
+ return;
258
+ }
259
+ settled = true;
260
+ options.signal?.removeEventListener("abort", abort);
261
+ await termination;
262
+ const result = {
263
+ command: options.command,
264
+ cwd: options.cwd,
265
+ stdout: stdoutChunks.join(""),
266
+ stderr: stderrChunks.join(""),
267
+ exitCode,
268
+ durationMs: Date.now() - startedAt,
269
+ };
270
+ options.onEvent?.({
271
+ type: "command_completed",
272
+ index: options.index,
273
+ total: options.total,
274
+ command: options.command,
275
+ cwd: options.cwd,
276
+ exitCode: result.exitCode,
277
+ durationMs: result.durationMs,
278
+ stdout: result.stdout,
279
+ stderr: result.stderr,
280
+ });
281
+ resolvePromise(result);
282
+ };
283
+ options.onEvent?.({
284
+ type: "command_started",
285
+ index: options.index,
286
+ total: options.total,
287
+ command: options.command,
288
+ cwd: options.cwd,
289
+ });
290
+ const shellInvocation = buildStringCommandShellInvocation({ command: options.command });
291
+ const child = spawnProcess(shellInvocation.shell, shellInvocation.args, {
292
+ cwd: options.cwd,
293
+ env: options.env,
294
+ shell: false,
295
+ stdio: ["ignore", "pipe", "pipe"],
296
+ });
297
+ const abort = () => {
298
+ termination ?? (termination = terminateWithTreeKill(child, {
299
+ gracefulTimeoutMs: 1000,
300
+ forceTimeoutMs: 1000,
301
+ }));
302
+ };
303
+ if (options.signal?.aborted) {
304
+ abort();
305
+ }
306
+ else {
307
+ options.signal?.addEventListener("abort", abort, { once: true });
308
+ }
309
+ child.stdout?.on("data", (chunk) => {
310
+ emitOutput("stdout", chunk.toString());
311
+ });
312
+ child.stderr?.on("data", (chunk) => {
313
+ emitOutput("stderr", chunk.toString());
314
+ });
315
+ child.on("error", (error) => {
316
+ emitOutput("stderr", error instanceof Error ? error.message : String(error));
317
+ void finish(null);
318
+ });
319
+ child.on("close", (code) => {
320
+ void finish(typeof code === "number" ? code : null);
321
+ });
322
+ });
323
+ }
324
+ async function getAvailablePort() {
325
+ return new Promise((resolvePromise, reject) => {
326
+ const server = net.createServer();
327
+ server.once("error", reject);
328
+ server.listen(0, () => {
329
+ const address = server.address();
330
+ if (!address || typeof address === "string") {
331
+ server.close(() => reject(new Error("Failed to acquire available port")));
332
+ return;
333
+ }
334
+ server.close((error) => {
335
+ if (error) {
336
+ reject(error);
337
+ return;
338
+ }
339
+ resolvePromise(address.port);
340
+ });
341
+ });
342
+ });
343
+ }
344
+ async function assertPortAvailable(port) {
345
+ await new Promise((resolvePromise, reject) => {
346
+ const server = net.createServer();
347
+ server.once("error", (error) => {
348
+ let message;
349
+ if (error?.code === "EADDRINUSE") {
350
+ message = `Persisted worktree port ${port} is already in use`;
351
+ }
352
+ else if (error instanceof Error) {
353
+ message = error.message;
354
+ }
355
+ else {
356
+ message = String(error);
357
+ }
358
+ reject(new Error(message));
359
+ });
360
+ server.listen(port, () => {
361
+ server.close((error) => {
362
+ if (error) {
363
+ reject(error);
364
+ return;
365
+ }
366
+ resolvePromise();
367
+ });
368
+ });
369
+ });
370
+ }
371
+ async function inferRepoRootPathFromWorktreePath(worktreePath) {
372
+ try {
373
+ const commonDir = await getGitCommonDir(worktreePath);
374
+ const normalizedCommonDir = normalizePathForOwnership(commonDir);
375
+ // Normal repo/worktree: common dir is <repoRoot>/.git
376
+ if (basename(normalizedCommonDir) === ".git") {
377
+ return dirname(normalizedCommonDir);
378
+ }
379
+ // Bare repo: common dir is the repo dir itself
380
+ return normalizedCommonDir;
381
+ }
382
+ catch {
383
+ // Fallback: best-effort resolve toplevel (will be the worktree root in typical cases)
384
+ try {
385
+ const { stdout } = await runGitCommand(["rev-parse", "--show-toplevel"], {
386
+ cwd: worktreePath,
387
+ envOverlay: READ_ONLY_GIT_ENV,
388
+ });
389
+ const topLevel = parseGitRevParsePath(stdout);
390
+ if (topLevel) {
391
+ return normalizePathForOwnership(topLevel);
392
+ }
393
+ }
394
+ catch {
395
+ // ignore
396
+ }
397
+ return normalizePathForOwnership(worktreePath);
398
+ }
399
+ }
400
+ export async function runWorktreeSetupCommands(options) {
401
+ // Read paseo.json from the worktree (it will have the same content as the source repo)
402
+ const setupCommands = getWorktreeSetupCommands(options.worktreePath);
403
+ if (setupCommands.length === 0) {
404
+ return [];
405
+ }
406
+ const runtimeEnv = options.runtimeEnv ??
407
+ (await resolveWorktreeRuntimeEnv({
408
+ worktreePath: options.worktreePath,
409
+ branchName: options.branchName,
410
+ ...(options.repoRootPath ? { repoRootPath: options.repoRootPath } : {}),
411
+ }));
412
+ const setupEnv = createStringCommandShellEnv(createExternalProcessEnv(process.env, runtimeEnv));
413
+ const results = [];
414
+ for (const [index, cmd] of setupCommands.entries()) {
415
+ const result = options.onEvent
416
+ ? await execSetupCommandStreamed({
417
+ command: cmd,
418
+ cwd: options.worktreePath,
419
+ env: setupEnv,
420
+ index: index + 1,
421
+ total: setupCommands.length,
422
+ signal: options.signal,
423
+ onEvent: options.onEvent,
424
+ })
425
+ : await execSetupCommand(cmd, {
426
+ cwd: options.worktreePath,
427
+ env: setupEnv,
428
+ });
429
+ results.push(result);
430
+ if (result.exitCode !== 0) {
431
+ if (options.cleanupOnFailure) {
432
+ try {
433
+ await runGitCommand(["worktree", "remove", options.worktreePath, "--force"], {
434
+ cwd: options.worktreePath,
435
+ timeout: 120000,
436
+ });
437
+ }
438
+ catch {
439
+ rmSync(options.worktreePath, { recursive: true, force: true });
440
+ }
441
+ }
442
+ throw new WorktreeSetupError(`Worktree setup command failed: ${cmd}\n${result.stderr}`.trim(), results);
443
+ }
444
+ }
445
+ return results;
446
+ }
447
+ async function resolveBranchNameForWorktreePath(worktreePath) {
448
+ try {
449
+ const { stdout } = await runGitCommand(["branch", "--show-current"], {
450
+ cwd: worktreePath,
451
+ envOverlay: READ_ONLY_GIT_ENV,
452
+ });
453
+ const branchName = stdout.trim();
454
+ if (branchName.length > 0) {
455
+ return branchName;
456
+ }
457
+ }
458
+ catch {
459
+ // ignore
460
+ }
461
+ return basename(worktreePath);
462
+ }
463
+ export async function resolveWorktreeRuntimeEnv(options) {
464
+ const repoRootPath = options.repoRootPath ?? (await inferRepoRootPathFromWorktreePath(options.worktreePath));
465
+ const branchName = options.branchName ?? (await resolveBranchNameForWorktreePath(options.worktreePath));
466
+ let worktreePort = readPaseoWorktreeRuntimePort(options.worktreePath);
467
+ if (worktreePort === null) {
468
+ worktreePort = await getAvailablePort();
469
+ const metadata = readPaseoWorktreeMetadata(options.worktreePath);
470
+ if (metadata) {
471
+ writePaseoWorktreeRuntimeMetadata(options.worktreePath, { worktreePort });
472
+ }
473
+ }
474
+ else {
475
+ await assertPortAvailable(worktreePort);
476
+ }
477
+ return {
478
+ // Source checkout path is the original git repo root (shared across worktrees), not the
479
+ // worktree itself. This allows setup scripts to copy local files (e.g. .env) from the
480
+ // source checkout.
481
+ PASEO_SOURCE_CHECKOUT_PATH: repoRootPath,
482
+ // Backward-compatible alias.
483
+ PASEO_ROOT_PATH: repoRootPath,
484
+ PASEO_WORKTREE_PATH: options.worktreePath,
485
+ PASEO_BRANCH_NAME: branchName,
486
+ PASEO_WORKTREE_PORT: String(worktreePort),
487
+ };
488
+ }
489
+ export async function runWorktreeTeardownCommands(options) {
490
+ const teardownCwd = options.teardownCwd ?? options.worktreePath;
491
+ if (getRealpathAwareRelativePath(options.worktreePath, teardownCwd) === null) {
492
+ throw new Error(`Worktree teardown cwd is outside the worktree: ${teardownCwd}`);
493
+ }
494
+ const teardownCommands = getWorktreeTeardownCommands(teardownCwd);
495
+ if (teardownCommands.length === 0) {
496
+ return [];
497
+ }
498
+ const repoRootPath = options.repoRootPath ?? (await inferRepoRootPathFromWorktreePath(options.worktreePath));
499
+ const branchName = options.branchName ?? (await resolveBranchNameForWorktreePath(options.worktreePath));
500
+ const worktreePort = readPaseoWorktreeRuntimePort(options.worktreePath);
501
+ const teardownEnv = createStringCommandShellEnv(createExternalProcessEnv(process.env, {
502
+ // Source checkout path is the original git repo root (shared across worktrees), not the
503
+ // worktree itself. This allows lifecycle scripts to copy or clean resources using paths
504
+ // from the source checkout.
505
+ PASEO_SOURCE_CHECKOUT_PATH: repoRootPath,
506
+ // Backward-compatible alias.
507
+ PASEO_ROOT_PATH: repoRootPath,
508
+ PASEO_WORKTREE_PATH: options.worktreePath,
509
+ PASEO_BRANCH_NAME: branchName,
510
+ ...(worktreePort !== null ? { PASEO_WORKTREE_PORT: String(worktreePort) } : {}),
511
+ }));
512
+ const results = [];
513
+ for (const cmd of teardownCommands) {
514
+ const result = await execSetupCommand(cmd, {
515
+ cwd: teardownCwd,
516
+ env: teardownEnv,
517
+ });
518
+ results.push(result);
519
+ if (result.exitCode !== 0) {
520
+ throw new WorktreeTeardownError(`Worktree teardown command failed: ${cmd}\n${result.stderr}`.trim(), results);
521
+ }
522
+ }
523
+ return results;
524
+ }
525
+ export async function seedPaseoConfigFile(options) {
526
+ const sourceConfigPath = join(options.sourceCwd, "paseo.json");
527
+ const targetConfigPath = join(options.targetCwd, "paseo.json");
528
+ await copyFile(sourceConfigPath, targetConfigPath, fsConstants.COPYFILE_EXCL).catch((error) => {
529
+ const code = error.code;
530
+ if (code !== "EEXIST" && code !== "ENOENT")
531
+ throw error;
532
+ });
533
+ }
534
+ /**
535
+ * Get the git common directory (shared across worktrees) for a given cwd.
536
+ * This is where refs, objects, etc. are stored.
537
+ */
538
+ export async function getGitCommonDir(cwd) {
539
+ const { stdout } = await runGitCommand(["rev-parse", "--git-common-dir"], {
540
+ cwd,
541
+ envOverlay: READ_ONLY_GIT_ENV,
542
+ });
543
+ const commonDir = resolveGitRevParsePath(cwd, stdout);
544
+ if (!commonDir) {
545
+ throw new Error("Not in a git repository");
546
+ }
547
+ return commonDir;
548
+ }
549
+ const WORKTREE_PROJECT_HASH_LENGTH = 8;
550
+ function deriveShortAlphanumericHash(value) {
551
+ const digest = createHash("sha256").update(value).digest();
552
+ let hashValue = 0n;
553
+ for (let index = 0; index < 8; index += 1) {
554
+ hashValue = (hashValue << 8n) | BigInt(digest[index] ?? 0);
555
+ }
556
+ return hashValue.toString(36).padStart(13, "0").slice(0, WORKTREE_PROJECT_HASH_LENGTH);
557
+ }
558
+ export async function deriveWorktreeProjectHash(cwd) {
559
+ try {
560
+ const commonDir = await getGitCommonDir(cwd);
561
+ const normalizedCommonDir = normalizePathForOwnership(commonDir);
562
+ const repoRoot = basename(normalizedCommonDir) === ".git" ? dirname(normalizedCommonDir) : normalizedCommonDir;
563
+ return deriveShortAlphanumericHash(repoRoot);
564
+ }
565
+ catch {
566
+ return deriveShortAlphanumericHash(normalizePathForOwnership(cwd));
567
+ }
568
+ }
569
+ export function resolvePaseoWorktreesBaseRoot(options) {
570
+ if (options?.worktreesRoot) {
571
+ const expandedRoot = expandTilde(options.worktreesRoot);
572
+ if (isAbsolute(expandedRoot)) {
573
+ return resolve(expandedRoot);
574
+ }
575
+ const home = options.paseoHome ? resolve(options.paseoHome) : resolvePaseoHome();
576
+ return resolve(home, expandedRoot);
577
+ }
578
+ const home = options?.paseoHome ? resolve(options.paseoHome) : resolvePaseoHome();
579
+ return join(home, "worktrees");
580
+ }
581
+ export async function getPaseoWorktreesRoot(cwd, paseoHome, worktreesRoot) {
582
+ const baseRoot = resolvePaseoWorktreesBaseRoot({ paseoHome, worktreesRoot });
583
+ const projectHash = await deriveWorktreeProjectHash(cwd);
584
+ return join(baseRoot, projectHash);
585
+ }
586
+ export async function computeWorktreePath(cwd, slug, paseoHome, worktreesRoot) {
587
+ const projectWorktreesRoot = await getPaseoWorktreesRoot(cwd, paseoHome, worktreesRoot);
588
+ return join(projectWorktreesRoot, slug);
589
+ }
590
+ export function mapWorkspaceCwdToWorktree(input) {
591
+ const relativeWorkspaceCwd = getRealpathAwareRelativePath(input.sourceWorktreePath, input.workspaceCwd);
592
+ if (relativeWorkspaceCwd === null) {
593
+ throw new Error(`Workspace cwd is outside its source worktree: ${input.workspaceCwd}`);
594
+ }
595
+ return mapWorkspaceRelativeCwdToWorktree({
596
+ relativeWorkspaceCwd,
597
+ targetWorktreePath: input.targetWorktreePath,
598
+ });
599
+ }
600
+ export function mapWorkspaceRelativeCwdToWorktree(input) {
601
+ const mappedCwd = resolve(input.targetWorktreePath, input.relativeWorkspaceCwd);
602
+ if (!isPathInsideRoot(input.targetWorktreePath, mappedCwd)) {
603
+ throw new Error(`Workspace cwd escapes its target worktree: ${input.relativeWorkspaceCwd}`);
604
+ }
605
+ return mappedCwd;
606
+ }
607
+ function normalizePathForOwnership(input) {
608
+ try {
609
+ return realpathSync(input);
610
+ }
611
+ catch {
612
+ return resolve(input);
613
+ }
614
+ }
615
+ function resolveRepoRootFromGitCommonDir(commonDir) {
616
+ const normalizedCommonDir = normalizePathForOwnership(commonDir);
617
+ return basename(normalizedCommonDir) === ".git"
618
+ ? dirname(normalizedCommonDir)
619
+ : normalizedCommonDir;
620
+ }
621
+ export async function isPaseoOwnedWorktreeCwd(cwd, options) {
622
+ const resolvedCwd = normalizePathForOwnership(cwd);
623
+ // repoRoot is best-effort: git may be unreachable from the worktree (e.g. a
624
+ // previous archive attempt removed the admin dir before the working tree
625
+ // could be fully cleaned up). We still want to allow archiving in that case.
626
+ let repoRoot;
627
+ if (options?.knownGitCommonDir) {
628
+ repoRoot = resolveRepoRootFromGitCommonDir(options.knownGitCommonDir);
629
+ }
630
+ else if (options?.knownGitCommonDir === undefined) {
631
+ try {
632
+ const gitCommonDir = await getGitCommonDir(cwd);
633
+ repoRoot = resolveRepoRootFromGitCommonDir(gitCommonDir);
634
+ }
635
+ catch {
636
+ // ignore
637
+ }
638
+ }
639
+ const worktreesBaseRoot = resolvePaseoWorktreesBaseRoot(options);
640
+ const relativePath = getRealpathAwareRelativePath(worktreesBaseRoot, resolvedCwd);
641
+ // Ownership is defined by the path living under <worktrees-root>/<hash>/<slug>[/...].
642
+ // The <hash>/<slug> prefix is Paseo-private — nothing else writes there — so the
643
+ // path shape alone is sufficient proof of ownership, even when git has already
644
+ // forgotten about the worktree.
645
+ if (relativePath === null) {
646
+ return {
647
+ allowed: false,
648
+ ...(repoRoot !== undefined ? { repoRoot } : {}),
649
+ worktreePath: resolvedCwd,
650
+ };
651
+ }
652
+ const parts = relativePath.split(sep).filter((part) => part.length > 0);
653
+ if (parts.length < 2) {
654
+ return {
655
+ allowed: false,
656
+ ...(repoRoot !== undefined ? { repoRoot } : {}),
657
+ worktreePath: resolvedCwd,
658
+ };
659
+ }
660
+ const worktreesRoot = join(worktreesBaseRoot, parts[0]);
661
+ return {
662
+ allowed: true,
663
+ ...(repoRoot !== undefined ? { repoRoot } : {}),
664
+ worktreeRoot: worktreesRoot,
665
+ worktreePath: join(worktreesRoot, parts[1]),
666
+ };
667
+ }
668
+ function parseWorktreeList(output) {
669
+ const entries = [];
670
+ let current = null;
671
+ for (const line of output.split("\n")) {
672
+ if (line.startsWith("worktree ")) {
673
+ if (current?.path) {
674
+ entries.push(current);
675
+ }
676
+ current = { path: line.slice("worktree ".length).trim() };
677
+ continue;
678
+ }
679
+ if (!current) {
680
+ continue;
681
+ }
682
+ if (line.startsWith("branch ")) {
683
+ const ref = line.slice("branch ".length).trim();
684
+ current.branchName = ref.startsWith("refs/heads/") ? ref.slice("refs/heads/".length) : ref;
685
+ }
686
+ else if (line.startsWith("HEAD ")) {
687
+ current.head = line.slice("HEAD ".length).trim();
688
+ }
689
+ else if (line.trim().length === 0) {
690
+ if (current.path) {
691
+ entries.push(current);
692
+ }
693
+ current = null;
694
+ }
695
+ }
696
+ if (current?.path) {
697
+ entries.push(current);
698
+ }
699
+ return entries;
700
+ }
701
+ function resolveWorktreeCreatedAtIso(worktreePath) {
702
+ try {
703
+ const stats = statSync(worktreePath);
704
+ const birthtimeMs = stats.birthtimeMs;
705
+ const createdAtMs = Number.isFinite(birthtimeMs) && birthtimeMs > 0 ? birthtimeMs : stats.ctimeMs;
706
+ return new Date(createdAtMs).toISOString();
707
+ }
708
+ catch {
709
+ return new Date(0).toISOString();
710
+ }
711
+ }
712
+ export async function listPaseoWorktrees({ cwd, paseoHome, worktreesRoot, }) {
713
+ const projectWorktreesRoot = await getPaseoWorktreesRoot(cwd, paseoHome, worktreesRoot);
714
+ const { stdout } = await runGitCommand(["worktree", "list", "--porcelain"], {
715
+ cwd,
716
+ envOverlay: READ_ONLY_GIT_ENV,
717
+ });
718
+ return parseWorktreeList(stdout)
719
+ .map((entry) => Object.assign({}, entry, { path: normalizePathForOwnership(entry.path) }))
720
+ .filter((entry) => getRealpathAwareRelativePath(projectWorktreesRoot, entry.path) !== null)
721
+ .map((entry) => Object.assign({}, entry, { createdAt: resolveWorktreeCreatedAtIso(entry.path) }));
722
+ }
723
+ export async function deletePaseoWorktree({ cwd, worktreePath, teardownCwds, worktreeSlug, worktreesRoot, paseoHome, worktreesBaseRoot, }) {
724
+ if (!worktreePath && !worktreeSlug) {
725
+ throw new Error("worktreePath or worktreeSlug is required");
726
+ }
727
+ // Resolve the worktrees-root. With a repo cwd we hash it the normal way; if
728
+ // git has forgotten about the worktree we expect the caller to hand us the
729
+ // path-derived worktreesRoot from the ownership check.
730
+ let resolvedWorktreesRoot;
731
+ if (worktreesRoot) {
732
+ resolvedWorktreesRoot = worktreesRoot;
733
+ }
734
+ else if (cwd) {
735
+ resolvedWorktreesRoot = await getPaseoWorktreesRoot(cwd, paseoHome, worktreesBaseRoot);
736
+ }
737
+ else {
738
+ throw new Error("cwd or worktreesRoot is required to delete a Paseo worktree");
739
+ }
740
+ const requestedPath = worktreePath ?? join(resolvedWorktreesRoot, worktreeSlug);
741
+ const resolvedRequested = normalizePathForOwnership(requestedPath);
742
+ const ownership = await isPaseoOwnedWorktreeCwd(requestedPath, {
743
+ paseoHome,
744
+ worktreesRoot: worktreesBaseRoot,
745
+ });
746
+ const resolvedWorktree = ownership.allowed && ownership.worktreePath ? ownership.worktreePath : resolvedRequested;
747
+ const relativeWorktreePath = getRealpathAwareRelativePath(resolvedWorktreesRoot, resolvedWorktree);
748
+ if (relativeWorktreePath === null || relativeWorktreePath === "") {
749
+ throw new Error("Refusing to delete non-Paseo worktree");
750
+ }
751
+ if (await pathExists(resolvedWorktree)) {
752
+ for (const teardownCwd of teardownCwds ?? [resolvedWorktree]) {
753
+ await runWorktreeTeardownCommands({
754
+ worktreePath: resolvedWorktree,
755
+ teardownCwd,
756
+ });
757
+ }
758
+ }
759
+ if (cwd) {
760
+ try {
761
+ await runGitCommand(["worktree", "remove", resolvedWorktree, "--force"], {
762
+ cwd,
763
+ timeout: 120000,
764
+ });
765
+ }
766
+ catch {
767
+ // `git worktree remove` fails if the admin dir is already gone (e.g. a
768
+ // prior archive attempt removed it before the working tree could be
769
+ // fully cleaned up), or if the repo root has moved. Fall through to the
770
+ // rm retry loop below so the operation stays idempotent.
771
+ }
772
+ }
773
+ await removeDirectoryWithRetries(resolvedWorktree);
774
+ if (cwd) {
775
+ try {
776
+ await runGitCommand(["worktree", "prune"], { cwd, timeout: 30000 });
777
+ }
778
+ catch {
779
+ // not critical; git will prune lazily
780
+ }
781
+ }
782
+ }
783
+ export async function rollbackCreatedPaseoWorktree(options, cause) {
784
+ let cleanupError;
785
+ try {
786
+ await deletePaseoWorktree(options);
787
+ }
788
+ catch (error) {
789
+ cleanupError = error;
790
+ }
791
+ if (cleanupError) {
792
+ const failure = new Error(`${cause instanceof Error ? cause.message : "Worktree workflow failed"}; rollback also failed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`, { cause });
793
+ Object.assign(failure, { cleanupError });
794
+ throw failure;
795
+ }
796
+ throw cause;
797
+ }
798
+ async function pathExists(path) {
799
+ try {
800
+ await stat(path);
801
+ return true;
802
+ }
803
+ catch (error) {
804
+ if (error.code === "ENOENT") {
805
+ return false;
806
+ }
807
+ throw error;
808
+ }
809
+ }
810
+ async function removeDirectoryWithRetries(path) {
811
+ if (!(await pathExists(path))) {
812
+ return;
813
+ }
814
+ const delaysMs = [0, 100, 300, 700, 1500];
815
+ let lastError = null;
816
+ for (const delay of delaysMs) {
817
+ if (delay > 0) {
818
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, delay));
819
+ }
820
+ try {
821
+ await rm(path, { recursive: true, force: true });
822
+ if (!(await pathExists(path))) {
823
+ return;
824
+ }
825
+ lastError = new Error(`Directory still present after rm: ${path}`);
826
+ }
827
+ catch (error) {
828
+ lastError = error;
829
+ }
830
+ }
831
+ if (await pathExists(path)) {
832
+ throw lastError instanceof Error
833
+ ? lastError
834
+ : new Error(`Failed to remove worktree directory: ${path}`);
835
+ }
836
+ }
837
+ /**
838
+ * Create a git worktree with proper naming conventions
839
+ */
840
+ export const createWorktree = async ({ cwd, source, worktreeSlug, runSetup, paseoHome, worktreesRoot, }) => {
841
+ const sourcePlan = await resolveWorktreeSourcePlan({ cwd, source, desiredSlug: worktreeSlug });
842
+ let worktreePath = join(await getPaseoWorktreesRoot(cwd, paseoHome, worktreesRoot), worktreeSlug);
843
+ mkdirSync(dirname(worktreePath), { recursive: true });
844
+ // Also handle worktree path collision
845
+ let finalWorktreePath = worktreePath;
846
+ let pathSuffix = 1;
847
+ while (existsSync(finalWorktreePath)) {
848
+ finalWorktreePath = `${worktreePath}-${pathSuffix}`;
849
+ pathSuffix++;
850
+ }
851
+ // Primitive owner for `git worktree add`; callers route through createWorktreeCore.
852
+ await runGitCommand(["worktree", "add", finalWorktreePath, ...sourcePlan.addArguments], {
853
+ cwd,
854
+ timeout: 120000,
855
+ });
856
+ worktreePath = normalizePathForOwnership(finalWorktreePath);
857
+ if (sourcePlan.pushRemote) {
858
+ await configureWorktreePushRemote({
859
+ cwd,
860
+ branchName: sourcePlan.branchName,
861
+ remote: sourcePlan.pushRemote,
862
+ });
863
+ }
864
+ if (sourcePlan.trackingRemote) {
865
+ await configureWorktreeTrackingRemote({
866
+ cwd,
867
+ branchName: sourcePlan.branchName,
868
+ remote: sourcePlan.trackingRemote,
869
+ });
870
+ }
871
+ writePaseoWorktreeMetadata(worktreePath, {
872
+ baseRefName: sourcePlan.metadataBaseRefName,
873
+ ...(sourcePlan.metadataBaseRef ? { baseRef: sourcePlan.metadataBaseRef } : {}),
874
+ ...(sourcePlan.changeRequestLookupTarget
875
+ ? { changeRequestLookupTarget: sourcePlan.changeRequestLookupTarget }
876
+ : {}),
877
+ });
878
+ await seedPaseoConfigFile({ sourceCwd: cwd, targetCwd: worktreePath });
879
+ if (runSetup) {
880
+ await runWorktreeSetupCommands({
881
+ worktreePath,
882
+ branchName: sourcePlan.branchName,
883
+ cleanupOnFailure: true,
884
+ });
885
+ }
886
+ return {
887
+ branchName: sourcePlan.branchName,
888
+ worktreePath,
889
+ };
890
+ };
891
+ async function resolveWorktreeSourcePlan({ cwd, source, desiredSlug, }) {
892
+ switch (source.kind) {
893
+ case "branch-off": {
894
+ const branchName = source.branchName;
895
+ await validateGitBranchName(cwd, branchName);
896
+ const normalizedBaseBranch = normalizeRequiredBaseBranch(source.baseBranch);
897
+ const resolvedBaseBranch = await resolveBaseBranchForWorktree(cwd, source.baseBranch);
898
+ const branchExists = await localBranchExists(cwd, branchName);
899
+ const base = branchExists ? branchName : resolvedBaseBranch;
900
+ const candidateBranch = branchExists ? desiredSlug : branchName;
901
+ const newBranchName = await resolveUniqueLocalBranchName(cwd, candidateBranch);
902
+ return {
903
+ branchName: newBranchName,
904
+ metadataBaseRefName: normalizedBaseBranch,
905
+ metadataBaseRef: resolvedBaseBranch,
906
+ changeRequestLookupTarget: createPaseoWorktreeChangeRequestHint({
907
+ headRef: newBranchName,
908
+ localBranchName: newBranchName,
909
+ }),
910
+ addArguments: ["-b", newBranchName, "--no-track", base],
911
+ };
912
+ }
913
+ case "checkout-branch": {
914
+ await validateGitBranchName(cwd, source.branchName);
915
+ if (!(await localBranchExists(cwd, source.branchName))) {
916
+ try {
917
+ await runGitCommand(["fetch", "origin", `${source.branchName}:${source.branchName}`], {
918
+ cwd,
919
+ timeout: 120000,
920
+ });
921
+ }
922
+ catch {
923
+ throw new UnknownBranchError({ branchName: source.branchName, cwd });
924
+ }
925
+ }
926
+ if (await isBranchCheckedOut(cwd, source.branchName)) {
927
+ const branchName = await resolveUniqueLocalBranchName(cwd, source.branchName);
928
+ return {
929
+ branchName,
930
+ metadataBaseRefName: source.branchName,
931
+ changeRequestLookupTarget: createPaseoWorktreeChangeRequestHint({
932
+ headRef: branchName,
933
+ localBranchName: branchName,
934
+ }),
935
+ addArguments: ["-b", branchName, "--no-track", source.branchName],
936
+ };
937
+ }
938
+ return {
939
+ branchName: source.branchName,
940
+ metadataBaseRefName: source.branchName,
941
+ changeRequestLookupTarget: createPaseoWorktreeChangeRequestHint({
942
+ headRef: source.branchName,
943
+ localBranchName: source.branchName,
944
+ }),
945
+ addArguments: [source.branchName],
946
+ };
947
+ }
948
+ case "checkout-change-request":
949
+ case "checkout-github-pr": {
950
+ const localBranchCandidate = source.localBranchName ?? source.headRef;
951
+ await validateGitBranchName(cwd, localBranchCandidate);
952
+ const localBranchName = await resolveUniqueLocalBranchName(cwd, localBranchCandidate);
953
+ const normalizedBaseRefName = normalizeRequiredBaseBranch(source.baseRefName);
954
+ const changeRequestNumber = source.kind === "checkout-github-pr" ? source.githubPrNumber : source.changeRequestNumber;
955
+ await fetchWorktreeCheckoutRefs({
956
+ cwd,
957
+ localBranchName,
958
+ checkoutRefs: source.checkoutRefs ?? [
959
+ { remoteName: "origin", remoteRef: `refs/pull/${changeRequestNumber}/head` },
960
+ ],
961
+ });
962
+ const shouldTrackOriginHead = source.trackOriginHead === true;
963
+ const trackingRemote = shouldTrackOriginHead
964
+ ? await tryFetchWorktreeTrackingRemote({
965
+ cwd,
966
+ remoteName: "origin",
967
+ headRef: source.headRef,
968
+ })
969
+ : undefined;
970
+ const remotePlan = {};
971
+ if (source.pushRemoteUrl) {
972
+ const remoteName = `paseo-pr-${changeRequestNumber}`;
973
+ remotePlan.pushRemote = {
974
+ name: remoteName,
975
+ url: source.pushRemoteUrl,
976
+ headRef: source.headRef,
977
+ track: true,
978
+ };
979
+ }
980
+ else if (shouldTrackOriginHead && localBranchName !== source.headRef) {
981
+ const originUrl = await getWorktreeRemotePushUrl(cwd, "origin");
982
+ if (originUrl) {
983
+ remotePlan.pushRemote = {
984
+ name: `paseo-pr-${changeRequestNumber}`,
985
+ url: originUrl,
986
+ headRef: source.headRef,
987
+ track: false,
988
+ };
989
+ }
990
+ }
991
+ if (trackingRemote) {
992
+ remotePlan.trackingRemote = trackingRemote;
993
+ }
994
+ return {
995
+ branchName: localBranchName,
996
+ metadataBaseRefName: normalizedBaseRefName,
997
+ changeRequestLookupTarget: createPaseoWorktreeChangeRequestHint({
998
+ headRef: source.headRef,
999
+ ...(source.headRepositoryOwner
1000
+ ? { headRepositoryOwner: source.headRepositoryOwner }
1001
+ : {}),
1002
+ changeRequestNumber,
1003
+ localBranchName,
1004
+ }),
1005
+ addArguments: [localBranchName],
1006
+ ...remotePlan,
1007
+ };
1008
+ }
1009
+ }
1010
+ }
1011
+ async function configureWorktreePushRemote(options) {
1012
+ await runGitCommand(["config", `remote.${options.remote.name}.url`, options.remote.url], {
1013
+ cwd: options.cwd,
1014
+ });
1015
+ await runGitCommand(["config", `remote.${options.remote.name}.push`, `HEAD:refs/heads/${options.remote.headRef}`], { cwd: options.cwd });
1016
+ await runGitCommand(["config", `branch.${options.branchName}.pushRemote`, options.remote.name], {
1017
+ cwd: options.cwd,
1018
+ });
1019
+ if (!options.remote.track) {
1020
+ return;
1021
+ }
1022
+ await runGitCommand([
1023
+ "config",
1024
+ `remote.${options.remote.name}.fetch`,
1025
+ `+refs/heads/${options.remote.headRef}:refs/remotes/${options.remote.name}/${options.remote.headRef}`,
1026
+ ], { cwd: options.cwd });
1027
+ const trackingRemote = await tryFetchWorktreeTrackingRemote({
1028
+ cwd: options.cwd,
1029
+ remoteName: options.remote.name,
1030
+ headRef: options.remote.headRef,
1031
+ });
1032
+ if (trackingRemote) {
1033
+ await configureWorktreeTrackingRemote({
1034
+ cwd: options.cwd,
1035
+ branchName: options.branchName,
1036
+ remote: trackingRemote,
1037
+ });
1038
+ }
1039
+ }
1040
+ async function fetchWorktreeCheckoutRefs(options) {
1041
+ let lastResult = null;
1042
+ for (const checkoutRef of options.checkoutRefs) {
1043
+ lastResult = await runGitCommand([
1044
+ "fetch",
1045
+ checkoutRef.remoteName ?? "origin",
1046
+ `+${checkoutRef.remoteRef}:refs/heads/${options.localBranchName}`,
1047
+ "--force",
1048
+ ], {
1049
+ cwd: options.cwd,
1050
+ timeout: 120000,
1051
+ acceptExitCodes: [0, 1, 128],
1052
+ });
1053
+ if (lastResult.exitCode === 0) {
1054
+ return;
1055
+ }
1056
+ }
1057
+ const attemptedRefs = options.checkoutRefs
1058
+ .map((checkoutRef) => `${checkoutRef.remoteName ?? "origin"} ${checkoutRef.remoteRef}`)
1059
+ .join(", ");
1060
+ throw new Error(`Unable to fetch change request refs for worktree branch ${options.localBranchName}: ${attemptedRefs}${lastResult?.stderr ? `\n${lastResult.stderr}` : ""}`);
1061
+ }
1062
+ async function tryFetchWorktreeTrackingRemote(options) {
1063
+ const result = await runGitCommand([
1064
+ "fetch",
1065
+ options.remoteName,
1066
+ `+refs/heads/${options.headRef}:refs/remotes/${options.remoteName}/${options.headRef}`,
1067
+ ], {
1068
+ cwd: options.cwd,
1069
+ timeout: 120000,
1070
+ acceptExitCodes: [0, 1, 128],
1071
+ });
1072
+ if (result.exitCode !== 0) {
1073
+ return undefined;
1074
+ }
1075
+ await ensureRemoteFetchesBranch(options);
1076
+ return { name: options.remoteName, headRef: options.headRef };
1077
+ }
1078
+ async function ensureRemoteFetchesBranch(options) {
1079
+ const configKey = `remote.${options.remoteName}.fetch`;
1080
+ const exactRefspec = `refs/heads/${options.headRef}:refs/remotes/${options.remoteName}/${options.headRef}`;
1081
+ const wildcardRefspec = `refs/heads/*:refs/remotes/${options.remoteName}/*`;
1082
+ const { stdout } = await runGitCommand(["config", "--get-all", configKey], {
1083
+ cwd: options.cwd,
1084
+ acceptExitCodes: [0, 1],
1085
+ });
1086
+ const alreadyTracked = stdout
1087
+ .split("\n")
1088
+ .map((refspec) => refspec.trim().replace(/^\+/, ""))
1089
+ .some((refspec) => refspec === exactRefspec || refspec === wildcardRefspec);
1090
+ if (alreadyTracked) {
1091
+ return;
1092
+ }
1093
+ await runGitCommand(["config", "--add", configKey, `+${exactRefspec}`], { cwd: options.cwd });
1094
+ }
1095
+ async function getWorktreeRemotePushUrl(cwd, remoteName) {
1096
+ try {
1097
+ const { stdout } = await runGitCommand(["remote", "get-url", "--push", remoteName], {
1098
+ cwd,
1099
+ });
1100
+ const url = stdout.trim();
1101
+ return url.length > 0 ? url : undefined;
1102
+ }
1103
+ catch {
1104
+ return undefined;
1105
+ }
1106
+ }
1107
+ async function configureWorktreeTrackingRemote(options) {
1108
+ await runGitCommand([
1109
+ "branch",
1110
+ "--set-upstream-to",
1111
+ `${options.remote.name}/${options.remote.headRef}`,
1112
+ options.branchName,
1113
+ ], { cwd: options.cwd });
1114
+ }
1115
+ async function validateGitBranchName(cwd, branchName) {
1116
+ const result = await runGitCommand(["check-ref-format", "--branch", branchName], {
1117
+ cwd,
1118
+ timeout: 30000,
1119
+ acceptExitCodes: [0, 1, 128],
1120
+ });
1121
+ if (result.exitCode !== 0) {
1122
+ throw new InvalidGitBranchNameError(branchName);
1123
+ }
1124
+ }
1125
+ function normalizeRequiredBaseBranch(baseBranch) {
1126
+ const normalizedBaseBranch = normalizeBaseRefName(baseBranch);
1127
+ if (!normalizedBaseBranch) {
1128
+ throw new Error("Base branch is required when creating a Paseo worktree");
1129
+ }
1130
+ if (normalizedBaseBranch === "HEAD") {
1131
+ throw new Error("Base branch cannot be HEAD when creating a Paseo worktree");
1132
+ }
1133
+ return normalizedBaseBranch;
1134
+ }
1135
+ async function resolveBaseBranchForWorktree(cwd, requestedBaseBranch) {
1136
+ const requested = requestedBaseBranch.trim();
1137
+ const normalized = normalizeRequiredBaseBranch(requested);
1138
+ let exactRef = null;
1139
+ if (requested.startsWith("refs/")) {
1140
+ exactRef = requested;
1141
+ }
1142
+ else if (requested.startsWith("origin/")) {
1143
+ exactRef = `refs/remotes/${requested}`;
1144
+ }
1145
+ if (exactRef) {
1146
+ try {
1147
+ await runGitCommand(["rev-parse", "--verify", exactRef], { cwd });
1148
+ return exactRef;
1149
+ }
1150
+ catch {
1151
+ throw new Error(`Base branch not found: ${normalized}`);
1152
+ }
1153
+ }
1154
+ const candidates = [`refs/heads/${requested}`, `refs/remotes/origin/${requested}`, requested];
1155
+ for (const candidate of candidates) {
1156
+ try {
1157
+ await runGitCommand(["rev-parse", "--verify", candidate], { cwd });
1158
+ return candidate;
1159
+ }
1160
+ catch {
1161
+ // Try the next unambiguous local, remote, or legacy ref candidate.
1162
+ }
1163
+ }
1164
+ throw new Error(`Base branch not found: ${normalized}`);
1165
+ }
1166
+ async function localBranchExists(cwd, branchName) {
1167
+ try {
1168
+ await runGitCommand(["show-ref", "--verify", "--quiet", `refs/heads/${branchName}`], {
1169
+ cwd,
1170
+ });
1171
+ return true;
1172
+ }
1173
+ catch {
1174
+ return false;
1175
+ }
1176
+ }
1177
+ async function resolveUniqueLocalBranchName(cwd, candidateBranch) {
1178
+ let newBranchName = candidateBranch;
1179
+ let suffix = 1;
1180
+ while (await localBranchExists(cwd, newBranchName)) {
1181
+ newBranchName = `${candidateBranch}-${suffix}`;
1182
+ suffix++;
1183
+ }
1184
+ return newBranchName;
1185
+ }
1186
+ async function isBranchCheckedOut(cwd, branchName) {
1187
+ const { stdout } = await runGitCommand(["worktree", "list", "--porcelain"], {
1188
+ cwd,
1189
+ envOverlay: READ_ONLY_GIT_ENV,
1190
+ });
1191
+ return parseWorktreeList(stdout).some((entry) => entry.branchName === branchName);
1192
+ }
1193
+ //# sourceMappingURL=worktree.js.map