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,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * ApprovalBox — the bordered prompt for a decision the agent cannot make alone.
4
+ *
5
+ * ┌──────────────────────────────────────────────┐
6
+ * │ Start on this? │
7
+ * │ │
8
+ * │ › [1] Approve — Lightning (just do it) │
9
+ * │ [2] Approve — Sentinel (ask each action) │
10
+ * │ [3] Reject │
11
+ * │ │
12
+ * │ ↑/↓ or 1-3 · Enter to choose · Esc to cancel │
13
+ * └──────────────────────────────────────────────┘
14
+ *
15
+ * Separate from `Picker` on purpose. A picker is a LIST you scroll — sessions, models,
16
+ * shells — and it is fine for it to look like one. This is a QUESTION with two to four
17
+ * answers, it arrives unbidden in the middle of the user's work, and the answer commits
18
+ * them to something (running a command, starting a plan). It gets a border so it reads
19
+ * as a stop rather than as more output, and blank lines above and below the choices so
20
+ * the thing being agreed to does not blur into the thing agreeing to it.
21
+ *
22
+ * Number keys are accepted as well as arrows, because this prompt is a decision the
23
+ * user wants over with, not a list to browse. They are numbers rather than per-answer
24
+ * letters ([y]/[a]/[n]) so the accelerator can never disagree with the wording — the
25
+ * answers are supplied by the caller and change from prompt to prompt.
26
+ *
27
+ * HEIGHT IS BOUNDED, and that is not cosmetic. This draws in the footer, and anything
28
+ * there that grows past the terminal's height makes Ink abandon its erase-and-redraw:
29
+ * the screen tears, the input box is pushed off, and the app looks frozen with no way
30
+ * to answer. That is a bug this project has already shipped once — see clipRows.
31
+ */
32
+ import { useState } from "react";
33
+ import { Box, Text, useInput } from "ink";
34
+ import { clipRows } from "../wrap.js";
35
+ /** Rows the question may occupy before it is cut (wrapping included). */
36
+ const MAX_QUESTION_ROWS = 4;
37
+ /** Answers shown. More than this and the caller is asking the wrong question. */
38
+ const MAX_CHOICES = 6;
39
+ export function ApprovalBox({ question, options, onSelect, onCancel, width, active = true, freeText, onSubmitText, maxRows = MAX_QUESTION_ROWS + MAX_CHOICES, }) {
40
+ const shown = options.slice(0, MAX_CHOICES);
41
+ // The typed row sits at the end of the same list, so `sel === shown.length` means it.
42
+ const rows = freeText ? shown.length + 1 : shown.length;
43
+ const [sel, setSel] = useState(0);
44
+ const [typed, setTyped] = useState("");
45
+ const onText = freeText !== undefined && sel === shown.length;
46
+ useInput((input, key) => {
47
+ // Arrows always move, even while typing: it is the only way back out of the
48
+ // field, and a text answer nobody can escape from would be a trap.
49
+ if (key.upArrow)
50
+ setSel((s) => (s - 1 + rows) % rows);
51
+ else if (key.downArrow)
52
+ setSel((s) => (s + 1) % rows);
53
+ else if (key.escape)
54
+ onCancel();
55
+ else if (onText) {
56
+ // Text mode. Enter submits what was typed; an empty field is not an answer,
57
+ // so it does nothing rather than sending "".
58
+ if (key.return) {
59
+ const text = typed.trim();
60
+ if (text)
61
+ onSubmitText?.(text);
62
+ }
63
+ else if (key.backspace || key.delete)
64
+ setTyped((t) => t.slice(0, -1));
65
+ // Ink reports paste and ordinary keys the same way. Control bytes are dropped
66
+ // so a stray escape sequence cannot end up inside the answer.
67
+ else if (input)
68
+ setTyped((t) => t + input.replace(/[\u0000-\u001f]/g, ""));
69
+ }
70
+ else if (key.return)
71
+ onSelect(sel);
72
+ else {
73
+ // A number picks AND commits in one keystroke. Selecting without confirming
74
+ // would make the fast path silently need a second key.
75
+ const n = Number.parseInt(input, 10);
76
+ if (Number.isInteger(n) && n >= 1 && n <= shown.length)
77
+ onSelect(n - 1);
78
+ }
79
+ }, { isActive: active && rows > 0 });
80
+ // Inside the border: two frame columns and one padding column each side.
81
+ const inner = Math.max(12, width - 4);
82
+ // The box holds maxRows+2 content rows; the answers (and freeText row), one blank above
83
+ // and below, and the hint take `rows + 3`, so the question gets whatever is left — always
84
+ // at least one line, never more than its own cap. The answers are never hidden.
85
+ const qMax = Math.max(1, Math.min(MAX_QUESTION_ROWS, maxRows - 1 - rows));
86
+ const questionRows = clipRows(question, inner, qMax);
87
+ // Content only — the border is the ONE shared menu box in PromptInput (the same box the
88
+ // `/` command menu, the pickers and the key manager use), so an approval reads as the
89
+ // same surface. It still reads as a stop because that box is bordered and the input above
90
+ // goes inert while it is open. flexShrink:0 on every row for the same reason the command
91
+ // palette has it: without it Yoga compresses an overfull box instead of leaving it at its
92
+ // real height, and the height is what the footer measurement depends on.
93
+ return (_jsxs(_Fragment, { children: [questionRows.map((line, i) => (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { bold: true, wrap: "truncate-end", children: line }) }, `q${i}`))), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { children: " " }) }), shown.map((label, i) => {
94
+ const on = i === sel;
95
+ return (_jsxs(Box, { width: inner, flexShrink: 0, children: [_jsxs(Text, { color: on ? "cyan" : undefined, bold: on, children: [on ? " › " : " ", `[${i + 1}] `] }), _jsx(Box, { width: Math.max(4, inner - 7), children: _jsx(Text, { color: on ? "cyan" : undefined, bold: on, wrap: "truncate-end", children: label }) })] }, i));
96
+ }), freeText ? (_jsxs(Box, { width: inner, flexShrink: 0, children: [_jsxs(Text, { color: onText ? "cyan" : undefined, bold: onText, children: [onText ? " › " : " ", `[${shown.length + 1}] `] }), _jsx(Box, { width: Math.max(4, inner - 7), children: _jsx(Text, { color: onText ? "cyan" : undefined, bold: onText, wrap: "truncate-end", children: onText ? `${freeText.label}: ${typed}█` : freeText.label }) })] })) : null, _jsx(Box, { flexShrink: 0, children: _jsx(Text, { children: " " }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: onText
97
+ ? `type your answer · Enter to send · ↑/↓ to go back · Esc to cancel`
98
+ : `↑/↓ or 1-${shown.length} · Enter to choose · Esc to cancel` }) })] }));
99
+ }
100
+ //# sourceMappingURL=ApprovalBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApprovalBox.js","sourceRoot":"","sources":["../../../src/cli/components/ApprovalBox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * BlockView — render one transcript block, the same whether committed (in
4
+ * <Static> scrollback) or live in the tail. Gutter-aligned: the
5
+ * first row of every block is a single marker in a 2-col gutter, the content
6
+ * breathing beside it and wrapped lines hanging under the content.
7
+ *
8
+ * Multi-line text is wrapped BY US (wrap.ts), not left to Ink's own
9
+ * `wrap="wrap"` — that has a real, reproduced bug where some continuation
10
+ * lines come out indented by a stray leading space and others on the exact
11
+ * same text don't (see wrap.ts's header comment for the proof). Wrapping
12
+ * ourselves and rendering one <Text> per finished line leaves nothing for
13
+ * Ink's wrapper to be inconsistent about.
14
+ */
15
+ import { memo } from "react";
16
+ import { Box, Text } from "ink";
17
+ import { renderMarkdown } from "../markdown.js";
18
+ import { wrapAnsi } from "../wrap.js";
19
+ import { KIND_COLOR } from "../toolDisplay.js";
20
+ import { compactionLines } from "../compaction.js";
21
+ import { ToolLine } from "./ToolLine.js";
22
+ import { ToolGroup } from "./ToolGroup.js";
23
+ import { SubagentView } from "./SubagentView.js";
24
+ /**
25
+ * Text pre-wrapped to `width`, one <Text> row per line — see the file header.
26
+ *
27
+ * A blank line is rendered as a single space, not as "". Ink's `measureText`
28
+ * (`ink/build/measure-text.js`) returns `height: 0` for an empty string, so an empty
29
+ * <Text> occupies no row at all and every blank line in the markdown disappears —
30
+ * which is what turned structured answers into one undifferentiated wall. The
31
+ * separators were being produced correctly by renderMarkdown and thrown away here.
32
+ * Probed: rows ["A","","B"] render as ["A","B"] with "", as ["A","","B"] with " ".
33
+ */
34
+ function WrappedText({ text, width, color }) {
35
+ return (_jsx(Box, { width: width, flexDirection: "column", children: wrapAnsi(text, width).map((line, i) => (_jsx(Text, { color: color, wrap: "truncate-end", children: line === "" ? " " : line }, i))) }));
36
+ }
37
+ function BlockViewInner({ block, columns, tightTop }) {
38
+ const textWidth = Math.max(8, columns - 4);
39
+ switch (block.kind) {
40
+ case "user":
41
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: "cyan", children: ">" }) }), _jsx(WrappedText, { text: block.text, width: textWidth, color: "cyan" })] }));
42
+ case "assistant": {
43
+ if (!block.text)
44
+ return null;
45
+ // Prose runs to the same width as everything else on screen.
46
+ //
47
+ // It used to be capped at 88 columns on a typographic argument: past roughly
48
+ // that, the eye starts losing its place on the return sweep. The argument is
49
+ // real for a page of body text and wrong for this. A terminal is a pane the
50
+ // reader sized deliberately, and the answer sat in a narrow column with a third
51
+ // of the window empty beside it, which reads as broken rather than considered.
52
+ // Widening the window should give you more room, not more margin.
53
+ const proseWidth = textWidth;
54
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { children: "●" }) }), _jsx(WrappedText, { text: renderMarkdown(block.text, proseWidth), width: proseWidth })] }));
55
+ }
56
+ case "tool":
57
+ return (_jsx(ToolLine, { name: block.name, arg: block.arg, status: block.status, action: block.action, summary: block.summary, detail: block.detail, detailKind: block.detailKind, meta: block.meta, columns: columns, live: block.live, tightTop: tightTop }));
58
+ case "tools":
59
+ return _jsx(ToolGroup, { items: block.items, live: block.live, columns: columns, tightTop: tightTop });
60
+ case "subagent":
61
+ return (_jsx(SubagentView, { agents: block.agents, done: block.done, columns: columns, tightTop: tightTop }));
62
+ case "error":
63
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: "red", children: "●" }) }), _jsx(WrappedText, { text: block.text, width: textWidth, color: "red" })] }));
64
+ case "completion":
65
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { dimColor: true, children: "✻" }) }), _jsx(Text, { dimColor: true, children: block.text })] }));
66
+ case "note": {
67
+ const noteLines = wrapAnsi(block.text, Math.max(4, columns - 2));
68
+ return (_jsx(Box, { width: columns, flexDirection: "column", children: noteLines.map((line, i) => (_jsxs(Text, { dimColor: true, children: [i === 0 ? "· " : " ", line] }, i))) }));
69
+ }
70
+ case "notice": {
71
+ // A gate, not a remark. Amber marker and a rail, so "you are about to run this"
72
+ // cannot be mistaken for the assistant's own ● prose and skimmed past. Lines are
73
+ // rendered verbatim — no markdown — because they are literal commands and paths
74
+ // where a stray backtick or underscore must not be reinterpreted.
75
+ const railWidth = Math.max(8, columns - 4);
76
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: KIND_COLOR.governor, children: "●" }) }), _jsx(Text, { bold: true, children: block.title })] }), block.body.split("\n").flatMap((line, i) => wrapAnsi(line, railWidth).map((row, j) => (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { color: KIND_COLOR.governor, dimColor: true, children: " │ " }), _jsx(Box, { width: railWidth, children: _jsx(Text, { wrap: "truncate-end", children: row }) })] }, `${i}-${j}`))))] }));
77
+ }
78
+ case "compaction": {
79
+ // The bars are pre-composed as plain rows (compaction.ts) so the layout is
80
+ // testable without a terminal. Each row is printed verbatim and truncated, never
81
+ // wrapped: half a progress bar on the next line reads as two broken bars.
82
+ const rows = compactionLines(block.report, columns - 2);
83
+ return (_jsx(Box, { marginTop: 1, marginBottom: 1, flexDirection: "column", width: columns, children: rows.map((line, i) => (_jsxs(Text, { dimColor: i !== 1, wrap: "truncate-end", children: [" ", line] }, i))) }));
84
+ }
85
+ case "context":
86
+ // Context trimming (compaction) — set off from ordinary activity with its own
87
+ // faint marker and italics, so it reads as housekeeping, not something Mindweave did.
88
+ return (_jsx(Box, { marginTop: 1, marginBottom: 1, width: columns, children: _jsxs(Text, { dimColor: true, italic: true, wrap: "truncate-end", children: ["⋯ ", block.text] }) }));
89
+ }
90
+ }
91
+ /**
92
+ * MEMOIZED, and this is the single most load-bearing line in the UI's performance.
93
+ *
94
+ * Ink re-renders the WHOLE component tree on every React state change — there is no
95
+ * partial update, and after the commit it erases the drawn lines and rewrites them.
96
+ * Every keystroke is a state change (the prompt's reducer), and so is every wheel
97
+ * tick (`scrollUp`). Without this wrapper each of those re-ran `renderMarkdown` and
98
+ * `wrapAnsi` from scratch for EVERY block on screen, then handed Yoga a fresh tree to
99
+ * lay out.
100
+ *
101
+ * Measured, on a realistic assistant reply, before this landed:
102
+ *
103
+ * | blocks | text work per keystroke |
104
+ * |--------|-------------------------|
105
+ * | 30 | 17.9 ms |
106
+ * | 80 | 47.7 ms |
107
+ * | 150 | 89.4 ms |
108
+ *
109
+ * — and that is BEFORE layout and redraw, against Ink's 32ms frame throttle. It is
110
+ * why typing got slower the longer the conversation ran, why scrolling stuttered, and
111
+ * why a tool block "popped" instead of appearing cleanly: it was landing inside a
112
+ * frame that took ~90ms to draw.
113
+ *
114
+ * The reason a plain shallow compare is CORRECT here, rather than a lucky shortcut:
115
+ * the transcript reducer never rebuilds a block that did not change. `commit` concats,
116
+ * `patch` maps and returns `b` untouched unless the id matches, and `endTurn`'s `clear`
117
+ * returns `b` itself for everything except a live tool row. So block identity is stable
118
+ * across renders by construction, and the one moment a committed row is allowed to
119
+ * change (`live` flipping at turn end) DOES produce a new object and so DOES re-render.
120
+ * `columns` and `tightTop` are primitives. Nothing here is a fresh object or closure
121
+ * per render, which is the usual reason `memo` silently does nothing.
122
+ *
123
+ * If a future block type is given a prop that is built inline at the call site (an
124
+ * array, an object, a callback), this optimization is dead and the lag returns with no
125
+ * test failing. Keep the props primitive-or-stable.
126
+ */
127
+ export const BlockView = memo(BlockViewInner);
128
+ //# sourceMappingURL=BlockView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockView.js","sourceRoot":"","sources":["../../../src/cli/components/BlockView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * FirstRunFrame.tsx — the shell the two first-run screens sit in.
4
+ *
5
+ * They are the only screens that own the whole terminal, because there is no
6
+ * conversation behind them yet. Left as plain columns they pinned themselves to the top
7
+ * of an otherwise empty window, which reads like output that has scrolled rather than a
8
+ * thing asking for an answer.
9
+ *
10
+ * So the content is CENTRED vertically, and given a title block that says what this is,
11
+ * which version it is, and — on the very first launch — a few things worth knowing. That
12
+ * last part is not decoration: someone who has just installed a terminal agent has no
13
+ * idea what to type, and the moment they are asked for a key is the only moment they are
14
+ * definitely reading.
15
+ *
16
+ * Everything is bounded. A short terminal falls back to top-aligned rather than clipping
17
+ * the middle of a screen the user has to interact with.
18
+ */
19
+ import { Box, Text } from "ink";
20
+ /** Below this many rows, centring costs more than it gives. */
21
+ const MIN_ROWS_TO_CENTRE = 24;
22
+ export function FirstRunFrame({ rows, version, subtitle, tips, children }) {
23
+ const centred = rows >= MIN_ROWS_TO_CENTRE;
24
+ const justify = centred ? "center" : "flex-start";
25
+ return (_jsxs(Box, { flexDirection: "column", height: rows, justifyContent: justify, paddingX: 2, children: [_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { bold: true, color: "yellow", children: "Mindweave 1" }), _jsx(Text, { dimColor: true, children: version })] }), subtitle ? (_jsx(Box, { flexShrink: 0, marginTop: 1, children: _jsx(Text, { children: subtitle }) })) : null, _jsx(Box, { flexShrink: 0, marginTop: 1, flexDirection: "column", children: children }), tips && tips.length > 0 ? (_jsx(Box, { flexShrink: 0, marginTop: 1, flexDirection: "column", children: tips.map((t) => (_jsx(Text, { dimColor: true, wrap: "truncate-end", children: ` ${t}` }, t))) })) : null] }));
26
+ }
27
+ /**
28
+ * What a brand-new user is told while they are pasting a key.
29
+ *
30
+ * Four lines, because this is the one moment they are certainly reading and the one
31
+ * thing they cannot do yet is ask. Each is something you would otherwise have to go
32
+ * looking for: how to see everything, how to stop, where the modes are, and that nothing
33
+ * leaves the machine.
34
+ */
35
+ export const FIRST_RUN_TIPS = [
36
+ "/help lists every command · @file adds a file to the conversation",
37
+ "shift+tab switches mode: auto-accept, plan, or ask before each action",
38
+ "Esc stops whatever is running · /undo rolls back file changes",
39
+ "Your keys and your code stay on this machine.",
40
+ ];
41
+ //# sourceMappingURL=FirstRunFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirstRunFrame.js","sourceRoot":"","sources":["../../../src/cli/components/FirstRunFrame.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAiB,MAAM,KAAK,CAAC;AAG/C,+DAA+D;AAC/D,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAc9B,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAsB;IAC3F,MAAM,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAAC;IAC3C,MAAM,OAAO,GAA+B,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;IAC9E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,aAC5E,MAAC,GAAG,IAAC,UAAU,EAAE,CAAC,aAChB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ,4BAAmB,EAC5C,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IAC3B,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YAC9B,KAAC,IAAI,cAAE,QAAQ,GAAQ,GACnB,CACP,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,YACrD,QAAQ,GACL,EACL,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,YACrD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACf,KAAC,IAAI,IAAS,QAAQ,QAAC,IAAI,EAAC,cAAc,YAAE,KAAK,CAAC,EAAE,IAAzC,CAAC,CAAgD,CAC7D,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mEAAmE;IACnE,uEAAuE;IACvE,+DAA+D;IAC/D,+CAA+C;CAChD,CAAC"}
@@ -0,0 +1,197 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * KeyManager.tsx — what /key shows.
4
+ *
5
+ * A FOOTER OVERLAY, not a screen: it sits where the prompt sits, the conversation stays
6
+ * visible above it, and it is only as tall as it needs to be. Taking the whole terminal
7
+ * to change a setting is the wrong weight and leaves nothing to come back to.
8
+ *
9
+ * Three levels, drilling in. PROVIDERS, then that provider's KEYS with an "add another"
10
+ * that never runs out, then what can be done to one key. The first version was a flat
11
+ * list of every key across every provider, which buried the thing people came to do.
12
+ *
13
+ * Esc always goes back one level, INCLUDING while typing a key — a field that can only
14
+ * be left by submitting nothing is a trap.
15
+ */
16
+ import { Box, Text, useInput } from "ink";
17
+ import TextInput from "ink-text-input";
18
+ import { useState } from "react";
19
+ import { stripMouse } from "../mouse.js";
20
+ import { ACTION_ACTIVATE, ACTION_BACK, ACTION_EDIT, ACTION_REMOVE, ACTION_SHOW, actionsFor, countLabel, } from "../keyManager.js";
21
+ /** Rows visible at once. The footer is height-bounded; this is not a screen. */
22
+ const WINDOW = 7;
23
+ export function KeyManager({ providers, keysOf, nextSlot, reveal, width, onActivate, onSave, onRemove, onClose, active = true, startProvider = null, maxRows = WINDOW, }) {
24
+ // Rows for the list: the box holds maxRows+2 content rows; the title and the hint (which
25
+ // carries a blank top margin, so two rows) take three, leaving maxRows - 1 for the list
26
+ // (never fewer than 2). It scrolls when there are more; the box never grows.
27
+ const win = Math.max(2, Math.min(WINDOW, maxRows - 1));
28
+ const [mode, setMode] = useState(() => {
29
+ // Same drill-in the provider list does on Enter: an empty provider goes straight to
30
+ // the field, one with keys goes to its key list.
31
+ if (startProvider) {
32
+ const slot = nextSlot(startProvider);
33
+ if (startProvider.count === 0 && slot !== null)
34
+ return { kind: "enter", provider: startProvider, slot, replacing: false };
35
+ return { kind: "keys", provider: startProvider };
36
+ }
37
+ return { kind: "providers" };
38
+ });
39
+ const [sel, setSel] = useState(0);
40
+ const [value, setValue] = useState("");
41
+ const [shown, setShown] = useState(null);
42
+ const keys = mode.kind === "keys" || mode.kind === "actions" ? keysOf(mode.provider) : [];
43
+ const actions = mode.kind === "actions" ? actionsFor(mode.row, keys.length) : [];
44
+ // "Add a new key" is one more row after the keys, and it is there however many there
45
+ // already are — that is what makes adding a second, or a fifth, obvious.
46
+ const canAdd = mode.kind === "keys" ? nextSlot(mode.provider) !== null : false;
47
+ const count = mode.kind === "providers"
48
+ ? providers.length
49
+ : mode.kind === "keys"
50
+ ? keys.length + (canAdd ? 1 : 0)
51
+ : mode.kind === "actions"
52
+ ? actions.length
53
+ : 0;
54
+ function back() {
55
+ setShown(null);
56
+ setValue("");
57
+ setSel(0);
58
+ if (mode.kind === "providers")
59
+ onClose();
60
+ else if (mode.kind === "keys")
61
+ setMode({ kind: "providers" });
62
+ else
63
+ setMode({ kind: "keys", provider: mode.provider });
64
+ }
65
+ useInput((input, key) => {
66
+ if (key.escape)
67
+ return back();
68
+ // Backspace and Delete step back exactly as Escape does. Deleting what you just chose
69
+ // is the instinctive way out, and while a list is showing there is nothing else those
70
+ // keys could mean; in the entry field they belong to the key being typed, and while a
71
+ // list is empty stepping back is the only thing left to do.
72
+ if ((key.backspace || key.delete) && mode.kind !== "enter")
73
+ return back();
74
+ if (mode.kind === "enter" || count === 0)
75
+ return;
76
+ if (key.upArrow)
77
+ setSel((s) => (s - 1 + count) % count);
78
+ else if (key.downArrow)
79
+ setSel((s) => (s + 1) % count);
80
+ else if (key.return)
81
+ commit(sel);
82
+ else {
83
+ // One keypress commits, so only single digits ever arrive here.
84
+ const n = Number.parseInt(input, 10);
85
+ if (Number.isInteger(n) && n >= 1 && n <= Math.min(9, count))
86
+ commit(n - 1);
87
+ }
88
+ }, { isActive: active });
89
+ function commit(index) {
90
+ setShown(null);
91
+ if (mode.kind === "providers") {
92
+ const provider = providers[index];
93
+ if (!provider)
94
+ return;
95
+ setSel(0);
96
+ // A provider with no keys goes straight to the field: there is no list to show, and
97
+ // one more press to reach the only thing you could have wanted is a press wasted.
98
+ const slot = nextSlot(provider);
99
+ if (provider.count === 0 && slot !== null)
100
+ return setMode({ kind: "enter", provider, slot, replacing: false });
101
+ return setMode({ kind: "keys", provider });
102
+ }
103
+ if (mode.kind === "keys") {
104
+ if (index === keys.length) {
105
+ const slot = nextSlot(mode.provider);
106
+ if (slot === null)
107
+ return;
108
+ setValue("");
109
+ return setMode({ kind: "enter", provider: mode.provider, slot, replacing: false });
110
+ }
111
+ const row = keys[index];
112
+ if (!row)
113
+ return;
114
+ setSel(0);
115
+ return setMode({ kind: "actions", provider: mode.provider, row });
116
+ }
117
+ if (mode.kind === "actions") {
118
+ const chosen = actions[index] ?? ACTION_BACK;
119
+ if (chosen === ACTION_SHOW)
120
+ return setShown(reveal(mode.row));
121
+ if (chosen === ACTION_EDIT) {
122
+ setValue("");
123
+ return setMode({ kind: "enter", provider: mode.provider, slot: mode.row.slot, replacing: true });
124
+ }
125
+ setSel(0);
126
+ if (chosen === ACTION_ACTIVATE)
127
+ onActivate(mode.row);
128
+ else if (chosen.startsWith(ACTION_REMOVE))
129
+ onRemove(mode.row);
130
+ return setMode({ kind: "keys", provider: mode.provider });
131
+ }
132
+ }
133
+ if (mode.kind === "enter") {
134
+ return (_jsx(Panel, { title: `${mode.replacing ? "Edit the" : "Add a"} ${mode.provider.label} key${mode.replacing ? ` (key ${mode.slot})` : ""}`, rows: 1, maxRows: maxRows, width: width, hint: "Enter to save \u00B7 Esc to go back", children: _jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { bold: true, color: "cyan", children: " key " }), _jsx(TextInput, { value: value,
135
+ // Mouse reports arrive at a focused field as TYPED TEXT once wheel reporting
136
+ // is on, so scrolling while pasting fills the field with escape sequences and
137
+ // the key fails later in a way that looks like the key itself is wrong.
138
+ onChange: (v) => setValue(stripMouse(v)), onSubmit: (v) => {
139
+ const key = v.trim();
140
+ if (key)
141
+ onSave(mode.provider, mode.slot, key);
142
+ setValue("");
143
+ setSel(0);
144
+ setMode({ kind: "keys", provider: mode.provider });
145
+ }, placeholder: "paste, then press Enter", mask: "*" })] }) }));
146
+ }
147
+ if (mode.kind === "actions") {
148
+ return (_jsxs(Panel, { title: `${mode.provider.label} · key ${mode.row.slot} ${mode.row.hint}${mode.row.active ? " ● active" : ""}`, rows: actions.length + (shown ? 2 : 0), maxRows: maxRows, width: width, hint: shown ? "hidden again when you leave · Esc or ⌫ back" : "↑/↓ · Enter to choose · Esc or ⌫ back", children: [actions.map((a, i) => (_jsx(Row, { on: i === sel, n: i + 1, left: a, width: width }, a))), shown ? (_jsx(Box, { flexShrink: 0, marginTop: 1, children: _jsx(Text, { color: "yellow", wrap: "truncate-end", children: ` ${shown}` }) })) : null] }));
149
+ }
150
+ if (mode.kind === "keys") {
151
+ const start = windowStart(sel, count, win);
152
+ const addRow = canAdd && start + win > keys.length;
153
+ return (_jsxs(Panel, { title: `${mode.provider.label} · ${countLabel(keys.length)}`, counter: position(sel, count, win), rows: Math.min(win, keys.length - start) + (addRow ? 1 : 0), maxRows: maxRows, width: width, hint: "\u2191/\u2193 \u00B7 Enter to choose \u00B7 Esc or \u232B back", children: [keys.slice(start, start + win).map((r, i) => (_jsx(Row, { on: start + i === sel, n: start + i + 1, left: `key ${r.slot}`, mid: r.hint, right: r.active ? "● active" : "", rightColor: r.active ? "green" : undefined, width: width }, r.slot))), addRow ? _jsx(Row, { on: sel === keys.length, n: keys.length + 1, left: "Add a new key", width: width }) : null] }));
154
+ }
155
+ const start = windowStart(sel, providers.length, win);
156
+ return (_jsx(Panel, { title: "Keys", counter: position(sel, providers.length, win), rows: Math.min(win, providers.length - start), maxRows: maxRows, width: width, hint: "\u2191/\u2193 \u00B7 Enter to choose \u00B7 Esc or \u232B close", children: providers.slice(start, start + win).map((p, i) => (_jsx(Row, { on: start + i === sel, n: start + i + 1, left: p.label, right: countLabel(p.count), rightColor: p.count > 0 ? "green" : undefined, width: width }, p.id))) }));
157
+ }
158
+ /** " 3 of 9" when the list is longer than its window, so nothing is silently off the
159
+ * bottom. On the title row, where the pickers put it, and empty when everything fits. */
160
+ function position(sel, total, size) {
161
+ return total > size ? ` ${sel + 1} of ${total}` : "";
162
+ }
163
+ /** Scroll the window so the selection stays inside it. */
164
+ export function windowStart(sel, rowCount, size = WINDOW) {
165
+ if (rowCount <= size)
166
+ return 0;
167
+ const half = Math.floor(size / 2);
168
+ return Math.max(0, Math.min(sel - half, rowCount - size));
169
+ }
170
+ /**
171
+ * The header + body of the manager, CONTENT ONLY. The bordered box around it is the ONE
172
+ * shared menu box in PromptInput (same box the `/` command menu and every picker use), so
173
+ * `/key` reads as the same surface — the box never changes, only what is inside it. Every
174
+ * row is `flexShrink={0}` so Yoga leaves the box at its real height (the footer measurement
175
+ * depends on it) instead of compressing an overfull one.
176
+ */
177
+ function Panel({ title, counter = "", rows, maxRows, hint, width, children, }) {
178
+ // Fill the box out to its fixed height so the hint is pinned to the BOTTOM at every
179
+ // level. Without the fill a short list left the hint floating in the middle of a box
180
+ // whose size never changes, and each level put it somewhere else — the one line that
181
+ // should be in the same place every time. Title(1) + hint(2, its top margin included)
182
+ // is the three rows the body does not get, which is the command list's shape and every
183
+ // picker's: title, then rows, then the hint on the bottom line.
184
+ const pad = Math.max(0, maxRows - 1 - rows);
185
+ const inner = Math.max(12, width - 4);
186
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { flexShrink: 0, width: inner, children: [_jsx(Text, { bold: true, wrap: "truncate-end", children: title }), counter ? _jsx(Text, { dimColor: true, children: counter }) : null] }), children, Array.from({ length: pad }).map((_, i) => (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { children: " " }) }, `pad${i}`))), _jsx(Box, { flexShrink: 0, marginTop: 1, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: hint }) })] }));
187
+ }
188
+ /**
189
+ * One row. `mid` is a second COLUMN rather than more text in `left`, because a hint
190
+ * appended to a label moves with the length of the label and the markers then land in
191
+ * different places, so the list stops reading as a table.
192
+ */
193
+ function Row({ on, n, left, mid, right, rightColor, width, }) {
194
+ const inner = Math.max(12, width - 4);
195
+ return (_jsxs(Box, { flexShrink: 0, width: inner, children: [_jsxs(Text, { color: on ? "cyan" : undefined, bold: on, children: [on ? " › " : " ", `${n} `] }), _jsx(Box, { width: mid === undefined ? 24 : 10, children: _jsx(Text, { color: on ? "cyan" : undefined, bold: on, wrap: "truncate-end", children: left }) }), mid === undefined ? null : (_jsx(Box, { width: 9, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: mid }) })), right ? _jsx(Text, { color: rightColor, dimColor: !rightColor, children: right }) : null] }));
196
+ }
197
+ //# sourceMappingURL=KeyManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyManager.js","sourceRoot":"","sources":["../../../src/cli/components/KeyManager.tsx"],"names":[],"mappings":"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"}