@getpaseo/server 0.1.35 → 0.1.38

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 (363) hide show
  1. package/dist/scripts/dev-runner.js +1 -1
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/scripts/{daemon-runner.js → supervisor-entrypoint.js} +38 -10
  4. package/dist/scripts/supervisor-entrypoint.js.map +1 -0
  5. package/dist/scripts/supervisor.js +33 -7
  6. package/dist/scripts/supervisor.js.map +1 -1
  7. package/dist/server/client/daemon-client.d.ts +175 -0
  8. package/dist/server/client/daemon-client.d.ts.map +1 -1
  9. package/dist/server/client/daemon-client.js +235 -0
  10. package/dist/server/client/daemon-client.js.map +1 -1
  11. package/dist/server/server/agent/agent-manager.d.ts +13 -0
  12. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  13. package/dist/server/server/agent/agent-manager.js +53 -0
  14. package/dist/server/server/agent/agent-manager.js.map +1 -1
  15. package/dist/server/server/agent/agent-storage.d.ts +10 -10
  16. package/dist/server/server/agent/agent-storage.js +9 -4
  17. package/dist/server/server/agent/agent-storage.js.map +1 -1
  18. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  19. package/dist/server/server/agent/provider-launch-config.js +38 -1
  20. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  21. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  22. package/dist/server/server/agent/providers/claude-agent.js +24 -5
  23. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  24. package/dist/server/server/agent-attention-policy.d.ts +1 -1
  25. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  26. package/dist/server/server/bootstrap.d.ts +0 -4
  27. package/dist/server/server/bootstrap.d.ts.map +1 -1
  28. package/dist/server/server/bootstrap.js +65 -40
  29. package/dist/server/server/bootstrap.js.map +1 -1
  30. package/dist/server/server/chat/chat-mentions.d.ts +31 -0
  31. package/dist/server/server/chat/chat-mentions.d.ts.map +1 -0
  32. package/dist/server/server/chat/chat-mentions.js +71 -0
  33. package/dist/server/server/chat/chat-mentions.js.map +1 -0
  34. package/dist/server/server/chat/chat-rpc-schemas.d.ts +728 -0
  35. package/dist/server/server/chat/chat-rpc-schemas.d.ts.map +1 -0
  36. package/dist/server/server/chat/chat-rpc-schemas.js +103 -0
  37. package/dist/server/server/chat/chat-rpc-schemas.js.map +1 -0
  38. package/dist/server/server/chat/chat-service.d.ts +74 -0
  39. package/dist/server/server/chat/chat-service.d.ts.map +1 -0
  40. package/dist/server/server/chat/chat-service.js +330 -0
  41. package/dist/server/server/chat/chat-service.js.map +1 -0
  42. package/dist/server/server/chat/chat-types.d.ts +75 -0
  43. package/dist/server/server/chat/chat-types.d.ts.map +1 -0
  44. package/dist/server/server/chat/chat-types.js +22 -0
  45. package/dist/server/server/chat/chat-types.js.map +1 -0
  46. package/dist/server/server/checkout-diff-manager.d.ts +41 -0
  47. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -0
  48. package/dist/server/server/checkout-diff-manager.js +272 -0
  49. package/dist/server/server/checkout-diff-manager.js.map +1 -0
  50. package/dist/server/server/checkout-git-utils.d.ts +9 -0
  51. package/dist/server/server/checkout-git-utils.d.ts.map +1 -0
  52. package/dist/server/server/checkout-git-utils.js +37 -0
  53. package/dist/server/server/checkout-git-utils.js.map +1 -0
  54. package/dist/server/server/index.js +0 -4
  55. package/dist/server/server/index.js.map +1 -1
  56. package/dist/server/server/loop/rpc-schemas.d.ts +2937 -0
  57. package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -0
  58. package/dist/server/server/loop/rpc-schemas.js +159 -0
  59. package/dist/server/server/loop/rpc-schemas.js.map +1 -0
  60. package/dist/server/server/loop-service.d.ts +520 -0
  61. package/dist/server/server/loop-service.d.ts.map +1 -0
  62. package/dist/server/server/loop-service.js +741 -0
  63. package/dist/server/server/loop-service.js.map +1 -0
  64. package/dist/server/server/persisted-config.d.ts +10 -10
  65. package/dist/server/server/pid-lock.d.ts +7 -2
  66. package/dist/server/server/pid-lock.d.ts.map +1 -1
  67. package/dist/server/server/pid-lock.js +21 -0
  68. package/dist/server/server/pid-lock.js.map +1 -1
  69. package/dist/server/server/schedule/cron.d.ts +4 -0
  70. package/dist/server/server/schedule/cron.d.ts.map +1 -0
  71. package/dist/server/server/schedule/cron.js +103 -0
  72. package/dist/server/server/schedule/cron.js.map +1 -0
  73. package/dist/server/server/schedule/rpc-schemas.d.ts +2773 -0
  74. package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -0
  75. package/dist/server/server/schedule/rpc-schemas.js +112 -0
  76. package/dist/server/server/schedule/rpc-schemas.js.map +1 -0
  77. package/dist/server/server/schedule/service.d.ts +39 -0
  78. package/dist/server/server/schedule/service.d.ts.map +1 -0
  79. package/dist/server/server/schedule/service.js +397 -0
  80. package/dist/server/server/schedule/service.js.map +1 -0
  81. package/dist/server/server/schedule/store.d.ts +13 -0
  82. package/dist/server/server/schedule/store.d.ts.map +1 -0
  83. package/dist/server/server/schedule/store.js +56 -0
  84. package/dist/server/server/schedule/store.js.map +1 -0
  85. package/dist/server/server/schedule/types.d.ts +710 -0
  86. package/dist/server/server/schedule/types.d.ts.map +1 -0
  87. package/dist/server/server/schedule/types.js +73 -0
  88. package/dist/server/server/schedule/types.js.map +1 -0
  89. package/dist/server/server/session.d.ts +40 -19
  90. package/dist/server/server/session.d.ts.map +1 -1
  91. package/dist/server/server/session.js +779 -568
  92. package/dist/server/server/session.js.map +1 -1
  93. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
  94. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +19 -3
  95. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -1
  96. package/dist/server/server/websocket-server.d.ts +12 -1
  97. package/dist/server/server/websocket-server.d.ts.map +1 -1
  98. package/dist/server/server/websocket-server.js +71 -14
  99. package/dist/server/server/websocket-server.js.map +1 -1
  100. package/dist/server/shared/messages.d.ts +37933 -16895
  101. package/dist/server/shared/messages.d.ts.map +1 -1
  102. package/dist/server/shared/messages.js +41 -0
  103. package/dist/server/shared/messages.js.map +1 -1
  104. package/dist/server/terminal/terminal-manager.js +2 -2
  105. package/dist/server/terminal/terminal-manager.js.map +1 -1
  106. package/dist/server/utils/checkout-git.d.ts +12 -0
  107. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  108. package/dist/server/utils/checkout-git.js +73 -3
  109. package/dist/server/utils/checkout-git.js.map +1 -1
  110. package/dist/server/utils/directory-suggestions.js +20 -4
  111. package/dist/server/utils/directory-suggestions.js.map +1 -1
  112. package/dist/src/server/pid-lock.js +21 -0
  113. package/dist/src/server/pid-lock.js.map +1 -1
  114. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +19 -3
  115. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -1
  116. package/package.json +4 -3
  117. package/dist/scripts/daemon-runner.js.map +0 -1
  118. package/dist/src/server/agent/activity-curator.js +0 -243
  119. package/dist/src/server/agent/activity-curator.js.map +0 -1
  120. package/dist/src/server/agent/agent-manager.js +0 -1802
  121. package/dist/src/server/agent/agent-manager.js.map +0 -1
  122. package/dist/src/server/agent/agent-metadata-generator.js +0 -161
  123. package/dist/src/server/agent/agent-metadata-generator.js.map +0 -1
  124. package/dist/src/server/agent/agent-projections.js +0 -254
  125. package/dist/src/server/agent/agent-projections.js.map +0 -1
  126. package/dist/src/server/agent/agent-response-loop.js +0 -304
  127. package/dist/src/server/agent/agent-response-loop.js.map +0 -1
  128. package/dist/src/server/agent/agent-sdk-types.js +0 -12
  129. package/dist/src/server/agent/agent-sdk-types.js.map +0 -1
  130. package/dist/src/server/agent/agent-storage.js +0 -297
  131. package/dist/src/server/agent/agent-storage.js.map +0 -1
  132. package/dist/src/server/agent/agent-title-limits.js +0 -3
  133. package/dist/src/server/agent/agent-title-limits.js.map +0 -1
  134. package/dist/src/server/agent/audio-utils.js +0 -19
  135. package/dist/src/server/agent/audio-utils.js.map +0 -1
  136. package/dist/src/server/agent/dictation-debug.js +0 -50
  137. package/dist/src/server/agent/dictation-debug.js.map +0 -1
  138. package/dist/src/server/agent/mcp-server.js +0 -754
  139. package/dist/src/server/agent/mcp-server.js.map +0 -1
  140. package/dist/src/server/agent/orchestrator-instructions.js +0 -51
  141. package/dist/src/server/agent/orchestrator-instructions.js.map +0 -1
  142. package/dist/src/server/agent/pcm16-resampler.js +0 -63
  143. package/dist/src/server/agent/pcm16-resampler.js.map +0 -1
  144. package/dist/src/server/agent/provider-launch-config.js +0 -176
  145. package/dist/src/server/agent/provider-launch-config.js.map +0 -1
  146. package/dist/src/server/agent/provider-manifest.js +0 -127
  147. package/dist/src/server/agent/provider-manifest.js.map +0 -1
  148. package/dist/src/server/agent/provider-registry.js +0 -45
  149. package/dist/src/server/agent/provider-registry.js.map +0 -1
  150. package/dist/src/server/agent/providers/claude/partial-json.js +0 -306
  151. package/dist/src/server/agent/providers/claude/partial-json.js.map +0 -1
  152. package/dist/src/server/agent/providers/claude/sdk-model-resolver.js +0 -104
  153. package/dist/src/server/agent/providers/claude/sdk-model-resolver.js.map +0 -1
  154. package/dist/src/server/agent/providers/claude/sidechain-tracker.js +0 -230
  155. package/dist/src/server/agent/providers/claude/sidechain-tracker.js.map +0 -1
  156. package/dist/src/server/agent/providers/claude/task-notification-tool-call.js +0 -267
  157. package/dist/src/server/agent/providers/claude/task-notification-tool-call.js.map +0 -1
  158. package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js +0 -121
  159. package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js.map +0 -1
  160. package/dist/src/server/agent/providers/claude/tool-call-mapper.js +0 -252
  161. package/dist/src/server/agent/providers/claude/tool-call-mapper.js.map +0 -1
  162. package/dist/src/server/agent/providers/claude-agent.js +0 -3147
  163. package/dist/src/server/agent/providers/claude-agent.js.map +0 -1
  164. package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js +0 -104
  165. package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js.map +0 -1
  166. package/dist/src/server/agent/providers/codex/tool-call-mapper.js +0 -758
  167. package/dist/src/server/agent/providers/codex/tool-call-mapper.js.map +0 -1
  168. package/dist/src/server/agent/providers/codex-app-server-agent.js +0 -2949
  169. package/dist/src/server/agent/providers/codex-app-server-agent.js.map +0 -1
  170. package/dist/src/server/agent/providers/codex-rollout-timeline.js +0 -544
  171. package/dist/src/server/agent/providers/codex-rollout-timeline.js.map +0 -1
  172. package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
  173. package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
  174. package/dist/src/server/agent/providers/opencode/tool-call-mapper.js +0 -144
  175. package/dist/src/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
  176. package/dist/src/server/agent/providers/opencode-agent.js +0 -1193
  177. package/dist/src/server/agent/providers/opencode-agent.js.map +0 -1
  178. package/dist/src/server/agent/providers/tool-call-detail-primitives.js +0 -686
  179. package/dist/src/server/agent/providers/tool-call-detail-primitives.js.map +0 -1
  180. package/dist/src/server/agent/providers/tool-call-mapper-utils.js +0 -115
  181. package/dist/src/server/agent/providers/tool-call-mapper-utils.js.map +0 -1
  182. package/dist/src/server/agent/recordings-debug.js +0 -19
  183. package/dist/src/server/agent/recordings-debug.js.map +0 -1
  184. package/dist/src/server/agent/stt-debug.js +0 -33
  185. package/dist/src/server/agent/stt-debug.js.map +0 -1
  186. package/dist/src/server/agent/stt-manager.js +0 -232
  187. package/dist/src/server/agent/stt-manager.js.map +0 -1
  188. package/dist/src/server/agent/timeline-append.js +0 -27
  189. package/dist/src/server/agent/timeline-append.js.map +0 -1
  190. package/dist/src/server/agent/timeline-projection.js +0 -215
  191. package/dist/src/server/agent/timeline-projection.js.map +0 -1
  192. package/dist/src/server/agent/tool-name-normalization.js +0 -45
  193. package/dist/src/server/agent/tool-name-normalization.js.map +0 -1
  194. package/dist/src/server/agent/tts-debug.js +0 -24
  195. package/dist/src/server/agent/tts-debug.js.map +0 -1
  196. package/dist/src/server/agent/tts-manager.js +0 -374
  197. package/dist/src/server/agent/tts-manager.js.map +0 -1
  198. package/dist/src/server/agent/wait-for-agent-tracker.js +0 -53
  199. package/dist/src/server/agent/wait-for-agent-tracker.js.map +0 -1
  200. package/dist/src/server/agent-attention-policy.js +0 -40
  201. package/dist/src/server/agent-attention-policy.js.map +0 -1
  202. package/dist/src/server/allowed-hosts.js +0 -94
  203. package/dist/src/server/allowed-hosts.js.map +0 -1
  204. package/dist/src/server/bootstrap.js +0 -581
  205. package/dist/src/server/bootstrap.js.map +0 -1
  206. package/dist/src/server/client-message-id.js +0 -12
  207. package/dist/src/server/client-message-id.js.map +0 -1
  208. package/dist/src/server/config.js +0 -73
  209. package/dist/src/server/config.js.map +0 -1
  210. package/dist/src/server/connection-offer.js +0 -59
  211. package/dist/src/server/connection-offer.js.map +0 -1
  212. package/dist/src/server/daemon-keypair.js +0 -40
  213. package/dist/src/server/daemon-keypair.js.map +0 -1
  214. package/dist/src/server/daemon-version.js +0 -22
  215. package/dist/src/server/daemon-version.js.map +0 -1
  216. package/dist/src/server/dictation/dictation-stream-manager.js +0 -571
  217. package/dist/src/server/dictation/dictation-stream-manager.js.map +0 -1
  218. package/dist/src/server/file-download/token-store.js +0 -40
  219. package/dist/src/server/file-download/token-store.js.map +0 -1
  220. package/dist/src/server/file-explorer/service.js +0 -180
  221. package/dist/src/server/file-explorer/service.js.map +0 -1
  222. package/dist/src/server/json-utils.js +0 -45
  223. package/dist/src/server/json-utils.js.map +0 -1
  224. package/dist/src/server/messages.js +0 -29
  225. package/dist/src/server/messages.js.map +0 -1
  226. package/dist/src/server/package-version.js +0 -46
  227. package/dist/src/server/package-version.js.map +0 -1
  228. package/dist/src/server/pairing-offer.js +0 -45
  229. package/dist/src/server/pairing-offer.js.map +0 -1
  230. package/dist/src/server/pairing-qr.js +0 -45
  231. package/dist/src/server/pairing-qr.js.map +0 -1
  232. package/dist/src/server/path-utils.js +0 -20
  233. package/dist/src/server/path-utils.js.map +0 -1
  234. package/dist/src/server/persisted-config.js +0 -265
  235. package/dist/src/server/persisted-config.js.map +0 -1
  236. package/dist/src/server/persistence-hooks.js +0 -60
  237. package/dist/src/server/persistence-hooks.js.map +0 -1
  238. package/dist/src/server/push/push-service.js +0 -68
  239. package/dist/src/server/push/push-service.js.map +0 -1
  240. package/dist/src/server/push/token-store.js +0 -70
  241. package/dist/src/server/push/token-store.js.map +0 -1
  242. package/dist/src/server/relay-transport.js +0 -461
  243. package/dist/src/server/relay-transport.js.map +0 -1
  244. package/dist/src/server/server-id.js +0 -63
  245. package/dist/src/server/server-id.js.map +0 -1
  246. package/dist/src/server/session.js +0 -6170
  247. package/dist/src/server/session.js.map +0 -1
  248. package/dist/src/server/speech/audio.js +0 -101
  249. package/dist/src/server/speech/audio.js.map +0 -1
  250. package/dist/src/server/speech/provider-resolver.js +0 -7
  251. package/dist/src/server/speech/provider-resolver.js.map +0 -1
  252. package/dist/src/server/speech/providers/local/config.js +0 -74
  253. package/dist/src/server/speech/providers/local/config.js.map +0 -1
  254. package/dist/src/server/speech/providers/local/models.js +0 -17
  255. package/dist/src/server/speech/providers/local/models.js.map +0 -1
  256. package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js +0 -436
  257. package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +0 -1
  258. package/dist/src/server/speech/providers/local/runtime.js +0 -238
  259. package/dist/src/server/speech/providers/local/runtime.js.map +0 -1
  260. package/dist/src/server/speech/providers/local/sherpa/model-catalog.js +0 -166
  261. package/dist/src/server/speech/providers/local/sherpa/model-catalog.js.map +0 -1
  262. package/dist/src/server/speech/providers/local/sherpa/model-downloader.js +0 -165
  263. package/dist/src/server/speech/providers/local/sherpa/model-downloader.js.map +0 -1
  264. package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +0 -73
  265. package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +0 -1
  266. package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +0 -84
  267. package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +0 -1
  268. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +0 -11
  269. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +0 -1
  270. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +0 -102
  271. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +0 -1
  272. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +0 -135
  273. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +0 -1
  274. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +0 -130
  275. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +0 -1
  276. package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js +0 -110
  277. package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +0 -1
  278. package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js +0 -138
  279. package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js.map +0 -1
  280. package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js +0 -98
  281. package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js.map +0 -1
  282. package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js +0 -23
  283. package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js.map +0 -1
  284. package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js +0 -107
  285. package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js.map +0 -1
  286. package/dist/src/server/speech/providers/openai/config.js +0 -80
  287. package/dist/src/server/speech/providers/openai/config.js.map +0 -1
  288. package/dist/src/server/speech/providers/openai/realtime-transcription-session.js +0 -168
  289. package/dist/src/server/speech/providers/openai/realtime-transcription-session.js.map +0 -1
  290. package/dist/src/server/speech/providers/openai/runtime.js +0 -112
  291. package/dist/src/server/speech/providers/openai/runtime.js.map +0 -1
  292. package/dist/src/server/speech/providers/openai/stt.js +0 -206
  293. package/dist/src/server/speech/providers/openai/stt.js.map +0 -1
  294. package/dist/src/server/speech/providers/openai/tts.js +0 -46
  295. package/dist/src/server/speech/providers/openai/tts.js.map +0 -1
  296. package/dist/src/server/speech/speech-config-resolver.js +0 -102
  297. package/dist/src/server/speech/speech-config-resolver.js.map +0 -1
  298. package/dist/src/server/speech/speech-provider.js +0 -2
  299. package/dist/src/server/speech/speech-provider.js.map +0 -1
  300. package/dist/src/server/speech/speech-runtime.js +0 -530
  301. package/dist/src/server/speech/speech-runtime.js.map +0 -1
  302. package/dist/src/server/speech/speech-types.js +0 -8
  303. package/dist/src/server/speech/speech-types.js.map +0 -1
  304. package/dist/src/server/speech/turn-detection-provider.js +0 -2
  305. package/dist/src/server/speech/turn-detection-provider.js.map +0 -1
  306. package/dist/src/server/utils/diff-highlighter.js +0 -257
  307. package/dist/src/server/utils/diff-highlighter.js.map +0 -1
  308. package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
  309. package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
  310. package/dist/src/server/voice/voice-turn-controller.js +0 -159
  311. package/dist/src/server/voice/voice-turn-controller.js.map +0 -1
  312. package/dist/src/server/voice-config.js +0 -51
  313. package/dist/src/server/voice-config.js.map +0 -1
  314. package/dist/src/server/voice-mcp-bridge-command.js +0 -31
  315. package/dist/src/server/voice-mcp-bridge-command.js.map +0 -1
  316. package/dist/src/server/voice-mcp-bridge.js +0 -109
  317. package/dist/src/server/voice-mcp-bridge.js.map +0 -1
  318. package/dist/src/server/voice-permission-policy.js +0 -13
  319. package/dist/src/server/voice-permission-policy.js.map +0 -1
  320. package/dist/src/server/voice-types.js +0 -2
  321. package/dist/src/server/voice-types.js.map +0 -1
  322. package/dist/src/server/websocket-server.js +0 -991
  323. package/dist/src/server/websocket-server.js.map +0 -1
  324. package/dist/src/server/workspace-registry-bootstrap.js +0 -98
  325. package/dist/src/server/workspace-registry-bootstrap.js.map +0 -1
  326. package/dist/src/server/workspace-registry-model.js +0 -175
  327. package/dist/src/server/workspace-registry-model.js.map +0 -1
  328. package/dist/src/server/workspace-registry.js +0 -151
  329. package/dist/src/server/workspace-registry.js.map +0 -1
  330. package/dist/src/server/worktree-bootstrap.js +0 -508
  331. package/dist/src/server/worktree-bootstrap.js.map +0 -1
  332. package/dist/src/shared/agent-attention-notification.js +0 -130
  333. package/dist/src/shared/agent-attention-notification.js.map +0 -1
  334. package/dist/src/shared/agent-lifecycle.js +0 -8
  335. package/dist/src/shared/agent-lifecycle.js.map +0 -1
  336. package/dist/src/shared/connection-offer.js +0 -17
  337. package/dist/src/shared/connection-offer.js.map +0 -1
  338. package/dist/src/shared/daemon-endpoints.js +0 -122
  339. package/dist/src/shared/daemon-endpoints.js.map +0 -1
  340. package/dist/src/shared/messages.js +0 -2066
  341. package/dist/src/shared/messages.js.map +0 -1
  342. package/dist/src/shared/path-utils.js +0 -16
  343. package/dist/src/shared/path-utils.js.map +0 -1
  344. package/dist/src/shared/terminal-stream-protocol.js +0 -99
  345. package/dist/src/shared/terminal-stream-protocol.js.map +0 -1
  346. package/dist/src/shared/tool-call-display.js +0 -122
  347. package/dist/src/shared/tool-call-display.js.map +0 -1
  348. package/dist/src/terminal/terminal-manager.js +0 -136
  349. package/dist/src/terminal/terminal-manager.js.map +0 -1
  350. package/dist/src/terminal/terminal.js +0 -333
  351. package/dist/src/terminal/terminal.js.map +0 -1
  352. package/dist/src/utils/checkout-git.js +0 -1448
  353. package/dist/src/utils/checkout-git.js.map +0 -1
  354. package/dist/src/utils/directory-suggestions.js +0 -655
  355. package/dist/src/utils/directory-suggestions.js.map +0 -1
  356. package/dist/src/utils/path.js +0 -15
  357. package/dist/src/utils/path.js.map +0 -1
  358. package/dist/src/utils/project-icon.js +0 -389
  359. package/dist/src/utils/project-icon.js.map +0 -1
  360. package/dist/src/utils/worktree-metadata.js +0 -116
  361. package/dist/src/utils/worktree-metadata.js.map +0 -1
  362. package/dist/src/utils/worktree.js +0 -744
  363. package/dist/src/utils/worktree.js.map +0 -1
@@ -1,655 +0,0 @@
1
- import { readdir, realpath, stat } from "node:fs/promises";
2
- import path from "node:path";
3
- const DEFAULT_LIMIT = 30;
4
- const MAX_LIMIT = 100;
5
- const DEFAULT_MAX_DEPTH = 6;
6
- const DEFAULT_MAX_DIRECTORIES_SCANNED = 5000;
7
- const DIRECTORY_LIST_CACHE_TTL_MS = 8000;
8
- const DIRECTORY_LIST_CACHE_MAX_ENTRIES = 4000;
9
- const directoryListCache = new Map();
10
- const workspaceEntryListCache = new Map();
11
- const NO_SEGMENT_INDEX = Number.MAX_SAFE_INTEGER;
12
- const NO_MATCH_OFFSET = Number.MAX_SAFE_INTEGER;
13
- const WORKSPACE_IGNORED_DIRECTORY_NAMES = new Set(["node_modules"]);
14
- export async function searchHomeDirectories(options) {
15
- const query = options.query.trim();
16
- if (!query) {
17
- return [];
18
- }
19
- const limit = normalizeLimit(options.limit);
20
- const homeRoot = await resolveDirectory(options.homeDir);
21
- if (!homeRoot) {
22
- return [];
23
- }
24
- const queryParts = normalizeQueryParts(query, homeRoot);
25
- if (!queryParts) {
26
- return [];
27
- }
28
- if (queryParts.isPathQuery) {
29
- return searchWithinParentDirectory({
30
- homeRoot,
31
- parentPart: queryParts.parentPart,
32
- searchTerm: queryParts.searchTerm,
33
- limit,
34
- });
35
- }
36
- return searchAcrossHomeTree({
37
- homeRoot,
38
- searchTerm: queryParts.searchTerm,
39
- limit,
40
- maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,
41
- maxDirectoriesScanned: options.maxDirectoriesScanned ?? DEFAULT_MAX_DIRECTORIES_SCANNED,
42
- });
43
- }
44
- export async function searchWorkspaceEntries(options) {
45
- const limit = normalizeLimit(options.limit);
46
- const includeDirectories = options.includeDirectories ?? true;
47
- const includeFiles = options.includeFiles ?? false;
48
- if (!includeDirectories && !includeFiles) {
49
- return [];
50
- }
51
- const workspaceRoot = await resolveDirectory(options.cwd);
52
- if (!workspaceRoot) {
53
- return [];
54
- }
55
- const queryParts = normalizeWorkspaceQueryParts(options.query, workspaceRoot);
56
- if (!queryParts) {
57
- return [];
58
- }
59
- if (queryParts.isPathQuery) {
60
- return searchWorkspaceWithinParentDirectory({
61
- workspaceRoot,
62
- parentPart: queryParts.parentPart,
63
- searchTerm: queryParts.searchTerm,
64
- limit,
65
- includeDirectories,
66
- includeFiles,
67
- });
68
- }
69
- return searchWorkspaceAcrossTree({
70
- workspaceRoot,
71
- searchTerm: queryParts.searchTerm,
72
- limit,
73
- includeDirectories,
74
- includeFiles,
75
- maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,
76
- maxEntriesScanned: options.maxEntriesScanned ?? DEFAULT_MAX_DIRECTORIES_SCANNED,
77
- });
78
- }
79
- function normalizeLimit(limit) {
80
- const candidate = limit ?? DEFAULT_LIMIT;
81
- if (!Number.isFinite(candidate)) {
82
- return DEFAULT_LIMIT;
83
- }
84
- const bounded = Math.trunc(candidate);
85
- return Math.max(1, Math.min(MAX_LIMIT, bounded));
86
- }
87
- async function searchWithinParentDirectory(input) {
88
- const parentPath = path.resolve(input.homeRoot, input.parentPart || ".");
89
- const parentRoot = await resolveDirectory(parentPath);
90
- if (!parentRoot || !isPathInsideRoot(input.homeRoot, parentRoot)) {
91
- return [];
92
- }
93
- const searchLower = input.searchTerm.toLowerCase();
94
- const ranked = [];
95
- const entries = await listChildDirectories({
96
- directory: parentRoot,
97
- homeRoot: input.homeRoot,
98
- });
99
- for (const entry of entries) {
100
- if (searchLower && !entry.name.toLowerCase().includes(searchLower)) {
101
- continue;
102
- }
103
- ranked.push(rankDirectory({
104
- absolutePath: entry.absolutePath,
105
- homeRoot: input.homeRoot,
106
- searchLower,
107
- }));
108
- }
109
- return dedupeAndSort(ranked).slice(0, input.limit);
110
- }
111
- async function searchAcrossHomeTree(input) {
112
- const queue = [
113
- { directory: input.homeRoot, depth: 0 },
114
- ];
115
- const visited = new Set([input.homeRoot]);
116
- const ranked = [];
117
- let scanned = 0;
118
- const searchLower = input.searchTerm.toLowerCase();
119
- for (let queueIndex = 0; queueIndex < queue.length && scanned < input.maxDirectoriesScanned; queueIndex += 1) {
120
- const current = queue[queueIndex];
121
- if (!current)
122
- continue;
123
- const entries = await listChildDirectories({
124
- directory: current.directory,
125
- homeRoot: input.homeRoot,
126
- });
127
- for (const entry of entries) {
128
- const resolvedCandidate = entry.absolutePath;
129
- if (visited.has(resolvedCandidate)) {
130
- continue;
131
- }
132
- visited.add(resolvedCandidate);
133
- scanned += 1;
134
- const relativePath = normalizeRelativePath(input.homeRoot, resolvedCandidate);
135
- if (relativePath.toLowerCase().includes(searchLower) ||
136
- entry.name.toLowerCase().includes(searchLower)) {
137
- ranked.push(rankDirectory({
138
- absolutePath: resolvedCandidate,
139
- homeRoot: input.homeRoot,
140
- searchLower,
141
- }));
142
- }
143
- if (current.depth < input.maxDepth && scanned < input.maxDirectoriesScanned) {
144
- queue.push({ directory: resolvedCandidate, depth: current.depth + 1 });
145
- }
146
- }
147
- }
148
- return dedupeAndSort(ranked).slice(0, input.limit);
149
- }
150
- async function searchWorkspaceWithinParentDirectory(input) {
151
- const parentPath = path.resolve(input.workspaceRoot, input.parentPart || ".");
152
- const parentRoot = await resolveDirectory(parentPath);
153
- if (!parentRoot || !isPathInsideRoot(input.workspaceRoot, parentRoot)) {
154
- return [];
155
- }
156
- const searchLower = input.searchTerm.toLowerCase();
157
- const ranked = [];
158
- const entries = await listWorkspaceChildEntries({
159
- directory: parentRoot,
160
- workspaceRoot: input.workspaceRoot,
161
- });
162
- for (const entry of entries) {
163
- if (entry.kind === "directory" && !input.includeDirectories) {
164
- continue;
165
- }
166
- if (entry.kind === "file" && !input.includeFiles) {
167
- continue;
168
- }
169
- if (searchLower && !entry.name.toLowerCase().includes(searchLower)) {
170
- continue;
171
- }
172
- ranked.push(rankWorkspaceEntry({
173
- absolutePath: entry.absolutePath,
174
- kind: entry.kind,
175
- workspaceRoot: input.workspaceRoot,
176
- searchLower,
177
- }));
178
- }
179
- return dedupeAndSortWorkspaceEntries(ranked).slice(0, input.limit);
180
- }
181
- async function searchWorkspaceAcrossTree(input) {
182
- const queue = [
183
- { directory: input.workspaceRoot, depth: 0 },
184
- ];
185
- const visited = new Set([input.workspaceRoot]);
186
- const ranked = [];
187
- let scanned = 0;
188
- const searchLower = input.searchTerm.toLowerCase();
189
- for (let queueIndex = 0; queueIndex < queue.length && scanned < input.maxEntriesScanned; queueIndex += 1) {
190
- const current = queue[queueIndex];
191
- if (!current)
192
- continue;
193
- const entries = await listWorkspaceChildEntries({
194
- directory: current.directory,
195
- workspaceRoot: input.workspaceRoot,
196
- });
197
- for (const entry of entries) {
198
- scanned += 1;
199
- if (entry.kind === "directory") {
200
- if (!visited.has(entry.absolutePath) &&
201
- current.depth < input.maxDepth &&
202
- scanned < input.maxEntriesScanned) {
203
- visited.add(entry.absolutePath);
204
- queue.push({
205
- directory: entry.absolutePath,
206
- depth: current.depth + 1,
207
- });
208
- }
209
- }
210
- if (entry.kind === "directory" && !input.includeDirectories) {
211
- continue;
212
- }
213
- if (entry.kind === "file" && !input.includeFiles) {
214
- continue;
215
- }
216
- const relativePath = normalizeRelativePath(input.workspaceRoot, entry.absolutePath);
217
- if (searchLower &&
218
- !relativePath.toLowerCase().includes(searchLower) &&
219
- !entry.name.toLowerCase().includes(searchLower)) {
220
- continue;
221
- }
222
- ranked.push(rankWorkspaceEntry({
223
- absolutePath: entry.absolutePath,
224
- kind: entry.kind,
225
- workspaceRoot: input.workspaceRoot,
226
- searchLower,
227
- }));
228
- }
229
- }
230
- return dedupeAndSortWorkspaceEntries(ranked).slice(0, input.limit);
231
- }
232
- function dedupeAndSortWorkspaceEntries(rankedEntries) {
233
- const byPath = new Map();
234
- for (const entry of rankedEntries) {
235
- const key = `${entry.kind}:${entry.relativePath}`;
236
- const existing = byPath.get(key);
237
- if (!existing || compareRankedWorkspaceEntries(entry, existing) < 0) {
238
- byPath.set(key, entry);
239
- }
240
- }
241
- return Array.from(byPath.values())
242
- .sort(compareRankedWorkspaceEntries)
243
- .map((entry) => ({
244
- path: entry.relativePath,
245
- kind: entry.kind,
246
- }));
247
- }
248
- function compareRankedWorkspaceEntries(left, right) {
249
- if (left.matchTier !== right.matchTier) {
250
- return left.matchTier - right.matchTier;
251
- }
252
- if (left.segmentIndex !== right.segmentIndex) {
253
- return left.segmentIndex - right.segmentIndex;
254
- }
255
- if (left.matchOffset !== right.matchOffset) {
256
- return left.matchOffset - right.matchOffset;
257
- }
258
- if (left.depth !== right.depth) {
259
- return left.depth - right.depth;
260
- }
261
- if (left.kind !== right.kind) {
262
- return left.kind === "directory" ? -1 : 1;
263
- }
264
- return left.relativePath.localeCompare(right.relativePath);
265
- }
266
- function dedupeAndSort(ranked) {
267
- const byPath = new Map();
268
- for (const entry of ranked) {
269
- const existing = byPath.get(entry.absolutePath);
270
- if (!existing || compareRankedDirectories(entry, existing) < 0) {
271
- byPath.set(entry.absolutePath, entry);
272
- }
273
- }
274
- return Array.from(byPath.values())
275
- .sort(compareRankedDirectories)
276
- .map((entry) => entry.absolutePath);
277
- }
278
- function compareRankedDirectories(left, right) {
279
- if (left.matchTier !== right.matchTier) {
280
- return left.matchTier - right.matchTier;
281
- }
282
- if (left.segmentIndex !== right.segmentIndex) {
283
- return left.segmentIndex - right.segmentIndex;
284
- }
285
- if (left.matchOffset !== right.matchOffset) {
286
- return left.matchOffset - right.matchOffset;
287
- }
288
- if (left.depth !== right.depth) {
289
- return left.depth - right.depth;
290
- }
291
- return left.absolutePath.localeCompare(right.absolutePath);
292
- }
293
- function rankDirectory(input) {
294
- const relative = normalizeRelativePath(input.homeRoot, input.absolutePath);
295
- const relativeLower = relative.toLowerCase();
296
- const depth = relative === "." ? 0 : relative.split("/").length;
297
- const searchLower = input.searchLower;
298
- if (!searchLower) {
299
- return {
300
- absolutePath: input.absolutePath,
301
- matchTier: 3,
302
- segmentIndex: NO_SEGMENT_INDEX,
303
- matchOffset: 0,
304
- depth,
305
- };
306
- }
307
- const segments = relativeLower === "." ? [] : relativeLower.split("/");
308
- const exactSegmentIndex = findSegmentMatchIndex(segments, (segment) => segment === searchLower);
309
- const prefixSegmentIndex = findSegmentMatchIndex(segments, (segment) => segment.startsWith(searchLower));
310
- const partialSegmentIndex = findSegmentMatchIndex(segments, (segment) => segment.includes(searchLower));
311
- const matchOffset = relativeLower.indexOf(searchLower);
312
- let matchTier = 4;
313
- let segmentIndex = NO_SEGMENT_INDEX;
314
- if (exactSegmentIndex >= 0) {
315
- matchTier = 0;
316
- segmentIndex = exactSegmentIndex;
317
- }
318
- else if (prefixSegmentIndex >= 0) {
319
- matchTier = 1;
320
- segmentIndex = prefixSegmentIndex;
321
- }
322
- else if (partialSegmentIndex >= 0) {
323
- matchTier = 2;
324
- segmentIndex = partialSegmentIndex;
325
- }
326
- else if (relativeLower.startsWith(searchLower)) {
327
- matchTier = 3;
328
- }
329
- return {
330
- absolutePath: input.absolutePath,
331
- matchTier,
332
- segmentIndex,
333
- matchOffset: matchOffset >= 0 ? matchOffset : NO_MATCH_OFFSET,
334
- depth,
335
- };
336
- }
337
- function rankWorkspaceEntry(input) {
338
- const relativePath = normalizeRelativePath(input.workspaceRoot, input.absolutePath);
339
- const relativeLower = relativePath.toLowerCase();
340
- const depth = relativePath === "." ? 0 : relativePath.split("/").length;
341
- const searchLower = input.searchLower;
342
- if (!searchLower) {
343
- return {
344
- relativePath,
345
- kind: input.kind,
346
- matchTier: 3,
347
- segmentIndex: NO_SEGMENT_INDEX,
348
- matchOffset: 0,
349
- depth,
350
- };
351
- }
352
- const segments = relativeLower === "." ? [] : relativeLower.split("/");
353
- const exactSegmentIndex = findSegmentMatchIndex(segments, (segment) => segment === searchLower);
354
- const prefixSegmentIndex = findSegmentMatchIndex(segments, (segment) => segment.startsWith(searchLower));
355
- const partialSegmentIndex = findSegmentMatchIndex(segments, (segment) => segment.includes(searchLower));
356
- const matchOffset = relativeLower.indexOf(searchLower);
357
- let matchTier = 4;
358
- let segmentIndex = NO_SEGMENT_INDEX;
359
- if (exactSegmentIndex >= 0) {
360
- matchTier = 0;
361
- segmentIndex = exactSegmentIndex;
362
- }
363
- else if (prefixSegmentIndex >= 0) {
364
- matchTier = 1;
365
- segmentIndex = prefixSegmentIndex;
366
- }
367
- else if (partialSegmentIndex >= 0) {
368
- matchTier = 2;
369
- segmentIndex = partialSegmentIndex;
370
- }
371
- else if (relativeLower.startsWith(searchLower)) {
372
- matchTier = 3;
373
- }
374
- return {
375
- relativePath,
376
- kind: input.kind,
377
- matchTier,
378
- segmentIndex,
379
- matchOffset: matchOffset >= 0 ? matchOffset : NO_MATCH_OFFSET,
380
- depth,
381
- };
382
- }
383
- function findSegmentMatchIndex(segments, predicate) {
384
- for (let index = 0; index < segments.length; index += 1) {
385
- const segment = segments[index];
386
- if (!segment) {
387
- continue;
388
- }
389
- if (predicate(segment)) {
390
- return index;
391
- }
392
- }
393
- return -1;
394
- }
395
- function normalizeRelativePath(homeRoot, absolutePath) {
396
- const relative = path.relative(homeRoot, absolutePath);
397
- if (!relative) {
398
- return ".";
399
- }
400
- return relative.split(path.sep).join("/");
401
- }
402
- function isPathInsideRoot(root, target) {
403
- const relative = path.relative(root, target);
404
- return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
405
- }
406
- function normalizeQueryParts(query, homeRoot) {
407
- const typedQuery = query.trim().replace(/\\/g, "/");
408
- let normalized = typedQuery;
409
- if (!normalized) {
410
- return null;
411
- }
412
- if (normalized.startsWith("~")) {
413
- normalized = normalized.slice(1);
414
- if (normalized.startsWith("/")) {
415
- normalized = normalized.slice(1);
416
- }
417
- }
418
- if (path.isAbsolute(normalized)) {
419
- const absolute = path.resolve(normalized);
420
- if (!isPathInsideRoot(homeRoot, absolute)) {
421
- return null;
422
- }
423
- normalized = normalizeRelativePath(homeRoot, absolute);
424
- }
425
- normalized = normalized.replace(/^\.\/+/, "").replace(/\/{2,}/g, "/");
426
- if (!normalized) {
427
- // Treat "~" and "~/" as a request to browse the home root.
428
- if (typedQuery === "~" || typedQuery === "~/") {
429
- return {
430
- isPathQuery: true,
431
- parentPart: "",
432
- searchTerm: "",
433
- };
434
- }
435
- return null;
436
- }
437
- const isPathQuery = normalized.includes("/");
438
- const slashIndex = normalized.lastIndexOf("/");
439
- const parentPart = slashIndex >= 0 ? normalized.slice(0, slashIndex) : "";
440
- const searchTerm = slashIndex >= 0 ? normalized.slice(slashIndex + 1) : normalized;
441
- return {
442
- isPathQuery,
443
- parentPart,
444
- searchTerm,
445
- };
446
- }
447
- function normalizeWorkspaceQueryParts(query, workspaceRoot) {
448
- let normalized = query.trim().replace(/\\/g, "/");
449
- if (path.isAbsolute(normalized)) {
450
- const absolute = path.resolve(normalized);
451
- if (!isPathInsideRoot(workspaceRoot, absolute)) {
452
- return null;
453
- }
454
- normalized = normalizeRelativePath(workspaceRoot, absolute);
455
- }
456
- normalized = normalized.replace(/^\.\/+/, "").replace(/\/{2,}/g, "/");
457
- if (!normalized) {
458
- return {
459
- isPathQuery: true,
460
- parentPart: "",
461
- searchTerm: "",
462
- };
463
- }
464
- const isPathQuery = normalized.includes("/");
465
- const slashIndex = normalized.lastIndexOf("/");
466
- const parentPart = slashIndex >= 0 ? normalized.slice(0, slashIndex) : "";
467
- const searchTerm = slashIndex >= 0 ? normalized.slice(slashIndex + 1) : normalized;
468
- return {
469
- isPathQuery,
470
- parentPart,
471
- searchTerm,
472
- };
473
- }
474
- async function resolveDirectory(inputPath) {
475
- try {
476
- const resolved = await realpath(path.resolve(inputPath));
477
- const stats = await stat(resolved);
478
- if (!stats.isDirectory()) {
479
- return null;
480
- }
481
- return resolved;
482
- }
483
- catch {
484
- return null;
485
- }
486
- }
487
- async function listChildDirectories(input) {
488
- const now = Date.now();
489
- const cached = directoryListCache.get(input.directory);
490
- if (cached && cached.expiresAt > now) {
491
- return cached.entries;
492
- }
493
- const dirents = await readdir(input.directory, { withFileTypes: true }).catch(() => []);
494
- const entries = [];
495
- for (const dirent of dirents) {
496
- if (isHiddenDirectoryName(dirent.name)) {
497
- continue;
498
- }
499
- if (!dirent.isDirectory() && !dirent.isSymbolicLink()) {
500
- continue;
501
- }
502
- const candidatePath = path.join(input.directory, dirent.name);
503
- const absolutePath = await resolveDirectoryCandidate({
504
- candidatePath,
505
- dirent,
506
- homeRoot: input.homeRoot,
507
- });
508
- if (!absolutePath) {
509
- continue;
510
- }
511
- entries.push({
512
- name: dirent.name,
513
- absolutePath,
514
- });
515
- }
516
- setDirectoryListCache(input.directory, {
517
- expiresAt: now + DIRECTORY_LIST_CACHE_TTL_MS,
518
- entries,
519
- });
520
- return entries;
521
- }
522
- async function listWorkspaceChildEntries(input) {
523
- const now = Date.now();
524
- const cached = workspaceEntryListCache.get(input.directory);
525
- if (cached && cached.expiresAt > now) {
526
- return cached.entries;
527
- }
528
- const dirents = await readdir(input.directory, { withFileTypes: true }).catch(() => []);
529
- const entries = [];
530
- for (const dirent of dirents) {
531
- if (isHiddenDirectoryName(dirent.name)) {
532
- continue;
533
- }
534
- if (isIgnoredWorkspaceDirectoryName(dirent.name)) {
535
- continue;
536
- }
537
- const candidatePath = path.join(input.directory, dirent.name);
538
- const entry = await resolveWorkspaceCandidate({
539
- candidatePath,
540
- dirent,
541
- workspaceRoot: input.workspaceRoot,
542
- });
543
- if (!entry) {
544
- continue;
545
- }
546
- entries.push({
547
- name: dirent.name,
548
- absolutePath: entry.absolutePath,
549
- kind: entry.kind,
550
- });
551
- }
552
- setWorkspaceEntryListCache(input.directory, {
553
- expiresAt: now + DIRECTORY_LIST_CACHE_TTL_MS,
554
- entries,
555
- });
556
- return entries;
557
- }
558
- async function resolveDirectoryCandidate(input) {
559
- if (input.dirent.isDirectory()) {
560
- const resolved = path.resolve(input.candidatePath);
561
- return isPathInsideRoot(input.homeRoot, resolved) ? resolved : null;
562
- }
563
- const resolved = await resolveDirectory(input.candidatePath);
564
- if (!resolved || !isPathInsideRoot(input.homeRoot, resolved)) {
565
- return null;
566
- }
567
- return resolved;
568
- }
569
- async function resolveWorkspaceCandidate(input) {
570
- if (input.dirent.isDirectory()) {
571
- const resolved = path.resolve(input.candidatePath);
572
- if (!isPathInsideRoot(input.workspaceRoot, resolved)) {
573
- return null;
574
- }
575
- return { absolutePath: resolved, kind: "directory" };
576
- }
577
- if (input.dirent.isFile()) {
578
- const resolved = path.resolve(input.candidatePath);
579
- if (!isPathInsideRoot(input.workspaceRoot, resolved)) {
580
- return null;
581
- }
582
- return { absolutePath: resolved, kind: "file" };
583
- }
584
- if (!input.dirent.isSymbolicLink()) {
585
- return null;
586
- }
587
- try {
588
- const resolved = await realpath(input.candidatePath);
589
- if (!isPathInsideRoot(input.workspaceRoot, resolved)) {
590
- return null;
591
- }
592
- const stats = await stat(resolved);
593
- if (stats.isDirectory()) {
594
- return { absolutePath: resolved, kind: "directory" };
595
- }
596
- if (stats.isFile()) {
597
- return { absolutePath: resolved, kind: "file" };
598
- }
599
- return null;
600
- }
601
- catch {
602
- return null;
603
- }
604
- }
605
- function isHiddenDirectoryName(name) {
606
- return name.startsWith(".");
607
- }
608
- function isIgnoredWorkspaceDirectoryName(name) {
609
- return WORKSPACE_IGNORED_DIRECTORY_NAMES.has(name);
610
- }
611
- function setDirectoryListCache(cacheKey, entry) {
612
- directoryListCache.set(cacheKey, entry);
613
- pruneDirectoryListCache();
614
- }
615
- function setWorkspaceEntryListCache(cacheKey, entry) {
616
- workspaceEntryListCache.set(cacheKey, entry);
617
- pruneWorkspaceEntryListCache();
618
- }
619
- function pruneDirectoryListCache() {
620
- if (directoryListCache.size <= DIRECTORY_LIST_CACHE_MAX_ENTRIES) {
621
- return;
622
- }
623
- const now = Date.now();
624
- for (const [cacheKey, entry] of directoryListCache) {
625
- if (entry.expiresAt <= now) {
626
- directoryListCache.delete(cacheKey);
627
- }
628
- }
629
- while (directoryListCache.size > DIRECTORY_LIST_CACHE_MAX_ENTRIES) {
630
- const oldestKey = directoryListCache.keys().next().value;
631
- if (!oldestKey) {
632
- return;
633
- }
634
- directoryListCache.delete(oldestKey);
635
- }
636
- }
637
- function pruneWorkspaceEntryListCache() {
638
- if (workspaceEntryListCache.size <= DIRECTORY_LIST_CACHE_MAX_ENTRIES) {
639
- return;
640
- }
641
- const now = Date.now();
642
- for (const [cacheKey, entry] of workspaceEntryListCache) {
643
- if (entry.expiresAt <= now) {
644
- workspaceEntryListCache.delete(cacheKey);
645
- }
646
- }
647
- while (workspaceEntryListCache.size > DIRECTORY_LIST_CACHE_MAX_ENTRIES) {
648
- const oldestKey = workspaceEntryListCache.keys().next().value;
649
- if (!oldestKey) {
650
- return;
651
- }
652
- workspaceEntryListCache.delete(oldestKey);
653
- }
654
- }
655
- //# sourceMappingURL=directory-suggestions.js.map