@zenalexa/unicli 0.213.1 → 0.215.0

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 (512) hide show
  1. package/AGENTS.md +10 -10
  2. package/README.md +40 -27
  3. package/README.zh-CN.md +36 -36
  4. package/dist/adapters/_electron/desktop-shared.d.ts +12 -0
  5. package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -0
  6. package/dist/adapters/_electron/desktop-shared.js +312 -0
  7. package/dist/adapters/_electron/desktop-shared.js.map +1 -0
  8. package/dist/adapters/electron-desktop/electron-desktop.d.ts +9 -0
  9. package/dist/adapters/electron-desktop/electron-desktop.d.ts.map +1 -0
  10. package/dist/adapters/electron-desktop/electron-desktop.js +56 -0
  11. package/dist/adapters/electron-desktop/electron-desktop.js.map +1 -0
  12. package/dist/browser/adapter-authoring.d.ts +20 -0
  13. package/dist/browser/adapter-authoring.d.ts.map +1 -0
  14. package/dist/browser/adapter-authoring.js +68 -0
  15. package/dist/browser/adapter-authoring.js.map +1 -0
  16. package/dist/browser/analyze.d.ts +54 -0
  17. package/dist/browser/analyze.d.ts.map +1 -0
  18. package/dist/browser/analyze.js +205 -0
  19. package/dist/browser/analyze.js.map +1 -0
  20. package/dist/browser/bridge.d.ts +1 -1
  21. package/dist/browser/bridge.d.ts.map +1 -1
  22. package/dist/browser/bridge.js +2 -0
  23. package/dist/browser/bridge.js.map +1 -1
  24. package/dist/browser/daemon-client.d.ts.map +1 -1
  25. package/dist/browser/daemon-client.js +12 -1
  26. package/dist/browser/daemon-client.js.map +1 -1
  27. package/dist/browser/network-cache.d.ts +58 -0
  28. package/dist/browser/network-cache.d.ts.map +1 -0
  29. package/dist/browser/network-cache.js +146 -0
  30. package/dist/browser/network-cache.js.map +1 -0
  31. package/dist/browser/page.d.ts +1 -1
  32. package/dist/browser/page.d.ts.map +1 -1
  33. package/dist/browser/page.js +2 -1
  34. package/dist/browser/page.js.map +1 -1
  35. package/dist/browser/protocol.d.ts +6 -2
  36. package/dist/browser/protocol.d.ts.map +1 -1
  37. package/dist/browser/site-memory.d.ts +57 -0
  38. package/dist/browser/site-memory.d.ts.map +1 -0
  39. package/dist/browser/site-memory.js +127 -0
  40. package/dist/browser/site-memory.js.map +1 -0
  41. package/dist/browser/verify-fixture.d.ts +30 -0
  42. package/dist/browser/verify-fixture.d.ts.map +1 -0
  43. package/dist/browser/verify-fixture.js +168 -0
  44. package/dist/browser/verify-fixture.js.map +1 -0
  45. package/dist/browser/workspace.d.ts +8 -0
  46. package/dist/browser/workspace.d.ts.map +1 -0
  47. package/dist/browser/workspace.js +15 -0
  48. package/dist/browser/workspace.js.map +1 -0
  49. package/dist/cli.d.ts.map +1 -1
  50. package/dist/cli.js +11 -2
  51. package/dist/cli.js.map +1 -1
  52. package/dist/commands/browser-adapter-authoring.d.ts +3 -0
  53. package/dist/commands/browser-adapter-authoring.d.ts.map +1 -0
  54. package/dist/commands/browser-adapter-authoring.js +206 -0
  55. package/dist/commands/browser-adapter-authoring.js.map +1 -0
  56. package/dist/commands/browser-authoring-operator.d.ts +3 -0
  57. package/dist/commands/browser-authoring-operator.d.ts.map +1 -0
  58. package/dist/commands/browser-authoring-operator.js +110 -0
  59. package/dist/commands/browser-authoring-operator.js.map +1 -0
  60. package/dist/commands/browser-operator-runtime.d.ts +38 -0
  61. package/dist/commands/browser-operator-runtime.d.ts.map +1 -0
  62. package/dist/commands/browser-operator-runtime.js +281 -0
  63. package/dist/commands/browser-operator-runtime.js.map +1 -0
  64. package/dist/commands/browser-operator.d.ts +6 -0
  65. package/dist/commands/browser-operator.d.ts.map +1 -0
  66. package/dist/commands/browser-operator.js +374 -0
  67. package/dist/commands/browser-operator.js.map +1 -0
  68. package/dist/commands/browser.d.ts.map +1 -1
  69. package/dist/commands/browser.js +72 -1
  70. package/dist/commands/browser.js.map +1 -1
  71. package/dist/commands/daemon.d.ts.map +1 -1
  72. package/dist/commands/daemon.js +40 -4
  73. package/dist/commands/daemon.js.map +1 -1
  74. package/dist/commands/describe.d.ts +26 -0
  75. package/dist/commands/describe.d.ts.map +1 -0
  76. package/dist/commands/describe.js +230 -0
  77. package/dist/commands/describe.js.map +1 -0
  78. package/dist/commands/dev.js +1 -1
  79. package/dist/commands/dev.js.map +1 -1
  80. package/dist/commands/dispatch.d.ts +14 -3
  81. package/dist/commands/dispatch.d.ts.map +1 -1
  82. package/dist/commands/dispatch.js +141 -81
  83. package/dist/commands/dispatch.js.map +1 -1
  84. package/dist/commands/explore.d.ts.map +1 -1
  85. package/dist/commands/explore.js +4 -1
  86. package/dist/commands/explore.js.map +1 -1
  87. package/dist/commands/generate.d.ts.map +1 -1
  88. package/dist/commands/generate.js +4 -1
  89. package/dist/commands/generate.js.map +1 -1
  90. package/dist/commands/health.d.ts.map +1 -1
  91. package/dist/commands/health.js +1 -1
  92. package/dist/commands/health.js.map +1 -1
  93. package/dist/commands/mcp.d.ts.map +1 -1
  94. package/dist/commands/mcp.js +14 -14
  95. package/dist/commands/mcp.js.map +1 -1
  96. package/dist/commands/migrate-schema.d.ts.map +1 -1
  97. package/dist/commands/migrate-schema.js +10 -0
  98. package/dist/commands/migrate-schema.js.map +1 -1
  99. package/dist/commands/operate.d.ts +4 -3
  100. package/dist/commands/operate.d.ts.map +1 -1
  101. package/dist/commands/operate.js +8 -483
  102. package/dist/commands/operate.js.map +1 -1
  103. package/dist/commands/record.d.ts.map +1 -1
  104. package/dist/commands/record.js +2 -1
  105. package/dist/commands/record.js.map +1 -1
  106. package/dist/commands/search.js +1 -1
  107. package/dist/commands/search.js.map +1 -1
  108. package/dist/commands/skills.d.ts.map +1 -1
  109. package/dist/commands/skills.js +2 -2
  110. package/dist/commands/skills.js.map +1 -1
  111. package/dist/commands/synthesize.d.ts.map +1 -1
  112. package/dist/commands/synthesize.js +33 -3
  113. package/dist/commands/synthesize.js.map +1 -1
  114. package/dist/constants.d.ts +2 -0
  115. package/dist/constants.d.ts.map +1 -1
  116. package/dist/constants.js +2 -0
  117. package/dist/constants.js.map +1 -1
  118. package/dist/discovery/aliases.d.ts.map +1 -1
  119. package/dist/discovery/aliases.js +76 -1
  120. package/dist/discovery/aliases.js.map +1 -1
  121. package/dist/discovery/loader.d.ts +8 -0
  122. package/dist/discovery/loader.d.ts.map +1 -1
  123. package/dist/discovery/loader.js +25 -2
  124. package/dist/discovery/loader.js.map +1 -1
  125. package/dist/electron-apps.d.ts +22 -0
  126. package/dist/electron-apps.d.ts.map +1 -1
  127. package/dist/electron-apps.js +324 -0
  128. package/dist/electron-apps.js.map +1 -1
  129. package/dist/engine/args.d.ts +83 -0
  130. package/dist/engine/args.d.ts.map +1 -0
  131. package/dist/engine/args.js +260 -0
  132. package/dist/engine/args.js.map +1 -0
  133. package/dist/engine/download.d.ts.map +1 -1
  134. package/dist/engine/download.js +12 -5
  135. package/dist/engine/download.js.map +1 -1
  136. package/dist/engine/executor.d.ts +20 -1
  137. package/dist/engine/executor.d.ts.map +1 -1
  138. package/dist/engine/executor.js +11 -2
  139. package/dist/engine/executor.js.map +1 -1
  140. package/dist/engine/harden.d.ts +48 -0
  141. package/dist/engine/harden.d.ts.map +1 -0
  142. package/dist/engine/harden.js +327 -0
  143. package/dist/engine/harden.js.map +1 -0
  144. package/dist/engine/invoke.d.ts +16 -0
  145. package/dist/engine/invoke.d.ts.map +1 -0
  146. package/dist/engine/invoke.js +15 -0
  147. package/dist/engine/invoke.js.map +1 -0
  148. package/dist/engine/kernel/compile.d.ts +30 -0
  149. package/dist/engine/kernel/compile.d.ts.map +1 -0
  150. package/dist/engine/kernel/compile.js +167 -0
  151. package/dist/engine/kernel/compile.js.map +1 -0
  152. package/dist/engine/kernel/execute.d.ts +35 -0
  153. package/dist/engine/kernel/execute.d.ts.map +1 -0
  154. package/dist/engine/kernel/execute.js +221 -0
  155. package/dist/engine/kernel/execute.js.map +1 -0
  156. package/dist/engine/kernel/types.d.ts +49 -0
  157. package/dist/engine/kernel/types.d.ts.map +1 -0
  158. package/dist/engine/kernel/types.js +9 -0
  159. package/dist/engine/kernel/types.js.map +1 -0
  160. package/dist/engine/kernel/ulid.d.ts +21 -0
  161. package/dist/engine/kernel/ulid.d.ts.map +1 -0
  162. package/dist/engine/kernel/ulid.js +76 -0
  163. package/dist/engine/kernel/ulid.js.map +1 -0
  164. package/dist/engine/repair/engine.js +2 -2
  165. package/dist/engine/repair/engine.js.map +1 -1
  166. package/dist/engine/steps/desktop-ax.d.ts +10 -0
  167. package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
  168. package/dist/engine/steps/desktop-ax.js +20 -0
  169. package/dist/engine/steps/desktop-ax.js.map +1 -1
  170. package/dist/engine/steps/exec.d.ts +1 -1
  171. package/dist/engine/steps/exec.d.ts.map +1 -1
  172. package/dist/engine/steps/exec.js +20 -1
  173. package/dist/engine/steps/exec.js.map +1 -1
  174. package/dist/engine/steps/write-temp.js +1 -1
  175. package/dist/engine/steps/write-temp.js.map +1 -1
  176. package/dist/engine/template.d.ts.map +1 -1
  177. package/dist/engine/template.js +21 -2
  178. package/dist/engine/template.js.map +1 -1
  179. package/dist/manifest-compact.txt +8 -7
  180. package/dist/manifest-search.json +1 -1
  181. package/dist/manifest.json +2161 -171
  182. package/dist/mcp/dispatch.d.ts +46 -0
  183. package/dist/mcp/dispatch.d.ts.map +1 -0
  184. package/dist/mcp/dispatch.js +109 -0
  185. package/dist/mcp/dispatch.js.map +1 -0
  186. package/dist/mcp/handler.d.ts +30 -0
  187. package/dist/mcp/handler.d.ts.map +1 -0
  188. package/dist/mcp/handler.js +293 -0
  189. package/dist/mcp/handler.js.map +1 -0
  190. package/dist/mcp/http-transport.d.ts +16 -0
  191. package/dist/mcp/http-transport.d.ts.map +1 -0
  192. package/dist/mcp/http-transport.js +121 -0
  193. package/dist/mcp/http-transport.js.map +1 -0
  194. package/dist/mcp/server.d.ts +17 -33
  195. package/dist/mcp/server.d.ts.map +1 -1
  196. package/dist/mcp/server.js +31 -742
  197. package/dist/mcp/server.js.map +1 -1
  198. package/dist/mcp/sse-transport.js.map +1 -1
  199. package/dist/mcp/streamable-http/handle-post.d.ts +23 -0
  200. package/dist/mcp/streamable-http/handle-post.d.ts.map +1 -0
  201. package/dist/mcp/streamable-http/handle-post.js +357 -0
  202. package/dist/mcp/streamable-http/handle-post.js.map +1 -0
  203. package/dist/mcp/streamable-http/index.d.ts +45 -0
  204. package/dist/mcp/streamable-http/index.d.ts.map +1 -0
  205. package/dist/mcp/streamable-http/index.js +150 -0
  206. package/dist/mcp/streamable-http/index.js.map +1 -0
  207. package/dist/mcp/streamable-http/session.d.ts +85 -0
  208. package/dist/mcp/streamable-http/session.d.ts.map +1 -0
  209. package/dist/mcp/streamable-http/session.js +104 -0
  210. package/dist/mcp/streamable-http/session.js.map +1 -0
  211. package/dist/mcp/streamable-http.d.ts +7 -85
  212. package/dist/mcp/streamable-http.d.ts.map +1 -1
  213. package/dist/mcp/streamable-http.js +6 -568
  214. package/dist/mcp/streamable-http.js.map +1 -1
  215. package/dist/mcp/tools.d.ts +58 -0
  216. package/dist/mcp/tools.d.ts.map +1 -0
  217. package/dist/mcp/tools.js +241 -0
  218. package/dist/mcp/tools.js.map +1 -0
  219. package/dist/output/envelope.d.ts +30 -5
  220. package/dist/output/envelope.d.ts.map +1 -1
  221. package/dist/output/envelope.js +7 -5
  222. package/dist/output/envelope.js.map +1 -1
  223. package/dist/output/formatter.d.ts +2 -2
  224. package/dist/output/formatter.js +3 -3
  225. package/dist/output/formatter.js.map +1 -1
  226. package/dist/output/next-actions.d.ts +18 -0
  227. package/dist/output/next-actions.d.ts.map +1 -0
  228. package/dist/output/next-actions.js +64 -0
  229. package/dist/output/next-actions.js.map +1 -0
  230. package/dist/output/projection.d.ts +93 -0
  231. package/dist/output/projection.d.ts.map +1 -0
  232. package/dist/output/projection.js +255 -0
  233. package/dist/output/projection.js.map +1 -0
  234. package/dist/protocol/acp-helpers.d.ts +32 -0
  235. package/dist/protocol/acp-helpers.d.ts.map +1 -0
  236. package/dist/protocol/acp-helpers.js +175 -0
  237. package/dist/protocol/acp-helpers.js.map +1 -0
  238. package/dist/protocol/acp.d.ts +2 -27
  239. package/dist/protocol/acp.d.ts.map +1 -1
  240. package/dist/protocol/acp.js +7 -170
  241. package/dist/protocol/acp.js.map +1 -1
  242. package/dist/transport/adapters/cua.d.ts +9 -10
  243. package/dist/transport/adapters/cua.d.ts.map +1 -1
  244. package/dist/transport/adapters/cua.js +22 -24
  245. package/dist/transport/adapters/cua.js.map +1 -1
  246. package/dist/transport/adapters/desktop-atspi.d.ts +1 -1
  247. package/dist/transport/adapters/desktop-atspi.js +2 -2
  248. package/dist/transport/adapters/desktop-atspi.js.map +1 -1
  249. package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts +11 -0
  250. package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts.map +1 -0
  251. package/dist/transport/adapters/desktop-ax-background-click-swift.js +136 -0
  252. package/dist/transport/adapters/desktop-ax-background-click-swift.js.map +1 -0
  253. package/dist/transport/adapters/desktop-ax-background-click.d.ts +4 -0
  254. package/dist/transport/adapters/desktop-ax-background-click.d.ts.map +1 -0
  255. package/dist/transport/adapters/desktop-ax-background-click.js +70 -0
  256. package/dist/transport/adapters/desktop-ax-background-click.js.map +1 -0
  257. package/dist/transport/adapters/desktop-ax-swift.d.ts +56 -0
  258. package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -0
  259. package/dist/transport/adapters/desktop-ax-swift.js +458 -0
  260. package/dist/transport/adapters/desktop-ax-swift.js.map +1 -0
  261. package/dist/transport/adapters/desktop-ax.d.ts +14 -0
  262. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
  263. package/dist/transport/adapters/desktop-ax.js +262 -32
  264. package/dist/transport/adapters/desktop-ax.js.map +1 -1
  265. package/dist/transport/adapters/desktop-uia.d.ts +1 -1
  266. package/dist/transport/adapters/desktop-uia.js +2 -2
  267. package/dist/transport/adapters/desktop-uia.js.map +1 -1
  268. package/dist/transport/adapters/http.js +1 -1
  269. package/dist/transport/adapters/http.js.map +1 -1
  270. package/dist/transport/capability.d.ts +1 -1
  271. package/dist/transport/capability.d.ts.map +1 -1
  272. package/dist/transport/capability.js +6 -1
  273. package/dist/transport/capability.js.map +1 -1
  274. package/dist/types.d.ts +32 -0
  275. package/dist/types.d.ts.map +1 -1
  276. package/dist/types.js.map +1 -1
  277. package/package.json +14 -3
  278. package/src/adapters/1688/item.yaml +1 -0
  279. package/src/adapters/1688/store.yaml +1 -0
  280. package/src/adapters/36kr/article.yaml +1 -0
  281. package/src/adapters/_electron/desktop-shared.ts +383 -0
  282. package/src/adapters/amazon/bestsellers.yaml +2 -0
  283. package/src/adapters/amazon/movers-shakers.yaml +2 -0
  284. package/src/adapters/amazon/new-releases.yaml +2 -0
  285. package/src/adapters/amazon/rankings.yaml +1 -0
  286. package/src/adapters/apple-podcasts/episodes.yaml +1 -0
  287. package/src/adapters/arxiv/paper.yaml +1 -0
  288. package/src/adapters/audacity/convert.yaml +1 -0
  289. package/src/adapters/audacity/effects.yaml +1 -0
  290. package/src/adapters/audacity/info.yaml +1 -0
  291. package/src/adapters/audacity/mix.yaml +1 -0
  292. package/src/adapters/audacity/normalize.yaml +1 -0
  293. package/src/adapters/audacity/spectrogram.yaml +1 -0
  294. package/src/adapters/audacity/split-channels.yaml +1 -0
  295. package/src/adapters/audacity/trim.yaml +1 -0
  296. package/src/adapters/bilibili/favorites.yaml +1 -0
  297. package/src/adapters/blender/animation.yaml +2 -0
  298. package/src/adapters/blender/camera.yaml +1 -0
  299. package/src/adapters/blender/convert.yaml +1 -0
  300. package/src/adapters/blender/export.yaml +1 -0
  301. package/src/adapters/blender/import.yaml +1 -0
  302. package/src/adapters/blender/info.yaml +1 -0
  303. package/src/adapters/blender/lighting.yaml +1 -0
  304. package/src/adapters/blender/materials.yaml +1 -0
  305. package/src/adapters/blender/objects.yaml +1 -0
  306. package/src/adapters/blender/render.yaml +2 -0
  307. package/src/adapters/blender/scene.yaml +1 -0
  308. package/src/adapters/blender/screenshot.yaml +2 -0
  309. package/src/adapters/blender/script.yaml +1 -0
  310. package/src/adapters/boss/detail.yaml +2 -0
  311. package/src/adapters/cloudcompare/info.yaml +1 -0
  312. package/src/adapters/coupang/add-to-cart.yaml +1 -0
  313. package/src/adapters/ctrip/search.yaml +1 -0
  314. package/src/adapters/docker/build.yaml +1 -1
  315. package/src/adapters/docker/images.yaml +1 -1
  316. package/src/adapters/docker/logs.yaml +1 -1
  317. package/src/adapters/docker/networks.yaml +1 -1
  318. package/src/adapters/docker/ps.yaml +1 -1
  319. package/src/adapters/docker/run.yaml +1 -1
  320. package/src/adapters/docker/volumes.yaml +1 -1
  321. package/src/adapters/douban/download.yaml +1 -0
  322. package/src/adapters/douban/photos.yaml +1 -0
  323. package/src/adapters/douban/subject.yaml +2 -0
  324. package/src/adapters/doubao-web/detail.yaml +1 -0
  325. package/src/adapters/doubao-web/meeting-summary.yaml +1 -0
  326. package/src/adapters/doubao-web/meeting-transcript.yaml +1 -0
  327. package/src/adapters/drawio/export.yaml +2 -0
  328. package/src/adapters/electron-desktop/electron-desktop.ts +57 -0
  329. package/src/adapters/facebook/join-group.yaml +2 -0
  330. package/src/adapters/ffmpeg/compress.yaml +2 -0
  331. package/src/adapters/ffmpeg/concat.yaml +1 -0
  332. package/src/adapters/ffmpeg/convert.yaml +1 -0
  333. package/src/adapters/ffmpeg/extract-audio.yaml +2 -0
  334. package/src/adapters/ffmpeg/gif.yaml +2 -0
  335. package/src/adapters/ffmpeg/normalize.yaml +2 -0
  336. package/src/adapters/ffmpeg/probe.yaml +1 -0
  337. package/src/adapters/ffmpeg/resize.yaml +2 -0
  338. package/src/adapters/ffmpeg/subtitles.yaml +2 -0
  339. package/src/adapters/ffmpeg/thumbnail.yaml +2 -0
  340. package/src/adapters/ffmpeg/trim.yaml +2 -0
  341. package/src/adapters/freecad/assembly.yaml +1 -0
  342. package/src/adapters/freecad/bom.yaml +1 -0
  343. package/src/adapters/freecad/boolean.yaml +1 -0
  344. package/src/adapters/freecad/check.yaml +1 -0
  345. package/src/adapters/freecad/convert.yaml +1 -0
  346. package/src/adapters/freecad/export-stl.yaml +1 -0
  347. package/src/adapters/freecad/import.yaml +1 -0
  348. package/src/adapters/freecad/info.yaml +1 -0
  349. package/src/adapters/freecad/macro.yaml +1 -0
  350. package/src/adapters/freecad/measure.yaml +1 -0
  351. package/src/adapters/freecad/mesh.yaml +1 -0
  352. package/src/adapters/freecad/properties.yaml +1 -0
  353. package/src/adapters/freecad/render.yaml +1 -0
  354. package/src/adapters/freecad/section.yaml +1 -0
  355. package/src/adapters/freecad/sketch.yaml +1 -0
  356. package/src/adapters/gimp/adjust.yaml +1 -0
  357. package/src/adapters/gimp/batch.yaml +1 -0
  358. package/src/adapters/gimp/convert.yaml +1 -0
  359. package/src/adapters/gimp/crop.yaml +1 -0
  360. package/src/adapters/gimp/filter.yaml +1 -0
  361. package/src/adapters/gimp/flip.yaml +1 -0
  362. package/src/adapters/gimp/info.yaml +1 -0
  363. package/src/adapters/gimp/layers.yaml +1 -0
  364. package/src/adapters/gimp/merge-layers.yaml +1 -0
  365. package/src/adapters/gimp/resize.yaml +1 -0
  366. package/src/adapters/gimp/rotate.yaml +1 -0
  367. package/src/adapters/gimp/text.yaml +1 -0
  368. package/src/adapters/godot/scene-export.yaml +1 -0
  369. package/src/adapters/hackernews/comments.yaml +1 -0
  370. package/src/adapters/hackernews/item.yaml +1 -0
  371. package/src/adapters/hf/top.yaml +1 -0
  372. package/src/adapters/imagemagick/composite.yaml +1 -0
  373. package/src/adapters/imagemagick/convert.yaml +1 -0
  374. package/src/adapters/imagemagick/identify.yaml +1 -0
  375. package/src/adapters/imagemagick/montage.yaml +1 -0
  376. package/src/adapters/imagemagick/resize.yaml +1 -0
  377. package/src/adapters/imdb/person.yaml +1 -0
  378. package/src/adapters/imdb/reviews.yaml +1 -0
  379. package/src/adapters/imdb/title.yaml +1 -0
  380. package/src/adapters/inkscape/convert.yaml +2 -0
  381. package/src/adapters/inkscape/export.yaml +2 -0
  382. package/src/adapters/inkscape/optimize.yaml +2 -0
  383. package/src/adapters/instagram/stories.yaml +1 -0
  384. package/src/adapters/jd/item.yaml +1 -0
  385. package/src/adapters/jike/post.yaml +2 -0
  386. package/src/adapters/jike/topic.yaml +2 -0
  387. package/src/adapters/kdenlive/info.yaml +1 -0
  388. package/src/adapters/kdenlive/render.yaml +1 -0
  389. package/src/adapters/krita/batch.yaml +1 -0
  390. package/src/adapters/krita/convert.yaml +1 -0
  391. package/src/adapters/krita/export.yaml +1 -0
  392. package/src/adapters/krita/info.yaml +1 -0
  393. package/src/adapters/libreoffice/convert.yaml +1 -0
  394. package/src/adapters/libreoffice/print.yaml +1 -0
  395. package/src/adapters/linear/issue-update.yaml +1 -0
  396. package/src/adapters/linux-do/category.yaml +1 -0
  397. package/src/adapters/linux-do/topic.yaml +1 -0
  398. package/src/adapters/macos/caffeinate.yaml +2 -2
  399. package/src/adapters/macos/calendar-create.yaml +1 -0
  400. package/src/adapters/macos/finder-copy.yaml +1 -0
  401. package/src/adapters/macos/finder-move.yaml +1 -0
  402. package/src/adapters/macos/finder-new-folder.yaml +1 -0
  403. package/src/adapters/macos/finder-tags.yaml +1 -0
  404. package/src/adapters/macos/open.yaml +2 -0
  405. package/src/adapters/macos/processes.yaml +3 -3
  406. package/src/adapters/macos/screen-recording.yaml +3 -2
  407. package/src/adapters/macos/screenshot.yaml +1 -0
  408. package/src/adapters/macos/spotlight.yaml +1 -0
  409. package/src/adapters/macos/wallpaper.yaml +1 -0
  410. package/src/adapters/medium/article.yaml +1 -0
  411. package/src/adapters/mermaid/render.yaml +1 -0
  412. package/src/adapters/minimax/tts.yaml +1 -0
  413. package/src/adapters/motion-studio/component-get.yaml +1 -0
  414. package/src/adapters/musescore/convert.yaml +2 -0
  415. package/src/adapters/musescore/export.yaml +2 -0
  416. package/src/adapters/musescore/info.yaml +1 -0
  417. package/src/adapters/musescore/instruments.yaml +1 -0
  418. package/src/adapters/musescore/transpose.yaml +1 -0
  419. package/src/adapters/netease-music/playlist.yaml +1 -0
  420. package/src/adapters/netease-music/top.yaml +1 -0
  421. package/src/adapters/notebooklm/get.yaml +1 -0
  422. package/src/adapters/notebooklm/history.yaml +1 -0
  423. package/src/adapters/notebooklm/note-list.yaml +1 -0
  424. package/src/adapters/notebooklm/notes-get.yaml +1 -0
  425. package/src/adapters/notebooklm/open.yaml +1 -0
  426. package/src/adapters/notebooklm/source-fulltext.yaml +1 -0
  427. package/src/adapters/notebooklm/source-get.yaml +1 -0
  428. package/src/adapters/notebooklm/source-guide.yaml +1 -0
  429. package/src/adapters/notebooklm/source-list.yaml +1 -0
  430. package/src/adapters/notebooklm/summary.yaml +1 -0
  431. package/src/adapters/novita/status.yaml +1 -0
  432. package/src/adapters/obs/screenshot.yaml +1 -0
  433. package/src/adapters/obsidian/open.yaml +1 -0
  434. package/src/adapters/ones/login.yaml +1 -0
  435. package/src/adapters/ones/task.yaml +1 -0
  436. package/src/adapters/pandoc/convert.yaml +1 -0
  437. package/src/adapters/paperreview/feedback.yaml +2 -0
  438. package/src/adapters/paperreview/review.yaml +2 -0
  439. package/src/adapters/paperreview/submit.yaml +2 -0
  440. package/src/adapters/pixiv/detail.yaml +1 -0
  441. package/src/adapters/pixiv/download.yaml +2 -0
  442. package/src/adapters/quark/ls.yaml +1 -0
  443. package/src/adapters/reddit/comments.yaml +2 -0
  444. package/src/adapters/renderdoc/capture-list.yaml +1 -0
  445. package/src/adapters/renderdoc/frame-export.yaml +1 -0
  446. package/src/adapters/reuters/article.yaml +2 -0
  447. package/src/adapters/shotcut/info.yaml +1 -0
  448. package/src/adapters/shotcut/render.yaml +1 -0
  449. package/src/adapters/sinablog/article.yaml +1 -0
  450. package/src/adapters/sinablog/user.yaml +1 -0
  451. package/src/adapters/sketch/artboards.yaml +1 -0
  452. package/src/adapters/sketch/export.yaml +1 -0
  453. package/src/adapters/sketch/symbols.yaml +1 -0
  454. package/src/adapters/smzdm/article.yaml +1 -0
  455. package/src/adapters/stackoverflow/question.yaml +1 -0
  456. package/src/adapters/stagehand/wrap-observe.yaml +1 -0
  457. package/src/adapters/steam/wishlist.yaml +1 -0
  458. package/src/adapters/substack/trending.yaml +2 -1
  459. package/src/adapters/tieba/read.yaml +1 -0
  460. package/src/adapters/tiktok/comment.yaml +1 -0
  461. package/src/adapters/tiktok/like.yaml +1 -0
  462. package/src/adapters/tiktok/save.yaml +1 -0
  463. package/src/adapters/tiktok/unlike.yaml +1 -0
  464. package/src/adapters/tiktok/unsave.yaml +1 -0
  465. package/src/adapters/twitch/streams.yaml +1 -0
  466. package/src/adapters/twitter/quotes.yaml +2 -0
  467. package/src/adapters/twitter/retweets.yaml +1 -0
  468. package/src/adapters/v2ex/replies.yaml +1 -0
  469. package/src/adapters/v2ex/topic.yaml +1 -0
  470. package/src/adapters/vscode/install-ext.yaml +1 -0
  471. package/src/adapters/vscode/open.yaml +1 -0
  472. package/src/adapters/web/read.yaml +1 -0
  473. package/src/adapters/weibo/comments.yaml +1 -0
  474. package/src/adapters/weibo/post.yaml +1 -0
  475. package/src/adapters/weixin/download.yaml +1 -0
  476. package/src/adapters/wiremock/create-stub.yaml +2 -0
  477. package/src/adapters/wiremock/delete-stub.yaml +1 -0
  478. package/src/adapters/wiremock/verify.yaml +1 -0
  479. package/src/adapters/xianyu/item.yaml +1 -0
  480. package/src/adapters/xiaoe/catalog.yaml +1 -0
  481. package/src/adapters/xiaoe/content.yaml +1 -0
  482. package/src/adapters/xiaoe/detail.yaml +1 -0
  483. package/src/adapters/xiaoe/play-url.yaml +1 -0
  484. package/src/adapters/xiaoyuzhou/podcast.yaml +2 -0
  485. package/src/adapters/yollomi/edit.yaml +2 -0
  486. package/src/adapters/yollomi/remove-bg.yaml +2 -0
  487. package/src/adapters/yollomi/restore.yaml +2 -0
  488. package/src/adapters/yollomi/upload.yaml +2 -0
  489. package/src/adapters/yollomi/upscale.yaml +2 -0
  490. package/src/adapters/youtube/playlist.yaml +1 -0
  491. package/src/adapters/yt-dlp/download.yaml +2 -0
  492. package/src/adapters/yt-dlp/extract-audio.yaml +2 -0
  493. package/src/adapters/yt-dlp/info.yaml +1 -0
  494. package/src/adapters/zhihu/answer.yaml +1 -0
  495. package/src/adapters/zhihu/answers.yaml +2 -0
  496. package/src/adapters/zhihu/article.yaml +1 -0
  497. package/src/adapters/zhihu/articles.yaml +2 -0
  498. package/src/adapters/zhihu/collections.yaml +2 -0
  499. package/src/adapters/zhihu/columns.yaml +2 -0
  500. package/src/adapters/zhihu/comment.yaml +1 -0
  501. package/src/adapters/zhihu/download.yaml +1 -0
  502. package/src/adapters/zhihu/followers.yaml +2 -0
  503. package/src/adapters/zhihu/following.yaml +2 -0
  504. package/src/adapters/zhihu/pins.yaml +2 -0
  505. package/src/adapters/zhihu/question.yaml +1 -0
  506. package/src/adapters/zhihu/topic.yaml +1 -0
  507. package/src/adapters/zhihu/topics.yaml +1 -0
  508. package/src/adapters/zhihu/user.yaml +2 -0
  509. package/src/adapters/zoom/join.yaml +1 -0
  510. package/src/adapters/zsxq/search.yaml +1 -0
  511. package/src/adapters/zsxq/topic.yaml +1 -0
  512. package/src/adapters/zsxq/topics.yaml +1 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Output-side projection helpers — `--select` / `--fields` / `--pluck` / `--pluck0`.
3
+ *
4
+ * These flags externalize the `| jq` / `| awk` step agents used to apply to
5
+ * `unicli` output. The kernel produces a raw `results[]` array; the CLI
6
+ * surface projects it *before* `format()` so every envelope format (json /
7
+ * yaml / md / csv / compact) benefits. MCP and ACP do NOT honor these —
8
+ * they speak JSON, agents project client-side.
9
+ *
10
+ * Precedence (highest wins when multiple flags are set):
11
+ * --pluck0 > --pluck > --select > --fields
12
+ *
13
+ * When multiple are set, a single stderr warning is emitted and only the
14
+ * highest-priority flag applies.
15
+ */
16
+ import { JSONPath } from "jsonpath-plus";
17
+ /** Thrown when `--select` fails to parse. Distinguishes user typo from empty match. */
18
+ export class ProjectionError extends Error {
19
+ detail;
20
+ constructor(message, detail) {
21
+ super(message);
22
+ this.detail = detail;
23
+ this.name = "ProjectionError";
24
+ }
25
+ }
26
+ /**
27
+ * Parse the comma-separated column list from `--fields`. Whitespace around
28
+ * column names is trimmed; empty entries are dropped so `--fields ,a,b,`
29
+ * → `["a", "b"]`.
30
+ */
31
+ function parseFields(spec) {
32
+ return spec
33
+ .split(",")
34
+ .map((s) => s.trim())
35
+ .filter((s) => s.length > 0);
36
+ }
37
+ /**
38
+ * Apply a JSONPath expression to the results array. `$` refers to the
39
+ * array itself, so `$[0]` is the first row and `$[*].title` is every
40
+ * title. Returns the raw matches from jsonpath-plus — when the path
41
+ * resolves to a single value we still return it as a one-row array so
42
+ * downstream formatters stay array-shaped.
43
+ *
44
+ * Malformed expressions (unclosed brackets, syntax errors) throw
45
+ * `ProjectionError` — distinguishing a user typo from a legitimate
46
+ * zero-match is critical for agent self-repair.
47
+ */
48
+ function applySelect(results, path) {
49
+ // Pre-validation — jsonpath-plus swallows many malformed paths (unclosed
50
+ // bracket, trailing `.`) and returns undefined silently, which makes
51
+ // "typo" indistinguishable from "legit zero match" for the agent's
52
+ // self-repair loop. We catch the obvious shapes here so the Error
53
+ // clearly blames the expression.
54
+ const typed = path.trim();
55
+ if (typed.length === 0) {
56
+ throw new ProjectionError(`--select parse error: empty expression`, {
57
+ flag: "select",
58
+ expression: path,
59
+ cause: "empty",
60
+ });
61
+ }
62
+ if (!typed.startsWith("$")) {
63
+ throw new ProjectionError(`--select parse error: expression must start with '$' (expression: ${path})`, { flag: "select", expression: path, cause: "missing root $" });
64
+ }
65
+ // Bracket balance — `$.items[` / `$[0` / `$[?(` produce undefined
66
+ // silently inside jsonpath-plus; we prefer a loud error so the agent
67
+ // can re-render the path.
68
+ let square = 0;
69
+ let paren = 0;
70
+ let inStr = null;
71
+ for (let i = 0; i < typed.length; i++) {
72
+ const ch = typed[i];
73
+ if (inStr) {
74
+ if (ch === inStr && typed[i - 1] !== "\\")
75
+ inStr = null;
76
+ continue;
77
+ }
78
+ if (ch === '"' || ch === "'") {
79
+ inStr = ch;
80
+ continue;
81
+ }
82
+ if (ch === "[")
83
+ square++;
84
+ else if (ch === "]")
85
+ square--;
86
+ else if (ch === "(")
87
+ paren++;
88
+ else if (ch === ")")
89
+ paren--;
90
+ }
91
+ if (square !== 0 || paren !== 0 || inStr !== null) {
92
+ throw new ProjectionError(`--select parse error: unbalanced ${square !== 0 ? "brackets" : paren !== 0 ? "parentheses" : "quotes"} (expression: ${path})`, {
93
+ flag: "select",
94
+ expression: path,
95
+ cause: `unbalanced ${square !== 0 ? "[]" : paren !== 0 ? "()" : "quotes"}`,
96
+ });
97
+ }
98
+ // jsonpath-plus wraps results in an array unless `wrap: false`; with
99
+ // `wrap: false` a scalar result comes back as the scalar itself, an
100
+ // empty match comes back as `false`, and a multi-match stays as an
101
+ // array. We normalize every branch so the caller always gets `unknown[]`.
102
+ let hit;
103
+ try {
104
+ hit = JSONPath({ path, json: results, wrap: false });
105
+ }
106
+ catch (err) {
107
+ const cause = err instanceof Error ? err.message : String(err);
108
+ throw new ProjectionError(`--select parse error: ${cause} (expression: ${path})`, { flag: "select", expression: path, cause });
109
+ }
110
+ if (Array.isArray(hit))
111
+ return hit;
112
+ if (hit === undefined || hit === null || hit === false)
113
+ return [];
114
+ return [hit];
115
+ }
116
+ /**
117
+ * Render a single row as the stringified value of the plucked field. Nested
118
+ * objects serialize as JSON (one line, no indent) so agents can still pipe
119
+ * the stream into `xargs -I{} jq ...` if a column happens to be structured.
120
+ *
121
+ * Newlines in string values are collapsed to a single space — a raw `\n`
122
+ * would break every `while read` / `xargs -n1` loop downstream. Callers
123
+ * that need newline-preserving output should use `--format json` instead.
124
+ * Returns both the sanitized string and a flag indicating whether any
125
+ * `\r` or `\n` was stripped, so the caller can emit one debounced warning
126
+ * per invocation.
127
+ */
128
+ export function pluckRow(row, field) {
129
+ if (row === null || row === undefined)
130
+ return { value: "", sanitized: false };
131
+ if (typeof row !== "object") {
132
+ return sanitizeNewlines(String(row));
133
+ }
134
+ const value = row[field];
135
+ if (value === null || value === undefined)
136
+ return { value: "", sanitized: false };
137
+ if (typeof value === "object")
138
+ return sanitizeNewlines(JSON.stringify(value));
139
+ return sanitizeNewlines(String(value));
140
+ }
141
+ function sanitizeNewlines(s) {
142
+ if (!/[\r\n]/.test(s))
143
+ return { value: s, sanitized: false };
144
+ return { value: s.replace(/[\r\n]+/g, " "), sanitized: true };
145
+ }
146
+ /**
147
+ * Apply the three projection flags in priority order. Returns the
148
+ * post-projection `results`, the column override (for `--fields`), and
149
+ * a `pluckMode` flag that directs the caller to print a newline-delimited
150
+ * stream instead of a formatted envelope.
151
+ *
152
+ * A single stderr warning is emitted when more than one flag is set so
153
+ * the agent can see that a lower-priority flag was suppressed.
154
+ */
155
+ export function applyProjection(results, options, warn = (msg) => process.stderr.write(msg + "\n")) {
156
+ const setFlags = [];
157
+ if (options.pluck0 !== undefined)
158
+ setFlags.push("pluck0");
159
+ if (options.pluck !== undefined)
160
+ setFlags.push("pluck");
161
+ if (options.select !== undefined)
162
+ setFlags.push("select");
163
+ if (options.fields !== undefined)
164
+ setFlags.push("fields");
165
+ if (setFlags.length > 1) {
166
+ const winner = setFlags[0];
167
+ const losers = setFlags.slice(1).join(", ");
168
+ warn(`[projection] multiple flags set (${setFlags.join(", ")}); "--${winner}" wins, ignoring: ${losers}`);
169
+ }
170
+ // --pluck0 wins — NUL-delimited stream (for `xargs -0`).
171
+ if (options.pluck0 !== undefined) {
172
+ return {
173
+ results,
174
+ columns: undefined,
175
+ pluckMode: false,
176
+ pluck0Mode: true,
177
+ };
178
+ }
179
+ // --pluck — newline-delimited single-column stream.
180
+ if (options.pluck !== undefined) {
181
+ return {
182
+ results,
183
+ columns: undefined,
184
+ pluckMode: true,
185
+ pluck0Mode: false,
186
+ };
187
+ }
188
+ if (options.select !== undefined) {
189
+ const projected = applySelect(results, options.select);
190
+ return {
191
+ results: projected,
192
+ columns: undefined,
193
+ pluckMode: false,
194
+ pluck0Mode: false,
195
+ };
196
+ }
197
+ if (options.fields !== undefined) {
198
+ return {
199
+ results,
200
+ columns: parseFields(options.fields),
201
+ pluckMode: false,
202
+ pluck0Mode: false,
203
+ };
204
+ }
205
+ return {
206
+ results,
207
+ columns: undefined,
208
+ pluckMode: false,
209
+ pluck0Mode: false,
210
+ };
211
+ }
212
+ /**
213
+ * Render `results` as the `--pluck` plain-text stream. One row per line,
214
+ * field value stringified via `pluckRow`. No header, no trailing newline
215
+ * (the caller adds it through `console.log`).
216
+ *
217
+ * A single stderr warning is emitted if any value had embedded newlines
218
+ * stripped — agents that need newline-preserving output should use
219
+ * `--format json` instead. Warning is debounced: one line per invocation,
220
+ * not one line per row.
221
+ */
222
+ export function renderPluck(results, field, warn = (msg) => process.stderr.write(msg + "\n")) {
223
+ let sanitizedCount = 0;
224
+ const lines = results.map((row) => {
225
+ const r = pluckRow(row, field);
226
+ if (r.sanitized)
227
+ sanitizedCount++;
228
+ return r.value;
229
+ });
230
+ if (sanitizedCount > 0) {
231
+ warn(`[pluck] sanitized ${sanitizedCount} value(s) containing newlines`);
232
+ }
233
+ return lines.join("\n");
234
+ }
235
+ /**
236
+ * Render `results` as the `--pluck0` NUL-delimited stream (xargs -0).
237
+ * Each value is followed by `\0`, including the last one — matches the
238
+ * convention of `find -print0` so downstream `xargs -0` counts rows
239
+ * correctly. Same newline-sanitization as `--pluck`.
240
+ */
241
+ export function renderPluck0(results, field, warn = (msg) => process.stderr.write(msg + "\n")) {
242
+ let sanitizedCount = 0;
243
+ const parts = [];
244
+ for (const row of results) {
245
+ const r = pluckRow(row, field);
246
+ if (r.sanitized)
247
+ sanitizedCount++;
248
+ parts.push(r.value + "\0");
249
+ }
250
+ if (sanitizedCount > 0) {
251
+ warn(`[pluck] sanitized ${sanitizedCount} value(s) containing newlines`);
252
+ }
253
+ return parts.join("");
254
+ }
255
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/output/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ACP pure helpers — prompt parsing, tokenization, suggestion, command
3
+ * execution. Extracted from `acp.ts` so the server module stays under the
4
+ * complexity gate.
5
+ */
6
+ import type { AdapterManifest, AdapterCommand } from "../types.js";
7
+ export interface ParsedInvocation {
8
+ site: string;
9
+ command: string;
10
+ args: Record<string, unknown>;
11
+ }
12
+ /**
13
+ * Parse a natural-language prompt for a `unicli <site> <command> [args]`
14
+ * invocation. Matches the literal `unicli` token followed by two identifiers,
15
+ * then consumes remaining key=value or --flag value tokens plus a single
16
+ * trailing positional. Returns `undefined` when no invocation is detected.
17
+ */
18
+ export declare function parseUnicliInvocation(prompt: string): ParsedInvocation | undefined;
19
+ /**
20
+ * Execute a resolved adapter command with its merged args through the
21
+ * invocation kernel (v0.213.3 R2). Returns the raw result array. Throws
22
+ * on error — callers wrap in try/catch and surface the message over ACP.
23
+ */
24
+ export declare function runCommand(adapter: AdapterManifest, cmd: AdapterCommand, args: Record<string, unknown>): Promise<unknown[]>;
25
+ export declare function summarizeResults(results: unknown[], site: string, command: string): string;
26
+ /**
27
+ * Suggest at most five candidate commands based on a prompt. Lightweight
28
+ * substring match over the adapter catalog — good enough for "did you
29
+ * mean?" hints without pulling in the full BM25 search machinery.
30
+ */
31
+ export declare function suggestCommands(prompt: string): string;
32
+ //# sourceMappingURL=acp-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-helpers.d.ts","sourceRoot":"","sources":["../../src/protocol/acp-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AA+CD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,GACb,gBAAgB,GAAG,SAAS,CAyC9B;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,EAAE,CAAC,CAwBpB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAAE,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CAiBR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBtD"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * ACP pure helpers — prompt parsing, tokenization, suggestion, command
3
+ * execution. Extracted from `acp.ts` so the server module stays under the
4
+ * complexity gate.
5
+ */
6
+ import { getAllAdapters } from "../registry.js";
7
+ import { buildInvocation, execute } from "../engine/kernel/execute.js";
8
+ import { coerceLimit } from "../engine/args.js";
9
+ /**
10
+ * Upper bound on prompt length that `parseUnicliInvocation` will scan. ACP
11
+ * clients can send arbitrarily long editor contexts; regex scans over
12
+ * multi-megabyte prompts are pointless (invocations live near the top) and
13
+ * a ReDoS hazard when the tail regex `.*$` engages on a pathological input.
14
+ * 64 KiB is ~32 pages of text, enough for any realistic prompt, and bounds
15
+ * the worst case to a 64 KiB prompt slice.
16
+ */
17
+ const MAX_ACP_PROMPT_BYTES = 64 * 1024;
18
+ function tokenize(s) {
19
+ const out = [];
20
+ let cur = "";
21
+ let inQuotes;
22
+ for (const ch of s) {
23
+ if (inQuotes) {
24
+ if (ch === inQuotes)
25
+ inQuotes = undefined;
26
+ else
27
+ cur += ch;
28
+ continue;
29
+ }
30
+ if (ch === '"' || ch === "'") {
31
+ inQuotes = ch;
32
+ continue;
33
+ }
34
+ if (/\s/.test(ch)) {
35
+ if (cur.length > 0) {
36
+ out.push(cur);
37
+ cur = "";
38
+ }
39
+ continue;
40
+ }
41
+ cur += ch;
42
+ }
43
+ if (cur.length > 0)
44
+ out.push(cur);
45
+ return out;
46
+ }
47
+ function coerce(v) {
48
+ if (/^-?\d+$/.test(v))
49
+ return parseInt(v, 10);
50
+ if (/^-?\d+\.\d+$/.test(v))
51
+ return parseFloat(v);
52
+ if (v === "true")
53
+ return true;
54
+ if (v === "false")
55
+ return false;
56
+ return v;
57
+ }
58
+ /**
59
+ * Parse a natural-language prompt for a `unicli <site> <command> [args]`
60
+ * invocation. Matches the literal `unicli` token followed by two identifiers,
61
+ * then consumes remaining key=value or --flag value tokens plus a single
62
+ * trailing positional. Returns `undefined` when no invocation is detected.
63
+ */
64
+ export function parseUnicliInvocation(prompt) {
65
+ const bounded = prompt.length > MAX_ACP_PROMPT_BYTES
66
+ ? prompt.slice(0, MAX_ACP_PROMPT_BYTES)
67
+ : prompt;
68
+ const match = bounded.match(/\bunicli\s+([a-zA-Z0-9_.-]+)\s+([a-zA-Z0-9_.-]+)(.*)$/m);
69
+ if (!match)
70
+ return undefined;
71
+ const [, site, command, tail] = match;
72
+ const args = {};
73
+ const tokens = tokenize(tail ?? "");
74
+ const positional = [];
75
+ for (let i = 0; i < tokens.length; i++) {
76
+ const tok = tokens[i];
77
+ if (tok.startsWith("--")) {
78
+ const key = tok.slice(2);
79
+ const next = tokens[i + 1];
80
+ if (next !== undefined && !next.startsWith("--")) {
81
+ args[key] = coerce(next);
82
+ i++;
83
+ }
84
+ else {
85
+ args[key] = true;
86
+ }
87
+ continue;
88
+ }
89
+ if (tok.includes("=") && /^[a-zA-Z_][a-zA-Z0-9_]*=/.test(tok)) {
90
+ const eq = tok.indexOf("=");
91
+ args[tok.slice(0, eq)] = coerce(tok.slice(eq + 1));
92
+ continue;
93
+ }
94
+ positional.push(tok);
95
+ }
96
+ if (positional.length > 0 && args.query === undefined) {
97
+ args.query = positional.join(" ");
98
+ }
99
+ return { site, command, args };
100
+ }
101
+ /**
102
+ * Execute a resolved adapter command with its merged args through the
103
+ * invocation kernel (v0.213.3 R2). Returns the raw result array. Throws
104
+ * on error — callers wrap in try/catch and surface the message over ACP.
105
+ */
106
+ export async function runCommand(adapter, cmd, args) {
107
+ // Only inject the default `limit` when the adapter declares it —
108
+ // ajv strict mode would otherwise reject the undeclared property.
109
+ const declaresLimit = (cmd.adapterArgs ?? []).some((a) => a.name === "limit");
110
+ const mergedArgs = declaresLimit
111
+ ? { limit: 20, ...args }
112
+ : { ...args };
113
+ if (declaresLimit && args.limit !== undefined) {
114
+ const coerced = coerceLimit(args.limit);
115
+ if (coerced !== undefined)
116
+ mergedArgs.limit = coerced;
117
+ }
118
+ const inv = buildInvocation("acp", adapter.name, cmd.name, {
119
+ args: mergedArgs,
120
+ source: "acp",
121
+ });
122
+ if (!inv)
123
+ throw new Error(`Unknown command: ${adapter.name} ${cmd.name}`);
124
+ const result = await execute(inv);
125
+ if (result.error) {
126
+ const err = new Error(result.error.message);
127
+ err.suggestion =
128
+ result.error.suggestion;
129
+ throw err;
130
+ }
131
+ return result.results;
132
+ }
133
+ export function summarizeResults(results, site, command) {
134
+ if (!Array.isArray(results) || results.length === 0) {
135
+ return `unicli ${site} ${command}: no results`;
136
+ }
137
+ const preview = results.slice(0, 5);
138
+ return [
139
+ `unicli ${site} ${command}: ${results.length} result(s)`,
140
+ "",
141
+ "```json",
142
+ JSON.stringify(preview, null, 2),
143
+ "```",
144
+ results.length > preview.length
145
+ ? `…${results.length - preview.length} more`
146
+ : "",
147
+ ]
148
+ .filter((l) => l !== undefined)
149
+ .join("\n");
150
+ }
151
+ /**
152
+ * Suggest at most five candidate commands based on a prompt. Lightweight
153
+ * substring match over the adapter catalog — good enough for "did you
154
+ * mean?" hints without pulling in the full BM25 search machinery.
155
+ */
156
+ export function suggestCommands(prompt) {
157
+ const lower = prompt.toLowerCase();
158
+ const candidates = [];
159
+ for (const adapter of getAllAdapters()) {
160
+ for (const cmd of Object.keys(adapter.commands)) {
161
+ const hay = `${adapter.name} ${cmd} ${adapter.commands[cmd].description ?? ""}`.toLowerCase();
162
+ if (lower.split(/\s+/).some((w) => w.length >= 3 && hay.includes(w))) {
163
+ candidates.push(`- unicli ${adapter.name} ${cmd}`);
164
+ if (candidates.length >= 5)
165
+ break;
166
+ }
167
+ }
168
+ if (candidates.length >= 5)
169
+ break;
170
+ }
171
+ return candidates.length > 0
172
+ ? candidates.join("\n")
173
+ : "- unicli list (see all available commands)";
174
+ }
175
+ //# sourceMappingURL=acp-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-helpers.js","sourceRoot":"","sources":["../../src/protocol/acp-helpers.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,8 @@
29
29
  * All non-protocol output (errors, logs) MUST go to stderr — stdout is
30
30
  * reserved for JSON-RPC frames only.
31
31
  */
32
- import type { AdapterManifest, AdapterCommand } from "../types.js";
32
+ export { parseUnicliInvocation, runCommand, suggestCommands, } from "./acp-helpers.js";
33
+ export type { ParsedInvocation } from "./acp-helpers.js";
33
34
  export interface AcpRpcRequest {
34
35
  jsonrpc: "2.0";
35
36
  id?: number | string | null;
@@ -97,30 +98,4 @@ export declare class AcpServer {
97
98
  */
98
99
  startStdio(input?: NodeJS.ReadableStream): Promise<void>;
99
100
  }
100
- export interface ParsedInvocation {
101
- site: string;
102
- command: string;
103
- args: Record<string, unknown>;
104
- }
105
- /**
106
- * Parse a natural-language prompt for a `unicli <site> <command> [args]`
107
- * invocation. Matches the literal `unicli` token followed by two identifiers,
108
- * then consumes remaining key=value or --flag value tokens plus a single
109
- * trailing positional.
110
- *
111
- * Returns `undefined` when no invocation is detected — caller prints
112
- * suggestions.
113
- */
114
- export declare function parseUnicliInvocation(prompt: string): ParsedInvocation | undefined;
115
- /**
116
- * Execute a resolved adapter command with its merged args and return the
117
- * raw result array. Shared between ACP and MCP dispatchers.
118
- */
119
- export declare function runCommand(adapter: AdapterManifest, cmd: AdapterCommand, args: Record<string, unknown>): Promise<unknown[]>;
120
- /**
121
- * Suggest at most five candidate commands based on a prompt. Lightweight
122
- * substring match over the adapter catalog — good enough for "did you
123
- * mean?" hints without pulling in the full BM25 search machinery.
124
- */
125
- export declare function suggestCommands(prompt: string): string;
126
101
  //# sourceMappingURL=acp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/protocol/acp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/protocol/acp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAeH,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAID,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,KAAK,IAAI,CAAC;IAC5D,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,IAAI,CAAuD;IACnE,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,IAAI,GAAE,gBAAqB;IAcvC;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IA6DrE,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,iBAAiB;YAUX,kBAAkB;IAoLhC,OAAO,CAAC,aAAa;IAOrB,4DAA4D;IAC5D,WAAW,IAAI,UAAU,EAAE;IAI3B,aAAa,IAAI,OAAO;IAIxB;;;;OAIG;IACG,UAAU,CACd,KAAK,GAAE,MAAM,CAAC,cAA8B,GAC3C,OAAO,CAAC,IAAI,CAAC;CAwCjB"}