@ikarmic/forge-core 4.5.0 → 5.1.0

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 (643) hide show
  1. package/LICENSE +44 -21
  2. package/README.md +1 -1
  3. package/dist/agent/agent.d.ts +8 -1
  4. package/dist/agent/agent.js +143 -23
  5. package/dist/agent/architect.d.ts +0 -1
  6. package/dist/agent/architect.js +0 -1
  7. package/dist/agent/background.d.ts +58 -0
  8. package/dist/agent/background.js +139 -0
  9. package/dist/agent/cache-hints.d.ts +0 -1
  10. package/dist/agent/cache-hints.js +0 -1
  11. package/dist/agent/cost-router.d.ts +0 -1
  12. package/dist/agent/cost-router.js +0 -1
  13. package/dist/agent/enhance-prompt.d.ts +9 -0
  14. package/dist/agent/enhance-prompt.js +34 -0
  15. package/dist/agent/goal.d.ts +54 -0
  16. package/dist/agent/goal.js +65 -0
  17. package/dist/agent/index.d.ts +0 -1
  18. package/dist/agent/index.js +0 -1
  19. package/dist/agent/loop-guard.d.ts +21 -0
  20. package/dist/agent/loop-guard.js +41 -0
  21. package/dist/agent/prompts.d.ts +0 -1
  22. package/dist/agent/prompts.js +0 -1
  23. package/dist/agent/think-tags.d.ts +0 -1
  24. package/dist/agent/think-tags.js +0 -1
  25. package/dist/agent/verify.d.ts +0 -1
  26. package/dist/agent/verify.js +0 -1
  27. package/dist/agents/agent-files.d.ts +43 -0
  28. package/dist/agents/agent-files.js +109 -0
  29. package/dist/ai-comments/index.d.ts +0 -1
  30. package/dist/ai-comments/index.js +0 -1
  31. package/dist/attachments.d.ts +0 -1
  32. package/dist/attachments.js +0 -1
  33. package/dist/browser/cdp.d.ts +0 -1
  34. package/dist/browser/cdp.js +0 -1
  35. package/dist/browser/chrome.d.ts +0 -1
  36. package/dist/browser/chrome.js +0 -1
  37. package/dist/browser/session.d.ts +0 -1
  38. package/dist/browser/session.js +0 -1
  39. package/dist/checkpoints/index.d.ts +0 -1
  40. package/dist/checkpoints/index.js +0 -1
  41. package/dist/checkpoints/store.d.ts +0 -1
  42. package/dist/checkpoints/store.js +5 -2
  43. package/dist/checkpoints/types.d.ts +0 -1
  44. package/dist/checkpoints/types.js +0 -1
  45. package/dist/code-index/builder.d.ts +0 -1
  46. package/dist/code-index/builder.js +0 -1
  47. package/dist/code-index/index-store.d.ts +0 -1
  48. package/dist/code-index/index-store.js +0 -1
  49. package/dist/code-index/parser.d.ts +0 -1
  50. package/dist/code-index/parser.js +0 -1
  51. package/dist/code-index/types.d.ts +0 -1
  52. package/dist/code-index/types.js +0 -1
  53. package/dist/commands/custom-commands.d.ts +9 -5
  54. package/dist/commands/custom-commands.js +13 -3
  55. package/dist/config-file.d.ts +47 -1
  56. package/dist/config-file.js +249 -6
  57. package/dist/config-merge.d.ts +13 -0
  58. package/dist/config-merge.js +67 -0
  59. package/dist/config-schema.d.ts +340 -0
  60. package/dist/config-schema.js +126 -0
  61. package/dist/config.d.ts +0 -1
  62. package/dist/config.js +2 -2
  63. package/dist/context/compaction.d.ts +0 -1
  64. package/dist/context/compaction.js +10 -2
  65. package/dist/context/mask.d.ts +0 -1
  66. package/dist/context/mask.js +1 -2
  67. package/dist/credentials/index.d.ts +0 -1
  68. package/dist/credentials/index.js +0 -1
  69. package/dist/credentials/types.d.ts +0 -1
  70. package/dist/credentials/types.js +0 -1
  71. package/dist/custom-providers.d.ts +95 -0
  72. package/dist/custom-providers.js +120 -0
  73. package/dist/diff/index.d.ts +0 -1
  74. package/dist/diff/index.js +0 -1
  75. package/dist/diff/unified-diff.d.ts +0 -1
  76. package/dist/diff/unified-diff.js +0 -1
  77. package/dist/git/auto-commit.d.ts +3 -4
  78. package/dist/git/auto-commit.js +8 -7
  79. package/dist/git/index.d.ts +0 -1
  80. package/dist/git/index.js +0 -1
  81. package/dist/github/github-tools.d.ts +2 -3
  82. package/dist/github/github-tools.js +0 -1
  83. package/dist/hooks/agent-runner.d.ts +0 -1
  84. package/dist/hooks/agent-runner.js +0 -1
  85. package/dist/hooks/bus.d.ts +0 -1
  86. package/dist/hooks/bus.js +0 -1
  87. package/dist/hooks/config.d.ts +0 -1
  88. package/dist/hooks/config.js +0 -1
  89. package/dist/hooks/events.d.ts +0 -1
  90. package/dist/hooks/events.js +0 -1
  91. package/dist/hooks/index.d.ts +0 -1
  92. package/dist/hooks/index.js +0 -1
  93. package/dist/hooks/loader.d.ts +0 -1
  94. package/dist/hooks/loader.js +0 -1
  95. package/dist/hooks/runner.d.ts +0 -1
  96. package/dist/hooks/runner.js +3 -3
  97. package/dist/hooks/watch-coalescer.d.ts +0 -1
  98. package/dist/hooks/watch-coalescer.js +0 -1
  99. package/dist/hooks/watch-ignore.d.ts +0 -1
  100. package/dist/hooks/watch-ignore.js +0 -1
  101. package/dist/hooks/watcher.d.ts +0 -1
  102. package/dist/hooks/watcher.js +0 -1
  103. package/dist/import/claude-code.d.ts +39 -0
  104. package/dist/import/claude-code.js +254 -0
  105. package/dist/index.d.ts +37 -7
  106. package/dist/index.js +28 -5
  107. package/dist/lazy-model.d.ts +0 -1
  108. package/dist/lazy-model.js +0 -1
  109. package/dist/lint/auto-lint.d.ts +0 -1
  110. package/dist/lint/auto-lint.js +0 -1
  111. package/dist/lint/index.d.ts +0 -1
  112. package/dist/lint/index.js +0 -1
  113. package/dist/lsp/client.d.ts +5 -1
  114. package/dist/lsp/client.js +39 -4
  115. package/dist/lsp/diagnostics.d.ts +0 -1
  116. package/dist/lsp/diagnostics.js +0 -1
  117. package/dist/lsp/index.d.ts +0 -1
  118. package/dist/lsp/index.js +0 -1
  119. package/dist/mcp/catalog.d.ts +0 -1
  120. package/dist/mcp/catalog.js +0 -1
  121. package/dist/mcp/index.d.ts +5 -2
  122. package/dist/mcp/index.js +3 -2
  123. package/dist/mcp/json-schema-to-zod.d.ts +0 -1
  124. package/dist/mcp/json-schema-to-zod.js +0 -1
  125. package/dist/mcp/manager.d.ts +17 -4
  126. package/dist/mcp/manager.js +27 -3
  127. package/dist/mcp/marketplace-types.d.ts +0 -1
  128. package/dist/mcp/marketplace-types.js +0 -1
  129. package/dist/mcp/marketplace.d.ts +2 -1
  130. package/dist/mcp/marketplace.js +10 -5
  131. package/dist/mcp/mcp-client.d.ts +12 -3
  132. package/dist/mcp/mcp-client.js +74 -18
  133. package/dist/mcp/mcp-config.d.ts +2 -1
  134. package/dist/mcp/mcp-config.js +1 -1
  135. package/dist/mcp/oauth.d.ts +55 -0
  136. package/dist/mcp/oauth.js +197 -0
  137. package/dist/mcp/registry.d.ts +0 -1
  138. package/dist/mcp/registry.js +0 -1
  139. package/dist/mcp/resource-tools.d.ts +8 -0
  140. package/dist/mcp/resource-tools.js +56 -0
  141. package/dist/memory/memory-store.d.ts +0 -1
  142. package/dist/memory/memory-store.js +0 -1
  143. package/dist/memory/rank.d.ts +0 -1
  144. package/dist/memory/rank.js +0 -1
  145. package/dist/memory/session-digest.d.ts +12 -0
  146. package/dist/memory/session-digest.js +47 -0
  147. package/dist/memory/stale.d.ts +0 -1
  148. package/dist/memory/stale.js +2 -2
  149. package/dist/model-alias.d.ts +18 -3
  150. package/dist/model-alias.js +27 -4
  151. package/dist/model-catalog.d.ts +0 -1
  152. package/dist/model-catalog.js +0 -2
  153. package/dist/model-list.d.ts +0 -1
  154. package/dist/model-list.js +2 -2
  155. package/dist/model-overrides.d.ts +30 -0
  156. package/dist/model-overrides.js +48 -0
  157. package/dist/orchestrator/board-tools.d.ts +0 -1
  158. package/dist/orchestrator/board-tools.js +0 -1
  159. package/dist/orchestrator/board.d.ts +0 -1
  160. package/dist/orchestrator/board.js +0 -1
  161. package/dist/orchestrator/index.d.ts +0 -1
  162. package/dist/orchestrator/index.js +0 -1
  163. package/dist/orchestrator/orchestrator.d.ts +0 -1
  164. package/dist/orchestrator/orchestrator.js +0 -1
  165. package/dist/orchestrator/router.d.ts +0 -1
  166. package/dist/orchestrator/router.js +0 -1
  167. package/dist/orchestrator/specialists-registry.d.ts +0 -1
  168. package/dist/orchestrator/specialists-registry.js +2 -4
  169. package/dist/orchestrator/specialists.d.ts +0 -1
  170. package/dist/orchestrator/specialists.js +4 -5
  171. package/dist/orchestrator/types.d.ts +0 -1
  172. package/dist/orchestrator/types.js +0 -1
  173. package/dist/plugins/index.d.ts +0 -1
  174. package/dist/plugins/index.js +0 -1
  175. package/dist/plugins/install.d.ts +0 -1
  176. package/dist/plugins/install.js +0 -1
  177. package/dist/plugins/loader.d.ts +0 -1
  178. package/dist/plugins/loader.js +0 -1
  179. package/dist/policy/audit.d.ts +0 -1
  180. package/dist/policy/audit.js +0 -1
  181. package/dist/policy/ca-certs.d.ts +8 -0
  182. package/dist/policy/ca-certs.js +30 -0
  183. package/dist/policy/policy.d.ts +0 -1
  184. package/dist/policy/policy.js +0 -1
  185. package/dist/policy/proxy.d.ts +10 -4
  186. package/dist/policy/proxy.js +33 -7
  187. package/dist/pricing.d.ts +0 -1
  188. package/dist/pricing.js +4 -1
  189. package/dist/providers.d.ts +7 -1
  190. package/dist/providers.js +39 -6
  191. package/dist/repomap/index.d.ts +0 -1
  192. package/dist/repomap/index.js +0 -1
  193. package/dist/repomap/repo-map.d.ts +0 -1
  194. package/dist/repomap/repo-map.js +0 -1
  195. package/dist/semantic/chunker.d.ts +0 -1
  196. package/dist/semantic/chunker.js +0 -1
  197. package/dist/semantic/embedder.d.ts +15 -1
  198. package/dist/semantic/embedder.js +25 -1
  199. package/dist/semantic/semantic-index.d.ts +10 -3
  200. package/dist/semantic/semantic-index.js +16 -8
  201. package/dist/semantic/vector-store.d.ts +0 -1
  202. package/dist/semantic/vector-store.js +0 -1
  203. package/dist/sessions/index.d.ts +1 -1
  204. package/dist/sessions/index.js +1 -1
  205. package/dist/sessions/prune.d.ts +23 -0
  206. package/dist/sessions/prune.js +35 -0
  207. package/dist/sessions/search.d.ts +0 -1
  208. package/dist/sessions/search.js +0 -1
  209. package/dist/sessions/session-export.d.ts +0 -1
  210. package/dist/sessions/session-export.js +0 -1
  211. package/dist/sessions/session-store.d.ts +0 -1
  212. package/dist/sessions/session-store.js +2 -2
  213. package/dist/sessions/watch.d.ts +0 -1
  214. package/dist/sessions/watch.js +0 -1
  215. package/dist/settings-export.d.ts +0 -1
  216. package/dist/settings-export.js +0 -1
  217. package/dist/skills/activator.d.ts +0 -1
  218. package/dist/skills/activator.js +0 -1
  219. package/dist/skills/builtin.d.ts +2 -0
  220. package/dist/skills/builtin.js +68 -0
  221. package/dist/skills/index.d.ts +2 -1
  222. package/dist/skills/index.js +2 -1
  223. package/dist/skills/loader.d.ts +10 -4
  224. package/dist/skills/loader.js +20 -8
  225. package/dist/skills/marketplace-types.d.ts +0 -1
  226. package/dist/skills/marketplace-types.js +0 -1
  227. package/dist/skills/marketplace.d.ts +0 -1
  228. package/dist/skills/marketplace.js +2 -2
  229. package/dist/skills/parser.d.ts +0 -1
  230. package/dist/skills/parser.js +0 -1
  231. package/dist/skills/remote.d.ts +14 -0
  232. package/dist/skills/remote.js +131 -0
  233. package/dist/skills/types.d.ts +10 -1
  234. package/dist/skills/types.js +0 -1
  235. package/dist/specs/generate.d.ts +0 -1
  236. package/dist/specs/generate.js +0 -1
  237. package/dist/specs/index.d.ts +0 -1
  238. package/dist/specs/index.js +0 -1
  239. package/dist/specs/store.d.ts +0 -1
  240. package/dist/specs/store.js +0 -1
  241. package/dist/specs/sync.d.ts +0 -1
  242. package/dist/specs/sync.js +0 -1
  243. package/dist/specs/tasks-parser.d.ts +0 -1
  244. package/dist/specs/tasks-parser.js +0 -1
  245. package/dist/specs/types.d.ts +0 -1
  246. package/dist/specs/types.js +0 -1
  247. package/dist/steering/extra-instructions.d.ts +8 -0
  248. package/dist/steering/extra-instructions.js +104 -0
  249. package/dist/steering/folder-instructions.d.ts +8 -0
  250. package/dist/steering/folder-instructions.js +28 -0
  251. package/dist/steering/glob.d.ts +0 -1
  252. package/dist/steering/glob.js +0 -1
  253. package/dist/steering/index.d.ts +0 -1
  254. package/dist/steering/index.js +0 -1
  255. package/dist/steering/loader.d.ts +0 -1
  256. package/dist/steering/loader.js +0 -1
  257. package/dist/steering/project-instructions.d.ts +0 -1
  258. package/dist/steering/project-instructions.js +0 -1
  259. package/dist/steering/select.d.ts +0 -1
  260. package/dist/steering/select.js +2 -2
  261. package/dist/steering/types.d.ts +0 -1
  262. package/dist/steering/types.js +0 -1
  263. package/dist/structured/index.d.ts +0 -1
  264. package/dist/structured/index.js +0 -1
  265. package/dist/structured/retry.d.ts +0 -1
  266. package/dist/structured/retry.js +0 -1
  267. package/dist/structured/schema.d.ts +0 -1
  268. package/dist/structured/schema.js +0 -1
  269. package/dist/timed-fetch.d.ts +12 -0
  270. package/dist/timed-fetch.js +83 -0
  271. package/dist/tools/apply-patch.d.ts +52 -0
  272. package/dist/tools/apply-patch.js +197 -0
  273. package/dist/tools/ask-user.d.ts +27 -0
  274. package/dist/tools/ask-user.js +32 -0
  275. package/dist/tools/browser-tools.d.ts +6 -7
  276. package/dist/tools/browser-tools.js +3 -14
  277. package/dist/tools/codebase-search.d.ts +4 -3
  278. package/dist/tools/codebase-search.js +2 -3
  279. package/dist/tools/command-allow.d.ts +0 -1
  280. package/dist/tools/command-allow.js +0 -1
  281. package/dist/tools/edit-file.d.ts +0 -1
  282. package/dist/tools/edit-file.js +5 -4
  283. package/dist/tools/fetch-url.d.ts +7 -1
  284. package/dist/tools/fetch-url.js +52 -20
  285. package/dist/tools/find-references.d.ts +0 -1
  286. package/dist/tools/find-references.js +0 -1
  287. package/dist/tools/find-symbol.d.ts +2 -3
  288. package/dist/tools/find-symbol.js +0 -1
  289. package/dist/tools/ignore-rules.d.ts +0 -1
  290. package/dist/tools/ignore-rules.js +2 -2
  291. package/dist/tools/index.d.ts +5 -2
  292. package/dist/tools/index.js +10 -2
  293. package/dist/tools/list-files.d.ts +0 -1
  294. package/dist/tools/list-files.js +0 -1
  295. package/dist/tools/list-symbols.d.ts +0 -1
  296. package/dist/tools/list-symbols.js +0 -1
  297. package/dist/tools/memory.d.ts +6 -7
  298. package/dist/tools/memory.js +0 -1
  299. package/dist/tools/notebook.d.ts +2 -3
  300. package/dist/tools/notebook.js +0 -1
  301. package/dist/tools/permission-rules.d.ts +32 -0
  302. package/dist/tools/permission-rules.js +182 -0
  303. package/dist/tools/policy.d.ts +0 -1
  304. package/dist/tools/policy.js +0 -1
  305. package/dist/tools/read-file.d.ts +5 -1
  306. package/dist/tools/read-file.js +7 -3
  307. package/dist/tools/read-image.d.ts +0 -1
  308. package/dist/tools/read-image.js +0 -1
  309. package/dist/tools/read-only.d.ts +1 -2
  310. package/dist/tools/read-only.js +2 -1
  311. package/dist/tools/redact.d.ts +0 -1
  312. package/dist/tools/redact.js +0 -1
  313. package/dist/tools/result-cache.d.ts +0 -1
  314. package/dist/tools/result-cache.js +0 -1
  315. package/dist/tools/run-command.d.ts +4 -3
  316. package/dist/tools/run-command.js +12 -9
  317. package/dist/tools/sandbox-loader.d.ts +0 -1
  318. package/dist/tools/sandbox-loader.js +3 -14
  319. package/dist/tools/search-files.d.ts +8 -3
  320. package/dist/tools/search-files.js +43 -1
  321. package/dist/tools/shared.d.ts +5 -1
  322. package/dist/tools/shared.js +30 -3
  323. package/dist/tools/shell-env.d.ts +7 -0
  324. package/dist/tools/shell-env.js +9 -0
  325. package/dist/tools/sub-agent-wait.d.ts +29 -0
  326. package/dist/tools/sub-agent-wait.js +60 -0
  327. package/dist/tools/sub-agent.d.ts +50 -5
  328. package/dist/tools/sub-agent.js +210 -126
  329. package/dist/tools/text-encoding.d.ts +10 -0
  330. package/dist/tools/text-encoding.js +40 -0
  331. package/dist/tools/todo.d.ts +36 -0
  332. package/dist/tools/todo.js +42 -0
  333. package/dist/tools/web-search.d.ts +0 -1
  334. package/dist/tools/web-search.js +0 -1
  335. package/dist/tools/write-file.d.ts +0 -1
  336. package/dist/tools/write-file.js +15 -10
  337. package/dist/tools/write-tools.d.ts +12 -0
  338. package/dist/tools/write-tools.js +18 -0
  339. package/dist/types.d.ts +85 -2
  340. package/dist/types.js +0 -1
  341. package/dist/verify/detect.d.ts +0 -1
  342. package/dist/verify/detect.js +0 -1
  343. package/dist/verify/index.d.ts +0 -1
  344. package/dist/verify/index.js +0 -1
  345. package/dist/worktree/branch-ops.d.ts +0 -1
  346. package/dist/worktree/branch-ops.js +0 -1
  347. package/dist/worktree/index.d.ts +0 -1
  348. package/dist/worktree/index.js +0 -1
  349. package/dist/worktree/worktree.d.ts +3 -1
  350. package/dist/worktree/worktree.js +22 -1
  351. package/package.json +3 -2
  352. package/dist/agent/agent.d.ts.map +0 -1
  353. package/dist/agent/agent.js.map +0 -1
  354. package/dist/agent/architect.d.ts.map +0 -1
  355. package/dist/agent/architect.js.map +0 -1
  356. package/dist/agent/cache-hints.d.ts.map +0 -1
  357. package/dist/agent/cache-hints.js.map +0 -1
  358. package/dist/agent/cost-router.d.ts.map +0 -1
  359. package/dist/agent/cost-router.js.map +0 -1
  360. package/dist/agent/index.d.ts.map +0 -1
  361. package/dist/agent/index.js.map +0 -1
  362. package/dist/agent/prompts.d.ts.map +0 -1
  363. package/dist/agent/prompts.js.map +0 -1
  364. package/dist/agent/think-tags.d.ts.map +0 -1
  365. package/dist/agent/think-tags.js.map +0 -1
  366. package/dist/agent/verify.d.ts.map +0 -1
  367. package/dist/agent/verify.js.map +0 -1
  368. package/dist/ai-comments/index.d.ts.map +0 -1
  369. package/dist/ai-comments/index.js.map +0 -1
  370. package/dist/attachments.d.ts.map +0 -1
  371. package/dist/attachments.js.map +0 -1
  372. package/dist/browser/cdp.d.ts.map +0 -1
  373. package/dist/browser/cdp.js.map +0 -1
  374. package/dist/browser/chrome.d.ts.map +0 -1
  375. package/dist/browser/chrome.js.map +0 -1
  376. package/dist/browser/session.d.ts.map +0 -1
  377. package/dist/browser/session.js.map +0 -1
  378. package/dist/checkpoints/index.d.ts.map +0 -1
  379. package/dist/checkpoints/index.js.map +0 -1
  380. package/dist/checkpoints/store.d.ts.map +0 -1
  381. package/dist/checkpoints/store.js.map +0 -1
  382. package/dist/checkpoints/types.d.ts.map +0 -1
  383. package/dist/checkpoints/types.js.map +0 -1
  384. package/dist/code-index/builder.d.ts.map +0 -1
  385. package/dist/code-index/builder.js.map +0 -1
  386. package/dist/code-index/index-store.d.ts.map +0 -1
  387. package/dist/code-index/index-store.js.map +0 -1
  388. package/dist/code-index/parser.d.ts.map +0 -1
  389. package/dist/code-index/parser.js.map +0 -1
  390. package/dist/code-index/types.d.ts.map +0 -1
  391. package/dist/code-index/types.js.map +0 -1
  392. package/dist/commands/custom-commands.d.ts.map +0 -1
  393. package/dist/commands/custom-commands.js.map +0 -1
  394. package/dist/config-file.d.ts.map +0 -1
  395. package/dist/config-file.js.map +0 -1
  396. package/dist/config.d.ts.map +0 -1
  397. package/dist/config.js.map +0 -1
  398. package/dist/context/compaction.d.ts.map +0 -1
  399. package/dist/context/compaction.js.map +0 -1
  400. package/dist/context/mask.d.ts.map +0 -1
  401. package/dist/context/mask.js.map +0 -1
  402. package/dist/credentials/index.d.ts.map +0 -1
  403. package/dist/credentials/index.js.map +0 -1
  404. package/dist/credentials/types.d.ts.map +0 -1
  405. package/dist/credentials/types.js.map +0 -1
  406. package/dist/diff/index.d.ts.map +0 -1
  407. package/dist/diff/index.js.map +0 -1
  408. package/dist/diff/unified-diff.d.ts.map +0 -1
  409. package/dist/diff/unified-diff.js.map +0 -1
  410. package/dist/git/auto-commit.d.ts.map +0 -1
  411. package/dist/git/auto-commit.js.map +0 -1
  412. package/dist/git/index.d.ts.map +0 -1
  413. package/dist/git/index.js.map +0 -1
  414. package/dist/github/github-tools.d.ts.map +0 -1
  415. package/dist/github/github-tools.js.map +0 -1
  416. package/dist/hooks/agent-runner.d.ts.map +0 -1
  417. package/dist/hooks/agent-runner.js.map +0 -1
  418. package/dist/hooks/bus.d.ts.map +0 -1
  419. package/dist/hooks/bus.js.map +0 -1
  420. package/dist/hooks/config.d.ts.map +0 -1
  421. package/dist/hooks/config.js.map +0 -1
  422. package/dist/hooks/events.d.ts.map +0 -1
  423. package/dist/hooks/events.js.map +0 -1
  424. package/dist/hooks/index.d.ts.map +0 -1
  425. package/dist/hooks/index.js.map +0 -1
  426. package/dist/hooks/loader.d.ts.map +0 -1
  427. package/dist/hooks/loader.js.map +0 -1
  428. package/dist/hooks/runner.d.ts.map +0 -1
  429. package/dist/hooks/runner.js.map +0 -1
  430. package/dist/hooks/watch-coalescer.d.ts.map +0 -1
  431. package/dist/hooks/watch-coalescer.js.map +0 -1
  432. package/dist/hooks/watch-ignore.d.ts.map +0 -1
  433. package/dist/hooks/watch-ignore.js.map +0 -1
  434. package/dist/hooks/watcher.d.ts.map +0 -1
  435. package/dist/hooks/watcher.js.map +0 -1
  436. package/dist/index.d.ts.map +0 -1
  437. package/dist/index.js.map +0 -1
  438. package/dist/lazy-model.d.ts.map +0 -1
  439. package/dist/lazy-model.js.map +0 -1
  440. package/dist/lint/auto-lint.d.ts.map +0 -1
  441. package/dist/lint/auto-lint.js.map +0 -1
  442. package/dist/lint/index.d.ts.map +0 -1
  443. package/dist/lint/index.js.map +0 -1
  444. package/dist/lsp/client.d.ts.map +0 -1
  445. package/dist/lsp/client.js.map +0 -1
  446. package/dist/lsp/diagnostics.d.ts.map +0 -1
  447. package/dist/lsp/diagnostics.js.map +0 -1
  448. package/dist/lsp/index.d.ts.map +0 -1
  449. package/dist/lsp/index.js.map +0 -1
  450. package/dist/mcp/catalog.d.ts.map +0 -1
  451. package/dist/mcp/catalog.js.map +0 -1
  452. package/dist/mcp/index.d.ts.map +0 -1
  453. package/dist/mcp/index.js.map +0 -1
  454. package/dist/mcp/json-schema-to-zod.d.ts.map +0 -1
  455. package/dist/mcp/json-schema-to-zod.js.map +0 -1
  456. package/dist/mcp/manager.d.ts.map +0 -1
  457. package/dist/mcp/manager.js.map +0 -1
  458. package/dist/mcp/marketplace-types.d.ts.map +0 -1
  459. package/dist/mcp/marketplace-types.js.map +0 -1
  460. package/dist/mcp/marketplace.d.ts.map +0 -1
  461. package/dist/mcp/marketplace.js.map +0 -1
  462. package/dist/mcp/mcp-client.d.ts.map +0 -1
  463. package/dist/mcp/mcp-client.js.map +0 -1
  464. package/dist/mcp/mcp-config.d.ts.map +0 -1
  465. package/dist/mcp/mcp-config.js.map +0 -1
  466. package/dist/mcp/registry.d.ts.map +0 -1
  467. package/dist/mcp/registry.js.map +0 -1
  468. package/dist/memory/memory-store.d.ts.map +0 -1
  469. package/dist/memory/memory-store.js.map +0 -1
  470. package/dist/memory/rank.d.ts.map +0 -1
  471. package/dist/memory/rank.js.map +0 -1
  472. package/dist/memory/stale.d.ts.map +0 -1
  473. package/dist/memory/stale.js.map +0 -1
  474. package/dist/model-alias.d.ts.map +0 -1
  475. package/dist/model-alias.js.map +0 -1
  476. package/dist/model-catalog.d.ts.map +0 -1
  477. package/dist/model-catalog.js.map +0 -1
  478. package/dist/model-list.d.ts.map +0 -1
  479. package/dist/model-list.js.map +0 -1
  480. package/dist/orchestrator/board-tools.d.ts.map +0 -1
  481. package/dist/orchestrator/board-tools.js.map +0 -1
  482. package/dist/orchestrator/board.d.ts.map +0 -1
  483. package/dist/orchestrator/board.js.map +0 -1
  484. package/dist/orchestrator/index.d.ts.map +0 -1
  485. package/dist/orchestrator/index.js.map +0 -1
  486. package/dist/orchestrator/orchestrator.d.ts.map +0 -1
  487. package/dist/orchestrator/orchestrator.js.map +0 -1
  488. package/dist/orchestrator/router.d.ts.map +0 -1
  489. package/dist/orchestrator/router.js.map +0 -1
  490. package/dist/orchestrator/specialists-registry.d.ts.map +0 -1
  491. package/dist/orchestrator/specialists-registry.js.map +0 -1
  492. package/dist/orchestrator/specialists.d.ts.map +0 -1
  493. package/dist/orchestrator/specialists.js.map +0 -1
  494. package/dist/orchestrator/types.d.ts.map +0 -1
  495. package/dist/orchestrator/types.js.map +0 -1
  496. package/dist/plugins/index.d.ts.map +0 -1
  497. package/dist/plugins/index.js.map +0 -1
  498. package/dist/plugins/install.d.ts.map +0 -1
  499. package/dist/plugins/install.js.map +0 -1
  500. package/dist/plugins/loader.d.ts.map +0 -1
  501. package/dist/plugins/loader.js.map +0 -1
  502. package/dist/policy/audit.d.ts.map +0 -1
  503. package/dist/policy/audit.js.map +0 -1
  504. package/dist/policy/policy.d.ts.map +0 -1
  505. package/dist/policy/policy.js.map +0 -1
  506. package/dist/policy/proxy.d.ts.map +0 -1
  507. package/dist/policy/proxy.js.map +0 -1
  508. package/dist/pricing.d.ts.map +0 -1
  509. package/dist/pricing.js.map +0 -1
  510. package/dist/providers.d.ts.map +0 -1
  511. package/dist/providers.js.map +0 -1
  512. package/dist/repomap/index.d.ts.map +0 -1
  513. package/dist/repomap/index.js.map +0 -1
  514. package/dist/repomap/repo-map.d.ts.map +0 -1
  515. package/dist/repomap/repo-map.js.map +0 -1
  516. package/dist/semantic/chunker.d.ts.map +0 -1
  517. package/dist/semantic/chunker.js.map +0 -1
  518. package/dist/semantic/embedder.d.ts.map +0 -1
  519. package/dist/semantic/embedder.js.map +0 -1
  520. package/dist/semantic/semantic-index.d.ts.map +0 -1
  521. package/dist/semantic/semantic-index.js.map +0 -1
  522. package/dist/semantic/vector-store.d.ts.map +0 -1
  523. package/dist/semantic/vector-store.js.map +0 -1
  524. package/dist/sessions/index.d.ts.map +0 -1
  525. package/dist/sessions/index.js.map +0 -1
  526. package/dist/sessions/search.d.ts.map +0 -1
  527. package/dist/sessions/search.js.map +0 -1
  528. package/dist/sessions/session-export.d.ts.map +0 -1
  529. package/dist/sessions/session-export.js.map +0 -1
  530. package/dist/sessions/session-store.d.ts.map +0 -1
  531. package/dist/sessions/session-store.js.map +0 -1
  532. package/dist/sessions/watch.d.ts.map +0 -1
  533. package/dist/sessions/watch.js.map +0 -1
  534. package/dist/settings-export.d.ts.map +0 -1
  535. package/dist/settings-export.js.map +0 -1
  536. package/dist/skills/activator.d.ts.map +0 -1
  537. package/dist/skills/activator.js.map +0 -1
  538. package/dist/skills/index.d.ts.map +0 -1
  539. package/dist/skills/index.js.map +0 -1
  540. package/dist/skills/loader.d.ts.map +0 -1
  541. package/dist/skills/loader.js.map +0 -1
  542. package/dist/skills/marketplace-types.d.ts.map +0 -1
  543. package/dist/skills/marketplace-types.js.map +0 -1
  544. package/dist/skills/marketplace.d.ts.map +0 -1
  545. package/dist/skills/marketplace.js.map +0 -1
  546. package/dist/skills/parser.d.ts.map +0 -1
  547. package/dist/skills/parser.js.map +0 -1
  548. package/dist/skills/types.d.ts.map +0 -1
  549. package/dist/skills/types.js.map +0 -1
  550. package/dist/specs/generate.d.ts.map +0 -1
  551. package/dist/specs/generate.js.map +0 -1
  552. package/dist/specs/index.d.ts.map +0 -1
  553. package/dist/specs/index.js.map +0 -1
  554. package/dist/specs/store.d.ts.map +0 -1
  555. package/dist/specs/store.js.map +0 -1
  556. package/dist/specs/sync.d.ts.map +0 -1
  557. package/dist/specs/sync.js.map +0 -1
  558. package/dist/specs/tasks-parser.d.ts.map +0 -1
  559. package/dist/specs/tasks-parser.js.map +0 -1
  560. package/dist/specs/types.d.ts.map +0 -1
  561. package/dist/specs/types.js.map +0 -1
  562. package/dist/steering/glob.d.ts.map +0 -1
  563. package/dist/steering/glob.js.map +0 -1
  564. package/dist/steering/index.d.ts.map +0 -1
  565. package/dist/steering/index.js.map +0 -1
  566. package/dist/steering/loader.d.ts.map +0 -1
  567. package/dist/steering/loader.js.map +0 -1
  568. package/dist/steering/project-instructions.d.ts.map +0 -1
  569. package/dist/steering/project-instructions.js.map +0 -1
  570. package/dist/steering/select.d.ts.map +0 -1
  571. package/dist/steering/select.js.map +0 -1
  572. package/dist/steering/types.d.ts.map +0 -1
  573. package/dist/steering/types.js.map +0 -1
  574. package/dist/structured/index.d.ts.map +0 -1
  575. package/dist/structured/index.js.map +0 -1
  576. package/dist/structured/retry.d.ts.map +0 -1
  577. package/dist/structured/retry.js.map +0 -1
  578. package/dist/structured/schema.d.ts.map +0 -1
  579. package/dist/structured/schema.js.map +0 -1
  580. package/dist/tools/browser-tools.d.ts.map +0 -1
  581. package/dist/tools/browser-tools.js.map +0 -1
  582. package/dist/tools/codebase-search.d.ts.map +0 -1
  583. package/dist/tools/codebase-search.js.map +0 -1
  584. package/dist/tools/command-allow.d.ts.map +0 -1
  585. package/dist/tools/command-allow.js.map +0 -1
  586. package/dist/tools/edit-file.d.ts.map +0 -1
  587. package/dist/tools/edit-file.js.map +0 -1
  588. package/dist/tools/fetch-url.d.ts.map +0 -1
  589. package/dist/tools/fetch-url.js.map +0 -1
  590. package/dist/tools/find-references.d.ts.map +0 -1
  591. package/dist/tools/find-references.js.map +0 -1
  592. package/dist/tools/find-symbol.d.ts.map +0 -1
  593. package/dist/tools/find-symbol.js.map +0 -1
  594. package/dist/tools/ignore-rules.d.ts.map +0 -1
  595. package/dist/tools/ignore-rules.js.map +0 -1
  596. package/dist/tools/index.d.ts.map +0 -1
  597. package/dist/tools/index.js.map +0 -1
  598. package/dist/tools/list-files.d.ts.map +0 -1
  599. package/dist/tools/list-files.js.map +0 -1
  600. package/dist/tools/list-symbols.d.ts.map +0 -1
  601. package/dist/tools/list-symbols.js.map +0 -1
  602. package/dist/tools/memory.d.ts.map +0 -1
  603. package/dist/tools/memory.js.map +0 -1
  604. package/dist/tools/notebook.d.ts.map +0 -1
  605. package/dist/tools/notebook.js.map +0 -1
  606. package/dist/tools/policy.d.ts.map +0 -1
  607. package/dist/tools/policy.js.map +0 -1
  608. package/dist/tools/read-file.d.ts.map +0 -1
  609. package/dist/tools/read-file.js.map +0 -1
  610. package/dist/tools/read-image.d.ts.map +0 -1
  611. package/dist/tools/read-image.js.map +0 -1
  612. package/dist/tools/read-only.d.ts.map +0 -1
  613. package/dist/tools/read-only.js.map +0 -1
  614. package/dist/tools/redact.d.ts.map +0 -1
  615. package/dist/tools/redact.js.map +0 -1
  616. package/dist/tools/result-cache.d.ts.map +0 -1
  617. package/dist/tools/result-cache.js.map +0 -1
  618. package/dist/tools/run-command.d.ts.map +0 -1
  619. package/dist/tools/run-command.js.map +0 -1
  620. package/dist/tools/sandbox-loader.d.ts.map +0 -1
  621. package/dist/tools/sandbox-loader.js.map +0 -1
  622. package/dist/tools/search-files.d.ts.map +0 -1
  623. package/dist/tools/search-files.js.map +0 -1
  624. package/dist/tools/shared.d.ts.map +0 -1
  625. package/dist/tools/shared.js.map +0 -1
  626. package/dist/tools/sub-agent.d.ts.map +0 -1
  627. package/dist/tools/sub-agent.js.map +0 -1
  628. package/dist/tools/web-search.d.ts.map +0 -1
  629. package/dist/tools/web-search.js.map +0 -1
  630. package/dist/tools/write-file.d.ts.map +0 -1
  631. package/dist/tools/write-file.js.map +0 -1
  632. package/dist/types.d.ts.map +0 -1
  633. package/dist/types.js.map +0 -1
  634. package/dist/verify/detect.d.ts.map +0 -1
  635. package/dist/verify/detect.js.map +0 -1
  636. package/dist/verify/index.d.ts.map +0 -1
  637. package/dist/verify/index.js.map +0 -1
  638. package/dist/worktree/branch-ops.d.ts.map +0 -1
  639. package/dist/worktree/branch-ops.js.map +0 -1
  640. package/dist/worktree/index.d.ts.map +0 -1
  641. package/dist/worktree/index.js.map +0 -1
  642. package/dist/worktree/worktree.d.ts.map +0 -1
  643. package/dist/worktree/worktree.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Extra certificate authorities for company networks that inspect TLS with their own root. Node reads
3
+ * `NODE_EXTRA_CA_CERTS` only at process start, which an editor extension cannot set, so the files are read here
4
+ * and handed to the HTTP dispatcher (see installProxy).
5
+ */
6
+ import { readFileSync } from 'node:fs';
7
+ import os from 'node:os';
8
+ import path from 'node:path';
9
+ export function readCaCertificates(files, opts = {}) {
10
+ const home = opts.home ?? os.homedir();
11
+ const pems = [];
12
+ const warnings = [];
13
+ for (const raw of files) {
14
+ const file = raw.trim();
15
+ if (!file)
16
+ continue;
17
+ const resolved = file === '~' || file.startsWith('~/') || file.startsWith('~\\') ? path.join(home, file.slice(1)) : file;
18
+ try {
19
+ const text = readFileSync(resolved, 'utf8');
20
+ if (/-----BEGIN CERTIFICATE-----/.test(text))
21
+ pems.push(text);
22
+ else
23
+ warnings.push(`${file}: no PEM certificate found; ignored`);
24
+ }
25
+ catch (err) {
26
+ warnings.push(`${file}: ${err.message}; ignored`);
27
+ }
28
+ }
29
+ return { pems, warnings };
30
+ }
@@ -106,4 +106,3 @@ export declare function filterMcpServers<T>(servers: Record<string, T>, policy:
106
106
  /** Return `config` with the policy applied (a new object; the input is not mutated). */
107
107
  export declare function applyPolicy(config: AgentConfig, policy: OrgPolicy | undefined): AgentConfig;
108
108
  export {};
109
- //# sourceMappingURL=policy.d.ts.map
@@ -124,4 +124,3 @@ export function applyPolicy(config, policy) {
124
124
  }
125
125
  return out;
126
126
  }
127
- //# sourceMappingURL=policy.js.map
@@ -14,8 +14,14 @@ export interface ProxySettings {
14
14
  export declare function proxyFromEnv(env?: NodeJS.ProcessEnv): ProxySettings;
15
15
  export declare function hasProxy(p: ProxySettings): boolean;
16
16
  /**
17
- * Route all `fetch` traffic through the proxy in `settings` (default: the environment).
18
- * Idempotent. Returns whether a proxy was installed.
17
+ * A fetch that goes through the dispatcher installed by {@link installProxy} (the proxy and the extra CA roots), or
18
+ * undefined when none is installed. Needed because a host can replace the global `fetch` with one that ignores the
19
+ * global dispatcher: VS Code does in its extension host. Calls that must honour the proxy and the roots pass this one
20
+ * explicitly instead of relying on the global.
19
21
  */
20
- export declare function installProxy(settings?: ProxySettings): Promise<boolean>;
21
- //# sourceMappingURL=proxy.d.ts.map
22
+ export declare function installedFetch(): typeof fetch | undefined;
23
+ /**
24
+ * Route all `fetch` traffic through the proxy in `settings` (default: the environment) and trust `extraCa`
25
+ * (PEM text) on top of the built-in roots. Idempotent. Returns whether anything was installed.
26
+ */
27
+ export declare function installProxy(settings?: ProxySettings, extraCa?: readonly string[]): Promise<boolean>;
@@ -5,6 +5,8 @@
5
5
  * well-known global symbol, so installing it from the npm `undici` package also
6
6
  * routes Node's bundled fetch.
7
7
  */
8
+ import https from 'node:https';
9
+ import { rootCertificates } from 'node:tls';
8
10
  /** Proxy settings from the standard environment variables (either case). */
9
11
  export function proxyFromEnv(env = process.env) {
10
12
  const pick = (a, b) => env[a] || env[b] || undefined;
@@ -17,15 +19,40 @@ export function hasProxy(p) {
17
19
  return Boolean(p.https || p.http);
18
20
  }
19
21
  let installed = false;
22
+ let installedFetchFn;
20
23
  /**
21
- * Route all `fetch` traffic through the proxy in `settings` (default: the environment).
22
- * Idempotent. Returns whether a proxy was installed.
24
+ * A fetch that goes through the dispatcher installed by {@link installProxy} (the proxy and the extra CA roots), or
25
+ * undefined when none is installed. Needed because a host can replace the global `fetch` with one that ignores the
26
+ * global dispatcher: VS Code does in its extension host. Calls that must honour the proxy and the roots pass this one
27
+ * explicitly instead of relying on the global.
23
28
  */
24
- export async function installProxy(settings = proxyFromEnv()) {
25
- if (installed || !hasProxy(settings))
29
+ export function installedFetch() {
30
+ return installedFetchFn;
31
+ }
32
+ /**
33
+ * Route all `fetch` traffic through the proxy in `settings` (default: the environment) and trust `extraCa`
34
+ * (PEM text) on top of the built-in roots. Idempotent. Returns whether anything was installed.
35
+ */
36
+ export async function installProxy(settings = proxyFromEnv(), extraCa = []) {
37
+ if (installed || (!hasProxy(settings) && extraCa.length === 0))
26
38
  return false;
27
- const { EnvHttpProxyAgent, setGlobalDispatcher } = await import('undici');
28
- setGlobalDispatcher(new EnvHttpProxyAgent({
39
+ const { Agent, EnvHttpProxyAgent, fetch: undiciFetch, setGlobalDispatcher } = await import('undici');
40
+ const useDispatcher = (dispatcher) => {
41
+ setGlobalDispatcher(dispatcher);
42
+ installedFetchFn = ((input, init) => undiciFetch(input, { ...init, dispatcher }));
43
+ };
44
+ const tls = extraCa.length > 0 ? { ca: [...rootCertificates, ...extraCa] } : undefined;
45
+ // Not everything goes through undici: VS Code replaces the extension host's fetch with one built on node:https, which
46
+ // reads the global agent. Trust the roots there too.
47
+ if (tls)
48
+ https.globalAgent.options.ca = tls.ca;
49
+ if (!hasProxy(settings)) {
50
+ useDispatcher(new Agent({ connect: tls }));
51
+ installed = true;
52
+ return true;
53
+ }
54
+ useDispatcher(new EnvHttpProxyAgent({
55
+ ...(tls ? { requestTls: tls, proxyTls: tls } : {}),
29
56
  // Plain-http targets are forwarded as absolute-URI requests (the classic proxy protocol);
30
57
  // https targets always use CONNECT tunnels.
31
58
  proxyTunnel: false,
@@ -36,4 +63,3 @@ export async function installProxy(settings = proxyFromEnv()) {
36
63
  installed = true;
37
64
  return true;
38
65
  }
39
- //# sourceMappingURL=proxy.js.map
package/dist/pricing.d.ts CHANGED
@@ -70,4 +70,3 @@ export declare function costFor(model: ModelConfig | string, tokens: {
70
70
  * `--list-models` enrichment and for tests.
71
71
  */
72
72
  export declare function knownModelIds(provider?: ProviderName): string[];
73
- //# sourceMappingURL=pricing.d.ts.map
package/dist/pricing.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { overrideCost } from './model-overrides.js';
1
2
  /**
2
3
  * Pricing table. Keys are matched with case-insensitive substring matching
3
4
  * against the model id (after stripping any "models/" / "claude-" /
@@ -99,6 +100,9 @@ export function lookupPricing(model, override) {
99
100
  const cache = typeof model === 'string' ? {} : cacheMultipliersFor(model);
100
101
  if (override)
101
102
  return { ...cache, ...override, known: true };
103
+ const configured = overrideCost(model);
104
+ if (configured)
105
+ return { ...cache, ...configured, known: true };
102
106
  const id = (typeof model === 'string' ? model : model.model).toLowerCase();
103
107
  // Strip only the OpenRouter-style 'models/' prefix so 'models/gemini-1.5-pro'
104
108
  // resolves the same way as 'gemini-1.5-pro'. We do NOT strip provider prefixes
@@ -187,4 +191,3 @@ export function knownModelIds(provider) {
187
191
  const hints = prefixHints[provider];
188
192
  return ids.filter((id) => hints.some((h) => id.includes(h)));
189
193
  }
190
- //# sourceMappingURL=pricing.js.map
@@ -1,4 +1,5 @@
1
1
  import type { LanguageModel } from 'ai';
2
+ import type { ProviderEndpoint } from './custom-providers.js';
2
3
  import type { ModelConfig, ProviderName } from './types.js';
3
4
  /**
4
5
  * Build a Vercel AI SDK `LanguageModel` from a `ModelConfig`.
@@ -14,6 +15,12 @@ import type { ModelConfig, ProviderName } from './types.js';
14
15
  * dependency footprint small (no separate `ollama-ai-provider` or
15
16
  * `openrouter-ai-provider` packages).
16
17
  */
18
+ /**
19
+ * A model on a named provider: the OpenAI chat protocol (default) or the Anthropic message protocol, at the
20
+ * endpoint's URL with its key and headers. `timeoutMs` and `chunkTimeoutMs` wrap the HTTP calls.
21
+ * `fetchImpl` exists for tests.
22
+ */
23
+ export declare function createEndpointModel(endpoint: ProviderEndpoint, model: string, fetchImpl?: typeof fetch): LanguageModel;
17
24
  export declare function createLanguageModel(config: ModelConfig): LanguageModel;
18
25
  /**
19
26
  * Resolve a model from the environment when no config is supplied. Throws a
@@ -34,4 +41,3 @@ export declare function pickAvailableProvider(env?: NodeJS.ProcessEnv, disabled?
34
41
  * Pretty-print a model identifier for display (e.g. "anthropic/claude-sonnet-4-5").
35
42
  */
36
43
  export declare function formatModelId(config: ModelConfig): string;
37
- //# sourceMappingURL=providers.d.ts.map
package/dist/providers.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { anthropic } from '@ai-sdk/anthropic';
2
- import { google } from '@ai-sdk/google';
2
+ import { createGoogleGenerativeAI, google } from '@ai-sdk/google';
3
+ import { createAnthropic } from '@ai-sdk/anthropic';
3
4
  import { createOpenAI, openai } from '@ai-sdk/openai';
4
5
  import { defaultModelFor, hasProviderKey } from './config.js';
6
+ import { installedFetch } from './policy/proxy.js';
7
+ import { withTimeouts } from './timed-fetch.js';
5
8
  import { lazyLanguageModel } from './lazy-model.js';
6
9
  /**
7
10
  * Default Ollama base URL. Ollama serves an OpenAI-compatible API at
@@ -33,25 +36,51 @@ const MINIMAX_BASE_URL = 'https://api.minimax.io/v1';
33
36
  * dependency footprint small (no separate `ollama-ai-provider` or
34
37
  * `openrouter-ai-provider` packages).
35
38
  */
39
+ /**
40
+ * A model on a named provider: the OpenAI chat protocol (default) or the Anthropic message protocol, at the
41
+ * endpoint's URL with its key and headers. `timeoutMs` and `chunkTimeoutMs` wrap the HTTP calls.
42
+ * `fetchImpl` exists for tests.
43
+ */
44
+ export function createEndpointModel(endpoint, model, fetchImpl = installedFetch() ?? fetch) {
45
+ const timed = withTimeouts(fetchImpl, { ...(endpoint.timeoutMs ? { timeoutMs: endpoint.timeoutMs } : {}), ...(endpoint.chunkTimeoutMs ? { chunkTimeoutMs: endpoint.chunkTimeoutMs } : {}) });
46
+ const common = {
47
+ baseURL: endpoint.baseUrl,
48
+ ...(endpoint.headers ? { headers: endpoint.headers } : {}),
49
+ fetch: timed,
50
+ };
51
+ if (endpoint.api === 'anthropic')
52
+ return createAnthropic({ ...common, apiKey: endpoint.apiKey ?? '' })(model);
53
+ return createOpenAI({ ...common, apiKey: endpoint.apiKey ?? 'none' }).chat(model);
54
+ }
55
+ /** `{ fetch }` when a proxy or extra CA roots are installed (see installedFetch), else nothing: the SDK then uses the global one. */
56
+ function viaInstalled() {
57
+ const f = installedFetch();
58
+ return f ? { fetch: f } : {};
59
+ }
36
60
  export function createLanguageModel(config) {
61
+ if (config.endpoint)
62
+ return createEndpointModel(config.endpoint, config.model);
63
+ const net = viaInstalled();
37
64
  switch (config.provider) {
38
65
  case 'openai':
39
- return openai(config.model);
66
+ return net.fetch ? createOpenAI(net)(config.model) : openai(config.model);
40
67
  case 'anthropic':
41
- return anthropic(config.model);
68
+ return net.fetch ? createAnthropic(net)(config.model) : anthropic(config.model);
42
69
  case 'google':
43
- return google(config.model);
70
+ return net.fetch ? createGoogleGenerativeAI(net)(config.model) : google(config.model);
44
71
  case 'ollama':
45
72
  return createOpenAI({
46
73
  baseURL: process.env.OLLAMA_BASE_URL ?? DEFAULT_OLLAMA_BASE_URL,
47
74
  // Ollama doesn't require an API key: pass a placeholder so the
48
75
  // OpenAI SDK's auth header doesn't trip on undefined.
49
76
  apiKey: process.env.OLLAMA_API_KEY ?? 'ollama',
77
+ ...net,
50
78
  }).chat(config.model);
51
79
  case 'openrouter':
52
80
  return createOpenAI({
53
81
  baseURL: OPENROUTER_BASE_URL,
54
82
  apiKey: process.env.OPENROUTER_API_KEY ?? '',
83
+ ...net,
55
84
  headers: {
56
85
  // OpenRouter recommends an app-name header so they can attribute
57
86
  // traffic; helps if you ever need to reach support.
@@ -64,18 +93,20 @@ export function createLanguageModel(config) {
64
93
  return createOpenAI({
65
94
  baseURL: process.env.MINIMAX_BASE_URL ?? MINIMAX_BASE_URL,
66
95
  apiKey: process.env.MINIMAX_API_KEY ?? '',
96
+ ...net,
67
97
  }).chat(config.model);
68
98
  case 'lmstudio':
69
99
  return createOpenAI({
70
100
  baseURL: process.env.LMSTUDIO_BASE_URL ?? DEFAULT_LMSTUDIO_BASE_URL,
71
101
  apiKey: process.env.LMSTUDIO_API_KEY ?? 'lm-studio',
102
+ ...net,
72
103
  }).chat(config.model);
73
104
  case 'openai-compatible': {
74
105
  const baseURL = process.env.OPENAI_COMPATIBLE_BASE_URL;
75
106
  if (!baseURL) {
76
107
  throw new Error('Provider "openai-compatible" needs OPENAI_COMPATIBLE_BASE_URL (e.g. http://localhost:8000/v1).');
77
108
  }
78
- return createOpenAI({ baseURL, apiKey: process.env.OPENAI_COMPATIBLE_API_KEY ?? 'none' }).chat(config.model);
109
+ return createOpenAI({ baseURL, apiKey: process.env.OPENAI_COMPATIBLE_API_KEY ?? 'none', ...net }).chat(config.model);
79
110
  }
80
111
  // The three cloud-account SDKs are heavy (~1.2 s to import together), so they load on first use.
81
112
  case 'bedrock':
@@ -83,6 +114,7 @@ export function createLanguageModel(config) {
83
114
  const { createAmazonBedrock } = await import('@ai-sdk/amazon-bedrock');
84
115
  return createAmazonBedrock({
85
116
  region: process.env.AWS_REGION ?? 'us-east-1',
117
+ ...net,
86
118
  ...(process.env.AWS_BEARER_TOKEN_BEDROCK ? { apiKey: process.env.AWS_BEARER_TOKEN_BEDROCK } : {}),
87
119
  ...(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY
88
120
  ? {
@@ -99,12 +131,14 @@ export function createLanguageModel(config) {
99
131
  return createVertex({
100
132
  ...(process.env.GOOGLE_VERTEX_PROJECT ? { project: process.env.GOOGLE_VERTEX_PROJECT } : {}),
101
133
  location: process.env.GOOGLE_VERTEX_LOCATION ?? 'us-central1',
134
+ ...net,
102
135
  })(config.model);
103
136
  });
104
137
  case 'azure':
105
138
  return lazyLanguageModel({ provider: 'azure', modelId: config.model }, async () => {
106
139
  const { createAzure } = await import('@ai-sdk/azure');
107
140
  return createAzure({
141
+ ...net,
108
142
  ...(process.env.AZURE_API_KEY ? { apiKey: process.env.AZURE_API_KEY } : {}),
109
143
  ...(process.env.AZURE_RESOURCE_NAME ? { resourceName: process.env.AZURE_RESOURCE_NAME } : {}),
110
144
  ...(process.env.AZURE_OPENAI_BASE_URL ? { baseURL: process.env.AZURE_OPENAI_BASE_URL } : {}),
@@ -218,4 +252,3 @@ export function pickAvailableProvider(env = process.env, disabled = []) {
218
252
  export function formatModelId(config) {
219
253
  return `${config.provider}/${config.model}`;
220
254
  }
221
- //# sourceMappingURL=providers.js.map
@@ -2,4 +2,3 @@ export { DEFAULT_MAP_TOKENS, buildEdges, buildRepoMap, estimateTokens, identifie
2
2
  export type { RepoMap, RepoMapOptions } from './repo-map.js';
3
3
  export { isExported, isTestFile, nameWeight } from './repo-map.js';
4
4
  export type { DefinitionFilter } from './repo-map.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export { DEFAULT_MAP_TOKENS, buildEdges, buildRepoMap, estimateTokens, identifierCounts, pageRank, repoMapBlock } from './repo-map.js';
2
2
  export { isExported, isTestFile, nameWeight } from './repo-map.js';
3
- //# sourceMappingURL=index.js.map
@@ -41,4 +41,3 @@ export declare function isExported(file: string, sym: CodeSymbol, line: string):
41
41
  export declare function buildRepoMap(cwd: string, options?: RepoMapOptions): Promise<RepoMap>;
42
42
  /** The block added to the system prompt. */
43
43
  export declare function repoMapBlock(map: RepoMap): string;
44
- //# sourceMappingURL=repo-map.d.ts.map
@@ -256,4 +256,3 @@ export function repoMapBlock(map) {
256
256
  return '';
257
257
  return `<repo-map>\nOutline of the codebase, most important files first. It is a map, not the code: read a file before editing it.\n\n${map.text}\n</repo-map>`;
258
258
  }
259
- //# sourceMappingURL=repo-map.js.map
@@ -10,4 +10,3 @@ export interface Chunk {
10
10
  * overlapping line windows over the whole file.
11
11
  */
12
12
  export declare function chunkSource(source: string, ext: string): Promise<Chunk[]>;
13
- //# sourceMappingURL=chunker.d.ts.map
@@ -32,4 +32,3 @@ export async function chunkSource(source, ext) {
32
32
  }
33
33
  return out;
34
34
  }
35
- //# sourceMappingURL=chunker.js.map
@@ -26,10 +26,24 @@ export interface OpenAiCompatibleEmbedderOptions {
26
26
  fetchImpl?: typeof fetch;
27
27
  }
28
28
  export declare function openAiCompatibleEmbedder(options: OpenAiCompatibleEmbedderOptions): Embedder;
29
+ export interface EmbedderSpec {
30
+ kind: 'hashing' | 'openai' | 'ollama' | 'custom';
31
+ model?: string;
32
+ /** For `custom`: an OpenAI-compatible `/embeddings` endpoint, up to and including `/v1`. */
33
+ baseUrl?: string;
34
+ /** For `custom`: the name of the environment variable holding the key (never the key itself). */
35
+ apiKeyEnv?: string;
36
+ batchSize?: number;
37
+ fetchImpl?: typeof fetch;
38
+ }
39
+ /**
40
+ * An embedder from explicit settings. A choice that lacks what it needs (no key, no endpoint) gives the offline
41
+ * hashing embedder rather than an embedder that fails every search.
42
+ */
43
+ export declare function buildEmbedder(spec: EmbedderSpec, env?: NodeJS.ProcessEnv): Embedder;
29
44
  /**
30
45
  * `FORGE_EMBED_PROVIDER` = `hashing` (default) | `openai` | `ollama`.
31
46
  * `FORGE_EMBED_MODEL` overrides the model. Falls back to hashing when the
32
47
  * chosen provider lacks what it needs (e.g. no OPENAI_API_KEY).
33
48
  */
34
49
  export declare function embedderFromEnv(env?: NodeJS.ProcessEnv): Embedder;
35
- //# sourceMappingURL=embedder.d.ts.map
@@ -85,6 +85,31 @@ export function openAiCompatibleEmbedder(options) {
85
85
  },
86
86
  };
87
87
  }
88
+ /**
89
+ * An embedder from explicit settings. A choice that lacks what it needs (no key, no endpoint) gives the offline
90
+ * hashing embedder rather than an embedder that fails every search.
91
+ */
92
+ export function buildEmbedder(spec, env = process.env) {
93
+ const common = { ...(spec.batchSize ? { batchSize: spec.batchSize } : {}), ...(spec.fetchImpl ? { fetchImpl: spec.fetchImpl } : {}) };
94
+ switch (spec.kind) {
95
+ case 'openai':
96
+ if (!env.OPENAI_API_KEY)
97
+ return hashingEmbedder();
98
+ return openAiCompatibleEmbedder({ baseUrl: env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1', model: spec.model || 'text-embedding-3-small', apiKey: env.OPENAI_API_KEY, ...common });
99
+ case 'ollama': {
100
+ const host = (env.OLLAMA_BASE_URL ?? 'http://localhost:11434').replace(/\/+$/, '').replace(/\/v1$/, '');
101
+ return openAiCompatibleEmbedder({ baseUrl: `${host}/v1`, model: spec.model || 'nomic-embed-text', ...common });
102
+ }
103
+ case 'custom': {
104
+ if (!spec.baseUrl || !spec.model)
105
+ return hashingEmbedder();
106
+ const apiKey = spec.apiKeyEnv ? env[spec.apiKeyEnv] : undefined;
107
+ return openAiCompatibleEmbedder({ baseUrl: spec.baseUrl, model: spec.model, ...(apiKey ? { apiKey } : {}), ...common });
108
+ }
109
+ default:
110
+ return hashingEmbedder();
111
+ }
112
+ }
88
113
  /**
89
114
  * `FORGE_EMBED_PROVIDER` = `hashing` (default) | `openai` | `ollama`.
90
115
  * `FORGE_EMBED_MODEL` overrides the model. Falls back to hashing when the
@@ -105,4 +130,3 @@ export function embedderFromEnv(env = process.env) {
105
130
  }
106
131
  return hashingEmbedder();
107
132
  }
108
- //# sourceMappingURL=embedder.js.map
@@ -1,5 +1,13 @@
1
1
  import { type Embedder } from './embedder.js';
2
2
  import { type SemanticManifest } from './vector-store.js';
3
+ export interface SemanticOptions {
4
+ /** File extensions to index, with the dot. Default: the common source and Markdown ones. */
5
+ extensions?: readonly string[];
6
+ /** Hits scoring below this (cosine similarity) are left out. Default: none cut. */
7
+ minScore?: number;
8
+ }
9
+ /** `"ts, .py,md"` as `['.ts', '.py', '.md']`; undefined (use the defaults) when nothing usable is left. */
10
+ export declare function parseExtensions(text: string | undefined): string[] | undefined;
3
11
  export interface SemanticHit {
4
12
  path: string;
5
13
  startLine: number;
@@ -8,6 +16,5 @@ export interface SemanticHit {
8
16
  snippet: string;
9
17
  }
10
18
  /** Bring `.forge/index/embeddings.json` up to date: re-embed only changed files, drop deleted ones. */
11
- export declare function ensureSemanticFresh(cwd: string, embedder: Embedder): Promise<SemanticManifest>;
12
- export declare function searchSemantic(cwd: string, embedder: Embedder, query: string, k?: number): Promise<SemanticHit[]>;
13
- //# sourceMappingURL=semantic-index.d.ts.map
19
+ export declare function ensureSemanticFresh(cwd: string, embedder: Embedder, options?: SemanticOptions): Promise<SemanticManifest>;
20
+ export declare function searchSemantic(cwd: string, embedder: Embedder, query: string, k?: number, options?: SemanticOptions): Promise<SemanticHit[]>;
@@ -7,9 +7,17 @@ import { chunkSource } from './chunker.js';
7
7
  import { cosine } from './embedder.js';
8
8
  import { decodeVector, encodeVector, loadSemanticManifest, saveSemanticManifest } from './vector-store.js';
9
9
  const EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java', '.md']);
10
+ /** `"ts, .py,md"` as `['.ts', '.py', '.md']`; undefined (use the defaults) when nothing usable is left. */
11
+ export function parseExtensions(text) {
12
+ const list = (text ?? '')
13
+ .split(',')
14
+ .map((e) => e.trim().toLowerCase().replace(/^\.?/, '.'))
15
+ .filter((e) => /^\.[a-z0-9]{1,12}$/.test(e));
16
+ return list.length ? [...new Set(list)] : undefined;
17
+ }
10
18
  const MAX_FILE_BYTES = 512 * 1024;
11
19
  const SNIPPET_LINES = 40;
12
- async function collect(cwd) {
20
+ async function collect(cwd, extensions) {
13
21
  const out = [];
14
22
  const rules = IgnoreRules.forRoot(cwd);
15
23
  async function walk(dir) {
@@ -29,7 +37,7 @@ async function collect(cwd) {
29
37
  if (entry.isDirectory()) {
30
38
  await walk(abs);
31
39
  }
32
- else if (entry.isFile() && EXTENSIONS.has(path.extname(entry.name))) {
40
+ else if (entry.isFile() && extensions.has(path.extname(entry.name).toLowerCase())) {
33
41
  const s = await stat(abs);
34
42
  if (s.size <= MAX_FILE_BYTES) {
35
43
  out.push({ rel: path.relative(cwd, abs).split(path.sep).join('/'), abs, ext: path.extname(entry.name), mtimeMs: s.mtimeMs });
@@ -41,9 +49,9 @@ async function collect(cwd) {
41
49
  return out;
42
50
  }
43
51
  /** Bring `.forge/index/embeddings.json` up to date: re-embed only changed files, drop deleted ones. */
44
- export async function ensureSemanticFresh(cwd, embedder) {
52
+ export async function ensureSemanticFresh(cwd, embedder, options = {}) {
45
53
  const manifest = await loadSemanticManifest(cwd, embedder.id);
46
- const files = await collect(cwd);
54
+ const files = await collect(cwd, options.extensions ? new Set(options.extensions) : EXTENSIONS);
47
55
  const seen = new Set(files.map((f) => f.rel));
48
56
  let changed = false;
49
57
  for (const f of files) {
@@ -68,8 +76,8 @@ export async function ensureSemanticFresh(cwd, embedder) {
68
76
  await saveSemanticManifest(cwd, manifest);
69
77
  return manifest;
70
78
  }
71
- export async function searchSemantic(cwd, embedder, query, k = 8) {
72
- const manifest = await ensureSemanticFresh(cwd, embedder);
79
+ export async function searchSemantic(cwd, embedder, query, k = 8, options = {}) {
80
+ const manifest = await ensureSemanticFresh(cwd, embedder, options);
73
81
  const [q] = await embedder.embed([query]);
74
82
  if (!q)
75
83
  return [];
@@ -80,7 +88,8 @@ export async function searchSemantic(cwd, embedder, query, k = 8) {
80
88
  }
81
89
  scored.sort((a, b) => b.score - a.score);
82
90
  const hits = [];
83
- for (const top of scored.slice(0, k)) {
91
+ const floor = options.minScore;
92
+ for (const top of scored.filter((c) => floor === undefined || c.score >= floor).slice(0, k)) {
84
93
  let text;
85
94
  try {
86
95
  const lines = (await readFile(path.join(cwd, top.rel), 'utf8')).split(/\r?\n/);
@@ -93,4 +102,3 @@ export async function searchSemantic(cwd, embedder, query, k = 8) {
93
102
  }
94
103
  return hits;
95
104
  }
96
- //# sourceMappingURL=semantic-index.js.map
@@ -17,4 +17,3 @@ export declare function encodeVector(v: number[]): string;
17
17
  export declare function decodeVector(s: string): number[];
18
18
  export declare function loadSemanticManifest(cwd: string, embedderId: string): Promise<SemanticManifest>;
19
19
  export declare function saveSemanticManifest(cwd: string, manifest: SemanticManifest): Promise<void>;
20
- //# sourceMappingURL=vector-store.d.ts.map
@@ -25,4 +25,3 @@ export async function saveSemanticManifest(cwd, manifest) {
25
25
  await mkdir(path.dirname(file), { recursive: true });
26
26
  await writeFile(file, JSON.stringify(manifest), 'utf8');
27
27
  }
28
- //# sourceMappingURL=vector-store.js.map
@@ -1,7 +1,7 @@
1
1
  export { defaultSessionDir, generateSessionId, saveSession, loadSession, deleteSession, listSessions, findLatestSession, } from './session-store.js';
2
2
  export type { Session, ListEntry } from './session-store.js';
3
+ export { pruneByRetention, pruneSessions, type SessionPruneOptions, type SessionPruneResult } from './prune.js';
3
4
  export { formatSessionMarkdown, formatSessionJson, type FormatOptions } from './session-export.js';
4
5
  export { appendedSince, summarizeMessage, watchSession } from './watch.js';
5
6
  export type { SessionUpdate, WatchSessionOptions } from './watch.js';
6
7
  export { searchSessions, sessionText, type SessionMatch, type SearchSessionsOptions } from './search.js';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  export { defaultSessionDir, generateSessionId, saveSession, loadSession, deleteSession, listSessions, findLatestSession, } from './session-store.js';
2
+ export { pruneByRetention, pruneSessions } from './prune.js';
2
3
  export { formatSessionMarkdown, formatSessionJson } from './session-export.js';
3
4
  export { appendedSince, summarizeMessage, watchSession } from './watch.js';
4
5
  export { searchSessions, sessionText } from './search.js';
5
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,23 @@
1
+ export interface SessionPruneOptions {
2
+ /** Delete sessions last updated more than this many days ago. */
3
+ olderThanDays: number;
4
+ /** Session ids never to delete, such as the one that is open right now. */
5
+ keepIds?: readonly string[];
6
+ /** Report what would be deleted without deleting it. */
7
+ dryRun?: boolean;
8
+ /** The clock; tests pass a fixed date. */
9
+ now?: Date;
10
+ }
11
+ export interface SessionPruneResult {
12
+ /** Ids deleted (or, in a dry run, that would be). */
13
+ deleted: string[];
14
+ /** Sessions left in place. */
15
+ kept: number;
16
+ }
17
+ /**
18
+ * Prune by the `sessionRetentionDays` setting. Returns undefined, touching nothing, unless it is a
19
+ * positive number: unset means "keep everything".
20
+ */
21
+ export declare function pruneByRetention(dir: string, retentionDays: number | undefined, opts?: Pick<SessionPruneOptions, 'keepIds' | 'now'>): Promise<SessionPruneResult | undefined>;
22
+ /** Delete saved sessions that have not been touched for `olderThanDays` days. Files that are not valid sessions are never touched. */
23
+ export declare function pruneSessions(dir: string, opts: SessionPruneOptions): Promise<SessionPruneResult>;
@@ -0,0 +1,35 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { deleteSession, listSessions } from './session-store.js';
3
+ /**
4
+ * Prune by the `sessionRetentionDays` setting. Returns undefined, touching nothing, unless it is a
5
+ * positive number: unset means "keep everything".
6
+ */
7
+ export async function pruneByRetention(dir, retentionDays, opts = {}) {
8
+ if (retentionDays === undefined || !Number.isFinite(retentionDays) || retentionDays <= 0)
9
+ return undefined;
10
+ return pruneSessions(dir, { ...opts, olderThanDays: retentionDays });
11
+ }
12
+ /** Delete saved sessions that have not been touched for `olderThanDays` days. Files that are not valid sessions are never touched. */
13
+ export async function pruneSessions(dir, opts) {
14
+ if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
15
+ throw new Error(`pruneSessions: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
16
+ }
17
+ if (!existsSync(dir))
18
+ return { deleted: [], kept: 0 };
19
+ const cutoff = (opts.now ?? new Date()).getTime() - opts.olderThanDays * 86_400_000;
20
+ const keep = new Set(opts.keepIds ?? []);
21
+ const deleted = [];
22
+ let kept = 0;
23
+ for (const entry of await listSessions(dir)) {
24
+ const updated = Date.parse(entry.updatedAt);
25
+ const stale = Number.isFinite(updated) && updated < cutoff;
26
+ if (!stale || keep.has(entry.id)) {
27
+ kept++;
28
+ continue;
29
+ }
30
+ if (!opts.dryRun)
31
+ await deleteSession(entry.id, dir);
32
+ deleted.push(entry.id);
33
+ }
34
+ return { deleted, kept };
35
+ }
@@ -20,4 +20,3 @@ export interface SearchSessionsOptions {
20
20
  export declare function sessionText(messages: readonly unknown[]): string;
21
21
  export declare function snippetAround(text: string, at: number, width?: number): string;
22
22
  export declare function searchSessions(dir: string, query: string, options?: SearchSessionsOptions): Promise<SessionMatch[]>;
23
- //# sourceMappingURL=search.d.ts.map
@@ -64,4 +64,3 @@ export async function searchSessions(dir, query, options = {}) {
64
64
  matches.sort((a, b) => b.hits - a.hits);
65
65
  return matches.slice(0, options.limit ?? 20);
66
66
  }
67
- //# sourceMappingURL=search.js.map
@@ -36,4 +36,3 @@ export declare function formatSessionMarkdown(session: Session, options?: Format
36
36
  * strings with `***REDACTED***`.
37
37
  */
38
38
  export declare function formatSessionJson(session: Session, options?: FormatOptions): string;
39
- //# sourceMappingURL=session-export.d.ts.map
@@ -319,4 +319,3 @@ function redactContent(content) {
319
319
  return out;
320
320
  });
321
321
  }
322
- //# sourceMappingURL=session-export.js.map
@@ -62,4 +62,3 @@ export declare function deleteSession(id: string, dir: string): Promise<void>;
62
62
  export declare function listSessions(dir: string): Promise<ListEntry[]>;
63
63
  /** Most-recent session, or null if there are none. */
64
64
  export declare function findLatestSession(dir: string): Promise<ListEntry | null>;
65
- //# sourceMappingURL=session-store.d.ts.map
@@ -155,7 +155,8 @@ function extractPreview(messages) {
155
155
  if (!firstUser)
156
156
  return undefined;
157
157
  const rawText = typeof firstUser.content === 'string' ? firstUser.content : extractText(firstUser.content);
158
- const text = rawText === undefined ? undefined : stripSteering(rawText);
158
+ // The `<context ...>` blocks an @mention appends are attachments, not the user's words.
159
+ const text = rawText === undefined ? undefined : stripSteering(rawText).replace(/\n\n<context [^>]*>[\s\S]*?<\/context>/g, '');
159
160
  if (!text)
160
161
  return undefined;
161
162
  const oneLine = text.replace(/\s+/g, ' ').trim();
@@ -180,4 +181,3 @@ async function rename(from, to) {
180
181
  // Suppress unused-import warning on rare Node versions.
181
182
  void mkdtemp;
182
183
  void rm;
183
- //# sourceMappingURL=session-store.js.map
@@ -26,4 +26,3 @@ export declare function watchSession(id: string, dir: string, onUpdate: (update:
26
26
  export declare function appendedSince(prev: ModelMessage[], next: ModelMessage[]): ModelMessage[] | null;
27
27
  /** One short line per message part, for live tails. */
28
28
  export declare function summarizeMessage(message: ModelMessage, maxChars?: number): string[];
29
- //# sourceMappingURL=watch.d.ts.map
@@ -79,4 +79,3 @@ export function summarizeMessage(message, maxChars = 200) {
79
79
  }
80
80
  return lines;
81
81
  }
82
- //# sourceMappingURL=watch.js.map
@@ -22,4 +22,3 @@ export declare function importSettings(data: ForgeSettingsExport, opts: {
22
22
  configPath?: string;
23
23
  specialistsPath?: string;
24
24
  }): Promise<void>;
25
- //# sourceMappingURL=settings-export.d.ts.map