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,129 @@
1
+ /**
2
+ * retryPolicy.ts — surviving a blip instead of losing the turn.
3
+ *
4
+ * Eleven of the thirteen providers reach their API through a raw `fetch` with no
5
+ * retries at all. A single 429, or one 503 from a load balancer, threw out of the
6
+ * transport, was rethrown by the engine, and ended the turn mid-task. The user had
7
+ * already paid for the request, the work was gone, and the only remedy was to type it
8
+ * again. Providers return those constantly and mean nothing by them.
9
+ *
10
+ * WHERE THIS IS SAFE TO APPLY, which is the whole reason it can exist at all: both
11
+ * request paths check `response.ok` on the HEADERS, before a single byte of the body is
12
+ * consumed and before any `onEvent` fires. So a failure at that point has emitted
13
+ * nothing, and re-sending is genuinely re-sending rather than duplicating. A failure
14
+ * DURING `consumeStream` is a different animal and is deliberately not retried here:
15
+ * content has already reached the screen and the transcript, and replaying it would
16
+ * double it.
17
+ *
18
+ * WHY THE BUDGET IS SMALL. A state-of-the-art client retries up to ten times and can
19
+ * wait minutes, which is right for an unattended agent and wrong for a person watching
20
+ * a prompt. Here the total wait is bounded so a retry always reads as "working" rather
21
+ * than as a hang, and a cooldown longer than the budget is reported instead of slept
22
+ * through: the provider's own sentence ("try again in 47 seconds") is more useful to
23
+ * someone sitting there than 47 seconds of silence.
24
+ */
25
+ const env = (name, fallback) => {
26
+ const v = Number(process.env[name]);
27
+ return Number.isFinite(v) && v >= 0 ? v : fallback;
28
+ };
29
+ /** Attempts in total, so 3 means one try and two retries. */
30
+ export const RETRY_MAX_ATTEMPTS = env("MINDWEAVE_RETRY_ATTEMPTS", 4);
31
+ /** Total time this request may spend WAITING between attempts. */
32
+ export const RETRY_TOTAL_BUDGET_MS = env("MINDWEAVE_RETRY_BUDGET_MS", 30_000);
33
+ /** First backoff step; each retry doubles it. */
34
+ const BASE_DELAY_MS = 500;
35
+ /** No single wait longer than this, whatever the arithmetic says. */
36
+ const MAX_DELAY_MS = 8_000;
37
+ /**
38
+ * Statuses worth trying again.
39
+ *
40
+ * 429 is here even though `providerError.ts` classifies it as an ACCOUNT refusal, and
41
+ * the two are not in conflict: retrying comes first, and providerError renders whatever
42
+ * is still failing once the budget is spent. A rate limit that clears in two seconds
43
+ * should never have reached the user at all; one that does not clear still gets its
44
+ * proper explanation.
45
+ *
46
+ * 400/401/402/403/404/422 are absent on purpose. None of them changes by being asked
47
+ * again, and retrying a malformed request three times just makes a bug slower to see.
48
+ */
49
+ const RETRYABLE_STATUSES = new Set([408, 425, 429, 500, 502, 503, 504, 529]);
50
+ /** Transport failures that are worth another go. */
51
+ const RETRYABLE_NETWORK = [
52
+ "econnreset",
53
+ "econnrefused",
54
+ "etimedout",
55
+ "epipe",
56
+ "eai_again",
57
+ "enetunreach",
58
+ "socket hang up",
59
+ "fetch failed",
60
+ "network error",
61
+ "terminated",
62
+ ];
63
+ /** Did the user cancel? Never retried, and never mistaken for a network fault. */
64
+ export function isAbortLike(error) {
65
+ const e = error;
66
+ if (e?.name === "AbortError")
67
+ return true;
68
+ return typeof e?.message === "string" && /\babort/i.test(e.message);
69
+ }
70
+ /** Should this failure be tried again (pure)? */
71
+ export function isRetryable(error, status) {
72
+ if (isAbortLike(error))
73
+ return false;
74
+ if (typeof status === "number")
75
+ return RETRYABLE_STATUSES.has(status);
76
+ const e = error;
77
+ const text = [
78
+ typeof e?.code === "string" ? e.code : "",
79
+ typeof e?.message === "string" ? e.message : "",
80
+ typeof e?.cause?.code === "string" ? (e.cause.code) : "",
81
+ ]
82
+ .join(" ")
83
+ .toLowerCase();
84
+ if (!text.trim())
85
+ return false;
86
+ return RETRYABLE_NETWORK.some((needle) => text.includes(needle));
87
+ }
88
+ /**
89
+ * How long the provider asked us to wait, in ms, or null if it did not say (pure).
90
+ *
91
+ * `Retry-After` comes as either a count of seconds or an HTTP date, and both are in the
92
+ * wild. A date in the past reads as zero rather than as a negative wait.
93
+ */
94
+ export function retryAfterMs(header) {
95
+ const raw = (header ?? "").trim();
96
+ if (!raw)
97
+ return null;
98
+ if (/^\d+(\.\d+)?$/.test(raw))
99
+ return Math.round(Number(raw) * 1000);
100
+ const at = Date.parse(raw);
101
+ if (Number.isNaN(at))
102
+ return null;
103
+ return Math.max(0, at - Date.now());
104
+ }
105
+ /**
106
+ * How long to wait before attempt `attempt` (1-based for the first RETRY), or null to
107
+ * stop (pure).
108
+ *
109
+ * Returns null rather than a clamped delay when the provider's own cooldown exceeds
110
+ * what is left of the budget. Sleeping "as long as we can" would wake up and fail
111
+ * anyway, having spent the user's time to learn nothing.
112
+ *
113
+ * Jitter is full rather than partial: several drivers can be in flight at once (a turn
114
+ * plus a background session-memory refresh), and identical backoff would march them
115
+ * into the provider together on every step.
116
+ */
117
+ export function nextDelayMs(attempt, spentMs, serverAskedMs, budgetMs = RETRY_TOTAL_BUDGET_MS, random = Math.random) {
118
+ const remaining = budgetMs - spentMs;
119
+ if (remaining <= 0)
120
+ return null;
121
+ if (serverAskedMs !== null) {
122
+ // The provider knows when it will serve us; obey it or admit we cannot wait.
123
+ return serverAskedMs <= remaining ? serverAskedMs : null;
124
+ }
125
+ const ceiling = Math.min(BASE_DELAY_MS * 2 ** Math.max(0, attempt - 1), MAX_DELAY_MS);
126
+ const delay = Math.round(ceiling * (0.5 + random() * 0.5));
127
+ return Math.min(delay, remaining);
128
+ }
129
+ //# sourceMappingURL=retryPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryPolicy.js","sourceRoot":"","sources":["../../src/drivers/retryPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /** How many searches one call may run before the provider stops. */
2
+ export const SEARCH_MAX_USES = 5;
3
+ /**
4
+ * The thin system prompt for a search call.
5
+ *
6
+ * Model-work boundary: this is the whole of it. Search, answer from what is found,
7
+ * say so when it is not there. No analysis rules, no house style, nothing about how
8
+ * to judge a source — that judgment belongs to the model that asked for the search,
9
+ * not to a prompt buried inside a tool.
10
+ */
11
+ export const SEARCH_SYSTEM = "Search the web to answer the request. Answer only from what you find, " +
12
+ "and say so plainly if the answer is not there. Include specifics — " +
13
+ "versions, names, dates, code — rather than describing the pages.";
14
+ /**
15
+ * Pull an answer and its citations out of a finished search message.
16
+ *
17
+ * Two shapes have to be handled and only one of them is a list. A failed search comes
18
+ * back on a SUCCESSFUL response as a `web_search_tool_result` block whose `content` is
19
+ * an error OBJECT rather than an array of results, so indexing it blind yields nonsense
20
+ * instead of throwing. Hence the `Array.isArray` gate.
21
+ *
22
+ * Sources are de-duplicated by URL: the model commonly reads the same page across two
23
+ * searches in one turn, and listing it twice reads as two separate findings.
24
+ */
25
+ export function extractSearch(message) {
26
+ let answer = "";
27
+ const sources = [];
28
+ const seen = new Set();
29
+ for (const block of message.content) {
30
+ if (block.type === "text") {
31
+ answer += block.text;
32
+ continue;
33
+ }
34
+ if (block.type !== "web_search_tool_result")
35
+ continue;
36
+ // The error branch. Nothing to list; the answer text explains it.
37
+ if (!Array.isArray(block.content))
38
+ continue;
39
+ for (const hit of block.content) {
40
+ // The declared type says both fields are strings. A real provider disagreed:
41
+ // a live DeepSeek search returned a result carrying neither, which rendered as
42
+ // "undefined — undefined" in the source list. The wire is not bound by the SDK's
43
+ // types, so a result without a usable URL is dropped rather than shown.
44
+ const url = typeof hit.url === "string" ? hit.url.trim() : "";
45
+ if (!url || seen.has(url))
46
+ continue;
47
+ seen.add(url);
48
+ const title = typeof hit.title === "string" ? hit.title.trim() : "";
49
+ sources.push({ title: title || url, url });
50
+ }
51
+ }
52
+ return {
53
+ answer: answer.trim(),
54
+ sources,
55
+ // The provider's own search loop has a ceiling; past it the turn comes back paused
56
+ // rather than finished. We keep what it found instead of resuming, and say so,
57
+ // because a partial answer with its sources is still useful.
58
+ partial: message.stop_reason === "pause_turn",
59
+ };
60
+ }
61
+ //# sourceMappingURL=searchBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchBlocks.js","sourceRoot":"","sources":["../../src/drivers/searchBlocks.ts"],"names":[],"mappings":"AAiBA,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,wEAAwE;IACxE,qEAAqE;IACrE,kEAAkE,CAAC;AAErE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB;YAAE,SAAS;QACtD,kEAAkE;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,SAAS;QAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,6EAA6E;YAC7E,+EAA+E;YAC/E,iFAAiF;YACjF,wEAAwE;YACxE,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACrB,OAAO;QACP,mFAAmF;QACnF,+EAA+E;QAC/E,6DAA6D;QAC7D,OAAO,EAAE,OAAO,CAAC,WAAW,KAAK,YAAY;KAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/drivers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { compatStreamTurn, compatToolTurn } from "../openaiCompat/wire.js";
2
+ import { BUFFERED_OUTPUT_TOKENS, DEFAULT_MODEL, takesEffort } from "./manifest.js";
3
+ const BASE_URL = process.env.MINDWEAVE_XAI_URL ?? "https://api.x.ai/v1";
4
+ /** The model a request runs on, matching the shared layer's own fallback so the
5
+ * reasoning fields can never be built for a different model than is being called. */
6
+ function modelOf(config) {
7
+ return config?.model ?? process.env.MINDWEAVE_MODEL ?? DEFAULT_MODEL;
8
+ }
9
+ /**
10
+ * xAI's reasoning fields.
11
+ *
12
+ * `reasoning_effort` is served by ONE model here, so it is sent only for that one.
13
+ * On the others it is not a tolerated extra: they do not accept the parameter.
14
+ *
15
+ * Unlike Qwen, GLM and DeepSeek, there is nothing to send when reasoning is off on a
16
+ * model that has no dial — this provider does not default to thinking-on, so an
17
+ * absent field is genuinely absent rather than a hidden bill. Stated because the
18
+ * opposite is true of three other drivers here, and the reflex by now is to send it.
19
+ */
20
+ export function reasoningFields(config) {
21
+ if (!takesEffort(modelOf(config)))
22
+ return {};
23
+ return { reasoning_effort: config?.thinking ? (config.effort ?? "low") : "none" };
24
+ }
25
+ /**
26
+ * `end_turn` is xAI's own spelling of a normal finish, alongside the standard
27
+ * `stop`. It already falls through to `"end"`, but it is mapped explicitly so the
28
+ * value is recorded as KNOWN — an unrecognised reason reaching the default is
29
+ * exactly how a real stop condition gets reported as a clean finish elsewhere.
30
+ */
31
+ export function extraStop(reason) {
32
+ return reason === "end_turn" ? "end" : undefined;
33
+ }
34
+ /** xAI reports its cache hit as `prompt_tokens_details.cached_tokens`, where
35
+ * `prompt_tokens` is the FULL prompt including the cached part. */
36
+ export function cacheSplit(usage) {
37
+ const details = usage.prompt_tokens_details;
38
+ const hit = typeof details?.cached_tokens === "number" ? details.cached_tokens : 0;
39
+ if (hit === 0)
40
+ return undefined;
41
+ const prompt = typeof usage.prompt_tokens === "number" ? usage.prompt_tokens : 0;
42
+ return { hit, miss: Math.max(0, prompt - hit) };
43
+ }
44
+ /** Everything the shared wire layer needs to talk to xAI. */
45
+ export const xaiProvider = {
46
+ label: "xAI",
47
+ baseUrl: BASE_URL,
48
+ apiKeyEnv: "XAI_API_KEY",
49
+ defaultModel: process.env.MINDWEAVE_MODEL ?? DEFAULT_MODEL,
50
+ reasoningFields,
51
+ extraStop,
52
+ cacheSplit,
53
+ bufferedMaxTokens: BUFFERED_OUTPUT_TOKENS,
54
+ };
55
+ /** Ask the model for one turn. */
56
+ export async function toolTurn(req, options = {}) {
57
+ return compatToolTurn(xaiProvider, req, options.signal);
58
+ }
59
+ /** Ask the model for one turn, streaming deltas to `options.onEvent`. */
60
+ export async function streamTurn(req, options = {}) {
61
+ return compatStreamTurn(xaiProvider, req, options.onEvent, options.signal);
62
+ }
63
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/drivers/xai/client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAuB,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;AAExE;sFACsF;AACtF,SAAS,OAAO,CAAC,MAA+B;IAC9C,OAAO,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC;AACvE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,MAA+B;IAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACpF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED;oEACoE;AACpE,MAAM,UAAU,UAAU,CAAC,KAA8B;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,qBAA+D,CAAC;IACtF,MAAM,GAAG,GAAG,OAAO,OAAO,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,aAAa;IACxB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa;IAC1D,eAAe;IACf,SAAS;IACT,UAAU;IACV,iBAAiB,EAAE,sBAAsB;CAC1C,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAiB,EAAE,UAAuB,EAAE;IACzE,OAAO,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAiB,EAAE,UAAyB,EAAE;IAC7E,OAAO,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { streamTurn, toolTurn } from "./client.js";
2
+ import { xaiManifest } from "./manifest.js";
3
+ export const xaiDriver = { ...xaiManifest, toolTurn, streamTurn };
4
+ export default xaiDriver;
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/drivers/xai/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,SAAS,GAAW,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAE1E,eAAe,SAAS,CAAC"}
@@ -0,0 +1,137 @@
1
+ export const GROK_46 = "grok-4.6";
2
+ export const GROK_45 = "grok-4.5";
3
+ export const GROK_43 = "grok-4.3";
4
+ /** The model used when nothing is saved and no env override is set. */
5
+ export const DEFAULT_MODEL = GROK_46;
6
+ /** The models offered by `/model`. First entry is this provider's default. */
7
+ export const MODELS = [
8
+ { id: GROK_46, label: "Grok 4.6", description: "the current model, strong at code — the default" },
9
+ { id: GROK_45, label: "Grok 4.5", description: "the previous generation" },
10
+ { id: GROK_43, label: "Grok 4.3", description: "the reasoning tier, with a 1M window" },
11
+ ];
12
+ /** Whether a model takes the `reasoning_effort` dial. Only Grok 4.3 does. */
13
+ export function takesEffort(model) {
14
+ return model === GROK_43;
15
+ }
16
+ /**
17
+ * The reasoning levels offered by `/think`.
18
+ *
19
+ * xAI's ladder is `none`/`low`/`medium`/`high` — a shorter one than the shared type
20
+ * carries, and notably WITHOUT `xhigh` or `max`. `none` is the off switch rather
21
+ * than a separate flag, the same shape OpenAI uses.
22
+ *
23
+ * The models with no dial get a single level, and that is an honest statement
24
+ * rather than a stub: they reason as they reason, and there is no request to make
25
+ * about it. Offering a switch wired to nothing would be worse.
26
+ */
27
+ export function thinkLevels(model) {
28
+ if (takesEffort(model)) {
29
+ return [
30
+ { label: "Standard", description: "answer directly — fastest", thinking: false, effort: "low" },
31
+ { label: "Thinking", description: "think first, then answer", thinking: true, effort: "low" },
32
+ { label: "Deep", description: "more reasoning, more tool work", thinking: true, effort: "medium" },
33
+ { label: "Maximum", description: "maximum reasoning budget", thinking: true, effort: "high" },
34
+ ];
35
+ }
36
+ return [{ label: "Standard", description: "this model has no reasoning dial", thinking: false, effort: "low" }];
37
+ }
38
+ /**
39
+ * List prices (USD / 1M tokens).
40
+ *
41
+ * Two caveats. xAI TIERS by prompt size: a request over 200K input tokens bills at
42
+ * DOUBLE these rates, across the whole request rather than the excess. The shared
43
+ * `ModelPrice` shape holds one rate, so these are the base tier — right for ordinary
44
+ * sessions, low for very long ones, which is also why `contextWindow` below sits
45
+ * where it does.
46
+ *
47
+ * Second: only Grok 4.6's figures are confirmed against xAI's own pricing table.
48
+ * The other two are estimates in its neighbourhood and are marked as such — a wrong
49
+ * price shows a wrong estimate, where a wrong model id would fail outright, so the
50
+ * ids were the part worth being certain about.
51
+ */
52
+ const PRICES = {
53
+ [GROK_46]: { cacheHit: 0.5, cacheMiss: 2, output: 6 },
54
+ // Estimated.
55
+ [GROK_45]: { cacheHit: 0.5, cacheMiss: 2, output: 6 },
56
+ // Estimated.
57
+ [GROK_43]: { cacheHit: 0.75, cacheMiss: 3, output: 15 },
58
+ };
59
+ /** Cache-aware list price for a model, falling back to the default model's. */
60
+ export function price(model) {
61
+ return PRICES[model] ?? PRICES[DEFAULT_MODEL];
62
+ }
63
+ /**
64
+ * The model's USABLE context window. These models store 500K (Grok 4.3, 1M), but
65
+ * this is deliberately far below that, and here the reason is billing as much as
66
+ * attention: crossing 200K input DOUBLES the rate on the entire request, so letting
67
+ * a transcript drift past that line silently doubles the cost of every later turn.
68
+ * 128K keeps ordinary sessions well clear of it.
69
+ */
70
+ export function contextWindow(_model) {
71
+ return 128_000;
72
+ }
73
+ /**
74
+ * The ceiling this driver puts on a single BUFFERED (non-streaming) call. Core
75
+ * reserves exactly this much room below the window, and `client.ts` sends the same
76
+ * constant, so the request and the reservation cannot drift apart.
77
+ */
78
+ export const BUFFERED_OUTPUT_TOKENS = 8_000;
79
+ export function bufferedOutputTokens(_model) {
80
+ return BUFFERED_OUTPUT_TOKENS;
81
+ }
82
+ /**
83
+ * Vision is deliberately NOT declared. xAI serves image understanding, but through
84
+ * the separate `grok-imagine-*` line rather than any model offered here.
85
+ */
86
+ /** The effort rungs this provider accepts, weakest first — note the absent top two. */
87
+ const EFFORTS = ["low", "medium", "high"];
88
+ /**
89
+ * Coerce a stored or unknown config onto a model this provider actually serves.
90
+ *
91
+ * The result is snapped onto a rung `/think` lists, which is what keeps the request
92
+ * legal: this provider's ladder stops at `high`, so a config carrying `xhigh` or
93
+ * `max` from another provider must not reach the wire.
94
+ */
95
+ export function normalize(config) {
96
+ const model = PRICES[config.model] ? config.model : DEFAULT_MODEL;
97
+ const thinking = takesEffort(model) ? config.thinking === true : false;
98
+ const effort = EFFORTS.includes(config.effort) ? config.effort : "low";
99
+ return { model, thinking, effort: snapToOfferedRung(model, thinking, effort) };
100
+ }
101
+ /**
102
+ * Move an effort onto the nearest rung this model's `/think` ladder offers. Ties
103
+ * break DOWNWARD: an unlisted setting resolves to the cheaper neighbour, because
104
+ * silently spending more of the user's money is the worse way to be wrong.
105
+ */
106
+ function snapToOfferedRung(model, thinking, effort) {
107
+ const ladder = ["low", "medium", "high", "xhigh", "max"];
108
+ const offered = thinkLevels(model).filter((l) => l.thinking === thinking);
109
+ if (offered.length === 0)
110
+ return thinkLevels(model)[0].effort;
111
+ if (offered.some((l) => l.effort === effort))
112
+ return effort;
113
+ const want = ladder.indexOf(effort);
114
+ let best = offered[0];
115
+ for (const level of offered) {
116
+ const d = Math.abs(ladder.indexOf(level.effort) - want);
117
+ const bestD = Math.abs(ladder.indexOf(best.effort) - want);
118
+ if (d < bestD || (d === bestD && ladder.indexOf(level.effort) < ladder.indexOf(best.effort))) {
119
+ best = level;
120
+ }
121
+ }
122
+ return best.effort;
123
+ }
124
+ /** The cheap metadata half of this driver — see `index.ts` for the wire half. */
125
+ export const xaiManifest = {
126
+ id: "xai",
127
+ label: "xAI",
128
+ apiKeyEnv: "XAI_API_KEY",
129
+ keysUrl: "https://console.x.ai/",
130
+ models: MODELS,
131
+ thinkLevels,
132
+ price,
133
+ contextWindow,
134
+ bufferedOutputTokens,
135
+ normalize,
136
+ };
137
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/drivers/xai/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { staticSystemPrompt } from "./engine.js";
2
+ import { toolSchemas } from "../tools/registry.js";
3
+ import { basePrompt } from "./prompt.js";
4
+ import { estimateTokens } from "../memory/compaction.js";
5
+ import { readFileSync, existsSync } from "node:fs";
6
+ const root = "D:\Kleopatra";
7
+ const memIdx = "";
8
+ const projMem = existsSync(root + "\GODEN.md") ? readFileSync(root + "\GODEN.md", "utf8") : "";
9
+ const gov = { forbidden: "", skills: "", rules: [] };
10
+ const sys = staticSystemPrompt("", projMem, root + "\memory", memIdx, gov, "", 3);
11
+ const ctx = { cwd: root, governance: { rules: [], skills: [], forbidden: [] } };
12
+ const tools = toolSchemas({ ctx });
13
+ let toolTok = 0;
14
+ for (const t of tools)
15
+ toolTok += estimateTokens(JSON.stringify(t));
16
+ console.log("basePrompt ", estimateTokens(basePrompt("PowerShell")));
17
+ console.log("staticSystemPrompt", estimateTokens(sys), `(${sys.length} chars)`);
18
+ console.log("tools ", toolTok, `over ${tools.length}`);
19
+ console.log("PREFIX TOTAL ", estimateTokens(sys) + toolTok);
20
+ //# sourceMappingURL=_probe.tmp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_probe.tmp.js","sourceRoot":"","sources":["../../src/dynamo/_probe.tmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,IAAI,GAAG,cAAc,CAAC;AAC5B,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,MAAM,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAc,EAAE,CAAC;AACjE,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,GAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3F,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAA4B,CAAC;AAC1G,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACnC,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,KAAK,MAAM,CAAC,IAAI,KAAK;IAAE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5E,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;AAChF,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,EAAE,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * FNV-1a, 32-bit. A non-cryptographic hash is exactly right here: the question is
3
+ * "are these the same bytes", collisions cost a missed report rather than a wrong
4
+ * action, and this runs on every request over the whole system prompt.
5
+ */
6
+ export function hashString(text) {
7
+ let h = 0x811c9dc5;
8
+ for (let i = 0; i < text.length; i++) {
9
+ h ^= text.charCodeAt(i);
10
+ h = Math.imul(h, 0x01000193);
11
+ }
12
+ return h >>> 0;
13
+ }
14
+ /** Fingerprint what is about to be sent. */
15
+ export function prefixPrint(model, system, tools, messages = []) {
16
+ const byName = {};
17
+ for (const tool of tools) {
18
+ byName[tool.function.name] = hashString(JSON.stringify(tool));
19
+ }
20
+ return {
21
+ model,
22
+ system: hashString(system),
23
+ tools: byName,
24
+ systemChars: system.length,
25
+ messages: messages.map((m) => hashString(JSON.stringify(m))),
26
+ };
27
+ }
28
+ /**
29
+ * Compare two fingerprints and report the FIRST thing that broke the prefix, in the
30
+ * order the provider would hit it.
31
+ *
32
+ * One finding, not a list, and the order is the point: the parts are nested, so a model
33
+ * change makes every downstream difference meaningless to report. Naming the outermost
34
+ * cause is what tells someone where to look.
35
+ */
36
+ export function diffPrefix(prev, next) {
37
+ if (prev.model !== next.model) {
38
+ return { kind: "model", detail: `model changed (${prev.model} → ${next.model})` };
39
+ }
40
+ const before = Object.keys(prev.tools);
41
+ const after = Object.keys(next.tools);
42
+ const added = after.filter((n) => !(n in prev.tools));
43
+ const removed = before.filter((n) => !(n in next.tools));
44
+ if (added.length > 0 || removed.length > 0) {
45
+ const parts = [
46
+ added.length > 0 ? `+${added.join(", +")}` : "",
47
+ removed.length > 0 ? `-${removed.join(", -")}` : "",
48
+ ].filter(Boolean);
49
+ return { kind: "tools", detail: `the tool list changed (${parts.join(" ")})` };
50
+ }
51
+ // Same names, same count, different bytes: a description or schema built from live
52
+ // state. Invisible to any check that counts tools, and it breaks the cache every call.
53
+ const changed = after.filter((n) => prev.tools[n] !== next.tools[n]);
54
+ if (changed.length > 0) {
55
+ return {
56
+ kind: "tool-schema",
57
+ detail: `${changed.join(", ")} changed shape without changing name — its schema is built from live state`,
58
+ };
59
+ }
60
+ // The conversation, compared only over the length they SHARE. Growth is the normal
61
+ // case and costs nothing; what breaks the cache is an earlier message changing, and
62
+ // the first one that did is where the damage starts — everything after it is a
63
+ // consequence, not a second finding.
64
+ const shared = Math.min(prev.messages.length, next.messages.length);
65
+ for (let i = 0; i < shared; i++) {
66
+ if (prev.messages[i] !== next.messages[i]) {
67
+ return {
68
+ kind: "history",
69
+ detail: `message ${i + 1} of ${shared} was rewritten — everything after it is re-billed`,
70
+ };
71
+ }
72
+ }
73
+ // Shrinking is a rewrite too, even when every surviving message matches: a dropped
74
+ // turn moves everything that followed it.
75
+ if (next.messages.length < prev.messages.length) {
76
+ return {
77
+ kind: "history",
78
+ detail: `the conversation shrank (${prev.messages.length} → ${next.messages.length} messages)`,
79
+ };
80
+ }
81
+ if (prev.system !== next.system) {
82
+ const delta = next.systemChars - prev.systemChars;
83
+ const size = delta === 0 ? "same length" : `${delta > 0 ? "+" : ""}${delta} chars`;
84
+ return { kind: "system", detail: `the system prompt changed (${size})` };
85
+ }
86
+ return null;
87
+ }
88
+ //# sourceMappingURL=cacheBreak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheBreak.js","sourceRoot":"","sources":["../../src/dynamo/cacheBreak.ts"],"names":[],"mappings":"AAgEA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,WAAW,CACzB,KAAa,EACb,MAAc,EACd,KAA4B,EAC5B,WAAmC,EAAE;IAErC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO;QACL,KAAK;QACL,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;QAC1B,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,IAAiB,EAAE,IAAiB;IAC7D,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG;YACZ,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/C,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;SACpD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,0BAA0B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjF,CAAC;IAED,mFAAmF;IACnF,uFAAuF;IACvF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,4EAA4E;SAC1G,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,oFAAoF;IACpF,+EAA+E;IAC/E,qCAAqC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,MAAM,mDAAmD;aACzF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,mFAAmF;IACnF,0CAA0C;IAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,4BAA4B,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,YAAY;SAC/F,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,8BAA8B,IAAI,GAAG,EAAE,CAAC;IAC3E,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}