@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,321 @@
1
+ import { Container, Text, truncateToWidth } from "@greppleai/grip-tui";
2
+ import { Type } from "typebox";
3
+ import { keyText } from "../../modes/interactive/components/keybinding-hints.js";
4
+ import { truncateToVisualLines } from "../../modes/interactive/components/visual-truncate.js";
5
+ import { theme } from "../../modes/interactive/theme/theme.js";
6
+ import { getShellEnv } from "../../utils/shell.js";
7
+ import { GRIP_SESSION_ENVIRONMENT_NAMES, LocalToolOperations, } from "./operations.js";
8
+ import { OutputAccumulator } from "./output-accumulator.js";
9
+ import { formatBackendIcon, getTextOutput, invalidArgText, str } from "./render-utils.js";
10
+ import { wrapToolDefinition } from "./tool-definition-wrapper.js";
11
+ import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "./truncate.js";
12
+ const bashSchema = Type.Object({
13
+ command: Type.String({ description: "Bash command to execute" }),
14
+ timeout: Type.Optional(Type.Number({ description: "Timeout in seconds (optional, no default timeout)" })),
15
+ });
16
+ export function createLocalBashOperations(options) {
17
+ return new LocalToolOperations(options?.cwd ?? process.cwd(), { shellPath: options?.shellPath });
18
+ }
19
+ export function getBashSessionEnvironment(ctx) {
20
+ if (!ctx?.session)
21
+ return {};
22
+ const environment = {
23
+ GRIP_SESSION_ID: ctx.session.getSessionId(),
24
+ };
25
+ if (ctx.thinkingLevel)
26
+ environment.GRIP_REASONING_LEVEL = ctx.thinkingLevel;
27
+ const sessionFile = ctx.session.getSessionReference();
28
+ if (sessionFile)
29
+ environment.GRIP_SESSION_FILE = sessionFile;
30
+ if (ctx.model) {
31
+ environment.GRIP_PROVIDER = ctx.model.provider;
32
+ environment.GRIP_MODEL = ctx.model.id;
33
+ }
34
+ return environment;
35
+ }
36
+ function resolveSpawnContext(command, cwd, spawnHook, exposeSessionEnvironment, ctx) {
37
+ const env = { ...getShellEnv() };
38
+ for (const name of GRIP_SESSION_ENVIRONMENT_NAMES)
39
+ delete env[name];
40
+ if (exposeSessionEnvironment)
41
+ Object.assign(env, getBashSessionEnvironment(ctx));
42
+ const baseContext = { command, cwd, env };
43
+ return spawnHook ? spawnHook(baseContext) : baseContext;
44
+ }
45
+ const BASH_PREVIEW_LINES = 5;
46
+ const BASH_UPDATE_THROTTLE_MS = 100;
47
+ class BashResultRenderComponent extends Container {
48
+ state = {
49
+ cachedWidth: undefined,
50
+ cachedLines: undefined,
51
+ cachedSkipped: undefined,
52
+ };
53
+ }
54
+ function formatDuration(ms) {
55
+ return `${(ms / 1000).toFixed(1)}s`;
56
+ }
57
+ function formatBackendSuffix(backendInfo) {
58
+ if (!backendInfo)
59
+ return "";
60
+ if (backendInfo.type === "local")
61
+ return theme.fg("muted", ` [local ${backendInfo.cwd}]`);
62
+ return backendInfo.configured
63
+ ? theme.fg("muted", ` [remote ${backendInfo.url}:${backendInfo.cwd}]`)
64
+ : theme.fg("warning", ` [remote not configured ${backendInfo.cwd}]`);
65
+ }
66
+ function formatBashCall(args, backendInfo) {
67
+ const command = str(args?.command);
68
+ const timeout = args?.timeout;
69
+ const timeoutSuffix = timeout ? theme.fg("muted", ` (timeout ${timeout}s)`) : "";
70
+ const commandDisplay = command === null ? invalidArgText(theme) : command ? command : theme.fg("toolOutput", "...");
71
+ return (formatBackendIcon(backendInfo, theme) +
72
+ theme.fg("toolTitle", theme.bold("$ ")) +
73
+ theme.fg("accent", theme.bold(commandDisplay)) +
74
+ timeoutSuffix);
75
+ }
76
+ function getBashDisplayOutput(result, showImages, isPartial) {
77
+ const output = getTextOutput(result, showImages).trim();
78
+ const truncation = result.details?.truncation;
79
+ const fullOutputPath = result.details?.fullOutputPath;
80
+ if (isPartial || !truncation?.truncated || !fullOutputPath || !output.endsWith("]"))
81
+ return output;
82
+ const footerStart = output.lastIndexOf("\n\n[");
83
+ if (footerStart === -1 || !output.slice(footerStart).includes(fullOutputPath))
84
+ return output;
85
+ return output.slice(0, footerStart).trimEnd();
86
+ }
87
+ function addBashOutput(component, state, output, options) {
88
+ if (!output)
89
+ return;
90
+ const styledOutput = output
91
+ .split("\n")
92
+ .map((line) => theme.fg("toolOutput", line))
93
+ .join("\n");
94
+ if (options.expanded) {
95
+ component.addChild(new Text(`\n${styledOutput}`, 0, 0));
96
+ return;
97
+ }
98
+ component.addChild({
99
+ render: (width) => {
100
+ if (state.cachedLines === undefined || state.cachedWidth !== width) {
101
+ const preview = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, width);
102
+ state.cachedLines = preview.visualLines;
103
+ state.cachedSkipped = preview.skippedCount;
104
+ state.cachedWidth = width;
105
+ }
106
+ return ["", ...(state.cachedLines ?? [])];
107
+ },
108
+ invalidate: () => {
109
+ state.cachedWidth = undefined;
110
+ state.cachedLines = undefined;
111
+ state.cachedSkipped = undefined;
112
+ },
113
+ });
114
+ }
115
+ function addBashOutputWarnings(component, truncation, fullOutputPath) {
116
+ if (!truncation?.truncated && !fullOutputPath)
117
+ return;
118
+ const warnings = [];
119
+ if (fullOutputPath)
120
+ warnings.push(`Full output: ${fullOutputPath}`);
121
+ if (truncation?.truncated) {
122
+ if (truncation.truncatedBy === "lines") {
123
+ warnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);
124
+ }
125
+ else {
126
+ warnings.push(`Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`);
127
+ }
128
+ }
129
+ component.addChild(new Text(`\n${theme.fg("warning", `[${warnings.join(". ")}]`)}`, 0, 0));
130
+ }
131
+ function rebuildBashResultRenderComponent(component, result, options, isError, showImages, startedAt, endedAt, backendInfo) {
132
+ const state = component.state;
133
+ component.clear();
134
+ const output = getBashDisplayOutput(result, showImages, options.isPartial);
135
+ addBashOutput(component, state, output, options);
136
+ addBashOutputWarnings(component, result.details?.truncation, result.details?.fullOutputPath);
137
+ if (startedAt !== undefined) {
138
+ const label = options.isPartial ? "Elapsed" : "Took";
139
+ const endTime = endedAt ?? Date.now();
140
+ component.addChild(new Text(`\n${theme.fg(options.isPartial ? "muted" : isError ? "error" : "success", `${label} ${formatDuration(endTime - startedAt)}`)}${formatBackendSuffix(backendInfo)}`, 0, 0));
141
+ }
142
+ if (!options.expanded && output) {
143
+ component.addChild({
144
+ render: (width) => {
145
+ if (!state.cachedSkipped || width < 1)
146
+ return [];
147
+ const expandKey = keyText("app.tools.expand");
148
+ const hint = theme.fg("warning", `${state.cachedSkipped} lines hidden`) +
149
+ (expandKey ? theme.fg("accent", ` · ${expandKey} to expand`) : "");
150
+ return ["", truncateToWidth(hint, width, "...")];
151
+ },
152
+ invalidate: () => { },
153
+ });
154
+ }
155
+ }
156
+ function appendBashStatus(text, status) {
157
+ return `${text ? `${text}\n\n` : ""}${status}`;
158
+ }
159
+ function throwBashExecutionError(error, outputText) {
160
+ if (error instanceof Error && error.message === "aborted") {
161
+ throw new Error(appendBashStatus(outputText, "Command aborted"));
162
+ }
163
+ if (error instanceof Error && error.message.startsWith("timeout:")) {
164
+ const timeoutSeconds = error.message.split(":")[1];
165
+ throw new Error(appendBashStatus(outputText, `Command timed out after ${timeoutSeconds} seconds`));
166
+ }
167
+ throw error;
168
+ }
169
+ export function createBashToolDefinition(operations, options) {
170
+ const ops = operations;
171
+ const commandPrefix = options?.commandPrefix;
172
+ const exposeSessionEnvironment = options?.exposeSessionEnvironment ?? true;
173
+ const spawnHook = options?.spawnHook;
174
+ return {
175
+ name: "bash",
176
+ label: "bash",
177
+ description: `Execute a bash command in the current working directory. Returns stdout and stderr. Output is truncated to last ${DEFAULT_MAX_LINES} lines or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first). If truncated, full output is saved to a temp file. Optionally provide a timeout in seconds.`,
178
+ promptSnippet: "Execute bash commands (ls, grep, find, etc.)",
179
+ promptGuidelines: exposeSessionEnvironment
180
+ ? ["Inspect GRIP_* environment variables for current model and session details."]
181
+ : undefined,
182
+ parameters: bashSchema,
183
+ async execute(_toolCallId, { command, timeout }, signal, onUpdate, ctx) {
184
+ const resolvedCommand = commandPrefix ? `${commandPrefix}\n${command}` : command;
185
+ const spawnContext = resolveSpawnContext(resolvedCommand, ops.cwd, spawnHook, exposeSessionEnvironment, ctx);
186
+ const output = new OutputAccumulator({ tempFilePrefix: "grip-bash" });
187
+ let updateTimer;
188
+ let updateDirty = false;
189
+ let lastUpdateAt = 0;
190
+ const emitOutputUpdate = () => {
191
+ if (!onUpdate || !updateDirty)
192
+ return;
193
+ updateDirty = false;
194
+ lastUpdateAt = Date.now();
195
+ const snapshot = output.snapshot({ persistIfTruncated: true });
196
+ onUpdate({
197
+ content: [{ type: "text", text: snapshot.content || "" }],
198
+ details: {
199
+ truncation: snapshot.truncation.truncated ? snapshot.truncation : undefined,
200
+ fullOutputPath: snapshot.fullOutputPath,
201
+ },
202
+ });
203
+ };
204
+ const clearUpdateTimer = () => {
205
+ if (updateTimer) {
206
+ clearTimeout(updateTimer);
207
+ updateTimer = undefined;
208
+ }
209
+ };
210
+ const scheduleOutputUpdate = () => {
211
+ if (!onUpdate)
212
+ return;
213
+ updateDirty = true;
214
+ const delay = BASH_UPDATE_THROTTLE_MS - (Date.now() - lastUpdateAt);
215
+ if (delay <= 0) {
216
+ clearUpdateTimer();
217
+ emitOutputUpdate();
218
+ return;
219
+ }
220
+ updateTimer ??= setTimeout(() => {
221
+ updateTimer = undefined;
222
+ emitOutputUpdate();
223
+ }, delay);
224
+ };
225
+ if (onUpdate) {
226
+ onUpdate({ content: [], details: undefined });
227
+ }
228
+ const handleData = (data) => {
229
+ output.append(data);
230
+ scheduleOutputUpdate();
231
+ };
232
+ const finishOutput = async () => {
233
+ output.finish();
234
+ clearUpdateTimer();
235
+ emitOutputUpdate();
236
+ const snapshot = output.snapshot({ persistIfTruncated: true });
237
+ await output.closeTempFile();
238
+ return snapshot;
239
+ };
240
+ const formatOutput = (snapshot, emptyText = "(no output)") => {
241
+ const truncation = snapshot.truncation;
242
+ let text = snapshot.content || emptyText;
243
+ let details;
244
+ if (truncation.truncated) {
245
+ details = { truncation, fullOutputPath: snapshot.fullOutputPath };
246
+ const startLine = truncation.totalLines - truncation.outputLines + 1;
247
+ const endLine = truncation.totalLines;
248
+ if (truncation.lastLinePartial) {
249
+ const lastLineSize = formatSize(output.getLastLineBytes());
250
+ text += `\n\n[Showing last ${formatSize(truncation.outputBytes)} of line ${endLine} (line is ${lastLineSize}). Full output: ${snapshot.fullOutputPath}]`;
251
+ }
252
+ else if (truncation.truncatedBy === "lines") {
253
+ text += `\n\n[Showing lines ${startLine}-${endLine} of ${truncation.totalLines}. Full output: ${snapshot.fullOutputPath}]`;
254
+ }
255
+ else {
256
+ text += `\n\n[Showing lines ${startLine}-${endLine} of ${truncation.totalLines} (${formatSize(DEFAULT_MAX_BYTES)} limit). Full output: ${snapshot.fullOutputPath}]`;
257
+ }
258
+ }
259
+ return { text, details };
260
+ };
261
+ try {
262
+ let exitCode;
263
+ try {
264
+ const result = await ops.exec(spawnContext.command, {
265
+ cwd: spawnContext.cwd,
266
+ onData: handleData,
267
+ signal,
268
+ timeout,
269
+ env: spawnContext.env,
270
+ });
271
+ exitCode = result.exitCode;
272
+ }
273
+ catch (err) {
274
+ const snapshot = await finishOutput();
275
+ const { text } = formatOutput(snapshot, "");
276
+ throwBashExecutionError(err, text);
277
+ }
278
+ const snapshot = await finishOutput();
279
+ const { text: outputText, details } = formatOutput(snapshot);
280
+ if (exitCode !== 0 && exitCode !== null) {
281
+ throw new Error(appendBashStatus(outputText, `Command exited with code ${exitCode}`));
282
+ }
283
+ return { content: [{ type: "text", text: outputText }], details };
284
+ }
285
+ finally {
286
+ clearUpdateTimer();
287
+ }
288
+ },
289
+ renderCall(args, _theme, context) {
290
+ const state = context.state;
291
+ if (context.executionStarted && state.startedAt === undefined) {
292
+ state.startedAt = Date.now();
293
+ state.endedAt = undefined;
294
+ }
295
+ const text = context.lastComponent ?? new Text("", 0, 0);
296
+ text.setText(formatBashCall(args, ops.getBackendInfo?.()));
297
+ return text;
298
+ },
299
+ renderResult(result, options, _theme, context) {
300
+ const state = context.state;
301
+ if (state.startedAt !== undefined && options.isPartial && !state.interval) {
302
+ state.interval = setInterval(() => context.invalidate(), 1000);
303
+ }
304
+ if (!options.isPartial || context.isError) {
305
+ state.endedAt ??= Date.now();
306
+ if (state.interval) {
307
+ clearInterval(state.interval);
308
+ state.interval = undefined;
309
+ }
310
+ }
311
+ const component = context.lastComponent ?? new BashResultRenderComponent();
312
+ rebuildBashResultRenderComponent(component, result, options, context.isError, context.showImages, state.startedAt, state.endedAt, ops.getBackendInfo?.());
313
+ component.invalidate();
314
+ return component;
315
+ },
316
+ };
317
+ }
318
+ export function createBashTool(operations, options) {
319
+ return wrapToolDefinition(createBashToolDefinition(operations, options));
320
+ }
321
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/core/tools/bash.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Container, Text, truncateToWidth } from \"@greppleai/grip-tui\";\nimport { type Static, Type } from \"typebox\";\nimport { keyText } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { truncateToVisualLines } from \"../../modes/interactive/components/visual-truncate.ts\";\nimport { theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { getShellEnv } from \"../../utils/shell.ts\";\nimport type { ExtensionContext, ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport {\n\tGRIP_SESSION_ENVIRONMENT_NAMES,\n\ttype GripSessionEnvironment,\n\tLocalToolOperations,\n\ttype ToolBackendInfo,\n\ttype ToolOperations,\n} from \"./operations.ts\";\nimport { OutputAccumulator, type OutputSnapshot } from \"./output-accumulator.ts\";\nimport { formatBackendIcon, getTextOutput, invalidArgText, str } from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\nimport { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationResult } from \"./truncate.ts\";\n\nconst bashSchema = Type.Object({\n\tcommand: Type.String({ description: \"Bash command to execute\" }),\n\ttimeout: Type.Optional(Type.Number({ description: \"Timeout in seconds (optional, no default timeout)\" })),\n});\n\nexport type BashToolInput = Static<typeof bashSchema>;\n\nexport interface BashToolDetails {\n\ttruncation?: TruncationResult;\n\tfullOutputPath?: string;\n}\n\n/**\n * Create tool operations using grip's built-in local shell execution backend.\n *\n * This is useful for extensions that intercept user_bash and still want grip's\n * standard local shell behavior while wrapping or rewriting commands.\n */\nexport interface LocalBashOperationsOptions {\n\tcwd?: string;\n\tshellPath?: string;\n}\n\nexport function createLocalBashOperations(options?: LocalBashOperationsOptions): ToolOperations {\n\treturn new LocalToolOperations(options?.cwd ?? process.cwd(), { shellPath: options?.shellPath });\n}\n\nexport interface BashSpawnContext {\n\tcommand: string;\n\tcwd: string;\n\tenv: NodeJS.ProcessEnv;\n}\n\nexport type BashSpawnHook = (context: BashSpawnContext) => BashSpawnContext;\n\nexport type BashSessionEnvironment = GripSessionEnvironment;\n\nexport function getBashSessionEnvironment(ctx: ExtensionContext | undefined): BashSessionEnvironment {\n\tif (!ctx?.session) return {};\n\tconst environment: BashSessionEnvironment = {\n\t\tGRIP_SESSION_ID: ctx.session.getSessionId(),\n\t};\n\tif (ctx.thinkingLevel) environment.GRIP_REASONING_LEVEL = ctx.thinkingLevel;\n\tconst sessionFile = ctx.session.getSessionReference();\n\tif (sessionFile) environment.GRIP_SESSION_FILE = sessionFile;\n\tif (ctx.model) {\n\t\tenvironment.GRIP_PROVIDER = ctx.model.provider;\n\t\tenvironment.GRIP_MODEL = ctx.model.id;\n\t}\n\treturn environment;\n}\n\nfunction resolveSpawnContext(\n\tcommand: string,\n\tcwd: string,\n\tspawnHook: BashSpawnHook | undefined,\n\texposeSessionEnvironment: boolean,\n\tctx: ExtensionContext | undefined,\n): BashSpawnContext {\n\tconst env = { ...getShellEnv() };\n\tfor (const name of GRIP_SESSION_ENVIRONMENT_NAMES) delete env[name];\n\tif (exposeSessionEnvironment) Object.assign(env, getBashSessionEnvironment(ctx));\n\tconst baseContext: BashSpawnContext = { command, cwd, env };\n\treturn spawnHook ? spawnHook(baseContext) : baseContext;\n}\n\nexport interface BashToolOptions {\n\t/** Command prefix prepended to every command (for example shell setup commands) */\n\tcommandPrefix?: string;\n\t/** Expose current grip session metadata as GRIP_* environment variables. Default: true */\n\texposeSessionEnvironment?: boolean;\n\t/** Hook to adjust command, cwd, or env before execution */\n\tspawnHook?: BashSpawnHook;\n}\n\nconst BASH_PREVIEW_LINES = 5;\nconst BASH_UPDATE_THROTTLE_MS = 100;\n\ntype BashRenderState = {\n\tstartedAt: number | undefined;\n\tendedAt: number | undefined;\n\tinterval: NodeJS.Timeout | undefined;\n};\n\ntype BashResultRenderState = {\n\tcachedWidth: number | undefined;\n\tcachedLines: string[] | undefined;\n\tcachedSkipped: number | undefined;\n};\n\nclass BashResultRenderComponent extends Container {\n\tstate: BashResultRenderState = {\n\t\tcachedWidth: undefined,\n\t\tcachedLines: undefined,\n\t\tcachedSkipped: undefined,\n\t};\n}\n\nfunction formatDuration(ms: number): string {\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n\nfunction formatBackendSuffix(backendInfo: ToolBackendInfo | undefined): string {\n\tif (!backendInfo) return \"\";\n\tif (backendInfo.type === \"local\") return theme.fg(\"muted\", ` [local ${backendInfo.cwd}]`);\n\treturn backendInfo.configured\n\t\t? theme.fg(\"muted\", ` [remote ${backendInfo.url}:${backendInfo.cwd}]`)\n\t\t: theme.fg(\"warning\", ` [remote not configured ${backendInfo.cwd}]`);\n}\n\nfunction formatBashCall(args: Partial<BashToolInput> | undefined, backendInfo?: ToolBackendInfo): string {\n\tconst command = str(args?.command);\n\tconst timeout = args?.timeout;\n\tconst timeoutSuffix = timeout ? theme.fg(\"muted\", ` (timeout ${timeout}s)`) : \"\";\n\tconst commandDisplay = command === null ? invalidArgText(theme) : command ? command : theme.fg(\"toolOutput\", \"...\");\n\treturn (\n\t\tformatBackendIcon(backendInfo, theme) +\n\t\ttheme.fg(\"toolTitle\", theme.bold(\"$ \")) +\n\t\ttheme.fg(\"accent\", theme.bold(commandDisplay)) +\n\t\ttimeoutSuffix\n\t);\n}\n\nfunction getBashDisplayOutput(\n\tresult: AgentToolResult<BashToolDetails | undefined>,\n\tshowImages: boolean,\n\tisPartial: boolean,\n): string {\n\tconst output = getTextOutput(result, showImages).trim();\n\tconst truncation = result.details?.truncation;\n\tconst fullOutputPath = result.details?.fullOutputPath;\n\tif (isPartial || !truncation?.truncated || !fullOutputPath || !output.endsWith(\"]\")) return output;\n\tconst footerStart = output.lastIndexOf(\"\\n\\n[\");\n\tif (footerStart === -1 || !output.slice(footerStart).includes(fullOutputPath)) return output;\n\treturn output.slice(0, footerStart).trimEnd();\n}\n\nfunction addBashOutput(\n\tcomponent: BashResultRenderComponent,\n\tstate: BashResultRenderState,\n\toutput: string,\n\toptions: ToolRenderResultOptions,\n): void {\n\tif (!output) return;\n\tconst styledOutput = output\n\t\t.split(\"\\n\")\n\t\t.map((line) => theme.fg(\"toolOutput\", line))\n\t\t.join(\"\\n\");\n\tif (options.expanded) {\n\t\tcomponent.addChild(new Text(`\\n${styledOutput}`, 0, 0));\n\t\treturn;\n\t}\n\tcomponent.addChild({\n\t\trender: (width: number) => {\n\t\t\tif (state.cachedLines === undefined || state.cachedWidth !== width) {\n\t\t\t\tconst preview = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, width);\n\t\t\t\tstate.cachedLines = preview.visualLines;\n\t\t\t\tstate.cachedSkipped = preview.skippedCount;\n\t\t\t\tstate.cachedWidth = width;\n\t\t\t}\n\t\t\treturn [\"\", ...(state.cachedLines ?? [])];\n\t\t},\n\t\tinvalidate: () => {\n\t\t\tstate.cachedWidth = undefined;\n\t\t\tstate.cachedLines = undefined;\n\t\t\tstate.cachedSkipped = undefined;\n\t\t},\n\t});\n}\n\nfunction addBashOutputWarnings(\n\tcomponent: BashResultRenderComponent,\n\ttruncation: TruncationResult | undefined,\n\tfullOutputPath: string | undefined,\n): void {\n\tif (!truncation?.truncated && !fullOutputPath) return;\n\tconst warnings: string[] = [];\n\tif (fullOutputPath) warnings.push(`Full output: ${fullOutputPath}`);\n\tif (truncation?.truncated) {\n\t\tif (truncation.truncatedBy === \"lines\") {\n\t\t\twarnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);\n\t\t} else {\n\t\t\twarnings.push(\n\t\t\t\t`Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`,\n\t\t\t);\n\t\t}\n\t}\n\tcomponent.addChild(new Text(`\\n${theme.fg(\"warning\", `[${warnings.join(\". \")}]`)}`, 0, 0));\n}\n\nfunction rebuildBashResultRenderComponent(\n\tcomponent: BashResultRenderComponent,\n\tresult: AgentToolResult<BashToolDetails | undefined>,\n\toptions: ToolRenderResultOptions,\n\tisError: boolean,\n\tshowImages: boolean,\n\tstartedAt: number | undefined,\n\tendedAt: number | undefined,\n\tbackendInfo: ToolBackendInfo | undefined,\n): void {\n\tconst state = component.state;\n\tcomponent.clear();\n\tconst output = getBashDisplayOutput(result, showImages, options.isPartial);\n\taddBashOutput(component, state, output, options);\n\taddBashOutputWarnings(component, result.details?.truncation, result.details?.fullOutputPath);\n\tif (startedAt !== undefined) {\n\t\tconst label = options.isPartial ? \"Elapsed\" : \"Took\";\n\t\tconst endTime = endedAt ?? Date.now();\n\t\tcomponent.addChild(\n\t\t\tnew Text(\n\t\t\t\t`\\n${theme.fg(options.isPartial ? \"muted\" : isError ? \"error\" : \"success\", `${label} ${formatDuration(endTime - startedAt)}`)}${formatBackendSuffix(backendInfo)}`,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t}\n\tif (!options.expanded && output) {\n\t\tcomponent.addChild({\n\t\t\trender: (width) => {\n\t\t\t\tif (!state.cachedSkipped || width < 1) return [];\n\t\t\t\tconst expandKey = keyText(\"app.tools.expand\");\n\t\t\t\tconst hint =\n\t\t\t\t\ttheme.fg(\"warning\", `${state.cachedSkipped} lines hidden`) +\n\t\t\t\t\t(expandKey ? theme.fg(\"accent\", ` · ${expandKey} to expand`) : \"\");\n\t\t\t\treturn [\"\", truncateToWidth(hint, width, \"...\")];\n\t\t\t},\n\t\t\tinvalidate: () => {},\n\t\t});\n\t}\n}\n\nfunction appendBashStatus(text: string, status: string): string {\n\treturn `${text ? `${text}\\n\\n` : \"\"}${status}`;\n}\n\nfunction throwBashExecutionError(error: unknown, outputText: string): never {\n\tif (error instanceof Error && error.message === \"aborted\") {\n\t\tthrow new Error(appendBashStatus(outputText, \"Command aborted\"));\n\t}\n\tif (error instanceof Error && error.message.startsWith(\"timeout:\")) {\n\t\tconst timeoutSeconds = error.message.split(\":\")[1];\n\t\tthrow new Error(appendBashStatus(outputText, `Command timed out after ${timeoutSeconds} seconds`));\n\t}\n\tthrow error;\n}\n\nexport type BashToolDefinition = ToolDefinition<typeof bashSchema, BashToolDetails | undefined, BashRenderState>;\n\nexport function createBashToolDefinition(operations: ToolOperations, options?: BashToolOptions): BashToolDefinition {\n\tconst ops = operations;\n\tconst commandPrefix = options?.commandPrefix;\n\tconst exposeSessionEnvironment = options?.exposeSessionEnvironment ?? true;\n\tconst spawnHook = options?.spawnHook;\n\treturn {\n\t\tname: \"bash\",\n\t\tlabel: \"bash\",\n\t\tdescription: `Execute a bash command in the current working directory. Returns stdout and stderr. Output is truncated to last ${DEFAULT_MAX_LINES} lines or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first). If truncated, full output is saved to a temp file. Optionally provide a timeout in seconds.`,\n\t\tpromptSnippet: \"Execute bash commands (ls, grep, find, etc.)\",\n\t\tpromptGuidelines: exposeSessionEnvironment\n\t\t\t? [\"Inspect GRIP_* environment variables for current model and session details.\"]\n\t\t\t: undefined,\n\t\tparameters: bashSchema,\n\t\tasync execute(_toolCallId, { command, timeout }: BashToolInput, signal?: AbortSignal, onUpdate?, ctx?) {\n\t\t\tconst resolvedCommand = commandPrefix ? `${commandPrefix}\\n${command}` : command;\n\t\t\tconst spawnContext = resolveSpawnContext(resolvedCommand, ops.cwd, spawnHook, exposeSessionEnvironment, ctx);\n\t\t\tconst output = new OutputAccumulator({ tempFilePrefix: \"grip-bash\" });\n\t\t\tlet updateTimer: NodeJS.Timeout | undefined;\n\t\t\tlet updateDirty = false;\n\t\t\tlet lastUpdateAt = 0;\n\n\t\t\tconst emitOutputUpdate = () => {\n\t\t\t\tif (!onUpdate || !updateDirty) return;\n\t\t\t\tupdateDirty = false;\n\t\t\t\tlastUpdateAt = Date.now();\n\t\t\t\tconst snapshot = output.snapshot({ persistIfTruncated: true });\n\t\t\t\tonUpdate({\n\t\t\t\t\tcontent: [{ type: \"text\", text: snapshot.content || \"\" }],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\ttruncation: snapshot.truncation.truncated ? snapshot.truncation : undefined,\n\t\t\t\t\t\tfullOutputPath: snapshot.fullOutputPath,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst clearUpdateTimer = () => {\n\t\t\t\tif (updateTimer) {\n\t\t\t\t\tclearTimeout(updateTimer);\n\t\t\t\t\tupdateTimer = undefined;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst scheduleOutputUpdate = () => {\n\t\t\t\tif (!onUpdate) return;\n\t\t\t\tupdateDirty = true;\n\t\t\t\tconst delay = BASH_UPDATE_THROTTLE_MS - (Date.now() - lastUpdateAt);\n\t\t\t\tif (delay <= 0) {\n\t\t\t\t\tclearUpdateTimer();\n\t\t\t\t\temitOutputUpdate();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tupdateTimer ??= setTimeout(() => {\n\t\t\t\t\tupdateTimer = undefined;\n\t\t\t\t\temitOutputUpdate();\n\t\t\t\t}, delay);\n\t\t\t};\n\n\t\t\tif (onUpdate) {\n\t\t\t\tonUpdate({ content: [], details: undefined });\n\t\t\t}\n\n\t\t\tconst handleData = (data: Buffer) => {\n\t\t\t\toutput.append(data);\n\t\t\t\tscheduleOutputUpdate();\n\t\t\t};\n\n\t\t\tconst finishOutput = async () => {\n\t\t\t\toutput.finish();\n\t\t\t\tclearUpdateTimer();\n\t\t\t\temitOutputUpdate();\n\t\t\t\tconst snapshot = output.snapshot({ persistIfTruncated: true });\n\t\t\t\tawait output.closeTempFile();\n\t\t\t\treturn snapshot;\n\t\t\t};\n\n\t\t\tconst formatOutput = (snapshot: OutputSnapshot, emptyText = \"(no output)\") => {\n\t\t\t\tconst truncation = snapshot.truncation;\n\t\t\t\tlet text = snapshot.content || emptyText;\n\t\t\t\tlet details: BashToolDetails | undefined;\n\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\tdetails = { truncation, fullOutputPath: snapshot.fullOutputPath };\n\t\t\t\t\tconst startLine = truncation.totalLines - truncation.outputLines + 1;\n\t\t\t\t\tconst endLine = truncation.totalLines;\n\t\t\t\t\tif (truncation.lastLinePartial) {\n\t\t\t\t\t\tconst lastLineSize = formatSize(output.getLastLineBytes());\n\t\t\t\t\t\ttext += `\\n\\n[Showing last ${formatSize(truncation.outputBytes)} of line ${endLine} (line is ${lastLineSize}). Full output: ${snapshot.fullOutputPath}]`;\n\t\t\t\t\t} else if (truncation.truncatedBy === \"lines\") {\n\t\t\t\t\t\ttext += `\\n\\n[Showing lines ${startLine}-${endLine} of ${truncation.totalLines}. Full output: ${snapshot.fullOutputPath}]`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `\\n\\n[Showing lines ${startLine}-${endLine} of ${truncation.totalLines} (${formatSize(DEFAULT_MAX_BYTES)} limit). Full output: ${snapshot.fullOutputPath}]`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { text, details };\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tlet exitCode: number | null;\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await ops.exec(spawnContext.command, {\n\t\t\t\t\t\tcwd: spawnContext.cwd,\n\t\t\t\t\t\tonData: handleData,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\ttimeout,\n\t\t\t\t\t\tenv: spawnContext.env,\n\t\t\t\t\t});\n\t\t\t\t\texitCode = result.exitCode;\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst snapshot = await finishOutput();\n\t\t\t\t\tconst { text } = formatOutput(snapshot, \"\");\n\t\t\t\t\tthrowBashExecutionError(err, text);\n\t\t\t\t}\n\n\t\t\t\tconst snapshot = await finishOutput();\n\t\t\t\tconst { text: outputText, details } = formatOutput(snapshot);\n\t\t\t\tif (exitCode !== 0 && exitCode !== null) {\n\t\t\t\t\tthrow new Error(appendBashStatus(outputText, `Command exited with code ${exitCode}`));\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: outputText }], details };\n\t\t\t} finally {\n\t\t\t\tclearUpdateTimer();\n\t\t\t}\n\t\t},\n\t\trenderCall(args, _theme, context) {\n\t\t\tconst state = context.state;\n\t\t\tif (context.executionStarted && state.startedAt === undefined) {\n\t\t\t\tstate.startedAt = Date.now();\n\t\t\t\tstate.endedAt = undefined;\n\t\t\t}\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatBashCall(args, ops.getBackendInfo?.()));\n\t\t\treturn text;\n\t\t},\n\t\trenderResult(result, options, _theme, context) {\n\t\t\tconst state = context.state;\n\t\t\tif (state.startedAt !== undefined && options.isPartial && !state.interval) {\n\t\t\t\tstate.interval = setInterval(() => context.invalidate(), 1000);\n\t\t\t}\n\t\t\tif (!options.isPartial || context.isError) {\n\t\t\t\tstate.endedAt ??= Date.now();\n\t\t\t\tif (state.interval) {\n\t\t\t\t\tclearInterval(state.interval);\n\t\t\t\t\tstate.interval = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst component =\n\t\t\t\t(context.lastComponent as BashResultRenderComponent | undefined) ?? new BashResultRenderComponent();\n\t\t\trebuildBashResultRenderComponent(\n\t\t\t\tcomponent,\n\t\t\t\tresult as any,\n\t\t\t\toptions,\n\t\t\t\tcontext.isError,\n\t\t\t\tcontext.showImages,\n\t\t\t\tstate.startedAt,\n\t\t\t\tstate.endedAt,\n\t\t\t\tops.getBackendInfo?.(),\n\t\t\t);\n\t\t\tcomponent.invalidate();\n\t\t\treturn component;\n\t\t},\n\t};\n}\n\nexport function createBashTool(operations: ToolOperations, options?: BashToolOptions): AgentTool<typeof bashSchema> {\n\treturn wrapToolDefinition(createBashToolDefinition(operations, options));\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import type { Static } from "typebox";
2
+ import { Type } from "typebox";
3
+ import type { ToolDefinition } from "../extensions/types.ts";
4
+ import type { ReadonlySession } from "../session/session.ts";
5
+ import type { SessionEntry } from "../session/types.ts";
6
+ declare const schema: Type.TObject<{
7
+ startEntryId: Type.TString;
8
+ endEntryId: Type.TOptional<Type.TString>;
9
+ summary: Type.TString;
10
+ }>;
11
+ export type CompressContextInput = Static<typeof schema>;
12
+ export interface PendingContextCompression {
13
+ toolCallId: string;
14
+ startEntryId: string;
15
+ endEntryId?: string;
16
+ summary: string;
17
+ assistantEntryId: string;
18
+ }
19
+ /** Collect entries in model-context order, excluding the currently executing tool call. */
20
+ export declare function getCompressibleEntries(session: ReadonlySession, toolCallId: string): SessionEntry[];
21
+ /** Validate a detector suggestion against the live branch, returning a reason for a corrective retry. */
22
+ export declare function getSuggestedCompressionRangeError(session: ReadonlySession, startEntryId: string, endEntryId: string): string | undefined;
23
+ /** Validate an advisory against the current branch before showing it to the primary agent. */
24
+ export declare function isValidSuggestedCompressionRange(session: ReadonlySession, startEntryId: string, endEntryId: string): boolean;
25
+ export declare function createCompressContextToolDefinition(session: ReadonlySession, schedule: (request: PendingContextCompression) => void): ToolDefinition<typeof schema>;
26
+ export {};
27
+ //# sourceMappingURL=compress-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress-context.d.ts","sourceRoot":"","sources":["../../../src/core/tools/compress-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,QAAA,MAAM,MAAM;;;;EAYX,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC;AACzD,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AA0BD,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAInG;AAqCD,yGAAyG;AACzG,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAOpB;AAED,8FAA8F;AAC9F,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAChB,OAAO,CAET;AAED,wBAAgB,mCAAmC,CAClD,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,GACpD,cAAc,CAAC,OAAO,MAAM,CAAC,CAsD/B","sourcesContent":["import type { Static } from \"typebox\";\nimport { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { HOOK_EXECUTION_CUSTOM_TYPE } from \"../hooks/types.ts\";\nimport { STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE } from \"../messages.ts\";\nimport { getLatestCompactionEntry, projectSessionContextEntries } from \"../session/context.ts\";\nimport type { ReadonlySession } from \"../session/session.ts\";\nimport type { SessionEntry } from \"../session/types.ts\";\nimport { abortIf } from \"./runtime.ts\";\n\nconst schema = Type.Object(\n\t{\n\t\tstartEntryId: Type.String({ description: \"ID of the first message to replace\" }),\n\t\tendEntryId: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Inclusive last message to replace; must precede the current user request. Omit to compress through the last eligible entry.\",\n\t\t\t}),\n\t\t),\n\t\tsummary: Type.String({ description: \"Replacement context for the selected range\" }),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type CompressContextInput = Static<typeof schema>;\nexport interface PendingContextCompression {\n\ttoolCallId: string;\n\tstartEntryId: string;\n\tendEntryId?: string;\n\tsummary: string;\n\tassistantEntryId: string;\n}\n\nfunction isContextEntry(entry: SessionEntry, compactionId: string | undefined, toolCallId: string): boolean {\n\tif (entry.type === \"custom_message\") {\n\t\treturn (\n\t\t\tentry.customType !== STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE &&\n\t\t\tentry.customType !== HOOK_EXECUTION_CUSTOM_TYPE\n\t\t);\n\t}\n\tif (entry.type === \"compaction\") return entry.id === compactionId && entry.summary.length > 0;\n\tif (entry.type === \"branch_summary\") return true;\n\tif (entry.type !== \"message\") return false;\n\tconst message = entry.message;\n\tif (message.role === \"bashExecution\") return !message.excludeFromContext;\n\tif (message.role === \"custom\") {\n\t\treturn (\n\t\t\tmessage.customType !== STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE &&\n\t\t\tmessage.customType !== HOOK_EXECUTION_CUSTOM_TYPE\n\t\t);\n\t}\n\tif (message.role === \"assistant\") {\n\t\treturn !message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId);\n\t}\n\treturn true;\n}\n\n/** Collect entries in model-context order, excluding the currently executing tool call. */\nexport function getCompressibleEntries(session: ReadonlySession, toolCallId: string): SessionEntry[] {\n\tconst path = session.getBranch();\n\tconst compaction = getLatestCompactionEntry(path);\n\treturn projectSessionContextEntries(path).filter((entry) => isContextEntry(entry, compaction?.id, toolCallId));\n}\n\nfunction hasUnmatchedToolCall(entries: SessionEntry[]): boolean {\n\tconst pending = new Set<string>();\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tif (entry.message.role === \"assistant\") {\n\t\t\tfor (const block of entry.message.content) {\n\t\t\t\tif (block.type === \"toolCall\") pending.add(block.id);\n\t\t\t}\n\t\t} else if (entry.message.role === \"toolResult\") {\n\t\t\tpending.delete(entry.message.toolCallId);\n\t\t}\n\t}\n\treturn pending.size > 0;\n}\n\nfunction validateCompressionRange(entries: SessionEntry[], startEntryId: string, endEntryId?: string): void {\n\tconst startIndex = entries.findIndex((entry) => entry.id === startEntryId);\n\tif (startIndex < 0) throw new Error(\"startEntryId must be a message in the current model context.\");\n\tconst endIndex = endEntryId ? entries.findIndex((entry) => entry.id === endEntryId) : entries.length - 1;\n\tif (endIndex < 0) throw new Error(\"endEntryId must be a message in the current model context.\");\n\tif (endIndex < startIndex) throw new Error(\"endEntryId must not precede startEntryId.\");\n\tconst start = entries[startIndex];\n\tif (start.type === \"message\" && start.message.role === \"toolResult\") {\n\t\tthrow new Error(\"Cannot start compression at a tool result; start at its assistant tool call instead.\");\n\t}\n\tif (hasUnmatchedToolCall(entries.slice(0, startIndex))) {\n\t\tthrow new Error(\"Cannot leave an unmatched tool call in the preserved prefix; start at its assistant message.\");\n\t}\n\tif (endIndex - startIndex + 1 < 2)\n\t\tthrow new Error(\"compress_context requires at least two messages in the selected range.\");\n\tif (hasUnmatchedToolCall(entries.slice(startIndex, endIndex + 1))) {\n\t\tthrow new Error(\"Cannot split a tool call from its result; include all results in the selected range.\");\n\t}\n}\n\n/** Validate a detector suggestion against the live branch, returning a reason for a corrective retry. */\nexport function getSuggestedCompressionRangeError(\n\tsession: ReadonlySession,\n\tstartEntryId: string,\n\tendEntryId: string,\n): string | undefined {\n\ttry {\n\t\tvalidateCompressionRange(getCompressibleEntries(session, \"\"), startEntryId, endEntryId);\n\t\treturn undefined;\n\t} catch (error) {\n\t\treturn error instanceof Error ? error.message : \"Invalid range.\";\n\t}\n}\n\n/** Validate an advisory against the current branch before showing it to the primary agent. */\nexport function isValidSuggestedCompressionRange(\n\tsession: ReadonlySession,\n\tstartEntryId: string,\n\tendEntryId: string,\n): boolean {\n\treturn getSuggestedCompressionRangeError(session, startEntryId, endEntryId) === undefined;\n}\n\nexport function createCompressContextToolDefinition(\n\tsession: ReadonlySession,\n\tschedule: (request: PendingContextCompression) => void,\n): ToolDefinition<typeof schema> {\n\treturn {\n\t\tname: \"compress_context\",\n\t\tlabel: \"compress_context\",\n\t\tdescription:\n\t\t\t\"Replace at least two messages from startEntryId through optional inclusive endEntryId with your own summary. endEntryId must be before the current user request; do not use the current user's ID from context metadata as the end. Omit endEntryId to compress through the last entry before that request. The earlier prefix, current request, tool call, result, and any later messages remain in order. Use a user or assistant tool-call entry ID from model-only context metadata for the start, not a tool-result ID.\",\n\t\tpromptSnippet: \"Summarize a bounded range or the active session tail\",\n\t\tpromptGuidelines: [\n\t\t\t\"Pass startEntryId and a non-empty summary; add endEntryId to retain later messages. Keep tool calls paired with their results and preserve important decisions.\",\n\t\t],\n\t\tparameters: schema,\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(toolCallId, { startEntryId, endEntryId, summary }: CompressContextInput, signal) {\n\t\t\tabortIf(signal);\n\t\t\tif (!startEntryId || !summary.trim()) {\n\t\t\t\tthrow new Error(\"Provide startEntryId and a non-empty summary to compress.\");\n\t\t\t}\n\t\t\tconst assistant = session.getLeafEntry();\n\t\t\tconst branch = session.getBranch();\n\t\t\tconst isCurrentCall =\n\t\t\t\tassistant?.type === \"message\" &&\n\t\t\t\tassistant.message.role === \"assistant\" &&\n\t\t\t\tassistant.message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId);\n\t\t\tconst triggerIndex = isCurrentCall\n\t\t\t\t? branch\n\t\t\t\t\t\t.slice(0, -1)\n\t\t\t\t\t\t.map((entry) => entry.type === \"message\" && entry.message.role === \"user\")\n\t\t\t\t\t\t.lastIndexOf(true)\n\t\t\t\t: -1;\n\t\t\tconst eligibleIds = new Set(branch.slice(0, triggerIndex).map((entry) => entry.id));\n\t\t\tif (endEntryId && triggerIndex >= 0 && endEntryId === branch[triggerIndex]?.id) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"endEntryId is the current user request; omit endEntryId to compress through the last entry before it.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst entries = getCompressibleEntries(session, toolCallId).filter(\n\t\t\t\t(entry) => triggerIndex < 0 || eligibleIds.has(entry.id),\n\t\t\t);\n\t\t\tvalidateCompressionRange(entries, startEntryId, endEntryId);\n\t\t\tif (\n\t\t\t\tassistant?.type !== \"message\" ||\n\t\t\t\tassistant.message.role !== \"assistant\" ||\n\t\t\t\tassistant.message.content.filter((block) => block.type === \"toolCall\").length !== 1 ||\n\t\t\t\t!assistant.message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId)\n\t\t\t)\n\t\t\t\tthrow new Error(\"compress_context must be the only tool call in its assistant message.\");\n\t\t\tabortIf(signal);\n\t\t\tschedule({ toolCallId, startEntryId, endEntryId, summary: summary.trim(), assistantEntryId: assistant.id });\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Compression complete. Continue with the current request.\" }],\n\t\t\t\tdetails: undefined,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
@@ -0,0 +1,142 @@
1
+ import { Type } from "typebox";
2
+ import { HOOK_EXECUTION_CUSTOM_TYPE } from "../hooks/types.js";
3
+ import { STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE } from "../messages.js";
4
+ import { getLatestCompactionEntry, projectSessionContextEntries } from "../session/context.js";
5
+ import { abortIf } from "./runtime.js";
6
+ const schema = Type.Object({
7
+ startEntryId: Type.String({ description: "ID of the first message to replace" }),
8
+ endEntryId: Type.Optional(Type.String({
9
+ description: "Inclusive last message to replace; must precede the current user request. Omit to compress through the last eligible entry.",
10
+ })),
11
+ summary: Type.String({ description: "Replacement context for the selected range" }),
12
+ }, { additionalProperties: false });
13
+ function isContextEntry(entry, compactionId, toolCallId) {
14
+ if (entry.type === "custom_message") {
15
+ return (entry.customType !== STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE &&
16
+ entry.customType !== HOOK_EXECUTION_CUSTOM_TYPE);
17
+ }
18
+ if (entry.type === "compaction")
19
+ return entry.id === compactionId && entry.summary.length > 0;
20
+ if (entry.type === "branch_summary")
21
+ return true;
22
+ if (entry.type !== "message")
23
+ return false;
24
+ const message = entry.message;
25
+ if (message.role === "bashExecution")
26
+ return !message.excludeFromContext;
27
+ if (message.role === "custom") {
28
+ return (message.customType !== STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE &&
29
+ message.customType !== HOOK_EXECUTION_CUSTOM_TYPE);
30
+ }
31
+ if (message.role === "assistant") {
32
+ return !message.content.some((block) => block.type === "toolCall" && block.id === toolCallId);
33
+ }
34
+ return true;
35
+ }
36
+ /** Collect entries in model-context order, excluding the currently executing tool call. */
37
+ export function getCompressibleEntries(session, toolCallId) {
38
+ const path = session.getBranch();
39
+ const compaction = getLatestCompactionEntry(path);
40
+ return projectSessionContextEntries(path).filter((entry) => isContextEntry(entry, compaction?.id, toolCallId));
41
+ }
42
+ function hasUnmatchedToolCall(entries) {
43
+ const pending = new Set();
44
+ for (const entry of entries) {
45
+ if (entry.type !== "message")
46
+ continue;
47
+ if (entry.message.role === "assistant") {
48
+ for (const block of entry.message.content) {
49
+ if (block.type === "toolCall")
50
+ pending.add(block.id);
51
+ }
52
+ }
53
+ else if (entry.message.role === "toolResult") {
54
+ pending.delete(entry.message.toolCallId);
55
+ }
56
+ }
57
+ return pending.size > 0;
58
+ }
59
+ function validateCompressionRange(entries, startEntryId, endEntryId) {
60
+ const startIndex = entries.findIndex((entry) => entry.id === startEntryId);
61
+ if (startIndex < 0)
62
+ throw new Error("startEntryId must be a message in the current model context.");
63
+ const endIndex = endEntryId ? entries.findIndex((entry) => entry.id === endEntryId) : entries.length - 1;
64
+ if (endIndex < 0)
65
+ throw new Error("endEntryId must be a message in the current model context.");
66
+ if (endIndex < startIndex)
67
+ throw new Error("endEntryId must not precede startEntryId.");
68
+ const start = entries[startIndex];
69
+ if (start.type === "message" && start.message.role === "toolResult") {
70
+ throw new Error("Cannot start compression at a tool result; start at its assistant tool call instead.");
71
+ }
72
+ if (hasUnmatchedToolCall(entries.slice(0, startIndex))) {
73
+ throw new Error("Cannot leave an unmatched tool call in the preserved prefix; start at its assistant message.");
74
+ }
75
+ if (endIndex - startIndex + 1 < 2)
76
+ throw new Error("compress_context requires at least two messages in the selected range.");
77
+ if (hasUnmatchedToolCall(entries.slice(startIndex, endIndex + 1))) {
78
+ throw new Error("Cannot split a tool call from its result; include all results in the selected range.");
79
+ }
80
+ }
81
+ /** Validate a detector suggestion against the live branch, returning a reason for a corrective retry. */
82
+ export function getSuggestedCompressionRangeError(session, startEntryId, endEntryId) {
83
+ try {
84
+ validateCompressionRange(getCompressibleEntries(session, ""), startEntryId, endEntryId);
85
+ return undefined;
86
+ }
87
+ catch (error) {
88
+ return error instanceof Error ? error.message : "Invalid range.";
89
+ }
90
+ }
91
+ /** Validate an advisory against the current branch before showing it to the primary agent. */
92
+ export function isValidSuggestedCompressionRange(session, startEntryId, endEntryId) {
93
+ return getSuggestedCompressionRangeError(session, startEntryId, endEntryId) === undefined;
94
+ }
95
+ export function createCompressContextToolDefinition(session, schedule) {
96
+ return {
97
+ name: "compress_context",
98
+ label: "compress_context",
99
+ description: "Replace at least two messages from startEntryId through optional inclusive endEntryId with your own summary. endEntryId must be before the current user request; do not use the current user's ID from context metadata as the end. Omit endEntryId to compress through the last entry before that request. The earlier prefix, current request, tool call, result, and any later messages remain in order. Use a user or assistant tool-call entry ID from model-only context metadata for the start, not a tool-result ID.",
100
+ promptSnippet: "Summarize a bounded range or the active session tail",
101
+ promptGuidelines: [
102
+ "Pass startEntryId and a non-empty summary; add endEntryId to retain later messages. Keep tool calls paired with their results and preserve important decisions.",
103
+ ],
104
+ parameters: schema,
105
+ executionMode: "sequential",
106
+ async execute(toolCallId, { startEntryId, endEntryId, summary }, signal) {
107
+ abortIf(signal);
108
+ if (!startEntryId || !summary.trim()) {
109
+ throw new Error("Provide startEntryId and a non-empty summary to compress.");
110
+ }
111
+ const assistant = session.getLeafEntry();
112
+ const branch = session.getBranch();
113
+ const isCurrentCall = assistant?.type === "message" &&
114
+ assistant.message.role === "assistant" &&
115
+ assistant.message.content.some((block) => block.type === "toolCall" && block.id === toolCallId);
116
+ const triggerIndex = isCurrentCall
117
+ ? branch
118
+ .slice(0, -1)
119
+ .map((entry) => entry.type === "message" && entry.message.role === "user")
120
+ .lastIndexOf(true)
121
+ : -1;
122
+ const eligibleIds = new Set(branch.slice(0, triggerIndex).map((entry) => entry.id));
123
+ if (endEntryId && triggerIndex >= 0 && endEntryId === branch[triggerIndex]?.id) {
124
+ throw new Error("endEntryId is the current user request; omit endEntryId to compress through the last entry before it.");
125
+ }
126
+ const entries = getCompressibleEntries(session, toolCallId).filter((entry) => triggerIndex < 0 || eligibleIds.has(entry.id));
127
+ validateCompressionRange(entries, startEntryId, endEntryId);
128
+ if (assistant?.type !== "message" ||
129
+ assistant.message.role !== "assistant" ||
130
+ assistant.message.content.filter((block) => block.type === "toolCall").length !== 1 ||
131
+ !assistant.message.content.some((block) => block.type === "toolCall" && block.id === toolCallId))
132
+ throw new Error("compress_context must be the only tool call in its assistant message.");
133
+ abortIf(signal);
134
+ schedule({ toolCallId, startEntryId, endEntryId, summary: summary.trim(), assistantEntryId: assistant.id });
135
+ return {
136
+ content: [{ type: "text", text: "Compression complete. Continue with the current request." }],
137
+ details: undefined,
138
+ };
139
+ },
140
+ };
141
+ }
142
+ //# sourceMappingURL=compress-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress-context.js","sourceRoot":"","sources":["../../../src/core/tools/compress-context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Static } from \"typebox\";\nimport { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { HOOK_EXECUTION_CUSTOM_TYPE } from \"../hooks/types.ts\";\nimport { STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE } from \"../messages.ts\";\nimport { getLatestCompactionEntry, projectSessionContextEntries } from \"../session/context.ts\";\nimport type { ReadonlySession } from \"../session/session.ts\";\nimport type { SessionEntry } from \"../session/types.ts\";\nimport { abortIf } from \"./runtime.ts\";\n\nconst schema = Type.Object(\n\t{\n\t\tstartEntryId: Type.String({ description: \"ID of the first message to replace\" }),\n\t\tendEntryId: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Inclusive last message to replace; must precede the current user request. Omit to compress through the last eligible entry.\",\n\t\t\t}),\n\t\t),\n\t\tsummary: Type.String({ description: \"Replacement context for the selected range\" }),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type CompressContextInput = Static<typeof schema>;\nexport interface PendingContextCompression {\n\ttoolCallId: string;\n\tstartEntryId: string;\n\tendEntryId?: string;\n\tsummary: string;\n\tassistantEntryId: string;\n}\n\nfunction isContextEntry(entry: SessionEntry, compactionId: string | undefined, toolCallId: string): boolean {\n\tif (entry.type === \"custom_message\") {\n\t\treturn (\n\t\t\tentry.customType !== STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE &&\n\t\t\tentry.customType !== HOOK_EXECUTION_CUSTOM_TYPE\n\t\t);\n\t}\n\tif (entry.type === \"compaction\") return entry.id === compactionId && entry.summary.length > 0;\n\tif (entry.type === \"branch_summary\") return true;\n\tif (entry.type !== \"message\") return false;\n\tconst message = entry.message;\n\tif (message.role === \"bashExecution\") return !message.excludeFromContext;\n\tif (message.role === \"custom\") {\n\t\treturn (\n\t\t\tmessage.customType !== STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE &&\n\t\t\tmessage.customType !== HOOK_EXECUTION_CUSTOM_TYPE\n\t\t);\n\t}\n\tif (message.role === \"assistant\") {\n\t\treturn !message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId);\n\t}\n\treturn true;\n}\n\n/** Collect entries in model-context order, excluding the currently executing tool call. */\nexport function getCompressibleEntries(session: ReadonlySession, toolCallId: string): SessionEntry[] {\n\tconst path = session.getBranch();\n\tconst compaction = getLatestCompactionEntry(path);\n\treturn projectSessionContextEntries(path).filter((entry) => isContextEntry(entry, compaction?.id, toolCallId));\n}\n\nfunction hasUnmatchedToolCall(entries: SessionEntry[]): boolean {\n\tconst pending = new Set<string>();\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tif (entry.message.role === \"assistant\") {\n\t\t\tfor (const block of entry.message.content) {\n\t\t\t\tif (block.type === \"toolCall\") pending.add(block.id);\n\t\t\t}\n\t\t} else if (entry.message.role === \"toolResult\") {\n\t\t\tpending.delete(entry.message.toolCallId);\n\t\t}\n\t}\n\treturn pending.size > 0;\n}\n\nfunction validateCompressionRange(entries: SessionEntry[], startEntryId: string, endEntryId?: string): void {\n\tconst startIndex = entries.findIndex((entry) => entry.id === startEntryId);\n\tif (startIndex < 0) throw new Error(\"startEntryId must be a message in the current model context.\");\n\tconst endIndex = endEntryId ? entries.findIndex((entry) => entry.id === endEntryId) : entries.length - 1;\n\tif (endIndex < 0) throw new Error(\"endEntryId must be a message in the current model context.\");\n\tif (endIndex < startIndex) throw new Error(\"endEntryId must not precede startEntryId.\");\n\tconst start = entries[startIndex];\n\tif (start.type === \"message\" && start.message.role === \"toolResult\") {\n\t\tthrow new Error(\"Cannot start compression at a tool result; start at its assistant tool call instead.\");\n\t}\n\tif (hasUnmatchedToolCall(entries.slice(0, startIndex))) {\n\t\tthrow new Error(\"Cannot leave an unmatched tool call in the preserved prefix; start at its assistant message.\");\n\t}\n\tif (endIndex - startIndex + 1 < 2)\n\t\tthrow new Error(\"compress_context requires at least two messages in the selected range.\");\n\tif (hasUnmatchedToolCall(entries.slice(startIndex, endIndex + 1))) {\n\t\tthrow new Error(\"Cannot split a tool call from its result; include all results in the selected range.\");\n\t}\n}\n\n/** Validate a detector suggestion against the live branch, returning a reason for a corrective retry. */\nexport function getSuggestedCompressionRangeError(\n\tsession: ReadonlySession,\n\tstartEntryId: string,\n\tendEntryId: string,\n): string | undefined {\n\ttry {\n\t\tvalidateCompressionRange(getCompressibleEntries(session, \"\"), startEntryId, endEntryId);\n\t\treturn undefined;\n\t} catch (error) {\n\t\treturn error instanceof Error ? error.message : \"Invalid range.\";\n\t}\n}\n\n/** Validate an advisory against the current branch before showing it to the primary agent. */\nexport function isValidSuggestedCompressionRange(\n\tsession: ReadonlySession,\n\tstartEntryId: string,\n\tendEntryId: string,\n): boolean {\n\treturn getSuggestedCompressionRangeError(session, startEntryId, endEntryId) === undefined;\n}\n\nexport function createCompressContextToolDefinition(\n\tsession: ReadonlySession,\n\tschedule: (request: PendingContextCompression) => void,\n): ToolDefinition<typeof schema> {\n\treturn {\n\t\tname: \"compress_context\",\n\t\tlabel: \"compress_context\",\n\t\tdescription:\n\t\t\t\"Replace at least two messages from startEntryId through optional inclusive endEntryId with your own summary. endEntryId must be before the current user request; do not use the current user's ID from context metadata as the end. Omit endEntryId to compress through the last entry before that request. The earlier prefix, current request, tool call, result, and any later messages remain in order. Use a user or assistant tool-call entry ID from model-only context metadata for the start, not a tool-result ID.\",\n\t\tpromptSnippet: \"Summarize a bounded range or the active session tail\",\n\t\tpromptGuidelines: [\n\t\t\t\"Pass startEntryId and a non-empty summary; add endEntryId to retain later messages. Keep tool calls paired with their results and preserve important decisions.\",\n\t\t],\n\t\tparameters: schema,\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(toolCallId, { startEntryId, endEntryId, summary }: CompressContextInput, signal) {\n\t\t\tabortIf(signal);\n\t\t\tif (!startEntryId || !summary.trim()) {\n\t\t\t\tthrow new Error(\"Provide startEntryId and a non-empty summary to compress.\");\n\t\t\t}\n\t\t\tconst assistant = session.getLeafEntry();\n\t\t\tconst branch = session.getBranch();\n\t\t\tconst isCurrentCall =\n\t\t\t\tassistant?.type === \"message\" &&\n\t\t\t\tassistant.message.role === \"assistant\" &&\n\t\t\t\tassistant.message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId);\n\t\t\tconst triggerIndex = isCurrentCall\n\t\t\t\t? branch\n\t\t\t\t\t\t.slice(0, -1)\n\t\t\t\t\t\t.map((entry) => entry.type === \"message\" && entry.message.role === \"user\")\n\t\t\t\t\t\t.lastIndexOf(true)\n\t\t\t\t: -1;\n\t\t\tconst eligibleIds = new Set(branch.slice(0, triggerIndex).map((entry) => entry.id));\n\t\t\tif (endEntryId && triggerIndex >= 0 && endEntryId === branch[triggerIndex]?.id) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"endEntryId is the current user request; omit endEntryId to compress through the last entry before it.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst entries = getCompressibleEntries(session, toolCallId).filter(\n\t\t\t\t(entry) => triggerIndex < 0 || eligibleIds.has(entry.id),\n\t\t\t);\n\t\t\tvalidateCompressionRange(entries, startEntryId, endEntryId);\n\t\t\tif (\n\t\t\t\tassistant?.type !== \"message\" ||\n\t\t\t\tassistant.message.role !== \"assistant\" ||\n\t\t\t\tassistant.message.content.filter((block) => block.type === \"toolCall\").length !== 1 ||\n\t\t\t\t!assistant.message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId)\n\t\t\t)\n\t\t\t\tthrow new Error(\"compress_context must be the only tool call in its assistant message.\");\n\t\t\tabortIf(signal);\n\t\t\tschedule({ toolCallId, startEntryId, endEntryId, summary: summary.trim(), assistantEntryId: assistant.id });\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Compression complete. Continue with the current request.\" }],\n\t\t\t\tdetails: undefined,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}