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,460 @@
1
+ /**
2
+ * markdown.ts — render Mindweave's markdown replies as styled terminal text.
3
+ *
4
+ * Mindweave's model answers in markdown (`# headings`, `**bold**`, `- lists`,
5
+ * ```code```), which looked raw in the terminal. This turns that into an ANSI
6
+ * string that Ink renders directly inside a <Text> (Ink passes ANSI through and
7
+ * wraps it correctly). The pipeline is straightforward: `marked` lexes to tokens,
8
+ * a small walker emits `chalk`-styled ANSI, and fenced code goes through
9
+ * `cli-highlight` (highlight.js) — all written here from scratch, kept compact.
10
+ *
11
+ * Notes:
12
+ * - Strikethrough is intentionally disabled: models use `~` for "approx" (~100),
13
+ * not actual strikethrough.
14
+ * - Syntax highlighting degrades to dim plain text when the language isn't known
15
+ * or the highlighter is unavailable, so rendering never throws.
16
+ */
17
+ import { createRequire } from "node:module";
18
+ import chalk from "chalk";
19
+ import { marked } from "marked";
20
+ const ESC = String.fromCharCode(27); // the ANSI escape byte, built to avoid embedding it in source
21
+ let highlighter = null;
22
+ try {
23
+ highlighter = createRequire(import.meta.url)("cli-highlight");
24
+ }
25
+ catch {
26
+ highlighter = null;
27
+ }
28
+ let configured = false;
29
+ function configure() {
30
+ if (configured)
31
+ return;
32
+ configured = true;
33
+ // Drop strikethrough parsing — `~approx` is almost never intended as <del>.
34
+ marked.use({ tokenizer: { del: () => undefined } });
35
+ }
36
+ // The visible columns available to the renderer, set per call. Used to fit tables
37
+ // so a wide one never exceeds the width (which makes Ink wrap each line and shatter
38
+ // the box). Module-level because renderMarkdown is synchronous and single-threaded.
39
+ let tableWidth = 80;
40
+ const BULLET_RE = /^\s*(?:[-*+]|\d+[.)])\s+/;
41
+ const HEADING_RE = /^#{1,6}\s/;
42
+ const FENCE_RE = /^\s*(?:```|~~~)/;
43
+ const TABLE_RE = /^\s*\|/;
44
+ /** A line that is nothing but bold text, optionally ending in a colon — models write
45
+ * these as section labels, so they behave like headings even though they aren't. */
46
+ const LABEL_RE = /^\s*\*\*[^*]+\*\*:?\s*$/;
47
+ /**
48
+ * A definition line: a bold term, a separator, then its description.
49
+ *
50
+ * **Smart Organization** — auto-linking, quick switcher, …
51
+ * **Export**: Markdown, HTML, PDF
52
+ *
53
+ * This is the shape models reach for constantly when summarising, and it was the
54
+ * single worst thing this renderer did. Each one is a separate fact, but written
55
+ * without blank lines they are consecutive lines of one paragraph as far as
56
+ * CommonMark is concerned — so nine of them lexed to ONE token and rendered as an
57
+ * unbroken nine-line wall with bold scattered through it. `LABEL_RE` did not save
58
+ * them because it requires the line to be bold and NOTHING else.
59
+ *
60
+ * The separator has to be present and followed by text: that is what distinguishes a
61
+ * definition from an ordinary sentence that merely opens with emphasis ("**The trick**
62
+ * that keeps it specific is…"), which must stay part of its paragraph.
63
+ */
64
+ const DEFN_RE = /^\s*\*\*[^*]+\*\*\s*(?:[—–:]|-)\s+\S/;
65
+ /**
66
+ * Put blank lines back at block boundaries, before the markdown is lexed.
67
+ *
68
+ * Models write markdown tightly — a list directly under the sentence introducing it,
69
+ * a sentence directly under the last bullet, a bold label hard against the paragraph
70
+ * above. Rendered faithfully that produces the wall of text this fixes: every block
71
+ * hugging the next with nothing to separate them.
72
+ *
73
+ * It also repairs a real parse fault, not just spacing. In CommonMark a prose line
74
+ * directly beneath a list item is a LAZY CONTINUATION — it is absorbed into that item
75
+ * rather than starting a paragraph. So a summary sentence written under the last
76
+ * bullet became part of the bullet, and rendered hanging at the left margin under it,
77
+ * looking like a bug. A blank line is what tells the parser they are separate things.
78
+ *
79
+ * Deliberately conservative: it only inserts blanks where two DIFFERENT kinds of block
80
+ * meet. Content inside a fence is never touched, and an indented line after a bullet
81
+ * is left alone because that is a genuine continuation of the item.
82
+ */
83
+ export function normalizeBlocks(md) {
84
+ const lines = md.split("\n");
85
+ const out = [];
86
+ let inFence = false;
87
+ const blank = (s) => s.trim() === "";
88
+ // 2+ leading spaces: a continuation of the list item above, not a new block.
89
+ const indented = (s) => /^\s{2,}\S/.test(s);
90
+ for (const line of lines) {
91
+ if (FENCE_RE.test(line)) {
92
+ if (!inFence && out.length > 0 && !blank(out[out.length - 1]))
93
+ out.push("");
94
+ out.push(line);
95
+ inFence = !inFence;
96
+ continue;
97
+ }
98
+ if (inFence) {
99
+ out.push(line);
100
+ continue;
101
+ }
102
+ const prev = out.length > 0 ? out[out.length - 1] : "";
103
+ if (!blank(line) && !blank(prev)) {
104
+ const prevList = BULLET_RE.test(prev);
105
+ const thisList = BULLET_RE.test(line);
106
+ const needsAir = (thisList && !prevList) || // prose introducing a list
107
+ (prevList && !thisList && !indented(line)) || // prose after a list — the lazy-continuation fix
108
+ HEADING_RE.test(line) ||
109
+ HEADING_RE.test(prev) ||
110
+ LABEL_RE.test(line) ||
111
+ DEFN_RE.test(line) || // a definition starts its own block…
112
+ DEFN_RE.test(prev) || // …and so does whatever follows one
113
+ FENCE_RE.test(prev) || // the line after a closing fence
114
+ TABLE_RE.test(line) !== TABLE_RE.test(prev); // either edge of a table
115
+ if (needsAir)
116
+ out.push("");
117
+ }
118
+ out.push(line);
119
+ }
120
+ return out.join("\n");
121
+ }
122
+ /** Render a markdown string to a styled ANSI string for an Ink <Text>. `width` is
123
+ * the visible columns available; tables are sized to fit inside it. */
124
+ export function renderMarkdown(content, width = 80) {
125
+ configure();
126
+ tableWidth = Math.max(20, width);
127
+ try {
128
+ return marked
129
+ .lexer(normalizeBlocks(content))
130
+ .map((t) => renderToken(t, 0, null))
131
+ .join("")
132
+ .replace(/\n{3,}/g, "\n\n")
133
+ .trim();
134
+ }
135
+ catch {
136
+ return content; // never let a parse error swallow the reply
137
+ }
138
+ }
139
+ const BULLET = "•";
140
+ function renderToken(token, depth, ordered) {
141
+ switch (token.type) {
142
+ case "heading": {
143
+ const text = inline(token.tokens);
144
+ const styled = token.depth === 1 ? chalk.bold.underline(text) : chalk.bold(text);
145
+ return styled + "\n\n";
146
+ }
147
+ case "paragraph":
148
+ return inline(token.tokens) + "\n\n";
149
+ case "text": {
150
+ const t = token;
151
+ return t.tokens ? inline(t.tokens) : decodeEntities(t.text);
152
+ }
153
+ case "code":
154
+ return renderCodeBlock(token) + "\n";
155
+ case "blockquote": {
156
+ const inner = (token.tokens ?? []).map((t) => renderToken(t, 0, null)).join("").trim();
157
+ return (inner
158
+ .split("\n")
159
+ .map((line) => chalk.dim("│ ") + chalk.italic(line))
160
+ .join("\n") + "\n\n");
161
+ }
162
+ case "list": {
163
+ const list = token;
164
+ return (list.items
165
+ .map((item, i) => renderListItem(item, depth, list.ordered ? Number(list.start) + i : null))
166
+ .join("") + (depth === 0 ? "\n" : ""));
167
+ }
168
+ case "hr":
169
+ return chalk.dim("─".repeat(24)) + "\n\n";
170
+ case "table":
171
+ // A blank line below (like paragraphs) so the next section doesn't hug the
172
+ // table's last row — the collapse in renderMarkdown trims any excess.
173
+ return renderTable(token) + "\n\n";
174
+ case "space":
175
+ return "\n";
176
+ case "html":
177
+ case "def":
178
+ return "";
179
+ default:
180
+ return "text" in token ? token.text : "";
181
+ }
182
+ }
183
+ /** One list item, indented by depth, with a bullet or its number. */
184
+ function renderListItem(item, depth, ordered) {
185
+ const indent = " ".repeat(depth);
186
+ const marker = ordered === null ? chalk.dim(BULLET) : chalk.dim(`${ordered}.`);
187
+ // An item's children are usually a "text" token plus possibly nested lists.
188
+ let head = "";
189
+ let rest = "";
190
+ for (const child of item.tokens ?? []) {
191
+ if (child.type === "list") {
192
+ rest += renderToken(child, depth + 1, null);
193
+ }
194
+ else if (child.type === "text") {
195
+ const t = child;
196
+ head += t.tokens ? inline(t.tokens) : decodeEntities(t.text);
197
+ }
198
+ else {
199
+ head += renderToken(child, depth, null);
200
+ }
201
+ }
202
+ return `${indent}${marker} ${head.trim()}\n${rest}`;
203
+ }
204
+ /** Inline tokens (the children of a paragraph/heading/list item). */
205
+ function inline(tokens) {
206
+ if (!tokens)
207
+ return "";
208
+ return tokens.map(inlineToken).join("");
209
+ }
210
+ function inlineToken(token) {
211
+ switch (token.type) {
212
+ case "strong":
213
+ return chalk.bold(inline(token.tokens));
214
+ case "em":
215
+ return chalk.italic(inline(token.tokens));
216
+ case "codespan":
217
+ return chalk.cyan(decodeEntities(token.text));
218
+ case "link": {
219
+ const l = token;
220
+ const text = decodeEntities(inline(l.tokens) || l.href);
221
+ const shown = chalk.cyan.underline(text);
222
+ // Show the URL only when it differs from the link text. No OSC-8 escapes —
223
+ // they render as garbage in terminals that don't support them.
224
+ return l.href && l.href !== text ? `${shown} ${chalk.dim(`(${l.href})`)}` : shown;
225
+ }
226
+ case "br":
227
+ return "\n";
228
+ case "escape":
229
+ return decodeEntities(token.text);
230
+ case "text":
231
+ return decodeEntities(token.text);
232
+ default:
233
+ return "text" in token ? decodeEntities(token.text) : "";
234
+ }
235
+ }
236
+ // marked HTML-escapes text tokens (& < > " '). Decode them for the terminal.
237
+ // &amp; is decoded last so an encoded entity like &amp;lt; doesn't double-decode.
238
+ function decodeEntities(s) {
239
+ return s
240
+ .replace(/&lt;/g, "<")
241
+ .replace(/&gt;/g, ">")
242
+ .replace(/&quot;/g, '"')
243
+ .replace(/&#(?:39|x27);/g, "'")
244
+ .replace(/&amp;/g, "&");
245
+ }
246
+ /** A fenced code block: syntax-highlighted if possible, else dim, indented 2. */
247
+ function renderCodeBlock(token) {
248
+ let body;
249
+ const lang = (token.lang || "").trim().split(/\s+/)[0];
250
+ if (highlighter && lang && safeSupports(lang)) {
251
+ try {
252
+ body = highlighter.highlight(token.text, { language: lang, ignoreIllegals: true });
253
+ }
254
+ catch {
255
+ body = chalk.dim(token.text);
256
+ }
257
+ }
258
+ else {
259
+ body = chalk.dim(token.text);
260
+ }
261
+ return body
262
+ .split("\n")
263
+ .map((line) => " " + line)
264
+ .join("\n");
265
+ }
266
+ function safeSupports(lang) {
267
+ try {
268
+ return highlighter.supportsLanguage(lang);
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ }
274
+ // Strips SGR color codes (for plain-text cell measurement/wrapping).
275
+ const ANSI_RE = new RegExp(`${ESC}\\[[0-9;]*m`, "g");
276
+ function stripAnsi(s) {
277
+ return s.replace(ANSI_RE, "");
278
+ }
279
+ /** Pad a plain string to width w with trailing spaces. */
280
+ function padCell(s, w) {
281
+ return s.length >= w ? s : s + " ".repeat(w - s.length);
282
+ }
283
+ /** Greedy word-wrap of PLAIN text to `width`, hard-breaking any word longer than it. */
284
+ function wrapPlain(s, width) {
285
+ const words = s.split(/\s+/).filter(Boolean);
286
+ if (words.length === 0)
287
+ return [""];
288
+ const lines = [];
289
+ let cur = "";
290
+ for (let word of words) {
291
+ while (word.length > width) {
292
+ if (cur) {
293
+ lines.push(cur);
294
+ cur = "";
295
+ }
296
+ lines.push(word.slice(0, width));
297
+ word = word.slice(width);
298
+ }
299
+ if (!cur)
300
+ cur = word;
301
+ else if (cur.length + 1 + word.length <= width)
302
+ cur += " " + word;
303
+ else {
304
+ lines.push(cur);
305
+ cur = word;
306
+ }
307
+ }
308
+ if (cur)
309
+ lines.push(cur);
310
+ return lines.length ? lines : [""];
311
+ }
312
+ /** Shrink the widest columns one at a time until the row fits the content budget. */
313
+ function fitColumns(natural, budget) {
314
+ const widths = natural.map((w) => Math.max(1, w));
315
+ let total = widths.reduce((a, b) => a + b, 0);
316
+ while (total > budget) {
317
+ let idx = 0;
318
+ for (let i = 1; i < widths.length; i++)
319
+ if (widths[i] > widths[idx])
320
+ idx = i;
321
+ if (widths[idx] <= 1)
322
+ break; // nothing left to shrink
323
+ widths[idx]--;
324
+ total--;
325
+ }
326
+ return widths;
327
+ }
328
+ // A column narrower than this holds nothing readable. The old sizer shrank the
329
+ // widest column one character at a time with a floor of ONE, so a wide table
330
+ // degraded into a stack of single letters rather than admitting it did not fit.
331
+ const MIN_COL = 3;
332
+ // Cells never touch the terminal's last column: a box drawn exactly to the edge is
333
+ // one rounding error away from Ink wrapping a row and shattering the border.
334
+ const SAFETY_MARGIN = 2;
335
+ // Past this many lines in a single row, the grid is doing more harm than good and
336
+ // the vertical layout reads better. Same threshold Froge's port settled on.
337
+ const MAX_ROW_LINES = 4;
338
+ // Per column: a space either side of the content plus one border character.
339
+ const CELL_PADDING = 3;
340
+ /**
341
+ * A bordered monospace table that always fits the available width.
342
+ *
343
+ * The borderless version this replaces was airier in isolation and worse in use: with
344
+ * only a thin gutter between columns, a wrapped cell was hard to tell from the row
345
+ * below it, and the whole thing stopped reading as a unit of structured data. A drawn
346
+ * box is what makes a table scan as a table at a glance, which is the only reason to
347
+ * choose one over prose in the first place.
348
+ *
349
+ * Sizing runs in three tiers rather than shrinking the widest column until something
350
+ * gives: use the natural widths if they fit, otherwise distribute the available space
351
+ * in proportion to how much each column wants, and only hard-wrap when even the
352
+ * longest single WORD in each column cannot fit.
353
+ *
354
+ * And when no arrangement is readable — a row taller than MAX_ROW_LINES, or a box
355
+ * still wider than the terminal — it stops trying and renders vertically instead. A
356
+ * table that does not fit is not a table; forcing it into columns produces the
357
+ * shredded output this fallback exists to avoid.
358
+ */
359
+ function renderTable(token) {
360
+ const n = token.header.length;
361
+ if (n === 0)
362
+ return "";
363
+ const styledOf = (t) => inline(t ?? []).replace(/\s+/g, " ").trim();
364
+ const headers = token.header.map((c) => styledOf(c.tokens));
365
+ const rows = token.rows.map((r) => token.header.map((_, i) => styledOf(r[i]?.tokens)));
366
+ const plain = (s) => stripAnsi(s);
367
+ const columns = (i) => [headers[i], ...rows.map((r) => r[i])];
368
+ // What a column wants, and the least it can take without slicing through a word.
369
+ const ideal = token.header.map((_, i) => Math.max(MIN_COL, ...columns(i).map((c) => plain(c).length)));
370
+ const floor = token.header.map((_, i) => Math.max(MIN_COL, ...columns(i).flatMap((c) => plain(c).split(/\s+/).map((w) => w.length))));
371
+ const budget = Math.max(n * MIN_COL, tableWidth - SAFETY_MARGIN - (n * CELL_PADDING + 1));
372
+ const totalIdeal = ideal.reduce((a, b) => a + b, 0);
373
+ const totalFloor = floor.reduce((a, b) => a + b, 0);
374
+ let widths;
375
+ let hard = false;
376
+ if (totalIdeal <= budget) {
377
+ widths = ideal;
378
+ }
379
+ else if (totalFloor <= budget) {
380
+ // Share the leftover in proportion to how much each column is giving up, so a
381
+ // column that wanted a lot gets more of the slack than one that barely wanted any.
382
+ const slack = budget - totalFloor;
383
+ const want = ideal.map((w, i) => w - floor[i]);
384
+ const totalWant = want.reduce((a, b) => a + b, 0);
385
+ widths = floor.map((w, i) => (totalWant === 0 ? w : w + Math.floor((want[i] / totalWant) * slack)));
386
+ }
387
+ else {
388
+ hard = true;
389
+ widths = fitColumns(floor, budget);
390
+ }
391
+ // Styling survives only when a cell fits on one line. Wrapping a string that
392
+ // carries ANSI means splitting between an escape and the text it colours, which
393
+ // renders as leaked codes — so a wrapped cell falls back to its plain text. That
394
+ // keeps `inline code` and **bold** in the short cells where they carry meaning,
395
+ // without a full ANSI-aware wrapper to get subtly wrong.
396
+ const cellLines = (styled, w) => {
397
+ const text = plain(styled);
398
+ if (text.length <= w)
399
+ return [styled + " ".repeat(w - text.length)];
400
+ return wrapPlain(text, w).map((l) => padCell(l, w));
401
+ };
402
+ const height = (cells) => Math.max(1, ...cells.map((c, i) => cellLines(c, widths[i]).length));
403
+ const tallest = Math.max(height(headers), ...rows.map(height));
404
+ const boxWidth = widths.reduce((a, b) => a + b, 0) + n * CELL_PADDING + 1;
405
+ if (hard || tallest > MAX_ROW_LINES || boxWidth > tableWidth - SAFETY_MARGIN) {
406
+ return renderTableVertically(headers, rows);
407
+ }
408
+ const bar = chalk.dim("│");
409
+ const rule = (left, mid, right) => chalk.dim(left + widths.map((w) => "─".repeat(w + 2)).join(mid) + right);
410
+ const renderRow = (cells, header) => {
411
+ const parts = cells.map((c, i) => cellLines(c, widths[i]));
412
+ const lines = [];
413
+ for (let r = 0; r < Math.max(...parts.map((p) => p.length)); r++) {
414
+ const body = parts
415
+ .map((p, i) => {
416
+ const text = p[r] ?? " ".repeat(widths[i]);
417
+ return ` ${header ? chalk.bold(text) : text} `;
418
+ })
419
+ .join(bar);
420
+ lines.push(bar + body + bar);
421
+ }
422
+ return lines;
423
+ };
424
+ return [
425
+ rule("┌", "┬", "┐"),
426
+ ...renderRow(headers, true),
427
+ rule("├", "┼", "┤"),
428
+ ...rows.flatMap((r) => renderRow(r, false)),
429
+ rule("└", "┴", "┘"),
430
+ ].join("\n");
431
+ }
432
+ /**
433
+ * The fallback for a table that cannot be a table here: each row becomes a small
434
+ * labelled stack, separated by a rule.
435
+ *
436
+ * This is the honest answer to a table that is too wide. The alternative — squeezing
437
+ * columns until the words break — keeps the SHAPE of a table while destroying the
438
+ * thing a table is for, which is comparing values by position. Stacked labels lose
439
+ * the comparison but keep every value readable, and on a narrow terminal that is
440
+ * strictly the better trade.
441
+ */
442
+ function renderTableVertically(headers, rows) {
443
+ const label = (s) => chalk.bold(stripAnsi(s) || "—");
444
+ const out = [];
445
+ rows.forEach((row, i) => {
446
+ if (i > 0)
447
+ out.push(chalk.dim("─".repeat(Math.min(40, tableWidth))));
448
+ row.forEach((cell, c) => {
449
+ const head = label(headers[c] ?? `Column ${c + 1}`);
450
+ const value = stripAnsi(cell).trim();
451
+ const indent = " ";
452
+ const lines = wrapPlain(value, Math.max(10, tableWidth - stripAnsi(head).length - 2));
453
+ out.push(`${head}: ${lines[0] ?? ""}`);
454
+ for (const rest of lines.slice(1))
455
+ out.push(indent + rest);
456
+ });
457
+ });
458
+ return out.join("\n");
459
+ }
460
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/cli/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * messageQueue.ts — messages typed while Mindweave is working.
3
+ *
4
+ * The queue existed before this file did, as six lines inside App.tsx: push on send,
5
+ * shift on turn end. That is enough to not lose a message and not enough to be a
6
+ * feature. Three things were missing, and all three were things a user would only
7
+ * discover by being burned:
8
+ *
9
+ * - **No way back out.** Once queued, a message was going to be sent. Pressing ↑
10
+ * looked like editing it — the text appeared, because sending had already written
11
+ * it to history — but the queued copy was untouched. Editing and sending produced
12
+ * TWO messages: the edit, and the original the user thought they had just replaced.
13
+ * - **One turn each.** Three queued messages meant three full turns, each re-sending
14
+ * the whole conversation. The model also answered each in ignorance of the next,
15
+ * which is the wrong reading of someone typing three things in a row.
16
+ * - **Unbounded on screen.** The queue renders in the footer, and the footer is not
17
+ * height-bounded. Enough queued lines make the frame taller than the terminal,
18
+ * which corrupts the whole screen rather than clipping (see App's frameHeight
19
+ * note). Nothing stopped that.
20
+ *
21
+ * The shape: ↑ or Esc pulls the WHOLE queue back into the input as editable text, and
22
+ * the drain batches. Kept deliberately as pure functions
23
+ * over a plain array — the queue is small, always local to one App, and every rule in
24
+ * it is worth a test.
25
+ */
26
+ /** Rows of queue the footer will show before collapsing the rest into a count. */
27
+ export const MAX_VISIBLE_QUEUED = 3;
28
+ /** Whether this entry runs as a command rather than being said to the model. */
29
+ export function isCommand(text) {
30
+ return text.trimStart().startsWith("/");
31
+ }
32
+ /**
33
+ * What to send next, and what stays queued.
34
+ *
35
+ * Consecutive plain messages go out TOGETHER, as one turn. Someone who types three
36
+ * sentences while waiting meant them as one thought, and answering the first without
37
+ * having read the third is how you get an answer that is immediately obsolete. It is
38
+ * also the cheaper read: one turn re-sends the conversation once instead of three
39
+ * times.
40
+ *
41
+ * A slash command always goes alone. It is not something to say to the model, it is
42
+ * something to DO — merging `/model` into the prose around it would send the literal
43
+ * word to the model instead of switching anything.
44
+ */
45
+ export function drain(queue) {
46
+ if (queue.length === 0)
47
+ return undefined;
48
+ const first = queue[0];
49
+ if (isCommand(first))
50
+ return { send: first, rest: queue.slice(1) };
51
+ let i = 0;
52
+ while (i < queue.length && !isCommand(queue[i]))
53
+ i++;
54
+ // A blank line between them, not a bare newline: these were separate messages, and
55
+ // run together they read as one rambling paragraph.
56
+ return { send: queue.slice(0, i).join("\n\n"), rest: queue.slice(i) };
57
+ }
58
+ /**
59
+ * Pull the whole queue back into the input for editing.
60
+ *
61
+ * ALL of it, not just the last one. Partial removal would need the user to hold a
62
+ * selection in their head across a screen that is also printing tool output at them;
63
+ * emptying it and letting them re-send what they still want is fewer moving parts and
64
+ * cannot leave a message queued that they believe they cancelled.
65
+ *
66
+ * Anything already typed is kept and moved to the END, and that ordering is the whole
67
+ * point: a half-written line is the newest thing the user was saying, so it belongs
68
+ * after the older queued messages, not in front of them. The cursor lands where that
69
+ * draft starts, which is where they were.
70
+ */
71
+ export function popAll(queue, currentInput, currentCursor) {
72
+ if (queue.length === 0)
73
+ return undefined;
74
+ const queuedText = queue.join("\n");
75
+ if (currentInput === "")
76
+ return { text: queuedText, cursor: queuedText.length };
77
+ return {
78
+ text: `${queuedText}\n${currentInput}`,
79
+ // +1 for the newline that joins the draft on.
80
+ cursor: queuedText.length + 1 + currentCursor,
81
+ };
82
+ }
83
+ /**
84
+ * What the footer shows: the first few entries, and how many are hidden.
85
+ *
86
+ * Capped because the footer is not height-bounded and an over-tall frame corrupts the
87
+ * screen rather than clipping. The count is not decoration — a user who queued six
88
+ * messages needs to know six are coming, even when they can only see three.
89
+ */
90
+ export function visibleQueue(queue) {
91
+ return {
92
+ rows: queue.slice(0, MAX_VISIBLE_QUEUED),
93
+ hidden: Math.max(0, queue.length - MAX_VISIBLE_QUEUED),
94
+ };
95
+ }
96
+ //# sourceMappingURL=messageQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageQueue.js","sourceRoot":"","sources":["../../src/cli/messageQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AASpC,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,KAAK,CAAC,KAAwB;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;QAAE,CAAC,EAAE,CAAC;IACtD,mFAAmF;IACnF,oDAAoD;IACpD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AASD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,MAAM,CACpB,KAAwB,EACxB,YAAoB,EACpB,aAAqB;IAErB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,YAAY,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;IAChF,OAAO;QACL,IAAI,EAAE,GAAG,UAAU,KAAK,YAAY,EAAE;QACtC,8CAA8C;QAC9C,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa;KAC9C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC;QACxC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC;KACvD,CAAC;AACJ,CAAC"}