mindweave 0.0.1 → 2.1.2

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 (481) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +171 -14
  3. package/dist/alternator/chassis/cache.js +47 -0
  4. package/dist/alternator/chassis/cache.js.map +1 -0
  5. package/dist/alternator/chassis/domRefs.js +53 -0
  6. package/dist/alternator/chassis/domRefs.js.map +1 -0
  7. package/dist/alternator/chassis/extractWorker.js +65 -0
  8. package/dist/alternator/chassis/extractWorker.js.map +1 -0
  9. package/dist/alternator/chassis/graph.js +221 -0
  10. package/dist/alternator/chassis/graph.js.map +1 -0
  11. package/dist/alternator/chassis/index.js +463 -0
  12. package/dist/alternator/chassis/index.js.map +1 -0
  13. package/dist/alternator/chassis/isolation.js +336 -0
  14. package/dist/alternator/chassis/isolation.js.map +1 -0
  15. package/dist/alternator/chassis/langCases.js +69 -0
  16. package/dist/alternator/chassis/langCases.js.map +1 -0
  17. package/dist/alternator/chassis/lsp.js +469 -0
  18. package/dist/alternator/chassis/lsp.js.map +1 -0
  19. package/dist/alternator/chassis/markup.js +262 -0
  20. package/dist/alternator/chassis/markup.js.map +1 -0
  21. package/dist/alternator/chassis/provision.js +198 -0
  22. package/dist/alternator/chassis/provision.js.map +1 -0
  23. package/dist/alternator/chassis/rank.js +72 -0
  24. package/dist/alternator/chassis/rank.js.map +1 -0
  25. package/dist/alternator/chassis/servers.js +215 -0
  26. package/dist/alternator/chassis/servers.js.map +1 -0
  27. package/dist/alternator/chassis/treesitter.js +608 -0
  28. package/dist/alternator/chassis/treesitter.js.map +1 -0
  29. package/dist/alternator/chassis/types.js +24 -0
  30. package/dist/alternator/chassis/types.js.map +1 -0
  31. package/dist/alternator/lane.js +67 -0
  32. package/dist/alternator/lane.js.map +1 -0
  33. package/dist/cli/App.js +2586 -0
  34. package/dist/cli/App.js.map +1 -0
  35. package/dist/cli/altScreen.js +67 -0
  36. package/dist/cli/altScreen.js.map +1 -0
  37. package/dist/cli/approvalChannel.js +72 -0
  38. package/dist/cli/approvalChannel.js.map +1 -0
  39. package/dist/cli/attachments.js +188 -0
  40. package/dist/cli/attachments.js.map +1 -0
  41. package/dist/cli/bootstrap.js +279 -0
  42. package/dist/cli/bootstrap.js.map +1 -0
  43. package/dist/cli/chatAnchor.js +94 -0
  44. package/dist/cli/chatAnchor.js.map +1 -0
  45. package/dist/cli/commandArgs.js +79 -0
  46. package/dist/cli/commandArgs.js.map +1 -0
  47. package/dist/cli/commandRoute.js +78 -0
  48. package/dist/cli/commandRoute.js.map +1 -0
  49. package/dist/cli/compaction.js +69 -0
  50. package/dist/cli/compaction.js.map +1 -0
  51. package/dist/cli/components/ApprovalBox.js +100 -0
  52. package/dist/cli/components/ApprovalBox.js.map +1 -0
  53. package/dist/cli/components/BlockView.js +128 -0
  54. package/dist/cli/components/BlockView.js.map +1 -0
  55. package/dist/cli/components/FirstRunFrame.js +41 -0
  56. package/dist/cli/components/FirstRunFrame.js.map +1 -0
  57. package/dist/cli/components/KeyManager.js +197 -0
  58. package/dist/cli/components/KeyManager.js.map +1 -0
  59. package/dist/cli/components/KeySetup.js +125 -0
  60. package/dist/cli/components/KeySetup.js.map +1 -0
  61. package/dist/cli/components/MenuFrame.js +24 -0
  62. package/dist/cli/components/MenuFrame.js.map +1 -0
  63. package/dist/cli/components/Picker.js +82 -0
  64. package/dist/cli/components/Picker.js.map +1 -0
  65. package/dist/cli/components/PromptInput.js +509 -0
  66. package/dist/cli/components/PromptInput.js.map +1 -0
  67. package/dist/cli/components/SubagentView.js +86 -0
  68. package/dist/cli/components/SubagentView.js.map +1 -0
  69. package/dist/cli/components/ToolGroup.js +60 -0
  70. package/dist/cli/components/ToolGroup.js.map +1 -0
  71. package/dist/cli/components/ToolLine.js +123 -0
  72. package/dist/cli/components/ToolLine.js.map +1 -0
  73. package/dist/cli/components/TrustGate.js +37 -0
  74. package/dist/cli/components/TrustGate.js.map +1 -0
  75. package/dist/cli/costView.js +40 -0
  76. package/dist/cli/costView.js.map +1 -0
  77. package/dist/cli/frameRate.js +30 -0
  78. package/dist/cli/frameRate.js.map +1 -0
  79. package/dist/cli/framebuffer/paint.js +165 -0
  80. package/dist/cli/framebuffer/paint.js.map +1 -0
  81. package/dist/cli/framebuffer/parse.js +266 -0
  82. package/dist/cli/framebuffer/parse.js.map +1 -0
  83. package/dist/cli/framebuffer/screen.js +196 -0
  84. package/dist/cli/framebuffer/screen.js.map +1 -0
  85. package/dist/cli/framebuffer/writer.js +139 -0
  86. package/dist/cli/framebuffer/writer.js.map +1 -0
  87. package/dist/cli/groupReveal.js +51 -0
  88. package/dist/cli/groupReveal.js.map +1 -0
  89. package/dist/cli/help.js +55 -0
  90. package/dist/cli/help.js.map +1 -0
  91. package/dist/cli/inputView.js +105 -0
  92. package/dist/cli/inputView.js.map +1 -0
  93. package/dist/cli/keyManager.js +65 -0
  94. package/dist/cli/keyManager.js.map +1 -0
  95. package/dist/cli/keySetup.js +35 -0
  96. package/dist/cli/keySetup.js.map +1 -0
  97. package/dist/cli/keyStore.js +73 -0
  98. package/dist/cli/keyStore.js.map +1 -0
  99. package/dist/cli/markdown.js +460 -0
  100. package/dist/cli/markdown.js.map +1 -0
  101. package/dist/cli/messageQueue.js +96 -0
  102. package/dist/cli/messageQueue.js.map +1 -0
  103. package/dist/cli/modes.js +90 -0
  104. package/dist/cli/modes.js.map +1 -0
  105. package/dist/cli/mouse.js +78 -0
  106. package/dist/cli/mouse.js.map +1 -0
  107. package/dist/cli/pasteAssembler.js +44 -0
  108. package/dist/cli/pasteAssembler.js.map +1 -0
  109. package/dist/cli/pathComplete.js +39 -0
  110. package/dist/cli/pathComplete.js.map +1 -0
  111. package/dist/cli/perfLog.js +90 -0
  112. package/dist/cli/perfLog.js.map +1 -0
  113. package/dist/cli/reveal.js +32 -0
  114. package/dist/cli/reveal.js.map +1 -0
  115. package/dist/cli/revealPace.js +59 -0
  116. package/dist/cli/revealPace.js.map +1 -0
  117. package/dist/cli/sessionCarry.js +19 -0
  118. package/dist/cli/sessionCarry.js.map +1 -0
  119. package/dist/cli/smoothScroll.js +74 -0
  120. package/dist/cli/smoothScroll.js.map +1 -0
  121. package/dist/cli/startupArgs.js +96 -0
  122. package/dist/cli/startupArgs.js.map +1 -0
  123. package/dist/cli/terminalRestore.js +34 -0
  124. package/dist/cli/terminalRestore.js.map +1 -0
  125. package/dist/cli/toolDisplay.js +219 -0
  126. package/dist/cli/toolDisplay.js.map +1 -0
  127. package/dist/cli/toolItems.js +65 -0
  128. package/dist/cli/toolItems.js.map +1 -0
  129. package/dist/cli/transcript.js +351 -0
  130. package/dist/cli/transcript.js.map +1 -0
  131. package/dist/cli/trust.js +79 -0
  132. package/dist/cli/trust.js.map +1 -0
  133. package/dist/cli/updateCheck.js +107 -0
  134. package/dist/cli/updateCheck.js.map +1 -0
  135. package/dist/cli/version.js +39 -0
  136. package/dist/cli/version.js.map +1 -0
  137. package/dist/cli/viewport.js +179 -0
  138. package/dist/cli/viewport.js.map +1 -0
  139. package/dist/cli/virtualWindow.js +103 -0
  140. package/dist/cli/virtualWindow.js.map +1 -0
  141. package/dist/cli/workingVerb.js +37 -0
  142. package/dist/cli/workingVerb.js.map +1 -0
  143. package/dist/cli/wrap.js +145 -0
  144. package/dist/cli/wrap.js.map +1 -0
  145. package/dist/drivers/anthropic/cachePoints.js +77 -0
  146. package/dist/drivers/anthropic/cachePoints.js.map +1 -0
  147. package/dist/drivers/anthropic/client.js +432 -0
  148. package/dist/drivers/anthropic/client.js.map +1 -0
  149. package/dist/drivers/anthropic/index.js +10 -0
  150. package/dist/drivers/anthropic/index.js.map +1 -0
  151. package/dist/drivers/anthropic/manifest.js +221 -0
  152. package/dist/drivers/anthropic/manifest.js.map +1 -0
  153. package/dist/drivers/cerebras/client.js +69 -0
  154. package/dist/drivers/cerebras/client.js.map +1 -0
  155. package/dist/drivers/cerebras/index.js +5 -0
  156. package/dist/drivers/cerebras/index.js.map +1 -0
  157. package/dist/drivers/cerebras/manifest.js +140 -0
  158. package/dist/drivers/cerebras/manifest.js.map +1 -0
  159. package/dist/drivers/clientId.js +41 -0
  160. package/dist/drivers/clientId.js.map +1 -0
  161. package/dist/drivers/contextOverflow.js +77 -0
  162. package/dist/drivers/contextOverflow.js.map +1 -0
  163. package/dist/drivers/deepseek/client.js +168 -0
  164. package/dist/drivers/deepseek/client.js.map +1 -0
  165. package/dist/drivers/deepseek/index.js +16 -0
  166. package/dist/drivers/deepseek/index.js.map +1 -0
  167. package/dist/drivers/deepseek/inlineTools.js +46 -0
  168. package/dist/drivers/deepseek/inlineTools.js.map +1 -0
  169. package/dist/drivers/deepseek/manifest.js +166 -0
  170. package/dist/drivers/deepseek/manifest.js.map +1 -0
  171. package/dist/drivers/gemini/client.js +38 -0
  172. package/dist/drivers/gemini/client.js.map +1 -0
  173. package/dist/drivers/gemini/index.js +5 -0
  174. package/dist/drivers/gemini/index.js.map +1 -0
  175. package/dist/drivers/gemini/manifest.js +150 -0
  176. package/dist/drivers/gemini/manifest.js.map +1 -0
  177. package/dist/drivers/glm/client.js +90 -0
  178. package/dist/drivers/glm/client.js.map +1 -0
  179. package/dist/drivers/glm/index.js +9 -0
  180. package/dist/drivers/glm/index.js.map +1 -0
  181. package/dist/drivers/glm/manifest.js +183 -0
  182. package/dist/drivers/glm/manifest.js.map +1 -0
  183. package/dist/drivers/groq/client.js +80 -0
  184. package/dist/drivers/groq/client.js.map +1 -0
  185. package/dist/drivers/groq/index.js +5 -0
  186. package/dist/drivers/groq/index.js.map +1 -0
  187. package/dist/drivers/groq/manifest.js +160 -0
  188. package/dist/drivers/groq/manifest.js.map +1 -0
  189. package/dist/drivers/kimi/client.js +82 -0
  190. package/dist/drivers/kimi/client.js.map +1 -0
  191. package/dist/drivers/kimi/index.js +9 -0
  192. package/dist/drivers/kimi/index.js.map +1 -0
  193. package/dist/drivers/kimi/manifest.js +168 -0
  194. package/dist/drivers/kimi/manifest.js.map +1 -0
  195. package/dist/drivers/meta/client.js +30 -0
  196. package/dist/drivers/meta/client.js.map +1 -0
  197. package/dist/drivers/meta/index.js +5 -0
  198. package/dist/drivers/meta/index.js.map +1 -0
  199. package/dist/drivers/meta/manifest.js +101 -0
  200. package/dist/drivers/meta/manifest.js.map +1 -0
  201. package/dist/drivers/minimax/client.js +36 -0
  202. package/dist/drivers/minimax/client.js.map +1 -0
  203. package/dist/drivers/minimax/index.js +5 -0
  204. package/dist/drivers/minimax/index.js.map +1 -0
  205. package/dist/drivers/minimax/manifest.js +120 -0
  206. package/dist/drivers/minimax/manifest.js.map +1 -0
  207. package/dist/drivers/mistral/client.js +54 -0
  208. package/dist/drivers/mistral/client.js.map +1 -0
  209. package/dist/drivers/mistral/index.js +5 -0
  210. package/dist/drivers/mistral/index.js.map +1 -0
  211. package/dist/drivers/mistral/manifest.js +118 -0
  212. package/dist/drivers/mistral/manifest.js.map +1 -0
  213. package/dist/drivers/openai/client.js +290 -0
  214. package/dist/drivers/openai/client.js.map +1 -0
  215. package/dist/drivers/openai/index.js +9 -0
  216. package/dist/drivers/openai/index.js.map +1 -0
  217. package/dist/drivers/openai/manifest.js +133 -0
  218. package/dist/drivers/openai/manifest.js.map +1 -0
  219. package/dist/drivers/openaiCompat/wire.js +493 -0
  220. package/dist/drivers/openaiCompat/wire.js.map +1 -0
  221. package/dist/drivers/partialTurn.js +23 -0
  222. package/dist/drivers/partialTurn.js.map +1 -0
  223. package/dist/drivers/providerError.js +181 -0
  224. package/dist/drivers/providerError.js.map +1 -0
  225. package/dist/drivers/qwen/client.js +93 -0
  226. package/dist/drivers/qwen/client.js.map +1 -0
  227. package/dist/drivers/qwen/index.js +9 -0
  228. package/dist/drivers/qwen/index.js.map +1 -0
  229. package/dist/drivers/qwen/manifest.js +146 -0
  230. package/dist/drivers/qwen/manifest.js.map +1 -0
  231. package/dist/drivers/registry.js +177 -0
  232. package/dist/drivers/registry.js.map +1 -0
  233. package/dist/drivers/retryPolicy.js +129 -0
  234. package/dist/drivers/retryPolicy.js.map +1 -0
  235. package/dist/drivers/searchBlocks.js +61 -0
  236. package/dist/drivers/searchBlocks.js.map +1 -0
  237. package/dist/drivers/types.js +2 -0
  238. package/dist/drivers/types.js.map +1 -0
  239. package/dist/drivers/xai/client.js +63 -0
  240. package/dist/drivers/xai/client.js.map +1 -0
  241. package/dist/drivers/xai/index.js +5 -0
  242. package/dist/drivers/xai/index.js.map +1 -0
  243. package/dist/drivers/xai/manifest.js +137 -0
  244. package/dist/drivers/xai/manifest.js.map +1 -0
  245. package/dist/dynamo/_probe.tmp.js +20 -0
  246. package/dist/dynamo/_probe.tmp.js.map +1 -0
  247. package/dist/dynamo/cacheBreak.js +88 -0
  248. package/dist/dynamo/cacheBreak.js.map +1 -0
  249. package/dist/dynamo/contextWindow.js +243 -0
  250. package/dist/dynamo/contextWindow.js.map +1 -0
  251. package/dist/dynamo/engine.js +2011 -0
  252. package/dist/dynamo/engine.js.map +1 -0
  253. package/dist/dynamo/guard.js +132 -0
  254. package/dist/dynamo/guard.js.map +1 -0
  255. package/dist/dynamo/liveMeter.js +58 -0
  256. package/dist/dynamo/liveMeter.js.map +1 -0
  257. package/dist/dynamo/model.js +172 -0
  258. package/dist/dynamo/model.js.map +1 -0
  259. package/dist/dynamo/planArtifact.js +125 -0
  260. package/dist/dynamo/planArtifact.js.map +1 -0
  261. package/dist/dynamo/pricing.js +140 -0
  262. package/dist/dynamo/pricing.js.map +1 -0
  263. package/dist/dynamo/prompt.js +264 -0
  264. package/dist/dynamo/prompt.js.map +1 -0
  265. package/dist/dynamo/spend.js +45 -0
  266. package/dist/dynamo/spend.js.map +1 -0
  267. package/dist/dynamo/verify.js +483 -0
  268. package/dist/dynamo/verify.js.map +1 -0
  269. package/dist/governor/forbidden.js +181 -0
  270. package/dist/governor/forbidden.js.map +1 -0
  271. package/dist/governor/freshness.js +83 -0
  272. package/dist/governor/freshness.js.map +1 -0
  273. package/dist/governor/frontmatter.js +38 -0
  274. package/dist/governor/frontmatter.js.map +1 -0
  275. package/dist/governor/glob.js +75 -0
  276. package/dist/governor/glob.js.map +1 -0
  277. package/dist/governor/index.js +87 -0
  278. package/dist/governor/index.js.map +1 -0
  279. package/dist/governor/rules.js +80 -0
  280. package/dist/governor/rules.js.map +1 -0
  281. package/dist/governor/scope.js +91 -0
  282. package/dist/governor/scope.js.map +1 -0
  283. package/dist/governor/skills.js +176 -0
  284. package/dist/governor/skills.js.map +1 -0
  285. package/dist/governor/types.js +16 -0
  286. package/dist/governor/types.js.map +1 -0
  287. package/dist/governor/write.js +182 -0
  288. package/dist/governor/write.js.map +1 -0
  289. package/dist/index.js +89 -0
  290. package/dist/index.js.map +1 -0
  291. package/dist/mcp/catalog.js +232 -0
  292. package/dist/mcp/catalog.js.map +1 -0
  293. package/dist/mcp/config.js +116 -0
  294. package/dist/mcp/config.js.map +1 -0
  295. package/dist/mcp/configWrite.js +254 -0
  296. package/dist/mcp/configWrite.js.map +1 -0
  297. package/dist/mcp/connection.js +504 -0
  298. package/dist/mcp/connection.js.map +1 -0
  299. package/dist/mcp/deferred.js +104 -0
  300. package/dist/mcp/deferred.js.map +1 -0
  301. package/dist/mcp/discover.js +128 -0
  302. package/dist/mcp/discover.js.map +1 -0
  303. package/dist/mcp/manager.js +679 -0
  304. package/dist/mcp/manager.js.map +1 -0
  305. package/dist/mcp/paramHeaders.js +163 -0
  306. package/dist/mcp/paramHeaders.js.map +1 -0
  307. package/dist/mcp/prompts.js +136 -0
  308. package/dist/mcp/prompts.js.map +1 -0
  309. package/dist/mcp/protocol.js +171 -0
  310. package/dist/mcp/protocol.js.map +1 -0
  311. package/dist/mcp/resources.js +119 -0
  312. package/dist/mcp/resources.js.map +1 -0
  313. package/dist/mcp/resultStore.js +180 -0
  314. package/dist/mcp/resultStore.js.map +1 -0
  315. package/dist/mcp/subscriptions.js +74 -0
  316. package/dist/mcp/subscriptions.js.map +1 -0
  317. package/dist/mcp/transport/headerValue.js +40 -0
  318. package/dist/mcp/transport/headerValue.js.map +1 -0
  319. package/dist/mcp/transport/http.js +321 -0
  320. package/dist/mcp/transport/http.js.map +1 -0
  321. package/dist/mcp/transport/stdio.js +234 -0
  322. package/dist/mcp/transport/stdio.js.map +1 -0
  323. package/dist/mcp/transport/types.js +27 -0
  324. package/dist/mcp/transport/types.js.map +1 -0
  325. package/dist/mcp/trust.js +98 -0
  326. package/dist/mcp/trust.js.map +1 -0
  327. package/dist/mcp/trustStore.js +55 -0
  328. package/dist/mcp/trustStore.js.map +1 -0
  329. package/dist/memory/autoMemory.js +340 -0
  330. package/dist/memory/autoMemory.js.map +1 -0
  331. package/dist/memory/compaction.js +513 -0
  332. package/dist/memory/compaction.js.map +1 -0
  333. package/dist/memory/images.js +173 -0
  334. package/dist/memory/images.js.map +1 -0
  335. package/dist/memory/presence.js +59 -0
  336. package/dist/memory/presence.js.map +1 -0
  337. package/dist/memory/projectNotes.js +247 -0
  338. package/dist/memory/projectNotes.js.map +1 -0
  339. package/dist/memory/restore.js +72 -0
  340. package/dist/memory/restore.js.map +1 -0
  341. package/dist/memory/session.js +472 -0
  342. package/dist/memory/session.js.map +1 -0
  343. package/dist/memory/sessionMemory.js +142 -0
  344. package/dist/memory/sessionMemory.js.map +1 -0
  345. package/dist/memory/sessionMemoryCompact.js +136 -0
  346. package/dist/memory/sessionMemoryCompact.js.map +1 -0
  347. package/dist/memory/store.js +217 -0
  348. package/dist/memory/store.js.map +1 -0
  349. package/dist/memory/types.js +14 -0
  350. package/dist/memory/types.js.map +1 -0
  351. package/dist/memory/workingSet.js +383 -0
  352. package/dist/memory/workingSet.js.map +1 -0
  353. package/dist/project/context.js +425 -0
  354. package/dist/project/context.js.map +1 -0
  355. package/dist/tools/approval.js +189 -0
  356. package/dist/tools/approval.js.map +1 -0
  357. package/dist/tools/askUser.js +103 -0
  358. package/dist/tools/askUser.js.map +1 -0
  359. package/dist/tools/atomicWrite.js +151 -0
  360. package/dist/tools/atomicWrite.js.map +1 -0
  361. package/dist/tools/backgroundShells.js +468 -0
  362. package/dist/tools/backgroundShells.js.map +1 -0
  363. package/dist/tools/captureSweep.js +77 -0
  364. package/dist/tools/captureSweep.js.map +1 -0
  365. package/dist/tools/chassisMux.js +92 -0
  366. package/dist/tools/chassisMux.js.map +1 -0
  367. package/dist/tools/checkpoints.js +328 -0
  368. package/dist/tools/checkpoints.js.map +1 -0
  369. package/dist/tools/codeIntel.js +267 -0
  370. package/dist/tools/codeIntel.js.map +1 -0
  371. package/dist/tools/deferredNative.js +121 -0
  372. package/dist/tools/deferredNative.js.map +1 -0
  373. package/dist/tools/detail.js +135 -0
  374. package/dist/tools/detail.js.map +1 -0
  375. package/dist/tools/diagnostics.js +174 -0
  376. package/dist/tools/diagnostics.js.map +1 -0
  377. package/dist/tools/edit.js +167 -0
  378. package/dist/tools/edit.js.map +1 -0
  379. package/dist/tools/editCore.js +283 -0
  380. package/dist/tools/editCore.js.map +1 -0
  381. package/dist/tools/editFile.js +183 -0
  382. package/dist/tools/editFile.js.map +1 -0
  383. package/dist/tools/editRipple.js +126 -0
  384. package/dist/tools/editRipple.js.map +1 -0
  385. package/dist/tools/editTarget.js +131 -0
  386. package/dist/tools/editTarget.js.map +1 -0
  387. package/dist/tools/editWindow.js +49 -0
  388. package/dist/tools/editWindow.js.map +1 -0
  389. package/dist/tools/eol.js +56 -0
  390. package/dist/tools/eol.js.map +1 -0
  391. package/dist/tools/exitPlan.js +175 -0
  392. package/dist/tools/exitPlan.js.map +1 -0
  393. package/dist/tools/focus.js +42 -0
  394. package/dist/tools/focus.js.map +1 -0
  395. package/dist/tools/gitignore.js +148 -0
  396. package/dist/tools/gitignore.js.map +1 -0
  397. package/dist/tools/glob.js +134 -0
  398. package/dist/tools/glob.js.map +1 -0
  399. package/dist/tools/governorTools.js +258 -0
  400. package/dist/tools/governorTools.js.map +1 -0
  401. package/dist/tools/grep.js +450 -0
  402. package/dist/tools/grep.js.map +1 -0
  403. package/dist/tools/guard.js +220 -0
  404. package/dist/tools/guard.js.map +1 -0
  405. package/dist/tools/killTree.js +215 -0
  406. package/dist/tools/killTree.js.map +1 -0
  407. package/dist/tools/listDir.js +143 -0
  408. package/dist/tools/listDir.js.map +1 -0
  409. package/dist/tools/mcpAdd.js +176 -0
  410. package/dist/tools/mcpAdd.js.map +1 -0
  411. package/dist/tools/mcpResources.js +116 -0
  412. package/dist/tools/mcpResources.js.map +1 -0
  413. package/dist/tools/mcpSearch.js +123 -0
  414. package/dist/tools/mcpSearch.js.map +1 -0
  415. package/dist/tools/multiEdit.js +168 -0
  416. package/dist/tools/multiEdit.js.map +1 -0
  417. package/dist/tools/paths.js +225 -0
  418. package/dist/tools/paths.js.map +1 -0
  419. package/dist/tools/posixShell.js +123 -0
  420. package/dist/tools/posixShell.js.map +1 -0
  421. package/dist/tools/readFile.js +371 -0
  422. package/dist/tools/readFile.js.map +1 -0
  423. package/dist/tools/readSymbol.js +145 -0
  424. package/dist/tools/readSymbol.js.map +1 -0
  425. package/dist/tools/registry.js +120 -0
  426. package/dist/tools/registry.js.map +1 -0
  427. package/dist/tools/replaceSymbol.js +141 -0
  428. package/dist/tools/replaceSymbol.js.map +1 -0
  429. package/dist/tools/results.js +15 -0
  430. package/dist/tools/results.js.map +1 -0
  431. package/dist/tools/ripgrep.js +145 -0
  432. package/dist/tools/ripgrep.js.map +1 -0
  433. package/dist/tools/runCommand.js +633 -0
  434. package/dist/tools/runCommand.js.map +1 -0
  435. package/dist/tools/saveMemory.js +102 -0
  436. package/dist/tools/saveMemory.js.map +1 -0
  437. package/dist/tools/screenshot.js +200 -0
  438. package/dist/tools/screenshot.js.map +1 -0
  439. package/dist/tools/screenshotWin.js +227 -0
  440. package/dist/tools/screenshotWin.js.map +1 -0
  441. package/dist/tools/search.js +121 -0
  442. package/dist/tools/search.js.map +1 -0
  443. package/dist/tools/sessionTools.js +187 -0
  444. package/dist/tools/sessionTools.js.map +1 -0
  445. package/dist/tools/shellCheckpoint.js +123 -0
  446. package/dist/tools/shellCheckpoint.js.map +1 -0
  447. package/dist/tools/shellLint.js +102 -0
  448. package/dist/tools/shellLint.js.map +1 -0
  449. package/dist/tools/shellTools.js +203 -0
  450. package/dist/tools/shellTools.js.map +1 -0
  451. package/dist/tools/spanCore.js +78 -0
  452. package/dist/tools/spanCore.js.map +1 -0
  453. package/dist/tools/subagent.js +224 -0
  454. package/dist/tools/subagent.js.map +1 -0
  455. package/dist/tools/subagentReport.js +114 -0
  456. package/dist/tools/subagentReport.js.map +1 -0
  457. package/dist/tools/tempSweep.js +118 -0
  458. package/dist/tools/tempSweep.js.map +1 -0
  459. package/dist/tools/todo.js +117 -0
  460. package/dist/tools/todo.js.map +1 -0
  461. package/dist/tools/types.js +2 -0
  462. package/dist/tools/types.js.map +1 -0
  463. package/dist/tools/untrusted.js +46 -0
  464. package/dist/tools/untrusted.js.map +1 -0
  465. package/dist/tools/useSkill.js +62 -0
  466. package/dist/tools/useSkill.js.map +1 -0
  467. package/dist/tools/walk.js +152 -0
  468. package/dist/tools/walk.js.map +1 -0
  469. package/dist/tools/web.js +61 -0
  470. package/dist/tools/web.js.map +1 -0
  471. package/dist/tools/webFetch.js +444 -0
  472. package/dist/tools/webFetch.js.map +1 -0
  473. package/dist/tools/webSearch.js +130 -0
  474. package/dist/tools/webSearch.js.map +1 -0
  475. package/dist/tools/workspace.js +212 -0
  476. package/dist/tools/workspace.js.map +1 -0
  477. package/dist/tools/workspaceDiscover.js +216 -0
  478. package/dist/tools/workspaceDiscover.js.map +1 -0
  479. package/dist/tools/writeFile.js +162 -0
  480. package/dist/tools/writeFile.js.map +1 -0
  481. package/package.json +74 -28
@@ -0,0 +1,118 @@
1
+ export const MEDIUM = "mistral-medium-3-5-26-04";
2
+ export const LARGE = "mistral-large-3-25-12";
3
+ export const SMALL = "mistral-small-4-0-26-03";
4
+ export const MINISTRAL_8B = "ministral-3-8b-25-12";
5
+ /** The model used when nothing is saved and no env override is set. */
6
+ export const DEFAULT_MODEL = MEDIUM;
7
+ /** The models offered by `/model`. First entry is this provider's default. */
8
+ export const MODELS = [
9
+ { id: MEDIUM, label: "Mistral Medium 3.5", description: "the flagship, tuned for agents and code — the default" },
10
+ { id: LARGE, label: "Mistral Large 3", description: "open weights, and much cheaper than the flagship" },
11
+ { id: SMALL, label: "Mistral Small 4", description: "small and capable, with a reasoning dial" },
12
+ { id: MINISTRAL_8B, label: "Ministral 8B", description: "cheapest tier, for simple work" },
13
+ ];
14
+ /**
15
+ * Whether a model takes the `reasoning_effort` dial. Mistral serves it on the
16
+ * flagship and on Small 4, and not on the rest of the lineup.
17
+ */
18
+ export function takesEffort(model) {
19
+ return model === MEDIUM || model === SMALL;
20
+ }
21
+ /**
22
+ * The reasoning levels offered by `/think`.
23
+ *
24
+ * `reasoning_effort` is a ROOT-LEVEL field here, and `none` is its off switch: at
25
+ * `none` the model thinks minimally and the thinking chunk is omitted, at `high` a
26
+ * full thinking chunk precedes the answer. Those two are the documented ends, so
27
+ * those two are what is offered — inventing intermediate rungs whose behaviour is
28
+ * undocumented would be a menu making promises the API has not made.
29
+ */
30
+ export function thinkLevels(model) {
31
+ if (takesEffort(model)) {
32
+ return [
33
+ { label: "Standard", description: "answer directly — fastest", thinking: false, effort: "low" },
34
+ { label: "Thinking", description: "think first, then answer", thinking: true, effort: "high" },
35
+ ];
36
+ }
37
+ return [{ label: "Standard", description: "this model has no reasoning dial", thinking: false, effort: "low" }];
38
+ }
39
+ /**
40
+ * List prices (USD / 1M tokens).
41
+ *
42
+ * Note the lineup is not priced in name order: Medium 3.5 is the newer flagship and
43
+ * costs several times Large 3, which is the older open-weight workhorse. That reads
44
+ * as a mistake and is not one.
45
+ *
46
+ * Cached input bills at a TENTH of the standard input rate, which is why `cacheHit`
47
+ * is a real discount here rather than a mirror of `cacheMiss`. An earlier version of
48
+ * this file asserted Mistral published no cached rate; it does.
49
+ */
50
+ const PRICES = {
51
+ [MEDIUM]: { cacheHit: 0.15, cacheMiss: 1.5, output: 7.5 },
52
+ [LARGE]: { cacheHit: 0.05, cacheMiss: 0.5, output: 1.5 },
53
+ [SMALL]: { cacheHit: 0.015, cacheMiss: 0.15, output: 0.6 },
54
+ [MINISTRAL_8B]: { cacheHit: 0.015, cacheMiss: 0.15, output: 0.15 },
55
+ };
56
+ /** Cache-aware list price for a model, falling back to the default model's. */
57
+ export function price(model) {
58
+ return PRICES[model] ?? PRICES[DEFAULT_MODEL];
59
+ }
60
+ /** The model's USABLE context window — the sharp span rather than the storage cap,
61
+ * for the same BYOK reason as every other driver here. */
62
+ export function contextWindow(_model) {
63
+ return 128_000;
64
+ }
65
+ /** The ceiling this driver puts on a single BUFFERED call. Core reserves exactly
66
+ * this much room below the window, and `client.ts` sends the same constant. */
67
+ export const BUFFERED_OUTPUT_TOKENS = 8_000;
68
+ export function bufferedOutputTokens(_model) {
69
+ return BUFFERED_OUTPUT_TOKENS;
70
+ }
71
+ /**
72
+ * Vision is deliberately NOT declared. Medium 3.5 and Large 3 are described as
73
+ * multimodal and Ministral 8B carries vision, but Small 4's image support is not
74
+ * something this driver has confirmed. A capability true for some of a list and
75
+ * unverified for the rest cannot be reported as a flat yes: core would attach bytes
76
+ * a session might silently be unable to read. Add it per model once confirmed.
77
+ */
78
+ /** The effort rungs this driver uses. `none` is expressed as thinking-off. */
79
+ const EFFORTS = ["low", "medium", "high", "xhigh", "max"];
80
+ /** Coerce a stored or unknown config onto a model this provider actually serves,
81
+ * then snap onto a rung `/think` lists so no unlisted setting can persist. */
82
+ export function normalize(config) {
83
+ const model = PRICES[config.model] ? config.model : DEFAULT_MODEL;
84
+ const thinking = takesEffort(model) ? config.thinking === true : false;
85
+ const effort = EFFORTS.includes(config.effort) ? config.effort : "low";
86
+ return { model, thinking, effort: snapToOfferedRung(model, thinking, effort) };
87
+ }
88
+ /** Move an effort onto the nearest rung this model's ladder offers, ties downward. */
89
+ function snapToOfferedRung(model, thinking, effort) {
90
+ const offered = thinkLevels(model).filter((l) => l.thinking === thinking);
91
+ if (offered.length === 0)
92
+ return thinkLevels(model)[0].effort;
93
+ if (offered.some((l) => l.effort === effort))
94
+ return effort;
95
+ const want = EFFORTS.indexOf(effort);
96
+ let best = offered[0];
97
+ for (const level of offered) {
98
+ const d = Math.abs(EFFORTS.indexOf(level.effort) - want);
99
+ const bestD = Math.abs(EFFORTS.indexOf(best.effort) - want);
100
+ if (d < bestD || (d === bestD && EFFORTS.indexOf(level.effort) < EFFORTS.indexOf(best.effort)))
101
+ best = level;
102
+ }
103
+ return best.effort;
104
+ }
105
+ /** The cheap metadata half of this driver — see `index.ts` for the wire half. */
106
+ export const mistralManifest = {
107
+ id: "mistral",
108
+ label: "Mistral",
109
+ apiKeyEnv: "MISTRAL_API_KEY",
110
+ keysUrl: "https://console.mistral.ai/api-keys",
111
+ models: MODELS,
112
+ thinkLevels,
113
+ price,
114
+ contextWindow,
115
+ bufferedOutputTokens,
116
+ normalize,
117
+ };
118
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/drivers/mistral/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,290 @@
1
+ import { basename } from "node:path";
2
+ import { clientId } from "../clientId.js";
3
+ import { RETRY_MAX_ATTEMPTS } from "../retryPolicy.js";
4
+ import { BUFFERED_OUTPUT_TOKENS, DEFAULT_MODEL } from "./manifest.js";
5
+ const MODEL = process.env.MINDWEAVE_MODEL ?? DEFAULT_MODEL;
6
+ /** Output ceiling for a streamed turn. This caps reasoning AND answer together, so
7
+ * it needs headroom at the higher rungs; the family accepts up to 128K. */
8
+ const MAX_TOKENS_STREAM = 64_000;
9
+ /** Buffered calls are the small internal ones (summaries, page distillation), and a
10
+ * non-streaming request that runs long risks an HTTP timeout. The value lives in
11
+ * the manifest because core reserves room for it when setting the compaction bars. */
12
+ const MAX_TOKENS_BUFFERED = BUFFERED_OUTPUT_TOKENS;
13
+ let client = null;
14
+ /** The shared SDK client, or a clear setup error if no key is configured yet. */
15
+ async function api() {
16
+ if (!client) {
17
+ const apiKey = process.env.OPENAI_API_KEY;
18
+ if (!apiKey) {
19
+ throw new Error("No OPENAI_API_KEY found. Add your key to the global config so Mindweave works " +
20
+ "in every project:\n" +
21
+ " ~/.mindweave/.env → OPENAI_API_KEY=your-key-here\n" +
22
+ "(A per-project .env or an exported shell variable also works.)");
23
+ }
24
+ const { default: OpenAIClient } = await import("openai");
25
+ // Retries made explicit rather than inherited. These two drivers reach their
26
+ // provider through a vendor SDK that retries on its own, while the other eleven
27
+ // go through `openaiCompat/wire.ts` and use `retryPolicy.ts`. Pinning the count
28
+ // here means a session behaves the same way whichever provider it is pointed at,
29
+ // and that an SDK upgrade changing its default cannot quietly change ours.
30
+ client = new OpenAIClient({ apiKey, maxRetries: RETRY_MAX_ATTEMPTS - 1, defaultHeaders: { "User-Agent": clientId() } });
31
+ }
32
+ return client;
33
+ }
34
+ /**
35
+ * Convert the stored transcript into Responses input items.
36
+ *
37
+ * Two shapes have no direct equivalent and are converted rather than passed
38
+ * through: an assistant message's `tool_calls` become sibling `function_call`
39
+ * items, and a `role: "tool"` message becomes a `function_call_output`. A stray
40
+ * in-conversation system message is pulled out and returned separately, because
41
+ * the Responses API carries system text in `instructions` and dropping it would
42
+ * silently lose instructions.
43
+ */
44
+ export function renderInput(req) {
45
+ const input = [];
46
+ const extraSystem = [];
47
+ for (const msg of req.messages) {
48
+ if (msg.role === "system") {
49
+ if (msg.content.trim())
50
+ extraSystem.push(msg.content);
51
+ continue;
52
+ }
53
+ if (msg.role === "tool") {
54
+ input.push({
55
+ type: "function_call_output",
56
+ call_id: msg.tool_call_id ?? "",
57
+ output: msg.content || "(no output)",
58
+ });
59
+ continue;
60
+ }
61
+ if (msg.role === "user") {
62
+ // Images first: the model reads an image-then-text message more reliably
63
+ // than the reverse, and each is labelled so a later turn can name it.
64
+ const content = [];
65
+ for (const img of msg.images ?? []) {
66
+ content.push({ type: "input_text", text: `Image (${basename(img.path)}):` });
67
+ content.push({
68
+ type: "input_image",
69
+ detail: "auto",
70
+ image_url: `data:${img.mediaType};base64,${img.data}`,
71
+ });
72
+ }
73
+ if (msg.content.trim())
74
+ content.push({ type: "input_text", text: msg.content });
75
+ if (content.length > 0)
76
+ input.push({ role: "user", content });
77
+ continue;
78
+ }
79
+ // Assistant: prose first, then each tool call as its own item. Plain-string
80
+ // content is the simple input form; the block form is the OUTPUT shape and
81
+ // requires an id and status we neither have nor should invent.
82
+ if (msg.content.trim())
83
+ input.push({ role: "assistant", content: msg.content });
84
+ for (const call of msg.tool_calls ?? []) {
85
+ input.push({
86
+ type: "function_call",
87
+ call_id: call.id,
88
+ name: call.function.name,
89
+ arguments: call.function.arguments || "{}",
90
+ });
91
+ }
92
+ }
93
+ return { input, extraSystem };
94
+ }
95
+ /** Translate the tool schemas from their stored OpenAI CHAT shape (nested under
96
+ * `function`) into the Responses shape (flat). The two are not interchangeable —
97
+ * sending the nested form here is a validation error, not a tolerated variant. */
98
+ function renderTools(req) {
99
+ return (req.tools ?? []).map((t) => ({
100
+ type: "function",
101
+ name: t.function.name,
102
+ description: t.function.description,
103
+ parameters: (t.function.parameters ?? {}),
104
+ // Loose schema validation: the tool schemas are hand-written and some carry
105
+ // shapes strict mode rejects. The engine validates arguments itself anyway.
106
+ strict: false,
107
+ }));
108
+ }
109
+ /**
110
+ * Build the request body shared by both paths.
111
+ *
112
+ * `store: false` is deliberate and load-bearing: by default OpenAI RETAINS the
113
+ * response server-side for later retrieval. Mindweave is a local-first tool whose
114
+ * transcript lives on the user's disk, so leaving a copy of every turn on a vendor's
115
+ * servers is not a default it should inherit silently.
116
+ *
117
+ * The volatile `context` is appended as the LAST input item so a changing code map
118
+ * or todo list never invalidates the cached prefix — OpenAI caches the longest
119
+ * identical prefix from the start, which is the property the ModelRequest split
120
+ * exists to guarantee.
121
+ */
122
+ export function buildBody(req, maxTokens) {
123
+ const cfg = req.model;
124
+ const { input, extraSystem } = renderInput(req);
125
+ if (req.context && req.context.trim()) {
126
+ input.push({
127
+ role: "user",
128
+ content: [{ type: "input_text", text: `<current_context>\n${req.context}\n</current_context>` }],
129
+ });
130
+ }
131
+ // The API rejects an empty conversation; the engine never sends one, but a
132
+ // tool-less internal call could in principle.
133
+ if (input.length === 0) {
134
+ input.push({ role: "user", content: [{ type: "input_text", text: "(no input)" }] });
135
+ }
136
+ const body = {
137
+ model: cfg?.model ?? MODEL,
138
+ instructions: [req.system, ...extraSystem].filter((s) => s.trim()).join("\n\n"),
139
+ input,
140
+ max_output_tokens: maxTokens,
141
+ // Reasoning is ONE dial here: `none` is the off switch rather than a separate
142
+ // flag, so the shared thinking/effort pair collapses into a single rung.
143
+ reasoning: { effort: cfg?.thinking ? cfg.effort : "none" },
144
+ store: false,
145
+ };
146
+ const tools = renderTools(req);
147
+ if (tools.length > 0) {
148
+ body.tools = tools;
149
+ body.tool_choice = "auto";
150
+ }
151
+ return body;
152
+ }
153
+ /** Fold the Responses usage into the shared shape. `input_tokens` here is the FULL
154
+ * prompt including the cached part, unlike Anthropic's, so the miss side is the
155
+ * remainder after cache reads rather than a sum. */
156
+ export function toUsage(usage) {
157
+ if (!usage)
158
+ return undefined;
159
+ const promptTokens = usage.input_tokens ?? 0;
160
+ const cacheHit = usage.input_tokens_details?.cached_tokens ?? 0;
161
+ const completionTokens = usage.output_tokens ?? 0;
162
+ return {
163
+ promptTokens,
164
+ completionTokens,
165
+ totalTokens: usage.total_tokens ?? promptTokens + completionTokens,
166
+ cacheHitTokens: cacheHit,
167
+ cacheMissTokens: Math.max(0, promptTokens - cacheHit),
168
+ };
169
+ }
170
+ /**
171
+ * Map a finished response onto the shared stop reason.
172
+ *
173
+ * The signal lives in two places: an unfinished response says WHY in
174
+ * `incomplete_details`, and a refusal arrives as a content part rather than a
175
+ * status. Both have to be read, or a cut-off reply and a declined one both look
176
+ * like a clean finish and the loop carries on with half an answer.
177
+ */
178
+ export function toStop(response) {
179
+ if (response.status === "incomplete") {
180
+ return response.incomplete_details?.reason === "content_filter" ? "refused" : "truncated";
181
+ }
182
+ if (response.status === "failed")
183
+ return "overloaded";
184
+ for (const item of response.output ?? []) {
185
+ if (item.type !== "message")
186
+ continue;
187
+ for (const part of item.content ?? []) {
188
+ if (part.type === "refusal")
189
+ return "refused";
190
+ }
191
+ }
192
+ return "end";
193
+ }
194
+ /** Pull the assembled reply and tool calls out of a finished response. */
195
+ export function toTurn(response) {
196
+ let content = "";
197
+ const toolCalls = [];
198
+ for (const item of response.output ?? []) {
199
+ if (item.type === "message") {
200
+ for (const part of item.content ?? []) {
201
+ if (part.type === "output_text")
202
+ content += part.text;
203
+ }
204
+ }
205
+ else if (item.type === "function_call") {
206
+ toolCalls.push({
207
+ // The engine echoes this back as the result's key, and the API matches
208
+ // results on `call_id` — NOT on the item's own `id`. Sending the wrong
209
+ // one is an unmatched-result error on the following turn.
210
+ id: item.call_id,
211
+ name: item.name,
212
+ arguments: item.arguments || "{}",
213
+ });
214
+ }
215
+ // `reasoning` items are deliberately dropped — see the note in the file header.
216
+ }
217
+ return { content, toolCalls, stop: toStop(response) };
218
+ }
219
+ /** Ask the model for one turn. Usage rides back with it: these are core's internal
220
+ * calls, and they spend real tokens that the meter would otherwise never see. */
221
+ export async function toolTurn(req, options = {}) {
222
+ const response = await (await api()).responses.create(buildBody(req, MAX_TOKENS_BUFFERED), {
223
+ signal: options.signal,
224
+ });
225
+ return { ...toTurn(response), usage: toUsage(response.usage) };
226
+ }
227
+ /**
228
+ * Ask the model for one turn, STREAMING. Deltas go to `options.onEvent` for the
229
+ * live UI; the assembled turn is the return value, in the same shape the engine
230
+ * records either way. The SDK assembles the final response (including each tool
231
+ * call's JSON), so nothing here reassembles fragmented arguments by hand.
232
+ */
233
+ export async function streamTurn(req, options = {}) {
234
+ const stream = (await api()).responses.stream({ ...buildBody(req, MAX_TOKENS_STREAM), stream: true }, { signal: options.signal });
235
+ if (options.onEvent) {
236
+ // Tool calls are announced by item index, and the shared event shape keys on a
237
+ // dense index — so map the API's `output_index` onto one.
238
+ const indexOf = new Map();
239
+ for await (const event of stream) {
240
+ emit(event, options.onEvent, indexOf);
241
+ }
242
+ }
243
+ const response = await stream.finalResponse();
244
+ return { ...toTurn(response), usage: toUsage(response.usage) };
245
+ }
246
+ /**
247
+ * Map one streaming event onto the shared event shape.
248
+ *
249
+ * Reasoning arrives on two different channels depending on how the model was
250
+ * asked — `reasoning_text` when the raw stream is available, `reasoning_summary_text`
251
+ * when only a summary is. Both are handled: whichever one the provider sends, the
252
+ * UI shows reasoning rather than an unexplained pause.
253
+ */
254
+ export function emit(event, onEvent, indexOf) {
255
+ switch (event.type) {
256
+ case "response.output_text.delta":
257
+ if (event.delta)
258
+ onEvent({ type: "text", delta: event.delta });
259
+ return;
260
+ case "response.reasoning_text.delta":
261
+ case "response.reasoning_summary_text.delta":
262
+ if (event.delta)
263
+ onEvent({ type: "reasoning", delta: event.delta });
264
+ return;
265
+ case "response.output_item.added": {
266
+ const item = event.item;
267
+ if (item.type !== "function_call")
268
+ return;
269
+ const index = indexOf.size;
270
+ indexOf.set(event.output_index, index);
271
+ onEvent({ type: "tool_start", index, id: item.call_id, name: item.name });
272
+ return;
273
+ }
274
+ case "response.function_call_arguments.delta": {
275
+ const index = indexOf.get(event.output_index);
276
+ // A fragment before its item was announced has nowhere to go; the final
277
+ // response still carries the whole call, so dropping the delta only costs
278
+ // the live preview, never the call itself.
279
+ if (index === undefined || !event.delta)
280
+ return;
281
+ onEvent({ type: "tool_args", index, delta: event.delta });
282
+ return;
283
+ }
284
+ default:
285
+ // Every other event (created, in_progress, content_part.*, done, usage) has
286
+ // no shared equivalent — the assembled response carries what they describe.
287
+ return;
288
+ }
289
+ }
290
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/drivers/openai/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { streamTurn, toolTurn } from "./client.js";
2
+ import { openaiManifest } from "./manifest.js";
3
+ export const openaiDriver = {
4
+ ...openaiManifest,
5
+ toolTurn,
6
+ streamTurn,
7
+ };
8
+ export default openaiDriver;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/drivers/openai/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,GAAG,cAAc;IACjB,QAAQ;IACR,UAAU;CACX,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,133 @@
1
+ export const SOL = "gpt-5.6-sol";
2
+ export const TERRA = "gpt-5.6-terra";
3
+ export const LUNA = "gpt-5.6-luna";
4
+ /** The model used when nothing is saved and no env override is set. */
5
+ export const DEFAULT_MODEL = TERRA;
6
+ /**
7
+ * The models offered by `/model`. First entry is this provider's default, which is
8
+ * also where `/provider` lands when someone switches to OpenAI.
9
+ *
10
+ * Terra leads because it is the balanced tier — Sol is roughly 2.5x its rate and
11
+ * Luna a tenth of it, so Terra is the one that is rarely the wrong answer.
12
+ */
13
+ export const MODELS = [
14
+ { id: TERRA, label: "GPT-5.6 Terra", description: "balanced intelligence and cost — the default" },
15
+ { id: SOL, label: "GPT-5.6 Sol", description: "the frontier tier, for the hardest problems" },
16
+ { id: LUNA, label: "GPT-5.6 Luna", description: "cheap and quick, for high-volume work" },
17
+ ];
18
+ /**
19
+ * The reasoning levels offered by `/think`.
20
+ *
21
+ * OpenAI expresses reasoning as a single `effort` rung with `none` as its off
22
+ * switch, rather than a separate on/off flag plus a budget. That maps onto the
23
+ * shared shape cleanly: `thinking: false` becomes `none` on the wire, and the four
24
+ * thinking rungs are sent as themselves. All three models take the same ladder.
25
+ *
26
+ * The provider also accepts `minimal` between `none` and `low`. It is not offered:
27
+ * it would be a fifth rung whose difference from `low` no user could predict, and
28
+ * the ladder is more useful short.
29
+ */
30
+ export function thinkLevels(_model) {
31
+ return [
32
+ { label: "Standard", description: "answer directly — fastest", thinking: false, effort: "high" },
33
+ { label: "Thinking", description: "think first, then answer", thinking: true, effort: "medium" },
34
+ { label: "Deep", description: "more reasoning, more tool work", thinking: true, effort: "high" },
35
+ { label: "Maximum", description: "maximum reasoning budget", thinking: true, effort: "max" },
36
+ ];
37
+ }
38
+ /**
39
+ * List prices (USD / 1M tokens). Cached input bills at a tenth of fresh input,
40
+ * which is what keeps a re-sent conversation cheap.
41
+ */
42
+ const PRICES = {
43
+ [SOL]: { cacheHit: 0.5, cacheMiss: 5, output: 30 },
44
+ [TERRA]: { cacheHit: 0.2, cacheMiss: 2, output: 12 },
45
+ [LUNA]: { cacheHit: 0.02, cacheMiss: 0.2, output: 1.2 },
46
+ };
47
+ /** Cache-aware list price for a model, falling back to the default model's. */
48
+ export function price(model) {
49
+ return PRICES[model] ?? PRICES[DEFAULT_MODEL];
50
+ }
51
+ /**
52
+ * The model's USABLE context window. All three STORE 1.05M tokens (922K of it
53
+ * input), but this is deliberately the sharp window rather than the storage cap:
54
+ * on BYOK every token in the window is the user's money on every turn, so
55
+ * anchoring compaction at 1M would mean carrying an enormous prompt long after it
56
+ * stopped earning its cost. Same reasoning, and the same number, as Anthropic's.
57
+ */
58
+ export function contextWindow(_model) {
59
+ return 200_000;
60
+ }
61
+ /**
62
+ * The ceiling this driver puts on a single BUFFERED (non-streaming) call.
63
+ *
64
+ * All three models accept 128K output, but a non-streaming request that runs that
65
+ * long risks an HTTP timeout, so the buffered path — core's small internal calls,
66
+ * like a compaction summary — is capped far lower. `client.ts` sends this value and
67
+ * `dynamo/contextWindow.ts` reserves it; one exported constant means the request
68
+ * and the reservation cannot drift apart.
69
+ */
70
+ export const BUFFERED_OUTPUT_TOKENS = 16_000;
71
+ export function bufferedOutputTokens(_model) {
72
+ return BUFFERED_OUTPUT_TOKENS;
73
+ }
74
+ /** The effort rungs this provider accepts, weakest first. */
75
+ const EFFORTS = ["low", "medium", "high", "xhigh", "max"];
76
+ /** Every model in this family takes image input alongside text. */
77
+ export function acceptsImages(_model) {
78
+ return true;
79
+ }
80
+ /**
81
+ * Coerce a stored or unknown config onto a model this provider actually serves.
82
+ *
83
+ * There is no per-model rule to enforce here — the family shares one ladder, so an
84
+ * unknown model id falls back and an unknown effort clamps, and that is all. The
85
+ * result is then snapped onto a rung `/think` actually lists, so a config carried
86
+ * in from another provider by `/model` cannot leave the user on a setting the menu
87
+ * has no tick beside.
88
+ */
89
+ export function normalize(config) {
90
+ const model = PRICES[config.model] ? config.model : DEFAULT_MODEL;
91
+ const thinking = config.thinking === true;
92
+ const effort = EFFORTS.includes(config.effort) ? config.effort : "high";
93
+ return { model, thinking, effort: snapToOfferedRung(model, thinking, effort) };
94
+ }
95
+ /**
96
+ * Move an effort onto the nearest rung this model's `/think` ladder offers.
97
+ *
98
+ * Ties break DOWNWARD: an unlisted setting resolves to the cheaper neighbour, never
99
+ * the dearer one, because silently spending more of the user's money than the level
100
+ * they were on is the worse of the two ways to be wrong.
101
+ */
102
+ function snapToOfferedRung(model, thinking, effort) {
103
+ const offered = thinkLevels(model).filter((l) => l.thinking === thinking);
104
+ if (offered.length === 0)
105
+ return effort;
106
+ if (offered.some((l) => l.effort === effort))
107
+ return effort;
108
+ const want = EFFORTS.indexOf(effort);
109
+ let best = offered[0];
110
+ for (const level of offered) {
111
+ const d = Math.abs(EFFORTS.indexOf(level.effort) - want);
112
+ const bestD = Math.abs(EFFORTS.indexOf(best.effort) - want);
113
+ if (d < bestD || (d === bestD && EFFORTS.indexOf(level.effort) < EFFORTS.indexOf(best.effort))) {
114
+ best = level;
115
+ }
116
+ }
117
+ return best.effort;
118
+ }
119
+ /** The cheap metadata half of this driver — see `index.ts` for the wire half. */
120
+ export const openaiManifest = {
121
+ id: "openai",
122
+ label: "OpenAI",
123
+ apiKeyEnv: "OPENAI_API_KEY",
124
+ keysUrl: "https://platform.openai.com/api-keys",
125
+ models: MODELS,
126
+ thinkLevels,
127
+ price,
128
+ contextWindow,
129
+ bufferedOutputTokens,
130
+ acceptsImages,
131
+ normalize,
132
+ };
133
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/drivers/openai/manifest.ts"],"names":[],"mappings":"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"}