@greppleai/grip 0.0.0-stage → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1057) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +725 -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 +11 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/bun/restore-sandbox-env.d.ts +13 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +32 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +70 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +441 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/config-selector.d.ts +14 -0
  20. package/dist/cli/config-selector.d.ts.map +1 -0
  21. package/dist/cli/config-selector.js +31 -0
  22. package/dist/cli/config-selector.js.map +1 -0
  23. package/dist/cli/file-processor.d.ts +15 -0
  24. package/dist/cli/file-processor.d.ts.map +1 -0
  25. package/dist/cli/file-processor.js +60 -0
  26. package/dist/cli/file-processor.js.map +1 -0
  27. package/dist/cli/initial-message.d.ts +18 -0
  28. package/dist/cli/initial-message.d.ts.map +1 -0
  29. package/dist/cli/initial-message.js +22 -0
  30. package/dist/cli/initial-message.js.map +1 -0
  31. package/dist/cli/list-models.d.ts +9 -0
  32. package/dist/cli/list-models.d.ts.map +1 -0
  33. package/dist/cli/list-models.js +98 -0
  34. package/dist/cli/list-models.js.map +1 -0
  35. package/dist/cli/session-picker.d.ts +9 -0
  36. package/dist/cli/session-picker.d.ts.map +1 -0
  37. package/dist/cli/session-picker.js +35 -0
  38. package/dist/cli/session-picker.js.map +1 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +14 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/config.d.ts +82 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +406 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/core/agent-session.d.ts +970 -0
  48. package/dist/core/agent-session.d.ts.map +1 -0
  49. package/dist/core/agent-session.js +5176 -0
  50. package/dist/core/agent-session.js.map +1 -0
  51. package/dist/core/auth-guidance.d.ts +5 -0
  52. package/dist/core/auth-guidance.d.ts.map +1 -0
  53. package/dist/core/auth-guidance.js +21 -0
  54. package/dist/core/auth-guidance.js.map +1 -0
  55. package/dist/core/auth-storage.d.ts +150 -0
  56. package/dist/core/auth-storage.d.ts.map +1 -0
  57. package/dist/core/auth-storage.js +557 -0
  58. package/dist/core/auth-storage.js.map +1 -0
  59. package/dist/core/bash-executor.d.ts +26 -0
  60. package/dist/core/bash-executor.d.ts.map +1 -0
  61. package/dist/core/bash-executor.js +99 -0
  62. package/dist/core/bash-executor.js.map +1 -0
  63. package/dist/core/compaction/branch-summarization.d.ts +83 -0
  64. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  65. package/dist/core/compaction/branch-summarization.js +220 -0
  66. package/dist/core/compaction/branch-summarization.js.map +1 -0
  67. package/dist/core/compaction/compaction.d.ts +65 -0
  68. package/dist/core/compaction/compaction.d.ts.map +1 -0
  69. package/dist/core/compaction/compaction.js +550 -0
  70. package/dist/core/compaction/compaction.js.map +1 -0
  71. package/dist/core/compaction/compression-detection-ledger.d.ts +34 -0
  72. package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -0
  73. package/dist/core/compaction/compression-detection-ledger.js +52 -0
  74. package/dist/core/compaction/compression-detection-ledger.js.map +1 -0
  75. package/dist/core/compaction/compression-detector.d.ts +71 -0
  76. package/dist/core/compaction/compression-detector.d.ts.map +1 -0
  77. package/dist/core/compaction/compression-detector.js +407 -0
  78. package/dist/core/compaction/compression-detector.js.map +1 -0
  79. package/dist/core/compaction/compression-economics.d.ts +55 -0
  80. package/dist/core/compaction/compression-economics.d.ts.map +1 -0
  81. package/dist/core/compaction/compression-economics.js +151 -0
  82. package/dist/core/compaction/compression-economics.js.map +1 -0
  83. package/dist/core/compaction/utils.d.ts +28 -0
  84. package/dist/core/compaction/utils.d.ts.map +1 -0
  85. package/dist/core/compaction/utils.js +165 -0
  86. package/dist/core/compaction/utils.js.map +1 -0
  87. package/dist/core/defaults.d.ts +3 -0
  88. package/dist/core/defaults.d.ts.map +1 -0
  89. package/dist/core/defaults.js +2 -0
  90. package/dist/core/defaults.js.map +1 -0
  91. package/dist/core/diagnostics.d.ts +18 -0
  92. package/dist/core/diagnostics.d.ts.map +1 -0
  93. package/dist/core/diagnostics.js +2 -0
  94. package/dist/core/diagnostics.js.map +1 -0
  95. package/dist/core/event-bus.d.ts +9 -0
  96. package/dist/core/event-bus.d.ts.map +1 -0
  97. package/dist/core/event-bus.js +25 -0
  98. package/dist/core/event-bus.js.map +1 -0
  99. package/dist/core/exec.d.ts +29 -0
  100. package/dist/core/exec.d.ts.map +1 -0
  101. package/dist/core/exec.js +75 -0
  102. package/dist/core/exec.js.map +1 -0
  103. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  104. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  105. package/dist/core/export-html/ansi-to-html.js +245 -0
  106. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  107. package/dist/core/export-html/index.d.ts +21 -0
  108. package/dist/core/export-html/index.d.ts.map +1 -0
  109. package/dist/core/export-html/index.js +230 -0
  110. package/dist/core/export-html/index.js.map +1 -0
  111. package/dist/core/export-html/template.css +1066 -0
  112. package/dist/core/export-html/template.html +55 -0
  113. package/dist/core/export-html/template.js +1864 -0
  114. package/dist/core/export-html/tool-renderer.d.ts +32 -0
  115. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  116. package/dist/core/export-html/tool-renderer.js +108 -0
  117. package/dist/core/export-html/tool-renderer.js.map +1 -0
  118. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  119. package/dist/core/export-html/vendor/marked.min.js +78 -0
  120. package/dist/core/extensions/loader.d.ts +24 -0
  121. package/dist/core/extensions/loader.d.ts.map +1 -0
  122. package/dist/core/extensions/loader.js +613 -0
  123. package/dist/core/extensions/loader.js.map +1 -0
  124. package/dist/core/extensions/runner.d.ts +160 -0
  125. package/dist/core/extensions/runner.d.ts.map +1 -0
  126. package/dist/core/extensions/runner.js +962 -0
  127. package/dist/core/extensions/runner.js.map +1 -0
  128. package/dist/core/extensions/types.d.ts +1311 -0
  129. package/dist/core/extensions/types.d.ts.map +1 -0
  130. package/dist/core/extensions/types.js +51 -0
  131. package/dist/core/extensions/types.js.map +1 -0
  132. package/dist/core/extensions/wrapper.d.ts +20 -0
  133. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  134. package/dist/core/extensions/wrapper.js +22 -0
  135. package/dist/core/extensions/wrapper.js.map +1 -0
  136. package/dist/core/footer-data-provider.d.ts +52 -0
  137. package/dist/core/footer-data-provider.d.ts.map +1 -0
  138. package/dist/core/footer-data-provider.js +318 -0
  139. package/dist/core/footer-data-provider.js.map +1 -0
  140. package/dist/core/grip-agent.d.ts +240 -0
  141. package/dist/core/grip-agent.d.ts.map +1 -0
  142. package/dist/core/grip-agent.js +1243 -0
  143. package/dist/core/grip-agent.js.map +1 -0
  144. package/dist/core/grip-manifest.d.ts +9 -0
  145. package/dist/core/grip-manifest.d.ts.map +1 -0
  146. package/dist/core/grip-manifest.js +25 -0
  147. package/dist/core/grip-manifest.js.map +1 -0
  148. package/dist/core/hooks/aggregate.d.ts +5 -0
  149. package/dist/core/hooks/aggregate.d.ts.map +1 -0
  150. package/dist/core/hooks/aggregate.js +226 -0
  151. package/dist/core/hooks/aggregate.js.map +1 -0
  152. package/dist/core/hooks/config.d.ts +14 -0
  153. package/dist/core/hooks/config.d.ts.map +1 -0
  154. package/dist/core/hooks/config.js +372 -0
  155. package/dist/core/hooks/config.js.map +1 -0
  156. package/dist/core/hooks/executor.d.ts +12 -0
  157. package/dist/core/hooks/executor.d.ts.map +1 -0
  158. package/dist/core/hooks/executor.js +708 -0
  159. package/dist/core/hooks/executor.js.map +1 -0
  160. package/dist/core/hooks/index.d.ts +9 -0
  161. package/dist/core/hooks/index.d.ts.map +1 -0
  162. package/dist/core/hooks/index.js +14 -0
  163. package/dist/core/hooks/index.js.map +1 -0
  164. package/dist/core/hooks/matcher.d.ts +10 -0
  165. package/dist/core/hooks/matcher.d.ts.map +1 -0
  166. package/dist/core/hooks/matcher.js +70 -0
  167. package/dist/core/hooks/matcher.js.map +1 -0
  168. package/dist/core/hooks/trust-store.d.ts +38 -0
  169. package/dist/core/hooks/trust-store.d.ts.map +1 -0
  170. package/dist/core/hooks/trust-store.js +167 -0
  171. package/dist/core/hooks/trust-store.js.map +1 -0
  172. package/dist/core/hooks/types.d.ts +234 -0
  173. package/dist/core/hooks/types.d.ts.map +1 -0
  174. package/dist/core/hooks/types.js +52 -0
  175. package/dist/core/hooks/types.js.map +1 -0
  176. package/dist/core/http-dispatcher.d.ts +21 -0
  177. package/dist/core/http-dispatcher.d.ts.map +1 -0
  178. package/dist/core/http-dispatcher.js +82 -0
  179. package/dist/core/http-dispatcher.js.map +1 -0
  180. package/dist/core/instruction-resource-loader.d.ts +81 -0
  181. package/dist/core/instruction-resource-loader.d.ts.map +1 -0
  182. package/dist/core/instruction-resource-loader.js +574 -0
  183. package/dist/core/instruction-resource-loader.js.map +1 -0
  184. package/dist/core/keybindings.d.ts +399 -0
  185. package/dist/core/keybindings.d.ts.map +1 -0
  186. package/dist/core/keybindings.js +299 -0
  187. package/dist/core/keybindings.js.map +1 -0
  188. package/dist/core/lsp/abort.d.ts +3 -0
  189. package/dist/core/lsp/abort.d.ts.map +1 -0
  190. package/dist/core/lsp/abort.js +28 -0
  191. package/dist/core/lsp/abort.js.map +1 -0
  192. package/dist/core/lsp/client.d.ts +108 -0
  193. package/dist/core/lsp/client.d.ts.map +1 -0
  194. package/dist/core/lsp/client.js +586 -0
  195. package/dist/core/lsp/client.js.map +1 -0
  196. package/dist/core/lsp/config-loader.d.ts +44 -0
  197. package/dist/core/lsp/config-loader.d.ts.map +1 -0
  198. package/dist/core/lsp/config-loader.js +223 -0
  199. package/dist/core/lsp/config-loader.js.map +1 -0
  200. package/dist/core/lsp/config.d.ts +134 -0
  201. package/dist/core/lsp/config.d.ts.map +1 -0
  202. package/dist/core/lsp/config.js +682 -0
  203. package/dist/core/lsp/config.js.map +1 -0
  204. package/dist/core/lsp/diagnostics.d.ts +18 -0
  205. package/dist/core/lsp/diagnostics.d.ts.map +1 -0
  206. package/dist/core/lsp/diagnostics.js +311 -0
  207. package/dist/core/lsp/diagnostics.js.map +1 -0
  208. package/dist/core/lsp/file-sync.d.ts +58 -0
  209. package/dist/core/lsp/file-sync.d.ts.map +1 -0
  210. package/dist/core/lsp/file-sync.js +432 -0
  211. package/dist/core/lsp/file-sync.js.map +1 -0
  212. package/dist/core/lsp/integration.d.ts +62 -0
  213. package/dist/core/lsp/integration.d.ts.map +1 -0
  214. package/dist/core/lsp/integration.js +145 -0
  215. package/dist/core/lsp/integration.js.map +1 -0
  216. package/dist/core/lsp/language-map.d.ts +54 -0
  217. package/dist/core/lsp/language-map.d.ts.map +1 -0
  218. package/dist/core/lsp/language-map.js +300 -0
  219. package/dist/core/lsp/language-map.js.map +1 -0
  220. package/dist/core/lsp/manager.d.ts +120 -0
  221. package/dist/core/lsp/manager.d.ts.map +1 -0
  222. package/dist/core/lsp/manager.js +636 -0
  223. package/dist/core/lsp/manager.js.map +1 -0
  224. package/dist/core/lsp/navigation.d.ts +32 -0
  225. package/dist/core/lsp/navigation.d.ts.map +1 -0
  226. package/dist/core/lsp/navigation.js +327 -0
  227. package/dist/core/lsp/navigation.js.map +1 -0
  228. package/dist/core/lsp/portable-path.d.ts +18 -0
  229. package/dist/core/lsp/portable-path.d.ts.map +1 -0
  230. package/dist/core/lsp/portable-path.js +83 -0
  231. package/dist/core/lsp/portable-path.js.map +1 -0
  232. package/dist/core/lsp/refactor.d.ts +32 -0
  233. package/dist/core/lsp/refactor.d.ts.map +1 -0
  234. package/dist/core/lsp/refactor.js +519 -0
  235. package/dist/core/lsp/refactor.js.map +1 -0
  236. package/dist/core/lsp/transport.d.ts +39 -0
  237. package/dist/core/lsp/transport.d.ts.map +1 -0
  238. package/dist/core/lsp/transport.js +261 -0
  239. package/dist/core/lsp/transport.js.map +1 -0
  240. package/dist/core/messages.d.ts +34 -0
  241. package/dist/core/messages.d.ts.map +1 -0
  242. package/dist/core/messages.js +140 -0
  243. package/dist/core/messages.js.map +1 -0
  244. package/dist/core/model-registry.d.ts +148 -0
  245. package/dist/core/model-registry.d.ts.map +1 -0
  246. package/dist/core/model-registry.js +812 -0
  247. package/dist/core/model-registry.js.map +1 -0
  248. package/dist/core/model-resolver.d.ts +115 -0
  249. package/dist/core/model-resolver.d.ts.map +1 -0
  250. package/dist/core/model-resolver.js +498 -0
  251. package/dist/core/model-resolver.js.map +1 -0
  252. package/dist/core/output-guard.d.ts +7 -0
  253. package/dist/core/output-guard.d.ts.map +1 -0
  254. package/dist/core/output-guard.js +89 -0
  255. package/dist/core/output-guard.js.map +1 -0
  256. package/dist/core/package-manager.d.ts +209 -0
  257. package/dist/core/package-manager.d.ts.map +1 -0
  258. package/dist/core/package-manager.js +2341 -0
  259. package/dist/core/package-manager.js.map +1 -0
  260. package/dist/core/prompt-templates.d.ts +57 -0
  261. package/dist/core/prompt-templates.d.ts.map +1 -0
  262. package/dist/core/prompt-templates.js +353 -0
  263. package/dist/core/prompt-templates.js.map +1 -0
  264. package/dist/core/provider-display-names.d.ts +2 -0
  265. package/dist/core/provider-display-names.d.ts.map +1 -0
  266. package/dist/core/provider-display-names.js +33 -0
  267. package/dist/core/provider-display-names.js.map +1 -0
  268. package/dist/core/remote-workspace-protocol/contract.d.ts +456 -0
  269. package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -0
  270. package/dist/core/remote-workspace-protocol/contract.js +809 -0
  271. package/dist/core/remote-workspace-protocol/contract.js.map +1 -0
  272. package/dist/core/remote-workspace-protocol/session.d.ts +247 -0
  273. package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -0
  274. package/dist/core/remote-workspace-protocol/session.js +1839 -0
  275. package/dist/core/remote-workspace-protocol/session.js.map +1 -0
  276. package/dist/core/resolve-config-value.d.ts +32 -0
  277. package/dist/core/resolve-config-value.d.ts.map +1 -0
  278. package/dist/core/resolve-config-value.js +257 -0
  279. package/dist/core/resolve-config-value.js.map +1 -0
  280. package/dist/core/resource-loader.d.ts +200 -0
  281. package/dist/core/resource-loader.d.ts.map +1 -0
  282. package/dist/core/resource-loader.js +1209 -0
  283. package/dist/core/resource-loader.js.map +1 -0
  284. package/dist/core/rules.d.ts +40 -0
  285. package/dist/core/rules.d.ts.map +1 -0
  286. package/dist/core/rules.js +57 -0
  287. package/dist/core/rules.js.map +1 -0
  288. package/dist/core/sandbox/command.d.ts +27 -0
  289. package/dist/core/sandbox/command.d.ts.map +1 -0
  290. package/dist/core/sandbox/command.js +124 -0
  291. package/dist/core/sandbox/command.js.map +1 -0
  292. package/dist/core/sandbox/docker.d.ts +169 -0
  293. package/dist/core/sandbox/docker.d.ts.map +1 -0
  294. package/dist/core/sandbox/docker.js +633 -0
  295. package/dist/core/sandbox/docker.js.map +1 -0
  296. package/dist/core/sandbox/lima.d.ts +38 -0
  297. package/dist/core/sandbox/lima.d.ts.map +1 -0
  298. package/dist/core/sandbox/lima.js +324 -0
  299. package/dist/core/sandbox/lima.js.map +1 -0
  300. package/dist/core/session/constants.d.ts +2 -0
  301. package/dist/core/session/constants.d.ts.map +1 -0
  302. package/dist/core/session/constants.js +2 -0
  303. package/dist/core/session/constants.js.map +1 -0
  304. package/dist/core/session/context-metadata.d.ts +5 -0
  305. package/dist/core/session/context-metadata.d.ts.map +1 -0
  306. package/dist/core/session/context-metadata.js +55 -0
  307. package/dist/core/session/context-metadata.js.map +1 -0
  308. package/dist/core/session/context.d.ts +14 -0
  309. package/dist/core/session/context.d.ts.map +1 -0
  310. package/dist/core/session/context.js +117 -0
  311. package/dist/core/session/context.js.map +1 -0
  312. package/dist/core/session/ids.d.ts +9 -0
  313. package/dist/core/session/ids.d.ts.map +1 -0
  314. package/dist/core/session/ids.js +21 -0
  315. package/dist/core/session/ids.js.map +1 -0
  316. package/dist/core/session/in-memory-session-manager.d.ts +17 -0
  317. package/dist/core/session/in-memory-session-manager.d.ts.map +1 -0
  318. package/dist/core/session/in-memory-session-manager.js +40 -0
  319. package/dist/core/session/in-memory-session-manager.js.map +1 -0
  320. package/dist/core/session/in-memory-session.d.ts +7 -0
  321. package/dist/core/session/in-memory-session.d.ts.map +1 -0
  322. package/dist/core/session/in-memory-session.js +11 -0
  323. package/dist/core/session/in-memory-session.js.map +1 -0
  324. package/dist/core/session/jsonl-errors.d.ts +36 -0
  325. package/dist/core/session/jsonl-errors.d.ts.map +1 -0
  326. package/dist/core/session/jsonl-errors.js +49 -0
  327. package/dist/core/session/jsonl-errors.js.map +1 -0
  328. package/dist/core/session/jsonl-helpers.d.ts +20 -0
  329. package/dist/core/session/jsonl-helpers.d.ts.map +1 -0
  330. package/dist/core/session/jsonl-helpers.js +21 -0
  331. package/dist/core/session/jsonl-helpers.js.map +1 -0
  332. package/dist/core/session/local-session-manager.d.ts +30 -0
  333. package/dist/core/session/local-session-manager.d.ts.map +1 -0
  334. package/dist/core/session/local-session-manager.js +205 -0
  335. package/dist/core/session/local-session-manager.js.map +1 -0
  336. package/dist/core/session/local-session.d.ts +9 -0
  337. package/dist/core/session/local-session.d.ts.map +1 -0
  338. package/dist/core/session/local-session.js +15 -0
  339. package/dist/core/session/local-session.js.map +1 -0
  340. package/dist/core/session/migrations.d.ts +11 -0
  341. package/dist/core/session/migrations.d.ts.map +1 -0
  342. package/dist/core/session/migrations.js +78 -0
  343. package/dist/core/session/migrations.js.map +1 -0
  344. package/dist/core/session/remote-session-client.d.ts +83 -0
  345. package/dist/core/session/remote-session-client.d.ts.map +1 -0
  346. package/dist/core/session/remote-session-client.js +224 -0
  347. package/dist/core/session/remote-session-client.js.map +1 -0
  348. package/dist/core/session/remote-session-manager.d.ts +32 -0
  349. package/dist/core/session/remote-session-manager.d.ts.map +1 -0
  350. package/dist/core/session/remote-session-manager.js +124 -0
  351. package/dist/core/session/remote-session-manager.js.map +1 -0
  352. package/dist/core/session/remote-session.d.ts +20 -0
  353. package/dist/core/session/remote-session.d.ts.map +1 -0
  354. package/dist/core/session/remote-session.js +33 -0
  355. package/dist/core/session/remote-session.js.map +1 -0
  356. package/dist/core/session/session-manager.d.ts +18 -0
  357. package/dist/core/session/session-manager.d.ts.map +1 -0
  358. package/dist/core/session/session-manager.js +2 -0
  359. package/dist/core/session/session-manager.js.map +1 -0
  360. package/dist/core/session/session.d.ts +140 -0
  361. package/dist/core/session/session.d.ts.map +1 -0
  362. package/dist/core/session/session.js +461 -0
  363. package/dist/core/session/session.js.map +1 -0
  364. package/dist/core/session/stores/in-memory-session-store.d.ts +39 -0
  365. package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -0
  366. package/dist/core/session/stores/in-memory-session-store.js +168 -0
  367. package/dist/core/session/stores/in-memory-session-store.js.map +1 -0
  368. package/dist/core/session/stores/jsonl-session-store.d.ts +97 -0
  369. package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -0
  370. package/dist/core/session/stores/jsonl-session-store.js +1140 -0
  371. package/dist/core/session/stores/jsonl-session-store.js.map +1 -0
  372. package/dist/core/session/stores/remote-session-store.d.ts +44 -0
  373. package/dist/core/session/stores/remote-session-store.d.ts.map +1 -0
  374. package/dist/core/session/stores/remote-session-store.js +159 -0
  375. package/dist/core/session/stores/remote-session-store.js.map +1 -0
  376. package/dist/core/session/stores/session-store.d.ts +42 -0
  377. package/dist/core/session/stores/session-store.d.ts.map +1 -0
  378. package/dist/core/session/stores/session-store.js +2 -0
  379. package/dist/core/session/stores/session-store.js.map +1 -0
  380. package/dist/core/session/types.d.ts +141 -0
  381. package/dist/core/session/types.d.ts.map +1 -0
  382. package/dist/core/session/types.js +2 -0
  383. package/dist/core/session/types.js.map +1 -0
  384. package/dist/core/session/usage-ledger.d.ts +18 -0
  385. package/dist/core/session/usage-ledger.d.ts.map +1 -0
  386. package/dist/core/session/usage-ledger.js +68 -0
  387. package/dist/core/session/usage-ledger.js.map +1 -0
  388. package/dist/core/session-cwd.d.ts +19 -0
  389. package/dist/core/session-cwd.d.ts.map +1 -0
  390. package/dist/core/session-cwd.js +38 -0
  391. package/dist/core/session-cwd.js.map +1 -0
  392. package/dist/core/settings-manager.d.ts +318 -0
  393. package/dist/core/settings-manager.d.ts.map +1 -0
  394. package/dist/core/settings-manager.js +991 -0
  395. package/dist/core/settings-manager.js.map +1 -0
  396. package/dist/core/skills.d.ts +40 -0
  397. package/dist/core/skills.d.ts.map +1 -0
  398. package/dist/core/skills.js +57 -0
  399. package/dist/core/skills.js.map +1 -0
  400. package/dist/core/slash-commands.d.ts +15 -0
  401. package/dist/core/slash-commands.d.ts.map +1 -0
  402. package/dist/core/slash-commands.js +36 -0
  403. package/dist/core/slash-commands.js.map +1 -0
  404. package/dist/core/source-info.d.ts +26 -0
  405. package/dist/core/source-info.d.ts.map +1 -0
  406. package/dist/core/source-info.js +27 -0
  407. package/dist/core/source-info.js.map +1 -0
  408. package/dist/core/system-prompt.d.ts +32 -0
  409. package/dist/core/system-prompt.d.ts.map +1 -0
  410. package/dist/core/system-prompt.js +131 -0
  411. package/dist/core/system-prompt.js.map +1 -0
  412. package/dist/core/telemetry.d.ts +3 -0
  413. package/dist/core/telemetry.d.ts.map +1 -0
  414. package/dist/core/telemetry.js +9 -0
  415. package/dist/core/telemetry.js.map +1 -0
  416. package/dist/core/timings.d.ts +10 -0
  417. package/dist/core/timings.d.ts.map +1 -0
  418. package/dist/core/timings.js +41 -0
  419. package/dist/core/timings.js.map +1 -0
  420. package/dist/core/tools/bash.d.ts +51 -0
  421. package/dist/core/tools/bash.d.ts.map +1 -0
  422. package/dist/core/tools/bash.js +310 -0
  423. package/dist/core/tools/bash.js.map +1 -0
  424. package/dist/core/tools/compress-context.d.ts +27 -0
  425. package/dist/core/tools/compress-context.d.ts.map +1 -0
  426. package/dist/core/tools/compress-context.js +142 -0
  427. package/dist/core/tools/compress-context.js.map +1 -0
  428. package/dist/core/tools/edit-diff.d.ts +82 -0
  429. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  430. package/dist/core/tools/edit-diff.js +327 -0
  431. package/dist/core/tools/edit-diff.js.map +1 -0
  432. package/dist/core/tools/edit.d.ts +50 -0
  433. package/dist/core/tools/edit.d.ts.map +1 -0
  434. package/dist/core/tools/edit.js +324 -0
  435. package/dist/core/tools/edit.js.map +1 -0
  436. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  437. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  438. package/dist/core/tools/file-mutation-queue.js +60 -0
  439. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  440. package/dist/core/tools/find.d.ts +22 -0
  441. package/dist/core/tools/find.d.ts.map +1 -0
  442. package/dist/core/tools/find.js +268 -0
  443. package/dist/core/tools/find.js.map +1 -0
  444. package/dist/core/tools/grep.d.ts +27 -0
  445. package/dist/core/tools/grep.d.ts.map +1 -0
  446. package/dist/core/tools/grep.js +332 -0
  447. package/dist/core/tools/grep.js.map +1 -0
  448. package/dist/core/tools/hash-store.d.ts +12 -0
  449. package/dist/core/tools/hash-store.d.ts.map +1 -0
  450. package/dist/core/tools/hash-store.js +48 -0
  451. package/dist/core/tools/hash-store.js.map +1 -0
  452. package/dist/core/tools/hashline/apply.d.ts +40 -0
  453. package/dist/core/tools/hashline/apply.d.ts.map +1 -0
  454. package/dist/core/tools/hashline/apply.js +261 -0
  455. package/dist/core/tools/hashline/apply.js.map +1 -0
  456. package/dist/core/tools/hashline/hash.d.ts +56 -0
  457. package/dist/core/tools/hashline/hash.d.ts.map +1 -0
  458. package/dist/core/tools/hashline/hash.js +196 -0
  459. package/dist/core/tools/hashline/hash.js.map +1 -0
  460. package/dist/core/tools/hashline/parse.d.ts +8 -0
  461. package/dist/core/tools/hashline/parse.d.ts.map +1 -0
  462. package/dist/core/tools/hashline/parse.js +41 -0
  463. package/dist/core/tools/hashline/parse.js.map +1 -0
  464. package/dist/core/tools/hashline/resolve.d.ts +51 -0
  465. package/dist/core/tools/hashline/resolve.d.ts.map +1 -0
  466. package/dist/core/tools/hashline/resolve.js +187 -0
  467. package/dist/core/tools/hashline/resolve.js.map +1 -0
  468. package/dist/core/tools/hashline-utils.d.ts +6 -0
  469. package/dist/core/tools/hashline-utils.d.ts.map +1 -0
  470. package/dist/core/tools/hashline-utils.js +23 -0
  471. package/dist/core/tools/hashline-utils.js.map +1 -0
  472. package/dist/core/tools/index.d.ts +36 -0
  473. package/dist/core/tools/index.d.ts.map +1 -0
  474. package/dist/core/tools/index.js +141 -0
  475. package/dist/core/tools/index.js.map +1 -0
  476. package/dist/core/tools/ls.d.ts +21 -0
  477. package/dist/core/tools/ls.d.ts.map +1 -0
  478. package/dist/core/tools/ls.js +156 -0
  479. package/dist/core/tools/ls.js.map +1 -0
  480. package/dist/core/tools/operations.d.ts +201 -0
  481. package/dist/core/tools/operations.d.ts.map +1 -0
  482. package/dist/core/tools/operations.js +697 -0
  483. package/dist/core/tools/operations.js.map +1 -0
  484. package/dist/core/tools/output-accumulator.d.ts +54 -0
  485. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  486. package/dist/core/tools/output-accumulator.js +184 -0
  487. package/dist/core/tools/output-accumulator.js.map +1 -0
  488. package/dist/core/tools/path-utils.d.ts +9 -0
  489. package/dist/core/tools/path-utils.d.ts.map +1 -0
  490. package/dist/core/tools/path-utils.js +99 -0
  491. package/dist/core/tools/path-utils.js.map +1 -0
  492. package/dist/core/tools/read.d.ts +32 -0
  493. package/dist/core/tools/read.d.ts.map +1 -0
  494. package/dist/core/tools/read.js +318 -0
  495. package/dist/core/tools/read.js.map +1 -0
  496. package/dist/core/tools/render-utils.d.ts +33 -0
  497. package/dist/core/tools/render-utils.d.ts.map +1 -0
  498. package/dist/core/tools/render-utils.js +61 -0
  499. package/dist/core/tools/render-utils.js.map +1 -0
  500. package/dist/core/tools/replace-diff.d.ts +16 -0
  501. package/dist/core/tools/replace-diff.d.ts.map +1 -0
  502. package/dist/core/tools/replace-diff.js +117 -0
  503. package/dist/core/tools/replace-diff.js.map +1 -0
  504. package/dist/core/tools/replace-normalize.d.ts +2 -0
  505. package/dist/core/tools/replace-normalize.d.ts.map +1 -0
  506. package/dist/core/tools/replace-normalize.js +73 -0
  507. package/dist/core/tools/replace-normalize.js.map +1 -0
  508. package/dist/core/tools/replace-render.d.ts +51 -0
  509. package/dist/core/tools/replace-render.d.ts.map +1 -0
  510. package/dist/core/tools/replace-render.js +162 -0
  511. package/dist/core/tools/replace-render.js.map +1 -0
  512. package/dist/core/tools/runtime.d.ts +2 -0
  513. package/dist/core/tools/runtime.d.ts.map +1 -0
  514. package/dist/core/tools/runtime.js +6 -0
  515. package/dist/core/tools/runtime.js.map +1 -0
  516. package/dist/core/tools/session-history.d.ts +55 -0
  517. package/dist/core/tools/session-history.d.ts.map +1 -0
  518. package/dist/core/tools/session-history.js +649 -0
  519. package/dist/core/tools/session-history.js.map +1 -0
  520. package/dist/core/tools/subagent-agents.d.ts +29 -0
  521. package/dist/core/tools/subagent-agents.d.ts.map +1 -0
  522. package/dist/core/tools/subagent-agents.js +223 -0
  523. package/dist/core/tools/subagent-agents.js.map +1 -0
  524. package/dist/core/tools/subagent.d.ts +185 -0
  525. package/dist/core/tools/subagent.d.ts.map +1 -0
  526. package/dist/core/tools/subagent.js +1309 -0
  527. package/dist/core/tools/subagent.js.map +1 -0
  528. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  529. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  530. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  531. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  532. package/dist/core/tools/truncate.d.ts +39 -0
  533. package/dist/core/tools/truncate.d.ts.map +1 -0
  534. package/dist/core/tools/truncate.js +215 -0
  535. package/dist/core/tools/truncate.js.map +1 -0
  536. package/dist/core/tools/websearch.d.ts +33 -0
  537. package/dist/core/tools/websearch.d.ts.map +1 -0
  538. package/dist/core/tools/websearch.js +341 -0
  539. package/dist/core/tools/websearch.js.map +1 -0
  540. package/dist/core/tools/workspace-tool-host.d.ts +102 -0
  541. package/dist/core/tools/workspace-tool-host.d.ts.map +1 -0
  542. package/dist/core/tools/workspace-tool-host.js +348 -0
  543. package/dist/core/tools/workspace-tool-host.js.map +1 -0
  544. package/dist/core/tools/write.d.ts +16 -0
  545. package/dist/core/tools/write.d.ts.map +1 -0
  546. package/dist/core/tools/write.js +204 -0
  547. package/dist/core/tools/write.js.map +1 -0
  548. package/dist/core/workspace-identity.d.ts +7 -0
  549. package/dist/core/workspace-identity.d.ts.map +1 -0
  550. package/dist/core/workspace-identity.js +2 -0
  551. package/dist/core/workspace-identity.js.map +1 -0
  552. package/dist/daemon/command.d.ts +6 -0
  553. package/dist/daemon/command.d.ts.map +1 -0
  554. package/dist/daemon/command.js +58 -0
  555. package/dist/daemon/command.js.map +1 -0
  556. package/dist/daemon/config.d.ts +43 -0
  557. package/dist/daemon/config.d.ts.map +1 -0
  558. package/dist/daemon/config.js +304 -0
  559. package/dist/daemon/config.js.map +1 -0
  560. package/dist/daemon/help.d.ts +2 -0
  561. package/dist/daemon/help.d.ts.map +1 -0
  562. package/dist/daemon/help.js +42 -0
  563. package/dist/daemon/help.js.map +1 -0
  564. package/dist/daemon/lsp-config.d.ts +4 -0
  565. package/dist/daemon/lsp-config.d.ts.map +1 -0
  566. package/dist/daemon/lsp-config.js +155 -0
  567. package/dist/daemon/lsp-config.js.map +1 -0
  568. package/dist/daemon/security.d.ts +19 -0
  569. package/dist/daemon/security.d.ts.map +1 -0
  570. package/dist/daemon/security.js +175 -0
  571. package/dist/daemon/security.js.map +1 -0
  572. package/dist/daemon/server.d.ts +20 -0
  573. package/dist/daemon/server.d.ts.map +1 -0
  574. package/dist/daemon/server.js +400 -0
  575. package/dist/daemon/server.js.map +1 -0
  576. package/dist/daemon/workspace-runtime.d.ts +46 -0
  577. package/dist/daemon/workspace-runtime.d.ts.map +1 -0
  578. package/dist/daemon/workspace-runtime.js +673 -0
  579. package/dist/daemon/workspace-runtime.js.map +1 -0
  580. package/dist/index.d.ts +109 -0
  581. package/dist/index.d.ts.map +1 -0
  582. package/dist/index.js +107 -0
  583. package/dist/index.js.map +1 -0
  584. package/dist/main.d.ts +39 -0
  585. package/dist/main.d.ts.map +1 -0
  586. package/dist/main.js +763 -0
  587. package/dist/main.js.map +1 -0
  588. package/dist/migrations.d.ts +35 -0
  589. package/dist/migrations.d.ts.map +1 -0
  590. package/dist/migrations.js +412 -0
  591. package/dist/migrations.js.map +1 -0
  592. package/dist/modes/interactive/components/assistant-message.d.ts +29 -0
  593. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  594. package/dist/modes/interactive/components/assistant-message.js +149 -0
  595. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  596. package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
  597. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  598. package/dist/modes/interactive/components/bash-execution.js +173 -0
  599. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  600. package/dist/modes/interactive/components/bordered-loader.d.ts +18 -0
  601. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  602. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  603. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  604. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  605. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  606. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  607. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  608. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  609. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  610. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  611. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  612. package/dist/modes/interactive/components/config-selector.d.ts +74 -0
  613. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  614. package/dist/modes/interactive/components/config-selector.js +514 -0
  615. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  616. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  617. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  618. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  619. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  620. package/dist/modes/interactive/components/custom-editor.d.ts +25 -0
  621. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  622. package/dist/modes/interactive/components/custom-editor.js +85 -0
  623. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  624. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  625. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  626. package/dist/modes/interactive/components/custom-message.js +80 -0
  627. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  628. package/dist/modes/interactive/components/diff.d.ts +12 -0
  629. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  630. package/dist/modes/interactive/components/diff.js +118 -0
  631. package/dist/modes/interactive/components/diff.js.map +1 -0
  632. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  633. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  634. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  635. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  636. package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  637. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  638. package/dist/modes/interactive/components/extension-editor.js +128 -0
  639. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  640. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  641. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  642. package/dist/modes/interactive/components/extension-input.js +61 -0
  643. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  644. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  645. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  646. package/dist/modes/interactive/components/extension-selector.js +83 -0
  647. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  648. package/dist/modes/interactive/components/footer.d.ts +36 -0
  649. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  650. package/dist/modes/interactive/components/footer.js +227 -0
  651. package/dist/modes/interactive/components/footer.js.map +1 -0
  652. package/dist/modes/interactive/components/hook-execution.d.ts +19 -0
  653. package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -0
  654. package/dist/modes/interactive/components/hook-execution.js +184 -0
  655. package/dist/modes/interactive/components/hook-execution.js.map +1 -0
  656. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  657. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  658. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  659. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  660. package/dist/modes/interactive/components/login-dialog.d.ts +55 -0
  661. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  662. package/dist/modes/interactive/components/login-dialog.js +176 -0
  663. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  664. package/dist/modes/interactive/components/markdown-transform.d.ts +4 -0
  665. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  666. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  667. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  668. package/dist/modes/interactive/components/mermaid.d.ts +14 -0
  669. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  670. package/dist/modes/interactive/components/mermaid.js +228 -0
  671. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  672. package/dist/modes/interactive/components/model-selector.d.ts +52 -0
  673. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  674. package/dist/modes/interactive/components/model-selector.js +296 -0
  675. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  676. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  677. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  678. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  679. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  680. package/dist/modes/interactive/components/scoped-models-selector.d.ts +50 -0
  681. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  682. package/dist/modes/interactive/components/scoped-models-selector.js +300 -0
  683. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  684. package/dist/modes/interactive/components/session-selector-search.d.ts +22 -0
  685. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  686. package/dist/modes/interactive/components/session-selector-search.js +144 -0
  687. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  688. package/dist/modes/interactive/components/session-selector.d.ts +108 -0
  689. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  690. package/dist/modes/interactive/components/session-selector.js +835 -0
  691. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  692. package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
  693. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  694. package/dist/modes/interactive/components/settings-selector.js +455 -0
  695. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  696. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  697. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  698. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  699. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  700. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  701. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  702. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  703. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  704. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  705. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  706. package/dist/modes/interactive/components/theme-selector.js +50 -0
  707. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  708. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  709. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  710. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  711. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  712. package/dist/modes/interactive/components/tool-execution.d.ts +67 -0
  713. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  714. package/dist/modes/interactive/components/tool-execution.js +306 -0
  715. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  716. package/dist/modes/interactive/components/tree-selector.d.ts +127 -0
  717. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  718. package/dist/modes/interactive/components/tree-selector.js +1098 -0
  719. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  720. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  721. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  722. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  723. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  724. package/dist/modes/interactive/components/user-message.d.ts +16 -0
  725. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  726. package/dist/modes/interactive/components/user-message.js +49 -0
  727. package/dist/modes/interactive/components/user-message.js.map +1 -0
  728. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  729. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  730. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  731. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  732. package/dist/modes/interactive/interactive-mode.d.ts +557 -0
  733. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  734. package/dist/modes/interactive/interactive-mode.js +5859 -0
  735. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  736. package/dist/modes/interactive/theme/dark.json +86 -0
  737. package/dist/modes/interactive/theme/light.json +85 -0
  738. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  739. package/dist/modes/interactive/theme/theme.d.ts +106 -0
  740. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  741. package/dist/modes/interactive/theme/theme.js +1030 -0
  742. package/dist/modes/interactive/theme/theme.js.map +1 -0
  743. package/dist/modes/json-event.d.ts +28 -0
  744. package/dist/modes/json-event.d.ts.map +1 -0
  745. package/dist/modes/json-event.js +12 -0
  746. package/dist/modes/json-event.js.map +1 -0
  747. package/dist/modes/print-mode.d.ts +29 -0
  748. package/dist/modes/print-mode.d.ts.map +1 -0
  749. package/dist/modes/print-mode.js +142 -0
  750. package/dist/modes/print-mode.js.map +1 -0
  751. package/dist/modes/rpc/jsonl.d.ts +17 -0
  752. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  753. package/dist/modes/rpc/jsonl.js +49 -0
  754. package/dist/modes/rpc/jsonl.js.map +1 -0
  755. package/dist/modes/rpc/rpc-client.d.ts +321 -0
  756. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  757. package/dist/modes/rpc/rpc-client.js +755 -0
  758. package/dist/modes/rpc/rpc-client.js.map +1 -0
  759. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  760. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  761. package/dist/modes/rpc/rpc-mode.js +963 -0
  762. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  763. package/dist/modes/rpc/rpc-types.d.ts +652 -0
  764. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  765. package/dist/modes/rpc/rpc-types.js +8 -0
  766. package/dist/modes/rpc/rpc-types.js.map +1 -0
  767. package/dist/package-manager-cli.d.ts +4 -0
  768. package/dist/package-manager-cli.d.ts.map +1 -0
  769. package/dist/package-manager-cli.js +488 -0
  770. package/dist/package-manager-cli.js.map +1 -0
  771. package/dist/utils/ansi.d.ts +2 -0
  772. package/dist/utils/ansi.d.ts.map +1 -0
  773. package/dist/utils/ansi.js +25 -0
  774. package/dist/utils/ansi.js.map +1 -0
  775. package/dist/utils/changelog.d.ts +23 -0
  776. package/dist/utils/changelog.d.ts.map +1 -0
  777. package/dist/utils/changelog.js +74 -0
  778. package/dist/utils/changelog.js.map +1 -0
  779. package/dist/utils/child-process.d.ts +15 -0
  780. package/dist/utils/child-process.d.ts.map +1 -0
  781. package/dist/utils/child-process.js +88 -0
  782. package/dist/utils/child-process.js.map +1 -0
  783. package/dist/utils/clipboard-image.d.ts +13 -0
  784. package/dist/utils/clipboard-image.d.ts.map +1 -0
  785. package/dist/utils/clipboard-image.js +248 -0
  786. package/dist/utils/clipboard-image.js.map +1 -0
  787. package/dist/utils/clipboard-native.d.ts +11 -0
  788. package/dist/utils/clipboard-native.d.ts.map +1 -0
  789. package/dist/utils/clipboard-native.js +20 -0
  790. package/dist/utils/clipboard-native.js.map +1 -0
  791. package/dist/utils/clipboard.d.ts +4 -0
  792. package/dist/utils/clipboard.d.ts.map +1 -0
  793. package/dist/utils/clipboard.js +171 -0
  794. package/dist/utils/clipboard.js.map +1 -0
  795. package/dist/utils/deprecation.d.ts +4 -0
  796. package/dist/utils/deprecation.d.ts.map +1 -0
  797. package/dist/utils/deprecation.js +13 -0
  798. package/dist/utils/deprecation.js.map +1 -0
  799. package/dist/utils/directory-completions.d.ts +5 -0
  800. package/dist/utils/directory-completions.d.ts.map +1 -0
  801. package/dist/utils/directory-completions.js +64 -0
  802. package/dist/utils/directory-completions.js.map +1 -0
  803. package/dist/utils/exif-orientation.d.ts +6 -0
  804. package/dist/utils/exif-orientation.d.ts.map +1 -0
  805. package/dist/utils/exif-orientation.js +166 -0
  806. package/dist/utils/exif-orientation.js.map +1 -0
  807. package/dist/utils/frontmatter.d.ts +8 -0
  808. package/dist/utils/frontmatter.d.ts.map +1 -0
  809. package/dist/utils/frontmatter.js +26 -0
  810. package/dist/utils/frontmatter.js.map +1 -0
  811. package/dist/utils/fs-watch.d.ts +5 -0
  812. package/dist/utils/fs-watch.d.ts.map +1 -0
  813. package/dist/utils/fs-watch.js +25 -0
  814. package/dist/utils/fs-watch.js.map +1 -0
  815. package/dist/utils/git.d.ts +27 -0
  816. package/dist/utils/git.d.ts.map +1 -0
  817. package/dist/utils/git.js +237 -0
  818. package/dist/utils/git.js.map +1 -0
  819. package/dist/utils/grip-user-agent.d.ts +2 -0
  820. package/dist/utils/grip-user-agent.d.ts.map +1 -0
  821. package/dist/utils/grip-user-agent.js +5 -0
  822. package/dist/utils/grip-user-agent.js.map +1 -0
  823. package/dist/utils/html.d.ts +7 -0
  824. package/dist/utils/html.d.ts.map +1 -0
  825. package/dist/utils/html.js +40 -0
  826. package/dist/utils/html.js.map +1 -0
  827. package/dist/utils/image-convert.d.ts +12 -0
  828. package/dist/utils/image-convert.d.ts.map +1 -0
  829. package/dist/utils/image-convert.js +43 -0
  830. package/dist/utils/image-convert.js.map +1 -0
  831. package/dist/utils/image-process.d.ts +18 -0
  832. package/dist/utils/image-process.d.ts.map +1 -0
  833. package/dist/utils/image-process.js +83 -0
  834. package/dist/utils/image-process.js.map +1 -0
  835. package/dist/utils/image-resize-core.d.ts +30 -0
  836. package/dist/utils/image-resize-core.d.ts.map +1 -0
  837. package/dist/utils/image-resize-core.js +133 -0
  838. package/dist/utils/image-resize-core.js.map +1 -0
  839. package/dist/utils/image-resize-worker.d.ts +2 -0
  840. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  841. package/dist/utils/image-resize-worker.js +31 -0
  842. package/dist/utils/image-resize-worker.js.map +1 -0
  843. package/dist/utils/image-resize.d.ts +19 -0
  844. package/dist/utils/image-resize.d.ts.map +1 -0
  845. package/dist/utils/image-resize.js +81 -0
  846. package/dist/utils/image-resize.js.map +1 -0
  847. package/dist/utils/json.d.ts +3 -0
  848. package/dist/utils/json.d.ts.map +1 -0
  849. package/dist/utils/json.js +7 -0
  850. package/dist/utils/json.js.map +1 -0
  851. package/dist/utils/mime.d.ts +3 -0
  852. package/dist/utils/mime.d.ts.map +1 -0
  853. package/dist/utils/mime.js +110 -0
  854. package/dist/utils/mime.js.map +1 -0
  855. package/dist/utils/open-browser.d.ts +9 -0
  856. package/dist/utils/open-browser.d.ts.map +1 -0
  857. package/dist/utils/open-browser.js +22 -0
  858. package/dist/utils/open-browser.js.map +1 -0
  859. package/dist/utils/paths.d.ts +31 -0
  860. package/dist/utils/paths.d.ts.map +1 -0
  861. package/dist/utils/paths.js +87 -0
  862. package/dist/utils/paths.js.map +1 -0
  863. package/dist/utils/photon.d.ts +22 -0
  864. package/dist/utils/photon.d.ts.map +1 -0
  865. package/dist/utils/photon.js +125 -0
  866. package/dist/utils/photon.js.map +1 -0
  867. package/dist/utils/shell.d.ts +28 -0
  868. package/dist/utils/shell.d.ts.map +1 -0
  869. package/dist/utils/shell.js +188 -0
  870. package/dist/utils/shell.js.map +1 -0
  871. package/dist/utils/sleep.d.ts +5 -0
  872. package/dist/utils/sleep.d.ts.map +1 -0
  873. package/dist/utils/sleep.js +17 -0
  874. package/dist/utils/sleep.js.map +1 -0
  875. package/dist/utils/syntax-highlight.d.ts +12 -0
  876. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  877. package/dist/utils/syntax-highlight.js +125 -0
  878. package/dist/utils/syntax-highlight.js.map +1 -0
  879. package/dist/utils/tools-manager.d.ts +5 -0
  880. package/dist/utils/tools-manager.d.ts.map +1 -0
  881. package/dist/utils/tools-manager.js +329 -0
  882. package/dist/utils/tools-manager.js.map +1 -0
  883. package/dist/utils/version-check.d.ts +14 -0
  884. package/dist/utils/version-check.d.ts.map +1 -0
  885. package/dist/utils/version-check.js +91 -0
  886. package/dist/utils/version-check.js.map +1 -0
  887. package/dist/utils/windows-self-update.d.ts +3 -0
  888. package/dist/utils/windows-self-update.d.ts.map +1 -0
  889. package/dist/utils/windows-self-update.js +77 -0
  890. package/dist/utils/windows-self-update.js.map +1 -0
  891. package/docs/compaction.md +408 -0
  892. package/docs/custom-provider.md +714 -0
  893. package/docs/daemon-architecture.md +399 -0
  894. package/docs/daemon.md +110 -0
  895. package/docs/development.md +72 -0
  896. package/docs/docs.json +164 -0
  897. package/docs/extensions.md +2745 -0
  898. package/docs/hooks.md +85 -0
  899. package/docs/images/doom-extension.png +0 -0
  900. package/docs/images/exy.png +0 -0
  901. package/docs/images/interactive-mode.png +0 -0
  902. package/docs/images/tree-view.png +0 -0
  903. package/docs/index.md +81 -0
  904. package/docs/json.md +89 -0
  905. package/docs/keybindings.md +230 -0
  906. package/docs/lsp.md +499 -0
  907. package/docs/migrating-to-grip.md +18 -0
  908. package/docs/models.md +496 -0
  909. package/docs/packages.md +228 -0
  910. package/docs/prompt-templates.md +88 -0
  911. package/docs/providers.md +251 -0
  912. package/docs/quickstart.md +167 -0
  913. package/docs/rpc.md +1492 -0
  914. package/docs/rules.md +117 -0
  915. package/docs/sandbox.md +181 -0
  916. package/docs/sdk.md +360 -0
  917. package/docs/session-format.md +414 -0
  918. package/docs/sessions.md +137 -0
  919. package/docs/settings.md +371 -0
  920. package/docs/shell-aliases.md +13 -0
  921. package/docs/skills.md +246 -0
  922. package/docs/terminal-setup.md +112 -0
  923. package/docs/termux.md +129 -0
  924. package/docs/themes.md +295 -0
  925. package/docs/tmux.md +61 -0
  926. package/docs/tui.md +918 -0
  927. package/docs/usage.md +304 -0
  928. package/docs/windows.md +17 -0
  929. package/examples/README.md +31 -0
  930. package/examples/daemon-docker/Dockerfile +43 -0
  931. package/examples/daemon-docker/README.md +45 -0
  932. package/examples/extensions/README.md +208 -0
  933. package/examples/extensions/auto-commit-on-exit.ts +46 -0
  934. package/examples/extensions/bash-spawn-hook.ts +30 -0
  935. package/examples/extensions/bookmark.ts +50 -0
  936. package/examples/extensions/border-status-editor.ts +145 -0
  937. package/examples/extensions/built-in-tool-renderer.ts +259 -0
  938. package/examples/extensions/claude-rules.ts +86 -0
  939. package/examples/extensions/commands.ts +82 -0
  940. package/examples/extensions/confirm-destructive.ts +59 -0
  941. package/examples/extensions/custom-compaction.ts +131 -0
  942. package/examples/extensions/custom-footer.ts +79 -0
  943. package/examples/extensions/custom-header.ts +73 -0
  944. package/examples/extensions/custom-provider-anthropic/index.ts +707 -0
  945. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  946. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  947. package/examples/extensions/custom-provider-gitlab-duo/index.ts +402 -0
  948. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  949. package/examples/extensions/custom-provider-gitlab-duo/test.ts +104 -0
  950. package/examples/extensions/dirty-repo-guard.ts +59 -0
  951. package/examples/extensions/doom-overlay/README.md +46 -0
  952. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  953. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  954. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  955. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  956. package/examples/extensions/doom-overlay/doom-component.ts +133 -0
  957. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  958. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  959. package/examples/extensions/doom-overlay/index.ts +74 -0
  960. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  961. package/examples/extensions/dynamic-resources/RULES.md +8 -0
  962. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  963. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  964. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  965. package/examples/extensions/dynamic-resources/index.ts +16 -0
  966. package/examples/extensions/dynamic-tools.ts +74 -0
  967. package/examples/extensions/event-bus.ts +43 -0
  968. package/examples/extensions/file-trigger.ts +41 -0
  969. package/examples/extensions/git-checkpoint.ts +53 -0
  970. package/examples/extensions/git-merge-and-resolve.ts +125 -0
  971. package/examples/extensions/github-issue-autocomplete.ts +191 -0
  972. package/examples/extensions/handoff.ts +191 -0
  973. package/examples/extensions/hello.ts +26 -0
  974. package/examples/extensions/hidden-thinking-label.ts +53 -0
  975. package/examples/extensions/inline-bash.ts +104 -0
  976. package/examples/extensions/input-transform.ts +43 -0
  977. package/examples/extensions/interactive-shell.ts +194 -0
  978. package/examples/extensions/mac-system-theme.ts +47 -0
  979. package/examples/extensions/message-renderer.ts +59 -0
  980. package/examples/extensions/minimal-mode.ts +428 -0
  981. package/examples/extensions/modal-editor.ts +86 -0
  982. package/examples/extensions/model-status.ts +31 -0
  983. package/examples/extensions/notify.ts +55 -0
  984. package/examples/extensions/overlay-qa-tests.ts +1374 -0
  985. package/examples/extensions/overlay-test.ts +171 -0
  986. package/examples/extensions/permission-gate.ts +34 -0
  987. package/examples/extensions/pirate.ts +47 -0
  988. package/examples/extensions/plan-mode/README.md +65 -0
  989. package/examples/extensions/plan-mode/index.ts +346 -0
  990. package/examples/extensions/plan-mode/utils.ts +172 -0
  991. package/examples/extensions/preset.ts +426 -0
  992. package/examples/extensions/prompt-customizer.ts +97 -0
  993. package/examples/extensions/protected-paths.ts +29 -0
  994. package/examples/extensions/provider-payload.ts +18 -0
  995. package/examples/extensions/qna.ts +125 -0
  996. package/examples/extensions/question.ts +294 -0
  997. package/examples/extensions/questionnaire.ts +459 -0
  998. package/examples/extensions/rainbow-editor.ts +88 -0
  999. package/examples/extensions/reload-runtime.ts +37 -0
  1000. package/examples/extensions/rpc-demo.ts +118 -0
  1001. package/examples/extensions/sandbox/index.ts +320 -0
  1002. package/examples/extensions/sandbox/package-lock.json +92 -0
  1003. package/examples/extensions/sandbox/package.json +19 -0
  1004. package/examples/extensions/send-user-message.ts +97 -0
  1005. package/examples/extensions/session-name.ts +27 -0
  1006. package/examples/extensions/shutdown-command.ts +63 -0
  1007. package/examples/extensions/snake.ts +381 -0
  1008. package/examples/extensions/space-invaders.ts +597 -0
  1009. package/examples/extensions/status-line.ts +32 -0
  1010. package/examples/extensions/structured-output.ts +65 -0
  1011. package/examples/extensions/subagent/README.md +175 -0
  1012. package/examples/extensions/subagent/agents/planner.md +37 -0
  1013. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1014. package/examples/extensions/subagent/agents/scout.md +50 -0
  1015. package/examples/extensions/subagent/agents/worker.md +24 -0
  1016. package/examples/extensions/subagent/agents.ts +126 -0
  1017. package/examples/extensions/subagent/index.ts +1083 -0
  1018. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1019. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1020. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1021. package/examples/extensions/summarize.ts +186 -0
  1022. package/examples/extensions/system-prompt-header.ts +17 -0
  1023. package/examples/extensions/tic-tac-toe.ts +1091 -0
  1024. package/examples/extensions/timed-confirm.ts +70 -0
  1025. package/examples/extensions/titlebar-spinner.ts +58 -0
  1026. package/examples/extensions/todo.ts +306 -0
  1027. package/examples/extensions/tool-override.ts +144 -0
  1028. package/examples/extensions/tools.ts +141 -0
  1029. package/examples/extensions/trigger-compact.ts +50 -0
  1030. package/examples/extensions/truncated-tool.ts +200 -0
  1031. package/examples/extensions/widget-placement.ts +9 -0
  1032. package/examples/extensions/with-deps/index.ts +32 -0
  1033. package/examples/extensions/with-deps/package-lock.json +31 -0
  1034. package/examples/extensions/with-deps/package.json +22 -0
  1035. package/examples/extensions/working-indicator.ts +123 -0
  1036. package/examples/extensions/working-message-test.ts +25 -0
  1037. package/examples/remote-session-server/README.md +71 -0
  1038. package/examples/remote-session-server/server.ts +353 -0
  1039. package/examples/rpc-extension-ui.ts +642 -0
  1040. package/examples/sandbox-docker/Dockerfile +274 -0
  1041. package/examples/sandbox-docker/README.md +88 -0
  1042. package/examples/sdk/01-minimal.ts +27 -0
  1043. package/examples/sdk/02-custom-model.ts +54 -0
  1044. package/examples/sdk/03-custom-prompt.ts +76 -0
  1045. package/examples/sdk/04-skills.ts +60 -0
  1046. package/examples/sdk/05-tools.ts +55 -0
  1047. package/examples/sdk/06-extensions.ts +94 -0
  1048. package/examples/sdk/07-context-files.ts +47 -0
  1049. package/examples/sdk/08-prompt-templates.ts +56 -0
  1050. package/examples/sdk/09-api-keys-and-oauth.ts +50 -0
  1051. package/examples/sdk/10-settings.ts +58 -0
  1052. package/examples/sdk/11-sessions.ts +54 -0
  1053. package/examples/sdk/12-full-control.ts +79 -0
  1054. package/examples/sdk/13-session-runtime.ts +49 -0
  1055. package/examples/sdk/README.md +94 -0
  1056. package/npm-shrinkwrap.json +1878 -0
  1057. package/package.json +102 -5
@@ -0,0 +1,1209 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join, resolve, sep } from "node:path";
3
+ import chalk from "chalk";
4
+ import { CONFIG_DIR_NAME } from "../config.js";
5
+ import { loadThemeFromPath } from "../modes/interactive/theme/theme.js";
6
+ import { canonicalizePath, isLocalPath, resolvePath } from "../utils/paths.js";
7
+ import { createEventBus } from "./event-bus.js";
8
+ import { createExtensionRuntime, loadExtensionFromFactory, loadExtensions } from "./extensions/loader.js";
9
+ import { dirnamePortablePath, joinPortablePath, pathComparisonValue, relativeWithin } from "./lsp/portable-path.js";
10
+ import { DefaultPackageManager, } from "./package-manager.js";
11
+ import { loadPromptTemplates, loadPromptTemplatesWithOperations } from "./prompt-templates.js";
12
+ import { loadRules, loadRulesWithOperations } from "./rules.js";
13
+ import { SettingsManager } from "./settings-manager.js";
14
+ import { loadSkills, loadSkillsWithOperations } from "./skills.js";
15
+ import { createSourceInfo, createSyntheticSourceInfo } from "./source-info.js";
16
+ import { resetTimings } from "./timings.js";
17
+ function appendMissingResourceDiagnostic(resolvedPath, diagnostics, diagnosticPaths, message) {
18
+ if (existsSync(resolvedPath) || diagnosticPaths.has(resolvedPath))
19
+ return;
20
+ diagnostics.push({ type: "error", message, path: resolvedPath });
21
+ diagnosticPaths.add(resolvedPath);
22
+ }
23
+ function mergeNamedResources(primary, secondary, resourceType) {
24
+ const resources = new Map(primary.map((resource) => [resource.name, resource]));
25
+ const diagnostics = [];
26
+ for (const resource of secondary) {
27
+ const winner = resources.get(resource.name);
28
+ if (!winner) {
29
+ resources.set(resource.name, resource);
30
+ continue;
31
+ }
32
+ diagnostics.push({
33
+ type: "collision",
34
+ message: `name ${JSON.stringify(resource.name)} collision`,
35
+ path: resource.filePath,
36
+ collision: {
37
+ resourceType,
38
+ name: resource.name,
39
+ winnerPath: winner.filePath,
40
+ loserPath: resource.filePath,
41
+ },
42
+ });
43
+ }
44
+ return { resources: [...resources.values()], diagnostics };
45
+ }
46
+ async function resolvePromptInput(input, description, operations) {
47
+ if (!input) {
48
+ return undefined;
49
+ }
50
+ if (existsSync(input)) {
51
+ try {
52
+ return readFileSync(input, "utf-8");
53
+ }
54
+ catch (error) {
55
+ console.error(chalk.yellow(`Warning: Could not read ${description} file ${input}: ${error}`));
56
+ return input;
57
+ }
58
+ }
59
+ if (operations) {
60
+ try {
61
+ await operations.access(input, "read");
62
+ return (await operations.readFile(input)).toString("utf-8");
63
+ }
64
+ catch { }
65
+ }
66
+ return input;
67
+ }
68
+ const CONTEXT_FILE_CANDIDATES = ["AGENTS.override.md", "AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD"];
69
+ function loadContextFileFromDir(dir) {
70
+ for (const filename of CONTEXT_FILE_CANDIDATES) {
71
+ const filePath = join(dir, filename);
72
+ if (existsSync(filePath)) {
73
+ try {
74
+ if (!statSync(filePath).isFile())
75
+ continue;
76
+ return {
77
+ path: filePath,
78
+ content: readFileSync(filePath, "utf-8"),
79
+ };
80
+ }
81
+ catch (error) {
82
+ console.error(chalk.yellow(`Warning: Could not read ${filePath}: ${error}`));
83
+ }
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ export function loadProjectContextFiles(options) {
89
+ const resolvedCwd = resolvePath(options.cwd);
90
+ const resolvedAgentDir = resolvePath(options.agentDir);
91
+ const contextFiles = [];
92
+ const seenPaths = new Set();
93
+ const globalContext = loadContextFileFromDir(resolvedAgentDir);
94
+ if (globalContext) {
95
+ contextFiles.push(globalContext);
96
+ seenPaths.add(globalContext.path);
97
+ }
98
+ const ancestorContextFiles = [];
99
+ let currentDir = resolvedCwd;
100
+ const root = resolve("/");
101
+ while (true) {
102
+ const contextFile = loadContextFileFromDir(currentDir);
103
+ if (contextFile && !seenPaths.has(contextFile.path)) {
104
+ ancestorContextFiles.unshift(contextFile);
105
+ seenPaths.add(contextFile.path);
106
+ }
107
+ if (currentDir === root)
108
+ break;
109
+ const parentDir = resolve(currentDir, "..");
110
+ if (parentDir === currentDir)
111
+ break;
112
+ currentDir = parentDir;
113
+ }
114
+ contextFiles.push(...ancestorContextFiles);
115
+ return contextFiles;
116
+ }
117
+ async function loadContextFileFromDirWithOperations(operations, dir, workspace) {
118
+ for (const filename of CONTEXT_FILE_CANDIDATES) {
119
+ const filePath = joinPortablePath(dir, filename);
120
+ try {
121
+ if (!(await operations.stat(filePath)).isFile())
122
+ continue;
123
+ await operations.access(filePath, "read");
124
+ return {
125
+ path: filePath,
126
+ content: (await operations.readFile(filePath)).toString("utf-8"),
127
+ sourceInfo: {
128
+ path: filePath,
129
+ source: "remote",
130
+ scope: "project",
131
+ origin: "top-level",
132
+ baseDir: dir,
133
+ ...(workspace ? { workspace } : {}),
134
+ },
135
+ };
136
+ }
137
+ catch { }
138
+ }
139
+ return null;
140
+ }
141
+ async function loadProjectContextFilesWithOperations(options) {
142
+ const contextFiles = [];
143
+ const seenPaths = new Set();
144
+ const globalContext = loadContextFileFromDir(resolvePath(options.agentDir));
145
+ if (globalContext) {
146
+ contextFiles.push(globalContext);
147
+ seenPaths.add(globalContext.path);
148
+ }
149
+ const sandboxUserContext = await loadDaemonContextFileWithOperations(options.operations, options.workspace, "AGENTS.md", "~/.grip/AGENTS.md", "user", "~/.grip");
150
+ if (sandboxUserContext && !seenPaths.has(sandboxUserContext.path)) {
151
+ contextFiles.push(sandboxUserContext);
152
+ seenPaths.add(sandboxUserContext.path);
153
+ }
154
+ const ancestorContextFiles = [];
155
+ let currentDir = options.cwd;
156
+ while (true) {
157
+ const contextFile = await loadContextFileFromDirWithOperations(options.operations, currentDir, options.workspace);
158
+ if (contextFile && !seenPaths.has(contextFile.path)) {
159
+ ancestorContextFiles.unshift(contextFile);
160
+ seenPaths.add(contextFile.path);
161
+ }
162
+ if (options.workspace &&
163
+ pathComparisonValue(currentDir, options.workspace.pathFlavor) ===
164
+ pathComparisonValue(options.workspace.root, options.workspace.pathFlavor))
165
+ break;
166
+ const parentDir = dirnamePortablePath(currentDir, options.workspace?.pathFlavor);
167
+ if (parentDir === currentDir)
168
+ break;
169
+ currentDir = parentDir;
170
+ }
171
+ contextFiles.push(...ancestorContextFiles);
172
+ const sandboxContext = await loadDaemonContextFileWithOperations(options.operations, options.workspace, "SANDBOX.md", "SANDBOX.md", "project", options.workspace?.root);
173
+ if (sandboxContext && !seenPaths.has(sandboxContext.path))
174
+ contextFiles.push(sandboxContext);
175
+ return contextFiles;
176
+ }
177
+ async function loadDaemonContextFileWithOperations(operations, workspace, resourcePath, displayPath, scope, baseDir) {
178
+ if (!workspace || !operations.readResource)
179
+ return null;
180
+ try {
181
+ const content = (await operations.readResource(resourcePath)).toString("utf-8");
182
+ return {
183
+ path: displayPath,
184
+ content,
185
+ sourceInfo: createSyntheticSourceInfo(displayPath, {
186
+ source: "remote",
187
+ scope,
188
+ origin: "top-level",
189
+ baseDir,
190
+ workspace,
191
+ }),
192
+ };
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ }
198
+ export class DefaultResourceLoader {
199
+ cwd;
200
+ agentDir;
201
+ settingsManager;
202
+ eventBus;
203
+ packageManager;
204
+ additionalExtensionPaths;
205
+ additionalSkillPaths;
206
+ additionalRulePaths;
207
+ additionalPromptTemplatePaths;
208
+ additionalThemePaths;
209
+ extensionFactories;
210
+ noExtensions;
211
+ noSkills;
212
+ noRules;
213
+ noPromptTemplates;
214
+ noThemes;
215
+ noContextFiles;
216
+ systemPromptSource;
217
+ appendSystemPromptSource;
218
+ toolOperations;
219
+ extensionsOverride;
220
+ skillsOverride;
221
+ rulesOverride;
222
+ promptsOverride;
223
+ themesOverride;
224
+ agentsFilesOverride;
225
+ systemPromptOverride;
226
+ appendSystemPromptOverride;
227
+ extensionsResult;
228
+ skills;
229
+ skillDiagnostics;
230
+ rules;
231
+ ruleDiagnostics;
232
+ prompts;
233
+ promptDiagnostics;
234
+ themes;
235
+ themeDiagnostics;
236
+ agentsFiles;
237
+ systemPrompt;
238
+ appendSystemPrompt;
239
+ lastSkillPaths;
240
+ lastRulePaths;
241
+ extensionSkillSourceInfos;
242
+ extensionRuleSourceInfos;
243
+ extensionPromptSourceInfos;
244
+ extensionThemeSourceInfos;
245
+ lastPromptPaths;
246
+ lastThemePaths;
247
+ constructor(options) {
248
+ this.cwd = resolvePath(options.cwd);
249
+ this.agentDir = resolvePath(options.agentDir);
250
+ this.settingsManager = options.settingsManager ?? SettingsManager.create(this.cwd, this.agentDir);
251
+ this.eventBus = options.eventBus ?? createEventBus();
252
+ this.packageManager = new DefaultPackageManager({
253
+ cwd: this.cwd,
254
+ agentDir: this.agentDir,
255
+ settingsManager: this.settingsManager,
256
+ });
257
+ this.additionalExtensionPaths = options.additionalExtensionPaths ?? [];
258
+ this.additionalSkillPaths = options.additionalSkillPaths ?? [];
259
+ this.additionalRulePaths = options.additionalRulePaths ?? [];
260
+ this.additionalPromptTemplatePaths = options.additionalPromptTemplatePaths ?? [];
261
+ this.additionalThemePaths = options.additionalThemePaths ?? [];
262
+ this.extensionFactories = options.extensionFactories ?? [];
263
+ this.noExtensions = options.noExtensions ?? false;
264
+ this.noSkills = options.noSkills ?? false;
265
+ this.noRules = options.noRules ?? false;
266
+ this.noPromptTemplates = options.noPromptTemplates ?? false;
267
+ this.noThemes = options.noThemes ?? false;
268
+ this.noContextFiles = options.noContextFiles ?? false;
269
+ this.systemPromptSource = options.systemPrompt;
270
+ this.appendSystemPromptSource = options.appendSystemPrompt;
271
+ this.toolOperations = options.toolOperations;
272
+ this.extensionsOverride = options.extensionsOverride;
273
+ this.skillsOverride = options.skillsOverride;
274
+ this.rulesOverride = options.rulesOverride;
275
+ this.promptsOverride = options.promptsOverride;
276
+ this.themesOverride = options.themesOverride;
277
+ this.agentsFilesOverride = options.agentsFilesOverride;
278
+ this.systemPromptOverride = options.systemPromptOverride;
279
+ this.appendSystemPromptOverride = options.appendSystemPromptOverride;
280
+ this.extensionsResult = { extensions: [], errors: [], runtime: createExtensionRuntime() };
281
+ this.skills = [];
282
+ this.skillDiagnostics = [];
283
+ this.rules = [];
284
+ this.ruleDiagnostics = [];
285
+ this.prompts = [];
286
+ this.promptDiagnostics = [];
287
+ this.themes = [];
288
+ this.themeDiagnostics = [];
289
+ this.agentsFiles = [];
290
+ this.appendSystemPrompt = [];
291
+ this.lastSkillPaths = [];
292
+ this.lastRulePaths = [];
293
+ this.extensionSkillSourceInfos = new Map();
294
+ this.extensionRuleSourceInfos = new Map();
295
+ this.extensionPromptSourceInfos = new Map();
296
+ this.extensionThemeSourceInfos = new Map();
297
+ this.lastPromptPaths = [];
298
+ this.lastThemePaths = [];
299
+ }
300
+ getExtensions() {
301
+ return this.extensionsResult;
302
+ }
303
+ getSkills() {
304
+ return { skills: this.skills, diagnostics: this.skillDiagnostics };
305
+ }
306
+ getRules() {
307
+ return { rules: this.rules, diagnostics: this.ruleDiagnostics };
308
+ }
309
+ getPrompts() {
310
+ return { prompts: this.prompts, diagnostics: this.promptDiagnostics };
311
+ }
312
+ getThemes() {
313
+ return { themes: this.themes, diagnostics: this.themeDiagnostics };
314
+ }
315
+ getAgentsFiles() {
316
+ return { agentsFiles: this.agentsFiles };
317
+ }
318
+ getSystemPrompt() {
319
+ return this.systemPrompt;
320
+ }
321
+ getAppendSystemPrompt() {
322
+ return this.appendSystemPrompt;
323
+ }
324
+ setToolOperations(operations) {
325
+ this.toolOperations = operations;
326
+ }
327
+ getInstructionOperations() {
328
+ const backend = this.toolOperations?.getBackendInfo?.();
329
+ return backend?.type === "remote" && backend.configured ? this.toolOperations : undefined;
330
+ }
331
+ getRemoteProjectInstructionResourcePaths(cwd, backend) {
332
+ const projectBaseDir = joinPortablePath(cwd, CONFIG_DIR_NAME);
333
+ const projectMetadata = {
334
+ source: "remote",
335
+ scope: "project",
336
+ origin: "top-level",
337
+ baseDir: projectBaseDir,
338
+ workspace: backend.workspace,
339
+ };
340
+ const skills = [
341
+ { path: joinPortablePath(projectBaseDir, "skills"), metadata: projectMetadata },
342
+ ];
343
+ const rules = [
344
+ { path: joinPortablePath(projectBaseDir, "rules"), metadata: projectMetadata },
345
+ ];
346
+ const prompts = [
347
+ { path: joinPortablePath(projectBaseDir, "prompts"), metadata: projectMetadata },
348
+ ];
349
+ let currentDir = cwd;
350
+ const boundary = backend.workspace.root;
351
+ while (true) {
352
+ const agentsBaseDir = joinPortablePath(currentDir, ".agents");
353
+ const agentsMetadata = {
354
+ source: "remote",
355
+ scope: "project",
356
+ origin: "top-level",
357
+ baseDir: agentsBaseDir,
358
+ workspace: backend.workspace,
359
+ };
360
+ skills.push({ path: joinPortablePath(agentsBaseDir, "skills"), metadata: agentsMetadata });
361
+ rules.push({ path: joinPortablePath(agentsBaseDir, "rules"), metadata: agentsMetadata });
362
+ if (pathComparisonValue(currentDir, backend.workspace.pathFlavor) ===
363
+ pathComparisonValue(boundary, backend.workspace.pathFlavor))
364
+ break;
365
+ const parentDir = dirnamePortablePath(currentDir, backend.workspace.pathFlavor);
366
+ if (parentDir === currentDir)
367
+ break;
368
+ currentDir = parentDir;
369
+ }
370
+ return { skills, rules, prompts };
371
+ }
372
+ extendResources(paths) {
373
+ const skillPaths = this.normalizeExtensionPaths(paths.skillPaths ?? []);
374
+ const rulePaths = this.normalizeExtensionPaths(paths.rulePaths ?? []);
375
+ const promptPaths = this.normalizeExtensionPaths(paths.promptPaths ?? []);
376
+ const themePaths = this.normalizeExtensionPaths(paths.themePaths ?? []);
377
+ for (const entry of skillPaths) {
378
+ this.extensionSkillSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));
379
+ }
380
+ for (const entry of rulePaths) {
381
+ this.extensionRuleSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));
382
+ }
383
+ for (const entry of promptPaths) {
384
+ this.extensionPromptSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));
385
+ }
386
+ for (const entry of themePaths) {
387
+ this.extensionThemeSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));
388
+ }
389
+ if (skillPaths.length > 0) {
390
+ this.lastSkillPaths = this.mergePaths(this.lastSkillPaths, skillPaths.map((entry) => entry.path));
391
+ this.updateSkillsFromPaths(this.lastSkillPaths);
392
+ }
393
+ if (rulePaths.length > 0) {
394
+ this.lastRulePaths = this.mergePaths(this.lastRulePaths, rulePaths.map((entry) => entry.path));
395
+ this.updateRulesFromPaths(this.lastRulePaths);
396
+ }
397
+ if (promptPaths.length > 0) {
398
+ this.lastPromptPaths = this.mergePaths(this.lastPromptPaths, promptPaths.map((entry) => entry.path));
399
+ this.updatePromptsFromPaths(this.lastPromptPaths);
400
+ }
401
+ if (themePaths.length > 0) {
402
+ this.lastThemePaths = this.mergePaths(this.lastThemePaths, themePaths.map((entry) => entry.path));
403
+ this.updateThemesFromPaths(this.lastThemePaths);
404
+ }
405
+ }
406
+ recordResourceMetadata(resources, metadataByPath) {
407
+ for (const resource of resources) {
408
+ if (!metadataByPath.has(resource.path))
409
+ metadataByPath.set(resource.path, resource.metadata);
410
+ }
411
+ }
412
+ getEnabledResources(resources, metadataByPath) {
413
+ this.recordResourceMetadata(resources, metadataByPath);
414
+ return resources.filter((resource) => resource.enabled);
415
+ }
416
+ getEnabledPaths(resources, metadataByPath) {
417
+ return this.getEnabledResources(resources, metadataByPath).map((resource) => resource.path);
418
+ }
419
+ shouldExcludeLocalProjectInstructionResource(resource, loadProjectInstructionsRemotely) {
420
+ return (loadProjectInstructionsRemotely &&
421
+ resource.metadata.scope === "project" &&
422
+ resource.metadata.origin === "top-level");
423
+ }
424
+ normalizePackagedInstructionPath(resource, filename, metadataByPath) {
425
+ if (resource.metadata.source !== "auto" && resource.metadata.origin !== "package")
426
+ return resource.path;
427
+ try {
428
+ if (!statSync(resource.path).isDirectory())
429
+ return resource.path;
430
+ }
431
+ catch {
432
+ return resource.path;
433
+ }
434
+ const instructionFile = join(resource.path, filename);
435
+ if (!existsSync(instructionFile))
436
+ return resource.path;
437
+ if (!metadataByPath.has(instructionFile))
438
+ metadataByPath.set(instructionFile, resource.metadata);
439
+ return instructionFile;
440
+ }
441
+ async filterExistingRemoteInstructionPaths(entries, operations) {
442
+ const existing = [];
443
+ for (const entry of entries) {
444
+ try {
445
+ await operations.access(entry.path, "exists");
446
+ existing.push(entry);
447
+ }
448
+ catch { }
449
+ }
450
+ return existing;
451
+ }
452
+ async discoverRemoteInstructionResourcePaths(operations) {
453
+ const emptyPaths = { skills: [], rules: [], prompts: [] };
454
+ if (!operations)
455
+ return emptyPaths;
456
+ const backend = operations.getBackendInfo?.();
457
+ if (backend?.type !== "remote" || !backend.configured)
458
+ return emptyPaths;
459
+ const discovered = this.getRemoteProjectInstructionResourcePaths(operations.cwd, backend);
460
+ return {
461
+ skills: await this.filterExistingRemoteInstructionPaths(discovered.skills, operations),
462
+ rules: await this.filterExistingRemoteInstructionPaths(discovered.rules, operations),
463
+ prompts: await this.filterExistingRemoteInstructionPaths(discovered.prompts, operations),
464
+ };
465
+ }
466
+ recordRemoteInstructionMetadata(paths, metadataByPath) {
467
+ for (const entry of [...paths.skills, ...paths.rules, ...paths.prompts]) {
468
+ metadataByPath.set(entry.path, entry.metadata);
469
+ }
470
+ }
471
+ recordCliInstructionMetadata(paths, metadataByPath) {
472
+ for (const resource of [...paths.extensions, ...paths.skills, ...paths.rules]) {
473
+ if (!metadataByPath.has(resource.path)) {
474
+ metadataByPath.set(resource.path, { source: "cli", scope: "temporary", origin: "top-level" });
475
+ }
476
+ }
477
+ }
478
+ async collectReloadResourcePaths(resolvedPaths, cliPaths, metadataByPath, instructionOperations) {
479
+ const loadProjectInstructionsRemotely = instructionOperations !== undefined;
480
+ const enabledExtensions = this.getEnabledPaths(resolvedPaths.extensions, metadataByPath);
481
+ const enabledSkillResources = this.getEnabledResources(resolvedPaths.skills, metadataByPath).filter((resource) => !this.shouldExcludeLocalProjectInstructionResource(resource, loadProjectInstructionsRemotely));
482
+ const enabledRuleResources = this.getEnabledResources(resolvedPaths.rules, metadataByPath).filter((resource) => !this.shouldExcludeLocalProjectInstructionResource(resource, loadProjectInstructionsRemotely));
483
+ const enabledPrompts = this.getEnabledResources(resolvedPaths.prompts, metadataByPath)
484
+ .filter((resource) => !this.shouldExcludeLocalProjectInstructionResource(resource, loadProjectInstructionsRemotely))
485
+ .map((resource) => resource.path);
486
+ const enabledThemes = this.getEnabledPaths(resolvedPaths.themes, metadataByPath);
487
+ const remotePaths = await this.discoverRemoteInstructionResourcePaths(instructionOperations);
488
+ this.recordRemoteInstructionMetadata(remotePaths, metadataByPath);
489
+ const enabledSkills = enabledSkillResources.map((resource) => this.normalizePackagedInstructionPath(resource, "SKILL.md", metadataByPath));
490
+ const enabledRules = enabledRuleResources.map((resource) => this.normalizePackagedInstructionPath(resource, "RULES.md", metadataByPath));
491
+ this.recordCliInstructionMetadata(cliPaths, metadataByPath);
492
+ const cliExtensions = this.getEnabledPaths(cliPaths.extensions, metadataByPath);
493
+ const cliSkills = this.getEnabledPaths(cliPaths.skills, metadataByPath);
494
+ const cliRules = this.getEnabledPaths(cliPaths.rules, metadataByPath);
495
+ const cliPrompts = this.getEnabledPaths(cliPaths.prompts, metadataByPath);
496
+ const cliThemes = this.getEnabledPaths(cliPaths.themes, metadataByPath);
497
+ return {
498
+ extensions: this.noExtensions ? cliExtensions : this.mergePaths(cliExtensions, enabledExtensions),
499
+ skills: this.noSkills
500
+ ? this.mergePaths(cliSkills, this.additionalSkillPaths)
501
+ : this.mergePaths([...cliSkills, ...enabledSkills, ...remotePaths.skills.map((entry) => entry.path)], this.additionalSkillPaths),
502
+ rules: this.noRules
503
+ ? this.mergePaths(cliRules, this.additionalRulePaths)
504
+ : this.mergePaths([...cliRules, ...enabledRules, ...remotePaths.rules.map((entry) => entry.path)], this.additionalRulePaths),
505
+ prompts: this.noPromptTemplates
506
+ ? this.mergePaths(cliPrompts, this.additionalPromptTemplatePaths)
507
+ : this.mergePaths([...cliPrompts, ...enabledPrompts, ...remotePaths.prompts.map((entry) => entry.path)], this.additionalPromptTemplatePaths),
508
+ themes: this.noThemes
509
+ ? this.mergePaths(cliThemes, this.additionalThemePaths)
510
+ : this.mergePaths([...cliThemes, ...enabledThemes], this.additionalThemePaths),
511
+ };
512
+ }
513
+ async reloadExtensions(extensionPaths, metadataByPath) {
514
+ const extensionsResult = await loadExtensions(extensionPaths, this.cwd, this.eventBus);
515
+ const inlineExtensions = await this.loadExtensionFactories(extensionsResult.runtime);
516
+ extensionsResult.extensions.push(...inlineExtensions.extensions);
517
+ extensionsResult.errors.push(...inlineExtensions.errors);
518
+ for (const conflict of this.detectExtensionConflicts(extensionsResult.extensions)) {
519
+ extensionsResult.errors.push({ path: conflict.path, error: conflict.message });
520
+ }
521
+ for (const path of this.additionalExtensionPaths) {
522
+ if (!isLocalPath(path))
523
+ continue;
524
+ const resolved = this.resolveResourcePath(path);
525
+ if (!existsSync(resolved)) {
526
+ extensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });
527
+ }
528
+ }
529
+ this.extensionsResult = this.extensionsOverride ? this.extensionsOverride(extensionsResult) : extensionsResult;
530
+ this.applyExtensionSourceInfo(this.extensionsResult.extensions, metadataByPath);
531
+ }
532
+ async reloadSkills(skillPaths, metadataByPath) {
533
+ this.lastSkillPaths = skillPaths;
534
+ await this.updateSkillsFromPathsForReload(skillPaths, metadataByPath);
535
+ const diagnosticPaths = new Set(this.skillDiagnostics.map((diagnostic) => diagnostic.path));
536
+ for (const path of this.additionalSkillPaths) {
537
+ if (!isLocalPath(path))
538
+ continue;
539
+ const resolved = this.resolveResourcePath(path);
540
+ appendMissingResourceDiagnostic(resolved, this.skillDiagnostics, diagnosticPaths, "Skill path does not exist");
541
+ }
542
+ }
543
+ async reloadRules(rulePaths, metadataByPath) {
544
+ this.lastRulePaths = rulePaths;
545
+ await this.updateRulesFromPathsForReload(rulePaths, metadataByPath);
546
+ const diagnosticPaths = new Set(this.ruleDiagnostics.map((diagnostic) => diagnostic.path));
547
+ for (const path of this.additionalRulePaths) {
548
+ if (!isLocalPath(path))
549
+ continue;
550
+ const resolved = this.resolveResourcePath(path);
551
+ appendMissingResourceDiagnostic(resolved, this.ruleDiagnostics, diagnosticPaths, "Rule path does not exist");
552
+ }
553
+ }
554
+ async reloadPrompts(promptPaths, metadataByPath) {
555
+ this.lastPromptPaths = promptPaths;
556
+ await this.updatePromptsFromPathsForReload(promptPaths, metadataByPath);
557
+ const diagnosticPaths = new Set(this.promptDiagnostics.map((diagnostic) => diagnostic.path));
558
+ for (const path of this.additionalPromptTemplatePaths) {
559
+ if (!isLocalPath(path))
560
+ continue;
561
+ const resolved = this.resolveResourcePath(path);
562
+ appendMissingResourceDiagnostic(resolved, this.promptDiagnostics, diagnosticPaths, "Prompt template path does not exist");
563
+ }
564
+ }
565
+ reloadThemes(themePaths, metadataByPath) {
566
+ this.lastThemePaths = themePaths;
567
+ this.updateThemesFromPaths(themePaths, metadataByPath);
568
+ const diagnosticPaths = new Set(this.themeDiagnostics.map((diagnostic) => diagnostic.path));
569
+ for (const path of this.additionalThemePaths) {
570
+ const resolved = this.resolveResourcePath(path);
571
+ appendMissingResourceDiagnostic(resolved, this.themeDiagnostics, diagnosticPaths, "Theme path does not exist");
572
+ }
573
+ }
574
+ async reloadProjectContextFiles(instructionOperations) {
575
+ const backend = instructionOperations?.getBackendInfo?.();
576
+ const agentsFiles = {
577
+ agentsFiles: this.noContextFiles
578
+ ? []
579
+ : instructionOperations
580
+ ? await loadProjectContextFilesWithOperations({
581
+ cwd: instructionOperations.cwd,
582
+ agentDir: this.agentDir,
583
+ operations: instructionOperations,
584
+ workspace: backend?.type === "remote" && backend.configured ? backend.workspace : undefined,
585
+ })
586
+ : loadProjectContextFiles({ cwd: this.cwd, agentDir: this.agentDir }),
587
+ };
588
+ const resolvedAgentsFiles = this.agentsFilesOverride ? this.agentsFilesOverride(agentsFiles) : agentsFiles;
589
+ this.agentsFiles = resolvedAgentsFiles.agentsFiles;
590
+ }
591
+ async reloadSystemPrompts() {
592
+ const baseSystemPrompt = await resolvePromptInput(this.systemPromptSource ?? this.discoverSystemPromptFile(), "system prompt", this.getInstructionOperations());
593
+ this.systemPrompt = this.systemPromptOverride ? this.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;
594
+ const appendSources = this.appendSystemPromptSource ??
595
+ (this.discoverAppendSystemPromptFile() ? [this.discoverAppendSystemPromptFile()] : []);
596
+ const baseAppend = (await Promise.all(appendSources.map((source) => resolvePromptInput(source, "append system prompt", this.getInstructionOperations())))).filter((source) => source !== undefined);
597
+ this.appendSystemPrompt = this.appendSystemPromptOverride
598
+ ? this.appendSystemPromptOverride(baseAppend)
599
+ : baseAppend;
600
+ }
601
+ async reload() {
602
+ resetTimings("extensions");
603
+ await this.settingsManager.reload();
604
+ const resolvedPaths = await this.packageManager.resolve();
605
+ const cliPaths = await this.packageManager.resolveExtensionSources(this.additionalExtensionPaths, {
606
+ temporary: true,
607
+ });
608
+ const metadataByPath = new Map();
609
+ this.extensionSkillSourceInfos = new Map();
610
+ this.extensionRuleSourceInfos = new Map();
611
+ this.extensionPromptSourceInfos = new Map();
612
+ this.extensionThemeSourceInfos = new Map();
613
+ const instructionOperations = this.getInstructionOperations();
614
+ const paths = await this.collectReloadResourcePaths(resolvedPaths, cliPaths, metadataByPath, instructionOperations);
615
+ await this.reloadExtensions(paths.extensions, metadataByPath);
616
+ await this.reloadSkills(paths.skills, metadataByPath);
617
+ await this.reloadRules(paths.rules, metadataByPath);
618
+ await this.reloadPrompts(paths.prompts, metadataByPath);
619
+ this.reloadThemes(paths.themes, metadataByPath);
620
+ await this.reloadProjectContextFiles(instructionOperations);
621
+ await this.reloadSystemPrompts();
622
+ }
623
+ normalizeExtensionPaths(entries) {
624
+ return entries.map((entry) => {
625
+ const metadata = entry.metadata.baseDir
626
+ ? { ...entry.metadata, baseDir: this.resolveResourcePath(entry.metadata.baseDir) }
627
+ : entry.metadata;
628
+ return {
629
+ path: this.resolveResourcePath(entry.path),
630
+ metadata,
631
+ };
632
+ });
633
+ }
634
+ getExtensionRegisteredSkills() {
635
+ return this.extensionsResult.extensions.flatMap((extension) => Array.from(extension.skills.values()));
636
+ }
637
+ getExtensionRegisteredRules() {
638
+ return this.extensionsResult.extensions.flatMap((extension) => Array.from(extension.rules.values()));
639
+ }
640
+ getExtensionRegisteredPrompts() {
641
+ return this.extensionsResult.extensions.flatMap((extension) => Array.from(extension.prompts.values()));
642
+ }
643
+ applyLoadedSkills(skillsResult, metadataByPath) {
644
+ const extensionSkills = this.getExtensionRegisteredSkills();
645
+ const seenSkillNames = new Set(extensionSkills.map((skill) => skill.name));
646
+ const baseSkillsResult = {
647
+ skills: [...extensionSkills, ...skillsResult.skills.filter((skill) => !seenSkillNames.has(skill.name))],
648
+ diagnostics: skillsResult.diagnostics,
649
+ };
650
+ const resolvedSkills = this.skillsOverride ? this.skillsOverride(baseSkillsResult) : baseSkillsResult;
651
+ this.skills = resolvedSkills.skills.map((skill) => ({
652
+ ...skill,
653
+ sourceInfo: this.findSourceInfoForPath(skill.filePath, this.extensionSkillSourceInfos, metadataByPath) ??
654
+ skill.sourceInfo ??
655
+ this.getDefaultSourceInfoForPath(skill.filePath),
656
+ }));
657
+ this.skillDiagnostics = resolvedSkills.diagnostics;
658
+ }
659
+ updateSkillsFromPaths(skillPaths, metadataByPath) {
660
+ let skillsResult;
661
+ if (this.noSkills && skillPaths.length === 0) {
662
+ skillsResult = { skills: [], diagnostics: [] };
663
+ }
664
+ else {
665
+ skillsResult = loadSkills({
666
+ cwd: this.cwd,
667
+ agentDir: this.agentDir,
668
+ skillPaths,
669
+ includeDefaults: false,
670
+ });
671
+ }
672
+ this.applyLoadedSkills(skillsResult, metadataByPath);
673
+ }
674
+ shouldLoadPathWithInstructionOperations(path, metadataByPath) {
675
+ const operations = this.getInstructionOperations();
676
+ if (!operations)
677
+ return false;
678
+ const sourceInfo = this.findSourceInfoForPath(path, undefined, metadataByPath);
679
+ if (sourceInfo?.source === "remote")
680
+ return true;
681
+ const backend = operations.getBackendInfo?.();
682
+ if (backend?.type === "remote" && backend.configured) {
683
+ return relativeWithin(backend.workspace.root, path) !== undefined;
684
+ }
685
+ const cwd = operations.cwd.endsWith(sep) ? operations.cwd : `${operations.cwd}${sep}`;
686
+ return path === operations.cwd || path.startsWith(cwd);
687
+ }
688
+ async updateSkillsFromPathsForReload(skillPaths, metadataByPath) {
689
+ let skillsResult;
690
+ const operations = this.getInstructionOperations();
691
+ if (this.noSkills && skillPaths.length === 0) {
692
+ skillsResult = { skills: [], diagnostics: [] };
693
+ }
694
+ else if (operations) {
695
+ const remotePaths = skillPaths.filter((path) => this.shouldLoadPathWithInstructionOperations(path, metadataByPath));
696
+ const localPaths = skillPaths.filter((path) => !this.shouldLoadPathWithInstructionOperations(path, metadataByPath));
697
+ const remoteResult = await loadSkillsWithOperations({
698
+ cwd: operations.cwd,
699
+ agentDir: this.agentDir,
700
+ skillPaths: remotePaths,
701
+ includeDefaults: false,
702
+ operations,
703
+ });
704
+ const localResult = loadSkills({
705
+ cwd: this.cwd,
706
+ agentDir: this.agentDir,
707
+ skillPaths: localPaths,
708
+ includeDefaults: false,
709
+ });
710
+ const merged = mergeNamedResources(remoteResult.skills, localResult.skills, "skill");
711
+ skillsResult = {
712
+ skills: merged.resources,
713
+ diagnostics: [...remoteResult.diagnostics, ...localResult.diagnostics, ...merged.diagnostics],
714
+ };
715
+ }
716
+ else {
717
+ skillsResult = loadSkills({
718
+ cwd: this.cwd,
719
+ agentDir: this.agentDir,
720
+ skillPaths,
721
+ includeDefaults: false,
722
+ });
723
+ }
724
+ this.applyLoadedSkills(skillsResult, metadataByPath);
725
+ }
726
+ applyLoadedRules(rulesResult, metadataByPath) {
727
+ const extensionRules = this.getExtensionRegisteredRules();
728
+ const seenRuleNames = new Set(extensionRules.map((rule) => rule.name));
729
+ const baseRulesResult = {
730
+ rules: [...extensionRules, ...rulesResult.rules.filter((rule) => !seenRuleNames.has(rule.name))],
731
+ diagnostics: rulesResult.diagnostics,
732
+ };
733
+ const resolvedRules = this.rulesOverride ? this.rulesOverride(baseRulesResult) : baseRulesResult;
734
+ this.rules = resolvedRules.rules.map((rule) => ({
735
+ ...rule,
736
+ sourceInfo: this.findSourceInfoForPath(rule.filePath, this.extensionRuleSourceInfos, metadataByPath) ??
737
+ rule.sourceInfo ??
738
+ this.getDefaultSourceInfoForPath(rule.filePath),
739
+ }));
740
+ this.ruleDiagnostics = resolvedRules.diagnostics;
741
+ }
742
+ updateRulesFromPaths(rulePaths, metadataByPath) {
743
+ let rulesResult;
744
+ if (this.noRules && rulePaths.length === 0) {
745
+ rulesResult = { rules: [], diagnostics: [] };
746
+ }
747
+ else {
748
+ rulesResult = loadRules({
749
+ cwd: this.cwd,
750
+ agentDir: this.agentDir,
751
+ rulePaths,
752
+ includeDefaults: false,
753
+ });
754
+ }
755
+ this.applyLoadedRules(rulesResult, metadataByPath);
756
+ }
757
+ async updateRulesFromPathsForReload(rulePaths, metadataByPath) {
758
+ let rulesResult;
759
+ const operations = this.getInstructionOperations();
760
+ if (this.noRules && rulePaths.length === 0) {
761
+ rulesResult = { rules: [], diagnostics: [] };
762
+ }
763
+ else if (operations) {
764
+ const remotePaths = rulePaths.filter((path) => this.shouldLoadPathWithInstructionOperations(path, metadataByPath));
765
+ const localPaths = rulePaths.filter((path) => !this.shouldLoadPathWithInstructionOperations(path, metadataByPath));
766
+ const remoteResult = await loadRulesWithOperations({
767
+ cwd: operations.cwd,
768
+ agentDir: this.agentDir,
769
+ rulePaths: remotePaths,
770
+ includeDefaults: false,
771
+ operations,
772
+ });
773
+ const localResult = loadRules({
774
+ cwd: this.cwd,
775
+ agentDir: this.agentDir,
776
+ rulePaths: localPaths,
777
+ includeDefaults: false,
778
+ });
779
+ const merged = mergeNamedResources(remoteResult.rules, localResult.rules, "rule");
780
+ rulesResult = {
781
+ rules: merged.resources,
782
+ diagnostics: [...remoteResult.diagnostics, ...localResult.diagnostics, ...merged.diagnostics],
783
+ };
784
+ }
785
+ else {
786
+ rulesResult = loadRules({
787
+ cwd: this.cwd,
788
+ agentDir: this.agentDir,
789
+ rulePaths,
790
+ includeDefaults: false,
791
+ });
792
+ }
793
+ this.applyLoadedRules(rulesResult, metadataByPath);
794
+ }
795
+ applyLoadedPrompts(promptsResult, metadataByPath) {
796
+ const extensionPrompts = this.getExtensionRegisteredPrompts();
797
+ const basePromptsResult = this.dedupePrompts([...extensionPrompts, ...promptsResult.prompts]);
798
+ basePromptsResult.diagnostics.unshift(...promptsResult.diagnostics);
799
+ const resolvedPrompts = this.promptsOverride ? this.promptsOverride(basePromptsResult) : basePromptsResult;
800
+ this.prompts = resolvedPrompts.prompts.map((prompt) => ({
801
+ ...prompt,
802
+ sourceInfo: this.findSourceInfoForPath(prompt.filePath, this.extensionPromptSourceInfos, metadataByPath) ??
803
+ prompt.sourceInfo ??
804
+ this.getDefaultSourceInfoForPath(prompt.filePath),
805
+ }));
806
+ this.promptDiagnostics = resolvedPrompts.diagnostics;
807
+ }
808
+ updatePromptsFromPaths(promptPaths, metadataByPath) {
809
+ let promptsResult;
810
+ if (this.noPromptTemplates && promptPaths.length === 0) {
811
+ promptsResult = { prompts: [], diagnostics: [] };
812
+ }
813
+ else {
814
+ const allPrompts = loadPromptTemplates({
815
+ cwd: this.cwd,
816
+ agentDir: this.agentDir,
817
+ promptPaths,
818
+ includeDefaults: false,
819
+ });
820
+ promptsResult = this.dedupePrompts(allPrompts);
821
+ }
822
+ this.applyLoadedPrompts(promptsResult, metadataByPath);
823
+ }
824
+ async updatePromptsFromPathsForReload(promptPaths, metadataByPath) {
825
+ let promptsResult;
826
+ const operations = this.getInstructionOperations();
827
+ if (this.noPromptTemplates && promptPaths.length === 0) {
828
+ promptsResult = { prompts: [], diagnostics: [] };
829
+ }
830
+ else if (operations) {
831
+ const remotePaths = promptPaths.filter((path) => this.shouldLoadPathWithInstructionOperations(path, metadataByPath));
832
+ const localPaths = promptPaths.filter((path) => !this.shouldLoadPathWithInstructionOperations(path, metadataByPath));
833
+ const remotePrompts = await loadPromptTemplatesWithOperations({
834
+ cwd: operations.cwd,
835
+ agentDir: this.agentDir,
836
+ promptPaths: remotePaths,
837
+ includeDefaults: false,
838
+ operations,
839
+ });
840
+ const localPrompts = loadPromptTemplates({
841
+ cwd: this.cwd,
842
+ agentDir: this.agentDir,
843
+ promptPaths: localPaths,
844
+ includeDefaults: false,
845
+ });
846
+ promptsResult = this.dedupePrompts([...remotePrompts, ...localPrompts]);
847
+ }
848
+ else {
849
+ const allPrompts = loadPromptTemplates({
850
+ cwd: this.cwd,
851
+ agentDir: this.agentDir,
852
+ promptPaths,
853
+ includeDefaults: false,
854
+ });
855
+ promptsResult = this.dedupePrompts(allPrompts);
856
+ }
857
+ this.applyLoadedPrompts(promptsResult, metadataByPath);
858
+ }
859
+ updateThemesFromPaths(themePaths, metadataByPath) {
860
+ let themesResult;
861
+ if (this.noThemes && themePaths.length === 0) {
862
+ themesResult = { themes: [], diagnostics: [] };
863
+ }
864
+ else {
865
+ const loaded = this.loadThemes(themePaths, false);
866
+ const deduped = this.dedupeThemes(loaded.themes);
867
+ themesResult = { themes: deduped.themes, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };
868
+ }
869
+ const resolvedThemes = this.themesOverride ? this.themesOverride(themesResult) : themesResult;
870
+ this.themes = resolvedThemes.themes.map((theme) => {
871
+ const sourcePath = theme.sourcePath;
872
+ theme.sourceInfo = sourcePath
873
+ ? (this.findSourceInfoForPath(sourcePath, this.extensionThemeSourceInfos, metadataByPath) ??
874
+ theme.sourceInfo ??
875
+ this.getDefaultSourceInfoForPath(sourcePath))
876
+ : theme.sourceInfo;
877
+ return theme;
878
+ });
879
+ this.themeDiagnostics = resolvedThemes.diagnostics;
880
+ }
881
+ applyExtensionSourceInfo(extensions, metadataByPath) {
882
+ for (const extension of extensions) {
883
+ extension.sourceInfo =
884
+ this.findSourceInfoForPath(extension.path, undefined, metadataByPath) ??
885
+ this.getDefaultSourceInfoForPath(extension.path);
886
+ for (const command of extension.commands.values()) {
887
+ command.sourceInfo = extension.sourceInfo;
888
+ }
889
+ for (const tool of extension.tools.values()) {
890
+ tool.sourceInfo = extension.sourceInfo;
891
+ }
892
+ for (const skill of extension.skills.values()) {
893
+ skill.sourceInfo = extension.sourceInfo;
894
+ }
895
+ for (const rule of extension.rules.values()) {
896
+ rule.sourceInfo = extension.sourceInfo;
897
+ }
898
+ for (const prompt of extension.prompts.values()) {
899
+ prompt.sourceInfo = extension.sourceInfo;
900
+ }
901
+ }
902
+ }
903
+ findRegisteredSourceInfoForPath(resourcePath, normalizedResourcePath, sourceInfos) {
904
+ for (const [sourcePath, sourceInfo] of sourceInfos.entries()) {
905
+ const normalizedSourcePath = resolve(sourcePath);
906
+ if (normalizedResourcePath === normalizedSourcePath ||
907
+ normalizedResourcePath.startsWith(`${normalizedSourcePath}${sep}`)) {
908
+ return { ...sourceInfo, path: resourcePath };
909
+ }
910
+ }
911
+ return undefined;
912
+ }
913
+ findResolvedResourceSourceInfoForPath(resourcePath, normalizedResourcePath, metadataByPath) {
914
+ const exact = metadataByPath.get(normalizedResourcePath) ?? metadataByPath.get(resourcePath);
915
+ if (exact)
916
+ return createSourceInfo(resourcePath, exact);
917
+ for (const [sourcePath, metadata] of metadataByPath.entries()) {
918
+ if (metadata.workspace) {
919
+ if (relativeWithin(sourcePath, resourcePath) !== undefined) {
920
+ return createSourceInfo(resourcePath, metadata);
921
+ }
922
+ continue;
923
+ }
924
+ const normalizedSourcePath = resolve(sourcePath);
925
+ if (normalizedResourcePath === normalizedSourcePath ||
926
+ normalizedResourcePath.startsWith(`${normalizedSourcePath}${sep}`)) {
927
+ return createSourceInfo(resourcePath, metadata);
928
+ }
929
+ }
930
+ return undefined;
931
+ }
932
+ findSourceInfoForPath(resourcePath, extraSourceInfos, metadataByPath) {
933
+ if (!resourcePath)
934
+ return undefined;
935
+ if (resourcePath.startsWith("<"))
936
+ return this.getDefaultSourceInfoForPath(resourcePath);
937
+ const normalizedResourcePath = resolve(resourcePath);
938
+ const registeredSourceInfo = extraSourceInfos
939
+ ? this.findRegisteredSourceInfoForPath(resourcePath, normalizedResourcePath, extraSourceInfos)
940
+ : undefined;
941
+ if (registeredSourceInfo)
942
+ return registeredSourceInfo;
943
+ return metadataByPath
944
+ ? this.findResolvedResourceSourceInfoForPath(resourcePath, normalizedResourcePath, metadataByPath)
945
+ : undefined;
946
+ }
947
+ getDefaultSourceInfoForPath(filePath) {
948
+ if (filePath.startsWith("<") && filePath.endsWith(">")) {
949
+ return {
950
+ path: filePath,
951
+ source: filePath.slice(1, -1).split(":")[0] || "temporary",
952
+ scope: "temporary",
953
+ origin: "top-level",
954
+ };
955
+ }
956
+ const normalizedPath = resolve(filePath);
957
+ const agentRoots = [
958
+ join(this.agentDir, "skills"),
959
+ join(this.agentDir, "rules"),
960
+ join(this.agentDir, "prompts"),
961
+ join(this.agentDir, "themes"),
962
+ join(this.agentDir, "extensions"),
963
+ ];
964
+ const projectRoots = [
965
+ join(this.cwd, CONFIG_DIR_NAME, "skills"),
966
+ join(this.cwd, CONFIG_DIR_NAME, "rules"),
967
+ join(this.cwd, CONFIG_DIR_NAME, "prompts"),
968
+ join(this.cwd, CONFIG_DIR_NAME, "themes"),
969
+ join(this.cwd, CONFIG_DIR_NAME, "extensions"),
970
+ ];
971
+ for (const root of agentRoots) {
972
+ if (this.isUnderPath(normalizedPath, root)) {
973
+ return { path: filePath, source: "local", scope: "user", origin: "top-level", baseDir: root };
974
+ }
975
+ }
976
+ for (const root of projectRoots) {
977
+ if (this.isUnderPath(normalizedPath, root)) {
978
+ return { path: filePath, source: "local", scope: "project", origin: "top-level", baseDir: root };
979
+ }
980
+ }
981
+ return {
982
+ path: filePath,
983
+ source: "local",
984
+ scope: "temporary",
985
+ origin: "top-level",
986
+ baseDir: statSync(normalizedPath).isDirectory() ? normalizedPath : resolve(normalizedPath, ".."),
987
+ };
988
+ }
989
+ mergePaths(primary, additional) {
990
+ const merged = [];
991
+ const seen = new Set();
992
+ for (const p of [...primary, ...additional]) {
993
+ const resolved = this.resolveResourcePath(p);
994
+ const canonicalPath = canonicalizePath(resolved);
995
+ if (seen.has(canonicalPath))
996
+ continue;
997
+ seen.add(canonicalPath);
998
+ merged.push(resolved);
999
+ }
1000
+ return merged;
1001
+ }
1002
+ resolveResourcePath(p) {
1003
+ return resolvePath(p, this.cwd, { trim: true });
1004
+ }
1005
+ loadThemes(paths, includeDefaults = true) {
1006
+ const themes = [];
1007
+ const diagnostics = [];
1008
+ if (includeDefaults) {
1009
+ const defaultDirs = [join(this.agentDir, "themes"), join(this.cwd, CONFIG_DIR_NAME, "themes")];
1010
+ for (const dir of defaultDirs) {
1011
+ this.loadThemesFromDir(dir, themes, diagnostics);
1012
+ }
1013
+ }
1014
+ for (const p of paths) {
1015
+ const resolved = this.resolveResourcePath(p);
1016
+ if (!existsSync(resolved)) {
1017
+ diagnostics.push({ type: "warning", message: "theme path does not exist", path: resolved });
1018
+ continue;
1019
+ }
1020
+ try {
1021
+ const stats = statSync(resolved);
1022
+ if (stats.isDirectory()) {
1023
+ this.loadThemesFromDir(resolved, themes, diagnostics);
1024
+ }
1025
+ else if (stats.isFile() && resolved.endsWith(".json")) {
1026
+ this.loadThemeFromFile(resolved, themes, diagnostics);
1027
+ }
1028
+ else {
1029
+ diagnostics.push({ type: "warning", message: "theme path is not a json file", path: resolved });
1030
+ }
1031
+ }
1032
+ catch (error) {
1033
+ const message = error instanceof Error ? error.message : "failed to read theme path";
1034
+ diagnostics.push({ type: "warning", message, path: resolved });
1035
+ }
1036
+ }
1037
+ return { themes, diagnostics };
1038
+ }
1039
+ loadThemesFromDir(dir, themes, diagnostics) {
1040
+ if (!existsSync(dir)) {
1041
+ return;
1042
+ }
1043
+ try {
1044
+ const entries = readdirSync(dir, { withFileTypes: true });
1045
+ for (const entry of entries) {
1046
+ let isFile = entry.isFile();
1047
+ if (entry.isSymbolicLink()) {
1048
+ try {
1049
+ isFile = statSync(join(dir, entry.name)).isFile();
1050
+ }
1051
+ catch {
1052
+ continue;
1053
+ }
1054
+ }
1055
+ if (!isFile) {
1056
+ continue;
1057
+ }
1058
+ if (!entry.name.endsWith(".json")) {
1059
+ continue;
1060
+ }
1061
+ this.loadThemeFromFile(join(dir, entry.name), themes, diagnostics);
1062
+ }
1063
+ }
1064
+ catch (error) {
1065
+ const message = error instanceof Error ? error.message : "failed to read theme directory";
1066
+ diagnostics.push({ type: "warning", message, path: dir });
1067
+ }
1068
+ }
1069
+ loadThemeFromFile(filePath, themes, diagnostics) {
1070
+ try {
1071
+ themes.push(loadThemeFromPath(filePath));
1072
+ }
1073
+ catch (error) {
1074
+ const message = error instanceof Error ? error.message : "failed to load theme";
1075
+ diagnostics.push({ type: "warning", message, path: filePath });
1076
+ }
1077
+ }
1078
+ async loadExtensionFactories(runtime) {
1079
+ const extensions = [];
1080
+ const errors = [];
1081
+ for (const [index, factory] of this.extensionFactories.entries()) {
1082
+ const extensionPath = `<inline:${index + 1}>`;
1083
+ try {
1084
+ const extension = await loadExtensionFromFactory(factory, this.cwd, this.eventBus, runtime, extensionPath);
1085
+ extensions.push(extension);
1086
+ }
1087
+ catch (error) {
1088
+ const message = error instanceof Error ? error.message : "failed to load extension";
1089
+ errors.push({ path: extensionPath, error: message });
1090
+ }
1091
+ }
1092
+ return { extensions, errors };
1093
+ }
1094
+ dedupePrompts(prompts) {
1095
+ const seen = new Map();
1096
+ const diagnostics = [];
1097
+ for (const prompt of prompts) {
1098
+ const existing = seen.get(prompt.name);
1099
+ if (existing) {
1100
+ diagnostics.push({
1101
+ type: "collision",
1102
+ message: `name "/${prompt.name}" collision`,
1103
+ path: prompt.filePath,
1104
+ collision: {
1105
+ resourceType: "prompt",
1106
+ name: prompt.name,
1107
+ winnerPath: existing.filePath,
1108
+ loserPath: prompt.filePath,
1109
+ },
1110
+ });
1111
+ }
1112
+ else {
1113
+ seen.set(prompt.name, prompt);
1114
+ }
1115
+ }
1116
+ return { prompts: Array.from(seen.values()), diagnostics };
1117
+ }
1118
+ dedupeThemes(themes) {
1119
+ const seen = new Map();
1120
+ const diagnostics = [];
1121
+ for (const t of themes) {
1122
+ const name = t.name ?? "unnamed";
1123
+ const existing = seen.get(name);
1124
+ if (existing) {
1125
+ diagnostics.push({
1126
+ type: "collision",
1127
+ message: `name "${name}" collision`,
1128
+ path: t.sourcePath,
1129
+ collision: {
1130
+ resourceType: "theme",
1131
+ name,
1132
+ winnerPath: existing.sourcePath ?? "<builtin>",
1133
+ loserPath: t.sourcePath ?? "<builtin>",
1134
+ },
1135
+ });
1136
+ }
1137
+ else {
1138
+ seen.set(name, t);
1139
+ }
1140
+ }
1141
+ return { themes: Array.from(seen.values()), diagnostics };
1142
+ }
1143
+ discoverSystemPromptFile() {
1144
+ const projectPath = join(this.cwd, CONFIG_DIR_NAME, "SYSTEM.md");
1145
+ if (existsSync(projectPath)) {
1146
+ return projectPath;
1147
+ }
1148
+ const globalPath = join(this.agentDir, "SYSTEM.md");
1149
+ if (existsSync(globalPath)) {
1150
+ return globalPath;
1151
+ }
1152
+ return undefined;
1153
+ }
1154
+ discoverAppendSystemPromptFile() {
1155
+ const projectPath = join(this.cwd, CONFIG_DIR_NAME, "APPEND_SYSTEM.md");
1156
+ if (existsSync(projectPath)) {
1157
+ return projectPath;
1158
+ }
1159
+ const globalPath = join(this.agentDir, "APPEND_SYSTEM.md");
1160
+ if (existsSync(globalPath)) {
1161
+ return globalPath;
1162
+ }
1163
+ return undefined;
1164
+ }
1165
+ isUnderPath(target, root) {
1166
+ const normalizedRoot = resolve(root);
1167
+ if (target === normalizedRoot) {
1168
+ return true;
1169
+ }
1170
+ const prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;
1171
+ return target.startsWith(prefix);
1172
+ }
1173
+ detectExtensionConflicts(extensions) {
1174
+ const conflicts = [];
1175
+ // Track which extension registered each tool and flag
1176
+ const toolOwners = new Map();
1177
+ const flagOwners = new Map();
1178
+ for (const ext of extensions) {
1179
+ // Check tools
1180
+ for (const toolName of ext.tools.keys()) {
1181
+ const existingOwner = toolOwners.get(toolName);
1182
+ if (existingOwner && existingOwner !== ext.path) {
1183
+ conflicts.push({
1184
+ path: ext.path,
1185
+ message: `Tool "${toolName}" conflicts with ${existingOwner}`,
1186
+ });
1187
+ }
1188
+ else {
1189
+ toolOwners.set(toolName, ext.path);
1190
+ }
1191
+ }
1192
+ // Check flags
1193
+ for (const flagName of ext.flags.keys()) {
1194
+ const existingOwner = flagOwners.get(flagName);
1195
+ if (existingOwner && existingOwner !== ext.path) {
1196
+ conflicts.push({
1197
+ path: ext.path,
1198
+ message: `Flag "--${flagName}" conflicts with ${existingOwner}`,
1199
+ });
1200
+ }
1201
+ else {
1202
+ flagOwners.set(flagName, ext.path);
1203
+ }
1204
+ }
1205
+ }
1206
+ return conflicts;
1207
+ }
1208
+ }
1209
+ //# sourceMappingURL=resource-loader.js.map