@getpaseo/server 0.1.61 → 0.1.63

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 (464) hide show
  1. package/README.md +4 -0
  2. package/dist/server/client/daemon-client-runtime-metrics.d.ts +6 -6
  3. package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -1
  4. package/dist/server/client/daemon-client-transport-types.d.ts +13 -13
  5. package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -1
  6. package/dist/server/client/daemon-client-websocket-transport.d.ts +1 -1
  7. package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -1
  8. package/dist/server/client/daemon-client-websocket-transport.js +5 -4
  9. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
  10. package/dist/server/client/daemon-client.d.ts +59 -37
  11. package/dist/server/client/daemon-client.d.ts.map +1 -1
  12. package/dist/server/client/daemon-client.js +62 -17
  13. package/dist/server/client/daemon-client.js.map +1 -1
  14. package/dist/server/server/agent/agent-loading.d.ts.map +1 -1
  15. package/dist/server/server/agent/agent-loading.js +5 -3
  16. package/dist/server/server/agent/agent-loading.js.map +1 -1
  17. package/dist/server/server/agent/agent-manager.d.ts +45 -19
  18. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  19. package/dist/server/server/agent/agent-manager.js +393 -290
  20. package/dist/server/server/agent/agent-manager.js.map +1 -1
  21. package/dist/server/server/agent/agent-metadata-generator.d.ts +6 -6
  22. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  23. package/dist/server/server/agent/agent-metadata-generator.js +46 -38
  24. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  25. package/dist/server/server/agent/agent-projections.d.ts +4 -6
  26. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  27. package/dist/server/server/agent/agent-projections.js +59 -65
  28. package/dist/server/server/agent/agent-projections.js.map +1 -1
  29. package/dist/server/server/agent/agent-response-loop.d.ts +4 -4
  30. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  31. package/dist/server/server/agent/agent-response-loop.js +58 -45
  32. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  33. package/dist/server/server/agent/agent-sdk-types.d.ts +43 -40
  34. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  35. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  36. package/dist/server/server/agent/agent-storage.d.ts +2 -2
  37. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  38. package/dist/server/server/agent/agent-storage.js +29 -36
  39. package/dist/server/server/agent/agent-storage.js.map +1 -1
  40. package/dist/server/server/agent/agent-stream-coalescer.d.ts +6 -6
  41. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
  42. package/dist/server/server/agent/agent-timeline-store-types.d.ts +10 -10
  43. package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -1
  44. package/dist/server/server/agent/agent-timeline-store.d.ts +2 -2
  45. package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
  46. package/dist/server/server/agent/agent-timeline-store.js +85 -64
  47. package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
  48. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  49. package/dist/server/server/agent/mcp-server.js +185 -148
  50. package/dist/server/server/agent/mcp-server.js.map +1 -1
  51. package/dist/server/server/agent/mcp-shared.d.ts +9 -2
  52. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  53. package/dist/server/server/agent/mcp-shared.js +2 -0
  54. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  55. package/dist/server/server/agent/model-resolver.d.ts +2 -2
  56. package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
  57. package/dist/server/server/agent/model-resolver.js +9 -5
  58. package/dist/server/server/agent/model-resolver.js.map +1 -1
  59. package/dist/server/server/agent/provider-launch-config.d.ts +28 -17
  60. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  61. package/dist/server/server/agent/provider-launch-config.js +20 -9
  62. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  63. package/dist/server/server/agent/provider-registry.d.ts +4 -2
  64. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  65. package/dist/server/server/agent/provider-registry.js +24 -21
  66. package/dist/server/server/agent/provider-registry.js.map +1 -1
  67. package/dist/server/server/agent/provider-snapshot-manager.d.ts +6 -5
  68. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
  69. package/dist/server/server/agent/provider-snapshot-manager.js +40 -31
  70. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  71. package/dist/server/server/agent/providers/acp-agent.d.ts +11 -12
  72. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  73. package/dist/server/server/agent/providers/acp-agent.js +148 -122
  74. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  75. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +2 -0
  76. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts.map +1 -1
  77. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +47 -45
  78. package/dist/server/server/agent/providers/claude/sidechain-tracker.js.map +1 -1
  79. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  80. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts.map +1 -1
  81. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +10 -5
  82. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js.map +1 -1
  83. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -1
  84. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +11 -2
  85. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
  86. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +2 -2
  87. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
  88. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +20 -13
  89. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
  90. package/dist/server/server/agent/providers/claude-agent.d.ts +20 -8
  91. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  92. package/dist/server/server/agent/providers/claude-agent.js +610 -460
  93. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  94. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +2 -2
  95. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -1
  96. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +2 -2
  97. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
  98. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +49 -44
  99. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
  100. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +27 -8
  101. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  102. package/dist/server/server/agent/providers/codex-app-server-agent.js +564 -492
  103. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  104. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +2 -2
  105. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
  106. package/dist/server/server/agent/providers/codex-rollout-timeline.js +58 -47
  107. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
  108. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +2 -2
  109. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  110. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +3 -3
  111. package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
  112. package/dist/server/server/agent/providers/diagnostic-utils.js +82 -9
  113. package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
  114. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +2 -2
  115. package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
  116. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
  117. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
  118. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +2 -2
  119. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -1
  120. package/dist/server/server/agent/providers/opencode-agent.d.ts +2 -2
  121. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  122. package/dist/server/server/agent/providers/opencode-agent.js +385 -360
  123. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  124. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +1 -0
  125. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
  126. package/dist/server/server/agent/providers/pi-direct-agent.js +109 -140
  127. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
  128. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
  129. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +3 -1
  130. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
  131. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +3 -3
  132. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  133. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +102 -73
  134. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
  135. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +2 -2
  136. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -1
  137. package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
  138. package/dist/server/server/agent/stt-manager.js +63 -53
  139. package/dist/server/server/agent/stt-manager.js.map +1 -1
  140. package/dist/server/server/agent/timeline-projection.d.ts +6 -6
  141. package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
  142. package/dist/server/server/agent/timeline-projection.js +11 -6
  143. package/dist/server/server/agent/timeline-projection.js.map +1 -1
  144. package/dist/server/server/agent/tts-manager.d.ts.map +1 -1
  145. package/dist/server/server/agent/tts-manager.js +1 -0
  146. package/dist/server/server/agent/tts-manager.js.map +1 -1
  147. package/dist/server/server/agent-attention-policy.d.ts +2 -2
  148. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  149. package/dist/server/server/bootstrap.d.ts +4 -4
  150. package/dist/server/server/bootstrap.d.ts.map +1 -1
  151. package/dist/server/server/bootstrap.js +493 -485
  152. package/dist/server/server/bootstrap.js.map +1 -1
  153. package/dist/server/server/chat/chat-service.d.ts +1 -1
  154. package/dist/server/server/chat/chat-service.d.ts.map +1 -1
  155. package/dist/server/server/chat/chat-service.js +3 -3
  156. package/dist/server/server/chat/chat-service.js.map +1 -1
  157. package/dist/server/server/checkout-diff-manager.d.ts +2 -2
  158. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
  159. package/dist/server/server/checkout-git-utils.d.ts +5 -3
  160. package/dist/server/server/checkout-git-utils.d.ts.map +1 -1
  161. package/dist/server/server/checkout-git-utils.js +1 -2
  162. package/dist/server/server/checkout-git-utils.js.map +1 -1
  163. package/dist/server/server/config.d.ts.map +1 -1
  164. package/dist/server/server/config.js +68 -39
  165. package/dist/server/server/config.js.map +1 -1
  166. package/dist/server/server/connection-offer.d.ts +2 -2
  167. package/dist/server/server/connection-offer.d.ts.map +1 -1
  168. package/dist/server/server/daemon-config-store.d.ts +5 -3
  169. package/dist/server/server/daemon-config-store.d.ts.map +1 -1
  170. package/dist/server/server/daemon-config-store.js +26 -0
  171. package/dist/server/server/daemon-config-store.js.map +1 -1
  172. package/dist/server/server/daemon-keypair.d.ts +2 -2
  173. package/dist/server/server/daemon-keypair.d.ts.map +1 -1
  174. package/dist/server/server/editor-targets.d.ts +4 -4
  175. package/dist/server/server/editor-targets.d.ts.map +1 -1
  176. package/dist/server/server/editor-targets.js +11 -15
  177. package/dist/server/server/editor-targets.js.map +1 -1
  178. package/dist/server/server/exports.d.ts +3 -3
  179. package/dist/server/server/exports.d.ts.map +1 -1
  180. package/dist/server/server/exports.js +1 -3
  181. package/dist/server/server/exports.js.map +1 -1
  182. package/dist/server/server/file-download/token-store.d.ts +4 -4
  183. package/dist/server/server/file-download/token-store.d.ts.map +1 -1
  184. package/dist/server/server/index.js +16 -12
  185. package/dist/server/server/index.js.map +1 -1
  186. package/dist/server/server/logger.d.ts +4 -4
  187. package/dist/server/server/logger.d.ts.map +1 -1
  188. package/dist/server/server/logger.js +26 -20
  189. package/dist/server/server/logger.js.map +1 -1
  190. package/dist/server/server/loop/rpc-schemas.d.ts +52 -52
  191. package/dist/server/server/loop-service.d.ts +13 -12
  192. package/dist/server/server/loop-service.d.ts.map +1 -1
  193. package/dist/server/server/loop-service.js +22 -18
  194. package/dist/server/server/loop-service.js.map +1 -1
  195. package/dist/server/server/package-version.d.ts +2 -2
  196. package/dist/server/server/package-version.d.ts.map +1 -1
  197. package/dist/server/server/package-version.js +19 -17
  198. package/dist/server/server/package-version.js.map +1 -1
  199. package/dist/server/server/pairing-offer.d.ts +2 -2
  200. package/dist/server/server/pairing-offer.d.ts.map +1 -1
  201. package/dist/server/server/paseo-env.d.ts +9 -0
  202. package/dist/server/server/paseo-env.d.ts.map +1 -0
  203. package/dist/server/server/paseo-env.js +70 -0
  204. package/dist/server/server/paseo-env.js.map +1 -0
  205. package/dist/server/server/paseo-worktree-archive-service.d.ts +4 -4
  206. package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -1
  207. package/dist/server/server/paseo-worktree-archive-service.js +11 -11
  208. package/dist/server/server/paseo-worktree-archive-service.js.map +1 -1
  209. package/dist/server/server/persisted-config.d.ts +62 -62
  210. package/dist/server/server/persisted-config.d.ts.map +1 -1
  211. package/dist/server/server/persisted-config.js +4 -4
  212. package/dist/server/server/persisted-config.js.map +1 -1
  213. package/dist/server/server/persistence-hooks.d.ts +8 -9
  214. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  215. package/dist/server/server/persistence-hooks.js +4 -12
  216. package/dist/server/server/persistence-hooks.js.map +1 -1
  217. package/dist/server/server/pid-lock.js.map +1 -1
  218. package/dist/server/server/push/push-service.d.ts.map +1 -1
  219. package/dist/server/server/push/push-service.js +1 -3
  220. package/dist/server/server/push/push-service.js.map +1 -1
  221. package/dist/server/server/relay-transport.d.ts +8 -8
  222. package/dist/server/server/relay-transport.d.ts.map +1 -1
  223. package/dist/server/server/relay-transport.js +27 -16
  224. package/dist/server/server/relay-transport.js.map +1 -1
  225. package/dist/server/server/schedule/service.d.ts.map +1 -1
  226. package/dist/server/server/schedule/service.js +2 -2
  227. package/dist/server/server/schedule/service.js.map +1 -1
  228. package/dist/server/server/script-health-monitor.d.ts.map +1 -1
  229. package/dist/server/server/script-health-monitor.js +7 -6
  230. package/dist/server/server/script-health-monitor.js.map +1 -1
  231. package/dist/server/server/script-proxy.js +1 -1
  232. package/dist/server/server/script-proxy.js.map +1 -1
  233. package/dist/server/server/script-status-projection.d.ts +4 -4
  234. package/dist/server/server/script-status-projection.d.ts.map +1 -1
  235. package/dist/server/server/script-status-projection.js +54 -44
  236. package/dist/server/server/script-status-projection.js.map +1 -1
  237. package/dist/server/server/server-id.d.ts +4 -4
  238. package/dist/server/server/server-id.d.ts.map +1 -1
  239. package/dist/server/server/session.d.ts +50 -19
  240. package/dist/server/server/session.d.ts.map +1 -1
  241. package/dist/server/server/session.js +1116 -783
  242. package/dist/server/server/session.js.map +1 -1
  243. package/dist/server/server/speech/audio.js +1 -1
  244. package/dist/server/server/speech/audio.js.map +1 -1
  245. package/dist/server/server/speech/providers/local/config.d.ts +6 -6
  246. package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
  247. package/dist/server/server/speech/providers/local/config.js +41 -16
  248. package/dist/server/server/speech/providers/local/config.js.map +1 -1
  249. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +2 -2
  250. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
  251. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +42 -19
  252. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
  253. package/dist/server/server/speech/providers/local/runtime.d.ts +4 -4
  254. package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -1
  255. package/dist/server/server/speech/providers/local/runtime.js +108 -77
  256. package/dist/server/server/speech/providers/local/runtime.js.map +1 -1
  257. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +2 -2
  258. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
  259. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +1 -4
  260. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
  261. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +2 -2
  262. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
  263. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +19 -19
  264. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
  265. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -7
  266. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -1
  267. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -1
  268. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +23 -4
  269. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -1
  270. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +35 -28
  271. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -1
  272. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +5 -5
  273. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -1
  274. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +7 -7
  275. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -1
  276. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +5 -0
  277. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -1
  278. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -1
  279. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +3 -1
  280. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -1
  281. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +2 -2
  282. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -1
  283. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +3 -1
  284. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -1
  285. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -1
  286. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +10 -4
  287. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
  288. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +2 -2
  289. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
  290. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +2 -2
  291. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -1
  292. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +4 -1
  293. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
  294. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +2 -2
  295. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -1
  296. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +18 -11
  297. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
  298. package/dist/server/server/speech/providers/openai/config.d.ts +2 -2
  299. package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -1
  300. package/dist/server/server/speech/providers/openai/config.js +58 -31
  301. package/dist/server/server/speech/providers/openai/config.js.map +1 -1
  302. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -1
  303. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +2 -2
  304. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -1
  305. package/dist/server/server/speech/providers/openai/runtime.d.ts +4 -4
  306. package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -1
  307. package/dist/server/server/speech/providers/openai/runtime.js +37 -32
  308. package/dist/server/server/speech/providers/openai/runtime.js.map +1 -1
  309. package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -1
  310. package/dist/server/server/speech/providers/openai/stt.js +4 -3
  311. package/dist/server/server/speech/providers/openai/stt.js.map +1 -1
  312. package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -1
  313. package/dist/server/server/speech/providers/openai/tts.js +3 -2
  314. package/dist/server/server/speech/providers/openai/tts.js.map +1 -1
  315. package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
  316. package/dist/server/server/speech/speech-config-resolver.js +46 -17
  317. package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
  318. package/dist/server/server/speech/speech-provider.d.ts +2 -2
  319. package/dist/server/server/speech/speech-provider.d.ts.map +1 -1
  320. package/dist/server/server/speech/speech-runtime.d.ts +6 -6
  321. package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
  322. package/dist/server/server/speech/speech-runtime.js +17 -17
  323. package/dist/server/server/speech/speech-runtime.js.map +1 -1
  324. package/dist/server/server/speech/speech-types.d.ts +2 -2
  325. package/dist/server/server/speech/speech-types.d.ts.map +1 -1
  326. package/dist/server/server/speech/turn-detection-provider.d.ts +2 -2
  327. package/dist/server/server/speech/turn-detection-provider.d.ts.map +1 -1
  328. package/dist/server/server/utils/diff-highlighter.d.ts +0 -3
  329. package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -1
  330. package/dist/server/server/utils/diff-highlighter.js +67 -66
  331. package/dist/server/server/utils/diff-highlighter.js.map +1 -1
  332. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
  333. package/dist/server/server/voice/voice-turn-controller.js +1 -0
  334. package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
  335. package/dist/server/server/voice-types.d.ts +2 -2
  336. package/dist/server/server/voice-types.d.ts.map +1 -1
  337. package/dist/server/server/websocket-server.d.ts +33 -23
  338. package/dist/server/server/websocket-server.d.ts.map +1 -1
  339. package/dist/server/server/websocket-server.js +349 -241
  340. package/dist/server/server/websocket-server.js.map +1 -1
  341. package/dist/server/server/workspace-git-metadata.d.ts +2 -2
  342. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
  343. package/dist/server/server/workspace-git-metadata.js +2 -32
  344. package/dist/server/server/workspace-git-metadata.js.map +1 -1
  345. package/dist/server/server/workspace-git-service.d.ts +17 -13
  346. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  347. package/dist/server/server/workspace-git-service.js +232 -140
  348. package/dist/server/server/workspace-git-service.js.map +1 -1
  349. package/dist/server/server/workspace-reconciliation-service.d.ts +5 -4
  350. package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -1
  351. package/dist/server/server/workspace-reconciliation-service.js +82 -82
  352. package/dist/server/server/workspace-reconciliation-service.js.map +1 -1
  353. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
  354. package/dist/server/server/workspace-registry-bootstrap.js +40 -33
  355. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
  356. package/dist/server/server/workspace-registry-model.d.ts +19 -6
  357. package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
  358. package/dist/server/server/workspace-registry-model.js +35 -21
  359. package/dist/server/server/workspace-registry-model.js.map +1 -1
  360. package/dist/server/server/workspace-registry.d.ts +2 -2
  361. package/dist/server/server/workspace-script-runtime-store.d.ts +2 -2
  362. package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -1
  363. package/dist/server/server/workspace-service-env.js +3 -3
  364. package/dist/server/server/workspace-service-env.js.map +1 -1
  365. package/dist/server/server/worktree-bootstrap.d.ts +4 -4
  366. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
  367. package/dist/server/server/worktree-bootstrap.js +95 -67
  368. package/dist/server/server/worktree-bootstrap.js.map +1 -1
  369. package/dist/server/server/worktree-session.d.ts +8 -8
  370. package/dist/server/server/worktree-session.d.ts.map +1 -1
  371. package/dist/server/server/worktree-session.js +27 -19
  372. package/dist/server/server/worktree-session.js.map +1 -1
  373. package/dist/server/services/github-service.d.ts +2 -7
  374. package/dist/server/services/github-service.d.ts.map +1 -1
  375. package/dist/server/services/github-service.js +156 -157
  376. package/dist/server/services/github-service.js.map +1 -1
  377. package/dist/server/shared/agent-attention-notification.d.ts +9 -8
  378. package/dist/server/shared/agent-attention-notification.d.ts.map +1 -1
  379. package/dist/server/shared/agent-attention-notification.js +27 -17
  380. package/dist/server/shared/agent-attention-notification.js.map +1 -1
  381. package/dist/server/shared/daemon-endpoints.d.ts +2 -2
  382. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
  383. package/dist/server/shared/daemon-endpoints.js +17 -2
  384. package/dist/server/shared/daemon-endpoints.js.map +1 -1
  385. package/dist/server/shared/messages.d.ts +21962 -3049
  386. package/dist/server/shared/messages.d.ts.map +1 -1
  387. package/dist/server/shared/messages.js +79 -2
  388. package/dist/server/shared/messages.js.map +1 -1
  389. package/dist/server/shared/terminal-stream-protocol.d.ts +2 -2
  390. package/dist/server/shared/terminal-stream-protocol.d.ts.map +1 -1
  391. package/dist/server/shared/tool-call-display.d.ts +2 -2
  392. package/dist/server/shared/tool-call-display.d.ts.map +1 -1
  393. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  394. package/dist/server/terminal/terminal-manager.js +1 -3
  395. package/dist/server/terminal/terminal-manager.js.map +1 -1
  396. package/dist/server/terminal/terminal-output-coalescer.d.ts +6 -6
  397. package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -1
  398. package/dist/server/terminal/terminal.d.ts +3 -2
  399. package/dist/server/terminal/terminal.d.ts.map +1 -1
  400. package/dist/server/terminal/terminal.js +57 -19
  401. package/dist/server/terminal/terminal.js.map +1 -1
  402. package/dist/server/utils/checkout-git.d.ts +13 -12
  403. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  404. package/dist/server/utils/checkout-git.js +416 -282
  405. package/dist/server/utils/checkout-git.js.map +1 -1
  406. package/dist/server/utils/directory-suggestions.js +12 -33
  407. package/dist/server/utils/directory-suggestions.js.map +1 -1
  408. package/dist/server/utils/executable.d.ts +1 -14
  409. package/dist/server/utils/executable.d.ts.map +1 -1
  410. package/dist/server/utils/executable.js +13 -49
  411. package/dist/server/utils/executable.js.map +1 -1
  412. package/dist/server/utils/github-remote.d.ts +13 -0
  413. package/dist/server/utils/github-remote.d.ts.map +1 -0
  414. package/dist/server/utils/github-remote.js +128 -0
  415. package/dist/server/utils/github-remote.js.map +1 -0
  416. package/dist/server/utils/paseo-config-file.d.ts +30 -0
  417. package/dist/server/utils/paseo-config-file.d.ts.map +1 -0
  418. package/dist/server/utils/paseo-config-file.js +90 -0
  419. package/dist/server/utils/paseo-config-file.js.map +1 -0
  420. package/dist/server/utils/paseo-config-schema.d.ts +290 -0
  421. package/dist/server/utils/paseo-config-schema.d.ts.map +1 -0
  422. package/dist/server/utils/paseo-config-schema.js +60 -0
  423. package/dist/server/utils/paseo-config-schema.js.map +1 -0
  424. package/dist/server/utils/project-icon.d.ts.map +1 -1
  425. package/dist/server/utils/project-icon.js +84 -109
  426. package/dist/server/utils/project-icon.js.map +1 -1
  427. package/dist/server/utils/promise-timeout.d.ts +2 -2
  428. package/dist/server/utils/promise-timeout.d.ts.map +1 -1
  429. package/dist/server/utils/run-git-command.d.ts +3 -1
  430. package/dist/server/utils/run-git-command.d.ts.map +1 -1
  431. package/dist/server/utils/run-git-command.js +10 -1
  432. package/dist/server/utils/run-git-command.js.map +1 -1
  433. package/dist/server/utils/script-hostname.d.ts +2 -2
  434. package/dist/server/utils/script-hostname.d.ts.map +1 -1
  435. package/dist/server/utils/spawn.d.ts +10 -3
  436. package/dist/server/utils/spawn.d.ts.map +1 -1
  437. package/dist/server/utils/spawn.js +30 -5
  438. package/dist/server/utils/spawn.js.map +1 -1
  439. package/dist/server/utils/windows-command.d.ts +15 -0
  440. package/dist/server/utils/windows-command.d.ts.map +1 -0
  441. package/dist/server/utils/windows-command.js +37 -0
  442. package/dist/server/utils/windows-command.js.map +1 -0
  443. package/dist/server/utils/worktree.d.ts +10 -7
  444. package/dist/server/utils/worktree.d.ts.map +1 -1
  445. package/dist/server/utils/worktree.js +64 -55
  446. package/dist/server/utils/worktree.js.map +1 -1
  447. package/dist/src/server/pid-lock.js.map +1 -1
  448. package/package.json +15 -20
  449. package/dist/server/server/agent/llm-openai.d.ts +0 -7
  450. package/dist/server/server/agent/llm-openai.d.ts.map +0 -1
  451. package/dist/server/server/agent/llm-openai.js +0 -8
  452. package/dist/server/server/agent/llm-openai.js.map +0 -1
  453. package/dist/server/server/agent/orchestrator.d.ts +0 -12
  454. package/dist/server/server/agent/orchestrator.d.ts.map +0 -1
  455. package/dist/server/server/agent/orchestrator.js +0 -12
  456. package/dist/server/server/agent/orchestrator.js.map +0 -1
  457. package/dist/server/server/types.d.ts +0 -5
  458. package/dist/server/server/types.d.ts.map +0 -1
  459. package/dist/server/server/types.js +0 -3
  460. package/dist/server/server/types.js.map +0 -1
  461. package/dist/server/server/workspace-registry.test-helpers.d.ts +0 -37
  462. package/dist/server/server/workspace-registry.test-helpers.d.ts.map +0 -1
  463. package/dist/server/server/workspace-registry.test-helpers.js +0 -121
  464. package/dist/server/server/workspace-registry.test-helpers.js.map +0 -1
@@ -1,14 +1,16 @@
1
1
  import { watch } from "node:fs";
2
2
  import { readFile, readdir } from "node:fs/promises";
3
3
  import { join, resolve } from "node:path";
4
+ import pLimit from "p-limit";
4
5
  import { getCheckoutDiff, getCheckoutShortstat, getCheckoutStatus, getPullRequestStatus, hasOriginRemote, listBranchSuggestions, resolveRepositoryDefaultBranch, resolveBranchCheckout, resolveAbsoluteGitDir, } from "../utils/checkout-git.js";
5
6
  import { createGitHubService } from "../services/github-service.js";
6
7
  import { parseGitRevParsePath } from "../utils/git-rev-parse-path.js";
7
8
  import { runGitCommand } from "../utils/run-git-command.js";
9
+ import { resolveGitHubRemote } from "../utils/github-remote.js";
8
10
  import { listPaseoWorktrees } from "../utils/worktree.js";
9
11
  import { READ_ONLY_GIT_ENV } from "./checkout-git-utils.js";
10
12
  import { buildWorkspaceGitMetadataFromSnapshot, } from "./workspace-git-metadata.js";
11
- import { normalizeWorkspaceId } from "./workspace-registry-model.js";
13
+ import { checkoutLiteFromGitSnapshot, normalizeWorkspaceId } from "./workspace-registry-model.js";
12
14
  const WORKSPACE_GIT_WATCH_DEBOUNCE_MS = 500;
13
15
  const BACKGROUND_GIT_FETCH_INTERVAL_MS = 180000;
14
16
  export const WORKSPACE_GIT_SELF_HEAL_INTERVAL_MS = 60000;
@@ -17,11 +19,35 @@ const WORKING_TREE_WATCH_FALLBACK_REFRESH_MS = 5000;
17
19
  const WORKSPACE_GIT_CONSUMER_TTL_MS = 15000;
18
20
  // Non-forced refresh triggers share this minimum gap to absorb watcher/self-heal bursts; force bypasses it.
19
21
  const WORKSPACE_GIT_INTERNAL_MIN_GAP_MS = 2000;
22
+ const linuxWatchReaddirConcurrency = parseInt(process.env.PASEO_LINUX_WATCH_READDIR_CONCURRENCY ?? "16", 10) || 16;
23
+ const linuxWatchReaddirLimit = pLimit(linuxWatchReaddirConcurrency);
24
+ function buildDefaultWorkspaceGitServiceDeps() {
25
+ return {
26
+ watch,
27
+ readdir,
28
+ getCheckoutStatus,
29
+ getCheckoutShortstat,
30
+ getCheckoutDiff,
31
+ getPullRequestStatus,
32
+ resolveBranchCheckout,
33
+ resolveRepositoryDefaultBranch,
34
+ listBranchSuggestions,
35
+ listPaseoWorktrees,
36
+ github: createGitHubService(),
37
+ resolveAbsoluteGitDir,
38
+ hasOriginRemote,
39
+ runGitFetch,
40
+ runGitCommand,
41
+ now: () => new Date(),
42
+ };
43
+ }
44
+ function resolveWorkspaceGitServiceDeps(deps) {
45
+ return { ...buildDefaultWorkspaceGitServiceDeps(), ...deps };
46
+ }
20
47
  export class WorkspaceGitServiceImpl {
21
48
  constructor(options) {
22
49
  this.workspaceTargets = new Map();
23
50
  this.repoTargets = new Map();
24
- this.workspaceTargetSetups = new Map();
25
51
  this.workingTreeWatchTargets = new Map();
26
52
  this.workingTreeWatchSetups = new Map();
27
53
  this.branchValidationCache = new Map();
@@ -33,34 +59,20 @@ export class WorkspaceGitServiceImpl {
33
59
  this.checkoutDiffCache = new Map();
34
60
  this.logger = options.logger.child({ module: "workspace-git-service" });
35
61
  this.paseoHome = options.paseoHome;
36
- this.deps = {
37
- watch: options.deps?.watch ?? watch,
38
- readdir: options.deps?.readdir ?? readdir,
39
- getCheckoutStatus: options.deps?.getCheckoutStatus ?? getCheckoutStatus,
40
- getCheckoutShortstat: options.deps?.getCheckoutShortstat ?? getCheckoutShortstat,
41
- getCheckoutDiff: options.deps?.getCheckoutDiff ?? getCheckoutDiff,
42
- getPullRequestStatus: options.deps?.getPullRequestStatus ?? getPullRequestStatus,
43
- resolveBranchCheckout: options.deps?.resolveBranchCheckout ?? resolveBranchCheckout,
44
- resolveRepositoryDefaultBranch: options.deps?.resolveRepositoryDefaultBranch ?? resolveRepositoryDefaultBranch,
45
- listBranchSuggestions: options.deps?.listBranchSuggestions ?? listBranchSuggestions,
46
- listPaseoWorktrees: options.deps?.listPaseoWorktrees ?? listPaseoWorktrees,
47
- github: options.deps?.github ?? createGitHubService(),
48
- resolveAbsoluteGitDir: options.deps?.resolveAbsoluteGitDir ?? resolveAbsoluteGitDir,
49
- hasOriginRemote: options.deps?.hasOriginRemote ?? hasOriginRemote,
50
- runGitFetch: options.deps?.runGitFetch ?? runGitFetch,
51
- runGitCommand: options.deps?.runGitCommand ?? runGitCommand,
52
- now: options.deps?.now ?? (() => new Date()),
53
- };
62
+ this.deps = resolveWorkspaceGitServiceDeps(options.deps);
54
63
  }
55
- async subscribe(params, listener) {
64
+ registerWorkspace(params, listener) {
56
65
  const cwd = normalizeWorkspaceId(params.cwd);
57
- const target = await this.ensureWorkspaceTarget(cwd);
66
+ const target = this.ensureWorkspaceTarget(cwd);
58
67
  target.listeners.add(listener);
59
68
  if (target.listeners.size === 1) {
60
69
  this.startWorkspaceSubscriptionTimers(target);
61
70
  }
71
+ if (!target.latestSnapshot) {
72
+ this.scheduleInitialWorkspaceRefresh(target);
73
+ }
74
+ this.scheduleWorkspaceObservationSetup(target);
62
75
  return {
63
- initial: target.latestSnapshot ?? (await this.getSnapshot(cwd)),
64
76
  unsubscribe: () => {
65
77
  this.removeWorkspaceListener(cwd, listener);
66
78
  },
@@ -69,12 +81,48 @@ export class WorkspaceGitServiceImpl {
69
81
  async getSnapshot(cwd, options) {
70
82
  cwd = normalizeWorkspaceId(cwd);
71
83
  const request = this.normalizeRefreshRequest(options, "getSnapshot", true);
72
- const target = await this.ensureWorkspaceTarget(cwd);
84
+ const target = this.ensureWorkspaceTarget(cwd);
73
85
  if (!request.force && this.isSnapshotWarm(target)) {
74
86
  return target.latestSnapshot;
75
87
  }
76
88
  return this.requestWorkspaceSnapshot(target, request);
77
89
  }
90
+ async getCheckout(cwd) {
91
+ const normalizedCwd = normalizeWorkspaceId(cwd);
92
+ try {
93
+ const status = await this.deps.getCheckoutStatus(normalizedCwd, {
94
+ paseoHome: this.paseoHome,
95
+ });
96
+ if (!status.isGit) {
97
+ return checkoutLiteFromGitSnapshot(normalizedCwd, {
98
+ isGit: false,
99
+ currentBranch: null,
100
+ remoteUrl: null,
101
+ repoRoot: null,
102
+ isPaseoOwnedWorktree: false,
103
+ mainRepoRoot: null,
104
+ });
105
+ }
106
+ return checkoutLiteFromGitSnapshot(normalizedCwd, {
107
+ isGit: true,
108
+ currentBranch: status.currentBranch,
109
+ remoteUrl: status.remoteUrl,
110
+ repoRoot: status.repoRoot,
111
+ isPaseoOwnedWorktree: status.isPaseoOwnedWorktree,
112
+ mainRepoRoot: status.mainRepoRoot,
113
+ });
114
+ }
115
+ catch {
116
+ return checkoutLiteFromGitSnapshot(normalizedCwd, {
117
+ isGit: false,
118
+ currentBranch: null,
119
+ remoteUrl: null,
120
+ repoRoot: null,
121
+ isPaseoOwnedWorktree: false,
122
+ mainRepoRoot: null,
123
+ });
124
+ }
125
+ }
78
126
  peekSnapshot(cwd) {
79
127
  cwd = normalizeWorkspaceId(cwd);
80
128
  return this.workspaceTargets.get(cwd)?.latestSnapshot ?? null;
@@ -121,7 +169,7 @@ export class WorkspaceGitServiceImpl {
121
169
  return this.readAuxiliaryCache(this.localBranchCache, key, options, async () => {
122
170
  const result = await this.deps.runGitCommand(["rev-parse", "--verify", "--quiet", ref], {
123
171
  cwd: normalizedCwd,
124
- env: READ_ONLY_GIT_ENV,
172
+ envOverlay: READ_ONLY_GIT_ENV,
125
173
  acceptExitCodes: [0, 1],
126
174
  });
127
175
  return result.exitCode === 0;
@@ -141,7 +189,7 @@ export class WorkspaceGitServiceImpl {
141
189
  return this.readAuxiliaryCache(this.stashListCache, key, readOptions, async () => {
142
190
  const { stdout } = await this.deps.runGitCommand(["stash", "list", "--format=%gd%x00%s"], {
143
191
  cwd: normalizedCwd,
144
- env: READ_ONLY_GIT_ENV,
192
+ envOverlay: READ_ONLY_GIT_ENV,
145
193
  });
146
194
  return parseWorkspaceGitStashList(stdout, { paseoOnly });
147
195
  });
@@ -176,9 +224,7 @@ export class WorkspaceGitServiceImpl {
176
224
  }
177
225
  async getWorkspaceGitMetadata(cwd, options) {
178
226
  const snapshot = await this.getSnapshot(cwd, options);
179
- const directoryName = options?.directoryName ??
180
- normalizeWorkspaceId(cwd).split(/[\\/]/).filter(Boolean).at(-1) ??
181
- cwd;
227
+ const directoryName = options?.directoryName ?? normalizeWorkspaceId(cwd).split(/[\\/]/).findLast(Boolean) ?? cwd;
182
228
  return buildWorkspaceGitMetadataFromSnapshot({
183
229
  cwd: normalizeWorkspaceId(cwd),
184
230
  directoryName,
@@ -195,17 +241,14 @@ export class WorkspaceGitServiceImpl {
195
241
  }
196
242
  async refresh(cwd, _options) {
197
243
  cwd = normalizeWorkspaceId(cwd);
198
- const target = this.workspaceTargets.get(cwd);
199
- if (target) {
200
- await this.refreshWorkspaceTarget(target, {
201
- force: false,
202
- includeGitHub: false,
203
- reason: "refresh",
204
- notify: true,
205
- });
206
- return;
207
- }
208
- await this.ensureWorkspaceTarget(cwd);
244
+ const target = this.ensureWorkspaceTarget(cwd);
245
+ await this.refreshWorkspaceTarget(target, {
246
+ force: false,
247
+ includeGitHub: false,
248
+ reason: "refresh",
249
+ notify: true,
250
+ });
251
+ this.scheduleWorkspaceObservationSetup(target);
209
252
  }
210
253
  async requestWorkingTreeWatch(cwd, onChange) {
211
254
  cwd = normalizeWorkspaceId(cwd);
@@ -230,7 +273,6 @@ export class WorkspaceGitServiceImpl {
230
273
  this.closeWorkspaceTarget(target);
231
274
  }
232
275
  this.workspaceTargets.clear();
233
- this.workspaceTargetSetups.clear();
234
276
  for (const target of this.repoTargets.values()) {
235
277
  this.closeRepoTarget(target);
236
278
  }
@@ -241,20 +283,12 @@ export class WorkspaceGitServiceImpl {
241
283
  this.workingTreeWatchTargets.clear();
242
284
  this.workingTreeWatchSetups.clear();
243
285
  }
244
- async ensureWorkspaceTarget(cwd) {
286
+ ensureWorkspaceTarget(cwd) {
245
287
  const existingTarget = this.workspaceTargets.get(cwd);
246
288
  if (existingTarget) {
247
289
  return existingTarget;
248
290
  }
249
- const existingSetup = this.workspaceTargetSetups.get(cwd);
250
- if (existingSetup) {
251
- return existingSetup;
252
- }
253
- const setup = this.createWorkspaceTarget(cwd).finally(() => {
254
- this.workspaceTargetSetups.delete(cwd);
255
- });
256
- this.workspaceTargetSetups.set(cwd, setup);
257
- return setup;
291
+ return this.createWorkspaceTarget(cwd);
258
292
  }
259
293
  readAuxiliaryCache(cache, key, options, load) {
260
294
  if (options?.force && !options.reason) {
@@ -316,7 +350,7 @@ export class WorkspaceGitServiceImpl {
316
350
  this.workingTreeWatchSetups.set(cwd, setup);
317
351
  return setup;
318
352
  }
319
- async createWorkspaceTarget(cwd) {
353
+ createWorkspaceTarget(cwd) {
320
354
  const target = {
321
355
  cwd,
322
356
  listeners: new Set(),
@@ -331,31 +365,67 @@ export class WorkspaceGitServiceImpl {
331
365
  latestFingerprint: null,
332
366
  lastShellOutAtMs: null,
333
367
  repoGitRoot: null,
368
+ cachedGitHubRemote: null,
369
+ observationSetupPromise: null,
370
+ observationSetupComplete: false,
371
+ closed: false,
334
372
  };
335
373
  this.workspaceTargets.set(cwd, target);
336
- try {
337
- await this.requestWorkspaceSnapshot(target, {
374
+ return target;
375
+ }
376
+ scheduleInitialWorkspaceRefresh(target) {
377
+ queueMicrotask(() => {
378
+ if (!this.isActiveObservedWorkspaceTarget(target) || target.latestSnapshot) {
379
+ return;
380
+ }
381
+ void this.refreshWorkspaceTarget(target, {
338
382
  force: false,
339
383
  includeGitHub: true,
340
384
  reason: "initial",
341
- notify: false,
385
+ notify: true,
342
386
  });
343
- const gitDir = await this.deps.resolveAbsoluteGitDir(cwd);
344
- if (!gitDir) {
345
- return target;
346
- }
347
- const repoGitRoot = await this.resolveWorkspaceGitRefsRoot(gitDir);
348
- target.repoGitRoot = repoGitRoot;
349
- this.startWorkspaceWatchers(target, gitDir, repoGitRoot);
350
- await this.ensureRepoTarget(target);
351
- return target;
387
+ });
388
+ }
389
+ scheduleWorkspaceObservationSetup(target) {
390
+ if (target.observationSetupComplete ||
391
+ target.observationSetupPromise ||
392
+ !this.isActiveObservedWorkspaceTarget(target)) {
393
+ return;
352
394
  }
353
- catch (error) {
354
- this.closeWorkspaceTarget(target);
355
- this.workspaceTargets.delete(cwd);
356
- throw error;
395
+ target.observationSetupPromise = Promise.resolve()
396
+ .then(() => this.setupWorkspaceObservation(target))
397
+ .catch((error) => {
398
+ this.logger.warn({ err: error, cwd: target.cwd }, "Failed to set up workspace git observation");
399
+ })
400
+ .finally(() => {
401
+ target.observationSetupPromise = null;
402
+ });
403
+ }
404
+ async setupWorkspaceObservation(target) {
405
+ const gitDir = await this.deps.resolveAbsoluteGitDir(target.cwd);
406
+ if (!this.isActiveObservedWorkspaceTarget(target)) {
407
+ return;
408
+ }
409
+ if (!gitDir) {
410
+ target.observationSetupComplete = true;
411
+ return;
412
+ }
413
+ const repoGitRoot = await this.resolveWorkspaceGitRefsRoot(gitDir);
414
+ if (!this.isActiveObservedWorkspaceTarget(target)) {
415
+ return;
416
+ }
417
+ target.repoGitRoot = repoGitRoot;
418
+ this.startWorkspaceWatchers(target, gitDir, repoGitRoot);
419
+ await this.ensureRepoTarget(target);
420
+ if (this.isActiveObservedWorkspaceTarget(target)) {
421
+ target.observationSetupComplete = true;
357
422
  }
358
423
  }
424
+ isActiveObservedWorkspaceTarget(target) {
425
+ return (!target.closed &&
426
+ target.listeners.size > 0 &&
427
+ this.workspaceTargets.get(target.cwd) === target);
428
+ }
359
429
  async createWorkingTreeWatchTarget(cwd) {
360
430
  const repoRoot = await this.resolveCheckoutWatchRoot(cwd);
361
431
  const target = {
@@ -415,7 +485,7 @@ export class WorkspaceGitServiceImpl {
415
485
  try {
416
486
  const { stdout } = await this.deps.runGitCommand(["rev-parse", "--show-toplevel"], {
417
487
  cwd,
418
- env: READ_ONLY_GIT_ENV,
488
+ envOverlay: READ_ONLY_GIT_ENV,
419
489
  });
420
490
  return parseGitRevParsePath(stdout);
421
491
  }
@@ -457,7 +527,7 @@ export class WorkspaceGitServiceImpl {
457
527
  }
458
528
  async ensureRepoTarget(workspaceTarget) {
459
529
  const repoGitRoot = workspaceTarget.repoGitRoot;
460
- if (!repoGitRoot) {
530
+ if (!repoGitRoot || !this.isActiveObservedWorkspaceTarget(workspaceTarget)) {
461
531
  return;
462
532
  }
463
533
  const existingTarget = this.repoTargets.get(repoGitRoot);
@@ -466,6 +536,9 @@ export class WorkspaceGitServiceImpl {
466
536
  return;
467
537
  }
468
538
  const hasOrigin = await this.deps.hasOriginRemote(workspaceTarget.cwd);
539
+ if (!this.isActiveObservedWorkspaceTarget(workspaceTarget)) {
540
+ return;
541
+ }
469
542
  if (!hasOrigin) {
470
543
  return;
471
544
  }
@@ -490,13 +563,16 @@ export class WorkspaceGitServiceImpl {
490
563
  const target = typeof targetOrCwd === "string"
491
564
  ? this.workspaceTargets.get(normalizeWorkspaceId(targetOrCwd))
492
565
  : targetOrCwd;
493
- if (!target) {
566
+ if (!target || target.closed || this.workspaceTargets.get(target.cwd) !== target) {
494
567
  return;
495
568
  }
496
569
  if (target.debounceTimer) {
497
570
  clearTimeout(target.debounceTimer);
498
571
  }
499
572
  target.debounceTimer = setTimeout(() => {
573
+ if (target.closed || this.workspaceTargets.get(target.cwd) !== target) {
574
+ return;
575
+ }
500
576
  target.debounceTimer = null;
501
577
  void this.refreshWorkspaceTarget(target, {
502
578
  force: options?.force === true,
@@ -509,6 +585,7 @@ export class WorkspaceGitServiceImpl {
509
585
  startWorkspaceSubscriptionTimers(target) {
510
586
  if (!target.selfHealTimer) {
511
587
  target.selfHealTimer = setInterval(() => {
588
+ this.scheduleWorkspaceObservationSetup(target);
512
589
  this.getSnapshot(target.cwd, { reason: "self-heal-git" }).catch((error) => {
513
590
  this.logger.warn({ err: error, cwd: target.cwd, reason: "self-heal-git" }, "Failed to run workspace git self-heal refresh");
514
591
  });
@@ -527,7 +604,9 @@ export class WorkspaceGitServiceImpl {
527
604
  return;
528
605
  }
529
606
  const headRef = snapshot.git.currentBranch;
530
- if (!headRef || !hasGitHubRemoteUrl(snapshot.git.remoteUrl)) {
607
+ const hasGitHubRemote = target.cachedGitHubRemote?.remoteUrl === snapshot.git.remoteUrl &&
608
+ target.cachedGitHubRemote.identity !== null;
609
+ if (!headRef || !hasGitHubRemote) {
531
610
  this.stopGitHubPollForTarget(target);
532
611
  return;
533
612
  }
@@ -540,6 +619,9 @@ export class WorkspaceGitServiceImpl {
540
619
  cwd: target.cwd,
541
620
  headRef,
542
621
  onStatus: () => {
622
+ if (!this.isActiveObservedWorkspaceTarget(target)) {
623
+ return;
624
+ }
543
625
  void this.refreshWorkspaceTarget(target, {
544
626
  force: false,
545
627
  includeGitHub: true,
@@ -656,30 +738,38 @@ export class WorkspaceGitServiceImpl {
656
738
  }
657
739
  async listLinuxWatchDirectories(rootPath) {
658
740
  const directories = [];
659
- const pending = [rootPath];
660
- while (pending.length > 0) {
661
- const directory = pending.pop();
662
- if (!directory) {
663
- continue;
664
- }
665
- directories.push(directory);
666
- let entries;
667
- try {
668
- entries = await this.deps.readdir(directory, { withFileTypes: true });
669
- }
670
- catch {
671
- continue;
672
- }
673
- for (const entry of entries) {
674
- if (!entry.isDirectory() || entry.name === ".git") {
741
+ let currentLevel = [rootPath];
742
+ while (currentLevel.length > 0) {
743
+ directories.push(...currentLevel);
744
+ const readResults = await Promise.all(currentLevel.map((directory) => linuxWatchReaddirLimit(async () => {
745
+ try {
746
+ return await this.deps.readdir(directory, { withFileTypes: true });
747
+ }
748
+ catch {
749
+ return null;
750
+ }
751
+ })));
752
+ const nextLevel = [];
753
+ for (let i = 0; i < currentLevel.length; i += 1) {
754
+ const directory = currentLevel[i];
755
+ const entries = readResults[i];
756
+ if (!directory || !entries)
675
757
  continue;
758
+ for (const entry of entries) {
759
+ if (!entry.isDirectory() || entry.name === ".git") {
760
+ continue;
761
+ }
762
+ nextLevel.push(join(directory, entry.name));
676
763
  }
677
- pending.push(join(directory, entry.name));
678
764
  }
765
+ currentLevel = nextLevel;
679
766
  }
680
767
  return directories;
681
768
  }
682
769
  async refreshWorkspaceTarget(target, request) {
770
+ if (target.closed || this.workspaceTargets.get(target.cwd) !== target) {
771
+ return;
772
+ }
683
773
  try {
684
774
  await this.requestWorkspaceSnapshot(target, request);
685
775
  }
@@ -730,6 +820,18 @@ export class WorkspaceGitServiceImpl {
730
820
  }
731
821
  return (this.deps.now().getTime() - target.latestSnapshotLoadedAtMs <= WORKSPACE_GIT_CONSUMER_TTL_MS);
732
822
  }
823
+ async resolveGitHubRemoteForTarget(target, remoteUrl) {
824
+ if (!remoteUrl) {
825
+ target.cachedGitHubRemote = null;
826
+ return null;
827
+ }
828
+ if (target.cachedGitHubRemote?.remoteUrl === remoteUrl) {
829
+ return target.cachedGitHubRemote.identity;
830
+ }
831
+ const identity = await resolveGitHubRemote({ remoteUrl });
832
+ target.cachedGitHubRemote = { remoteUrl, identity };
833
+ return identity;
834
+ }
733
835
  shouldThrottleNonForcedRefresh(target) {
734
836
  if (!target.latestSnapshot || target.lastShellOutAtMs === null) {
735
837
  return false;
@@ -780,9 +882,45 @@ export class WorkspaceGitServiceImpl {
780
882
  if (forceGitHub) {
781
883
  this.deps.github.invalidate({ cwd: target.cwd });
782
884
  }
783
- const snapshot = await loadWorkspaceGitRuntimeSnapshot(target.cwd, { paseoHome: this.paseoHome }, now, this.deps, { force: request.force, forceGitHub, reason: request.reason });
885
+ const cwd = target.cwd;
886
+ const context = { paseoHome: this.paseoHome };
887
+ const checkoutStatus = await this.deps.getCheckoutStatus(cwd, context);
888
+ if (!checkoutStatus.isGit) {
889
+ target.latestSnapshotLoadedAtMs = now.getTime();
890
+ return buildNotGitSnapshot(cwd);
891
+ }
892
+ const githubRemote = await this.resolveGitHubRemoteForTarget(target, checkoutStatus.remoteUrl);
893
+ const [diffStat, github] = await Promise.all([
894
+ this.deps.getCheckoutShortstat(cwd, context, { force: request.force }).catch(() => null),
895
+ loadGitHubSnapshot({
896
+ cwd,
897
+ githubRemote,
898
+ now,
899
+ deps: this.deps,
900
+ force: forceGitHub,
901
+ reason: request.reason,
902
+ }),
903
+ ]);
784
904
  target.latestSnapshotLoadedAtMs = now.getTime();
785
- return snapshot;
905
+ return {
906
+ cwd,
907
+ git: {
908
+ isGit: true,
909
+ repoRoot: checkoutStatus.repoRoot,
910
+ mainRepoRoot: checkoutStatus.mainRepoRoot,
911
+ currentBranch: checkoutStatus.currentBranch,
912
+ remoteUrl: checkoutStatus.remoteUrl,
913
+ isPaseoOwnedWorktree: checkoutStatus.isPaseoOwnedWorktree,
914
+ isDirty: checkoutStatus.isDirty,
915
+ baseRef: checkoutStatus.baseRef,
916
+ aheadBehind: checkoutStatus.aheadBehind,
917
+ aheadOfOrigin: checkoutStatus.aheadOfOrigin,
918
+ behindOfOrigin: checkoutStatus.behindOfOrigin,
919
+ hasRemote: checkoutStatus.hasRemote,
920
+ diffStat,
921
+ },
922
+ github,
923
+ };
786
924
  }
787
925
  rememberSnapshot(target, snapshot, options) {
788
926
  target.latestSnapshot = snapshot;
@@ -866,6 +1004,7 @@ export class WorkspaceGitServiceImpl {
866
1004
  this.workingTreeWatchTargets.delete(cwd);
867
1005
  }
868
1006
  closeWorkspaceTarget(target) {
1007
+ target.closed = true;
869
1008
  if (target.debounceTimer) {
870
1009
  clearTimeout(target.debounceTimer);
871
1010
  target.debounceTimer = null;
@@ -901,44 +1040,8 @@ export class WorkspaceGitServiceImpl {
901
1040
  target.workspaceKeys.clear();
902
1041
  }
903
1042
  }
904
- async function loadWorkspaceGitRuntimeSnapshot(cwd, context, now, deps, options) {
905
- const checkoutStatus = await deps.getCheckoutStatus(cwd, context);
906
- if (!checkoutStatus.isGit) {
907
- return buildNotGitSnapshot(cwd);
908
- }
909
- const [diffStat, github] = await Promise.all([
910
- deps.getCheckoutShortstat(cwd, context, { force: options?.force }),
911
- loadGitHubSnapshot({
912
- cwd,
913
- remoteUrl: checkoutStatus.remoteUrl,
914
- now,
915
- deps,
916
- force: options?.forceGitHub,
917
- reason: options?.reason,
918
- }),
919
- ]);
920
- return {
921
- cwd,
922
- git: {
923
- isGit: true,
924
- repoRoot: checkoutStatus.repoRoot,
925
- mainRepoRoot: checkoutStatus.isPaseoOwnedWorktree ? checkoutStatus.mainRepoRoot : null,
926
- currentBranch: checkoutStatus.currentBranch,
927
- remoteUrl: checkoutStatus.remoteUrl,
928
- isPaseoOwnedWorktree: checkoutStatus.isPaseoOwnedWorktree,
929
- isDirty: checkoutStatus.isDirty,
930
- baseRef: checkoutStatus.baseRef,
931
- aheadBehind: checkoutStatus.aheadBehind,
932
- aheadOfOrigin: checkoutStatus.aheadOfOrigin,
933
- behindOfOrigin: checkoutStatus.behindOfOrigin,
934
- hasRemote: checkoutStatus.hasRemote,
935
- diffStat,
936
- },
937
- github,
938
- };
939
- }
940
1043
  async function loadGitHubSnapshot(options) {
941
- if (!hasGitHubRemoteUrl(options.remoteUrl)) {
1044
+ if (!options.githubRemote) {
942
1045
  return {
943
1046
  featuresEnabled: false,
944
1047
  pullRequest: null,
@@ -976,14 +1079,6 @@ async function loadGitHubSnapshot(options) {
976
1079
  };
977
1080
  }
978
1081
  }
979
- function hasGitHubRemoteUrl(remoteUrl) {
980
- if (!remoteUrl) {
981
- return false;
982
- }
983
- return (remoteUrl.includes("github.com/") ||
984
- remoteUrl.startsWith("git@github.com:") ||
985
- remoteUrl.startsWith("ssh://git@github.com/"));
986
- }
987
1082
  function parseWorkspaceGitStashList(stdout, options) {
988
1083
  const entries = [];
989
1084
  const lines = stdout.trim().split("\n").filter(Boolean);
@@ -1038,10 +1133,7 @@ function buildNotGitSnapshot(cwd) {
1038
1133
  async function runGitFetch(cwd) {
1039
1134
  await runGitCommand(["fetch", "origin", "--prune"], {
1040
1135
  cwd,
1041
- env: {
1042
- ...process.env,
1043
- GIT_TERMINAL_PROMPT: "0",
1044
- },
1136
+ envOverlay: { GIT_TERMINAL_PROMPT: "0" },
1045
1137
  timeout: 120000,
1046
1138
  });
1047
1139
  }