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 @@
1
+ {"version":3,"file":"SubagentView.js","sourceRoot":"","sources":["../../../src/cli/components/SubagentView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ToolGroup — one consolidated row for a burst of file reads, plus the calls
4
+ * it made listed beneath it.
5
+ *
6
+ * ● Read 2 files
7
+ * ⎿ views.py 42 lines
8
+ * ⎿ auth.py 128 lines
9
+ *
10
+ * The block appears ONCE, already carrying its list — it is not dispatched until
11
+ * its calls have resolved (App's pump holds it). The only thing that ever changes
12
+ * afterwards is the verb, which settles from "Reading" to "Read" when the turn
13
+ * ends. A bare "Reading 2 files…" header that later grows a body is exactly the
14
+ * transition this design exists to remove, so nothing here may key off `done`.
15
+ *
16
+ * It used to render the header ALONE, on the theory that the count told the
17
+ * story and the individual calls were detail nobody reads. It didn't: "Explored
18
+ * 2 items" names neither the files nor what was found, so it occupied a row
19
+ * while answering nothing. The calls are listed now, collapsed and capped.
20
+ *
21
+ * What is grouped narrowed at the same time. Searches (grep/glob) left the group
22
+ * and became their own block, because a search's pattern and its hits are the
23
+ * whole point of it. The pure code-intel lookups (outline/definition/references/
24
+ * relevant) went the other way and are hidden entirely — they are how the agent
25
+ * navigates, not something done TO the project. See isGroupable.
26
+ */
27
+ import { Box, Text } from "ink";
28
+ import { KIND_COLOR, ERROR_COLOR } from "../toolDisplay.js";
29
+ import { collapseAdjacent } from "../toolItems.js";
30
+ const DOT = "●";
31
+ export function ToolGroup({ items, live, columns, tightTop, }) {
32
+ const n = items.length;
33
+ const anyError = items.some((it) => it.status === "error");
34
+ // Named for what it actually did when it's all one kind of work, which after
35
+ // the narrowing above is the common case: a burst of reads says "Read 3 files".
36
+ const allReads = items.every((it) => it.kind === "read");
37
+ const noun = allReads ? (n === 1 ? "file" : "files") : n === 1 ? "item" : "items";
38
+ const verb = live ? (allReads ? "Reading" : "Exploring") : allReads ? "Read" : "Explored";
39
+ const header = `${verb} ${n} ${noun}`;
40
+ // The discovery dot takes the group's dominant action colour (reads vs searches),
41
+ // red if any call in it failed. It is NOT dimmed while the turn runs: this block
42
+ // is only ever rendered once its calls have resolved, so there is no unresolved
43
+ // state to signal, and dimming would be a second thing changing under the user.
44
+ const dotColor = anyError ? ERROR_COLOR : KIND_COLOR[dominantKind(items)];
45
+ const collapsed = collapseAdjacent(items);
46
+ const rows = collapsed.slice(0, GROUP_MAX_ROWS);
47
+ const hidden = collapsed.length - rows.length;
48
+ const content = Math.max(8, columns - 5);
49
+ return (_jsxs(Box, { marginTop: tightTop ? 0 : 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: dotColor, children: DOT }) }), _jsx(Text, { bold: true, children: header })] }), rows.map((row) => (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { dimColor: true, children: " ⎿ " }), _jsx(Box, { width: content, children: _jsxs(Text, { color: row.anyError ? "red" : undefined, dimColor: !row.anyError, wrap: "truncate-end", children: [row.label, row.count > 1 ? ` ×${row.count}` : ""] }) })] }, row.item.toolId))), hidden > 0 ? _jsx(Text, { dimColor: true, children: ` … ${hidden} more` }) : null] }));
50
+ }
51
+ /** Rows listed under a finished discovery group before the rest are summarised.
52
+ * Exported so viewport.ts's height estimate uses the same cap this renders. */
53
+ export const GROUP_MAX_ROWS = 6;
54
+ /** The most common action in a discovery burst — used to colour its dot. Defaults
55
+ * to "search" (the family reads/greps/maps all belong to). */
56
+ function dominantKind(items) {
57
+ const reads = items.filter((it) => it.kind === "read").length;
58
+ return reads > items.length / 2 ? "read" : "search";
59
+ }
60
+ //# sourceMappingURL=ToolGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolGroup.js","sourceRoot":"","sources":["../../../src/cli/components/ToolGroup.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ToolLine — a tool's activity row.
4
+ *
5
+ * ● Update(home.html)
6
+ * ⎿ - <a href="#" class="btn">
7
+ * + <a href="catalog.html" class="btn">
8
+ *
9
+ * The dot reflects lifecycle: dim while running, white when ok, red on error. The
10
+ * bold `Name(arg)` sits on the first row; once resolved, an indented `⎿` branch
11
+ * hangs beneath with the rich detail (an edit diff, a file preview, command
12
+ * output) or a one-line summary. The whole result appears AT ONCE on resolve —
13
+ * never a live, line-by-line scroll (that churn is what made the old version
14
+ * glitch).
15
+ */
16
+ import { Box, Text } from "ink";
17
+ import { KIND_COLOR, ERROR_COLOR } from "../toolDisplay.js";
18
+ import { activeForm } from "../toolItems.js";
19
+ const DOT = "●";
20
+ const BRANCH = "⎿";
21
+ // The rail beside quoted machine output (a command's stdout). Distinct from BRANCH:
22
+ // the branch says "here is this call's result", the rail says "this text is not ours".
23
+ const RAIL = "│";
24
+ // The branch nests one level UNDER the tool label: the `⎿` sits beneath the name's
25
+ // first letter (col 2) and continuation rows align under the branch content, so the
26
+ // result reads as belonging to the tool call instead of hanging in the dot gutter.
27
+ const BRANCH_INDENT = 4;
28
+ export function ToolLine({ name, arg, status, action, summary, detail, detailKind, meta, columns, live, tightTop }) {
29
+ const errored = status === "error";
30
+ // "Updating(home.html)" while the turn runs, "Update(home.html)" once it ends —
31
+ // the same row, one word apart. The row is not shown at all until its result is
32
+ // in hand, so this is the only change the user ever sees it make.
33
+ const verb = activeForm(name, !!live);
34
+ // The dot carries the action at a glance: its category colour when it succeeds,
35
+ // dim while still running, red when it failed.
36
+ const dotColor = errored ? ERROR_COLOR : action ? KIND_COLOR[action] : undefined;
37
+ // Trim a long arg from the FRONT so the meaningful tail (a filename) stays
38
+ // visible and the header never wraps to column 0.
39
+ const headerRoom = Math.max(12, columns - verb.length - 6);
40
+ const shownArg = arg && arg.length > headerRoom ? "…" + arg.slice(-(headerRoom - 1)) : arg;
41
+ // The branch content: rich detail lines if present, else the one-line summary.
42
+ const branchLines = detail ? detail.split("\n") : summary ? [summary] : [];
43
+ return (_jsxs(Box, { marginTop: tightTop ? 0 : 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: dotColor, dimColor: status === "running", children: DOT }) }), _jsx(Text, { bold: true, children: verb }), shownArg ? _jsxs(Text, { children: ["(", shownArg, ")"] }) : null, meta ? _jsxs(Text, { dimColor: true, children: [" ", meta] }) : null] }), status !== "running" && branchLines.length > 0 ? (detailKind === "shell" ? (_jsx(ShellLines, { lines: branchLines, columns: columns, errored: errored, headerHasCommand: !!arg && arg === shownArg })) : (_jsx(BranchLines, { lines: branchLines, columns: columns, errored: errored, diff: detailKind === "diff" }))) : null] }));
44
+ }
45
+ /** The indented `⎿` result block, one source line per row, diff-colored when the
46
+ * content is a real diff (`+ ` green, `- ` red; everything else dim).
47
+ *
48
+ * `diff` is passed by the caller from the result's own detailKind, NOT inferred from
49
+ * "does this row have a detail block". Inferring it painted every command whose output
50
+ * happened to start with `-` as a deletion — a `Get-ChildItem` listing came out half
51
+ * red, since PowerShell writes its column rule as `----` and its file rows as `-a----`. */
52
+ function BranchLines({ lines, columns, errored, diff, }) {
53
+ const content = Math.max(8, columns - BRANCH_INDENT - 1);
54
+ return (_jsx(Box, { flexDirection: "column", children: lines.map((line, i) => {
55
+ const style = errored ? { color: "red" } : diff ? diffStyle(line) : undefined;
56
+ const dim = !errored && style === undefined;
57
+ // Padded to the full content width so the tint is a continuous band rather than
58
+ // stopping wherever the code happens to end, which reads as a ragged smear.
59
+ const painted = style?.backgroundColor ? line.padEnd(content) : line;
60
+ return (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { dimColor: true, children: i === 0 ? ` ${BRANCH} ` : " " }), _jsx(Box, { width: content, children: _jsx(Text, { ...style, dimColor: dim, wrap: "truncate-end", children: painted }) })] }, i));
61
+ }) }));
62
+ }
63
+ /**
64
+ * A shell command's block: its output on a rail, then the outcome.
65
+ *
66
+ * ● Run(npm run build)
67
+ * │ > tsc && vite build
68
+ * ✓ Exit code 0
69
+ *
70
+ * The command itself lives in the HEADER, like every other row's subject. It used to
71
+ * sit on its own `$` row under a bare "Executed shell command" title, because as a
72
+ * header argument it was clipped to 48 characters and a real command line is longer
73
+ * than that more often than not — so the half that said what it did was the half that
74
+ * got cut. The clip is gone: the header is fitted to the real terminal width, and the
75
+ * `$` row comes back only when even that could not show the command whole.
76
+ *
77
+ * Output sits on a dim rail so it reads as quoted machine output rather than as
78
+ * something Mindweave said, and the outcome hangs off the rail because it is a verdict
79
+ * on the command, not more of its output. A command with NO output yet (one that was
80
+ * backgrounded) has no rail at all — it reports through the ordinary ⎿ branch, the way
81
+ * a write reports "whole file · 19 lines".
82
+ *
83
+ * The zones are told apart by the prefixes the tool wrote (`$ ` and `✓`/`✖`), the
84
+ * same convention the diff block uses for `+ `/`- `.
85
+ */
86
+ function ShellLines({ lines, columns, errored, headerHasCommand, }) {
87
+ const content = Math.max(8, columns - BRANCH_INDENT - 2);
88
+ // Only when the header had to trim it away. A command that fits is said once.
89
+ const shown = headerHasCommand ? lines.filter((l) => !l.startsWith("$ ")) : lines;
90
+ return (_jsx(Box, { flexDirection: "column", children: shown.map((line, i) => {
91
+ const command = line.startsWith("$ ");
92
+ const outcome = line.startsWith("✓") || line.startsWith("✖");
93
+ const railed = !command && !outcome;
94
+ return (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { dimColor: true, children: railed ? ` ${RAIL} ` : " " }), _jsx(Box, { width: content, children: command ? (
95
+ // The `$` gets its own colour so the command is findable at a glance in
96
+ // a block of output. It is the one line here the user WROTE, in effect,
97
+ // and it was previously distinguished only by being bold, which loses
98
+ // against a screenful of equally plain machine text.
99
+ _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: KIND_COLOR.run, children: "$ " }), _jsx(Text, { bold: true, children: line.slice(2) })] })) : (_jsx(Text, { color: outcome ? (line.startsWith("✓") ? "green" : ERROR_COLOR) : errored ? "red" : undefined, dimColor: railed && !errored, bold: outcome, wrap: "truncate-end", children: line })) })] }, i));
100
+ }) }));
101
+ }
102
+ /**
103
+ * How one diff row is painted.
104
+ *
105
+ * A tinted BACKGROUND across the row, not just coloured text. Foreground colour alone
106
+ * was technically correct and read as flat: a `+` and a `-` in slightly different inks,
107
+ * on a dark terminal, among a dozen other rows. The change a diff is reporting is the
108
+ * whole reason the row exists, and it should be findable without reading it.
109
+ *
110
+ * The tints are dark on purpose. They sit behind ordinary code text that still has to
111
+ * be legible, so they are a wash rather than a highlight, and the foreground stays the
112
+ * brighter of the two signals.
113
+ */
114
+ const ADDED_BG = "#0d2818";
115
+ const REMOVED_BG = "#2d1113";
116
+ function diffStyle(line) {
117
+ if (line.startsWith("+"))
118
+ return { color: "green", backgroundColor: ADDED_BG };
119
+ if (line.startsWith("-"))
120
+ return { color: "red", backgroundColor: REMOVED_BG };
121
+ return undefined;
122
+ }
123
+ //# sourceMappingURL=ToolLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolLine.js","sourceRoot":"","sources":["../../../src/cli/components/ToolLine.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * TrustGate.tsx — asked once, the first time Mindweave opens a folder.
4
+ *
5
+ * Choosing where to work is the widest permission there is: every other guard is scoped
6
+ * to the workspace, so the workspace itself has to be chosen on purpose. Opened at a
7
+ * drive root the workspace is the entire drive, and the outside-the-workspace prompt can
8
+ * never fire because nothing is outside it.
9
+ *
10
+ * Deliberately plain. It is the first thing a new user sees, it is a security question,
11
+ * and a security question dressed up is one people learn to press through. Same header
12
+ * and same footer style as the key setup screen so the two read as one flow.
13
+ */
14
+ import { Box, Text } from "ink";
15
+ import { useInput } from "ink";
16
+ import { useState } from "react";
17
+ import { FirstRunFrame } from "./FirstRunFrame.js";
18
+ const CHOICES = ["Yes, work in this folder", "No, quit"];
19
+ export function TrustGate({ cwd, rows, breadth, warning, persists, version, docsUrl, onTrust, onQuit, active = true }) {
20
+ const [sel, setSel] = useState(0);
21
+ useInput((input, key) => {
22
+ if (key.upArrow || key.downArrow)
23
+ setSel((s) => (s + 1) % CHOICES.length);
24
+ else if (key.return)
25
+ (sel === 0 ? onTrust : onQuit)();
26
+ else if (key.escape)
27
+ onQuit();
28
+ else if (input === "1")
29
+ onTrust();
30
+ else if (input === "2")
31
+ onQuit();
32
+ }, { isActive: active });
33
+ return (_jsxs(FirstRunFrame, { rows: rows, version: version, subtitle: "Work in this folder?", children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { bold: true, color: "cyan", children: cwd }) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { children: "Mindweave will be able to read, change and run files here." }), _jsx(Text, { dimColor: true, children: "Open it somewhere you trust \u2014 your own project, your team's, or open source you know. If you are not sure what is in this folder, look before you say yes." })] }), warning ? (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: warning }) })) : null, _jsx(Box, { marginTop: 1, flexDirection: "column", children: CHOICES.map((label, i) => (_jsx(Box, { children: _jsxs(Text, { color: i === sel ? "cyan" : undefined, bold: i === sel, children: [i === sel ? " › " : " ", `[${i + 1}] ${label}`] }) }, label))) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: persists
34
+ ? "Remembered for this folder — you won't be asked again."
35
+ : `Just for this session${breadth === "root" ? " (a whole drive is never remembered)" : " (your home directory is never remembered)"}.` }), _jsxs(Text, { dimColor: true, children: ["\u2191/\u2193 or 1-2 \u00B7 Enter to choose \u00B7 Esc to quit \u00B7 ", docsUrl] })] })] }));
36
+ }
37
+ //# sourceMappingURL=TrustGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrustGate.js","sourceRoot":"","sources":["../../../src/cli/components/TrustGate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { formatTokens, formatCost } from "../dynamo/pricing.js";
2
+ import { cachePct } from "../dynamo/spend.js";
3
+ /**
4
+ * Lines describing what this session has cost, most useful first.
5
+ *
6
+ * `estimated` is surfaced rather than buried: when no call reported a cache split, the
7
+ * split is inferred and the number is a floor, not a measurement. Presenting an inferred
8
+ * figure with the authority of a measured one is the defect that started this whole
9
+ * thread — see `TaskUsage.estimated`.
10
+ */
11
+ export function costLines(spend, model) {
12
+ if (!spend || spend.turns === 0) {
13
+ return ["Nothing spent yet this session."];
14
+ }
15
+ const approx = spend.estimated ? "~" : "";
16
+ const pct = cachePct(spend);
17
+ const lines = [
18
+ `**${formatCost(spend.costUsd)}** over ${spend.turns} turn${spend.turns === 1 ? "" : "s"} on \`${model}\``,
19
+ "",
20
+ `- Billed tokens: ${approx}${formatTokens(spend.billed)} (fresh input + output, each counted once)`,
21
+ `- Served from cache: ${formatTokens(spend.cacheHit)} (${pct}% of all input)`,
22
+ `- Fresh input: ${formatTokens(spend.cacheMiss)}`,
23
+ ];
24
+ // Only when the provider distinguishes it — a zero here would read as "no writes"
25
+ // when it usually means "this provider never told us".
26
+ if (spend.cacheWrite > 0) {
27
+ lines.push(`- ...of which written to cache: ${formatTokens(spend.cacheWrite)} (billed above fresh rate)`);
28
+ }
29
+ lines.push(`- Output: ${formatTokens(spend.output)}`);
30
+ if (spend.estimated) {
31
+ lines.push("", "> This provider does not report which input came from its cache, so the split is " +
32
+ "inferred and the cost is a FLOOR, not a measurement. Your provider's own billing " +
33
+ "page is authoritative.");
34
+ }
35
+ else {
36
+ lines.push("", "> Estimated from list prices. Your provider's billing page is authoritative.");
37
+ }
38
+ return lines;
39
+ }
40
+ //# sourceMappingURL=costView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costView.js","sourceRoot":"","sources":["../../src/cli/costView.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAA+B,EAAE,KAAa;IACtE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG;QACZ,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,IAAI;QAC1G,EAAE;QACF,oBAAoB,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C;QACpG,wBAAwB,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,iBAAiB;QAC9E,kBAAkB,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;KAClD,CAAC;IACF,kFAAkF;IAClF,uDAAuD;IACvD,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,mCAAmC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;IAC7G,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,mFAAmF;YACjF,mFAAmF;YACnF,wBAAwB,CAC3B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,8EAA8E,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * frameRate.ts — how often the UI is allowed to draw.
3
+ *
4
+ * One constant, in its own file, because it is the setting that decided the typing
5
+ * lag and it needs to be assertable from a test. Left inline at the `render()` call
6
+ * it could be lowered back to Ink's default in a refactor with nothing failing.
7
+ */
8
+ /**
9
+ * Frames per second Ink may render at.
10
+ *
11
+ * Ink throttles rendering and defaults to 30fps, i.e. it defers a render to the
12
+ * trailing edge of a ~34ms window. Typing continuously means every keystroke lands
13
+ * inside the previous one's window, so every character waits out that timer before it
14
+ * appears. Measured key-in to frame-out with the real component tree and an EMPTY
15
+ * transcript (`typingPerf.probe.test.tsx`):
16
+ *
17
+ * maxFps=30 -> ~38ms/key maxFps=60 -> ~23ms/key maxFps=120 -> ~12ms/key
18
+ *
19
+ * The floor is there with nothing on screen, which is why two earlier fixes aimed at
20
+ * per-frame COST — virtualizing the transcript, and cutting bytes 13x with the
21
+ * framebuffer — both measured well and changed nothing about how typing felt. Neither
22
+ * can move a clock.
23
+ *
24
+ * 120 is affordable only because of the framebuffer: raising the frame rate on stock
25
+ * Ink would mean ~4x the full-screen repaints, whereas against a per-cell diff a
26
+ * keystroke writes just the cells that changed. If the framebuffer ever goes, this
27
+ * must come down with it.
28
+ */
29
+ export const MAX_FPS = 120;
30
+ //# sourceMappingURL=frameRate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameRate.js","sourceRoot":"","sources":["../../src/cli/frameRate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * paint.ts — the diff. Two grids in, the smallest correct escape sequence out.
3
+ *
4
+ * This is the whole point of the framebuffer. Ink's own output is "erase the lines
5
+ * I drew last time, then write every one of them again" — the full screen, every
6
+ * frame, whether one character changed or none did. On a 200x50 terminal that is
7
+ * around 10,000 cells plus styling, tens of kilobytes, pushed through a blocking
8
+ * write on every keystroke and every scroll notch.
9
+ *
10
+ * What this produces instead is only the cells that actually differ, which for a
11
+ * keystroke is a handful and for a scroll is a few rows.
12
+ *
13
+ * ## Three optimisations, all of which matter
14
+ *
15
+ * 1. **Runs, not cells.** Changed cells next to each other are emitted as ONE
16
+ * cursor move followed by their characters. Positioning every cell separately
17
+ * would cost ~8 bytes of escape per 1 byte of content and would often be worse
18
+ * than the full rewrite it replaces.
19
+ *
20
+ * 2. **A carried pen.** Style is emitted only where it CHANGES, and is remembered
21
+ * across runs and across rows within a frame — a screen of one colour costs one
22
+ * SGR sequence for the whole frame, not one per run.
23
+ *
24
+ * 3. **Short jumps beat absolute moves.** Continuing a run that is only a couple of
25
+ * columns along is cheaper as a "cursor right" than as a full reposition, and
26
+ * cheaper still as spaces when the skipped cells are blank and unstyled.
27
+ *
28
+ * Same shape as ratatui's `Buffer::diff` and OpenTUI's Zig renderer; the run-length
29
+ * batching and the carried pen are exactly what those do to hold 60fps.
30
+ */
31
+ import { DEFAULT_COLOR, WIDE_CONTINUATION, attrParams, colorParams } from "./screen.js";
32
+ /**
33
+ * `true` when nothing about the pen is set — the state a bare `\x1b[0m` leaves.
34
+ * Used to skip emitting a reset that would change nothing.
35
+ */
36
+ function isClean(pen) {
37
+ return pen.fg === DEFAULT_COLOR && pen.bg === DEFAULT_COLOR && pen.attrs === 0;
38
+ }
39
+ /**
40
+ * The escape needed to move the pen from `from` to the cell's style.
41
+ *
42
+ * Attributes can be turned on individually but there is no reliable way to turn a
43
+ * single one off across terminals, so when any attribute is dropped the whole pen
44
+ * is reset and rebuilt. That is a few extra bytes on a rare transition, against
45
+ * correctness everywhere — a stale `bold` that never clears is the kind of artifact
46
+ * that survives for the rest of the session.
47
+ */
48
+ function penEscape(from, screen, i) {
49
+ const fg = screen.fg[i];
50
+ const bg = screen.bg[i];
51
+ const attrs = screen.attrs[i];
52
+ if (from.fg === fg && from.bg === bg && from.attrs === attrs)
53
+ return "";
54
+ const params = [];
55
+ const dropped = from.attrs & ~attrs;
56
+ if (dropped !== 0) {
57
+ // Rebuild from scratch.
58
+ params.push(0);
59
+ params.push(...attrParams(attrs));
60
+ if (fg !== DEFAULT_COLOR)
61
+ params.push(...colorParams(fg, true));
62
+ if (bg !== DEFAULT_COLOR)
63
+ params.push(...colorParams(bg, false));
64
+ }
65
+ else {
66
+ const added = attrs & ~from.attrs;
67
+ if (added !== 0)
68
+ params.push(...attrParams(added));
69
+ if (fg !== from.fg)
70
+ params.push(...colorParams(fg, true));
71
+ if (bg !== from.bg)
72
+ params.push(...colorParams(bg, false));
73
+ }
74
+ from.fg = fg;
75
+ from.bg = bg;
76
+ from.attrs = attrs;
77
+ if (params.length === 0)
78
+ return "";
79
+ return `\x1b[${params.join(";")}m`;
80
+ }
81
+ /** The character a cell prints. A wide character's second column prints nothing —
82
+ * the terminal already moved the cursor two columns for the first. */
83
+ function charOf(screen, i) {
84
+ const c = screen.chars[i];
85
+ if (c === WIDE_CONTINUATION)
86
+ return "";
87
+ return String.fromCodePoint(c === 0 ? 32 : c);
88
+ }
89
+ /**
90
+ * How many unchanged cells are re-printed to bridge two changed regions instead of
91
+ * breaking the run and repositioning.
92
+ *
93
+ * An absolute cursor move is 6-10 bytes, so re-printing up to that many identical
94
+ * characters is the cheaper of the two — and it means a row of small scattered edits
95
+ * (a status line ticking, a word changing) goes out as one run rather than a dozen.
96
+ *
97
+ * This is the ONLY cursor optimisation, deliberately. An earlier version also tracked
98
+ * the cursor's column so a nearby run could be reached with a relative `\x1b[{n}C`
99
+ * instead of an absolute move. A red-check killed it: introducing an off-by-one into
100
+ * that tracking broke nothing, because the branch is unreachable — any gap small
101
+ * enough to nudge across has already been bridged into the run above, and any gap too
102
+ * large to bridge is also too large to nudge. Untestable code that cannot run is worse
103
+ * than no code, so it is gone and every run positions absolutely.
104
+ */
105
+ const BRIDGE_GAP = 6;
106
+ /**
107
+ * Emit the escape sequence that turns `previous` into `next`.
108
+ *
109
+ * Both grids must be the same size. Returns `""` when nothing changed at all, which
110
+ * the caller uses to skip the write entirely — an idle app should put no bytes on
111
+ * the terminal, which is also what stops it waking the CPU.
112
+ *
113
+ * `originRow` is where row 0 of the grid sits on the real screen, 1-based, because
114
+ * terminal coordinates are 1-based.
115
+ */
116
+ export function paint(previous, next, originRow = 1) {
117
+ if (previous.width !== next.width || previous.height !== next.height) {
118
+ throw new Error(`paint(): grids differ in size (${previous.width}x${previous.height} vs ${next.width}x${next.height})`);
119
+ }
120
+ const out = [];
121
+ // The style currently in effect on the real terminal. Carried across runs AND
122
+ // across rows for the whole frame, so a uniformly coloured screen costs one SGR
123
+ // sequence rather than one per run.
124
+ const pen = { fg: DEFAULT_COLOR, bg: DEFAULT_COLOR, attrs: 0 };
125
+ for (let y = 0; y < next.height; y++) {
126
+ const rowStart = y * next.width;
127
+ let x = 0;
128
+ while (x < next.width) {
129
+ const i = rowStart + x;
130
+ if (next.sameAs(previous, i)) {
131
+ x++;
132
+ continue;
133
+ }
134
+ // A run of changed cells. Extended through UNCHANGED cells when only a few
135
+ // separate two changed ones: re-printing two identical characters is cheaper
136
+ // than the escape sequence needed to skip them.
137
+ let end = x;
138
+ let gap = 0;
139
+ for (let k = x; k < next.width; k++) {
140
+ if (!next.sameAs(previous, rowStart + k)) {
141
+ end = k;
142
+ gap = 0;
143
+ }
144
+ else if (++gap > BRIDGE_GAP) {
145
+ break;
146
+ }
147
+ }
148
+ out.push(`\x1b[${originRow + y};${x + 1}H`);
149
+ for (let k = x; k <= end; k++) {
150
+ const at = rowStart + k;
151
+ out.push(penEscape(pen, next, at));
152
+ out.push(charOf(next, at));
153
+ }
154
+ x = end + 1;
155
+ }
156
+ }
157
+ if (out.length === 0)
158
+ return "";
159
+ // Leave the terminal in a clean state. A frame that ends mid-style would tint
160
+ // whatever is written next — including anything the app prints outside Ink.
161
+ if (!isClean(pen))
162
+ out.push("\x1b[0m");
163
+ return out.join("");
164
+ }
165
+ //# sourceMappingURL=paint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../../src/cli/framebuffer/paint.ts"],"names":[],"mappings":"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"}