@calliopelabs/cli 2.5.0 → 3.0.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 (476) hide show
  1. package/README.md +45 -661
  2. package/dist/acp.d.ts +78 -0
  3. package/dist/acp.d.ts.map +1 -0
  4. package/dist/acp.js +572 -0
  5. package/dist/acp.js.map +1 -0
  6. package/dist/bin.d.ts +3 -7
  7. package/dist/bin.d.ts.map +1 -1
  8. package/dist/bin.js +56 -79
  9. package/dist/bin.js.map +1 -1
  10. package/dist/budget.d.ts +64 -0
  11. package/dist/budget.d.ts.map +1 -0
  12. package/dist/budget.js +157 -0
  13. package/dist/budget.js.map +1 -0
  14. package/dist/checkpoint.d.ts +63 -30
  15. package/dist/checkpoint.d.ts.map +1 -1
  16. package/dist/checkpoint.js +247 -160
  17. package/dist/checkpoint.js.map +1 -1
  18. package/dist/circuit-breaker/breaker.js.map +1 -1
  19. package/dist/config.d.ts +86 -81
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js +236 -304
  22. package/dist/config.js.map +1 -1
  23. package/dist/cost.d.ts +114 -0
  24. package/dist/cost.d.ts.map +1 -0
  25. package/dist/cost.js +499 -0
  26. package/dist/cost.js.map +1 -0
  27. package/dist/diff.d.ts.map +1 -1
  28. package/dist/diff.js +11 -7
  29. package/dist/diff.js.map +1 -1
  30. package/dist/errors.js +3 -3
  31. package/dist/errors.js.map +1 -1
  32. package/dist/files.js.map +1 -1
  33. package/dist/fleet.d.ts +30 -0
  34. package/dist/fleet.d.ts.map +1 -0
  35. package/dist/fleet.js +86 -0
  36. package/dist/fleet.js.map +1 -0
  37. package/dist/fuzzy-search.d.ts.map +1 -1
  38. package/dist/fuzzy-search.js +2 -1
  39. package/dist/fuzzy-search.js.map +1 -1
  40. package/dist/git-status.js.map +1 -1
  41. package/dist/headless.d.ts +1 -2
  42. package/dist/headless.d.ts.map +1 -1
  43. package/dist/headless.js +166 -24
  44. package/dist/headless.js.map +1 -1
  45. package/dist/hud/api.d.ts +3 -18
  46. package/dist/hud/api.d.ts.map +1 -1
  47. package/dist/hud/api.js +9 -352
  48. package/dist/hud/api.js.map +1 -1
  49. package/dist/hud/palettes.d.ts.map +1 -1
  50. package/dist/hud/palettes.js +0 -180
  51. package/dist/hud/palettes.js.map +1 -1
  52. package/dist/hud/skins.d.ts.map +1 -1
  53. package/dist/hud/skins.js +0 -263
  54. package/dist/hud/skins.js.map +1 -1
  55. package/dist/hud/types.d.ts +2 -5
  56. package/dist/hud/types.d.ts.map +1 -1
  57. package/dist/index.d.ts +1 -4
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +1 -4
  60. package/dist/index.js.map +1 -1
  61. package/dist/iteration-ledger.d.ts.map +1 -1
  62. package/dist/iteration-ledger.js +3 -2
  63. package/dist/iteration-ledger.js.map +1 -1
  64. package/dist/local-model.d.ts +150 -0
  65. package/dist/local-model.d.ts.map +1 -0
  66. package/dist/local-model.js +408 -0
  67. package/dist/local-model.js.map +1 -0
  68. package/dist/mcp.d.ts.map +1 -1
  69. package/dist/mcp.js +5 -2
  70. package/dist/mcp.js.map +1 -1
  71. package/dist/memory.d.ts.map +1 -1
  72. package/dist/memory.js +6 -4
  73. package/dist/memory.js.map +1 -1
  74. package/dist/model-detection.js +2 -2
  75. package/dist/model-detection.js.map +1 -1
  76. package/dist/parallel-tools.js.map +1 -1
  77. package/dist/plugins.d.ts +32 -1
  78. package/dist/plugins.d.ts.map +1 -1
  79. package/dist/plugins.js +116 -5
  80. package/dist/plugins.js.map +1 -1
  81. package/dist/policy.d.ts +43 -0
  82. package/dist/policy.d.ts.map +1 -0
  83. package/dist/policy.js +139 -0
  84. package/dist/policy.js.map +1 -0
  85. package/dist/project-config.d.ts +1 -2
  86. package/dist/project-config.d.ts.map +1 -1
  87. package/dist/project-config.js +0 -3
  88. package/dist/project-config.js.map +1 -1
  89. package/dist/providers/bedrock.d.ts.map +1 -1
  90. package/dist/providers/bedrock.js +2 -5
  91. package/dist/providers/bedrock.js.map +1 -1
  92. package/dist/providers/compat.d.ts +21 -0
  93. package/dist/providers/compat.d.ts.map +1 -1
  94. package/dist/providers/compat.js +176 -6
  95. package/dist/providers/compat.js.map +1 -1
  96. package/dist/providers/google.js.map +1 -1
  97. package/dist/providers/index.d.ts +19 -4
  98. package/dist/providers/index.d.ts.map +1 -1
  99. package/dist/providers/index.js +61 -10
  100. package/dist/providers/index.js.map +1 -1
  101. package/dist/providers/ollama.d.ts +2 -2
  102. package/dist/providers/ollama.d.ts.map +1 -1
  103. package/dist/providers/ollama.js +26 -6
  104. package/dist/providers/ollama.js.map +1 -1
  105. package/dist/providers/openai.d.ts.map +1 -1
  106. package/dist/providers/openai.js +14 -10
  107. package/dist/providers/openai.js.map +1 -1
  108. package/dist/providers/types.d.ts +8 -0
  109. package/dist/providers/types.d.ts.map +1 -1
  110. package/dist/providers/types.js.map +1 -1
  111. package/dist/replay.d.ts +37 -0
  112. package/dist/replay.d.ts.map +1 -0
  113. package/dist/replay.js +168 -0
  114. package/dist/replay.js.map +1 -0
  115. package/dist/router.d.ts +133 -0
  116. package/dist/router.d.ts.map +1 -0
  117. package/dist/{model-router.js → router.js} +329 -3
  118. package/dist/router.js.map +1 -0
  119. package/dist/runlog.d.ts +185 -0
  120. package/dist/runlog.d.ts.map +1 -0
  121. package/dist/runlog.js +398 -0
  122. package/dist/runlog.js.map +1 -0
  123. package/dist/{sandbox.d.ts → sandbox/docker.d.ts} +1 -1
  124. package/dist/sandbox/docker.d.ts.map +1 -0
  125. package/dist/{sandbox.js → sandbox/docker.js} +1 -1
  126. package/dist/sandbox/docker.js.map +1 -0
  127. package/dist/sandbox/index.d.ts +36 -0
  128. package/dist/sandbox/index.d.ts.map +1 -0
  129. package/dist/sandbox/index.js +62 -0
  130. package/dist/sandbox/index.js.map +1 -0
  131. package/dist/{sandbox-native.d.ts → sandbox/native.d.ts} +1 -1
  132. package/dist/sandbox/native.d.ts.map +1 -0
  133. package/dist/{sandbox-native.js → sandbox/native.js} +1 -1
  134. package/dist/sandbox/native.js.map +1 -0
  135. package/dist/scope.js +1 -1
  136. package/dist/scope.js.map +1 -1
  137. package/dist/scuttlebot/config.js.map +1 -1
  138. package/dist/scuttlebot/irc-client.js.map +1 -1
  139. package/dist/setup.d.ts.map +1 -1
  140. package/dist/setup.js +22 -54
  141. package/dist/setup.js.map +1 -1
  142. package/dist/skills.d.ts +39 -0
  143. package/dist/skills.d.ts.map +1 -1
  144. package/dist/skills.js +90 -8
  145. package/dist/skills.js.map +1 -1
  146. package/dist/storage.d.ts.map +1 -1
  147. package/dist/storage.js +6 -3
  148. package/dist/storage.js.map +1 -1
  149. package/dist/streaming.d.ts +25 -0
  150. package/dist/streaming.d.ts.map +1 -1
  151. package/dist/streaming.js +59 -0
  152. package/dist/streaming.js.map +1 -1
  153. package/dist/styles.d.ts +6 -0
  154. package/dist/styles.d.ts.map +1 -1
  155. package/dist/styles.js +11 -0
  156. package/dist/styles.js.map +1 -1
  157. package/dist/summarization.js.map +1 -1
  158. package/dist/terminal-image.js +1 -1
  159. package/dist/terminal-image.js.map +1 -1
  160. package/dist/themes.d.ts +5 -4
  161. package/dist/themes.d.ts.map +1 -1
  162. package/dist/themes.js +35 -90
  163. package/dist/themes.js.map +1 -1
  164. package/dist/tools.d.ts +27 -3
  165. package/dist/tools.d.ts.map +1 -1
  166. package/dist/tools.js +128 -179
  167. package/dist/tools.js.map +1 -1
  168. package/dist/types.d.ts +4 -3
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/types.js +21 -40
  171. package/dist/types.js.map +1 -1
  172. package/dist/ui/agent.d.ts +3 -6
  173. package/dist/ui/agent.d.ts.map +1 -1
  174. package/dist/ui/agent.js +328 -38
  175. package/dist/ui/agent.js.map +1 -1
  176. package/dist/ui/animations.d.ts +37 -0
  177. package/dist/ui/animations.d.ts.map +1 -0
  178. package/dist/ui/animations.js +227 -0
  179. package/dist/ui/animations.js.map +1 -0
  180. package/dist/ui/chat-input-keys.d.ts +42 -0
  181. package/dist/ui/chat-input-keys.d.ts.map +1 -0
  182. package/dist/ui/chat-input-keys.js +360 -0
  183. package/dist/ui/chat-input-keys.js.map +1 -0
  184. package/dist/ui/chat-input.d.ts +2 -1
  185. package/dist/ui/chat-input.d.ts.map +1 -1
  186. package/dist/ui/chat-input.js +31 -350
  187. package/dist/ui/chat-input.js.map +1 -1
  188. package/dist/ui/commands.d.ts +14 -46
  189. package/dist/ui/commands.d.ts.map +1 -1
  190. package/dist/ui/commands.js +416 -2899
  191. package/dist/ui/commands.js.map +1 -1
  192. package/dist/ui/completions.d.ts +1 -0
  193. package/dist/ui/completions.d.ts.map +1 -1
  194. package/dist/ui/completions.js +36 -107
  195. package/dist/ui/completions.js.map +1 -1
  196. package/dist/ui/components.d.ts +14 -6
  197. package/dist/ui/components.d.ts.map +1 -1
  198. package/dist/ui/components.js +17 -226
  199. package/dist/ui/components.js.map +1 -1
  200. package/dist/ui/context.js +6 -6
  201. package/dist/ui/context.js.map +1 -1
  202. package/dist/ui/debug-log.d.ts +11 -0
  203. package/dist/ui/debug-log.d.ts.map +1 -0
  204. package/dist/ui/debug-log.js +21 -0
  205. package/dist/ui/debug-log.js.map +1 -0
  206. package/dist/ui/error-boundary.d.ts.map +1 -1
  207. package/dist/ui/error-boundary.js.map +1 -1
  208. package/dist/ui/frame.d.ts.map +1 -1
  209. package/dist/ui/frame.js +1 -3
  210. package/dist/ui/frame.js.map +1 -1
  211. package/dist/ui/index.d.ts +11 -3
  212. package/dist/ui/index.d.ts.map +1 -1
  213. package/dist/ui/index.js +45 -1076
  214. package/dist/ui/index.js.map +1 -1
  215. package/dist/ui/messages.d.ts +4 -7
  216. package/dist/ui/messages.d.ts.map +1 -1
  217. package/dist/ui/messages.js +15 -30
  218. package/dist/ui/messages.js.map +1 -1
  219. package/dist/ui/modals/index.d.ts +11 -0
  220. package/dist/ui/modals/index.d.ts.map +1 -0
  221. package/dist/ui/modals/index.js +10 -0
  222. package/dist/ui/modals/index.js.map +1 -0
  223. package/dist/ui/modals/prompts.d.ts +37 -0
  224. package/dist/ui/modals/prompts.d.ts.map +1 -0
  225. package/dist/ui/modals/prompts.js +124 -0
  226. package/dist/ui/modals/prompts.js.map +1 -0
  227. package/dist/ui/modals/selectors.d.ts +33 -0
  228. package/dist/ui/modals/selectors.d.ts.map +1 -0
  229. package/dist/ui/modals/selectors.js +111 -0
  230. package/dist/ui/modals/selectors.js.map +1 -0
  231. package/dist/ui/modals/setup.d.ts +17 -0
  232. package/dist/ui/modals/setup.d.ts.map +1 -0
  233. package/dist/ui/modals/setup.js +51 -0
  234. package/dist/ui/modals/setup.js.map +1 -0
  235. package/dist/ui/regions/input-region.d.ts +40 -0
  236. package/dist/ui/regions/input-region.d.ts.map +1 -0
  237. package/dist/ui/regions/input-region.js +116 -0
  238. package/dist/ui/regions/input-region.js.map +1 -0
  239. package/dist/ui/regions/modal-host.d.ts +41 -0
  240. package/dist/ui/regions/modal-host.d.ts.map +1 -0
  241. package/dist/ui/regions/modal-host.js +51 -0
  242. package/dist/ui/regions/modal-host.js.map +1 -0
  243. package/dist/ui/regions/render-probe.d.ts +22 -0
  244. package/dist/ui/regions/render-probe.d.ts.map +1 -0
  245. package/dist/ui/regions/render-probe.js +45 -0
  246. package/dist/ui/regions/render-probe.js.map +1 -0
  247. package/dist/ui/regions/static-scrollback.d.ts +39 -0
  248. package/dist/ui/regions/static-scrollback.d.ts.map +1 -0
  249. package/dist/ui/regions/static-scrollback.js +68 -0
  250. package/dist/ui/regions/static-scrollback.js.map +1 -0
  251. package/dist/ui/regions/status-region.d.ts +24 -0
  252. package/dist/ui/regions/status-region.d.ts.map +1 -0
  253. package/dist/ui/regions/status-region.js +17 -0
  254. package/dist/ui/regions/status-region.js.map +1 -0
  255. package/dist/ui/regions/transcript-region.d.ts +41 -0
  256. package/dist/ui/regions/transcript-region.d.ts.map +1 -0
  257. package/dist/ui/regions/transcript-region.js +52 -0
  258. package/dist/ui/regions/transcript-region.js.map +1 -0
  259. package/dist/ui/self-restart.d.ts +9 -0
  260. package/dist/ui/self-restart.d.ts.map +1 -0
  261. package/dist/ui/self-restart.js +24 -0
  262. package/dist/ui/self-restart.js.map +1 -0
  263. package/dist/ui/state/use-chat-controller.d.ts +23 -0
  264. package/dist/ui/state/use-chat-controller.d.ts.map +1 -0
  265. package/dist/ui/state/use-chat-controller.js +643 -0
  266. package/dist/ui/state/use-chat-controller.js.map +1 -0
  267. package/dist/ui/state/use-loop-state.d.ts +23 -0
  268. package/dist/ui/state/use-loop-state.d.ts.map +1 -0
  269. package/dist/ui/state/use-loop-state.js +39 -0
  270. package/dist/ui/state/use-loop-state.js.map +1 -0
  271. package/dist/ui/state/use-modal-state.d.ts +52 -0
  272. package/dist/ui/state/use-modal-state.d.ts.map +1 -0
  273. package/dist/ui/state/use-modal-state.js +44 -0
  274. package/dist/ui/state/use-modal-state.js.map +1 -0
  275. package/dist/ui/state/use-model-state.d.ts +29 -0
  276. package/dist/ui/state/use-model-state.d.ts.map +1 -0
  277. package/dist/ui/state/use-model-state.js +47 -0
  278. package/dist/ui/state/use-model-state.js.map +1 -0
  279. package/dist/ui/state/use-processing-state.d.ts +24 -0
  280. package/dist/ui/state/use-processing-state.d.ts.map +1 -0
  281. package/dist/ui/state/use-processing-state.js +46 -0
  282. package/dist/ui/state/use-processing-state.js.map +1 -0
  283. package/dist/ui/state/use-queue-state.d.ts +19 -0
  284. package/dist/ui/state/use-queue-state.d.ts.map +1 -0
  285. package/dist/ui/state/use-queue-state.js +30 -0
  286. package/dist/ui/state/use-queue-state.js.map +1 -0
  287. package/dist/ui/state/use-session-init.d.ts +22 -0
  288. package/dist/ui/state/use-session-init.d.ts.map +1 -0
  289. package/dist/ui/state/use-session-init.js +77 -0
  290. package/dist/ui/state/use-session-init.js.map +1 -0
  291. package/dist/ui/state/use-session-stats.d.ts +16 -0
  292. package/dist/ui/state/use-session-stats.d.ts.map +1 -0
  293. package/dist/ui/state/use-session-stats.js +18 -0
  294. package/dist/ui/state/use-session-stats.js.map +1 -0
  295. package/dist/ui/state/use-terminal-width.d.ts +8 -0
  296. package/dist/ui/state/use-terminal-width.d.ts.map +1 -0
  297. package/dist/ui/state/use-terminal-width.js +22 -0
  298. package/dist/ui/state/use-terminal-width.js.map +1 -0
  299. package/dist/ui/state/use-transcript-state.d.ts +21 -0
  300. package/dist/ui/state/use-transcript-state.d.ts.map +1 -0
  301. package/dist/ui/state/use-transcript-state.js +49 -0
  302. package/dist/ui/state/use-transcript-state.js.map +1 -0
  303. package/dist/ui/status-bar.d.ts.map +1 -1
  304. package/dist/ui/status-bar.js +2 -3
  305. package/dist/ui/status-bar.js.map +1 -1
  306. package/dist/version-check.d.ts.map +1 -1
  307. package/dist/version-check.js +10 -0
  308. package/dist/version-check.js.map +1 -1
  309. package/package.json +10 -3
  310. package/dist/agents/agent-config-loader.d.ts +0 -60
  311. package/dist/agents/agent-config-loader.d.ts.map +0 -1
  312. package/dist/agents/agent-config-loader.js +0 -402
  313. package/dist/agents/agent-config-loader.js.map +0 -1
  314. package/dist/agents/agent-config-presets.d.ts +0 -10
  315. package/dist/agents/agent-config-presets.d.ts.map +0 -1
  316. package/dist/agents/agent-config-presets.js +0 -940
  317. package/dist/agents/agent-config-presets.js.map +0 -1
  318. package/dist/agents/agent-config-types.d.ts +0 -145
  319. package/dist/agents/agent-config-types.d.ts.map +0 -1
  320. package/dist/agents/agent-config-types.js +0 -12
  321. package/dist/agents/agent-config-types.js.map +0 -1
  322. package/dist/agents/agent-detection.d.ts +0 -35
  323. package/dist/agents/agent-detection.d.ts.map +0 -1
  324. package/dist/agents/agent-detection.js +0 -110
  325. package/dist/agents/agent-detection.js.map +0 -1
  326. package/dist/agents/aggregator.d.ts +0 -19
  327. package/dist/agents/aggregator.d.ts.map +0 -1
  328. package/dist/agents/aggregator.js +0 -141
  329. package/dist/agents/aggregator.js.map +0 -1
  330. package/dist/agents/cli-backend.d.ts +0 -32
  331. package/dist/agents/cli-backend.d.ts.map +0 -1
  332. package/dist/agents/cli-backend.js +0 -271
  333. package/dist/agents/cli-backend.js.map +0 -1
  334. package/dist/agents/council-types.d.ts +0 -115
  335. package/dist/agents/council-types.d.ts.map +0 -1
  336. package/dist/agents/council-types.js +0 -81
  337. package/dist/agents/council-types.js.map +0 -1
  338. package/dist/agents/council.d.ts +0 -112
  339. package/dist/agents/council.d.ts.map +0 -1
  340. package/dist/agents/council.js +0 -722
  341. package/dist/agents/council.js.map +0 -1
  342. package/dist/agents/decomposer.d.ts +0 -33
  343. package/dist/agents/decomposer.d.ts.map +0 -1
  344. package/dist/agents/decomposer.js +0 -138
  345. package/dist/agents/decomposer.js.map +0 -1
  346. package/dist/agents/dynamic-tools.d.ts +0 -52
  347. package/dist/agents/dynamic-tools.d.ts.map +0 -1
  348. package/dist/agents/dynamic-tools.js +0 -424
  349. package/dist/agents/dynamic-tools.js.map +0 -1
  350. package/dist/agents/index.d.ts +0 -29
  351. package/dist/agents/index.d.ts.map +0 -1
  352. package/dist/agents/index.js +0 -29
  353. package/dist/agents/index.js.map +0 -1
  354. package/dist/agents/installer.d.ts +0 -39
  355. package/dist/agents/installer.d.ts.map +0 -1
  356. package/dist/agents/installer.js +0 -205
  357. package/dist/agents/installer.js.map +0 -1
  358. package/dist/agents/orchestrator.d.ts +0 -106
  359. package/dist/agents/orchestrator.d.ts.map +0 -1
  360. package/dist/agents/orchestrator.js +0 -363
  361. package/dist/agents/orchestrator.js.map +0 -1
  362. package/dist/agents/sdk-backend.d.ts +0 -63
  363. package/dist/agents/sdk-backend.d.ts.map +0 -1
  364. package/dist/agents/sdk-backend.js +0 -489
  365. package/dist/agents/sdk-backend.js.map +0 -1
  366. package/dist/agents/swarm-types.d.ts +0 -84
  367. package/dist/agents/swarm-types.d.ts.map +0 -1
  368. package/dist/agents/swarm-types.js +0 -20
  369. package/dist/agents/swarm-types.js.map +0 -1
  370. package/dist/agents/swarm.d.ts +0 -79
  371. package/dist/agents/swarm.d.ts.map +0 -1
  372. package/dist/agents/swarm.js +0 -375
  373. package/dist/agents/swarm.js.map +0 -1
  374. package/dist/agents/tools.d.ts +0 -26
  375. package/dist/agents/tools.d.ts.map +0 -1
  376. package/dist/agents/tools.js +0 -776
  377. package/dist/agents/tools.js.map +0 -1
  378. package/dist/agents/types.d.ts +0 -108
  379. package/dist/agents/types.d.ts.map +0 -1
  380. package/dist/agents/types.js +0 -43
  381. package/dist/agents/types.js.map +0 -1
  382. package/dist/api-server.d.ts +0 -45
  383. package/dist/api-server.d.ts.map +0 -1
  384. package/dist/api-server.js +0 -326
  385. package/dist/api-server.js.map +0 -1
  386. package/dist/auto-checkpoint.d.ts +0 -35
  387. package/dist/auto-checkpoint.d.ts.map +0 -1
  388. package/dist/auto-checkpoint.js +0 -176
  389. package/dist/auto-checkpoint.js.map +0 -1
  390. package/dist/background-jobs.d.ts +0 -45
  391. package/dist/background-jobs.d.ts.map +0 -1
  392. package/dist/background-jobs.js +0 -127
  393. package/dist/background-jobs.js.map +0 -1
  394. package/dist/branching.d.ts +0 -56
  395. package/dist/branching.d.ts.map +0 -1
  396. package/dist/branching.js +0 -224
  397. package/dist/branching.js.map +0 -1
  398. package/dist/cli/agent.d.ts +0 -9
  399. package/dist/cli/agent.d.ts.map +0 -1
  400. package/dist/cli/agent.js +0 -330
  401. package/dist/cli/agent.js.map +0 -1
  402. package/dist/cli/commands.d.ts +0 -12
  403. package/dist/cli/commands.d.ts.map +0 -1
  404. package/dist/cli/commands.js +0 -1042
  405. package/dist/cli/commands.js.map +0 -1
  406. package/dist/cli/index.d.ts +0 -8
  407. package/dist/cli/index.d.ts.map +0 -1
  408. package/dist/cli/index.js +0 -268
  409. package/dist/cli/index.js.map +0 -1
  410. package/dist/cli/types.d.ts +0 -33
  411. package/dist/cli/types.d.ts.map +0 -1
  412. package/dist/cli/types.js +0 -21
  413. package/dist/cli/types.js.map +0 -1
  414. package/dist/companions.d.ts +0 -54
  415. package/dist/companions.d.ts.map +0 -1
  416. package/dist/companions.js +0 -440
  417. package/dist/companions.js.map +0 -1
  418. package/dist/file-watcher.d.ts +0 -91
  419. package/dist/file-watcher.d.ts.map +0 -1
  420. package/dist/file-watcher.js +0 -269
  421. package/dist/file-watcher.js.map +0 -1
  422. package/dist/hud/theme-packs/api.d.ts +0 -51
  423. package/dist/hud/theme-packs/api.d.ts.map +0 -1
  424. package/dist/hud/theme-packs/api.js +0 -145
  425. package/dist/hud/theme-packs/api.js.map +0 -1
  426. package/dist/hud/theme-packs/index.d.ts +0 -18
  427. package/dist/hud/theme-packs/index.d.ts.map +0 -1
  428. package/dist/hud/theme-packs/index.js +0 -38
  429. package/dist/hud/theme-packs/index.js.map +0 -1
  430. package/dist/hud/theme-packs/types.d.ts +0 -29
  431. package/dist/hud/theme-packs/types.d.ts.map +0 -1
  432. package/dist/hud/theme-packs/types.js +0 -9
  433. package/dist/hud/theme-packs/types.js.map +0 -1
  434. package/dist/idle-eviction.d.ts +0 -34
  435. package/dist/idle-eviction.d.ts.map +0 -1
  436. package/dist/idle-eviction.js +0 -85
  437. package/dist/idle-eviction.js.map +0 -1
  438. package/dist/model-router.d.ts +0 -67
  439. package/dist/model-router.d.ts.map +0 -1
  440. package/dist/model-router.js.map +0 -1
  441. package/dist/providers/openai-compat-shims.d.ts +0 -31
  442. package/dist/providers/openai-compat-shims.d.ts.map +0 -1
  443. package/dist/providers/openai-compat-shims.js +0 -179
  444. package/dist/providers/openai-compat-shims.js.map +0 -1
  445. package/dist/sandbox-native.d.ts.map +0 -1
  446. package/dist/sandbox-native.js.map +0 -1
  447. package/dist/sandbox.d.ts.map +0 -1
  448. package/dist/sandbox.js.map +0 -1
  449. package/dist/session-timeout.d.ts +0 -31
  450. package/dist/session-timeout.d.ts.map +0 -1
  451. package/dist/session-timeout.js +0 -100
  452. package/dist/session-timeout.js.map +0 -1
  453. package/dist/smart-router.d.ts +0 -73
  454. package/dist/smart-router.d.ts.map +0 -1
  455. package/dist/smart-router.js +0 -332
  456. package/dist/smart-router.js.map +0 -1
  457. package/dist/terminal-recording.d.ts +0 -55
  458. package/dist/terminal-recording.d.ts.map +0 -1
  459. package/dist/terminal-recording.js +0 -182
  460. package/dist/terminal-recording.js.map +0 -1
  461. package/dist/tmux.d.ts +0 -35
  462. package/dist/tmux.d.ts.map +0 -1
  463. package/dist/tmux.js +0 -106
  464. package/dist/tmux.js.map +0 -1
  465. package/dist/ui/modals.d.ts +0 -72
  466. package/dist/ui/modals.d.ts.map +0 -1
  467. package/dist/ui/modals.js +0 -266
  468. package/dist/ui/modals.js.map +0 -1
  469. package/dist/ui/pack-picker.d.ts +0 -12
  470. package/dist/ui/pack-picker.d.ts.map +0 -1
  471. package/dist/ui/pack-picker.js +0 -101
  472. package/dist/ui/pack-picker.js.map +0 -1
  473. package/dist/ui/theme-picker.d.ts +0 -24
  474. package/dist/ui/theme-picker.d.ts.map +0 -1
  475. package/dist/ui/theme-picker.js +0 -190
  476. package/dist/ui/theme-picker.js.map +0 -1
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Calliope CLI - Local Model Excellence
3
+ *
4
+ * A single home for the behaviours that make Calliope a good harness for
5
+ * self-hosted 7-70B models (Ollama, or an OpenAI-compatible/LiteLLM server
6
+ * pointed at localhost / a private box running vLLM etc.). Cloud providers are
7
+ * untouched — every helper here is a no-op or "cloud" answer unless the active
8
+ * backend is detected as local.
9
+ *
10
+ * Responsibilities:
11
+ * - Detect whether a provider/baseUrl pair is a local backend.
12
+ * - Simplify tool JSON-schemas before they are sent to a local model (lossless
13
+ * for execution — tools.ts still validates the real args).
14
+ * - Compute and verify content anchor hashes for stale-view-protected edits.
15
+ * - Detect malformed tool calls and describe how to repair them.
16
+ * - Build the JSON-schema envelope used to grammar-constrain a repair reply.
17
+ * - Probe a local model's capabilities (context length, native tool calls,
18
+ * JSON-schema `format` support) and cache the result per session.
19
+ * - Pick the compact vs full system prompt for a provider.
20
+ */
21
+ import type { LLMProvider, Tool, ToolCall } from './types.js';
22
+ /**
23
+ * True when a URL points at the local machine (loopback host, `*.local`, or the
24
+ * docker host bridge). Used to decide whether an openai-compat / LiteLLM server
25
+ * is a self-hosted backend rather than a hosted proxy.
26
+ */
27
+ export declare function isLoopbackUrl(url: string | undefined): boolean;
28
+ /**
29
+ * Whether the active backend is a locally-hosted model.
30
+ *
31
+ * - `ollama` is always local.
32
+ * - `openai-compat` / `litellm` are local when their base URL is loopback
33
+ * (LM Studio, vLLM, llama.cpp, a local LiteLLM proxy, ...).
34
+ * - Everything else (Anthropic, OpenAI, Bedrock, hosted OpenAI-compat, and the
35
+ * `auto` sentinel) is treated as cloud.
36
+ *
37
+ * `baseUrl` defaults to the configured base URL for the provider.
38
+ */
39
+ export declare function isLocalBackend(provider: LLMProvider, baseUrl?: string): boolean;
40
+ /**
41
+ * The `anchor_hash` property injected into `edit_file`'s SIMPLIFIED schema only
42
+ * (feature 4). tools.ts accepts it from any caller, but it is only advertised to
43
+ * local models — cloud schemas stay inert.
44
+ */
45
+ export declare const ANCHOR_HASH_PROPERTY: {
46
+ readonly type: "string";
47
+ readonly description: "Optional 8-char hash from the last read_file of this file (stale-edit guard); echo it to confirm your view is current.";
48
+ };
49
+ /** The property key models echo back on an anchored edit. */
50
+ export declare const ANCHOR_HASH_KEY = "anchor_hash";
51
+ /**
52
+ * Reduce a verbose description to its first sentence, single-line and capped.
53
+ * Multi-paragraph tool descriptions (e.g. `configure`) collapse to their lede.
54
+ */
55
+ export declare function firstSentence(text: string | undefined, cap: number): string;
56
+ /**
57
+ * Simplify a tool schema for a local model: first-sentence descriptions, capped
58
+ * enum listings, and (for `edit_file`) the optional `anchor_hash` param.
59
+ *
60
+ * LOSSLESS FOR EXECUTION: the returned schema only changes what the model is
61
+ * shown. tools.ts validates the real arguments independently, so trimming a
62
+ * description or truncating an enum listing cannot break a valid call.
63
+ *
64
+ * Calliope's tool schemas are already flat (no nested object properties), so the
65
+ * "flatten nested objects" goal is a structural no-op here; the real token win
66
+ * is in the descriptions and enums.
67
+ */
68
+ export declare function simplifyToolForLocal(tool: Tool): Tool;
69
+ /** Simplify a whole tool set for a local backend. Empty in → empty out. */
70
+ export declare function simplifyToolsForLocal(tools: Tool[]): Tool[];
71
+ /** 8-char sha256 prefix of file content — the stable "view id" a model echoes. */
72
+ export declare function computeAnchorHash(content: string): string;
73
+ /** Footer appended to read_file output for local backends so the model can echo the hash. */
74
+ export declare function anchorHashFooter(hash: string): string;
75
+ /** Classic Levenshtein edit distance (iterative, two-row). */
76
+ export declare function levenshtein(a: string, b: string): number;
77
+ export interface MalformedToolCall {
78
+ /** Human-readable reason, embedded verbatim in the corrective message. */
79
+ reason: string;
80
+ /** Suggested correct tool name, when the fault is a close-miss name. */
81
+ suggestion?: string;
82
+ }
83
+ /**
84
+ * Detect whether a parsed tool call is malformed in a way worth one repair
85
+ * round-trip. Returns null for a well-formed call OR for an unknown tool with no
86
+ * close match (there is nothing to correct — let it surface naturally).
87
+ *
88
+ * - unknown tool name with a close Levenshtein match → suggest the neighbour
89
+ * - missing a required parameter (also how unparseable-args `{}` presents)
90
+ */
91
+ export declare function detectMalformedToolCall(call: ToolCall, tools: Tool[]): MalformedToolCall | null;
92
+ /** The compact corrective message sent on a repair round-trip. */
93
+ export declare function buildRepairMessage(call: ToolCall, fault: MalformedToolCall): string;
94
+ /**
95
+ * JSON-schema envelope for a single tool call, used to grammar-constrain a
96
+ * repair reply via Ollama's `format` parameter. Constraining every response
97
+ * would break prose, so this is only ever applied on the repair round-trip.
98
+ */
99
+ export declare function buildToolCallEnvelopeSchema(toolNames: string[]): Record<string, unknown>;
100
+ /**
101
+ * Extract a corrected tool call from a repair response. Accepts either a native
102
+ * tool call (Ollama returned `tool_calls`) or a grammar-constrained JSON
103
+ * envelope in the text content (`{"name":...,"arguments":{...}}`). Returns null
104
+ * when neither yields a usable call. `id` is preserved so the assistant/tool
105
+ * message threading stays intact.
106
+ */
107
+ export declare function extractRepairedToolCall(content: string, nativeToolCalls: ToolCall[] | undefined, id: string): ToolCall | null;
108
+ export interface LocalModelProfile {
109
+ provider: LLMProvider;
110
+ model: string;
111
+ baseUrl?: string;
112
+ contextLength: number;
113
+ supportsNativeToolCalls: boolean;
114
+ supportsJsonSchemaFormat: boolean;
115
+ /** Raw Ollama capability list when available (e.g. ['completion','tools',...]). */
116
+ capabilities?: string[];
117
+ }
118
+ /**
119
+ * Heuristic native-tool-call support by model family. Only consulted when the
120
+ * backend does not report capabilities directly (older Ollama, non-Ollama local
121
+ * servers). Errs toward the families known to emit reliable tool calls.
122
+ */
123
+ export declare function familySupportsNativeTools(model: string): boolean;
124
+ /** Clear the per-session capability cache (tests only). */
125
+ export declare function clearLocalModelProfileCache(): void;
126
+ /**
127
+ * Resolve a local model's capability profile, caching per session.
128
+ *
129
+ * - contextLength: Ollama /api/show model_info, else the family default.
130
+ * - supportsNativeToolCalls: Ollama `capabilities` includes 'tools' when
131
+ * reported, else a family heuristic.
132
+ * - supportsJsonSchemaFormat: true only for native Ollama (the /api/chat
133
+ * `format` path); other local servers don't share that parameter.
134
+ *
135
+ * Never throws: a failed probe degrades to heuristics.
136
+ */
137
+ export declare function getLocalModelProfile(provider: LLMProvider, model: string, baseUrl?: string): Promise<LocalModelProfile>;
138
+ /**
139
+ * Pick the system prompt for a provider: the compact variant for a local
140
+ * backend, the full prompt for cloud. The single seam every prompt-building call
141
+ * site routes through, so provider checks are not scattered.
142
+ *
143
+ * The `auto` sentinel resolves to the full prompt (auto only selects a local
144
+ * backend when no cloud provider is configured, an edge the request-time schema
145
+ * simplification and repair loop still cover).
146
+ */
147
+ export declare function getSystemPromptForProvider(provider: LLMProvider, baseUrl?: string): string;
148
+ /** Rough token estimate for a raw string (~4 chars/token). */
149
+ export declare function estimateTokens(text: string): number;
150
+ //# sourceMappingURL=local-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-model.d.ts","sourceRoot":"","sources":["../src/local-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Calliope CLI - Local Model Excellence
3
+ *
4
+ * A single home for the behaviours that make Calliope a good harness for
5
+ * self-hosted 7-70B models (Ollama, or an OpenAI-compatible/LiteLLM server
6
+ * pointed at localhost / a private box running vLLM etc.). Cloud providers are
7
+ * untouched — every helper here is a no-op or "cloud" answer unless the active
8
+ * backend is detected as local.
9
+ *
10
+ * Responsibilities:
11
+ * - Detect whether a provider/baseUrl pair is a local backend.
12
+ * - Simplify tool JSON-schemas before they are sent to a local model (lossless
13
+ * for execution — tools.ts still validates the real args).
14
+ * - Compute and verify content anchor hashes for stale-view-protected edits.
15
+ * - Detect malformed tool calls and describe how to repair them.
16
+ * - Build the JSON-schema envelope used to grammar-constrain a repair reply.
17
+ * - Probe a local model's capabilities (context length, native tool calls,
18
+ * JSON-schema `format` support) and cache the result per session.
19
+ * - Pick the compact vs full system prompt for a provider.
20
+ */
21
+ import { createHash } from 'node:crypto';
22
+ import * as config from './config.js';
23
+ import { getSystemPrompt } from './types.js';
24
+ import { getModelContextLimit } from './model-detection.js';
25
+ // ============================================================================
26
+ // Backend detection
27
+ // ============================================================================
28
+ const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '::1', '[::1]', 'host.docker.internal']);
29
+ /**
30
+ * True when a URL points at the local machine (loopback host, `*.local`, or the
31
+ * docker host bridge). Used to decide whether an openai-compat / LiteLLM server
32
+ * is a self-hosted backend rather than a hosted proxy.
33
+ */
34
+ export function isLoopbackUrl(url) {
35
+ if (!url)
36
+ return false;
37
+ let host;
38
+ try {
39
+ host = new URL(url).hostname.toLowerCase();
40
+ }
41
+ catch {
42
+ // Not a parseable URL — fall back to a substring check on the raw value.
43
+ const lower = url.toLowerCase();
44
+ return [...LOOPBACK_HOSTS].some(h => lower.includes(h)) || lower.includes('.local');
45
+ }
46
+ if (LOOPBACK_HOSTS.has(host))
47
+ return true;
48
+ if (host.endsWith('.local'))
49
+ return true;
50
+ return false;
51
+ }
52
+ /**
53
+ * Whether the active backend is a locally-hosted model.
54
+ *
55
+ * - `ollama` is always local.
56
+ * - `openai-compat` / `litellm` are local when their base URL is loopback
57
+ * (LM Studio, vLLM, llama.cpp, a local LiteLLM proxy, ...).
58
+ * - Everything else (Anthropic, OpenAI, Bedrock, hosted OpenAI-compat, and the
59
+ * `auto` sentinel) is treated as cloud.
60
+ *
61
+ * `baseUrl` defaults to the configured base URL for the provider.
62
+ */
63
+ export function isLocalBackend(provider, baseUrl) {
64
+ if (provider === 'ollama')
65
+ return true;
66
+ if (provider === 'litellm' || provider === 'openai-compat') {
67
+ const url = baseUrl ?? config.getBaseUrl(provider);
68
+ return isLoopbackUrl(url);
69
+ }
70
+ return false;
71
+ }
72
+ // ============================================================================
73
+ // Schema simplification (feature 1)
74
+ // ============================================================================
75
+ /** Maximum enum values kept in a simplified schema (execution still accepts any). */
76
+ const ENUM_CAP = 12;
77
+ /** Maximum characters kept for a tool description in a simplified schema. */
78
+ const TOOL_DESC_CAP = 200;
79
+ /** Maximum characters kept for a property description in a simplified schema. */
80
+ const PROP_DESC_CAP = 80;
81
+ /**
82
+ * The `anchor_hash` property injected into `edit_file`'s SIMPLIFIED schema only
83
+ * (feature 4). tools.ts accepts it from any caller, but it is only advertised to
84
+ * local models — cloud schemas stay inert.
85
+ */
86
+ export const ANCHOR_HASH_PROPERTY = {
87
+ type: 'string',
88
+ description: 'Optional 8-char hash from the last read_file of this file (stale-edit guard); echo it to confirm your view is current.',
89
+ };
90
+ /** The property key models echo back on an anchored edit. */
91
+ export const ANCHOR_HASH_KEY = 'anchor_hash';
92
+ /**
93
+ * Reduce a verbose description to its first sentence, single-line and capped.
94
+ * Multi-paragraph tool descriptions (e.g. `configure`) collapse to their lede.
95
+ */
96
+ export function firstSentence(text, cap) {
97
+ if (!text)
98
+ return text ?? '';
99
+ let s = text.trim();
100
+ // Drop everything after the first newline — verbose schemas put reference
101
+ // material on subsequent lines.
102
+ const nl = s.search(/\r?\n/);
103
+ if (nl !== -1)
104
+ s = s.slice(0, nl).trim();
105
+ // Keep only the first sentence within that line.
106
+ const m = s.match(/^.*?[.!?](?=\s|$)/);
107
+ if (m)
108
+ s = m[0].trim();
109
+ if (s.length > cap)
110
+ s = s.slice(0, cap - 1).trimEnd() + '…';
111
+ return s;
112
+ }
113
+ function simplifyProperty(prop) {
114
+ const out = { type: prop.type };
115
+ if (prop.description)
116
+ out.description = firstSentence(prop.description, PROP_DESC_CAP);
117
+ if (prop.enum)
118
+ out.enum = prop.enum.length > ENUM_CAP ? prop.enum.slice(0, ENUM_CAP) : prop.enum;
119
+ if (prop.items)
120
+ out.items = prop.items;
121
+ return out;
122
+ }
123
+ /**
124
+ * Simplify a tool schema for a local model: first-sentence descriptions, capped
125
+ * enum listings, and (for `edit_file`) the optional `anchor_hash` param.
126
+ *
127
+ * LOSSLESS FOR EXECUTION: the returned schema only changes what the model is
128
+ * shown. tools.ts validates the real arguments independently, so trimming a
129
+ * description or truncating an enum listing cannot break a valid call.
130
+ *
131
+ * Calliope's tool schemas are already flat (no nested object properties), so the
132
+ * "flatten nested objects" goal is a structural no-op here; the real token win
133
+ * is in the descriptions and enums.
134
+ */
135
+ export function simplifyToolForLocal(tool) {
136
+ const properties = {};
137
+ for (const [key, prop] of Object.entries(tool.parameters.properties)) {
138
+ properties[key] = simplifyProperty(prop);
139
+ }
140
+ // Advertise the stale-view guard to local models on edit_file only.
141
+ if (tool.name === 'edit_file') {
142
+ properties[ANCHOR_HASH_KEY] = { ...ANCHOR_HASH_PROPERTY };
143
+ }
144
+ return {
145
+ name: tool.name,
146
+ description: firstSentence(tool.description, TOOL_DESC_CAP),
147
+ parameters: {
148
+ type: 'object',
149
+ properties: properties,
150
+ ...(tool.parameters.required ? { required: tool.parameters.required } : {}),
151
+ },
152
+ };
153
+ }
154
+ /** Simplify a whole tool set for a local backend. Empty in → empty out. */
155
+ export function simplifyToolsForLocal(tools) {
156
+ return tools.map(simplifyToolForLocal);
157
+ }
158
+ // ============================================================================
159
+ // Anchor hashes (feature 4)
160
+ // ============================================================================
161
+ /** 8-char sha256 prefix of file content — the stable "view id" a model echoes. */
162
+ export function computeAnchorHash(content) {
163
+ return createHash('sha256').update(content, 'utf8').digest('hex').slice(0, 8);
164
+ }
165
+ /** Footer appended to read_file output for local backends so the model can echo the hash. */
166
+ export function anchorHashFooter(hash) {
167
+ return `\n[anchor_hash: ${hash} — pass as anchor_hash to edit_file to confirm this view is current]`;
168
+ }
169
+ // ============================================================================
170
+ // Malformed tool-call detection + repair (features 2 & 3)
171
+ // ============================================================================
172
+ /** Classic Levenshtein edit distance (iterative, two-row). */
173
+ export function levenshtein(a, b) {
174
+ if (a === b)
175
+ return 0;
176
+ if (a.length === 0)
177
+ return b.length;
178
+ if (b.length === 0)
179
+ return a.length;
180
+ let prev = Array.from({ length: b.length + 1 }, (_, i) => i);
181
+ let curr = new Array(b.length + 1);
182
+ for (let i = 1; i <= a.length; i++) {
183
+ curr[0] = i;
184
+ for (let j = 1; j <= b.length; j++) {
185
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
186
+ curr[j] = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
187
+ }
188
+ [prev, curr] = [curr, prev];
189
+ }
190
+ return prev[b.length];
191
+ }
192
+ /** Max edit distance for an unknown tool name to count as a repairable typo. */
193
+ const NAME_MATCH_THRESHOLD = 2;
194
+ /**
195
+ * Detect whether a parsed tool call is malformed in a way worth one repair
196
+ * round-trip. Returns null for a well-formed call OR for an unknown tool with no
197
+ * close match (there is nothing to correct — let it surface naturally).
198
+ *
199
+ * - unknown tool name with a close Levenshtein match → suggest the neighbour
200
+ * - missing a required parameter (also how unparseable-args `{}` presents)
201
+ */
202
+ export function detectMalformedToolCall(call, tools) {
203
+ const known = tools.find(t => t.name === call.name);
204
+ if (!known) {
205
+ let best;
206
+ let bestDist = Infinity;
207
+ for (const t of tools) {
208
+ const d = levenshtein(call.name.toLowerCase(), t.name.toLowerCase());
209
+ if (d < bestDist) {
210
+ bestDist = d;
211
+ best = t.name;
212
+ }
213
+ }
214
+ if (best && bestDist <= NAME_MATCH_THRESHOLD && bestDist < best.length) {
215
+ return { reason: `unknown tool "${call.name}"; did you mean "${best}"?`, suggestion: best };
216
+ }
217
+ return null;
218
+ }
219
+ const args = (call.arguments ?? {});
220
+ for (const req of known.parameters.required ?? []) {
221
+ const value = args[req];
222
+ if (value === undefined || value === null) {
223
+ return { reason: `missing required parameter "${req}"` };
224
+ }
225
+ }
226
+ return null;
227
+ }
228
+ /** The compact corrective message sent on a repair round-trip. */
229
+ export function buildRepairMessage(call, fault) {
230
+ return `Your tool call to "${call.name}" was malformed: ${fault.reason}. Reply with ONLY the corrected tool call, nothing else.`;
231
+ }
232
+ /**
233
+ * JSON-schema envelope for a single tool call, used to grammar-constrain a
234
+ * repair reply via Ollama's `format` parameter. Constraining every response
235
+ * would break prose, so this is only ever applied on the repair round-trip.
236
+ */
237
+ export function buildToolCallEnvelopeSchema(toolNames) {
238
+ return {
239
+ type: 'object',
240
+ properties: {
241
+ name: toolNames.length > 0 ? { type: 'string', enum: toolNames } : { type: 'string' },
242
+ arguments: { type: 'object' },
243
+ },
244
+ required: ['name', 'arguments'],
245
+ };
246
+ }
247
+ /**
248
+ * Extract a corrected tool call from a repair response. Accepts either a native
249
+ * tool call (Ollama returned `tool_calls`) or a grammar-constrained JSON
250
+ * envelope in the text content (`{"name":...,"arguments":{...}}`). Returns null
251
+ * when neither yields a usable call. `id` is preserved so the assistant/tool
252
+ * message threading stays intact.
253
+ */
254
+ export function extractRepairedToolCall(content, nativeToolCalls, id) {
255
+ if (nativeToolCalls && nativeToolCalls.length > 0) {
256
+ const first = nativeToolCalls[0];
257
+ return { id, name: first.name, arguments: first.arguments ?? {} };
258
+ }
259
+ const text = content.trim();
260
+ if (!text)
261
+ return null;
262
+ // Pull the first balanced JSON object out of the reply (models often wrap it
263
+ // in prose or a code fence despite the "ONLY" instruction).
264
+ const start = text.indexOf('{');
265
+ if (start === -1)
266
+ return null;
267
+ let depth = 0;
268
+ let end = -1;
269
+ for (let i = start; i < text.length; i++) {
270
+ if (text[i] === '{')
271
+ depth++;
272
+ else if (text[i] === '}' && --depth === 0) {
273
+ end = i;
274
+ break;
275
+ }
276
+ }
277
+ if (end === -1)
278
+ return null;
279
+ try {
280
+ const parsed = JSON.parse(text.slice(start, end + 1));
281
+ if (typeof parsed.name !== 'string' || !parsed.name)
282
+ return null;
283
+ const args = (parsed.arguments && typeof parsed.arguments === 'object')
284
+ ? parsed.arguments
285
+ : {};
286
+ return { id, name: parsed.name, arguments: args };
287
+ }
288
+ catch {
289
+ return null;
290
+ }
291
+ }
292
+ /**
293
+ * Heuristic native-tool-call support by model family. Only consulted when the
294
+ * backend does not report capabilities directly (older Ollama, non-Ollama local
295
+ * servers). Errs toward the families known to emit reliable tool calls.
296
+ */
297
+ export function familySupportsNativeTools(model) {
298
+ const m = model.toLowerCase();
299
+ const families = [
300
+ 'llama3.1', 'llama-3.1', 'llama3.2', 'llama-3.2', 'llama3.3', 'llama-3.3', 'llama4', 'llama-4',
301
+ 'qwen2.5', 'qwen3', 'mistral', 'mixtral', 'devstral', 'command-r',
302
+ 'hermes', 'firefunction', 'functionary', 'gemma4', 'gpt-oss',
303
+ ];
304
+ return families.some(f => m.includes(f));
305
+ }
306
+ function normalizeOllamaBase(url) {
307
+ let base = url || 'http://localhost:11434';
308
+ if (base.endsWith('/v1'))
309
+ base = base.slice(0, -3);
310
+ return base;
311
+ }
312
+ async function probeOllama(baseUrl, model) {
313
+ const response = await fetch(`${baseUrl}/api/show`, {
314
+ method: 'POST',
315
+ headers: { 'Content-Type': 'application/json' },
316
+ body: JSON.stringify({ name: model }),
317
+ });
318
+ if (!response.ok)
319
+ throw new Error(`Ollama /api/show returned ${response.status}`);
320
+ const data = await response.json();
321
+ let contextLength;
322
+ if (data.model_info) {
323
+ const ctxKey = Object.keys(data.model_info).find(k => k.includes('context_length') || k.includes('context_window'));
324
+ if (ctxKey && typeof data.model_info[ctxKey] === 'number') {
325
+ contextLength = data.model_info[ctxKey];
326
+ }
327
+ }
328
+ if (data.parameters) {
329
+ const numCtx = data.parameters.match(/num_ctx\s+(\d+)/);
330
+ if (numCtx)
331
+ contextLength = parseInt(numCtx[1], 10);
332
+ }
333
+ return { capabilities: data.capabilities, contextLength };
334
+ }
335
+ // Per-session cache: a CLI process is one session, so a module-level map is the
336
+ // right lifetime. Keyed by provider|model|baseUrl.
337
+ const profileCache = new Map();
338
+ /** Clear the per-session capability cache (tests only). */
339
+ export function clearLocalModelProfileCache() {
340
+ profileCache.clear();
341
+ }
342
+ /**
343
+ * Resolve a local model's capability profile, caching per session.
344
+ *
345
+ * - contextLength: Ollama /api/show model_info, else the family default.
346
+ * - supportsNativeToolCalls: Ollama `capabilities` includes 'tools' when
347
+ * reported, else a family heuristic.
348
+ * - supportsJsonSchemaFormat: true only for native Ollama (the /api/chat
349
+ * `format` path); other local servers don't share that parameter.
350
+ *
351
+ * Never throws: a failed probe degrades to heuristics.
352
+ */
353
+ export async function getLocalModelProfile(provider, model, baseUrl) {
354
+ const url = baseUrl ?? config.getBaseUrl(provider);
355
+ const key = `${provider}|${model}|${url ?? ''}`;
356
+ const cached = profileCache.get(key);
357
+ if (cached)
358
+ return cached;
359
+ let capabilities;
360
+ let contextLength = getModelContextLimit(provider, model);
361
+ let supportsNativeToolCalls = familySupportsNativeTools(model);
362
+ const supportsJsonSchemaFormat = provider === 'ollama';
363
+ if (provider === 'ollama') {
364
+ try {
365
+ const probe = await probeOllama(normalizeOllamaBase(url), model);
366
+ if (probe.capabilities) {
367
+ capabilities = probe.capabilities;
368
+ supportsNativeToolCalls = probe.capabilities.includes('tools');
369
+ }
370
+ if (probe.contextLength && probe.contextLength > 0)
371
+ contextLength = probe.contextLength;
372
+ }
373
+ catch {
374
+ // Keep heuristic values.
375
+ }
376
+ }
377
+ const profile = {
378
+ provider,
379
+ model,
380
+ baseUrl: url,
381
+ contextLength,
382
+ supportsNativeToolCalls,
383
+ supportsJsonSchemaFormat,
384
+ capabilities,
385
+ };
386
+ profileCache.set(key, profile);
387
+ return profile;
388
+ }
389
+ // ============================================================================
390
+ // System prompt selection (feature 5)
391
+ // ============================================================================
392
+ /**
393
+ * Pick the system prompt for a provider: the compact variant for a local
394
+ * backend, the full prompt for cloud. The single seam every prompt-building call
395
+ * site routes through, so provider checks are not scattered.
396
+ *
397
+ * The `auto` sentinel resolves to the full prompt (auto only selects a local
398
+ * backend when no cloud provider is configured, an edge the request-time schema
399
+ * simplification and repair loop still cover).
400
+ */
401
+ export function getSystemPromptForProvider(provider, baseUrl) {
402
+ return getSystemPrompt({ compact: isLocalBackend(provider, baseUrl) });
403
+ }
404
+ /** Rough token estimate for a raw string (~4 chars/token). */
405
+ export function estimateTokens(text) {
406
+ return Math.ceil(text.length / 4);
407
+ }
408
+ //# sourceMappingURL=local-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-model.js","sourceRoot":"","sources":["../src/local-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAE9G;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAuB;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,QAAqB,EAAE,OAAgB;IACpE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,qFAAqF;AACrF,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,6EAA6E;AAC7E,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,iFAAiF;AACjF,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wHAAwH;CAC7H,CAAC;AAEX,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAwB,EAAE,GAAW;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,0EAA0E;IAC1E,gCAAgC;IAChC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,iDAAiD;IACjD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,IAAI,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC;IAC5D,OAAO,CAAC,CAAC;AACX,CAAC;AASD,SAAS,gBAAgB,CAAC,IAAoB;IAC5C,MAAM,GAAG,GAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,IAAI,CAAC,WAAW;QAAE,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACvF,IAAI,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACjG,IAAI,IAAI,CAAC,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAU;IAC7C,MAAM,UAAU,GAAmC,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,UAAU,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAsB,CAAC,CAAC;IAC7D,CAAC;IACD,oEAAoE;IACpE,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;QAC3D,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,UAA8C;YAC1D,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E;KACF,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzC,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,mBAAmB,IAAI,sEAAsE,CAAC;AACvG,CAAC;AAED,+EAA+E;AAC/E,0DAA0D;AAC1D,+EAA+E;AAE/E,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAE,CAAC;AACzB,CAAC;AAED,gFAAgF;AAChF,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAS/B;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc,EAAE,KAAa;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,IAAwB,CAAC;QAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;gBACjB,QAAQ,GAAG,CAAC,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,QAAQ,IAAI,oBAAoB,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvE,OAAO,EAAE,MAAM,EAAE,iBAAiB,IAAI,CAAC,IAAI,oBAAoB,IAAI,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;IAC/D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,EAAE,MAAM,EAAE,+BAA+B,GAAG,GAAG,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,kBAAkB,CAAC,IAAc,EAAE,KAAwB;IACzE,OAAO,sBAAsB,IAAI,CAAC,IAAI,oBAAoB,KAAK,CAAC,MAAM,0DAA0D,CAAC;AACnI,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAmB;IAC7D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;YACrF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC9B;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;KAChC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,eAAuC,EACvC,EAAU;IAEV,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAE,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,6EAA6E;IAC7E,4DAA4D;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACxB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;YAC1C,GAAG,GAAG,CAAC,CAAC;YACR,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAA4C,CAAC;QACjG,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC;YACrE,CAAC,CAAC,MAAM,CAAC,SAAoC;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAiBD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG;QACf,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS;QAC9F,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW;QACjE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS;KAC7D,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAuB;IAClD,IAAI,IAAI,GAAG,GAAG,IAAI,wBAAwB,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,KAAa;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE;QAClD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACtC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAI/B,CAAC;IACF,IAAI,aAAiC,CAAC;IACtC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACpH,IAAI,MAAM,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1D,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAW,CAAC;QACpD,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxD,IAAI,MAAM;YAAE,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC;AAC5D,CAAC;AAED,gFAAgF;AAChF,mDAAmD;AACnD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE1D,2DAA2D;AAC3D,MAAM,UAAU,2BAA2B;IACzC,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAqB,EACrB,KAAa,EACb,OAAgB;IAEhB,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,YAAkC,CAAC;IACvC,IAAI,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,uBAAuB,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAAG,QAAQ,KAAK,QAAQ,CAAC;IAEvD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvB,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;gBAClC,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC;gBAAE,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC1F,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAsB;QACjC,QAAQ;QACR,KAAK;QACL,OAAO,EAAE,GAAG;QACZ,aAAa;QACb,uBAAuB;QACvB,wBAAwB;QACxB,YAAY;KACb,CAAC;IACF,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAqB,EAAE,OAAgB;IAChF,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
package/dist/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
package/dist/mcp.js CHANGED
@@ -106,7 +106,9 @@ function isBlockedAddress(ip) {
106
106
  const type = net.isIP(ip);
107
107
  if (type === 4) {
108
108
  const parts = ip.split('.').map((n) => parseInt(n, 10));
109
- const [a, b] = parts;
109
+ // net.isIP(ip) === 4 guarantees exactly four numeric octets.
110
+ const a = parts[0];
111
+ const b = parts[1];
110
112
  // Loopback (127/8) is allowed by default — see assertUrlAllowed.
111
113
  if (a === 10)
112
114
  return true; // private 10.0.0.0/8
@@ -373,7 +375,8 @@ export async function executeMCPTool(toolName, args) {
373
375
  if (!match) {
374
376
  return `Error: Invalid MCP tool name: ${toolName}`;
375
377
  }
376
- const [, serverId, mcpToolName] = match;
378
+ const serverId = match[1];
379
+ const mcpToolName = match[2];
377
380
  const servers = loadServers();
378
381
  const server = servers.find(s => s.id.endsWith(serverId));
379
382
  if (!server) {