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,509 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * PromptInput — the chat input box, pinned to the bottom of the screen.
4
+ *
5
+ * Owns its buffer + cursor via useInput (Ink does the word-wrapping; the box
6
+ * grows downward). Beyond plain editing it provides the "real tool" niceties:
7
+ *
8
+ * - Input history: ↑/↓ walk previously sent messages (a draft is preserved).
9
+ * - Slash autocomplete: typing `/…` opens a menu of matching commands/skills;
10
+ * ↑/↓ select, Tab completes, Enter runs the highlighted one.
11
+ * - Multiline: Shift+Enter inserts a newline (where the terminal reports it);
12
+ * Enter sends.
13
+ *
14
+ * Pinned to the bottom of the alt-screen frame (see App) while the chat scrolls
15
+ * above it. Editing keys: ←/→, Ctrl+A/E (home/end), Ctrl+U (kill line),
16
+ * Backspace, and paste (inserted at the cursor).
17
+ */
18
+ import { useEffect, useReducer, useRef, useState } from "react";
19
+ import { Box, Text, useInput } from "ink";
20
+ import { inputView } from "../inputView.js";
21
+ import { feedPasteChunk, initPasteState } from "../pasteAssembler.js";
22
+ import { stripMouse } from "../mouse.js";
23
+ // A paste collapses to a `[Pasted text …]` chip (the full content is restored when
24
+ // the message is sent) once it's big enough to flood the box — either many lines OR
25
+ // a long chunk that happens to be few lines (e.g. a couple of wrapped paragraphs).
26
+ // A single terminal paste always arrives as one `input` chunk, so a chunk this large
27
+ // is unambiguously a paste, never typed keys.
28
+ const PASTE_MIN_LINES = 6;
29
+ const PASTE_MIN_CHARS = 400;
30
+ // Bracketed paste: we ask the terminal (via `\x1b[?2004h`) to wrap every paste in
31
+ // `\x1b[200~ … \x1b[201~` markers, so we know exactly where a paste starts and ends
32
+ // instead of guessing. The chunk-reassembly state machine lives in pasteAssembler.ts
33
+ // (pure + unit-tested); here we just drive it and handle the timing fallback.
34
+ const BRACKET_PASTE_ON = "\x1b[?2004h";
35
+ const BRACKET_PASTE_OFF = "\x1b[?2004l";
36
+ // Safety net if the closing marker is lost or split across a chunk boundary: flush a
37
+ // marker-started paste after this much silence. Chunks of one paste arrive microseconds
38
+ // apart, so this never fires mid-paste.
39
+ const PASTE_END_TIMEOUT_MS = 250;
40
+ // Fallback for terminals that DON'T support bracketed paste (no markers ever arrive):
41
+ // coalesce chunks by timing. An input event this large, or one with a newline, or a
42
+ // continuation of one already buffering, is a paste chunk — never a typed key.
43
+ const PASTE_COALESCE_MS = 30;
44
+ const PASTE_CHUNK_MIN = 40;
45
+ const INITIAL = { value: "", cursor: 0, histIdx: null, selected: 0, draft: "" };
46
+ function reduce(s, a) {
47
+ switch (a.t) {
48
+ case "insert":
49
+ // Typing leaves history-browsing and resets the suggestion highlight.
50
+ return {
51
+ ...s,
52
+ value: s.value.slice(0, s.cursor) + a.text + s.value.slice(s.cursor),
53
+ cursor: s.cursor + a.text.length,
54
+ histIdx: null,
55
+ selected: 0,
56
+ };
57
+ case "backspace":
58
+ if (s.cursor === 0)
59
+ return s;
60
+ return {
61
+ ...s,
62
+ value: s.value.slice(0, s.cursor - 1) + s.value.slice(s.cursor),
63
+ cursor: s.cursor - 1,
64
+ selected: 0,
65
+ };
66
+ case "left":
67
+ return { ...s, cursor: Math.max(0, s.cursor - 1) };
68
+ case "right":
69
+ return { ...s, cursor: Math.min(s.value.length, s.cursor + 1) };
70
+ case "home":
71
+ return { ...s, cursor: 0 };
72
+ case "end":
73
+ return { ...s, cursor: s.value.length };
74
+ case "killLine":
75
+ return { ...s, value: s.value.slice(s.cursor), cursor: 0 };
76
+ case "newline":
77
+ return {
78
+ ...s,
79
+ value: s.value.slice(0, s.cursor) + "\n" + s.value.slice(s.cursor),
80
+ cursor: s.cursor + 1,
81
+ };
82
+ case "splice": {
83
+ const value = s.value.slice(0, a.start) + a.text + s.value.slice(a.end);
84
+ return { ...s, value, cursor: a.start + a.text.length, selected: 0 };
85
+ }
86
+ case "selUp":
87
+ return { ...s, selected: Math.max(0, s.selected - 1) };
88
+ case "selDown":
89
+ return { ...s, selected: Math.min(a.max, s.selected + 1) };
90
+ case "histReplace":
91
+ return {
92
+ ...s,
93
+ value: a.value,
94
+ cursor: a.value.length,
95
+ histIdx: a.histIdx,
96
+ draft: a.draft ?? s.draft,
97
+ };
98
+ case "restore":
99
+ // Unlike histReplace this keeps NO history position and no draft: the text
100
+ // came from the queue, not from history, so ↑ afterwards should walk history
101
+ // from the newest again rather than resuming a walk the user never started.
102
+ return { ...s, value: a.value, cursor: Math.min(a.value.length, a.cursor), histIdx: null, selected: 0 };
103
+ case "reset":
104
+ return INITIAL;
105
+ }
106
+ }
107
+ /** A literal newline, kept out of the key handler so the source has no escapes there. */
108
+ const NEWLINE = String.fromCharCode(10);
109
+ const DEFAULT_MAX_SUGGESTIONS = 6;
110
+ /** Rows the text area may grow to before it scrolls instead. Enough for a real
111
+ * paragraph; small enough that the chat above it is never squeezed away. */
112
+ const DEFAULT_MAX_INPUT_ROWS = 8;
113
+ export function PromptInput({ onSubmit, disabled = false, placeholder = "", width, history = [], completions = [], pathComplete, onLargePaste, maxMenuRows = DEFAULT_MAX_SUGGESTIONS, onMenuChange, onQueuePop, maxInputRows = DEFAULT_MAX_INPUT_ROWS, overlay, opening = false, }) {
114
+ const [state, dispatch] = useReducer(reduce, INITIAL);
115
+ const { value, cursor, histIdx, selected, draft } = state;
116
+ // The two autocomplete sources. Command menu: a single `/token` (no space) at the
117
+ // start. Path menu: a `@token` ending at the cursor, resolved against the
118
+ // filesystem (async, in the effect below). Command takes priority.
119
+ const commandMode = value.startsWith("/") && !value.includes(" ");
120
+ const at = !commandMode && pathComplete ? atTokenAt(value, cursor) : null;
121
+ const [pathItems, setPathItems] = useState([]);
122
+ useEffect(() => {
123
+ if (!at || !pathComplete) {
124
+ setPathItems([]);
125
+ return;
126
+ }
127
+ let cancelled = false;
128
+ pathComplete(at.text.slice(1)).then((items) => {
129
+ if (!cancelled)
130
+ setPathItems(items);
131
+ });
132
+ return () => {
133
+ cancelled = true;
134
+ };
135
+ }, [at?.text, pathComplete]);
136
+ const menu = computeMenu();
137
+ const menuOpen = menu !== null;
138
+ const sel = Math.min(selected, Math.max(0, (menu?.items.length ?? 1) - 1));
139
+ // Tell the App the footer's height just changed.
140
+ //
141
+ // Opening the menu is state local to THIS component, so React re-renders only
142
+ // this subtree — App does not re-render, so App's own footer measurement never
143
+ // re-runs and it keeps sizing the chat against a menu-closed footer. The menu
144
+ // then overflows the frame and is clipped away entirely; sitting idle at the
145
+ // prompt, nothing else re-renders App, so it never corrects itself. The row
146
+ // count (not just open/closed) is the trigger, because filtering as you type
147
+ // changes the height too.
148
+ const menuRowCount = menu ? Math.min(menu.items.length, maxMenuRows) : 0;
149
+ useEffect(() => {
150
+ onMenuChange?.();
151
+ }, [menuRowCount, onMenuChange]);
152
+ function computeMenu() {
153
+ if (commandMode) {
154
+ const items = completions.filter((c) => c.name.toLowerCase().startsWith(value.toLowerCase()));
155
+ return items.length > 0 ? { mode: "command", items, start: 0 } : null;
156
+ }
157
+ if (at && pathItems.length > 0) {
158
+ return { mode: "path", items: pathItems.map((p) => ({ name: "@" + p, description: "" })), start: at.start };
159
+ }
160
+ return null;
161
+ }
162
+ // Apply the highlighted path completion: splice it over the `@token` (keep the
163
+ // menu open after a directory so you can keep drilling in).
164
+ function completePath() {
165
+ if (!menu || menu.mode !== "path")
166
+ return;
167
+ const chosen = menu.items[sel].name;
168
+ const text = chosen.endsWith("/") ? chosen : chosen + " ";
169
+ dispatch({ t: "splice", start: menu.start, end: cursor, text });
170
+ }
171
+ function submit(text) {
172
+ const trimmed = text.trim();
173
+ if (trimmed.length === 0)
174
+ return;
175
+ dispatch({ t: "reset" });
176
+ onSubmit(trimmed);
177
+ }
178
+ // Paste reassembly: a paste arrives as several `input` chunks. `paste` holds the
179
+ // cross-chunk state (see pasteAssembler.ts); the timer flushes the fallback path and
180
+ // guards against a lost end marker.
181
+ const paste = useRef(initPasteState());
182
+ const pasteTimer = useRef(null);
183
+ // Insert an assembled paste — as a `[Pasted text …]` chip when it's big enough to
184
+ // flood the box, otherwise inline.
185
+ function emitPaste(text) {
186
+ if (!text)
187
+ return;
188
+ const big = text.split("\n").length >= PASTE_MIN_LINES || text.length >= PASTE_MIN_CHARS;
189
+ dispatch({ t: "insert", text: onLargePaste && big ? onLargePaste(text) : text });
190
+ }
191
+ function flushPaste() {
192
+ pasteTimer.current = null;
193
+ // A split end-marker can leave a stray trailing ESC; drop it.
194
+ const buf = paste.current.buf.replace(/\x1b$/, "");
195
+ paste.current = initPasteState();
196
+ emitPaste(buf);
197
+ }
198
+ // Turn bracketed paste on so the terminal delimits pastes for us; restore it on exit.
199
+ useEffect(() => {
200
+ process.stdout.write(BRACKET_PASTE_ON);
201
+ return () => {
202
+ if (pasteTimer.current)
203
+ clearTimeout(pasteTimer.current);
204
+ process.stdout.write(BRACKET_PASTE_OFF);
205
+ };
206
+ }, []);
207
+ useInput((raw, key) => {
208
+ // Mouse reports arrive as ordinary stdin bytes once wheel reporting is on
209
+ // (see mouse.ts). Ink's key parser does not recognise them and hands them
210
+ // straight through as if typed, so scrolling filled the prompt with
211
+ // `[<64;25;26M`. Stripped FIRST — ahead of the paste assembler, which would
212
+ // otherwise buffer a fast flick and commit it as a pasted block.
213
+ const input = stripMouse(raw);
214
+ // A chunk that was nothing but mouse reports is not a keystroke. Guarded on
215
+ // `raw` being non-empty so genuine keys that carry no text (arrows, Enter)
216
+ // still reach the handlers below.
217
+ if (input === "" && raw !== "")
218
+ return;
219
+ // Bracketed paste (authoritative): from the `\x1b[200~` start marker to the
220
+ // `\x1b[201~` end marker, every chunk is literal pasted content — never Enter,
221
+ // arrows, or other keys — so we handle it here, before anything else, accumulating
222
+ // across chunks. The paste flushes as ONE unit (one chip) at the end marker; the
223
+ // timer only guards against a lost/split end marker.
224
+ const step = feedPasteChunk(paste.current, input);
225
+ if (step.kind !== "passthrough") {
226
+ if (pasteTimer.current)
227
+ clearTimeout(pasteTimer.current);
228
+ if (step.kind === "flush") {
229
+ pasteTimer.current = null;
230
+ paste.current = initPasteState();
231
+ emitPaste(step.text);
232
+ }
233
+ else {
234
+ paste.current = step.state;
235
+ pasteTimer.current = setTimeout(flushPaste, PASTE_END_TIMEOUT_MS);
236
+ }
237
+ return;
238
+ }
239
+ // Enter: Shift+Enter inserts a newline (terminals that report it); plain
240
+ // Enter sends — the highlighted suggestion when the menu is open, else the
241
+ // buffer.
242
+ if (key.return) {
243
+ if (key.shift || key.meta) {
244
+ dispatch({ t: "newline" });
245
+ return;
246
+ }
247
+ // In the path menu, Enter completes the path (you press Enter again to send);
248
+ // in the command menu it runs the highlighted command; otherwise it sends.
249
+ if (menu?.mode === "path") {
250
+ completePath();
251
+ return;
252
+ }
253
+ submit(menu ? menu.items[sel].name : value);
254
+ return;
255
+ }
256
+ // Tab completes the highlighted suggestion (a command, or a path mention).
257
+ // Shift-Tab is reserved for cycling the interaction mode (handled in App), so
258
+ // it must never complete here.
259
+ if (key.tab && !key.shift && menu) {
260
+ if (menu.mode === "path")
261
+ completePath();
262
+ else
263
+ dispatch({ t: "histReplace", value: menu.items[sel].name + " ", histIdx: null });
264
+ return;
265
+ }
266
+ // ↑/↓: navigate the menu when open, otherwise walk input history.
267
+ if (key.upArrow) {
268
+ if (menuOpen)
269
+ dispatch({ t: "selUp" });
270
+ else if (!popQueue())
271
+ historyPrev();
272
+ return;
273
+ }
274
+ if (key.downArrow) {
275
+ if (menuOpen)
276
+ dispatch({ t: "selDown", max: menu.items.length - 1 });
277
+ else
278
+ historyNext();
279
+ return;
280
+ }
281
+ if (key.backspace || key.delete) {
282
+ dispatch({ t: "backspace" });
283
+ return;
284
+ }
285
+ if (key.leftArrow) {
286
+ dispatch({ t: "left" });
287
+ return;
288
+ }
289
+ if (key.rightArrow) {
290
+ dispatch({ t: "right" });
291
+ return;
292
+ }
293
+ if (key.ctrl && input === "a") {
294
+ dispatch({ t: "home" });
295
+ return;
296
+ }
297
+ if (key.ctrl && input === "e") {
298
+ dispatch({ t: "end" });
299
+ return;
300
+ }
301
+ if (key.ctrl && input === "u") {
302
+ dispatch({ t: "killLine" });
303
+ return;
304
+ }
305
+ // Esc takes back whatever is queued, if anything is. When nothing is, it falls
306
+ // through untouched and stays what it has always been — the App's interrupt.
307
+ // Both handlers are live at once while Mindweave is working, and that is the
308
+ // behaviour we want there: Esc stops the turn, and popQueue() declines because
309
+ // App refuses to pop mid-turn (see its onQueuePop).
310
+ if (key.escape) {
311
+ popQueue();
312
+ return;
313
+ }
314
+ // Ignore control chords / keys we don't handle here.
315
+ if (key.ctrl || key.meta || key.tab) {
316
+ return;
317
+ }
318
+ // Printable text. On terminals WITHOUT bracketed paste (no markers ever arrive),
319
+ // we fall back to timing: a large chunk, a chunk with a newline, or a continuation
320
+ // of one already buffering is a paste — accumulate and flush once idle so the whole
321
+ // paste is one decision (one chip). A lone keypress inserts immediately.
322
+ if (input) {
323
+ const isPasteChunk = paste.current.buf.length > 0 || input.length >= PASTE_CHUNK_MIN || input.includes("\n");
324
+ if (isPasteChunk) {
325
+ paste.current.buf += input;
326
+ if (pasteTimer.current)
327
+ clearTimeout(pasteTimer.current);
328
+ pasteTimer.current = setTimeout(flushPaste, PASTE_COALESCE_MS);
329
+ }
330
+ else {
331
+ dispatch({ t: "insert", text: input });
332
+ }
333
+ }
334
+ /** Take the queue back into the box. False when there was nothing to take. */
335
+ function popQueue() {
336
+ if (!onQueuePop)
337
+ return false;
338
+ // Only from the FIRST line. In a multi-line draft ↑ means "move up a line",
339
+ // and stealing that would make the queue impossible to leave alone.
340
+ if (key.upArrow && value.slice(0, cursor).includes(NEWLINE))
341
+ return false;
342
+ const popped = onQueuePop(value, cursor, key.upArrow ? "up" : "escape");
343
+ if (!popped)
344
+ return false;
345
+ dispatch({ t: "restore", value: popped.text, cursor: popped.cursor });
346
+ return true;
347
+ }
348
+ function historyPrev() {
349
+ if (history.length === 0)
350
+ return;
351
+ if (histIdx === null) {
352
+ const i = history.length - 1;
353
+ dispatch({ t: "histReplace", value: history[i], histIdx: i, draft: value });
354
+ }
355
+ else if (histIdx > 0) {
356
+ dispatch({ t: "histReplace", value: history[histIdx - 1], histIdx: histIdx - 1 });
357
+ }
358
+ }
359
+ function historyNext() {
360
+ if (histIdx === null)
361
+ return;
362
+ const i = histIdx + 1;
363
+ if (i >= history.length) {
364
+ dispatch({ t: "histReplace", value: draft, histIdx: null });
365
+ }
366
+ else {
367
+ dispatch({ t: "histReplace", value: history[i], histIdx: i });
368
+ }
369
+ }
370
+ }, { isActive: !disabled && !overlay });
371
+ const fieldWidth = Math.max(10, width - 6);
372
+ // The menu box's baseline height: a border (2) around a header (1), `maxMenuRows` item
373
+ // rows, and the hint (1). Used as a MINIMUM so the command list and every picker (which
374
+ // pad to `maxMenuRows`) land at exactly this height and never resize as you filter or
375
+ // switch, while a richer surface in the same box (the key manager, an approval) may grow
376
+ // past it rather than being clipped.
377
+ const menuBoxRows = maxMenuRows + 4;
378
+ return (_jsxs(Box, { flexDirection: "column", width: width, flexShrink: 0, children: [_jsx(Box, { flexDirection: "column", width: width, flexShrink: 0, borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsx(Field, { value: value, cursor: cursor, active: !disabled && !overlay, placeholder: overlay ? "" : placeholder, width: fieldWidth, maxRows: maxInputRows }) }), overlay || menu || opening ? (_jsx(Box, { flexDirection: "column", width: width, height: menuBoxRows, flexShrink: 0, borderStyle: "single", borderColor: "gray", paddingX: 1, marginTop: 1, overflow: "hidden", children: overlay ? (overlay) : menu ? (_jsx(SuggestionMenu, { matches: menu.items, selected: sel, width: width, mode: menu.mode, maxRows: maxMenuRows })) : (
379
+ // `opening`: a command that opens a surface here was submitted, and the surface
380
+ // is a moment away. The frame is held open with an empty body so the transition
381
+ // from the command list to what it opens is a change of CONTENT inside one box
382
+ // that never leaves the screen.
383
+ _jsx(Box, { flexDirection: "column", height: menuBoxRows - 2 })) })) : null] }));
384
+ }
385
+ /** The `@token` ending at the cursor (back to the nearest whitespace), or null.
386
+ * Used to drive the file-path picker while typing a `@mention`. */
387
+ // No real @mention (a path) is anywhere near this long. Without a cap, a run of
388
+ // the same non-whitespace character (fast typing, a held key) has no whitespace
389
+ // to stop the scan at, so it walks back to index 0 on EVERY keystroke — O(cursor)
390
+ // work repeated once per character typed, which is what made fast typing laggy
391
+ // even well under the length where Field's own render-windowing kicks in.
392
+ const MAX_TOKEN_SCAN = 300;
393
+ function atTokenAt(value, cursor) {
394
+ const floor = Math.max(0, cursor - MAX_TOKEN_SCAN);
395
+ let i = cursor;
396
+ while (i > floor && !/\s/.test(value[i - 1]))
397
+ i--;
398
+ if (i === floor && floor > 0 && !/\s/.test(value[floor - 1] ?? " "))
399
+ return null; // ran into the cap, not a real boundary
400
+ const text = value.slice(i, cursor);
401
+ return text.startsWith("@") ? { text, start: i } : null;
402
+ }
403
+ /**
404
+ * The dropdown of matching commands/skills shown below the input. It SCROLLS: a
405
+ * sliding window keeps the highlighted row in view as ↑/↓ move past the visible
406
+ * count, so a long list (every command) is fully reachable, not capped at the first
407
+ * few. The window is always the same number of rows, and no "N more" markers are
408
+ * shown, so the box stays one fixed height from the first item to the last: a marker
409
+ * that appeared only at the ends made the box taller mid-list and shifted the whole
410
+ * transcript above it by a row when the selection crossed into or out of an end.
411
+ *
412
+ * Bordered like the input box itself, not a bare list floating under it — same
413
+ * treatment, same reason: it's the other place the user is choosing something,
414
+ * not just reading a log.
415
+ */
416
+ function SuggestionMenu({ matches, selected, width, mode, maxRows, }) {
417
+ // Window the list so `selected` is always visible (same scheme as Picker).
418
+ const start = Math.min(Math.max(0, selected - (maxRows - 1)), Math.max(0, matches.length - maxRows));
419
+ const shown = matches.slice(start, start + maxRows);
420
+ const nameWidth = Math.min(18, Math.max(...shown.map((m) => m.name.length), 1));
421
+ const title = mode === "command" ? "Commands" : "Files";
422
+ // The prefix ("› " / " ") + the padded name, so the description column knows
423
+ // exactly what's left. Without this Box the description had no width of its
424
+ // own to truncate against — Yoga let a long one push past the row and wrap,
425
+ // splitting a command's NAME onto its own line, one row later than where it
426
+ // belonged. Confirmed with a bare Ink render before this fix went in.
427
+ //
428
+ // Widths subtract the enclosing box's chrome — border (2) + paddingX (2) = 4 — plus
429
+ // the 2-col prefix, so a truncated description ends INSIDE the border. Without the
430
+ // full subtraction a long line filled the row past the content area and wrapped,
431
+ // leaving a blank continuation row between items.
432
+ const rowWidth = width - 4;
433
+ const descWidth = Math.max(4, rowWidth - 2 - nameWidth);
434
+ // The parenthetical is the only place that says you can keep TYPING to narrow the
435
+ // list. Without it the arrows look like the only way through, and a long catalog
436
+ // reads as something to scroll rather than something to filter.
437
+ const header = (_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { bold: true, children: title }), _jsx(Text, { dimColor: true, children: " (type to filter, or use ↑/↓)" })] }));
438
+ const hint = mode === "command" ? "Tab completes · Esc dismisses" : "↑/↓ to select · Enter/Tab to complete · Esc dismisses";
439
+ // Blank rows padding the list up to `maxRows`, so the box is the SAME height whether it
440
+ // shows two matches or twelve. Fixed dimensions: the menu box never resizes as you
441
+ // filter down or switch to a shorter list — the surplus is empty space, not a smaller box.
442
+ const pad = Math.max(0, maxRows - shown.length);
443
+ // Content only — the surrounding box is the menu box in PromptInput. flexShrink:0 on
444
+ // every row is what makes App.tsx's maxRows cap reliable: without it Yoga compresses an
445
+ // overfull menu instead of respecting the cap computed so it wouldn't need to (confirmed
446
+ // with a bare Ink render, same as the chat viewport's rows — see App.tsx).
447
+ return (_jsxs(_Fragment, { children: [header, shown.map((m, i) => {
448
+ const active = start + i === selected;
449
+ return (_jsxs(Box, { width: rowWidth, flexShrink: 0, children: [_jsxs(Text, { color: active ? "cyan" : undefined, bold: active, children: [active ? "› " : " ", m.name.padEnd(nameWidth)] }), _jsx(Box, { width: descWidth, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: " " + m.description }) })] }, m.name));
450
+ }), Array.from({ length: pad }).map((_, i) => (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { children: " " }) }, `pad${i}`))), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: hint }) })] }));
451
+ }
452
+ /** The text area: the buffer word-wrapped, with a block cursor, or a placeholder. */
453
+ /**
454
+ * The text area: the buffer wrapped into rows with a block cursor, capped in height.
455
+ *
456
+ * Row-by-row rather than one `<Text wrap="wrap">`, because the box has to know how tall
457
+ * it is. Left to wrap itself it grew without limit, and since it shares a fixed frame
458
+ * with the chat and the tip line, the rows it took came off the bottom of the screen —
459
+ * the tip vanished and the box looked cut in half. The wrapping and the cursor maths
460
+ * live in inputView.ts, where they are unit-tested.
461
+ */
462
+ /**
463
+ * How long each half of the blink lasts.
464
+ *
465
+ * 530ms is the rate terminals and editors have converged on. It is slow enough to read
466
+ * as a pulse rather than a flicker, and fast enough that the caret is never missing long
467
+ * enough to look lost.
468
+ */
469
+ const BLINK_MS = 530;
470
+ /**
471
+ * The text caret: a thin bar that blinks, rather than a solid block that sits still.
472
+ *
473
+ * The block was drawn by inverting the cell, which is the cheapest possible caret and
474
+ * reads as a frozen artefact — a filled square parked in the box whether the tool is
475
+ * waiting for you, thinking, or doing nothing at all. A bar that blinks is the one piece
476
+ * of motion that says an input is LIVE, and it is what makes a terminal prompt feel like
477
+ * talking to something rather than typing into a field.
478
+ *
479
+ * The blink state lives HERE, not in Field or PromptInput. It ticks twice a second
480
+ * forever, and anywhere higher up that would re-render the input's whole subtree — the
481
+ * wrapped rows, the suggestion menu — twice a second for one cell.
482
+ *
483
+ * `under` is the character the caret sits on. A terminal grid has no room between cells,
484
+ * so the caret has to occupy one: it shows the bar on the on-beat and gives the cell back
485
+ * on the off-beat, which keeps a character under mid-line editing readable. At the end of
486
+ * the text, where the caret spends nearly all its time, there is nothing under it and it
487
+ * is simply a blinking bar.
488
+ *
489
+ * `resetKey` restarts the cycle on the on-beat whenever it changes. Without it, typing
490
+ * during an off-beat leaves the caret invisible at the exact moment the user is looking
491
+ * for it, which reads as dropped input.
492
+ */
493
+ function Caret({ under, resetKey }) {
494
+ const [on, setOn] = useState(true);
495
+ useEffect(() => {
496
+ setOn(true);
497
+ const id = setInterval(() => setOn((v) => !v), BLINK_MS);
498
+ return () => clearInterval(id);
499
+ }, [resetKey]);
500
+ return on ? _jsx(Text, { color: "cyan", children: "│" }) : _jsx(Text, { children: under || " " });
501
+ }
502
+ function Field({ value, cursor, active, placeholder, width, maxRows, }) {
503
+ if (value.length === 0) {
504
+ return (_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { bold: true, color: "cyan", children: "> " }), _jsx(Box, { width: width, overflow: "hidden", children: _jsxs(Text, { wrap: "truncate-end", children: [active ? _jsx(Caret, { under: "", resetKey: "placeholder" }) : null, placeholder ? _jsx(Text, { dimColor: true, children: placeholder }) : null] }) })] }));
505
+ }
506
+ const view = inputView(value, cursor, width, maxRows);
507
+ return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [view.hiddenAbove > 0 ? (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: ` ↑ ${view.hiddenAbove} more line${view.hiddenAbove === 1 ? "" : "s"}` }) })) : null, view.rows.map((row, i) => (_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { bold: true, color: "cyan", children: i === 0 && view.hiddenAbove === 0 ? "> " : " " }), _jsx(Box, { width: width, overflow: "hidden", children: _jsx(Text, { wrap: "truncate-end", children: active && i === view.cursorRow ? (_jsxs(_Fragment, { children: [row.text.slice(0, view.cursorCol), _jsx(Caret, { under: row.text.slice(view.cursorCol, view.cursorCol + 1), resetKey: `${cursor}:${value.length}` }), row.text.slice(view.cursorCol + 1)] })) : (row.text) }) })] }, i))), view.hiddenBelow > 0 ? (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: ` ↓ ${view.hiddenBelow} more line${view.hiddenBelow === 1 ? "" : "s"}` }) })) : null] }));
508
+ }
509
+ //# sourceMappingURL=PromptInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptInput.js","sourceRoot":"","sources":["../../../src/cli/components/PromptInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SubagentView — delegated work, as a distinct NESTED block.
4
+ *
5
+ * ONE worker keeps its full rail, because there is room to watch it:
6
+ *
7
+ * ◆ Subagent · read-only find every authFetch call site
8
+ * │ Searching authFetch
9
+ * │ Read login.ts
10
+ * ⎿ 3 steps · read-only ← collapses here once it reports back
11
+ *
12
+ * SEVERAL at once become a topology instead, because read-only workers fan out in
13
+ * parallel and their rails, side by side, are a stripe nobody can follow:
14
+ *
15
+ * ◆ Subagents · 2 delegated
16
+ * ├── #1 · read-only find every authFetch call site
17
+ * │ ⎿ 3 steps · read-only
18
+ * └── #2 draft unit tests for runCommand.ts
19
+ * ⎿ working · 4 steps
20
+ *
21
+ * The trade is deliberate: with one worker you can afford to watch each call; with
22
+ * several you need the SHAPE of the delegation — who is doing what, and how far along
23
+ * — and the individual calls become noise. What is shown is only what a worker
24
+ * actually reports (its task, whether it may write, its progress). The reference
25
+ * design also labels each with a model and an "isolated 8k window"; a sub-agent
26
+ * carries neither, so inventing them would be decoration that reads as fact.
27
+ *
28
+ * A violet ◆ marker sets the whole family apart from the blue tool rows — these are
29
+ * separate minds working inside the transcript, not more tools. A child's prose is
30
+ * never shown; only its final distilled report crosses back, as the spawn's result.
31
+ */
32
+ import { Box, Text } from "ink";
33
+ import { KIND_COLOR, ERROR_COLOR } from "../toolDisplay.js";
34
+ import { collapseAdjacent } from "../toolItems.js";
35
+ const DIAMOND = "◆";
36
+ const BRANCH = "⎿";
37
+ const RAIL = "│";
38
+ const TEE = "├──";
39
+ const ELBOW = "└──";
40
+ // The rail/branch occupy 3 columns; item text hangs beside them, aligned under the
41
+ // header content and never spilling left into the marker gutter.
42
+ const RAIL_INDENT = 3;
43
+ const AGENT_COLOR = KIND_COLOR.agent;
44
+ export function SubagentView({ agents, done, columns, tightTop, }) {
45
+ if (agents.length === 0)
46
+ return null;
47
+ const anyError = agents.some((a) => a.status === "error");
48
+ const dotColor = anyError ? ERROR_COLOR : AGENT_COLOR;
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, dimColor: !done, children: DIAMOND }) }), agents.length === 1 ? (_jsx(SoloHeader, { agent: agents[0], columns: columns, color: dotColor })) : (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, color: dotColor, children: "Subagents" }), _jsx(Text, { dimColor: true, children: ` · ${agents.length} delegated` })] }))] }), agents.length === 1 ? (_jsx(SoloBody, { agent: agents[0], columns: columns, done: done })) : (_jsx(Topology, { agents: agents, columns: columns }))] }));
50
+ }
51
+ /** One worker's header: its identity and the task it was given. */
52
+ function SoloHeader({ agent, columns, color }) {
53
+ const taskLabel = clip(agent.task, Math.max(16, columns - 22));
54
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, color: color, children: "Subagent" }), agent.readOnly ? _jsx(Text, { dimColor: true, children: " \u00B7 read-only" }) : null, taskLabel ? _jsxs(Text, { dimColor: true, children: [" ", taskLabel] }) : null] }));
55
+ }
56
+ /** One worker's live rail: every call it makes, then its closing line. */
57
+ function SoloBody({ agent, columns, done }) {
58
+ const content = Math.max(8, columns - RAIL_INDENT - 1);
59
+ const errored = agent.status === "error";
60
+ return (_jsxs(Box, { flexDirection: "column", children: [collapseAdjacent(agent.items).map((row) => (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { color: AGENT_COLOR, dimColor: true, children: ` ${RAIL} ` }), _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))), done && agent.summary ? (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { dimColor: true, children: ` ${BRANCH} ` }), _jsx(Box, { width: content, children: _jsx(Text, { color: errored ? "red" : undefined, dimColor: !errored, wrap: "truncate-end", children: agent.summary }) })] })) : null] }));
61
+ }
62
+ /** Several workers as a tree: one branch each, task on the branch, progress under it. */
63
+ function Topology({ agents, columns }) {
64
+ return (_jsx(Box, { flexDirection: "column", children: agents.map((agent, i) => {
65
+ const last = i === agents.length - 1;
66
+ const errored = agent.status === "error";
67
+ // A worker still going is described by what it has DONE so far, since its
68
+ // closing summary does not exist yet — otherwise a running branch says nothing
69
+ // and reads as stalled.
70
+ const steps = agent.items.length;
71
+ const progress = agent.summary
72
+ ? agent.summary
73
+ : `working${steps > 0 ? ` · ${steps} step${steps === 1 ? "" : "s"}` : ""}`;
74
+ const label = `#${i + 1}${agent.readOnly ? " · read-only" : ""}`;
75
+ const taskWidth = Math.max(8, columns - 8 - label.length);
76
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { color: AGENT_COLOR, dimColor: true, children: ` ${last ? ELBOW : TEE} ` }), _jsx(Text, { bold: true, color: errored ? ERROR_COLOR : AGENT_COLOR, children: label }), _jsx(Box, { width: taskWidth, children: _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: [" ", clip(agent.task, taskWidth)] }) })] }), _jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { color: AGENT_COLOR, dimColor: true, children: ` ${last ? " " : RAIL} ${BRANCH} ` }), _jsx(Box, { width: Math.max(8, columns - 12), children: _jsx(Text, { color: errored ? "red" : undefined, dimColor: !errored, wrap: "truncate-end", children: progress }) })] })] }, agent.agentId));
77
+ }) }));
78
+ }
79
+ /** Flatten and clip a task to one short line for a header. */
80
+ function clip(s, max) {
81
+ const flat = s.replace(/\s+/g, " ").trim();
82
+ if (max <= 1)
83
+ return "";
84
+ return flat.length <= max ? flat : flat.slice(0, max - 1) + "…";
85
+ }
86
+ //# sourceMappingURL=SubagentView.js.map