mindweave 0.0.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +171 -14
  3. package/dist/alternator/chassis/cache.js +47 -0
  4. package/dist/alternator/chassis/cache.js.map +1 -0
  5. package/dist/alternator/chassis/domRefs.js +53 -0
  6. package/dist/alternator/chassis/domRefs.js.map +1 -0
  7. package/dist/alternator/chassis/extractWorker.js +65 -0
  8. package/dist/alternator/chassis/extractWorker.js.map +1 -0
  9. package/dist/alternator/chassis/graph.js +221 -0
  10. package/dist/alternator/chassis/graph.js.map +1 -0
  11. package/dist/alternator/chassis/index.js +463 -0
  12. package/dist/alternator/chassis/index.js.map +1 -0
  13. package/dist/alternator/chassis/isolation.js +336 -0
  14. package/dist/alternator/chassis/isolation.js.map +1 -0
  15. package/dist/alternator/chassis/langCases.js +69 -0
  16. package/dist/alternator/chassis/langCases.js.map +1 -0
  17. package/dist/alternator/chassis/lsp.js +469 -0
  18. package/dist/alternator/chassis/lsp.js.map +1 -0
  19. package/dist/alternator/chassis/markup.js +262 -0
  20. package/dist/alternator/chassis/markup.js.map +1 -0
  21. package/dist/alternator/chassis/provision.js +198 -0
  22. package/dist/alternator/chassis/provision.js.map +1 -0
  23. package/dist/alternator/chassis/rank.js +72 -0
  24. package/dist/alternator/chassis/rank.js.map +1 -0
  25. package/dist/alternator/chassis/servers.js +215 -0
  26. package/dist/alternator/chassis/servers.js.map +1 -0
  27. package/dist/alternator/chassis/treesitter.js +608 -0
  28. package/dist/alternator/chassis/treesitter.js.map +1 -0
  29. package/dist/alternator/chassis/types.js +24 -0
  30. package/dist/alternator/chassis/types.js.map +1 -0
  31. package/dist/alternator/lane.js +67 -0
  32. package/dist/alternator/lane.js.map +1 -0
  33. package/dist/cli/App.js +2586 -0
  34. package/dist/cli/App.js.map +1 -0
  35. package/dist/cli/altScreen.js +67 -0
  36. package/dist/cli/altScreen.js.map +1 -0
  37. package/dist/cli/approvalChannel.js +72 -0
  38. package/dist/cli/approvalChannel.js.map +1 -0
  39. package/dist/cli/attachments.js +188 -0
  40. package/dist/cli/attachments.js.map +1 -0
  41. package/dist/cli/bootstrap.js +279 -0
  42. package/dist/cli/bootstrap.js.map +1 -0
  43. package/dist/cli/chatAnchor.js +94 -0
  44. package/dist/cli/chatAnchor.js.map +1 -0
  45. package/dist/cli/commandArgs.js +79 -0
  46. package/dist/cli/commandArgs.js.map +1 -0
  47. package/dist/cli/commandRoute.js +78 -0
  48. package/dist/cli/commandRoute.js.map +1 -0
  49. package/dist/cli/compaction.js +69 -0
  50. package/dist/cli/compaction.js.map +1 -0
  51. package/dist/cli/components/ApprovalBox.js +100 -0
  52. package/dist/cli/components/ApprovalBox.js.map +1 -0
  53. package/dist/cli/components/BlockView.js +128 -0
  54. package/dist/cli/components/BlockView.js.map +1 -0
  55. package/dist/cli/components/FirstRunFrame.js +41 -0
  56. package/dist/cli/components/FirstRunFrame.js.map +1 -0
  57. package/dist/cli/components/KeyManager.js +197 -0
  58. package/dist/cli/components/KeyManager.js.map +1 -0
  59. package/dist/cli/components/KeySetup.js +125 -0
  60. package/dist/cli/components/KeySetup.js.map +1 -0
  61. package/dist/cli/components/MenuFrame.js +24 -0
  62. package/dist/cli/components/MenuFrame.js.map +1 -0
  63. package/dist/cli/components/Picker.js +82 -0
  64. package/dist/cli/components/Picker.js.map +1 -0
  65. package/dist/cli/components/PromptInput.js +509 -0
  66. package/dist/cli/components/PromptInput.js.map +1 -0
  67. package/dist/cli/components/SubagentView.js +86 -0
  68. package/dist/cli/components/SubagentView.js.map +1 -0
  69. package/dist/cli/components/ToolGroup.js +60 -0
  70. package/dist/cli/components/ToolGroup.js.map +1 -0
  71. package/dist/cli/components/ToolLine.js +123 -0
  72. package/dist/cli/components/ToolLine.js.map +1 -0
  73. package/dist/cli/components/TrustGate.js +37 -0
  74. package/dist/cli/components/TrustGate.js.map +1 -0
  75. package/dist/cli/costView.js +40 -0
  76. package/dist/cli/costView.js.map +1 -0
  77. package/dist/cli/frameRate.js +30 -0
  78. package/dist/cli/frameRate.js.map +1 -0
  79. package/dist/cli/framebuffer/paint.js +165 -0
  80. package/dist/cli/framebuffer/paint.js.map +1 -0
  81. package/dist/cli/framebuffer/parse.js +266 -0
  82. package/dist/cli/framebuffer/parse.js.map +1 -0
  83. package/dist/cli/framebuffer/screen.js +196 -0
  84. package/dist/cli/framebuffer/screen.js.map +1 -0
  85. package/dist/cli/framebuffer/writer.js +139 -0
  86. package/dist/cli/framebuffer/writer.js.map +1 -0
  87. package/dist/cli/groupReveal.js +51 -0
  88. package/dist/cli/groupReveal.js.map +1 -0
  89. package/dist/cli/help.js +55 -0
  90. package/dist/cli/help.js.map +1 -0
  91. package/dist/cli/inputView.js +105 -0
  92. package/dist/cli/inputView.js.map +1 -0
  93. package/dist/cli/keyManager.js +65 -0
  94. package/dist/cli/keyManager.js.map +1 -0
  95. package/dist/cli/keySetup.js +35 -0
  96. package/dist/cli/keySetup.js.map +1 -0
  97. package/dist/cli/keyStore.js +73 -0
  98. package/dist/cli/keyStore.js.map +1 -0
  99. package/dist/cli/markdown.js +460 -0
  100. package/dist/cli/markdown.js.map +1 -0
  101. package/dist/cli/messageQueue.js +96 -0
  102. package/dist/cli/messageQueue.js.map +1 -0
  103. package/dist/cli/modes.js +90 -0
  104. package/dist/cli/modes.js.map +1 -0
  105. package/dist/cli/mouse.js +78 -0
  106. package/dist/cli/mouse.js.map +1 -0
  107. package/dist/cli/pasteAssembler.js +44 -0
  108. package/dist/cli/pasteAssembler.js.map +1 -0
  109. package/dist/cli/pathComplete.js +39 -0
  110. package/dist/cli/pathComplete.js.map +1 -0
  111. package/dist/cli/perfLog.js +90 -0
  112. package/dist/cli/perfLog.js.map +1 -0
  113. package/dist/cli/reveal.js +32 -0
  114. package/dist/cli/reveal.js.map +1 -0
  115. package/dist/cli/revealPace.js +59 -0
  116. package/dist/cli/revealPace.js.map +1 -0
  117. package/dist/cli/sessionCarry.js +19 -0
  118. package/dist/cli/sessionCarry.js.map +1 -0
  119. package/dist/cli/smoothScroll.js +74 -0
  120. package/dist/cli/smoothScroll.js.map +1 -0
  121. package/dist/cli/startupArgs.js +96 -0
  122. package/dist/cli/startupArgs.js.map +1 -0
  123. package/dist/cli/terminalRestore.js +34 -0
  124. package/dist/cli/terminalRestore.js.map +1 -0
  125. package/dist/cli/toolDisplay.js +219 -0
  126. package/dist/cli/toolDisplay.js.map +1 -0
  127. package/dist/cli/toolItems.js +65 -0
  128. package/dist/cli/toolItems.js.map +1 -0
  129. package/dist/cli/transcript.js +351 -0
  130. package/dist/cli/transcript.js.map +1 -0
  131. package/dist/cli/trust.js +79 -0
  132. package/dist/cli/trust.js.map +1 -0
  133. package/dist/cli/updateCheck.js +107 -0
  134. package/dist/cli/updateCheck.js.map +1 -0
  135. package/dist/cli/version.js +39 -0
  136. package/dist/cli/version.js.map +1 -0
  137. package/dist/cli/viewport.js +179 -0
  138. package/dist/cli/viewport.js.map +1 -0
  139. package/dist/cli/virtualWindow.js +103 -0
  140. package/dist/cli/virtualWindow.js.map +1 -0
  141. package/dist/cli/workingVerb.js +37 -0
  142. package/dist/cli/workingVerb.js.map +1 -0
  143. package/dist/cli/wrap.js +145 -0
  144. package/dist/cli/wrap.js.map +1 -0
  145. package/dist/drivers/anthropic/cachePoints.js +77 -0
  146. package/dist/drivers/anthropic/cachePoints.js.map +1 -0
  147. package/dist/drivers/anthropic/client.js +432 -0
  148. package/dist/drivers/anthropic/client.js.map +1 -0
  149. package/dist/drivers/anthropic/index.js +10 -0
  150. package/dist/drivers/anthropic/index.js.map +1 -0
  151. package/dist/drivers/anthropic/manifest.js +221 -0
  152. package/dist/drivers/anthropic/manifest.js.map +1 -0
  153. package/dist/drivers/cerebras/client.js +69 -0
  154. package/dist/drivers/cerebras/client.js.map +1 -0
  155. package/dist/drivers/cerebras/index.js +5 -0
  156. package/dist/drivers/cerebras/index.js.map +1 -0
  157. package/dist/drivers/cerebras/manifest.js +140 -0
  158. package/dist/drivers/cerebras/manifest.js.map +1 -0
  159. package/dist/drivers/clientId.js +41 -0
  160. package/dist/drivers/clientId.js.map +1 -0
  161. package/dist/drivers/contextOverflow.js +77 -0
  162. package/dist/drivers/contextOverflow.js.map +1 -0
  163. package/dist/drivers/deepseek/client.js +168 -0
  164. package/dist/drivers/deepseek/client.js.map +1 -0
  165. package/dist/drivers/deepseek/index.js +16 -0
  166. package/dist/drivers/deepseek/index.js.map +1 -0
  167. package/dist/drivers/deepseek/inlineTools.js +46 -0
  168. package/dist/drivers/deepseek/inlineTools.js.map +1 -0
  169. package/dist/drivers/deepseek/manifest.js +166 -0
  170. package/dist/drivers/deepseek/manifest.js.map +1 -0
  171. package/dist/drivers/gemini/client.js +38 -0
  172. package/dist/drivers/gemini/client.js.map +1 -0
  173. package/dist/drivers/gemini/index.js +5 -0
  174. package/dist/drivers/gemini/index.js.map +1 -0
  175. package/dist/drivers/gemini/manifest.js +150 -0
  176. package/dist/drivers/gemini/manifest.js.map +1 -0
  177. package/dist/drivers/glm/client.js +90 -0
  178. package/dist/drivers/glm/client.js.map +1 -0
  179. package/dist/drivers/glm/index.js +9 -0
  180. package/dist/drivers/glm/index.js.map +1 -0
  181. package/dist/drivers/glm/manifest.js +183 -0
  182. package/dist/drivers/glm/manifest.js.map +1 -0
  183. package/dist/drivers/groq/client.js +80 -0
  184. package/dist/drivers/groq/client.js.map +1 -0
  185. package/dist/drivers/groq/index.js +5 -0
  186. package/dist/drivers/groq/index.js.map +1 -0
  187. package/dist/drivers/groq/manifest.js +160 -0
  188. package/dist/drivers/groq/manifest.js.map +1 -0
  189. package/dist/drivers/kimi/client.js +82 -0
  190. package/dist/drivers/kimi/client.js.map +1 -0
  191. package/dist/drivers/kimi/index.js +9 -0
  192. package/dist/drivers/kimi/index.js.map +1 -0
  193. package/dist/drivers/kimi/manifest.js +168 -0
  194. package/dist/drivers/kimi/manifest.js.map +1 -0
  195. package/dist/drivers/meta/client.js +30 -0
  196. package/dist/drivers/meta/client.js.map +1 -0
  197. package/dist/drivers/meta/index.js +5 -0
  198. package/dist/drivers/meta/index.js.map +1 -0
  199. package/dist/drivers/meta/manifest.js +101 -0
  200. package/dist/drivers/meta/manifest.js.map +1 -0
  201. package/dist/drivers/minimax/client.js +36 -0
  202. package/dist/drivers/minimax/client.js.map +1 -0
  203. package/dist/drivers/minimax/index.js +5 -0
  204. package/dist/drivers/minimax/index.js.map +1 -0
  205. package/dist/drivers/minimax/manifest.js +120 -0
  206. package/dist/drivers/minimax/manifest.js.map +1 -0
  207. package/dist/drivers/mistral/client.js +54 -0
  208. package/dist/drivers/mistral/client.js.map +1 -0
  209. package/dist/drivers/mistral/index.js +5 -0
  210. package/dist/drivers/mistral/index.js.map +1 -0
  211. package/dist/drivers/mistral/manifest.js +118 -0
  212. package/dist/drivers/mistral/manifest.js.map +1 -0
  213. package/dist/drivers/openai/client.js +290 -0
  214. package/dist/drivers/openai/client.js.map +1 -0
  215. package/dist/drivers/openai/index.js +9 -0
  216. package/dist/drivers/openai/index.js.map +1 -0
  217. package/dist/drivers/openai/manifest.js +133 -0
  218. package/dist/drivers/openai/manifest.js.map +1 -0
  219. package/dist/drivers/openaiCompat/wire.js +493 -0
  220. package/dist/drivers/openaiCompat/wire.js.map +1 -0
  221. package/dist/drivers/partialTurn.js +23 -0
  222. package/dist/drivers/partialTurn.js.map +1 -0
  223. package/dist/drivers/providerError.js +181 -0
  224. package/dist/drivers/providerError.js.map +1 -0
  225. package/dist/drivers/qwen/client.js +93 -0
  226. package/dist/drivers/qwen/client.js.map +1 -0
  227. package/dist/drivers/qwen/index.js +9 -0
  228. package/dist/drivers/qwen/index.js.map +1 -0
  229. package/dist/drivers/qwen/manifest.js +146 -0
  230. package/dist/drivers/qwen/manifest.js.map +1 -0
  231. package/dist/drivers/registry.js +177 -0
  232. package/dist/drivers/registry.js.map +1 -0
  233. package/dist/drivers/retryPolicy.js +129 -0
  234. package/dist/drivers/retryPolicy.js.map +1 -0
  235. package/dist/drivers/searchBlocks.js +61 -0
  236. package/dist/drivers/searchBlocks.js.map +1 -0
  237. package/dist/drivers/types.js +2 -0
  238. package/dist/drivers/types.js.map +1 -0
  239. package/dist/drivers/xai/client.js +63 -0
  240. package/dist/drivers/xai/client.js.map +1 -0
  241. package/dist/drivers/xai/index.js +5 -0
  242. package/dist/drivers/xai/index.js.map +1 -0
  243. package/dist/drivers/xai/manifest.js +137 -0
  244. package/dist/drivers/xai/manifest.js.map +1 -0
  245. package/dist/dynamo/_probe.tmp.js +20 -0
  246. package/dist/dynamo/_probe.tmp.js.map +1 -0
  247. package/dist/dynamo/cacheBreak.js +88 -0
  248. package/dist/dynamo/cacheBreak.js.map +1 -0
  249. package/dist/dynamo/contextWindow.js +243 -0
  250. package/dist/dynamo/contextWindow.js.map +1 -0
  251. package/dist/dynamo/engine.js +2011 -0
  252. package/dist/dynamo/engine.js.map +1 -0
  253. package/dist/dynamo/guard.js +132 -0
  254. package/dist/dynamo/guard.js.map +1 -0
  255. package/dist/dynamo/liveMeter.js +58 -0
  256. package/dist/dynamo/liveMeter.js.map +1 -0
  257. package/dist/dynamo/model.js +172 -0
  258. package/dist/dynamo/model.js.map +1 -0
  259. package/dist/dynamo/planArtifact.js +125 -0
  260. package/dist/dynamo/planArtifact.js.map +1 -0
  261. package/dist/dynamo/pricing.js +140 -0
  262. package/dist/dynamo/pricing.js.map +1 -0
  263. package/dist/dynamo/prompt.js +264 -0
  264. package/dist/dynamo/prompt.js.map +1 -0
  265. package/dist/dynamo/spend.js +45 -0
  266. package/dist/dynamo/spend.js.map +1 -0
  267. package/dist/dynamo/verify.js +483 -0
  268. package/dist/dynamo/verify.js.map +1 -0
  269. package/dist/governor/forbidden.js +181 -0
  270. package/dist/governor/forbidden.js.map +1 -0
  271. package/dist/governor/freshness.js +83 -0
  272. package/dist/governor/freshness.js.map +1 -0
  273. package/dist/governor/frontmatter.js +38 -0
  274. package/dist/governor/frontmatter.js.map +1 -0
  275. package/dist/governor/glob.js +75 -0
  276. package/dist/governor/glob.js.map +1 -0
  277. package/dist/governor/index.js +87 -0
  278. package/dist/governor/index.js.map +1 -0
  279. package/dist/governor/rules.js +80 -0
  280. package/dist/governor/rules.js.map +1 -0
  281. package/dist/governor/scope.js +91 -0
  282. package/dist/governor/scope.js.map +1 -0
  283. package/dist/governor/skills.js +176 -0
  284. package/dist/governor/skills.js.map +1 -0
  285. package/dist/governor/types.js +16 -0
  286. package/dist/governor/types.js.map +1 -0
  287. package/dist/governor/write.js +182 -0
  288. package/dist/governor/write.js.map +1 -0
  289. package/dist/index.js +89 -0
  290. package/dist/index.js.map +1 -0
  291. package/dist/mcp/catalog.js +232 -0
  292. package/dist/mcp/catalog.js.map +1 -0
  293. package/dist/mcp/config.js +116 -0
  294. package/dist/mcp/config.js.map +1 -0
  295. package/dist/mcp/configWrite.js +254 -0
  296. package/dist/mcp/configWrite.js.map +1 -0
  297. package/dist/mcp/connection.js +504 -0
  298. package/dist/mcp/connection.js.map +1 -0
  299. package/dist/mcp/deferred.js +104 -0
  300. package/dist/mcp/deferred.js.map +1 -0
  301. package/dist/mcp/discover.js +128 -0
  302. package/dist/mcp/discover.js.map +1 -0
  303. package/dist/mcp/manager.js +679 -0
  304. package/dist/mcp/manager.js.map +1 -0
  305. package/dist/mcp/paramHeaders.js +163 -0
  306. package/dist/mcp/paramHeaders.js.map +1 -0
  307. package/dist/mcp/prompts.js +136 -0
  308. package/dist/mcp/prompts.js.map +1 -0
  309. package/dist/mcp/protocol.js +171 -0
  310. package/dist/mcp/protocol.js.map +1 -0
  311. package/dist/mcp/resources.js +119 -0
  312. package/dist/mcp/resources.js.map +1 -0
  313. package/dist/mcp/resultStore.js +180 -0
  314. package/dist/mcp/resultStore.js.map +1 -0
  315. package/dist/mcp/subscriptions.js +74 -0
  316. package/dist/mcp/subscriptions.js.map +1 -0
  317. package/dist/mcp/transport/headerValue.js +40 -0
  318. package/dist/mcp/transport/headerValue.js.map +1 -0
  319. package/dist/mcp/transport/http.js +321 -0
  320. package/dist/mcp/transport/http.js.map +1 -0
  321. package/dist/mcp/transport/stdio.js +234 -0
  322. package/dist/mcp/transport/stdio.js.map +1 -0
  323. package/dist/mcp/transport/types.js +27 -0
  324. package/dist/mcp/transport/types.js.map +1 -0
  325. package/dist/mcp/trust.js +98 -0
  326. package/dist/mcp/trust.js.map +1 -0
  327. package/dist/mcp/trustStore.js +55 -0
  328. package/dist/mcp/trustStore.js.map +1 -0
  329. package/dist/memory/autoMemory.js +340 -0
  330. package/dist/memory/autoMemory.js.map +1 -0
  331. package/dist/memory/compaction.js +513 -0
  332. package/dist/memory/compaction.js.map +1 -0
  333. package/dist/memory/images.js +173 -0
  334. package/dist/memory/images.js.map +1 -0
  335. package/dist/memory/presence.js +59 -0
  336. package/dist/memory/presence.js.map +1 -0
  337. package/dist/memory/projectNotes.js +247 -0
  338. package/dist/memory/projectNotes.js.map +1 -0
  339. package/dist/memory/restore.js +72 -0
  340. package/dist/memory/restore.js.map +1 -0
  341. package/dist/memory/session.js +472 -0
  342. package/dist/memory/session.js.map +1 -0
  343. package/dist/memory/sessionMemory.js +142 -0
  344. package/dist/memory/sessionMemory.js.map +1 -0
  345. package/dist/memory/sessionMemoryCompact.js +136 -0
  346. package/dist/memory/sessionMemoryCompact.js.map +1 -0
  347. package/dist/memory/store.js +217 -0
  348. package/dist/memory/store.js.map +1 -0
  349. package/dist/memory/types.js +14 -0
  350. package/dist/memory/types.js.map +1 -0
  351. package/dist/memory/workingSet.js +383 -0
  352. package/dist/memory/workingSet.js.map +1 -0
  353. package/dist/project/context.js +425 -0
  354. package/dist/project/context.js.map +1 -0
  355. package/dist/tools/approval.js +189 -0
  356. package/dist/tools/approval.js.map +1 -0
  357. package/dist/tools/askUser.js +103 -0
  358. package/dist/tools/askUser.js.map +1 -0
  359. package/dist/tools/atomicWrite.js +151 -0
  360. package/dist/tools/atomicWrite.js.map +1 -0
  361. package/dist/tools/backgroundShells.js +468 -0
  362. package/dist/tools/backgroundShells.js.map +1 -0
  363. package/dist/tools/captureSweep.js +77 -0
  364. package/dist/tools/captureSweep.js.map +1 -0
  365. package/dist/tools/chassisMux.js +92 -0
  366. package/dist/tools/chassisMux.js.map +1 -0
  367. package/dist/tools/checkpoints.js +328 -0
  368. package/dist/tools/checkpoints.js.map +1 -0
  369. package/dist/tools/codeIntel.js +267 -0
  370. package/dist/tools/codeIntel.js.map +1 -0
  371. package/dist/tools/deferredNative.js +121 -0
  372. package/dist/tools/deferredNative.js.map +1 -0
  373. package/dist/tools/detail.js +135 -0
  374. package/dist/tools/detail.js.map +1 -0
  375. package/dist/tools/diagnostics.js +174 -0
  376. package/dist/tools/diagnostics.js.map +1 -0
  377. package/dist/tools/edit.js +167 -0
  378. package/dist/tools/edit.js.map +1 -0
  379. package/dist/tools/editCore.js +283 -0
  380. package/dist/tools/editCore.js.map +1 -0
  381. package/dist/tools/editFile.js +183 -0
  382. package/dist/tools/editFile.js.map +1 -0
  383. package/dist/tools/editRipple.js +126 -0
  384. package/dist/tools/editRipple.js.map +1 -0
  385. package/dist/tools/editTarget.js +131 -0
  386. package/dist/tools/editTarget.js.map +1 -0
  387. package/dist/tools/editWindow.js +49 -0
  388. package/dist/tools/editWindow.js.map +1 -0
  389. package/dist/tools/eol.js +56 -0
  390. package/dist/tools/eol.js.map +1 -0
  391. package/dist/tools/exitPlan.js +175 -0
  392. package/dist/tools/exitPlan.js.map +1 -0
  393. package/dist/tools/focus.js +42 -0
  394. package/dist/tools/focus.js.map +1 -0
  395. package/dist/tools/gitignore.js +148 -0
  396. package/dist/tools/gitignore.js.map +1 -0
  397. package/dist/tools/glob.js +134 -0
  398. package/dist/tools/glob.js.map +1 -0
  399. package/dist/tools/governorTools.js +258 -0
  400. package/dist/tools/governorTools.js.map +1 -0
  401. package/dist/tools/grep.js +450 -0
  402. package/dist/tools/grep.js.map +1 -0
  403. package/dist/tools/guard.js +220 -0
  404. package/dist/tools/guard.js.map +1 -0
  405. package/dist/tools/killTree.js +215 -0
  406. package/dist/tools/killTree.js.map +1 -0
  407. package/dist/tools/listDir.js +143 -0
  408. package/dist/tools/listDir.js.map +1 -0
  409. package/dist/tools/mcpAdd.js +176 -0
  410. package/dist/tools/mcpAdd.js.map +1 -0
  411. package/dist/tools/mcpResources.js +116 -0
  412. package/dist/tools/mcpResources.js.map +1 -0
  413. package/dist/tools/mcpSearch.js +123 -0
  414. package/dist/tools/mcpSearch.js.map +1 -0
  415. package/dist/tools/multiEdit.js +168 -0
  416. package/dist/tools/multiEdit.js.map +1 -0
  417. package/dist/tools/paths.js +225 -0
  418. package/dist/tools/paths.js.map +1 -0
  419. package/dist/tools/posixShell.js +123 -0
  420. package/dist/tools/posixShell.js.map +1 -0
  421. package/dist/tools/readFile.js +371 -0
  422. package/dist/tools/readFile.js.map +1 -0
  423. package/dist/tools/readSymbol.js +145 -0
  424. package/dist/tools/readSymbol.js.map +1 -0
  425. package/dist/tools/registry.js +120 -0
  426. package/dist/tools/registry.js.map +1 -0
  427. package/dist/tools/replaceSymbol.js +141 -0
  428. package/dist/tools/replaceSymbol.js.map +1 -0
  429. package/dist/tools/results.js +15 -0
  430. package/dist/tools/results.js.map +1 -0
  431. package/dist/tools/ripgrep.js +145 -0
  432. package/dist/tools/ripgrep.js.map +1 -0
  433. package/dist/tools/runCommand.js +633 -0
  434. package/dist/tools/runCommand.js.map +1 -0
  435. package/dist/tools/saveMemory.js +102 -0
  436. package/dist/tools/saveMemory.js.map +1 -0
  437. package/dist/tools/screenshot.js +200 -0
  438. package/dist/tools/screenshot.js.map +1 -0
  439. package/dist/tools/screenshotWin.js +227 -0
  440. package/dist/tools/screenshotWin.js.map +1 -0
  441. package/dist/tools/search.js +121 -0
  442. package/dist/tools/search.js.map +1 -0
  443. package/dist/tools/sessionTools.js +187 -0
  444. package/dist/tools/sessionTools.js.map +1 -0
  445. package/dist/tools/shellCheckpoint.js +123 -0
  446. package/dist/tools/shellCheckpoint.js.map +1 -0
  447. package/dist/tools/shellLint.js +102 -0
  448. package/dist/tools/shellLint.js.map +1 -0
  449. package/dist/tools/shellTools.js +203 -0
  450. package/dist/tools/shellTools.js.map +1 -0
  451. package/dist/tools/spanCore.js +78 -0
  452. package/dist/tools/spanCore.js.map +1 -0
  453. package/dist/tools/subagent.js +224 -0
  454. package/dist/tools/subagent.js.map +1 -0
  455. package/dist/tools/subagentReport.js +114 -0
  456. package/dist/tools/subagentReport.js.map +1 -0
  457. package/dist/tools/tempSweep.js +118 -0
  458. package/dist/tools/tempSweep.js.map +1 -0
  459. package/dist/tools/todo.js +117 -0
  460. package/dist/tools/todo.js.map +1 -0
  461. package/dist/tools/types.js +2 -0
  462. package/dist/tools/types.js.map +1 -0
  463. package/dist/tools/untrusted.js +46 -0
  464. package/dist/tools/untrusted.js.map +1 -0
  465. package/dist/tools/useSkill.js +62 -0
  466. package/dist/tools/useSkill.js.map +1 -0
  467. package/dist/tools/walk.js +152 -0
  468. package/dist/tools/walk.js.map +1 -0
  469. package/dist/tools/web.js +61 -0
  470. package/dist/tools/web.js.map +1 -0
  471. package/dist/tools/webFetch.js +444 -0
  472. package/dist/tools/webFetch.js.map +1 -0
  473. package/dist/tools/webSearch.js +130 -0
  474. package/dist/tools/webSearch.js.map +1 -0
  475. package/dist/tools/workspace.js +212 -0
  476. package/dist/tools/workspace.js.map +1 -0
  477. package/dist/tools/workspaceDiscover.js +216 -0
  478. package/dist/tools/workspaceDiscover.js.map +1 -0
  479. package/dist/tools/writeFile.js +162 -0
  480. package/dist/tools/writeFile.js.map +1 -0
  481. package/package.json +74 -28
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../../src/tools/runCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { isMemoryType, MEMORY_TYPES, saveMemory as persist } from "../memory/autoMemory.js";
2
+ import { failQuietly } from "./results.js";
3
+ /** The fixed session root state files are filed under (cwd may have moved via cd). */
4
+ function projectRoot(ctx) {
5
+ return ctx.governance?.forbidden.root ?? ctx.cwd;
6
+ }
7
+ export const saveMemoryTool = {
8
+ name: "save_memory",
9
+ deferred: true,
10
+ readOnly: false,
11
+ description: "Save something to your cross-session memory so future conversations have it. " +
12
+ "Use type 'project' for context to continue this project from next time (a goal, " +
13
+ "decision, or where things stand) that isn't in the code or MINDWEAVE.md. Use 'user'/" +
14
+ "'feedback'/'reference' ONLY for genuinely UNIVERSAL, cross-project facts — who the " +
15
+ "user is, durable preferences about how they work, or an external pointer — and only " +
16
+ "when you judge it will matter beyond this one project; do not save universal facts " +
17
+ "from routine project work. Do NOT use it for things derivable from the code, git " +
18
+ "history, or MINDWEAVE.md, or for ephemeral task state. Saving is automatic and silent — " +
19
+ "it does NOT prompt the user, so just save and mention it briefly in chat. Saving the " +
20
+ "same name again updates that memory instead of duplicating it — names are matched " +
21
+ "loosely (case and punctuation are ignored, and only the first 60 characters " +
22
+ "count), so reuse the exact earlier name when you mean to revise one, and pick a " +
23
+ "name that differs EARLY when you mean a new one. You are told if a save " +
24
+ "overwrote a differently-named memory.\n" +
25
+ "Write the body for a stranger, not for this conversation: it is read back with " +
26
+ "none of the surrounding context, so name the files, commands and decisions in " +
27
+ "full rather than referring to \"the fix\" or \"what we discussed\". Only the " +
28
+ "index_line is loaded every session; the body is fetched on demand, so put the " +
29
+ "detail in the body and keep the hook short.",
30
+ parameters: {
31
+ type: "object",
32
+ additionalProperties: false,
33
+ required: ["name", "description", "type", "body", "index_line"],
34
+ properties: {
35
+ name: {
36
+ type: "string",
37
+ description: "Short topic name for the memory, e.g. 'user-role' or 'release-process'.",
38
+ },
39
+ description: {
40
+ type: "string",
41
+ description: "One specific line describing the memory — used later to judge whether it is relevant.",
42
+ },
43
+ type: {
44
+ type: "string",
45
+ enum: [...MEMORY_TYPES],
46
+ description: "user | feedback | project | reference.",
47
+ },
48
+ body: {
49
+ type: "string",
50
+ description: "The memory itself. For 'feedback' and 'project', lead with the fact/rule, then a " +
51
+ "'Why:' line and a 'How to apply:' line. Convert relative dates to absolute.",
52
+ },
53
+ index_line: {
54
+ type: "string",
55
+ description: "A one-line hook for the MEMORY.md index (kept short, under ~120 characters).",
56
+ },
57
+ },
58
+ },
59
+ async execute(args, ctx) {
60
+ const name = str(args.name);
61
+ const description = str(args.description);
62
+ const body = str(args.body);
63
+ const indexLine = str(args.index_line);
64
+ if (!name)
65
+ return failQuietly("`name` is required.");
66
+ if (!body)
67
+ return failQuietly("`body` is required — the memory needs content.");
68
+ if (!isMemoryType(args.type)) {
69
+ return failQuietly(`\`type\` must be one of: ${MEMORY_TYPES.join(", ")}.`);
70
+ }
71
+ // Save directly — no confirmation. Memory is non-destructive and the user does
72
+ // not want to be prompted; the model just keeps what's worth keeping and says so.
73
+ const saved = await persist(projectRoot(ctx), {
74
+ name,
75
+ description,
76
+ type: args.type,
77
+ body,
78
+ indexLine: indexLine || description,
79
+ });
80
+ // A name that slugs onto an existing memory's file REPLACES it. That is the one
81
+ // way saving is destructive, so it is stated rather than reported as an update.
82
+ if (saved.replaced) {
83
+ return {
84
+ output: `Saved memory '${saved.name}', but it OVERWROTE the existing memory ` +
85
+ `'${saved.replaced}' — both names reduce to the same file (${saved.file}). ` +
86
+ `If '${saved.replaced}' was still wanted, save it again under a name that ` +
87
+ `differs within its first 60 characters, and tell the user it was lost.`,
88
+ summary: `saved '${saved.name}', replaced '${saved.replaced}'`,
89
+ };
90
+ }
91
+ return {
92
+ output: saved.updated
93
+ ? `Updated memory '${saved.name}'. It will be available in future sessions.`
94
+ : `Saved memory '${saved.name}'. It will be available in future sessions.`,
95
+ summary: saved.updated ? `updated memory '${saved.name}'` : `saved memory '${saved.name}'`,
96
+ };
97
+ },
98
+ };
99
+ function str(v) {
100
+ return typeof v === "string" ? v.trim() : "";
101
+ }
102
+ //# sourceMappingURL=saveMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveMemory.js","sourceRoot":"","sources":["../../src/tools/saveMemory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * screenshot.ts — let the agent SEE a running window.
3
+ *
4
+ * This closes the loop v1.5 tried to close with process liveness. "Did the app
5
+ * come up" was answered by "the process is still alive", which is not the same
6
+ * question: a window that renders a stack trace is alive. Looking at it answers
7
+ * it properly, and the same applies to a layout that is subtly wrong, a chart
8
+ * with no data, or a dialog nobody expected.
9
+ *
10
+ * CAPTURE ONLY. There is no clicking, typing, or moving anything, and that is a
11
+ * scope decision rather than a missing feature. Seeing closes the verification
12
+ * loop; acting is a different product with a far larger risk surface, and it does
13
+ * not belong in a small core.
14
+ *
15
+ * ## Privacy is the design, not a footnote
16
+ *
17
+ * A screenshot is the one tool here that can capture things the agent was never
18
+ * pointed at — another project, an inbox, a password manager, a token sitting in
19
+ * a scrollback — and then send them to a model provider. So:
20
+ *
21
+ * - **One window, never the screen.** There is no full-desktop mode. The blast
22
+ * radius of a mistake is one window instead of everything open.
23
+ * - **The user approves the specific window, by title, before anything is
24
+ * captured.** Not after, and not once for the session.
25
+ * - **No approval channel means no capture.** A context that cannot ask (a
26
+ * sub-agent, a non-interactive run) is refused rather than defaulted to yes.
27
+ *
28
+ * ## Where the picture goes
29
+ *
30
+ * The tool returns a ref, not bytes, and the engine decides what to do with it —
31
+ * hand it to a model that can see, or tell one that can't where the file is. That
32
+ * split is `feedback-universal-core-only`: the capability is stated once and core
33
+ * degrades, rather than every tool learning which providers have eyes.
34
+ */
35
+ import { mkdtemp } from "node:fs/promises";
36
+ import { stat } from "node:fs/promises";
37
+ import { tmpdir } from "node:os";
38
+ import { join } from "node:path";
39
+ import { describeImage, isRejection } from "../memory/images.js";
40
+ import { formatBytes } from "./webFetch.js";
41
+ import { captureWindow, listWindows } from "./screenshotWin.js";
42
+ /** How many titles to name when a match fails, so the model can retry precisely. */
43
+ const MAX_LISTED = 12;
44
+ /**
45
+ * Choose the window to capture. Pure, and the whole of the matching policy.
46
+ *
47
+ * Ranked rather than first-wins, because a substring hits chrome ("Settings")
48
+ * far more often than it hits the thing meant. An exact title beats a prefix
49
+ * beats a substring, and an unambiguous winner at any tier ends it — so
50
+ * "Mindweave" picks the editor window titled exactly that even while three other
51
+ * windows mention it. A genuine tie is reported rather than guessed: capturing
52
+ * the wrong window is a privacy event, not just a wrong answer.
53
+ */
54
+ export function pickWindow(query, windows) {
55
+ if (windows.length === 0)
56
+ return { kind: "none", candidates: [] };
57
+ if (!query) {
58
+ const focused = windows.find((w) => w.foreground);
59
+ return focused ? { kind: "match", window: focused } : { kind: "ambiguous", candidates: windows };
60
+ }
61
+ const needle = query.trim().toLowerCase();
62
+ const titled = windows.map((w) => ({ w, t: w.title.toLowerCase() }));
63
+ const tiers = [
64
+ titled.filter(({ t }) => t === needle),
65
+ titled.filter(({ t }) => t.startsWith(needle)),
66
+ titled.filter(({ t }) => t.includes(needle)),
67
+ ];
68
+ for (const tier of tiers) {
69
+ if (tier.length === 1)
70
+ return { kind: "match", window: tier[0].w };
71
+ if (tier.length > 1) {
72
+ // Several equally good matches, but if exactly one has focus the user is
73
+ // looking at it, and that is a better answer than refusing.
74
+ const focused = tier.filter(({ w }) => w.foreground);
75
+ if (focused.length === 1)
76
+ return { kind: "match", window: focused[0].w };
77
+ return { kind: "ambiguous", candidates: tier.map(({ w }) => w) };
78
+ }
79
+ }
80
+ return { kind: "none", candidates: windows };
81
+ }
82
+ /** Render window titles for an error the model can act on without another call. */
83
+ export function listTitles(windows) {
84
+ if (windows.length === 0)
85
+ return "No capturable windows are open.";
86
+ const shown = windows.slice(0, MAX_LISTED);
87
+ const lines = shown.map((w) => ` - ${w.title}${w.foreground ? " (focused)" : ""}`);
88
+ const hidden = windows.length - shown.length;
89
+ if (hidden > 0)
90
+ lines.push(` … and ${hidden} more`);
91
+ return `Open windows:\n${lines.join("\n")}`;
92
+ }
93
+ export const screenshot = {
94
+ name: "screenshot",
95
+ deferred: true,
96
+ // An observation: it changes nothing about the project. The privacy gate below
97
+ // is explicit and runs whether or not the session is in a guarded mode.
98
+ readOnly: true,
99
+ description: "Take a picture of one open window and look at it. Use it to check that an app " +
100
+ "actually came up and renders correctly — a running process is not proof of that — " +
101
+ "or to see a layout, a chart, or an error dialog for yourself. " +
102
+ "Pass `window` with part of the window's title; leave it out to capture the window " +
103
+ "the user is currently focused on. " +
104
+ "The user is asked to approve the specific window first, so call it when looking " +
105
+ "will genuinely tell you something, not as a routine check. " +
106
+ "Windows only, one window at a time — the whole screen is never captured, and " +
107
+ "nothing can be clicked or typed.",
108
+ parameters: {
109
+ type: "object",
110
+ additionalProperties: false,
111
+ required: [],
112
+ properties: {
113
+ window: {
114
+ type: "string",
115
+ description: "Part of the target window's title, e.g. \"Vite\" or \"localhost\". " +
116
+ "Omit to capture whichever window has focus.",
117
+ },
118
+ },
119
+ },
120
+ async execute(args, ctx) {
121
+ const query = typeof args.window === "string" && args.window.trim() ? args.window.trim() : undefined;
122
+ if (process.platform !== "win32") {
123
+ return degrade(`Screenshots are Windows-only for now, and this is ${process.platform}. ` +
124
+ `Ask the user to describe what they see, or check the app another way.`, "screenshot unsupported on this platform");
125
+ }
126
+ // No way to ask means no capture. A sub-agent or a non-interactive run must not
127
+ // silently inherit permission to photograph the user's desktop.
128
+ if (!ctx.requestApproval) {
129
+ return degrade("Cannot take a screenshot from here: capturing the user's screen needs their " +
130
+ "approval and there is no way to ask in this context. Ask the user to run it " +
131
+ "in the main session, or verify another way.", "cannot ask to screenshot");
132
+ }
133
+ let windows;
134
+ try {
135
+ windows = await listWindows(ctx.abortSignal);
136
+ }
137
+ catch (error) {
138
+ return fail(`Could not list open windows: ${message(error)}`);
139
+ }
140
+ const pick = pickWindow(query, windows);
141
+ if (pick.kind === "none") {
142
+ return fail(query
143
+ ? `No open window's title contains "${query}". ${listTitles(pick.candidates)}`
144
+ : `There is no window to capture. ${listTitles(pick.candidates)}`);
145
+ }
146
+ if (pick.kind === "ambiguous") {
147
+ return fail(`"${query ?? "(focused window)"}" matches ${pick.candidates.length} windows, so it is not clear ` +
148
+ `which to capture. Name one more precisely:\n${listTitles(pick.candidates)}`);
149
+ }
150
+ const target = pick.window;
151
+ const choice = await ctx.requestApproval(`Take a screenshot of "${target.title}"? The image is sent to the model.`, ["Yes, capture it", "No"]);
152
+ if (!choice.startsWith("Yes")) {
153
+ return degrade(`The user declined the screenshot of "${target.title}". Do not ask again for the ` +
154
+ `same window; verify another way or ask them what they see.`, "screenshot declined");
155
+ }
156
+ try {
157
+ const dir = await mkdtemp(join(tmpdir(), "mindweave-shot-"));
158
+ const path = join(dir, `${safeName(target.title)}.png`);
159
+ const size = await captureWindow(target.handle, path, ctx.abortSignal);
160
+ const bytes = (await stat(path)).size;
161
+ // The same validation a user's attachment goes through — caps and dimension
162
+ // limits live in one place rather than being re-implemented per producer.
163
+ const ref = await describeImage(path, bytes);
164
+ if (isRejection(ref))
165
+ return fail(`Captured "${target.title}" but cannot use the image: ${ref.reason}`);
166
+ return {
167
+ output: `Captured "${target.title}" (${size.width}x${size.height}). ` +
168
+ `The image follows this result — look at it and say what you see.`,
169
+ summary: `screenshot of ${target.title} (${size.width}x${size.height})`,
170
+ // The facts about the capture itself, which the model's own output does not
171
+ // carry: what was taken, how big it is, and WHEN — the timestamp is what tells
172
+ // the user whether this is the state they just put the window into.
173
+ detail: [
174
+ `${size.width}×${size.height} • PNG • ${formatBytes(bytes)}`,
175
+ `Captured: ${new Date().toTimeString().slice(0, 8)}`,
176
+ ].join("\n"),
177
+ images: [ref],
178
+ };
179
+ }
180
+ catch (error) {
181
+ return fail(`Could not capture "${target.title}": ${message(error)}`);
182
+ }
183
+ },
184
+ };
185
+ /** A window title, reduced to something safe to put in a filename. */
186
+ export function safeName(title) {
187
+ const cleaned = title.replace(/[^a-z0-9]+/gi, "-").replace(/^-+|-+$/g, "").slice(0, 40);
188
+ return cleaned.toLowerCase() || "window";
189
+ }
190
+ function message(error) {
191
+ return error instanceof Error ? error.message : String(error);
192
+ }
193
+ /** Not an error: nothing broke and retrying will not change the answer. */
194
+ function degrade(output, summary) {
195
+ return { output, summary };
196
+ }
197
+ function fail(text) {
198
+ return { output: `Error: ${text}`, isError: true, summary: text.slice(0, 80) };
199
+ }
200
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AAEjF,oFAAoF;AACpF,MAAM,UAAU,GAAG,EAAE,CAAC;AAQtB;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAyB,EAAE,OAAqB;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAElE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACnG,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC7C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,yEAAyE;YACzE,4DAA4D;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,iCAAiC,CAAC;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,OAAO,CAAC,CAAC;IACrD,OAAO,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,IAAI;IACd,+EAA+E;IAC/E,wEAAwE;IACxE,QAAQ,EAAE,IAAI;IACd,WAAW,EACT,gFAAgF;QAChF,oFAAoF;QACpF,gEAAgE;QAChE,oFAAoF;QACpF,oCAAoC;QACpC,kFAAkF;QAClF,6DAA6D;QAC7D,+EAA+E;QAC/E,kCAAkC;IACpC,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qEAAqE;oBACrE,6CAA6C;aAChD;SACF;KACF;IAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAErG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,OAAO,CACZ,qDAAqD,OAAO,CAAC,QAAQ,IAAI;gBACvE,uEAAuE,EACzE,yCAAyC,CAC1C,CAAC;QACJ,CAAC;QAED,gFAAgF;QAChF,gEAAgE;QAChE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,OAAO,CACZ,8EAA8E;gBAC5E,8EAA8E;gBAC9E,6CAA6C,EAC/C,0BAA0B,CAC3B,CAAC;QACJ,CAAC;QAED,IAAI,OAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,gCAAgC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CACT,KAAK;gBACH,CAAC,CAAC,oCAAoC,KAAK,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC9E,CAAC,CAAC,kCAAkC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,CACT,IAAI,KAAK,IAAI,kBAAkB,aAAa,IAAI,CAAC,UAAU,CAAC,MAAM,+BAA+B;gBAC/F,+CAA+C,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CACtC,yBAAyB,MAAM,CAAC,KAAK,oCAAoC,EACzE,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAC1B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CACZ,wCAAwC,MAAM,CAAC,KAAK,8BAA8B;gBAChF,4DAA4D,EAC9D,qBAAqB,CACtB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAEtC,4EAA4E;YAC5E,0EAA0E;YAC1E,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,WAAW,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,aAAa,MAAM,CAAC,KAAK,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAExG,OAAO;gBACL,MAAM,EACJ,aAAa,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK;oBAC7D,kEAAkE;gBACpE,OAAO,EAAE,iBAAiB,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG;gBACvE,4EAA4E;gBAC5E,+EAA+E;gBAC/E,oEAAoE;gBACpE,MAAM,EAAE;oBACN,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,YAAY,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC5D,aAAa,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;iBACrD,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,CAAC,GAAG,CAAC;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,sBAAsB,MAAM,CAAC,KAAK,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;CACF,CAAC;AAEF,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,2EAA2E;AAC3E,SAAS,OAAO,CAAC,MAAc,EAAE,OAAe;IAC9C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * screenshotWin.ts — the Windows half of `screenshot`.
3
+ *
4
+ * Capturing a window on Windows is a pile of Win32 detail, so it lives here and
5
+ * the tool file stays about policy (which window, who approved it, what the model
6
+ * is told). Zero dependencies: the capture runs through PowerShell against .NET,
7
+ * both of which ship with the OS. An npm package for this would mean a native
8
+ * binary per platform for a feature that is Windows-only by design.
9
+ *
10
+ * The script is a STRING rather than a `.ps1` on disk because `tsc` copies no
11
+ * assets — a separate file would work from source and be missing from `dist/`,
12
+ * which is the build the user actually runs.
13
+ *
14
+ * Three Win32 details that are wrong-by-default and each cost a real bug:
15
+ *
16
+ * 1. `SetProcessDPIAware` first, or every measurement is virtualized. Without it
17
+ * a window on a scaled display reports logical pixels while the bitmap is in
18
+ * physical ones, and the capture comes out cropped or padded.
19
+ * 2. `PrintWindow` with PW_RENDERFULLCONTENT (2), not 0. The flag exists because
20
+ * hardware-composited windows — Chrome, Electron, VS Code, most terminals —
21
+ * capture as an empty rectangle without it. It is Windows 8.1+, which the
22
+ * supported range already exceeds.
23
+ * 3. `DwmGetWindowAttribute(DWMWA_EXTENDED_FRAME_BOUNDS)` for bounds, not
24
+ * `GetWindowRect`. Since Windows 10 the latter includes an invisible resize
25
+ * border, so cropping to it leaves a transparent margin around every capture.
26
+ *
27
+ * PrintWindow still fails on some windows (a few renderers refuse to draw into a
28
+ * caller-supplied DC), so a blank result falls back to copying that rectangle off
29
+ * the screen. That fallback captures whatever is physically on top, which is why
30
+ * the tool asks for approval BEFORE any of this runs.
31
+ */
32
+ import { spawn } from "node:child_process";
33
+ import { mkdtemp, writeFile } from "node:fs/promises";
34
+ import { tmpdir } from "node:os";
35
+ import { join } from "node:path";
36
+ const PS_TIMEOUT_MS = 20_000;
37
+ const SCRIPT = String.raw `
38
+ param([string]$Mode = "list", [string]$Handle = "", [string]$Out = "")
39
+ $ErrorActionPreference = "Stop"
40
+ Add-Type -AssemblyName System.Drawing
41
+
42
+ Add-Type -ReferencedAssemblies System.Drawing -TypeDefinition @"
43
+ using System;
44
+ using System.Collections.Generic;
45
+ using System.Drawing;
46
+ using System.Drawing.Imaging;
47
+ using System.Runtime.InteropServices;
48
+ using System.Text;
49
+
50
+ public static class MwCapture {
51
+ delegate bool EnumProc(IntPtr hWnd, IntPtr lParam);
52
+ [DllImport("user32.dll")] static extern bool EnumWindows(EnumProc cb, IntPtr l);
53
+ [DllImport("user32.dll")] static extern bool IsWindowVisible(IntPtr h);
54
+ [DllImport("user32.dll")] static extern bool IsIconic(IntPtr h);
55
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern int GetWindowTextLength(IntPtr h);
56
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern int GetWindowText(IntPtr h, StringBuilder s, int n);
57
+ [DllImport("user32.dll")] static extern bool PrintWindow(IntPtr h, IntPtr hdc, uint flags);
58
+ [DllImport("user32.dll")] static extern bool SetProcessDPIAware();
59
+ [DllImport("user32.dll")] static extern bool GetWindowRect(IntPtr h, out RECT r);
60
+ [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow();
61
+ [DllImport("dwmapi.dll")] static extern int DwmGetWindowAttribute(IntPtr h, int attr, out RECT r, int size);
62
+
63
+ [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left, Top, Right, Bottom; }
64
+
65
+ public static void Dpi() { SetProcessDPIAware(); }
66
+
67
+ // DWMWA_EXTENDED_FRAME_BOUNDS. GetWindowRect includes an invisible border on
68
+ // Windows 10+, so it is the fallback rather than the first choice.
69
+ static bool Bounds(IntPtr h, out RECT r) {
70
+ if (DwmGetWindowAttribute(h, 9, out r, Marshal.SizeOf(typeof(RECT))) == 0
71
+ && r.Right > r.Left && r.Bottom > r.Top) return true;
72
+ return GetWindowRect(h, out r);
73
+ }
74
+
75
+ public static List<string> List() {
76
+ var found = new List<string>();
77
+ IntPtr fg = GetForegroundWindow();
78
+ EnumWindows(delegate(IntPtr h, IntPtr l) {
79
+ if (!IsWindowVisible(h) || IsIconic(h)) return true;
80
+ int len = GetWindowTextLength(h);
81
+ if (len == 0) return true;
82
+ var sb = new StringBuilder(len + 1);
83
+ GetWindowText(h, sb, sb.Capacity);
84
+ string title = sb.ToString().Trim();
85
+ if (title.Length == 0) return true;
86
+ RECT r;
87
+ if (!Bounds(h, out r)) return true;
88
+ // Tool windows and tray hosts are real but never what anyone means.
89
+ if (r.Right - r.Left < 120 || r.Bottom - r.Top < 120) return true;
90
+ // The leading marker is how the caller knows which window the user is
91
+ // actually looking at, so it can name it when asking permission.
92
+ found.Add((h == fg ? "*" : "-") + h.ToInt64().ToString() + "\t" + title);
93
+ return true;
94
+ }, IntPtr.Zero);
95
+ return found;
96
+ }
97
+
98
+ public static string Capture(IntPtr h, string path) {
99
+ RECT r;
100
+ if (!Bounds(h, out r)) return "ERR could not measure the window";
101
+ int w = r.Right - r.Left, ht = r.Bottom - r.Top;
102
+ if (w <= 0 || ht <= 0) return "ERR the window has no visible area";
103
+ using (var bmp = new Bitmap(w, ht)) {
104
+ bool drew = false;
105
+ using (var g = Graphics.FromImage(bmp)) {
106
+ IntPtr hdc = g.GetHdc();
107
+ drew = PrintWindow(h, hdc, 2); // PW_RENDERFULLCONTENT
108
+ g.ReleaseHdc(hdc);
109
+ }
110
+ if (!drew || Blank(bmp)) {
111
+ using (var g = Graphics.FromImage(bmp)) {
112
+ g.CopyFromScreen(r.Left, r.Top, 0, 0, new Size(w, ht));
113
+ }
114
+ }
115
+ bmp.Save(path, ImageFormat.Png);
116
+ return "OK " + w + " " + ht;
117
+ }
118
+ }
119
+
120
+ // PrintWindow can report success and draw nothing. Sampling three corners of a
121
+ // fully transparent bitmap is enough to tell that apart from a real capture.
122
+ static bool Blank(Bitmap b) {
123
+ if (b.Width < 4 || b.Height < 4) return false;
124
+ return b.GetPixel(1, 1).A == 0
125
+ && b.GetPixel(b.Width / 2, b.Height / 2).A == 0
126
+ && b.GetPixel(b.Width - 2, b.Height - 2).A == 0;
127
+ }
128
+ }
129
+ "@
130
+
131
+ # Before any measurement, or every rectangle is in the wrong coordinate space.
132
+ [MwCapture]::Dpi() | Out-Null
133
+
134
+ if ($Mode -eq "list") {
135
+ [MwCapture]::List() | ForEach-Object { Write-Output $_ }
136
+ exit 0
137
+ }
138
+
139
+ if ($Mode -eq "capture") {
140
+ $h = if ($Handle -eq "foreground") { [MwCapture]::GetForegroundWindow() } else { [IntPtr][Int64]$Handle }
141
+ if ($h -eq [IntPtr]::Zero) { Write-Output "ERR no such window"; exit 1 }
142
+ $r = [MwCapture]::Capture($h, $Out)
143
+ Write-Output $r
144
+ if ($r.StartsWith("ERR")) { exit 1 }
145
+ exit 0
146
+ }
147
+
148
+ Write-Output "ERR unknown mode"
149
+ exit 1
150
+ `;
151
+ let scriptPath = null;
152
+ /** Write the capture script to a temp file once per process. */
153
+ async function ensureScript() {
154
+ if (scriptPath)
155
+ return scriptPath;
156
+ const dir = await mkdtemp(join(tmpdir(), "mindweave-shot-"));
157
+ const path = join(dir, "capture.ps1");
158
+ await writeFile(path, SCRIPT, "utf8");
159
+ scriptPath = path;
160
+ return path;
161
+ }
162
+ /** Run the script in one of its two modes. Rejects with the script's own message. */
163
+ async function runScript(args, signal) {
164
+ const script = await ensureScript();
165
+ return await new Promise((resolve, reject) => {
166
+ const child = spawn("powershell.exe", ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-File", script, ...args], { windowsHide: true });
167
+ let out = "";
168
+ let err = "";
169
+ const timer = setTimeout(() => {
170
+ child.kill();
171
+ reject(new Error(`the capture took longer than ${PS_TIMEOUT_MS / 1000}s`));
172
+ }, PS_TIMEOUT_MS);
173
+ const onAbort = () => child.kill();
174
+ signal?.addEventListener("abort", onAbort, { once: true });
175
+ child.stdout.on("data", (d) => (out += d.toString()));
176
+ child.stderr.on("data", (d) => (err += d.toString()));
177
+ child.on("error", (e) => {
178
+ clearTimeout(timer);
179
+ signal?.removeEventListener("abort", onAbort);
180
+ reject(e);
181
+ });
182
+ child.on("close", (code) => {
183
+ clearTimeout(timer);
184
+ signal?.removeEventListener("abort", onAbort);
185
+ if (code === 0)
186
+ resolve(out);
187
+ else
188
+ reject(new Error(firstLine(out) || firstLine(err) || `PowerShell exited ${code}`));
189
+ });
190
+ });
191
+ }
192
+ function firstLine(text) {
193
+ return text.split(/\r?\n/).find((l) => l.trim())?.trim().replace(/^ERR\s*/, "") ?? "";
194
+ }
195
+ /**
196
+ * Parse the script's `<*|->handle<TAB>title` lines. Pure, so it can be tested
197
+ * without a desktop — which matters because CI has no interactive session at all.
198
+ * Anything that doesn't match the shape is skipped rather than guessed at.
199
+ */
200
+ export function parseWindowList(stdout) {
201
+ const windows = [];
202
+ for (const line of stdout.split(/\r?\n/)) {
203
+ const tab = line.indexOf("\t");
204
+ if (tab <= 0)
205
+ continue;
206
+ const marked = line.slice(0, tab).trim();
207
+ const title = line.slice(tab + 1).trim();
208
+ const match = /^([*-])(\d+)$/.exec(marked);
209
+ if (!match || !title)
210
+ continue;
211
+ windows.push({ handle: match[2], title, foreground: match[1] === "*" });
212
+ }
213
+ return windows;
214
+ }
215
+ /** Every visible, non-minimised, reasonably sized top-level window. */
216
+ export async function listWindows(signal) {
217
+ return parseWindowList(await runScript(["-Mode", "list"], signal));
218
+ }
219
+ /** Capture one window to `outPath`. `handle` may be the literal "foreground". */
220
+ export async function captureWindow(handle, outPath, signal) {
221
+ const out = await runScript(["-Mode", "capture", "-Handle", handle, "-Out", outPath], signal);
222
+ const match = /OK\s+(\d+)\s+(\d+)/.exec(out);
223
+ if (!match)
224
+ throw new Error(firstLine(out) || "the capture produced no image");
225
+ return { width: Number(match[1]), height: Number(match[2]) };
226
+ }
227
+ //# sourceMappingURL=screenshotWin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotWin.js","sourceRoot":"","sources":["../../src/tools/screenshotWin.ts"],"names":[],"mappings":"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"}