@greppleai/grip 0.0.0-stage → 0.1.3

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 (1119) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/README.md +731 -2
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +13 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/embedded-assets.d.ts +3 -0
  8. package/dist/bun/embedded-assets.d.ts.map +1 -0
  9. package/dist/bun/embedded-assets.js +52 -0
  10. package/dist/bun/embedded-assets.js.map +1 -0
  11. package/dist/bun/register-bedrock.d.ts +2 -0
  12. package/dist/bun/register-bedrock.d.ts.map +1 -0
  13. package/dist/bun/register-bedrock.js +4 -0
  14. package/dist/bun/register-bedrock.js.map +1 -0
  15. package/dist/bun/restore-sandbox-env.d.ts +13 -0
  16. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  17. package/dist/bun/restore-sandbox-env.js +32 -0
  18. package/dist/bun/restore-sandbox-env.js.map +1 -0
  19. package/dist/cli/args.d.ts +70 -0
  20. package/dist/cli/args.d.ts.map +1 -0
  21. package/dist/cli/args.js +442 -0
  22. package/dist/cli/args.js.map +1 -0
  23. package/dist/cli/config-selector.d.ts +14 -0
  24. package/dist/cli/config-selector.d.ts.map +1 -0
  25. package/dist/cli/config-selector.js +31 -0
  26. package/dist/cli/config-selector.js.map +1 -0
  27. package/dist/cli/file-processor.d.ts +15 -0
  28. package/dist/cli/file-processor.d.ts.map +1 -0
  29. package/dist/cli/file-processor.js +60 -0
  30. package/dist/cli/file-processor.js.map +1 -0
  31. package/dist/cli/initial-message.d.ts +18 -0
  32. package/dist/cli/initial-message.d.ts.map +1 -0
  33. package/dist/cli/initial-message.js +22 -0
  34. package/dist/cli/initial-message.js.map +1 -0
  35. package/dist/cli/list-models.d.ts +9 -0
  36. package/dist/cli/list-models.d.ts.map +1 -0
  37. package/dist/cli/list-models.js +98 -0
  38. package/dist/cli/list-models.js.map +1 -0
  39. package/dist/cli/session-picker.d.ts +9 -0
  40. package/dist/cli/session-picker.d.ts.map +1 -0
  41. package/dist/cli/session-picker.js +35 -0
  42. package/dist/cli/session-picker.js.map +1 -0
  43. package/dist/cli.d.ts +3 -0
  44. package/dist/cli.d.ts.map +1 -0
  45. package/dist/cli.js +14 -0
  46. package/dist/cli.js.map +1 -0
  47. package/dist/config.d.ts +82 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +406 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/core/agent-session.d.ts +970 -0
  52. package/dist/core/agent-session.d.ts.map +1 -0
  53. package/dist/core/agent-session.js +5191 -0
  54. package/dist/core/agent-session.js.map +1 -0
  55. package/dist/core/auth-guidance.d.ts +5 -0
  56. package/dist/core/auth-guidance.d.ts.map +1 -0
  57. package/dist/core/auth-guidance.js +21 -0
  58. package/dist/core/auth-guidance.js.map +1 -0
  59. package/dist/core/auth-storage.d.ts +150 -0
  60. package/dist/core/auth-storage.d.ts.map +1 -0
  61. package/dist/core/auth-storage.js +557 -0
  62. package/dist/core/auth-storage.js.map +1 -0
  63. package/dist/core/bash-executor.d.ts +26 -0
  64. package/dist/core/bash-executor.d.ts.map +1 -0
  65. package/dist/core/bash-executor.js +99 -0
  66. package/dist/core/bash-executor.js.map +1 -0
  67. package/dist/core/compaction/branch-summarization.d.ts +83 -0
  68. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  69. package/dist/core/compaction/branch-summarization.js +220 -0
  70. package/dist/core/compaction/branch-summarization.js.map +1 -0
  71. package/dist/core/compaction/compaction.d.ts +65 -0
  72. package/dist/core/compaction/compaction.d.ts.map +1 -0
  73. package/dist/core/compaction/compaction.js +550 -0
  74. package/dist/core/compaction/compaction.js.map +1 -0
  75. package/dist/core/compaction/compression-detection-ledger.d.ts +34 -0
  76. package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -0
  77. package/dist/core/compaction/compression-detection-ledger.js +52 -0
  78. package/dist/core/compaction/compression-detection-ledger.js.map +1 -0
  79. package/dist/core/compaction/compression-detector.d.ts +71 -0
  80. package/dist/core/compaction/compression-detector.d.ts.map +1 -0
  81. package/dist/core/compaction/compression-detector.js +407 -0
  82. package/dist/core/compaction/compression-detector.js.map +1 -0
  83. package/dist/core/compaction/compression-economics.d.ts +55 -0
  84. package/dist/core/compaction/compression-economics.d.ts.map +1 -0
  85. package/dist/core/compaction/compression-economics.js +151 -0
  86. package/dist/core/compaction/compression-economics.js.map +1 -0
  87. package/dist/core/compaction/utils.d.ts +28 -0
  88. package/dist/core/compaction/utils.d.ts.map +1 -0
  89. package/dist/core/compaction/utils.js +165 -0
  90. package/dist/core/compaction/utils.js.map +1 -0
  91. package/dist/core/defaults.d.ts +3 -0
  92. package/dist/core/defaults.d.ts.map +1 -0
  93. package/dist/core/defaults.js +2 -0
  94. package/dist/core/defaults.js.map +1 -0
  95. package/dist/core/diagnostics.d.ts +18 -0
  96. package/dist/core/diagnostics.d.ts.map +1 -0
  97. package/dist/core/diagnostics.js +2 -0
  98. package/dist/core/diagnostics.js.map +1 -0
  99. package/dist/core/event-bus.d.ts +9 -0
  100. package/dist/core/event-bus.d.ts.map +1 -0
  101. package/dist/core/event-bus.js +25 -0
  102. package/dist/core/event-bus.js.map +1 -0
  103. package/dist/core/exec.d.ts +29 -0
  104. package/dist/core/exec.d.ts.map +1 -0
  105. package/dist/core/exec.js +75 -0
  106. package/dist/core/exec.js.map +1 -0
  107. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  108. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  109. package/dist/core/export-html/ansi-to-html.js +245 -0
  110. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  111. package/dist/core/export-html/index.d.ts +21 -0
  112. package/dist/core/export-html/index.d.ts.map +1 -0
  113. package/dist/core/export-html/index.js +230 -0
  114. package/dist/core/export-html/index.js.map +1 -0
  115. package/dist/core/export-html/template.css +1066 -0
  116. package/dist/core/export-html/template.html +55 -0
  117. package/dist/core/export-html/template.js +1864 -0
  118. package/dist/core/export-html/tool-renderer.d.ts +32 -0
  119. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  120. package/dist/core/export-html/tool-renderer.js +108 -0
  121. package/dist/core/export-html/tool-renderer.js.map +1 -0
  122. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  123. package/dist/core/export-html/vendor/marked.min.js +78 -0
  124. package/dist/core/extensions/loader.d.ts +24 -0
  125. package/dist/core/extensions/loader.d.ts.map +1 -0
  126. package/dist/core/extensions/loader.js +613 -0
  127. package/dist/core/extensions/loader.js.map +1 -0
  128. package/dist/core/extensions/runner.d.ts +160 -0
  129. package/dist/core/extensions/runner.d.ts.map +1 -0
  130. package/dist/core/extensions/runner.js +962 -0
  131. package/dist/core/extensions/runner.js.map +1 -0
  132. package/dist/core/extensions/types.d.ts +1311 -0
  133. package/dist/core/extensions/types.d.ts.map +1 -0
  134. package/dist/core/extensions/types.js +51 -0
  135. package/dist/core/extensions/types.js.map +1 -0
  136. package/dist/core/extensions/wrapper.d.ts +20 -0
  137. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  138. package/dist/core/extensions/wrapper.js +22 -0
  139. package/dist/core/extensions/wrapper.js.map +1 -0
  140. package/dist/core/footer-data-provider.d.ts +52 -0
  141. package/dist/core/footer-data-provider.d.ts.map +1 -0
  142. package/dist/core/footer-data-provider.js +318 -0
  143. package/dist/core/footer-data-provider.js.map +1 -0
  144. package/dist/core/grip-agent.d.ts +240 -0
  145. package/dist/core/grip-agent.d.ts.map +1 -0
  146. package/dist/core/grip-agent.js +1243 -0
  147. package/dist/core/grip-agent.js.map +1 -0
  148. package/dist/core/grip-manifest.d.ts +9 -0
  149. package/dist/core/grip-manifest.d.ts.map +1 -0
  150. package/dist/core/grip-manifest.js +25 -0
  151. package/dist/core/grip-manifest.js.map +1 -0
  152. package/dist/core/hooks/aggregate.d.ts +5 -0
  153. package/dist/core/hooks/aggregate.d.ts.map +1 -0
  154. package/dist/core/hooks/aggregate.js +226 -0
  155. package/dist/core/hooks/aggregate.js.map +1 -0
  156. package/dist/core/hooks/config.d.ts +14 -0
  157. package/dist/core/hooks/config.d.ts.map +1 -0
  158. package/dist/core/hooks/config.js +372 -0
  159. package/dist/core/hooks/config.js.map +1 -0
  160. package/dist/core/hooks/executor.d.ts +12 -0
  161. package/dist/core/hooks/executor.d.ts.map +1 -0
  162. package/dist/core/hooks/executor.js +708 -0
  163. package/dist/core/hooks/executor.js.map +1 -0
  164. package/dist/core/hooks/index.d.ts +9 -0
  165. package/dist/core/hooks/index.d.ts.map +1 -0
  166. package/dist/core/hooks/index.js +14 -0
  167. package/dist/core/hooks/index.js.map +1 -0
  168. package/dist/core/hooks/matcher.d.ts +10 -0
  169. package/dist/core/hooks/matcher.d.ts.map +1 -0
  170. package/dist/core/hooks/matcher.js +70 -0
  171. package/dist/core/hooks/matcher.js.map +1 -0
  172. package/dist/core/hooks/trust-store.d.ts +38 -0
  173. package/dist/core/hooks/trust-store.d.ts.map +1 -0
  174. package/dist/core/hooks/trust-store.js +167 -0
  175. package/dist/core/hooks/trust-store.js.map +1 -0
  176. package/dist/core/hooks/types.d.ts +234 -0
  177. package/dist/core/hooks/types.d.ts.map +1 -0
  178. package/dist/core/hooks/types.js +52 -0
  179. package/dist/core/hooks/types.js.map +1 -0
  180. package/dist/core/http-dispatcher.d.ts +21 -0
  181. package/dist/core/http-dispatcher.d.ts.map +1 -0
  182. package/dist/core/http-dispatcher.js +82 -0
  183. package/dist/core/http-dispatcher.js.map +1 -0
  184. package/dist/core/instruction-resource-loader.d.ts +81 -0
  185. package/dist/core/instruction-resource-loader.d.ts.map +1 -0
  186. package/dist/core/instruction-resource-loader.js +574 -0
  187. package/dist/core/instruction-resource-loader.js.map +1 -0
  188. package/dist/core/keybindings.d.ts +399 -0
  189. package/dist/core/keybindings.d.ts.map +1 -0
  190. package/dist/core/keybindings.js +299 -0
  191. package/dist/core/keybindings.js.map +1 -0
  192. package/dist/core/lsp/abort.d.ts +3 -0
  193. package/dist/core/lsp/abort.d.ts.map +1 -0
  194. package/dist/core/lsp/abort.js +28 -0
  195. package/dist/core/lsp/abort.js.map +1 -0
  196. package/dist/core/lsp/client.d.ts +108 -0
  197. package/dist/core/lsp/client.d.ts.map +1 -0
  198. package/dist/core/lsp/client.js +586 -0
  199. package/dist/core/lsp/client.js.map +1 -0
  200. package/dist/core/lsp/config-loader.d.ts +44 -0
  201. package/dist/core/lsp/config-loader.d.ts.map +1 -0
  202. package/dist/core/lsp/config-loader.js +223 -0
  203. package/dist/core/lsp/config-loader.js.map +1 -0
  204. package/dist/core/lsp/config.d.ts +134 -0
  205. package/dist/core/lsp/config.d.ts.map +1 -0
  206. package/dist/core/lsp/config.js +682 -0
  207. package/dist/core/lsp/config.js.map +1 -0
  208. package/dist/core/lsp/diagnostics.d.ts +18 -0
  209. package/dist/core/lsp/diagnostics.d.ts.map +1 -0
  210. package/dist/core/lsp/diagnostics.js +311 -0
  211. package/dist/core/lsp/diagnostics.js.map +1 -0
  212. package/dist/core/lsp/file-sync.d.ts +58 -0
  213. package/dist/core/lsp/file-sync.d.ts.map +1 -0
  214. package/dist/core/lsp/file-sync.js +432 -0
  215. package/dist/core/lsp/file-sync.js.map +1 -0
  216. package/dist/core/lsp/integration.d.ts +62 -0
  217. package/dist/core/lsp/integration.d.ts.map +1 -0
  218. package/dist/core/lsp/integration.js +145 -0
  219. package/dist/core/lsp/integration.js.map +1 -0
  220. package/dist/core/lsp/language-map.d.ts +54 -0
  221. package/dist/core/lsp/language-map.d.ts.map +1 -0
  222. package/dist/core/lsp/language-map.js +300 -0
  223. package/dist/core/lsp/language-map.js.map +1 -0
  224. package/dist/core/lsp/manager.d.ts +120 -0
  225. package/dist/core/lsp/manager.d.ts.map +1 -0
  226. package/dist/core/lsp/manager.js +636 -0
  227. package/dist/core/lsp/manager.js.map +1 -0
  228. package/dist/core/lsp/navigation.d.ts +32 -0
  229. package/dist/core/lsp/navigation.d.ts.map +1 -0
  230. package/dist/core/lsp/navigation.js +327 -0
  231. package/dist/core/lsp/navigation.js.map +1 -0
  232. package/dist/core/lsp/portable-path.d.ts +18 -0
  233. package/dist/core/lsp/portable-path.d.ts.map +1 -0
  234. package/dist/core/lsp/portable-path.js +83 -0
  235. package/dist/core/lsp/portable-path.js.map +1 -0
  236. package/dist/core/lsp/refactor.d.ts +32 -0
  237. package/dist/core/lsp/refactor.d.ts.map +1 -0
  238. package/dist/core/lsp/refactor.js +519 -0
  239. package/dist/core/lsp/refactor.js.map +1 -0
  240. package/dist/core/lsp/transport.d.ts +39 -0
  241. package/dist/core/lsp/transport.d.ts.map +1 -0
  242. package/dist/core/lsp/transport.js +261 -0
  243. package/dist/core/lsp/transport.js.map +1 -0
  244. package/dist/core/messages.d.ts +34 -0
  245. package/dist/core/messages.d.ts.map +1 -0
  246. package/dist/core/messages.js +140 -0
  247. package/dist/core/messages.js.map +1 -0
  248. package/dist/core/model-registry.d.ts +148 -0
  249. package/dist/core/model-registry.d.ts.map +1 -0
  250. package/dist/core/model-registry.js +812 -0
  251. package/dist/core/model-registry.js.map +1 -0
  252. package/dist/core/model-resolver.d.ts +115 -0
  253. package/dist/core/model-resolver.d.ts.map +1 -0
  254. package/dist/core/model-resolver.js +498 -0
  255. package/dist/core/model-resolver.js.map +1 -0
  256. package/dist/core/output-guard.d.ts +7 -0
  257. package/dist/core/output-guard.d.ts.map +1 -0
  258. package/dist/core/output-guard.js +89 -0
  259. package/dist/core/output-guard.js.map +1 -0
  260. package/dist/core/package-manager.d.ts +209 -0
  261. package/dist/core/package-manager.d.ts.map +1 -0
  262. package/dist/core/package-manager.js +2341 -0
  263. package/dist/core/package-manager.js.map +1 -0
  264. package/dist/core/prompt-templates.d.ts +57 -0
  265. package/dist/core/prompt-templates.d.ts.map +1 -0
  266. package/dist/core/prompt-templates.js +353 -0
  267. package/dist/core/prompt-templates.js.map +1 -0
  268. package/dist/core/provider-display-names.d.ts +2 -0
  269. package/dist/core/provider-display-names.d.ts.map +1 -0
  270. package/dist/core/provider-display-names.js +33 -0
  271. package/dist/core/provider-display-names.js.map +1 -0
  272. package/dist/core/remote-workspace-protocol/contract.d.ts +465 -0
  273. package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -0
  274. package/dist/core/remote-workspace-protocol/contract.js +825 -0
  275. package/dist/core/remote-workspace-protocol/contract.js.map +1 -0
  276. package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts +16 -0
  277. package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -0
  278. package/dist/core/remote-workspace-protocol/guest-shared-client.js +54 -0
  279. package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -0
  280. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts +23 -0
  281. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -0
  282. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +112 -0
  283. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -0
  284. package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts +30 -0
  285. package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -0
  286. package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +243 -0
  287. package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -0
  288. package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts +3 -0
  289. package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -0
  290. package/dist/core/remote-workspace-protocol/lima-owner-directory.js +31 -0
  291. package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -0
  292. package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts +9 -0
  293. package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -0
  294. package/dist/core/remote-workspace-protocol/lima-owner-lock.js +89 -0
  295. package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -0
  296. package/dist/core/remote-workspace-protocol/session.d.ts +249 -0
  297. package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -0
  298. package/dist/core/remote-workspace-protocol/session.js +1842 -0
  299. package/dist/core/remote-workspace-protocol/session.js.map +1 -0
  300. package/dist/core/remote-workspace-protocol/shared-transport.d.ts +71 -0
  301. package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -0
  302. package/dist/core/remote-workspace-protocol/shared-transport.js +68 -0
  303. package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -0
  304. package/dist/core/resolve-config-value.d.ts +32 -0
  305. package/dist/core/resolve-config-value.d.ts.map +1 -0
  306. package/dist/core/resolve-config-value.js +257 -0
  307. package/dist/core/resolve-config-value.js.map +1 -0
  308. package/dist/core/resource-loader.d.ts +200 -0
  309. package/dist/core/resource-loader.d.ts.map +1 -0
  310. package/dist/core/resource-loader.js +1209 -0
  311. package/dist/core/resource-loader.js.map +1 -0
  312. package/dist/core/rules.d.ts +40 -0
  313. package/dist/core/rules.d.ts.map +1 -0
  314. package/dist/core/rules.js +57 -0
  315. package/dist/core/rules.js.map +1 -0
  316. package/dist/core/sandbox/command.d.ts +25 -0
  317. package/dist/core/sandbox/command.d.ts.map +1 -0
  318. package/dist/core/sandbox/command.js +102 -0
  319. package/dist/core/sandbox/command.js.map +1 -0
  320. package/dist/core/sandbox/config.d.ts +91 -0
  321. package/dist/core/sandbox/config.d.ts.map +1 -0
  322. package/dist/core/sandbox/config.js +88 -0
  323. package/dist/core/sandbox/config.js.map +1 -0
  324. package/dist/core/sandbox/lima-guest-binary.d.ts +11 -0
  325. package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -0
  326. package/dist/core/sandbox/lima-guest-binary.js +140 -0
  327. package/dist/core/sandbox/lima-guest-binary.js.map +1 -0
  328. package/dist/core/sandbox/lima.d.ts +57 -0
  329. package/dist/core/sandbox/lima.d.ts.map +1 -0
  330. package/dist/core/sandbox/lima.js +716 -0
  331. package/dist/core/sandbox/lima.js.map +1 -0
  332. package/dist/core/sandbox/shared-lima-roots.d.ts +11 -0
  333. package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -0
  334. package/dist/core/sandbox/shared-lima-roots.js +25 -0
  335. package/dist/core/sandbox/shared-lima-roots.js.map +1 -0
  336. package/dist/core/sandbox/update-shared-guest-binary.d.ts +8 -0
  337. package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -0
  338. package/dist/core/sandbox/update-shared-guest-binary.js +100 -0
  339. package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -0
  340. package/dist/core/session/constants.d.ts +2 -0
  341. package/dist/core/session/constants.d.ts.map +1 -0
  342. package/dist/core/session/constants.js +2 -0
  343. package/dist/core/session/constants.js.map +1 -0
  344. package/dist/core/session/context-metadata.d.ts +5 -0
  345. package/dist/core/session/context-metadata.d.ts.map +1 -0
  346. package/dist/core/session/context-metadata.js +55 -0
  347. package/dist/core/session/context-metadata.js.map +1 -0
  348. package/dist/core/session/context.d.ts +14 -0
  349. package/dist/core/session/context.d.ts.map +1 -0
  350. package/dist/core/session/context.js +117 -0
  351. package/dist/core/session/context.js.map +1 -0
  352. package/dist/core/session/ids.d.ts +9 -0
  353. package/dist/core/session/ids.d.ts.map +1 -0
  354. package/dist/core/session/ids.js +21 -0
  355. package/dist/core/session/ids.js.map +1 -0
  356. package/dist/core/session/in-memory-session-manager.d.ts +17 -0
  357. package/dist/core/session/in-memory-session-manager.d.ts.map +1 -0
  358. package/dist/core/session/in-memory-session-manager.js +40 -0
  359. package/dist/core/session/in-memory-session-manager.js.map +1 -0
  360. package/dist/core/session/in-memory-session.d.ts +7 -0
  361. package/dist/core/session/in-memory-session.d.ts.map +1 -0
  362. package/dist/core/session/in-memory-session.js +11 -0
  363. package/dist/core/session/in-memory-session.js.map +1 -0
  364. package/dist/core/session/jsonl-errors.d.ts +36 -0
  365. package/dist/core/session/jsonl-errors.d.ts.map +1 -0
  366. package/dist/core/session/jsonl-errors.js +49 -0
  367. package/dist/core/session/jsonl-errors.js.map +1 -0
  368. package/dist/core/session/jsonl-helpers.d.ts +20 -0
  369. package/dist/core/session/jsonl-helpers.d.ts.map +1 -0
  370. package/dist/core/session/jsonl-helpers.js +21 -0
  371. package/dist/core/session/jsonl-helpers.js.map +1 -0
  372. package/dist/core/session/local-session-manager.d.ts +30 -0
  373. package/dist/core/session/local-session-manager.d.ts.map +1 -0
  374. package/dist/core/session/local-session-manager.js +205 -0
  375. package/dist/core/session/local-session-manager.js.map +1 -0
  376. package/dist/core/session/local-session.d.ts +9 -0
  377. package/dist/core/session/local-session.d.ts.map +1 -0
  378. package/dist/core/session/local-session.js +15 -0
  379. package/dist/core/session/local-session.js.map +1 -0
  380. package/dist/core/session/migrations.d.ts +11 -0
  381. package/dist/core/session/migrations.d.ts.map +1 -0
  382. package/dist/core/session/migrations.js +78 -0
  383. package/dist/core/session/migrations.js.map +1 -0
  384. package/dist/core/session/remote-session-client.d.ts +83 -0
  385. package/dist/core/session/remote-session-client.d.ts.map +1 -0
  386. package/dist/core/session/remote-session-client.js +224 -0
  387. package/dist/core/session/remote-session-client.js.map +1 -0
  388. package/dist/core/session/remote-session-manager.d.ts +32 -0
  389. package/dist/core/session/remote-session-manager.d.ts.map +1 -0
  390. package/dist/core/session/remote-session-manager.js +124 -0
  391. package/dist/core/session/remote-session-manager.js.map +1 -0
  392. package/dist/core/session/remote-session.d.ts +20 -0
  393. package/dist/core/session/remote-session.d.ts.map +1 -0
  394. package/dist/core/session/remote-session.js +33 -0
  395. package/dist/core/session/remote-session.js.map +1 -0
  396. package/dist/core/session/session-manager.d.ts +18 -0
  397. package/dist/core/session/session-manager.d.ts.map +1 -0
  398. package/dist/core/session/session-manager.js +2 -0
  399. package/dist/core/session/session-manager.js.map +1 -0
  400. package/dist/core/session/session.d.ts +140 -0
  401. package/dist/core/session/session.d.ts.map +1 -0
  402. package/dist/core/session/session.js +461 -0
  403. package/dist/core/session/session.js.map +1 -0
  404. package/dist/core/session/stores/in-memory-session-store.d.ts +39 -0
  405. package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -0
  406. package/dist/core/session/stores/in-memory-session-store.js +168 -0
  407. package/dist/core/session/stores/in-memory-session-store.js.map +1 -0
  408. package/dist/core/session/stores/jsonl-session-store.d.ts +97 -0
  409. package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -0
  410. package/dist/core/session/stores/jsonl-session-store.js +1140 -0
  411. package/dist/core/session/stores/jsonl-session-store.js.map +1 -0
  412. package/dist/core/session/stores/remote-session-store.d.ts +44 -0
  413. package/dist/core/session/stores/remote-session-store.d.ts.map +1 -0
  414. package/dist/core/session/stores/remote-session-store.js +159 -0
  415. package/dist/core/session/stores/remote-session-store.js.map +1 -0
  416. package/dist/core/session/stores/session-store.d.ts +42 -0
  417. package/dist/core/session/stores/session-store.d.ts.map +1 -0
  418. package/dist/core/session/stores/session-store.js +2 -0
  419. package/dist/core/session/stores/session-store.js.map +1 -0
  420. package/dist/core/session/types.d.ts +141 -0
  421. package/dist/core/session/types.d.ts.map +1 -0
  422. package/dist/core/session/types.js +2 -0
  423. package/dist/core/session/types.js.map +1 -0
  424. package/dist/core/session/usage-ledger.d.ts +18 -0
  425. package/dist/core/session/usage-ledger.d.ts.map +1 -0
  426. package/dist/core/session/usage-ledger.js +68 -0
  427. package/dist/core/session/usage-ledger.js.map +1 -0
  428. package/dist/core/session-cwd.d.ts +19 -0
  429. package/dist/core/session-cwd.d.ts.map +1 -0
  430. package/dist/core/session-cwd.js +38 -0
  431. package/dist/core/session-cwd.js.map +1 -0
  432. package/dist/core/settings-manager.d.ts +314 -0
  433. package/dist/core/settings-manager.d.ts.map +1 -0
  434. package/dist/core/settings-manager.js +991 -0
  435. package/dist/core/settings-manager.js.map +1 -0
  436. package/dist/core/skills.d.ts +40 -0
  437. package/dist/core/skills.d.ts.map +1 -0
  438. package/dist/core/skills.js +57 -0
  439. package/dist/core/skills.js.map +1 -0
  440. package/dist/core/slash-commands.d.ts +15 -0
  441. package/dist/core/slash-commands.d.ts.map +1 -0
  442. package/dist/core/slash-commands.js +36 -0
  443. package/dist/core/slash-commands.js.map +1 -0
  444. package/dist/core/source-info.d.ts +26 -0
  445. package/dist/core/source-info.d.ts.map +1 -0
  446. package/dist/core/source-info.js +27 -0
  447. package/dist/core/source-info.js.map +1 -0
  448. package/dist/core/system-prompt.d.ts +32 -0
  449. package/dist/core/system-prompt.d.ts.map +1 -0
  450. package/dist/core/system-prompt.js +131 -0
  451. package/dist/core/system-prompt.js.map +1 -0
  452. package/dist/core/telemetry.d.ts +3 -0
  453. package/dist/core/telemetry.d.ts.map +1 -0
  454. package/dist/core/telemetry.js +9 -0
  455. package/dist/core/telemetry.js.map +1 -0
  456. package/dist/core/timings.d.ts +10 -0
  457. package/dist/core/timings.d.ts.map +1 -0
  458. package/dist/core/timings.js +41 -0
  459. package/dist/core/timings.js.map +1 -0
  460. package/dist/core/tools/bash.d.ts +51 -0
  461. package/dist/core/tools/bash.d.ts.map +1 -0
  462. package/dist/core/tools/bash.js +321 -0
  463. package/dist/core/tools/bash.js.map +1 -0
  464. package/dist/core/tools/compress-context.d.ts +27 -0
  465. package/dist/core/tools/compress-context.d.ts.map +1 -0
  466. package/dist/core/tools/compress-context.js +142 -0
  467. package/dist/core/tools/compress-context.js.map +1 -0
  468. package/dist/core/tools/edit-diff.d.ts +82 -0
  469. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  470. package/dist/core/tools/edit-diff.js +327 -0
  471. package/dist/core/tools/edit-diff.js.map +1 -0
  472. package/dist/core/tools/edit.d.ts +50 -0
  473. package/dist/core/tools/edit.d.ts.map +1 -0
  474. package/dist/core/tools/edit.js +324 -0
  475. package/dist/core/tools/edit.js.map +1 -0
  476. package/dist/core/tools/file-mutation-queue.d.ts +8 -0
  477. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  478. package/dist/core/tools/file-mutation-queue.js +69 -0
  479. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  480. package/dist/core/tools/find.d.ts +22 -0
  481. package/dist/core/tools/find.d.ts.map +1 -0
  482. package/dist/core/tools/find.js +268 -0
  483. package/dist/core/tools/find.js.map +1 -0
  484. package/dist/core/tools/grep.d.ts +27 -0
  485. package/dist/core/tools/grep.d.ts.map +1 -0
  486. package/dist/core/tools/grep.js +332 -0
  487. package/dist/core/tools/grep.js.map +1 -0
  488. package/dist/core/tools/hash-store.d.ts +12 -0
  489. package/dist/core/tools/hash-store.d.ts.map +1 -0
  490. package/dist/core/tools/hash-store.js +48 -0
  491. package/dist/core/tools/hash-store.js.map +1 -0
  492. package/dist/core/tools/hashline/apply.d.ts +40 -0
  493. package/dist/core/tools/hashline/apply.d.ts.map +1 -0
  494. package/dist/core/tools/hashline/apply.js +261 -0
  495. package/dist/core/tools/hashline/apply.js.map +1 -0
  496. package/dist/core/tools/hashline/hash.d.ts +56 -0
  497. package/dist/core/tools/hashline/hash.d.ts.map +1 -0
  498. package/dist/core/tools/hashline/hash.js +196 -0
  499. package/dist/core/tools/hashline/hash.js.map +1 -0
  500. package/dist/core/tools/hashline/parse.d.ts +8 -0
  501. package/dist/core/tools/hashline/parse.d.ts.map +1 -0
  502. package/dist/core/tools/hashline/parse.js +41 -0
  503. package/dist/core/tools/hashline/parse.js.map +1 -0
  504. package/dist/core/tools/hashline/resolve.d.ts +51 -0
  505. package/dist/core/tools/hashline/resolve.d.ts.map +1 -0
  506. package/dist/core/tools/hashline/resolve.js +187 -0
  507. package/dist/core/tools/hashline/resolve.js.map +1 -0
  508. package/dist/core/tools/hashline-utils.d.ts +6 -0
  509. package/dist/core/tools/hashline-utils.d.ts.map +1 -0
  510. package/dist/core/tools/hashline-utils.js +23 -0
  511. package/dist/core/tools/hashline-utils.js.map +1 -0
  512. package/dist/core/tools/index.d.ts +36 -0
  513. package/dist/core/tools/index.d.ts.map +1 -0
  514. package/dist/core/tools/index.js +141 -0
  515. package/dist/core/tools/index.js.map +1 -0
  516. package/dist/core/tools/ls.d.ts +21 -0
  517. package/dist/core/tools/ls.d.ts.map +1 -0
  518. package/dist/core/tools/ls.js +156 -0
  519. package/dist/core/tools/ls.js.map +1 -0
  520. package/dist/core/tools/operations.d.ts +212 -0
  521. package/dist/core/tools/operations.d.ts.map +1 -0
  522. package/dist/core/tools/operations.js +793 -0
  523. package/dist/core/tools/operations.js.map +1 -0
  524. package/dist/core/tools/output-accumulator.d.ts +54 -0
  525. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  526. package/dist/core/tools/output-accumulator.js +184 -0
  527. package/dist/core/tools/output-accumulator.js.map +1 -0
  528. package/dist/core/tools/path-utils.d.ts +9 -0
  529. package/dist/core/tools/path-utils.d.ts.map +1 -0
  530. package/dist/core/tools/path-utils.js +99 -0
  531. package/dist/core/tools/path-utils.js.map +1 -0
  532. package/dist/core/tools/read.d.ts +32 -0
  533. package/dist/core/tools/read.d.ts.map +1 -0
  534. package/dist/core/tools/read.js +318 -0
  535. package/dist/core/tools/read.js.map +1 -0
  536. package/dist/core/tools/render-utils.d.ts +33 -0
  537. package/dist/core/tools/render-utils.d.ts.map +1 -0
  538. package/dist/core/tools/render-utils.js +61 -0
  539. package/dist/core/tools/render-utils.js.map +1 -0
  540. package/dist/core/tools/replace-diff.d.ts +16 -0
  541. package/dist/core/tools/replace-diff.d.ts.map +1 -0
  542. package/dist/core/tools/replace-diff.js +117 -0
  543. package/dist/core/tools/replace-diff.js.map +1 -0
  544. package/dist/core/tools/replace-normalize.d.ts +2 -0
  545. package/dist/core/tools/replace-normalize.d.ts.map +1 -0
  546. package/dist/core/tools/replace-normalize.js +73 -0
  547. package/dist/core/tools/replace-normalize.js.map +1 -0
  548. package/dist/core/tools/replace-render.d.ts +51 -0
  549. package/dist/core/tools/replace-render.d.ts.map +1 -0
  550. package/dist/core/tools/replace-render.js +162 -0
  551. package/dist/core/tools/replace-render.js.map +1 -0
  552. package/dist/core/tools/runtime.d.ts +2 -0
  553. package/dist/core/tools/runtime.d.ts.map +1 -0
  554. package/dist/core/tools/runtime.js +6 -0
  555. package/dist/core/tools/runtime.js.map +1 -0
  556. package/dist/core/tools/session-history.d.ts +55 -0
  557. package/dist/core/tools/session-history.d.ts.map +1 -0
  558. package/dist/core/tools/session-history.js +649 -0
  559. package/dist/core/tools/session-history.js.map +1 -0
  560. package/dist/core/tools/subagent-agents.d.ts +29 -0
  561. package/dist/core/tools/subagent-agents.d.ts.map +1 -0
  562. package/dist/core/tools/subagent-agents.js +223 -0
  563. package/dist/core/tools/subagent-agents.js.map +1 -0
  564. package/dist/core/tools/subagent.d.ts +185 -0
  565. package/dist/core/tools/subagent.d.ts.map +1 -0
  566. package/dist/core/tools/subagent.js +1309 -0
  567. package/dist/core/tools/subagent.js.map +1 -0
  568. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  569. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  570. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  571. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  572. package/dist/core/tools/truncate.d.ts +39 -0
  573. package/dist/core/tools/truncate.d.ts.map +1 -0
  574. package/dist/core/tools/truncate.js +215 -0
  575. package/dist/core/tools/truncate.js.map +1 -0
  576. package/dist/core/tools/websearch.d.ts +33 -0
  577. package/dist/core/tools/websearch.d.ts.map +1 -0
  578. package/dist/core/tools/websearch.js +341 -0
  579. package/dist/core/tools/websearch.js.map +1 -0
  580. package/dist/core/tools/workspace-tool-host.d.ts +102 -0
  581. package/dist/core/tools/workspace-tool-host.d.ts.map +1 -0
  582. package/dist/core/tools/workspace-tool-host.js +348 -0
  583. package/dist/core/tools/workspace-tool-host.js.map +1 -0
  584. package/dist/core/tools/write.d.ts +16 -0
  585. package/dist/core/tools/write.d.ts.map +1 -0
  586. package/dist/core/tools/write.js +204 -0
  587. package/dist/core/tools/write.js.map +1 -0
  588. package/dist/core/workspace-identity.d.ts +7 -0
  589. package/dist/core/workspace-identity.d.ts.map +1 -0
  590. package/dist/core/workspace-identity.js +2 -0
  591. package/dist/core/workspace-identity.js.map +1 -0
  592. package/dist/daemon/activity-budget.d.ts +10 -0
  593. package/dist/daemon/activity-budget.d.ts.map +1 -0
  594. package/dist/daemon/activity-budget.js +34 -0
  595. package/dist/daemon/activity-budget.js.map +1 -0
  596. package/dist/daemon/command.d.ts +6 -0
  597. package/dist/daemon/command.d.ts.map +1 -0
  598. package/dist/daemon/command.js +58 -0
  599. package/dist/daemon/command.js.map +1 -0
  600. package/dist/daemon/config.d.ts +45 -0
  601. package/dist/daemon/config.d.ts.map +1 -0
  602. package/dist/daemon/config.js +319 -0
  603. package/dist/daemon/config.js.map +1 -0
  604. package/dist/daemon/help.d.ts +2 -0
  605. package/dist/daemon/help.d.ts.map +1 -0
  606. package/dist/daemon/help.js +42 -0
  607. package/dist/daemon/help.js.map +1 -0
  608. package/dist/daemon/lsp-config.d.ts +4 -0
  609. package/dist/daemon/lsp-config.d.ts.map +1 -0
  610. package/dist/daemon/lsp-config.js +155 -0
  611. package/dist/daemon/lsp-config.js.map +1 -0
  612. package/dist/daemon/outbound-budget.d.ts +10 -0
  613. package/dist/daemon/outbound-budget.d.ts.map +1 -0
  614. package/dist/daemon/outbound-budget.js +30 -0
  615. package/dist/daemon/outbound-budget.js.map +1 -0
  616. package/dist/daemon/security.d.ts +19 -0
  617. package/dist/daemon/security.d.ts.map +1 -0
  618. package/dist/daemon/security.js +177 -0
  619. package/dist/daemon/security.js.map +1 -0
  620. package/dist/daemon/server.d.ts +20 -0
  621. package/dist/daemon/server.d.ts.map +1 -0
  622. package/dist/daemon/server.js +480 -0
  623. package/dist/daemon/server.js.map +1 -0
  624. package/dist/daemon/shared-connection.d.ts +33 -0
  625. package/dist/daemon/shared-connection.d.ts.map +1 -0
  626. package/dist/daemon/shared-connection.js +271 -0
  627. package/dist/daemon/shared-connection.js.map +1 -0
  628. package/dist/daemon/shared-revision.d.ts +5 -0
  629. package/dist/daemon/shared-revision.d.ts.map +1 -0
  630. package/dist/daemon/shared-revision.js +61 -0
  631. package/dist/daemon/shared-revision.js.map +1 -0
  632. package/dist/daemon/shared-roots.d.ts +9 -0
  633. package/dist/daemon/shared-roots.d.ts.map +1 -0
  634. package/dist/daemon/shared-roots.js +33 -0
  635. package/dist/daemon/shared-roots.js.map +1 -0
  636. package/dist/daemon/workspace-runtime.d.ts +46 -0
  637. package/dist/daemon/workspace-runtime.d.ts.map +1 -0
  638. package/dist/daemon/workspace-runtime.js +705 -0
  639. package/dist/daemon/workspace-runtime.js.map +1 -0
  640. package/dist/index.d.ts +109 -0
  641. package/dist/index.d.ts.map +1 -0
  642. package/dist/index.js +107 -0
  643. package/dist/index.js.map +1 -0
  644. package/dist/main.d.ts +39 -0
  645. package/dist/main.d.ts.map +1 -0
  646. package/dist/main.js +765 -0
  647. package/dist/main.js.map +1 -0
  648. package/dist/migrations.d.ts +35 -0
  649. package/dist/migrations.d.ts.map +1 -0
  650. package/dist/migrations.js +412 -0
  651. package/dist/migrations.js.map +1 -0
  652. package/dist/modes/interactive/components/assistant-message.d.ts +30 -0
  653. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  654. package/dist/modes/interactive/components/assistant-message.js +159 -0
  655. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  656. package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
  657. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  658. package/dist/modes/interactive/components/bash-execution.js +173 -0
  659. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  660. package/dist/modes/interactive/components/bordered-loader.d.ts +18 -0
  661. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  662. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  663. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  664. package/dist/modes/interactive/components/branch-summary-message.d.ts +17 -0
  665. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  666. package/dist/modes/interactive/components/branch-summary-message.js +45 -0
  667. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  668. package/dist/modes/interactive/components/compaction-summary-message.d.ts +17 -0
  669. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  670. package/dist/modes/interactive/components/compaction-summary-message.js +46 -0
  671. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  672. package/dist/modes/interactive/components/config-selector.d.ts +74 -0
  673. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  674. package/dist/modes/interactive/components/config-selector.js +514 -0
  675. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  676. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  677. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  678. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  679. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  680. package/dist/modes/interactive/components/custom-editor.d.ts +25 -0
  681. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  682. package/dist/modes/interactive/components/custom-editor.js +85 -0
  683. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  684. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  685. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  686. package/dist/modes/interactive/components/custom-message.js +81 -0
  687. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  688. package/dist/modes/interactive/components/diff.d.ts +12 -0
  689. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  690. package/dist/modes/interactive/components/diff.js +118 -0
  691. package/dist/modes/interactive/components/diff.js.map +1 -0
  692. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  693. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  694. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  695. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  696. package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  697. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  698. package/dist/modes/interactive/components/extension-editor.js +128 -0
  699. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  700. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  701. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  702. package/dist/modes/interactive/components/extension-input.js +61 -0
  703. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  704. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  705. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  706. package/dist/modes/interactive/components/extension-selector.js +83 -0
  707. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  708. package/dist/modes/interactive/components/footer.d.ts +36 -0
  709. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  710. package/dist/modes/interactive/components/footer.js +227 -0
  711. package/dist/modes/interactive/components/footer.js.map +1 -0
  712. package/dist/modes/interactive/components/hook-execution.d.ts +19 -0
  713. package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -0
  714. package/dist/modes/interactive/components/hook-execution.js +185 -0
  715. package/dist/modes/interactive/components/hook-execution.js.map +1 -0
  716. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  717. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  718. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  719. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  720. package/dist/modes/interactive/components/login-dialog.d.ts +55 -0
  721. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  722. package/dist/modes/interactive/components/login-dialog.js +176 -0
  723. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  724. package/dist/modes/interactive/components/markdown-transform.d.ts +4 -0
  725. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  726. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  727. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  728. package/dist/modes/interactive/components/mermaid.d.ts +14 -0
  729. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  730. package/dist/modes/interactive/components/mermaid.js +228 -0
  731. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  732. package/dist/modes/interactive/components/message-card.d.ts +9 -0
  733. package/dist/modes/interactive/components/message-card.d.ts.map +1 -0
  734. package/dist/modes/interactive/components/message-card.js +24 -0
  735. package/dist/modes/interactive/components/message-card.js.map +1 -0
  736. package/dist/modes/interactive/components/model-selector.d.ts +52 -0
  737. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  738. package/dist/modes/interactive/components/model-selector.js +296 -0
  739. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  740. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  741. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  742. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  743. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  744. package/dist/modes/interactive/components/scoped-models-selector.d.ts +50 -0
  745. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  746. package/dist/modes/interactive/components/scoped-models-selector.js +300 -0
  747. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  748. package/dist/modes/interactive/components/session-selector-search.d.ts +22 -0
  749. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  750. package/dist/modes/interactive/components/session-selector-search.js +144 -0
  751. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  752. package/dist/modes/interactive/components/session-selector.d.ts +108 -0
  753. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  754. package/dist/modes/interactive/components/session-selector.js +835 -0
  755. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  756. package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
  757. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  758. package/dist/modes/interactive/components/settings-selector.js +455 -0
  759. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  760. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  761. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  762. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  763. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  764. package/dist/modes/interactive/components/skill-invocation-message.d.ts +18 -0
  765. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  766. package/dist/modes/interactive/components/skill-invocation-message.js +48 -0
  767. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  768. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  769. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  770. package/dist/modes/interactive/components/theme-selector.js +50 -0
  771. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  772. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  773. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  774. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  775. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  776. package/dist/modes/interactive/components/tool-execution.d.ts +67 -0
  777. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  778. package/dist/modes/interactive/components/tool-execution.js +312 -0
  779. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  780. package/dist/modes/interactive/components/tree-selector.d.ts +127 -0
  781. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  782. package/dist/modes/interactive/components/tree-selector.js +1098 -0
  783. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  784. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  785. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  786. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  787. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  788. package/dist/modes/interactive/components/user-message.d.ts +16 -0
  789. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  790. package/dist/modes/interactive/components/user-message.js +50 -0
  791. package/dist/modes/interactive/components/user-message.js.map +1 -0
  792. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  793. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  794. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  795. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  796. package/dist/modes/interactive/interactive-mode.d.ts +554 -0
  797. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  798. package/dist/modes/interactive/interactive-mode.js +5870 -0
  799. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  800. package/dist/modes/interactive/theme/dark.json +86 -0
  801. package/dist/modes/interactive/theme/light.json +85 -0
  802. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  803. package/dist/modes/interactive/theme/theme.d.ts +109 -0
  804. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  805. package/dist/modes/interactive/theme/theme.js +1040 -0
  806. package/dist/modes/interactive/theme/theme.js.map +1 -0
  807. package/dist/modes/json-event.d.ts +28 -0
  808. package/dist/modes/json-event.d.ts.map +1 -0
  809. package/dist/modes/json-event.js +12 -0
  810. package/dist/modes/json-event.js.map +1 -0
  811. package/dist/modes/print-mode.d.ts +29 -0
  812. package/dist/modes/print-mode.d.ts.map +1 -0
  813. package/dist/modes/print-mode.js +142 -0
  814. package/dist/modes/print-mode.js.map +1 -0
  815. package/dist/modes/rpc/jsonl.d.ts +17 -0
  816. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  817. package/dist/modes/rpc/jsonl.js +49 -0
  818. package/dist/modes/rpc/jsonl.js.map +1 -0
  819. package/dist/modes/rpc/rpc-client.d.ts +321 -0
  820. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  821. package/dist/modes/rpc/rpc-client.js +755 -0
  822. package/dist/modes/rpc/rpc-client.js.map +1 -0
  823. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  824. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  825. package/dist/modes/rpc/rpc-mode.js +963 -0
  826. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  827. package/dist/modes/rpc/rpc-types.d.ts +652 -0
  828. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  829. package/dist/modes/rpc/rpc-types.js +8 -0
  830. package/dist/modes/rpc/rpc-types.js.map +1 -0
  831. package/dist/package-manager-cli.d.ts +4 -0
  832. package/dist/package-manager-cli.d.ts.map +1 -0
  833. package/dist/package-manager-cli.js +488 -0
  834. package/dist/package-manager-cli.js.map +1 -0
  835. package/dist/utils/ansi.d.ts +2 -0
  836. package/dist/utils/ansi.d.ts.map +1 -0
  837. package/dist/utils/ansi.js +25 -0
  838. package/dist/utils/ansi.js.map +1 -0
  839. package/dist/utils/changelog.d.ts +23 -0
  840. package/dist/utils/changelog.d.ts.map +1 -0
  841. package/dist/utils/changelog.js +74 -0
  842. package/dist/utils/changelog.js.map +1 -0
  843. package/dist/utils/child-process.d.ts +15 -0
  844. package/dist/utils/child-process.d.ts.map +1 -0
  845. package/dist/utils/child-process.js +88 -0
  846. package/dist/utils/child-process.js.map +1 -0
  847. package/dist/utils/clipboard-image.d.ts +13 -0
  848. package/dist/utils/clipboard-image.d.ts.map +1 -0
  849. package/dist/utils/clipboard-image.js +248 -0
  850. package/dist/utils/clipboard-image.js.map +1 -0
  851. package/dist/utils/clipboard-native.d.ts +11 -0
  852. package/dist/utils/clipboard-native.d.ts.map +1 -0
  853. package/dist/utils/clipboard-native.js +20 -0
  854. package/dist/utils/clipboard-native.js.map +1 -0
  855. package/dist/utils/clipboard.d.ts +4 -0
  856. package/dist/utils/clipboard.d.ts.map +1 -0
  857. package/dist/utils/clipboard.js +171 -0
  858. package/dist/utils/clipboard.js.map +1 -0
  859. package/dist/utils/deprecation.d.ts +4 -0
  860. package/dist/utils/deprecation.d.ts.map +1 -0
  861. package/dist/utils/deprecation.js +13 -0
  862. package/dist/utils/deprecation.js.map +1 -0
  863. package/dist/utils/directory-completions.d.ts +5 -0
  864. package/dist/utils/directory-completions.d.ts.map +1 -0
  865. package/dist/utils/directory-completions.js +64 -0
  866. package/dist/utils/directory-completions.js.map +1 -0
  867. package/dist/utils/exif-orientation.d.ts +6 -0
  868. package/dist/utils/exif-orientation.d.ts.map +1 -0
  869. package/dist/utils/exif-orientation.js +166 -0
  870. package/dist/utils/exif-orientation.js.map +1 -0
  871. package/dist/utils/frontmatter.d.ts +8 -0
  872. package/dist/utils/frontmatter.d.ts.map +1 -0
  873. package/dist/utils/frontmatter.js +26 -0
  874. package/dist/utils/frontmatter.js.map +1 -0
  875. package/dist/utils/fs-watch.d.ts +5 -0
  876. package/dist/utils/fs-watch.d.ts.map +1 -0
  877. package/dist/utils/fs-watch.js +25 -0
  878. package/dist/utils/fs-watch.js.map +1 -0
  879. package/dist/utils/git.d.ts +27 -0
  880. package/dist/utils/git.d.ts.map +1 -0
  881. package/dist/utils/git.js +237 -0
  882. package/dist/utils/git.js.map +1 -0
  883. package/dist/utils/grip-user-agent.d.ts +2 -0
  884. package/dist/utils/grip-user-agent.d.ts.map +1 -0
  885. package/dist/utils/grip-user-agent.js +5 -0
  886. package/dist/utils/grip-user-agent.js.map +1 -0
  887. package/dist/utils/html.d.ts +7 -0
  888. package/dist/utils/html.d.ts.map +1 -0
  889. package/dist/utils/html.js +40 -0
  890. package/dist/utils/html.js.map +1 -0
  891. package/dist/utils/image-convert.d.ts +12 -0
  892. package/dist/utils/image-convert.d.ts.map +1 -0
  893. package/dist/utils/image-convert.js +43 -0
  894. package/dist/utils/image-convert.js.map +1 -0
  895. package/dist/utils/image-process.d.ts +18 -0
  896. package/dist/utils/image-process.d.ts.map +1 -0
  897. package/dist/utils/image-process.js +83 -0
  898. package/dist/utils/image-process.js.map +1 -0
  899. package/dist/utils/image-resize-core.d.ts +30 -0
  900. package/dist/utils/image-resize-core.d.ts.map +1 -0
  901. package/dist/utils/image-resize-core.js +133 -0
  902. package/dist/utils/image-resize-core.js.map +1 -0
  903. package/dist/utils/image-resize-worker.d.ts +2 -0
  904. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  905. package/dist/utils/image-resize-worker.js +31 -0
  906. package/dist/utils/image-resize-worker.js.map +1 -0
  907. package/dist/utils/image-resize.d.ts +19 -0
  908. package/dist/utils/image-resize.d.ts.map +1 -0
  909. package/dist/utils/image-resize.js +86 -0
  910. package/dist/utils/image-resize.js.map +1 -0
  911. package/dist/utils/json.d.ts +3 -0
  912. package/dist/utils/json.d.ts.map +1 -0
  913. package/dist/utils/json.js +7 -0
  914. package/dist/utils/json.js.map +1 -0
  915. package/dist/utils/mime.d.ts +3 -0
  916. package/dist/utils/mime.d.ts.map +1 -0
  917. package/dist/utils/mime.js +110 -0
  918. package/dist/utils/mime.js.map +1 -0
  919. package/dist/utils/open-browser.d.ts +9 -0
  920. package/dist/utils/open-browser.d.ts.map +1 -0
  921. package/dist/utils/open-browser.js +22 -0
  922. package/dist/utils/open-browser.js.map +1 -0
  923. package/dist/utils/paths.d.ts +31 -0
  924. package/dist/utils/paths.d.ts.map +1 -0
  925. package/dist/utils/paths.js +87 -0
  926. package/dist/utils/paths.js.map +1 -0
  927. package/dist/utils/photon.d.ts +22 -0
  928. package/dist/utils/photon.d.ts.map +1 -0
  929. package/dist/utils/photon.js +126 -0
  930. package/dist/utils/photon.js.map +1 -0
  931. package/dist/utils/shell.d.ts +28 -0
  932. package/dist/utils/shell.d.ts.map +1 -0
  933. package/dist/utils/shell.js +188 -0
  934. package/dist/utils/shell.js.map +1 -0
  935. package/dist/utils/sleep.d.ts +5 -0
  936. package/dist/utils/sleep.d.ts.map +1 -0
  937. package/dist/utils/sleep.js +17 -0
  938. package/dist/utils/sleep.js.map +1 -0
  939. package/dist/utils/syntax-highlight.d.ts +12 -0
  940. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  941. package/dist/utils/syntax-highlight.js +125 -0
  942. package/dist/utils/syntax-highlight.js.map +1 -0
  943. package/dist/utils/tools-manager.d.ts +5 -0
  944. package/dist/utils/tools-manager.d.ts.map +1 -0
  945. package/dist/utils/tools-manager.js +329 -0
  946. package/dist/utils/tools-manager.js.map +1 -0
  947. package/dist/utils/version-check.d.ts +14 -0
  948. package/dist/utils/version-check.d.ts.map +1 -0
  949. package/dist/utils/version-check.js +91 -0
  950. package/dist/utils/version-check.js.map +1 -0
  951. package/dist/utils/windows-self-update.d.ts +3 -0
  952. package/dist/utils/windows-self-update.d.ts.map +1 -0
  953. package/dist/utils/windows-self-update.js +77 -0
  954. package/dist/utils/windows-self-update.js.map +1 -0
  955. package/docs/compaction.md +408 -0
  956. package/docs/custom-provider.md +714 -0
  957. package/docs/daemon-architecture.md +399 -0
  958. package/docs/daemon.md +112 -0
  959. package/docs/development.md +72 -0
  960. package/docs/docs.json +164 -0
  961. package/docs/extensions.md +2745 -0
  962. package/docs/hooks.md +85 -0
  963. package/docs/images/doom-extension.png +0 -0
  964. package/docs/images/exy.png +0 -0
  965. package/docs/images/interactive-mode.png +0 -0
  966. package/docs/images/tree-view.png +0 -0
  967. package/docs/index.md +77 -0
  968. package/docs/json.md +89 -0
  969. package/docs/keybindings.md +230 -0
  970. package/docs/lsp.md +499 -0
  971. package/docs/migrating-to-grip.md +18 -0
  972. package/docs/models.md +496 -0
  973. package/docs/packages.md +228 -0
  974. package/docs/prompt-templates.md +88 -0
  975. package/docs/providers.md +251 -0
  976. package/docs/quickstart.md +159 -0
  977. package/docs/rpc.md +1492 -0
  978. package/docs/rules.md +117 -0
  979. package/docs/sandbox.md +104 -0
  980. package/docs/sdk.md +360 -0
  981. package/docs/session-format.md +414 -0
  982. package/docs/sessions.md +137 -0
  983. package/docs/settings.md +372 -0
  984. package/docs/shell-aliases.md +13 -0
  985. package/docs/skills.md +246 -0
  986. package/docs/terminal-setup.md +112 -0
  987. package/docs/termux.md +112 -0
  988. package/docs/themes.md +295 -0
  989. package/docs/tmux.md +61 -0
  990. package/docs/tui.md +918 -0
  991. package/docs/usage.md +304 -0
  992. package/docs/windows.md +17 -0
  993. package/examples/README.md +29 -0
  994. package/examples/daemon-docker/Dockerfile +43 -0
  995. package/examples/daemon-docker/README.md +45 -0
  996. package/examples/extensions/README.md +208 -0
  997. package/examples/extensions/auto-commit-on-exit.ts +46 -0
  998. package/examples/extensions/bash-spawn-hook.ts +30 -0
  999. package/examples/extensions/bookmark.ts +50 -0
  1000. package/examples/extensions/border-status-editor.ts +145 -0
  1001. package/examples/extensions/built-in-tool-renderer.ts +259 -0
  1002. package/examples/extensions/claude-rules.ts +86 -0
  1003. package/examples/extensions/commands.ts +82 -0
  1004. package/examples/extensions/confirm-destructive.ts +59 -0
  1005. package/examples/extensions/custom-compaction.ts +131 -0
  1006. package/examples/extensions/custom-footer.ts +79 -0
  1007. package/examples/extensions/custom-header.ts +73 -0
  1008. package/examples/extensions/custom-provider-anthropic/index.ts +707 -0
  1009. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1010. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1011. package/examples/extensions/custom-provider-gitlab-duo/index.ts +402 -0
  1012. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1013. package/examples/extensions/custom-provider-gitlab-duo/test.ts +104 -0
  1014. package/examples/extensions/dirty-repo-guard.ts +59 -0
  1015. package/examples/extensions/doom-overlay/README.md +46 -0
  1016. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  1017. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  1018. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  1019. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  1020. package/examples/extensions/doom-overlay/doom-component.ts +133 -0
  1021. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  1022. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  1023. package/examples/extensions/doom-overlay/index.ts +74 -0
  1024. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  1025. package/examples/extensions/dynamic-resources/RULES.md +8 -0
  1026. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1027. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  1028. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1029. package/examples/extensions/dynamic-resources/index.ts +16 -0
  1030. package/examples/extensions/dynamic-tools.ts +74 -0
  1031. package/examples/extensions/event-bus.ts +43 -0
  1032. package/examples/extensions/file-trigger.ts +41 -0
  1033. package/examples/extensions/git-checkpoint.ts +53 -0
  1034. package/examples/extensions/git-merge-and-resolve.ts +125 -0
  1035. package/examples/extensions/github-issue-autocomplete.ts +191 -0
  1036. package/examples/extensions/handoff.ts +191 -0
  1037. package/examples/extensions/hello.ts +26 -0
  1038. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1039. package/examples/extensions/inline-bash.ts +104 -0
  1040. package/examples/extensions/input-transform.ts +43 -0
  1041. package/examples/extensions/interactive-shell.ts +194 -0
  1042. package/examples/extensions/mac-system-theme.ts +47 -0
  1043. package/examples/extensions/message-renderer.ts +59 -0
  1044. package/examples/extensions/minimal-mode.ts +428 -0
  1045. package/examples/extensions/modal-editor.ts +86 -0
  1046. package/examples/extensions/model-status.ts +31 -0
  1047. package/examples/extensions/notify.ts +55 -0
  1048. package/examples/extensions/overlay-qa-tests.ts +1374 -0
  1049. package/examples/extensions/overlay-test.ts +171 -0
  1050. package/examples/extensions/permission-gate.ts +34 -0
  1051. package/examples/extensions/pirate.ts +47 -0
  1052. package/examples/extensions/plan-mode/README.md +65 -0
  1053. package/examples/extensions/plan-mode/index.ts +346 -0
  1054. package/examples/extensions/plan-mode/utils.ts +172 -0
  1055. package/examples/extensions/preset.ts +426 -0
  1056. package/examples/extensions/prompt-customizer.ts +97 -0
  1057. package/examples/extensions/protected-paths.ts +29 -0
  1058. package/examples/extensions/provider-payload.ts +18 -0
  1059. package/examples/extensions/qna.ts +125 -0
  1060. package/examples/extensions/question.ts +294 -0
  1061. package/examples/extensions/questionnaire.ts +459 -0
  1062. package/examples/extensions/rainbow-editor.ts +88 -0
  1063. package/examples/extensions/reload-runtime.ts +37 -0
  1064. package/examples/extensions/rpc-demo.ts +118 -0
  1065. package/examples/extensions/sandbox/index.ts +320 -0
  1066. package/examples/extensions/sandbox/package-lock.json +92 -0
  1067. package/examples/extensions/sandbox/package.json +19 -0
  1068. package/examples/extensions/send-user-message.ts +97 -0
  1069. package/examples/extensions/session-name.ts +27 -0
  1070. package/examples/extensions/shutdown-command.ts +63 -0
  1071. package/examples/extensions/snake.ts +381 -0
  1072. package/examples/extensions/space-invaders.ts +597 -0
  1073. package/examples/extensions/status-line.ts +32 -0
  1074. package/examples/extensions/structured-output.ts +65 -0
  1075. package/examples/extensions/subagent/README.md +175 -0
  1076. package/examples/extensions/subagent/agents/planner.md +37 -0
  1077. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1078. package/examples/extensions/subagent/agents/scout.md +50 -0
  1079. package/examples/extensions/subagent/agents/worker.md +24 -0
  1080. package/examples/extensions/subagent/agents.ts +126 -0
  1081. package/examples/extensions/subagent/index.ts +1083 -0
  1082. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1083. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1084. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1085. package/examples/extensions/summarize.ts +186 -0
  1086. package/examples/extensions/system-prompt-header.ts +17 -0
  1087. package/examples/extensions/tic-tac-toe.ts +1091 -0
  1088. package/examples/extensions/timed-confirm.ts +70 -0
  1089. package/examples/extensions/titlebar-spinner.ts +58 -0
  1090. package/examples/extensions/todo.ts +306 -0
  1091. package/examples/extensions/tool-override.ts +144 -0
  1092. package/examples/extensions/tools.ts +141 -0
  1093. package/examples/extensions/trigger-compact.ts +50 -0
  1094. package/examples/extensions/truncated-tool.ts +200 -0
  1095. package/examples/extensions/widget-placement.ts +9 -0
  1096. package/examples/extensions/with-deps/index.ts +32 -0
  1097. package/examples/extensions/with-deps/package-lock.json +31 -0
  1098. package/examples/extensions/with-deps/package.json +22 -0
  1099. package/examples/extensions/working-indicator.ts +123 -0
  1100. package/examples/extensions/working-message-test.ts +25 -0
  1101. package/examples/remote-session-server/README.md +71 -0
  1102. package/examples/remote-session-server/server.ts +353 -0
  1103. package/examples/rpc-extension-ui.ts +642 -0
  1104. package/examples/sdk/01-minimal.ts +27 -0
  1105. package/examples/sdk/02-custom-model.ts +54 -0
  1106. package/examples/sdk/03-custom-prompt.ts +76 -0
  1107. package/examples/sdk/04-skills.ts +60 -0
  1108. package/examples/sdk/05-tools.ts +55 -0
  1109. package/examples/sdk/06-extensions.ts +94 -0
  1110. package/examples/sdk/07-context-files.ts +47 -0
  1111. package/examples/sdk/08-prompt-templates.ts +56 -0
  1112. package/examples/sdk/09-api-keys-and-oauth.ts +50 -0
  1113. package/examples/sdk/10-settings.ts +58 -0
  1114. package/examples/sdk/11-sessions.ts +54 -0
  1115. package/examples/sdk/12-full-control.ts +79 -0
  1116. package/examples/sdk/13-session-runtime.ts +49 -0
  1117. package/examples/sdk/README.md +94 -0
  1118. package/npm-shrinkwrap.json +1878 -0
  1119. package/package.json +101 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-tool-host.js","sourceRoot":"","sources":["../../../src/core/tools/workspace-tool-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute } from \"node:path\";\nimport type { AgentTool, AgentToolResult, AgentToolUpdateCallback } from \"@greppleai/grip-agent-core\";\nimport { validateToolArguments } from \"@greppleai/grip-ai\";\nimport type { Static, TSchema } from \"typebox\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\nimport {\n\ttype BashToolDefinition,\n\ttype BashToolOptions,\n\tcreateBashToolDefinition,\n\tgetBashSessionEnvironment,\n} from \"./bash.ts\";\nimport { createEditToolDefinition, type EditToolDefinition, type EditToolOptions } from \"./edit.ts\";\nimport { createFindToolDefinition, type FindToolDefinition, type FindToolOptions } from \"./find.ts\";\nimport { createGrepToolDefinition, type GrepToolDefinition, type GrepToolOptions } from \"./grep.ts\";\nimport { createLsToolDefinition, type LsToolDefinition, type LsToolOptions } from \"./ls.ts\";\nimport { LocalToolOperations, type ToolOperations, type WorkspaceToolExecutionOptions } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tcreateReadToolDefinition,\n\ttype ReadToolDefinition,\n\ttype ReadToolOperations,\n\ttype ReadToolOptions,\n} from \"./read.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\nimport { createWriteToolDefinition, type WriteToolDefinition, type WriteToolOptions } from \"./write.ts\";\n\nexport const WORKSPACE_TOOL_NAMES = Object.freeze([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"] as const);\nconst WORKSPACE_TOOL_NAME_SET = new Set<string>(WORKSPACE_TOOL_NAMES);\nexport type WorkspaceToolName = (typeof WORKSPACE_TOOL_NAMES)[number];\nexport type WorkspaceToolDefinition =\n\t| ReadToolDefinition\n\t| BashToolDefinition\n\t| EditToolDefinition\n\t| WriteToolDefinition\n\t| GrepToolDefinition\n\t| FindToolDefinition\n\t| LsToolDefinition;\n\n// Heterogeneous tool registries erase per-tool schema/detail types at the lookup boundary.\ntype AnyAgentTool = AgentTool<any, any>;\ntype AnyToolDefinition = ToolDefinition<any, any, any>;\n\nexport interface WorkspaceToolOptions {\n\tread?: ReadToolOptions;\n\tbash?: BashToolOptions;\n\twrite?: WriteToolOptions;\n\tedit?: EditToolOptions;\n\tgrep?: GrepToolOptions;\n\tfind?: FindToolOptions;\n\tls?: LsToolOptions;\n}\n\nexport interface WorkspaceToolHostOptions {\n\tcwd: string;\n\toperations?: ToolOperations;\n\ttools?: WorkspaceToolOptions;\n\t/** Closed tool allowlist. Defaults to all canonical workspace tools. */\n\ttoolNames?: readonly WorkspaceToolName[];\n\tshellPath?: string;\n\t/** Dispose a caller-provided operations backend with the host. Defaults to false. */\n\townsOperations?: boolean;\n\t/** Maximum time to await cancellation before continuing disposal. Defaults to 5 seconds. */\n\tdisposeTimeoutMs?: number;\n\t/** Called after a negotiated remote catalog refresh has completed. */\n\tonCatalogChanged?: () => void | Promise<void>;\n\t/** Additional canonical service definitions, such as daemon-owned LSP tools. */\n\tadditionalDefinitions?: readonly AnyToolDefinition[];\n}\n\nexport interface WorkspaceToolCatalogEntry {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\tparameters: TSchema;\n\texecutionMode: AnyToolDefinition[\"executionMode\"];\n}\n\nexport interface WorkspaceToolInvocation {\n\ttoolCallId: string;\n\targuments: unknown;\n\tsignal?: AbortSignal;\n\tonUpdate?: AgentToolUpdateCallback<unknown>;\n\texecutionOptions?: WorkspaceToolExecutionOptions;\n}\n\ninterface WorkspaceExecutionSelection {\n\texecuteRemotely: boolean;\n\treadOperations: ReadToolOperations | undefined;\n}\n\ninterface HostedToolExecution<TParams extends TSchema, TDetails> {\n\tname: string;\n\ttoolCallId: string;\n\tparams: Static<TParams>;\n\tsignal: AbortSignal;\n\tonUpdate: AgentToolUpdateCallback<TDetails> | undefined;\n\tcontext: ExtensionContext;\n\texecutionOptions: WorkspaceToolExecutionOptions | undefined;\n}\n\nfunction cloneObjectGraph<T>(value: T, seen = new Map<object, object>()): T {\n\tif (typeof value !== \"object\" || value === null) return value;\n\tconst existing = seen.get(value);\n\tif (existing) return existing as T;\n\tconst clone: object = Array.isArray(value) ? [] : Object.create(Object.getPrototypeOf(value));\n\tseen.set(value, clone);\n\tfor (const key of Reflect.ownKeys(value)) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\tif (!descriptor) continue;\n\t\tif (\"value\" in descriptor) descriptor.value = cloneObjectGraph(descriptor.value, seen);\n\t\tObject.defineProperty(clone, key, descriptor);\n\t}\n\treturn clone as T;\n}\n\nfunction freezeObjectGraph(value: unknown, seen = new Set<object>()): void {\n\tif ((typeof value !== \"object\" && typeof value !== \"function\") || value === null || seen.has(value)) return;\n\tseen.add(value);\n\tfor (const key of Reflect.ownKeys(value)) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\tif (descriptor && \"value\" in descriptor) freezeObjectGraph(descriptor.value, seen);\n\t}\n\tObject.freeze(value);\n}\n\nfunction validateDisposeTimeout(value: number | undefined): number {\n\tconst resolved = value ?? 5000;\n\tif (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > 60_000) {\n\t\tthrow new Error(\"disposeTimeoutMs must be an integer from 1 through 60000\");\n\t}\n\treturn resolved;\n}\n\nfunction createRemoteExecutionOptions(toolOptions: WorkspaceToolOptions | undefined): WorkspaceToolExecutionOptions {\n\treturn Object.freeze({\n\t\t...(toolOptions?.read?.autoResizeImages === undefined\n\t\t\t? {}\n\t\t\t: { imageAutoResize: toolOptions.read.autoResizeImages }),\n\t\t...(toolOptions?.bash?.commandPrefix === undefined ? {} : { shellCommandPrefix: toolOptions.bash.commandPrefix }),\n\t});\n}\n\n/**\n * Canonical workspace-scoped tool construction and execution without an AgentSession.\n *\n * This host deliberately excludes subagents, session lifecycle tools, extensions, LSP,\n * models, prompts, conversation state, persistence, and UI. Caller-provided operations\n * are borrowed unless ownsOperations is explicitly enabled.\n */\nexport class WorkspaceToolHost {\n\treadonly operations: ToolOperations;\n\n\tprivate readonly definitions = new Map<string, AnyToolDefinition>();\n\tprivate readonly rawDefinitions = new Map<string, AnyToolDefinition>();\n\tprivate readonly remoteToolNames = new Set<string>();\n\tprivate readonly tools = new Map<string, AnyAgentTool>();\n\tprivate readonly ownsOperations: boolean;\n\tprivate readonly toolOptions: WorkspaceToolOptions | undefined;\n\tprivate readonly remoteExecutionOptions: WorkspaceToolExecutionOptions;\n\tprivate unsubscribeCatalog: (() => void) | undefined;\n\tprivate readonly disposeTimeoutMs: number;\n\tprivate readonly disposeController = new AbortController();\n\tprivate readonly activeInvocations = new Set<Promise<unknown>>();\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate disposed = false;\n\n\tconstructor(options: WorkspaceToolHostOptions) {\n\t\tif (options.operations && options.cwd !== options.operations.cwd) {\n\t\t\tthrow new Error(`Workspace host cwd ${options.cwd} does not match operations cwd ${options.operations.cwd}`);\n\t\t}\n\t\tthis.operations = options.operations ?? new LocalToolOperations(options.cwd, { shellPath: options.shellPath });\n\t\tthis.ownsOperations = options.operations ? options.ownsOperations === true : true;\n\t\tthis.toolOptions = options.tools;\n\t\tthis.remoteExecutionOptions = createRemoteExecutionOptions(options.tools);\n\t\tthis.disposeTimeoutMs = validateDisposeTimeout(options.disposeTimeoutMs);\n\t\tconst enabledNames = new Set(options.toolNames ?? WORKSPACE_TOOL_NAMES);\n\t\tfor (const name of enabledNames) {\n\t\t\tif (!WORKSPACE_TOOL_NAME_SET.has(name)) throw new Error(`Unknown workspace tool: ${name}`);\n\t\t}\n\t\tthis.registerConfiguredTools(enabledNames);\n\t\tthis.registerAdditionalDefinitions(options.additionalDefinitions ?? []);\n\t\tthis.unsubscribeCatalog = options.onCatalogChanged\n\t\t\t? this.operations.onWorkspaceToolCatalogChanged?.(options.onCatalogChanged)\n\t\t\t: undefined;\n\t}\n\n\tgetDefinitions(): ReadonlyMap<string, AnyToolDefinition> {\n\t\treturn new Map(this.definitions);\n\t}\n\n\tgetDefinition(name: string): AnyToolDefinition | undefined {\n\t\treturn this.definitions.get(name);\n\t}\n\n\tgetCatalog(): WorkspaceToolCatalogEntry[] {\n\t\treturn [...this.definitions.entries()].map(([name, definition]) => ({\n\t\t\tname,\n\t\t\tlabel: definition.label,\n\t\t\tdescription: definition.description,\n\t\t\tparameters: structuredClone(definition.parameters),\n\t\t\texecutionMode: definition.executionMode,\n\t\t}));\n\t}\n\n\tprepareArguments(name: string, rawArguments: unknown): unknown {\n\t\tif (this.disposed) throw new Error(\"Workspace tool host is disposed\");\n\t\tconst tool = this.requireTool(name);\n\t\treturn tool.prepareArguments ? tool.prepareArguments(rawArguments) : rawArguments;\n\t}\n\n\tasync execute(name: string, invocation: WorkspaceToolInvocation): Promise<AgentToolResult<unknown>> {\n\t\tconst preparedArguments = this.prepareArguments(name, invocation.arguments);\n\t\treturn await this.executePrepared(name, { ...invocation, arguments: preparedArguments });\n\t}\n\n\tvalidatePreparedArguments(name: string, argumentsValue: unknown): boolean {\n\t\tconst tool = this.tools.get(name);\n\t\tif (!tool || this.disposed) return false;\n\t\ttry {\n\t\t\tvalidateToolArguments(tool, {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: \"validate\",\n\t\t\t\tname: tool.name,\n\t\t\t\targuments: argumentsValue as Record<string, unknown>,\n\t\t\t});\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync executePrepared(name: string, invocation: WorkspaceToolInvocation): Promise<AgentToolResult<unknown>> {\n\t\tif (this.disposed) throw new Error(\"Workspace tool host is disposed\");\n\t\tconst tool = this.requireTool(name);\n\t\tconst params = validateToolArguments(tool, {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: invocation.toolCallId,\n\t\t\tname: tool.name,\n\t\t\targuments: invocation.arguments as Record<string, unknown>,\n\t\t});\n\t\treturn await this.runDefinition(\n\t\t\tname,\n\t\t\tinvocation.toolCallId,\n\t\t\tparams,\n\t\t\tinvocation.signal,\n\t\t\tinvocation.onUpdate,\n\t\t\tundefined as unknown as ExtensionContext,\n\t\t\tinvocation.executionOptions,\n\t\t);\n\t}\n\n\tdetachCatalogListener(): void {\n\t\tthis.unsubscribeCatalog?.();\n\t\tthis.unsubscribeCatalog = undefined;\n\t}\n\n\twaitForIdle(timeoutMs = this.disposeTimeoutMs): Promise<boolean> {\n\t\tif (this.activeInvocations.size === 0) return Promise.resolve(true);\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: boolean) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst timer = setTimeout(() => finish(false), timeoutMs);\n\t\t\ttimer.unref?.();\n\t\t\tvoid Promise.allSettled([...this.activeInvocations]).then(() => finish(true));\n\t\t});\n\t}\n\n\tdispose(): Promise<void> {\n\t\tthis.disposed = true;\n\t\tthis.disposePromise ??= this.disposeHost();\n\t\treturn this.disposePromise;\n\t}\n\n\tprivate registerConfiguredTools(enabledNames: ReadonlySet<WorkspaceToolName>): void {\n\t\tconst toolOptions = this.toolOptions;\n\t\tif (enabledNames.has(\"read\")) this.register(\"read\", createReadToolDefinition(this.operations, toolOptions?.read));\n\t\tif (enabledNames.has(\"bash\")) this.register(\"bash\", createBashToolDefinition(this.operations, toolOptions?.bash));\n\t\tif (enabledNames.has(\"edit\")) this.register(\"edit\", createEditToolDefinition(this.operations, toolOptions?.edit));\n\t\tif (enabledNames.has(\"write\"))\n\t\t\tthis.register(\"write\", createWriteToolDefinition(this.operations, toolOptions?.write));\n\t\tif (enabledNames.has(\"grep\")) this.register(\"grep\", createGrepToolDefinition(this.operations, toolOptions?.grep));\n\t\tif (enabledNames.has(\"find\")) this.register(\"find\", createFindToolDefinition(this.operations, toolOptions?.find));\n\t\tif (enabledNames.has(\"ls\")) this.register(\"ls\", createLsToolDefinition(this.operations, toolOptions?.ls));\n\t}\n\tprivate selectWorkspaceExecution(name: string, params: unknown): WorkspaceExecutionSelection {\n\t\tconst executeRemotely = this.remoteToolNames.has(name);\n\t\tconst operationsForPath = this.toolOptions?.read?.operationsForPath;\n\t\tif (!executeRemotely || name !== \"read\" || !operationsForPath) {\n\t\t\treturn { executeRemotely, readOperations: undefined };\n\t\t}\n\t\tconst readPath = (params as { path?: unknown }).path;\n\t\tif (typeof readPath !== \"string\" || !isAbsolute(readPath)) {\n\t\t\treturn { executeRemotely, readOperations: undefined };\n\t\t}\n\t\tconst absolutePath = resolveToCwd(readPath, this.operations.cwd);\n\t\tconst readOperations = operationsForPath(absolutePath);\n\t\treturn { executeRemotely: !readOperations, readOperations };\n\t}\n\n\tprivate resolveLocalDefinition<TParams extends TSchema, TDetails>(\n\t\trequest: HostedToolExecution<TParams, TDetails>,\n\t\tdefinition: ToolDefinition<TParams, TDetails>,\n\t\treadOperations: ReadToolOperations | undefined,\n\t): ToolDefinition<TParams, TDetails> {\n\t\tif (request.name === \"read\" && (readOperations || request.executionOptions?.imageAutoResize !== undefined)) {\n\t\t\treturn createReadToolDefinition(this.operations, {\n\t\t\t\t...this.toolOptions?.read,\n\t\t\t\t...(request.executionOptions?.imageAutoResize === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { autoResizeImages: request.executionOptions.imageAutoResize }),\n\t\t\t\t...(readOperations ? { operationsForPath: () => readOperations } : {}),\n\t\t\t}) as unknown as ToolDefinition<TParams, TDetails>;\n\t\t}\n\t\tif (\n\t\t\trequest.name === \"bash\" &&\n\t\t\t(request.executionOptions?.shellCommandPrefix !== undefined ||\n\t\t\t\trequest.executionOptions?.sessionEnvironment !== undefined)\n\t\t) {\n\t\t\tconst sessionEnvironment = request.executionOptions.sessionEnvironment;\n\t\t\tconst configuredSpawnHook = this.toolOptions?.bash?.spawnHook;\n\t\t\treturn createBashToolDefinition(this.operations, {\n\t\t\t\t...this.toolOptions?.bash,\n\t\t\t\tcommandPrefix: request.executionOptions.shellCommandPrefix,\n\t\t\t\texposeSessionEnvironment: false,\n\t\t\t\tspawnHook: sessionEnvironment\n\t\t\t\t\t? (spawnContext) => {\n\t\t\t\t\t\t\tconst resolved = configuredSpawnHook?.(spawnContext) ?? spawnContext;\n\t\t\t\t\t\t\treturn { ...resolved, env: { ...resolved.env, ...sessionEnvironment } };\n\t\t\t\t\t\t}\n\t\t\t\t\t: configuredSpawnHook,\n\t\t\t}) as unknown as ToolDefinition<TParams, TDetails>;\n\t\t}\n\t\treturn definition;\n\t}\n\n\tprivate startRemoteExecution<TParams extends TSchema, TDetails>(\n\t\trequest: HostedToolExecution<TParams, TDetails>,\n\t): Promise<AgentToolResult<TDetails>> {\n\t\tif (!this.operations.executeWorkspaceTool) {\n\t\t\tthrow new Error(`Remote workspace executor is unavailable: ${request.name}`);\n\t\t}\n\t\treturn Promise.resolve().then(\n\t\t\tasync () =>\n\t\t\t\t(await this.operations.executeWorkspaceTool!(request.name, {\n\t\t\t\t\ttoolCallId: request.toolCallId,\n\t\t\t\t\targuments: request.params,\n\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\tonUpdate: request.onUpdate as AgentToolUpdateCallback<unknown> | undefined,\n\t\t\t\t\texecutionOptions: request.executionOptions ?? this.remoteExecutionOptions,\n\t\t\t\t})) as AgentToolResult<TDetails>,\n\t\t);\n\t}\n\n\tprivate startLocalExecution<TParams extends TSchema, TDetails>(\n\t\trequest: HostedToolExecution<TParams, TDetails>,\n\t\tdefinition: ToolDefinition<TParams, TDetails>,\n\t): Promise<AgentToolResult<TDetails>> {\n\t\treturn Promise.resolve().then(() =>\n\t\t\tdefinition.execute(request.toolCallId, request.params, request.signal, request.onUpdate, request.context),\n\t\t);\n\t}\n\n\tprivate trackExecution<TDetails>(execution: Promise<AgentToolResult<TDetails>>): Promise<AgentToolResult<TDetails>> {\n\t\tthis.activeInvocations.add(execution);\n\t\tvoid execution.then(\n\t\t\t() => this.activeInvocations.delete(execution),\n\t\t\t() => this.activeInvocations.delete(execution),\n\t\t);\n\t\treturn execution;\n\t}\n\n\tprivate registerAdditionalDefinitions(definitions: readonly AnyToolDefinition[]): void {\n\t\tfor (const definition of definitions) {\n\t\t\tif (this.definitions.has(definition.name)) throw new Error(`Duplicate hosted tool: ${definition.name}`);\n\t\t\tthis.register(definition.name, definition);\n\t\t}\n\t}\n\n\tprivate register<TParams extends TSchema, TDetails, TState>(\n\t\tname: string,\n\t\tdefinition: ToolDefinition<TParams, TDetails, TState>,\n\t): void {\n\t\tconst canonicalDefinition: ToolDefinition<TParams, TDetails, TState> = {\n\t\t\t...definition,\n\t\t\tparameters: cloneObjectGraph(definition.parameters),\n\t\t};\n\t\tfreezeObjectGraph(canonicalDefinition);\n\t\tconst execute: ToolDefinition<TParams, TDetails, TState>[\"execute\"] = (\n\t\t\ttoolCallId,\n\t\t\tparams,\n\t\t\tsignal,\n\t\t\tonUpdate,\n\t\t\tcontext,\n\t\t) => this.runDefinition<TParams, TDetails>(name, toolCallId, params, signal, onUpdate, context, undefined);\n\t\tconst execution = this.operations.resolveWorkspaceToolExecution?.(name, canonicalDefinition.parameters);\n\t\tif (execution === \"unavailable\") return;\n\t\tif (execution === \"remote\") this.remoteToolNames.add(name);\n\t\tconst hostedDefinition: ToolDefinition<TParams, TDetails, TState> = Object.freeze({\n\t\t\t...canonicalDefinition,\n\t\t\texecute,\n\t\t});\n\t\tthis.rawDefinitions.set(name, canonicalDefinition);\n\t\tthis.definitions.set(name, hostedDefinition as unknown as WorkspaceToolDefinition);\n\t\tthis.tools.set(name, wrapToolDefinition(canonicalDefinition));\n\t}\n\n\tprivate async runDefinition<TParams extends TSchema, TDetails>(\n\t\tname: string,\n\t\ttoolCallId: string,\n\t\tparams: Static<TParams>,\n\t\tsignal: AbortSignal | undefined,\n\t\tonUpdate: AgentToolUpdateCallback<TDetails> | undefined,\n\t\tcontext: ExtensionContext,\n\t\texecutionOptions: WorkspaceToolExecutionOptions | undefined,\n\t): Promise<AgentToolResult<TDetails>> {\n\t\tif (this.disposed) throw new Error(\"Workspace tool host is disposed\");\n\t\tconst definition = this.requireRawDefinition(name) as ToolDefinition<TParams, TDetails>;\n\t\tconst combinedSignal = signal\n\t\t\t? AbortSignal.any([signal, this.disposeController.signal])\n\t\t\t: this.disposeController.signal;\n\t\tif (combinedSignal.aborted) throw new Error(\"Operation aborted\");\n\t\tconst selection = this.selectWorkspaceExecution(name, params);\n\t\tconst resolvedExecutionOptions = executionOptions ?? this.remoteExecutionOptions;\n\t\tconst request: HostedToolExecution<TParams, TDetails> = {\n\t\t\tname,\n\t\t\ttoolCallId,\n\t\t\tparams,\n\t\t\tsignal: combinedSignal,\n\t\t\tonUpdate,\n\t\t\tcontext,\n\t\t\texecutionOptions:\n\t\t\t\tname === \"bash\" && context && this.toolOptions?.bash?.exposeSessionEnvironment !== false\n\t\t\t\t\t? { ...resolvedExecutionOptions, sessionEnvironment: getBashSessionEnvironment(context) }\n\t\t\t\t\t: executionOptions,\n\t\t};\n\t\tconst execution = selection.executeRemotely\n\t\t\t? this.startRemoteExecution(request)\n\t\t\t: this.startLocalExecution(\n\t\t\t\t\trequest,\n\t\t\t\t\tthis.resolveLocalDefinition(request, definition, selection.readOperations),\n\t\t\t\t);\n\t\treturn await this.trackExecution(execution);\n\t}\n\n\tprivate async disposeHost(): Promise<void> {\n\t\tthis.detachCatalogListener();\n\t\tthis.disposeController.abort();\n\t\tlet timer: NodeJS.Timeout | undefined;\n\t\ttry {\n\t\t\tawait Promise.race([\n\t\t\t\tPromise.allSettled([...this.activeInvocations]),\n\t\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\t\ttimer = setTimeout(resolve, this.disposeTimeoutMs);\n\t\t\t\t\ttimer.unref?.();\n\t\t\t\t}),\n\t\t\t]);\n\t\t} finally {\n\t\t\tif (timer) clearTimeout(timer);\n\t\t}\n\t\tif (this.ownsOperations) await this.operations.dispose?.();\n\t}\n\n\tprivate requireRawDefinition(name: string): AnyToolDefinition {\n\t\tconst definition = this.rawDefinitions.get(name);\n\t\tif (!definition) throw new Error(`Unknown or non-workspace tool: ${name}`);\n\t\treturn definition;\n\t}\n\n\tprivate requireTool(name: string): AnyAgentTool {\n\t\tconst tool = this.tools.get(name);\n\t\tif (!tool) throw new Error(`Unknown or non-workspace tool: ${name}`);\n\t\treturn tool;\n\t}\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import type { AgentTool } from "@greppleai/grip-agent-core";
2
+ import { type Static, Type } from "typebox";
3
+ import type { ToolDefinition } from "../extensions/types.ts";
4
+ import type { ToolOperations } from "./operations.ts";
5
+ declare const writeSchema: Type.TObject<{
6
+ path: Type.TString;
7
+ content: Type.TString;
8
+ }>;
9
+ export type WriteToolInput = Static<typeof writeSchema>;
10
+ export interface WriteToolOptions {
11
+ }
12
+ export type WriteToolDefinition = ToolDefinition<typeof writeSchema, undefined>;
13
+ export declare function createWriteToolDefinition(operations: ToolOperations, _options?: WriteToolOptions): WriteToolDefinition;
14
+ export declare function createWriteTool(operations: ToolOperations, options?: WriteToolOptions): AgentTool<typeof writeSchema>;
15
+ export {};
16
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/core/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,4BAA4B,CAAC;AAG7E,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,wBAAwB,CAAC;AAEtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAYtD,QAAA,MAAM,WAAW;;;EAGf,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAExD,MAAM,WAAW,gBAAgB;CAAG;AA2JpC,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAAC;AAEhF,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,cAAc,EAC1B,QAAQ,CAAC,EAAE,gBAAgB,GACzB,mBAAmB,CAiFrB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC,OAAO,WAAW,CAAC,CAErH","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Container, Text } from \"@greppleai/grip-tui\";\nimport { dirname } from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport { keyHint } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tinvalidArgText,\n\tnormalizeDisplayText,\n\treplaceTabs,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst writeSchema = Type.Object({\n\tpath: Type.String({ description: \"Path to the file to write (relative or absolute)\" }),\n\tcontent: Type.String({ description: \"Content to write to the file\" }),\n});\n\nexport type WriteToolInput = Static<typeof writeSchema>;\n\nexport interface WriteToolOptions {}\n\ninterface WriteRenderArgs {\n\tpath?: string;\n\tfile_path?: string;\n\tcontent?: string;\n}\n\ninterface WriteRenderResult extends AgentToolResult<undefined> {\n\tisError?: boolean;\n}\n\ntype WriteHighlightCache = {\n\trawPath: string | null;\n\tlang: string;\n\trawContent: string;\n\tnormalizedLines: string[];\n\thighlightedLines: string[];\n};\n\nclass WriteCallRenderComponent extends Text {\n\tcache?: WriteHighlightCache;\n\n\tconstructor() {\n\t\tsuper(\"\", 0, 0);\n\t}\n}\n\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\nfunction highlightSingleLine(line: string, lang: string): string {\n\tconst highlighted = highlightCode(line, lang);\n\treturn highlighted[0] ?? \"\";\n}\n\nfunction refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n\tconst prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n\tif (prefixCount === 0) return;\n\tconst prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n\tconst prefixHighlighted = highlightCode(prefixSource, cache.lang);\n\tfor (let i = 0; i < prefixCount; i++) {\n\t\tcache.highlightedLines[i] =\n\t\t\tprefixHighlighted[i] ?? highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n\t}\n}\n\nfunction rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tconst displayContent = normalizeDisplayText(fileContent);\n\tconst normalized = replaceTabs(displayContent);\n\treturn {\n\t\trawPath,\n\t\tlang,\n\t\trawContent: fileContent,\n\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\thighlightedLines: highlightCode(normalized, lang),\n\t};\n}\n\nfunction updateWriteHighlightCacheIncremental(\n\tcache: WriteHighlightCache | undefined,\n\trawPath: string | null,\n\tfileContent: string,\n): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tif (!cache) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (cache.lang !== lang || cache.rawPath !== rawPath) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (!fileContent.startsWith(cache.rawContent)) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (fileContent.length === cache.rawContent.length) return cache;\n\n\tconst deltaRaw = fileContent.slice(cache.rawContent.length);\n\tconst deltaDisplay = normalizeDisplayText(deltaRaw);\n\tconst deltaNormalized = replaceTabs(deltaDisplay);\n\tcache.rawContent = fileContent;\n\tif (cache.normalizedLines.length === 0) {\n\t\tcache.normalizedLines.push(\"\");\n\t\tcache.highlightedLines.push(\"\");\n\t}\n\n\tconst segments = deltaNormalized.split(\"\\n\");\n\tconst lastIndex = cache.normalizedLines.length - 1;\n\tcache.normalizedLines[lastIndex] += segments[0];\n\tcache.highlightedLines[lastIndex] = highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\tfor (let i = 1; i < segments.length; i++) {\n\t\tcache.normalizedLines.push(segments[i]);\n\t\tcache.highlightedLines.push(highlightSingleLine(segments[i], cache.lang));\n\t}\n\trefreshWriteHighlightPrefix(cache);\n\treturn cache;\n}\n\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\n\nfunction formatWriteContentPreview(\n\tfileContent: string | null,\n\trawPath: string | null,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tif (fileContent === null) return `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n\tif (!fileContent) return \"\";\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang\n\t\t? (cache?.highlightedLines ?? highlightCode(replaceTabs(normalizeDisplayText(fileContent)), lang))\n\t\t: normalizeDisplayText(fileContent).split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n\\n${displayLines.map((line) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `${theme.fg(\"muted\", `\\n... (${remaining} more lines, ${lines.length} total,`)} ${keyHint(\"app.tools.expand\", \"to expand\")})`;\n\t}\n\treturn text;\n}\n\nfunction formatWriteCall(\n\targs: WriteRenderArgs | undefined,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst fileContent = str(args?.content);\n\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\")}`;\n\ttext += formatWriteContentPreview(fileContent, rawPath, options, theme, cache);\n\n\treturn text;\n}\n\nfunction formatWriteResult(result: WriteRenderResult, theme: Theme): string | undefined {\n\tif (!result.isError) {\n\t\treturn undefined;\n\t}\n\tconst output = result.content\n\t\t.filter((c) => c.type === \"text\")\n\t\t.map((c) => c.text || \"\")\n\t\t.join(\"\\n\");\n\tif (!output) {\n\t\treturn undefined;\n\t}\n\treturn `\\n${theme.fg(\"error\", output)}`;\n}\n\nexport type WriteToolDefinition = ToolDefinition<typeof writeSchema, undefined>;\n\nexport function createWriteToolDefinition(\n\toperations: ToolOperations,\n\t_options?: WriteToolOptions,\n): WriteToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"write\",\n\t\tlabel: \"write\",\n\t\tdescription:\n\t\t\t\"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Automatically creates parent directories.\",\n\t\tpromptSnippet: \"Create or overwrite files\",\n\t\tpromptGuidelines: [\"Use write only for new files or complete rewrites.\"],\n\t\tparameters: writeSchema,\n\t\tasync execute(_toolCallId, { path, content }: WriteToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\t\t\tconst dir = dirname(absolutePath);\n\t\t\treturn withFileMutationQueue(absolutePath, async () => {\n\t\t\t\tlet aborted = signal?.aborted ?? false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t};\n\t\t\t\tconst throwIfAborted = (): void => {\n\t\t\t\t\tif (aborted || signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttry {\n\t\t\t\t\tthrowIfAborted();\n\t\t\t\t\t// Create parent directories if needed.\n\t\t\t\t\tawait ops.mkdir(dir, { recursive: true });\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\t// Write the file contents.\n\t\t\t\t\tawait ops.writeFile(absolutePath, content);\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Successfully wrote ${content.length} bytes to ${path}` }],\n\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst renderArgs = args as WriteRenderArgs | undefined;\n\t\t\tconst rawPath = str(renderArgs?.file_path ?? renderArgs?.path);\n\t\t\tconst fileContent = str(renderArgs?.content);\n\t\t\tconst component =\n\t\t\t\t(context.lastComponent as WriteCallRenderComponent | undefined) ?? new WriteCallRenderComponent();\n\t\t\tif (fileContent !== null) {\n\t\t\t\tcomponent.cache = context.argsComplete\n\t\t\t\t\t? rebuildWriteHighlightCacheFull(rawPath, fileContent)\n\t\t\t\t\t: updateWriteHighlightCacheIncremental(component.cache, rawPath, fileContent);\n\t\t\t} else {\n\t\t\t\tcomponent.cache = undefined;\n\t\t\t}\n\t\t\tcomponent.setText(\n\t\t\t\tformatBackendIcon(ops.getBackendInfo?.(), theme) +\n\t\t\t\t\tformatWriteCall(\n\t\t\t\t\t\trenderArgs,\n\t\t\t\t\t\t{ expanded: context.expanded, isPartial: context.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tcomponent.cache,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn component;\n\t\t},\n\t\trenderResult(result, _options, theme, context) {\n\t\t\tconst output = formatWriteResult({ ...result, isError: context.isError }, theme);\n\t\t\tif (!output) {\n\t\t\t\tconst component = (context.lastComponent as Container | undefined) ?? new Container();\n\t\t\t\tcomponent.clear();\n\t\t\t\treturn component;\n\t\t\t}\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(output);\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createWriteTool(operations: ToolOperations, options?: WriteToolOptions): AgentTool<typeof writeSchema> {\n\treturn wrapToolDefinition(createWriteToolDefinition(operations, options));\n}\n"]}
@@ -0,0 +1,204 @@
1
+ import { Container, Text } from "@greppleai/grip-tui";
2
+ import { dirname } from "path";
3
+ import { Type } from "typebox";
4
+ import { keyHint } from "../../modes/interactive/components/keybinding-hints.js";
5
+ import { getLanguageFromPath, highlightCode } from "../../modes/interactive/theme/theme.js";
6
+ import { withFileMutationQueue } from "./file-mutation-queue.js";
7
+ import { resolveToCwd } from "./path-utils.js";
8
+ import { formatBackendIcon, invalidArgText, normalizeDisplayText, replaceTabs, shortenPath, str, } from "./render-utils.js";
9
+ import { wrapToolDefinition } from "./tool-definition-wrapper.js";
10
+ const writeSchema = Type.Object({
11
+ path: Type.String({ description: "Path to the file to write (relative or absolute)" }),
12
+ content: Type.String({ description: "Content to write to the file" }),
13
+ });
14
+ class WriteCallRenderComponent extends Text {
15
+ cache;
16
+ constructor() {
17
+ super("", 0, 0);
18
+ }
19
+ }
20
+ const WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;
21
+ function highlightSingleLine(line, lang) {
22
+ const highlighted = highlightCode(line, lang);
23
+ return highlighted[0] ?? "";
24
+ }
25
+ function refreshWriteHighlightPrefix(cache) {
26
+ const prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);
27
+ if (prefixCount === 0)
28
+ return;
29
+ const prefixSource = cache.normalizedLines.slice(0, prefixCount).join("\n");
30
+ const prefixHighlighted = highlightCode(prefixSource, cache.lang);
31
+ for (let i = 0; i < prefixCount; i++) {
32
+ cache.highlightedLines[i] =
33
+ prefixHighlighted[i] ?? highlightSingleLine(cache.normalizedLines[i] ?? "", cache.lang);
34
+ }
35
+ }
36
+ function rebuildWriteHighlightCacheFull(rawPath, fileContent) {
37
+ const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
38
+ if (!lang)
39
+ return undefined;
40
+ const displayContent = normalizeDisplayText(fileContent);
41
+ const normalized = replaceTabs(displayContent);
42
+ return {
43
+ rawPath,
44
+ lang,
45
+ rawContent: fileContent,
46
+ normalizedLines: normalized.split("\n"),
47
+ highlightedLines: highlightCode(normalized, lang),
48
+ };
49
+ }
50
+ function updateWriteHighlightCacheIncremental(cache, rawPath, fileContent) {
51
+ const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
52
+ if (!lang)
53
+ return undefined;
54
+ if (!cache)
55
+ return rebuildWriteHighlightCacheFull(rawPath, fileContent);
56
+ if (cache.lang !== lang || cache.rawPath !== rawPath)
57
+ return rebuildWriteHighlightCacheFull(rawPath, fileContent);
58
+ if (!fileContent.startsWith(cache.rawContent))
59
+ return rebuildWriteHighlightCacheFull(rawPath, fileContent);
60
+ if (fileContent.length === cache.rawContent.length)
61
+ return cache;
62
+ const deltaRaw = fileContent.slice(cache.rawContent.length);
63
+ const deltaDisplay = normalizeDisplayText(deltaRaw);
64
+ const deltaNormalized = replaceTabs(deltaDisplay);
65
+ cache.rawContent = fileContent;
66
+ if (cache.normalizedLines.length === 0) {
67
+ cache.normalizedLines.push("");
68
+ cache.highlightedLines.push("");
69
+ }
70
+ const segments = deltaNormalized.split("\n");
71
+ const lastIndex = cache.normalizedLines.length - 1;
72
+ cache.normalizedLines[lastIndex] += segments[0];
73
+ cache.highlightedLines[lastIndex] = highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);
74
+ for (let i = 1; i < segments.length; i++) {
75
+ cache.normalizedLines.push(segments[i]);
76
+ cache.highlightedLines.push(highlightSingleLine(segments[i], cache.lang));
77
+ }
78
+ refreshWriteHighlightPrefix(cache);
79
+ return cache;
80
+ }
81
+ function trimTrailingEmptyLines(lines) {
82
+ let end = lines.length;
83
+ while (end > 0 && lines[end - 1] === "") {
84
+ end--;
85
+ }
86
+ return lines.slice(0, end);
87
+ }
88
+ function formatWriteContentPreview(fileContent, rawPath, options, theme, cache) {
89
+ if (fileContent === null)
90
+ return `\n\n${theme.fg("error", "[invalid content arg - expected string]")}`;
91
+ if (!fileContent)
92
+ return "";
93
+ const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
94
+ const renderedLines = lang
95
+ ? (cache?.highlightedLines ?? highlightCode(replaceTabs(normalizeDisplayText(fileContent)), lang))
96
+ : normalizeDisplayText(fileContent).split("\n");
97
+ const lines = trimTrailingEmptyLines(renderedLines);
98
+ const maxLines = options.expanded ? lines.length : 10;
99
+ const displayLines = lines.slice(0, maxLines);
100
+ const remaining = lines.length - maxLines;
101
+ let text = `\n\n${displayLines.map((line) => (lang ? line : theme.fg("toolOutput", replaceTabs(line)))).join("\n")}`;
102
+ if (remaining > 0) {
103
+ text += `${theme.fg("muted", `\n... (${remaining} more lines, ${lines.length} total,`)} ${keyHint("app.tools.expand", "to expand")})`;
104
+ }
105
+ return text;
106
+ }
107
+ function formatWriteCall(args, options, theme, cache) {
108
+ const rawPath = str(args?.file_path ?? args?.path);
109
+ const fileContent = str(args?.content);
110
+ const path = rawPath !== null ? shortenPath(rawPath) : null;
111
+ const invalidArg = invalidArgText(theme);
112
+ let text = `${theme.fg("toolTitle", theme.bold("write"))} ${path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "...")}`;
113
+ text += formatWriteContentPreview(fileContent, rawPath, options, theme, cache);
114
+ return text;
115
+ }
116
+ function formatWriteResult(result, theme) {
117
+ if (!result.isError) {
118
+ return undefined;
119
+ }
120
+ const output = result.content
121
+ .filter((c) => c.type === "text")
122
+ .map((c) => c.text || "")
123
+ .join("\n");
124
+ if (!output) {
125
+ return undefined;
126
+ }
127
+ return `\n${theme.fg("error", output)}`;
128
+ }
129
+ export function createWriteToolDefinition(operations, _options) {
130
+ const ops = operations;
131
+ const cwd = operations.cwd;
132
+ return {
133
+ name: "write",
134
+ label: "write",
135
+ description: "Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Automatically creates parent directories.",
136
+ promptSnippet: "Create or overwrite files",
137
+ promptGuidelines: ["Use write only for new files or complete rewrites."],
138
+ parameters: writeSchema,
139
+ async execute(_toolCallId, { path, content }, signal, _onUpdate, _ctx) {
140
+ const absolutePath = resolveToCwd(path, cwd);
141
+ const dir = dirname(absolutePath);
142
+ return withFileMutationQueue(absolutePath, async () => {
143
+ let aborted = signal?.aborted ?? false;
144
+ const onAbort = () => {
145
+ aborted = true;
146
+ };
147
+ const throwIfAborted = () => {
148
+ if (aborted || signal?.aborted) {
149
+ throw new Error("Operation aborted");
150
+ }
151
+ };
152
+ signal?.addEventListener("abort", onAbort, { once: true });
153
+ try {
154
+ throwIfAborted();
155
+ // Create parent directories if needed.
156
+ await ops.mkdir(dir, { recursive: true });
157
+ throwIfAborted();
158
+ // Write the file contents.
159
+ await ops.writeFile(absolutePath, content);
160
+ throwIfAborted();
161
+ return {
162
+ content: [{ type: "text", text: `Successfully wrote ${content.length} bytes to ${path}` }],
163
+ details: undefined,
164
+ };
165
+ }
166
+ finally {
167
+ signal?.removeEventListener("abort", onAbort);
168
+ }
169
+ });
170
+ },
171
+ renderCall(args, theme, context) {
172
+ const renderArgs = args;
173
+ const rawPath = str(renderArgs?.file_path ?? renderArgs?.path);
174
+ const fileContent = str(renderArgs?.content);
175
+ const component = context.lastComponent ?? new WriteCallRenderComponent();
176
+ if (fileContent !== null) {
177
+ component.cache = context.argsComplete
178
+ ? rebuildWriteHighlightCacheFull(rawPath, fileContent)
179
+ : updateWriteHighlightCacheIncremental(component.cache, rawPath, fileContent);
180
+ }
181
+ else {
182
+ component.cache = undefined;
183
+ }
184
+ component.setText(formatBackendIcon(ops.getBackendInfo?.(), theme) +
185
+ formatWriteCall(renderArgs, { expanded: context.expanded, isPartial: context.isPartial }, theme, component.cache));
186
+ return component;
187
+ },
188
+ renderResult(result, _options, theme, context) {
189
+ const output = formatWriteResult({ ...result, isError: context.isError }, theme);
190
+ if (!output) {
191
+ const component = context.lastComponent ?? new Container();
192
+ component.clear();
193
+ return component;
194
+ }
195
+ const text = context.lastComponent ?? new Text("", 0, 0);
196
+ text.setText(output);
197
+ return text;
198
+ },
199
+ };
200
+ }
201
+ export function createWriteTool(operations, options) {
202
+ return wrapToolDefinition(createWriteToolDefinition(operations, options));
203
+ }
204
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/core/tools/write.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,wDAAwD,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAc,MAAM,wCAAwC,CAAC;AAExG,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACN,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,GAAG,GACH,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kDAAkD,EAAE,CAAC;IACtF,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC;CACrE,CAAC,CAAC;AAwBH,MAAM,wBAAyB,SAAQ,IAAI;IAC1C,KAAK,CAAuB;IAE5B,cAAc;QACb,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAAA,CAChB;CACD;AAED,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAE9C,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAAY,EAAU;IAChE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAAA,CAC5B;AAED,SAAS,2BAA2B,CAAC,KAA0B,EAAQ;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/F,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,iBAAiB,GAAG,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACxB,iBAAiB,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC;AAAA,CACD;AAED,SAAS,8BAA8B,CAAC,OAAsB,EAAE,WAAmB,EAAmC;IACrH,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO;QACN,OAAO;QACP,IAAI;QACJ,UAAU,EAAE,WAAW;QACvB,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QACvC,gBAAgB,EAAE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;KACjD,CAAC;AAAA,CACF;AAED,SAAS,oCAAoC,CAC5C,KAAsC,EACtC,OAAsB,EACtB,WAAmB,EACe;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,8BAA8B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,8BAA8B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAClH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,8BAA8B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3G,IAAI,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAEjE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAClD,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;IAC/B,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,sBAAsB,CAAC,KAAe,EAAY;IAC1D,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACzC,GAAG,EAAE,CAAC;IACP,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAAA,CAC3B;AAED,SAAS,yBAAyB,CACjC,WAA0B,EAC1B,OAAsB,EACtB,OAAgC,EAChC,KAAY,EACZ,KAAsC,EAC7B;IACT,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,yCAAyC,CAAC,EAAE,CAAC;IACvG,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,aAAa,GAAG,IAAI;QACzB,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAgB,IAAI,aAAa,CAAC,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClG,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC1C,IAAI,IAAI,GAAG,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACrH,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,SAAS,gBAAgB,KAAK,CAAC,MAAM,SAAS,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,CAAC;IACvI,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,eAAe,CACvB,IAAiC,EACjC,OAAgC,EAChC,KAAY,EACZ,KAAsC,EAC7B;IACT,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3J,IAAI,IAAI,yBAAyB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAE/E,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,iBAAiB,CAAC,MAAyB,EAAE,KAAY,EAAsB;IACvF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;AAAA,CACxC;AAID,MAAM,UAAU,yBAAyB,CACxC,UAA0B,EAC1B,QAA2B,EACL;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IAC3B,OAAO;QACN,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EACV,iIAAiI;QAClI,aAAa,EAAE,2BAA2B;QAC1C,gBAAgB,EAAE,CAAC,oDAAoD,CAAC;QACxE,UAAU,EAAE,WAAW;QACvB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAkB,EAAE,MAAoB,EAAE,SAAU,EAAE,IAAK,EAAE;YACtG,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YAClC,OAAO,qBAAqB,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;gBACtD,IAAI,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC;gBACvC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;oBACrB,OAAO,GAAG,IAAI,CAAC;gBAAA,CACf,CAAC;gBACF,MAAM,cAAc,GAAG,GAAS,EAAE,CAAC;oBAClC,IAAI,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;wBAChC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBACtC,CAAC;gBAAA,CACD,CAAC;gBAEF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC;oBACJ,cAAc,EAAE,CAAC;oBACjB,uCAAuC;oBACvC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1C,cAAc,EAAE,CAAC;oBAEjB,2BAA2B;oBAC3B,MAAM,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC3C,cAAc,EAAE,CAAC;oBAEjB,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,OAAO,CAAC,MAAM,aAAa,IAAI,EAAE,EAAE,CAAC;wBAC1F,OAAO,EAAE,SAAS;qBAClB,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACV,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC;YAAA,CACD,CAAC,CAAC;QAAA,CACH;QACD,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;YAChC,MAAM,UAAU,GAAG,IAAmC,CAAC;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE,IAAI,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,SAAS,GACb,OAAO,CAAC,aAAsD,IAAI,IAAI,wBAAwB,EAAE,CAAC;YACnG,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC1B,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY;oBACrC,CAAC,CAAC,8BAA8B,CAAC,OAAO,EAAE,WAAW,CAAC;oBACtD,CAAC,CAAC,oCAAoC,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACP,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC;YAC7B,CAAC;YACD,SAAS,CAAC,OAAO,CAChB,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC;gBAC/C,eAAe,CACd,UAAU,EACV,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAC5D,KAAK,EACL,SAAS,CAAC,KAAK,CACf,CACF,CAAC;YACF,OAAO,SAAS,CAAC;QAAA,CACjB;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;YAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;YACjF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,SAAS,GAAI,OAAO,CAAC,aAAuC,IAAI,IAAI,SAAS,EAAE,CAAC;gBACtF,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,GAAI,OAAO,CAAC,aAAkC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QAAA,CACZ;KACD,CAAC;AAAA,CACF;AAED,MAAM,UAAU,eAAe,CAAC,UAA0B,EAAE,OAA0B,EAAiC;IACtH,OAAO,kBAAkB,CAAC,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,CAC1E","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Container, Text } from \"@greppleai/grip-tui\";\nimport { dirname } from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport { keyHint } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tinvalidArgText,\n\tnormalizeDisplayText,\n\treplaceTabs,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst writeSchema = Type.Object({\n\tpath: Type.String({ description: \"Path to the file to write (relative or absolute)\" }),\n\tcontent: Type.String({ description: \"Content to write to the file\" }),\n});\n\nexport type WriteToolInput = Static<typeof writeSchema>;\n\nexport interface WriteToolOptions {}\n\ninterface WriteRenderArgs {\n\tpath?: string;\n\tfile_path?: string;\n\tcontent?: string;\n}\n\ninterface WriteRenderResult extends AgentToolResult<undefined> {\n\tisError?: boolean;\n}\n\ntype WriteHighlightCache = {\n\trawPath: string | null;\n\tlang: string;\n\trawContent: string;\n\tnormalizedLines: string[];\n\thighlightedLines: string[];\n};\n\nclass WriteCallRenderComponent extends Text {\n\tcache?: WriteHighlightCache;\n\n\tconstructor() {\n\t\tsuper(\"\", 0, 0);\n\t}\n}\n\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\nfunction highlightSingleLine(line: string, lang: string): string {\n\tconst highlighted = highlightCode(line, lang);\n\treturn highlighted[0] ?? \"\";\n}\n\nfunction refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n\tconst prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n\tif (prefixCount === 0) return;\n\tconst prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n\tconst prefixHighlighted = highlightCode(prefixSource, cache.lang);\n\tfor (let i = 0; i < prefixCount; i++) {\n\t\tcache.highlightedLines[i] =\n\t\t\tprefixHighlighted[i] ?? highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n\t}\n}\n\nfunction rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tconst displayContent = normalizeDisplayText(fileContent);\n\tconst normalized = replaceTabs(displayContent);\n\treturn {\n\t\trawPath,\n\t\tlang,\n\t\trawContent: fileContent,\n\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\thighlightedLines: highlightCode(normalized, lang),\n\t};\n}\n\nfunction updateWriteHighlightCacheIncremental(\n\tcache: WriteHighlightCache | undefined,\n\trawPath: string | null,\n\tfileContent: string,\n): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tif (!cache) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (cache.lang !== lang || cache.rawPath !== rawPath) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (!fileContent.startsWith(cache.rawContent)) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (fileContent.length === cache.rawContent.length) return cache;\n\n\tconst deltaRaw = fileContent.slice(cache.rawContent.length);\n\tconst deltaDisplay = normalizeDisplayText(deltaRaw);\n\tconst deltaNormalized = replaceTabs(deltaDisplay);\n\tcache.rawContent = fileContent;\n\tif (cache.normalizedLines.length === 0) {\n\t\tcache.normalizedLines.push(\"\");\n\t\tcache.highlightedLines.push(\"\");\n\t}\n\n\tconst segments = deltaNormalized.split(\"\\n\");\n\tconst lastIndex = cache.normalizedLines.length - 1;\n\tcache.normalizedLines[lastIndex] += segments[0];\n\tcache.highlightedLines[lastIndex] = highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\tfor (let i = 1; i < segments.length; i++) {\n\t\tcache.normalizedLines.push(segments[i]);\n\t\tcache.highlightedLines.push(highlightSingleLine(segments[i], cache.lang));\n\t}\n\trefreshWriteHighlightPrefix(cache);\n\treturn cache;\n}\n\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\n\nfunction formatWriteContentPreview(\n\tfileContent: string | null,\n\trawPath: string | null,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tif (fileContent === null) return `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n\tif (!fileContent) return \"\";\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang\n\t\t? (cache?.highlightedLines ?? highlightCode(replaceTabs(normalizeDisplayText(fileContent)), lang))\n\t\t: normalizeDisplayText(fileContent).split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n\\n${displayLines.map((line) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `${theme.fg(\"muted\", `\\n... (${remaining} more lines, ${lines.length} total,`)} ${keyHint(\"app.tools.expand\", \"to expand\")})`;\n\t}\n\treturn text;\n}\n\nfunction formatWriteCall(\n\targs: WriteRenderArgs | undefined,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst fileContent = str(args?.content);\n\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\")}`;\n\ttext += formatWriteContentPreview(fileContent, rawPath, options, theme, cache);\n\n\treturn text;\n}\n\nfunction formatWriteResult(result: WriteRenderResult, theme: Theme): string | undefined {\n\tif (!result.isError) {\n\t\treturn undefined;\n\t}\n\tconst output = result.content\n\t\t.filter((c) => c.type === \"text\")\n\t\t.map((c) => c.text || \"\")\n\t\t.join(\"\\n\");\n\tif (!output) {\n\t\treturn undefined;\n\t}\n\treturn `\\n${theme.fg(\"error\", output)}`;\n}\n\nexport type WriteToolDefinition = ToolDefinition<typeof writeSchema, undefined>;\n\nexport function createWriteToolDefinition(\n\toperations: ToolOperations,\n\t_options?: WriteToolOptions,\n): WriteToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"write\",\n\t\tlabel: \"write\",\n\t\tdescription:\n\t\t\t\"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Automatically creates parent directories.\",\n\t\tpromptSnippet: \"Create or overwrite files\",\n\t\tpromptGuidelines: [\"Use write only for new files or complete rewrites.\"],\n\t\tparameters: writeSchema,\n\t\tasync execute(_toolCallId, { path, content }: WriteToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\t\t\tconst dir = dirname(absolutePath);\n\t\t\treturn withFileMutationQueue(absolutePath, async () => {\n\t\t\t\tlet aborted = signal?.aborted ?? false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t};\n\t\t\t\tconst throwIfAborted = (): void => {\n\t\t\t\t\tif (aborted || signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttry {\n\t\t\t\t\tthrowIfAborted();\n\t\t\t\t\t// Create parent directories if needed.\n\t\t\t\t\tawait ops.mkdir(dir, { recursive: true });\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\t// Write the file contents.\n\t\t\t\t\tawait ops.writeFile(absolutePath, content);\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Successfully wrote ${content.length} bytes to ${path}` }],\n\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst renderArgs = args as WriteRenderArgs | undefined;\n\t\t\tconst rawPath = str(renderArgs?.file_path ?? renderArgs?.path);\n\t\t\tconst fileContent = str(renderArgs?.content);\n\t\t\tconst component =\n\t\t\t\t(context.lastComponent as WriteCallRenderComponent | undefined) ?? new WriteCallRenderComponent();\n\t\t\tif (fileContent !== null) {\n\t\t\t\tcomponent.cache = context.argsComplete\n\t\t\t\t\t? rebuildWriteHighlightCacheFull(rawPath, fileContent)\n\t\t\t\t\t: updateWriteHighlightCacheIncremental(component.cache, rawPath, fileContent);\n\t\t\t} else {\n\t\t\t\tcomponent.cache = undefined;\n\t\t\t}\n\t\t\tcomponent.setText(\n\t\t\t\tformatBackendIcon(ops.getBackendInfo?.(), theme) +\n\t\t\t\t\tformatWriteCall(\n\t\t\t\t\t\trenderArgs,\n\t\t\t\t\t\t{ expanded: context.expanded, isPartial: context.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tcomponent.cache,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn component;\n\t\t},\n\t\trenderResult(result, _options, theme, context) {\n\t\t\tconst output = formatWriteResult({ ...result, isError: context.isError }, theme);\n\t\t\tif (!output) {\n\t\t\t\tconst component = (context.lastComponent as Container | undefined) ?? new Container();\n\t\t\t\tcomponent.clear();\n\t\t\t\treturn component;\n\t\t\t}\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(output);\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createWriteTool(operations: ToolOperations, options?: WriteToolOptions): AgentTool<typeof writeSchema> {\n\treturn wrapToolDefinition(createWriteToolDefinition(operations, options));\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { PortablePathFlavor } from "./lsp/portable-path.ts";
2
+ export interface WorkspaceIdentity {
3
+ readonly id: string;
4
+ readonly root: string;
5
+ readonly pathFlavor: PortablePathFlavor;
6
+ }
7
+ //# sourceMappingURL=workspace-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-identity.d.ts","sourceRoot":"","sources":["../../src/core/workspace-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACxC","sourcesContent":["import type { PortablePathFlavor } from \"./lsp/portable-path.ts\";\n\nexport interface WorkspaceIdentity {\n\treadonly id: string;\n\treadonly root: string;\n\treadonly pathFlavor: PortablePathFlavor;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workspace-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-identity.js","sourceRoot":"","sources":["../../src/core/workspace-identity.ts"],"names":[],"mappings":"","sourcesContent":["import type { PortablePathFlavor } from \"./lsp/portable-path.ts\";\n\nexport interface WorkspaceIdentity {\n\treadonly id: string;\n\treadonly root: string;\n\treadonly pathFlavor: PortablePathFlavor;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { DaemonConfiguration } from "./config.ts";
2
+ /** Counts running handlers across every v1 socket and v2 channel in this daemon. */
3
+ export declare class DaemonActivityBudget {
4
+ private requests;
5
+ private transfers;
6
+ private readonly limits;
7
+ constructor(limits: Pick<DaemonConfiguration, "maxGlobalRequests" | "maxGlobalTransfers">);
8
+ run<T>(method: string, action: () => Promise<T>): Promise<T>;
9
+ }
10
+ //# sourceMappingURL=activity-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-budget.d.ts","sourceRoot":"","sources":["../../src/daemon/activity-budget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,oFAAoF;AACpF,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwE;IAC/F,YAAY,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,EAExF;IAEK,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBjE;CACD","sourcesContent":["import { RemoteWorkspaceRequestError } from \"../core/remote-workspace-protocol/session.ts\";\nimport type { DaemonConfiguration } from \"./config.ts\";\n\n/** Counts running handlers across every v1 socket and v2 channel in this daemon. */\nexport class DaemonActivityBudget {\n\tprivate requests = 0;\n\tprivate transfers = 0;\n\tprivate readonly limits: Pick<DaemonConfiguration, \"maxGlobalRequests\" | \"maxGlobalTransfers\">;\n\tconstructor(limits: Pick<DaemonConfiguration, \"maxGlobalRequests\" | \"maxGlobalTransfers\">) {\n\t\tthis.limits = limits;\n\t}\n\n\tasync run<T>(method: string, action: () => Promise<T>): Promise<T> {\n\t\tconst transfer = method.startsWith(\"transfer.\") || method === \"artifact.read\";\n\t\tif (\n\t\t\tthis.requests >= this.limits.maxGlobalRequests ||\n\t\t\t(transfer && this.transfers >= this.limits.maxGlobalTransfers)\n\t\t) {\n\t\t\tthrow new RemoteWorkspaceRequestError({\n\t\t\t\tcode: \"limit_exceeded\",\n\t\t\t\tmessage: \"Daemon global active request or transfer limit reached\",\n\t\t\t\texecutionState: \"not_started\",\n\t\t\t\tretryable: true,\n\t\t\t});\n\t\t}\n\t\tthis.requests++;\n\t\tif (transfer) this.transfers++;\n\t\ttry {\n\t\t\treturn await action();\n\t\t} finally {\n\t\t\tthis.requests--;\n\t\t\tif (transfer) this.transfers--;\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import { RemoteWorkspaceRequestError } from "../core/remote-workspace-protocol/session.js";
2
+ /** Counts running handlers across every v1 socket and v2 channel in this daemon. */
3
+ export class DaemonActivityBudget {
4
+ requests = 0;
5
+ transfers = 0;
6
+ limits;
7
+ constructor(limits) {
8
+ this.limits = limits;
9
+ }
10
+ async run(method, action) {
11
+ const transfer = method.startsWith("transfer.") || method === "artifact.read";
12
+ if (this.requests >= this.limits.maxGlobalRequests ||
13
+ (transfer && this.transfers >= this.limits.maxGlobalTransfers)) {
14
+ throw new RemoteWorkspaceRequestError({
15
+ code: "limit_exceeded",
16
+ message: "Daemon global active request or transfer limit reached",
17
+ executionState: "not_started",
18
+ retryable: true,
19
+ });
20
+ }
21
+ this.requests++;
22
+ if (transfer)
23
+ this.transfers++;
24
+ try {
25
+ return await action();
26
+ }
27
+ finally {
28
+ this.requests--;
29
+ if (transfer)
30
+ this.transfers--;
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=activity-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-budget.js","sourceRoot":"","sources":["../../src/daemon/activity-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAG3F,oFAAoF;AACpF,MAAM,OAAO,oBAAoB;IACxB,QAAQ,GAAG,CAAC,CAAC;IACb,SAAS,GAAG,CAAC,CAAC;IACL,MAAM,CAAwE;IAC/F,YAAY,MAA6E,EAAE;QAC1F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;IAED,KAAK,CAAC,GAAG,CAAI,MAAc,EAAE,MAAwB,EAAc;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,KAAK,eAAe,CAAC;QAC9E,IACC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAC9C,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAC7D,CAAC;YACF,MAAM,IAAI,2BAA2B,CAAC;gBACrC,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,wDAAwD;gBACjE,cAAc,EAAE,aAAa;gBAC7B,SAAS,EAAE,IAAI;aACf,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,QAAQ;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACJ,OAAO,MAAM,MAAM,EAAE,CAAC;QACvB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,QAAQ;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,CAAC;IAAA,CACD;CACD","sourcesContent":["import { RemoteWorkspaceRequestError } from \"../core/remote-workspace-protocol/session.ts\";\nimport type { DaemonConfiguration } from \"./config.ts\";\n\n/** Counts running handlers across every v1 socket and v2 channel in this daemon. */\nexport class DaemonActivityBudget {\n\tprivate requests = 0;\n\tprivate transfers = 0;\n\tprivate readonly limits: Pick<DaemonConfiguration, \"maxGlobalRequests\" | \"maxGlobalTransfers\">;\n\tconstructor(limits: Pick<DaemonConfiguration, \"maxGlobalRequests\" | \"maxGlobalTransfers\">) {\n\t\tthis.limits = limits;\n\t}\n\n\tasync run<T>(method: string, action: () => Promise<T>): Promise<T> {\n\t\tconst transfer = method.startsWith(\"transfer.\") || method === \"artifact.read\";\n\t\tif (\n\t\t\tthis.requests >= this.limits.maxGlobalRequests ||\n\t\t\t(transfer && this.transfers >= this.limits.maxGlobalTransfers)\n\t\t) {\n\t\t\tthrow new RemoteWorkspaceRequestError({\n\t\t\t\tcode: \"limit_exceeded\",\n\t\t\t\tmessage: \"Daemon global active request or transfer limit reached\",\n\t\t\t\texecutionState: \"not_started\",\n\t\t\t\tretryable: true,\n\t\t\t});\n\t\t}\n\t\tthis.requests++;\n\t\tif (transfer) this.transfers++;\n\t\ttry {\n\t\t\treturn await action();\n\t\t} finally {\n\t\t\tthis.requests--;\n\t\t\tif (transfer) this.transfers--;\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export interface DaemonCommandDependencies {
2
+ readonly stdout?: (message: string) => void;
3
+ readonly stderr?: (message: string) => void;
4
+ }
5
+ export declare function runDaemonCommand(args: readonly string[], dependencies?: DaemonCommandDependencies): Promise<void>;
6
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/daemon/command.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,GAAE,yBAA8B,GAC1C,OAAO,CAAC,IAAI,CAAC,CA+Df","sourcesContent":["import { parseDaemonCommand } from \"./config.ts\";\nimport { printDaemonHelp } from \"./help.ts\";\nimport { redactDaemonText } from \"./security.ts\";\nimport { createDaemonServer, type DaemonServer } from \"./server.ts\";\n\nexport interface DaemonCommandDependencies {\n\treadonly stdout?: (message: string) => void;\n\treadonly stderr?: (message: string) => void;\n}\n\nexport async function runDaemonCommand(\n\targs: readonly string[],\n\tdependencies: DaemonCommandDependencies = {},\n): Promise<void> {\n\tconst stdout = dependencies.stdout ?? console.log;\n\tconst stderr = dependencies.stderr ?? console.error;\n\tlet token = process.env.GRIP_DAEMON_TOKEN;\n\tlet tlsPassphrase = process.env.GRIP_DAEMON_TLS_PASSPHRASE;\n\tlet server: DaemonServer | undefined;\n\ttry {\n\t\tconst command = await parseDaemonCommand(args);\n\t\tif (command.help) {\n\t\t\tprintDaemonHelp(stdout);\n\t\t\treturn;\n\t\t}\n\t\tconst configuration = command.configuration!;\n\t\ttoken = configuration.token;\n\t\ttlsPassphrase = configuration.tls?.passphrase;\n\t\tconst activeServer = createDaemonServer(configuration);\n\t\tserver = activeServer;\n\t\tconst address = await activeServer.listen();\n\t\tstdout(\n\t\t\tredactDaemonText(\n\t\t\t\t`grip daemon ready url=${address.url} workspace=${address.workspaceRoot} workspaceId=${address.workspaceId} auth=${configuration.token ? \"required\" : \"disabled\"} processExec=${configuration.allowProcessExec ? \"enabled\" : \"disabled\"}`,\n\t\t\t\t[token, tlsPassphrase],\n\t\t\t),\n\t\t);\n\t\tlet signalCount = 0;\n\t\tlet resolveShutdown: (() => void) | undefined;\n\t\tconst shutdown = new Promise<void>((resolve) => {\n\t\t\tresolveShutdown = resolve;\n\t\t});\n\t\tconst onSignal = () => {\n\t\t\tsignalCount++;\n\t\t\tif (signalCount > 1) void activeServer.forceClose();\n\t\t\tvoid activeServer.close().then(\n\t\t\t\t() => resolveShutdown?.(),\n\t\t\t\t() => resolveShutdown?.(),\n\t\t\t);\n\t\t};\n\t\tconst onReload = () => {\n\t\t\tvoid activeServer.reload().then(\n\t\t\t\t() => stdout(\"grip daemon workspace catalog reloaded\"),\n\t\t\t\t(error: unknown) =>\n\t\t\t\t\tstderr(\n\t\t\t\t\t\t`Error: ${redactDaemonText(error instanceof Error ? error.message : String(error), [token, tlsPassphrase])}`,\n\t\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\tprocess.on(\"SIGINT\", onSignal);\n\t\tprocess.on(\"SIGTERM\", onSignal);\n\t\tprocess.on(\"SIGHUP\", onReload);\n\t\ttry {\n\t\t\tawait shutdown;\n\t\t\tawait activeServer.close();\n\t\t} finally {\n\t\t\tprocess.off(\"SIGINT\", onSignal);\n\t\t\tprocess.off(\"SIGTERM\", onSignal);\n\t\t\tprocess.off(\"SIGHUP\", onReload);\n\t\t}\n\t} catch (error) {\n\t\tawait server?.close().catch(() => undefined);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tstderr(`Error: ${redactDaemonText(message, [token, tlsPassphrase])}`);\n\t\tprocess.exitCode = 1;\n\t}\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { parseDaemonCommand } from "./config.js";
2
+ import { printDaemonHelp } from "./help.js";
3
+ import { redactDaemonText } from "./security.js";
4
+ import { createDaemonServer } from "./server.js";
5
+ export async function runDaemonCommand(args, dependencies = {}) {
6
+ const stdout = dependencies.stdout ?? console.log;
7
+ const stderr = dependencies.stderr ?? console.error;
8
+ let token = process.env.GRIP_DAEMON_TOKEN;
9
+ let tlsPassphrase = process.env.GRIP_DAEMON_TLS_PASSPHRASE;
10
+ let server;
11
+ try {
12
+ const command = await parseDaemonCommand(args);
13
+ if (command.help) {
14
+ printDaemonHelp(stdout);
15
+ return;
16
+ }
17
+ const configuration = command.configuration;
18
+ token = configuration.token;
19
+ tlsPassphrase = configuration.tls?.passphrase;
20
+ const activeServer = createDaemonServer(configuration);
21
+ server = activeServer;
22
+ const address = await activeServer.listen();
23
+ stdout(redactDaemonText(`grip daemon ready url=${address.url} workspace=${address.workspaceRoot} workspaceId=${address.workspaceId} auth=${configuration.token ? "required" : "disabled"} processExec=${configuration.allowProcessExec ? "enabled" : "disabled"}`, [token, tlsPassphrase]));
24
+ let signalCount = 0;
25
+ let resolveShutdown;
26
+ const shutdown = new Promise((resolve) => {
27
+ resolveShutdown = resolve;
28
+ });
29
+ const onSignal = () => {
30
+ signalCount++;
31
+ if (signalCount > 1)
32
+ void activeServer.forceClose();
33
+ void activeServer.close().then(() => resolveShutdown?.(), () => resolveShutdown?.());
34
+ };
35
+ const onReload = () => {
36
+ void activeServer.reload().then(() => stdout("grip daemon workspace catalog reloaded"), (error) => stderr(`Error: ${redactDaemonText(error instanceof Error ? error.message : String(error), [token, tlsPassphrase])}`));
37
+ };
38
+ process.on("SIGINT", onSignal);
39
+ process.on("SIGTERM", onSignal);
40
+ process.on("SIGHUP", onReload);
41
+ try {
42
+ await shutdown;
43
+ await activeServer.close();
44
+ }
45
+ finally {
46
+ process.off("SIGINT", onSignal);
47
+ process.off("SIGTERM", onSignal);
48
+ process.off("SIGHUP", onReload);
49
+ }
50
+ }
51
+ catch (error) {
52
+ await server?.close().catch(() => undefined);
53
+ const message = error instanceof Error ? error.message : String(error);
54
+ stderr(`Error: ${redactDaemonText(message, [token, tlsPassphrase])}`);
55
+ process.exitCode = 1;
56
+ }
57
+ }
58
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/daemon/command.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseDaemonCommand } from \"./config.ts\";\nimport { printDaemonHelp } from \"./help.ts\";\nimport { redactDaemonText } from \"./security.ts\";\nimport { createDaemonServer, type DaemonServer } from \"./server.ts\";\n\nexport interface DaemonCommandDependencies {\n\treadonly stdout?: (message: string) => void;\n\treadonly stderr?: (message: string) => void;\n}\n\nexport async function runDaemonCommand(\n\targs: readonly string[],\n\tdependencies: DaemonCommandDependencies = {},\n): Promise<void> {\n\tconst stdout = dependencies.stdout ?? console.log;\n\tconst stderr = dependencies.stderr ?? console.error;\n\tlet token = process.env.GRIP_DAEMON_TOKEN;\n\tlet tlsPassphrase = process.env.GRIP_DAEMON_TLS_PASSPHRASE;\n\tlet server: DaemonServer | undefined;\n\ttry {\n\t\tconst command = await parseDaemonCommand(args);\n\t\tif (command.help) {\n\t\t\tprintDaemonHelp(stdout);\n\t\t\treturn;\n\t\t}\n\t\tconst configuration = command.configuration!;\n\t\ttoken = configuration.token;\n\t\ttlsPassphrase = configuration.tls?.passphrase;\n\t\tconst activeServer = createDaemonServer(configuration);\n\t\tserver = activeServer;\n\t\tconst address = await activeServer.listen();\n\t\tstdout(\n\t\t\tredactDaemonText(\n\t\t\t\t`grip daemon ready url=${address.url} workspace=${address.workspaceRoot} workspaceId=${address.workspaceId} auth=${configuration.token ? \"required\" : \"disabled\"} processExec=${configuration.allowProcessExec ? \"enabled\" : \"disabled\"}`,\n\t\t\t\t[token, tlsPassphrase],\n\t\t\t),\n\t\t);\n\t\tlet signalCount = 0;\n\t\tlet resolveShutdown: (() => void) | undefined;\n\t\tconst shutdown = new Promise<void>((resolve) => {\n\t\t\tresolveShutdown = resolve;\n\t\t});\n\t\tconst onSignal = () => {\n\t\t\tsignalCount++;\n\t\t\tif (signalCount > 1) void activeServer.forceClose();\n\t\t\tvoid activeServer.close().then(\n\t\t\t\t() => resolveShutdown?.(),\n\t\t\t\t() => resolveShutdown?.(),\n\t\t\t);\n\t\t};\n\t\tconst onReload = () => {\n\t\t\tvoid activeServer.reload().then(\n\t\t\t\t() => stdout(\"grip daemon workspace catalog reloaded\"),\n\t\t\t\t(error: unknown) =>\n\t\t\t\t\tstderr(\n\t\t\t\t\t\t`Error: ${redactDaemonText(error instanceof Error ? error.message : String(error), [token, tlsPassphrase])}`,\n\t\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\tprocess.on(\"SIGINT\", onSignal);\n\t\tprocess.on(\"SIGTERM\", onSignal);\n\t\tprocess.on(\"SIGHUP\", onReload);\n\t\ttry {\n\t\t\tawait shutdown;\n\t\t\tawait activeServer.close();\n\t\t} finally {\n\t\t\tprocess.off(\"SIGINT\", onSignal);\n\t\t\tprocess.off(\"SIGTERM\", onSignal);\n\t\t\tprocess.off(\"SIGHUP\", onReload);\n\t\t}\n\t} catch (error) {\n\t\tawait server?.close().catch(() => undefined);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tstderr(`Error: ${redactDaemonText(message, [token, tlsPassphrase])}`);\n\t\tprocess.exitCode = 1;\n\t}\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import { type RemoteWorkspaceProtocolLimits } from "../core/remote-workspace-protocol/contract.ts";
2
+ export declare const DAEMON_WEBSOCKET_PATH = "/grip/workspace";
3
+ export declare const DAEMON_WEBSOCKET_PROTOCOL = "grip.workspace.v1";
4
+ export interface DaemonTlsConfiguration {
5
+ readonly cert: Buffer;
6
+ readonly key: Buffer;
7
+ readonly passphrase?: string;
8
+ }
9
+ export interface DaemonConfiguration {
10
+ readonly host: string;
11
+ readonly port: number;
12
+ readonly workspaceRoot: string;
13
+ /** Canonical fixed parent mount for explicitly enabled shared-channel mode. */
14
+ readonly sharedParentRoot?: string;
15
+ readonly temporaryRoot?: string;
16
+ readonly token?: string;
17
+ readonly allowedOrigins: readonly string[];
18
+ readonly tls?: DaemonTlsConfiguration;
19
+ readonly allowInsecureTransport: boolean;
20
+ readonly allowProcessExec: boolean;
21
+ readonly allowRoot: boolean;
22
+ readonly forwardedEnvironment: readonly string[];
23
+ readonly lspConfigPath?: string;
24
+ readonly sandboxInstructionsPath?: string;
25
+ readonly userAgentsPath?: string;
26
+ readonly trustProjectLsp: boolean;
27
+ readonly maxConnections: number;
28
+ readonly maxGlobalRequests: number;
29
+ readonly maxGlobalTransfers: number;
30
+ readonly maxBufferedOutputBytes: number;
31
+ readonly maxPendingConnections: number;
32
+ readonly handshakeTimeoutMs: number;
33
+ readonly shutdownTimeoutMs: number;
34
+ readonly protocolLimits: RemoteWorkspaceProtocolLimits;
35
+ }
36
+ export interface DaemonCommand {
37
+ readonly help: boolean;
38
+ readonly configuration?: DaemonConfiguration;
39
+ }
40
+ export declare class DaemonConfigurationError extends Error {
41
+ constructor(message: string);
42
+ }
43
+ export declare function isDaemonCommand(args: readonly string[]): boolean;
44
+ export declare function parseDaemonCommand(args: readonly string[], environment?: NodeJS.ProcessEnv, startupCwd?: string): Promise<DaemonCommand>;
45
+ //# sourceMappingURL=config.d.ts.map