@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.
- package/AGENTS.md +10 -10
- package/README.md +40 -27
- package/README.zh-CN.md +36 -36
- package/dist/adapters/_electron/desktop-shared.d.ts +12 -0
- package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -0
- package/dist/adapters/_electron/desktop-shared.js +312 -0
- package/dist/adapters/_electron/desktop-shared.js.map +1 -0
- package/dist/adapters/electron-desktop/electron-desktop.d.ts +9 -0
- package/dist/adapters/electron-desktop/electron-desktop.d.ts.map +1 -0
- package/dist/adapters/electron-desktop/electron-desktop.js +56 -0
- package/dist/adapters/electron-desktop/electron-desktop.js.map +1 -0
- package/dist/browser/adapter-authoring.d.ts +20 -0
- package/dist/browser/adapter-authoring.d.ts.map +1 -0
- package/dist/browser/adapter-authoring.js +68 -0
- package/dist/browser/adapter-authoring.js.map +1 -0
- package/dist/browser/analyze.d.ts +54 -0
- package/dist/browser/analyze.d.ts.map +1 -0
- package/dist/browser/analyze.js +205 -0
- package/dist/browser/analyze.js.map +1 -0
- package/dist/browser/bridge.d.ts +1 -1
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +2 -0
- package/dist/browser/bridge.js.map +1 -1
- package/dist/browser/daemon-client.d.ts.map +1 -1
- package/dist/browser/daemon-client.js +12 -1
- package/dist/browser/daemon-client.js.map +1 -1
- package/dist/browser/network-cache.d.ts +58 -0
- package/dist/browser/network-cache.d.ts.map +1 -0
- package/dist/browser/network-cache.js +146 -0
- package/dist/browser/network-cache.js.map +1 -0
- package/dist/browser/page.d.ts +1 -1
- package/dist/browser/page.d.ts.map +1 -1
- package/dist/browser/page.js +2 -1
- package/dist/browser/page.js.map +1 -1
- package/dist/browser/protocol.d.ts +6 -2
- package/dist/browser/protocol.d.ts.map +1 -1
- package/dist/browser/site-memory.d.ts +57 -0
- package/dist/browser/site-memory.d.ts.map +1 -0
- package/dist/browser/site-memory.js +127 -0
- package/dist/browser/site-memory.js.map +1 -0
- package/dist/browser/verify-fixture.d.ts +30 -0
- package/dist/browser/verify-fixture.d.ts.map +1 -0
- package/dist/browser/verify-fixture.js +168 -0
- package/dist/browser/verify-fixture.js.map +1 -0
- package/dist/browser/workspace.d.ts +8 -0
- package/dist/browser/workspace.d.ts.map +1 -0
- package/dist/browser/workspace.js +15 -0
- package/dist/browser/workspace.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/browser-adapter-authoring.d.ts +3 -0
- package/dist/commands/browser-adapter-authoring.d.ts.map +1 -0
- package/dist/commands/browser-adapter-authoring.js +206 -0
- package/dist/commands/browser-adapter-authoring.js.map +1 -0
- package/dist/commands/browser-authoring-operator.d.ts +3 -0
- package/dist/commands/browser-authoring-operator.d.ts.map +1 -0
- package/dist/commands/browser-authoring-operator.js +110 -0
- package/dist/commands/browser-authoring-operator.js.map +1 -0
- package/dist/commands/browser-operator-runtime.d.ts +38 -0
- package/dist/commands/browser-operator-runtime.d.ts.map +1 -0
- package/dist/commands/browser-operator-runtime.js +281 -0
- package/dist/commands/browser-operator-runtime.js.map +1 -0
- package/dist/commands/browser-operator.d.ts +6 -0
- package/dist/commands/browser-operator.d.ts.map +1 -0
- package/dist/commands/browser-operator.js +374 -0
- package/dist/commands/browser-operator.js.map +1 -0
- package/dist/commands/browser.d.ts.map +1 -1
- package/dist/commands/browser.js +72 -1
- package/dist/commands/browser.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +40 -4
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/describe.d.ts +26 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/describe.js +230 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/dev.js +1 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/dispatch.d.ts +14 -3
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/dispatch.js +141 -81
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/commands/explore.d.ts.map +1 -1
- package/dist/commands/explore.js +4 -1
- package/dist/commands/explore.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +4 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +1 -1
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +14 -14
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/migrate-schema.d.ts.map +1 -1
- package/dist/commands/migrate-schema.js +10 -0
- package/dist/commands/migrate-schema.js.map +1 -1
- package/dist/commands/operate.d.ts +4 -3
- package/dist/commands/operate.d.ts.map +1 -1
- package/dist/commands/operate.js +8 -483
- package/dist/commands/operate.js.map +1 -1
- package/dist/commands/record.d.ts.map +1 -1
- package/dist/commands/record.js +2 -1
- package/dist/commands/record.js.map +1 -1
- package/dist/commands/search.js +1 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +2 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/synthesize.d.ts.map +1 -1
- package/dist/commands/synthesize.js +33 -3
- package/dist/commands/synthesize.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +76 -1
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/loader.d.ts +8 -0
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +25 -2
- package/dist/discovery/loader.js.map +1 -1
- package/dist/electron-apps.d.ts +22 -0
- package/dist/electron-apps.d.ts.map +1 -1
- package/dist/electron-apps.js +324 -0
- package/dist/electron-apps.js.map +1 -1
- package/dist/engine/args.d.ts +83 -0
- package/dist/engine/args.d.ts.map +1 -0
- package/dist/engine/args.js +260 -0
- package/dist/engine/args.js.map +1 -0
- package/dist/engine/download.d.ts.map +1 -1
- package/dist/engine/download.js +12 -5
- package/dist/engine/download.js.map +1 -1
- package/dist/engine/executor.d.ts +20 -1
- package/dist/engine/executor.d.ts.map +1 -1
- package/dist/engine/executor.js +11 -2
- package/dist/engine/executor.js.map +1 -1
- package/dist/engine/harden.d.ts +48 -0
- package/dist/engine/harden.d.ts.map +1 -0
- package/dist/engine/harden.js +327 -0
- package/dist/engine/harden.js.map +1 -0
- package/dist/engine/invoke.d.ts +16 -0
- package/dist/engine/invoke.d.ts.map +1 -0
- package/dist/engine/invoke.js +15 -0
- package/dist/engine/invoke.js.map +1 -0
- package/dist/engine/kernel/compile.d.ts +30 -0
- package/dist/engine/kernel/compile.d.ts.map +1 -0
- package/dist/engine/kernel/compile.js +167 -0
- package/dist/engine/kernel/compile.js.map +1 -0
- package/dist/engine/kernel/execute.d.ts +35 -0
- package/dist/engine/kernel/execute.d.ts.map +1 -0
- package/dist/engine/kernel/execute.js +221 -0
- package/dist/engine/kernel/execute.js.map +1 -0
- package/dist/engine/kernel/types.d.ts +49 -0
- package/dist/engine/kernel/types.d.ts.map +1 -0
- package/dist/engine/kernel/types.js +9 -0
- package/dist/engine/kernel/types.js.map +1 -0
- package/dist/engine/kernel/ulid.d.ts +21 -0
- package/dist/engine/kernel/ulid.d.ts.map +1 -0
- package/dist/engine/kernel/ulid.js +76 -0
- package/dist/engine/kernel/ulid.js.map +1 -0
- package/dist/engine/repair/engine.js +2 -2
- package/dist/engine/repair/engine.js.map +1 -1
- package/dist/engine/steps/desktop-ax.d.ts +10 -0
- package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
- package/dist/engine/steps/desktop-ax.js +20 -0
- package/dist/engine/steps/desktop-ax.js.map +1 -1
- package/dist/engine/steps/exec.d.ts +1 -1
- package/dist/engine/steps/exec.d.ts.map +1 -1
- package/dist/engine/steps/exec.js +20 -1
- package/dist/engine/steps/exec.js.map +1 -1
- package/dist/engine/steps/write-temp.js +1 -1
- package/dist/engine/steps/write-temp.js.map +1 -1
- package/dist/engine/template.d.ts.map +1 -1
- package/dist/engine/template.js +21 -2
- package/dist/engine/template.js.map +1 -1
- package/dist/manifest-compact.txt +8 -7
- package/dist/manifest-search.json +1 -1
- package/dist/manifest.json +2161 -171
- package/dist/mcp/dispatch.d.ts +46 -0
- package/dist/mcp/dispatch.d.ts.map +1 -0
- package/dist/mcp/dispatch.js +109 -0
- package/dist/mcp/dispatch.js.map +1 -0
- package/dist/mcp/handler.d.ts +30 -0
- package/dist/mcp/handler.d.ts.map +1 -0
- package/dist/mcp/handler.js +293 -0
- package/dist/mcp/handler.js.map +1 -0
- package/dist/mcp/http-transport.d.ts +16 -0
- package/dist/mcp/http-transport.d.ts.map +1 -0
- package/dist/mcp/http-transport.js +121 -0
- package/dist/mcp/http-transport.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -33
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +31 -742
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/sse-transport.js.map +1 -1
- package/dist/mcp/streamable-http/handle-post.d.ts +23 -0
- package/dist/mcp/streamable-http/handle-post.d.ts.map +1 -0
- package/dist/mcp/streamable-http/handle-post.js +357 -0
- package/dist/mcp/streamable-http/handle-post.js.map +1 -0
- package/dist/mcp/streamable-http/index.d.ts +45 -0
- package/dist/mcp/streamable-http/index.d.ts.map +1 -0
- package/dist/mcp/streamable-http/index.js +150 -0
- package/dist/mcp/streamable-http/index.js.map +1 -0
- package/dist/mcp/streamable-http/session.d.ts +85 -0
- package/dist/mcp/streamable-http/session.d.ts.map +1 -0
- package/dist/mcp/streamable-http/session.js +104 -0
- package/dist/mcp/streamable-http/session.js.map +1 -0
- package/dist/mcp/streamable-http.d.ts +7 -85
- package/dist/mcp/streamable-http.d.ts.map +1 -1
- package/dist/mcp/streamable-http.js +6 -568
- package/dist/mcp/streamable-http.js.map +1 -1
- package/dist/mcp/tools.d.ts +58 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +241 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/output/envelope.d.ts +30 -5
- package/dist/output/envelope.d.ts.map +1 -1
- package/dist/output/envelope.js +7 -5
- package/dist/output/envelope.js.map +1 -1
- package/dist/output/formatter.d.ts +2 -2
- package/dist/output/formatter.js +3 -3
- package/dist/output/formatter.js.map +1 -1
- package/dist/output/next-actions.d.ts +18 -0
- package/dist/output/next-actions.d.ts.map +1 -0
- package/dist/output/next-actions.js +64 -0
- package/dist/output/next-actions.js.map +1 -0
- package/dist/output/projection.d.ts +93 -0
- package/dist/output/projection.d.ts.map +1 -0
- package/dist/output/projection.js +255 -0
- package/dist/output/projection.js.map +1 -0
- package/dist/protocol/acp-helpers.d.ts +32 -0
- package/dist/protocol/acp-helpers.d.ts.map +1 -0
- package/dist/protocol/acp-helpers.js +175 -0
- package/dist/protocol/acp-helpers.js.map +1 -0
- package/dist/protocol/acp.d.ts +2 -27
- package/dist/protocol/acp.d.ts.map +1 -1
- package/dist/protocol/acp.js +7 -170
- package/dist/protocol/acp.js.map +1 -1
- package/dist/transport/adapters/cua.d.ts +9 -10
- package/dist/transport/adapters/cua.d.ts.map +1 -1
- package/dist/transport/adapters/cua.js +22 -24
- package/dist/transport/adapters/cua.js.map +1 -1
- package/dist/transport/adapters/desktop-atspi.d.ts +1 -1
- package/dist/transport/adapters/desktop-atspi.js +2 -2
- package/dist/transport/adapters/desktop-atspi.js.map +1 -1
- package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts +11 -0
- package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-background-click-swift.js +136 -0
- package/dist/transport/adapters/desktop-ax-background-click-swift.js.map +1 -0
- package/dist/transport/adapters/desktop-ax-background-click.d.ts +4 -0
- package/dist/transport/adapters/desktop-ax-background-click.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-background-click.js +70 -0
- package/dist/transport/adapters/desktop-ax-background-click.js.map +1 -0
- package/dist/transport/adapters/desktop-ax-swift.d.ts +56 -0
- package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax-swift.js +458 -0
- package/dist/transport/adapters/desktop-ax-swift.js.map +1 -0
- package/dist/transport/adapters/desktop-ax.d.ts +14 -0
- package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
- package/dist/transport/adapters/desktop-ax.js +262 -32
- package/dist/transport/adapters/desktop-ax.js.map +1 -1
- package/dist/transport/adapters/desktop-uia.d.ts +1 -1
- package/dist/transport/adapters/desktop-uia.js +2 -2
- package/dist/transport/adapters/desktop-uia.js.map +1 -1
- package/dist/transport/adapters/http.js +1 -1
- package/dist/transport/adapters/http.js.map +1 -1
- package/dist/transport/capability.d.ts +1 -1
- package/dist/transport/capability.d.ts.map +1 -1
- package/dist/transport/capability.js +6 -1
- package/dist/transport/capability.js.map +1 -1
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +14 -3
- package/src/adapters/1688/item.yaml +1 -0
- package/src/adapters/1688/store.yaml +1 -0
- package/src/adapters/36kr/article.yaml +1 -0
- package/src/adapters/_electron/desktop-shared.ts +383 -0
- package/src/adapters/amazon/bestsellers.yaml +2 -0
- package/src/adapters/amazon/movers-shakers.yaml +2 -0
- package/src/adapters/amazon/new-releases.yaml +2 -0
- package/src/adapters/amazon/rankings.yaml +1 -0
- package/src/adapters/apple-podcasts/episodes.yaml +1 -0
- package/src/adapters/arxiv/paper.yaml +1 -0
- package/src/adapters/audacity/convert.yaml +1 -0
- package/src/adapters/audacity/effects.yaml +1 -0
- package/src/adapters/audacity/info.yaml +1 -0
- package/src/adapters/audacity/mix.yaml +1 -0
- package/src/adapters/audacity/normalize.yaml +1 -0
- package/src/adapters/audacity/spectrogram.yaml +1 -0
- package/src/adapters/audacity/split-channels.yaml +1 -0
- package/src/adapters/audacity/trim.yaml +1 -0
- package/src/adapters/bilibili/favorites.yaml +1 -0
- package/src/adapters/blender/animation.yaml +2 -0
- package/src/adapters/blender/camera.yaml +1 -0
- package/src/adapters/blender/convert.yaml +1 -0
- package/src/adapters/blender/export.yaml +1 -0
- package/src/adapters/blender/import.yaml +1 -0
- package/src/adapters/blender/info.yaml +1 -0
- package/src/adapters/blender/lighting.yaml +1 -0
- package/src/adapters/blender/materials.yaml +1 -0
- package/src/adapters/blender/objects.yaml +1 -0
- package/src/adapters/blender/render.yaml +2 -0
- package/src/adapters/blender/scene.yaml +1 -0
- package/src/adapters/blender/screenshot.yaml +2 -0
- package/src/adapters/blender/script.yaml +1 -0
- package/src/adapters/boss/detail.yaml +2 -0
- package/src/adapters/cloudcompare/info.yaml +1 -0
- package/src/adapters/coupang/add-to-cart.yaml +1 -0
- package/src/adapters/ctrip/search.yaml +1 -0
- package/src/adapters/docker/build.yaml +1 -1
- package/src/adapters/docker/images.yaml +1 -1
- package/src/adapters/docker/logs.yaml +1 -1
- package/src/adapters/docker/networks.yaml +1 -1
- package/src/adapters/docker/ps.yaml +1 -1
- package/src/adapters/docker/run.yaml +1 -1
- package/src/adapters/docker/volumes.yaml +1 -1
- package/src/adapters/douban/download.yaml +1 -0
- package/src/adapters/douban/photos.yaml +1 -0
- package/src/adapters/douban/subject.yaml +2 -0
- package/src/adapters/doubao-web/detail.yaml +1 -0
- package/src/adapters/doubao-web/meeting-summary.yaml +1 -0
- package/src/adapters/doubao-web/meeting-transcript.yaml +1 -0
- package/src/adapters/drawio/export.yaml +2 -0
- package/src/adapters/electron-desktop/electron-desktop.ts +57 -0
- package/src/adapters/facebook/join-group.yaml +2 -0
- package/src/adapters/ffmpeg/compress.yaml +2 -0
- package/src/adapters/ffmpeg/concat.yaml +1 -0
- package/src/adapters/ffmpeg/convert.yaml +1 -0
- package/src/adapters/ffmpeg/extract-audio.yaml +2 -0
- package/src/adapters/ffmpeg/gif.yaml +2 -0
- package/src/adapters/ffmpeg/normalize.yaml +2 -0
- package/src/adapters/ffmpeg/probe.yaml +1 -0
- package/src/adapters/ffmpeg/resize.yaml +2 -0
- package/src/adapters/ffmpeg/subtitles.yaml +2 -0
- package/src/adapters/ffmpeg/thumbnail.yaml +2 -0
- package/src/adapters/ffmpeg/trim.yaml +2 -0
- package/src/adapters/freecad/assembly.yaml +1 -0
- package/src/adapters/freecad/bom.yaml +1 -0
- package/src/adapters/freecad/boolean.yaml +1 -0
- package/src/adapters/freecad/check.yaml +1 -0
- package/src/adapters/freecad/convert.yaml +1 -0
- package/src/adapters/freecad/export-stl.yaml +1 -0
- package/src/adapters/freecad/import.yaml +1 -0
- package/src/adapters/freecad/info.yaml +1 -0
- package/src/adapters/freecad/macro.yaml +1 -0
- package/src/adapters/freecad/measure.yaml +1 -0
- package/src/adapters/freecad/mesh.yaml +1 -0
- package/src/adapters/freecad/properties.yaml +1 -0
- package/src/adapters/freecad/render.yaml +1 -0
- package/src/adapters/freecad/section.yaml +1 -0
- package/src/adapters/freecad/sketch.yaml +1 -0
- package/src/adapters/gimp/adjust.yaml +1 -0
- package/src/adapters/gimp/batch.yaml +1 -0
- package/src/adapters/gimp/convert.yaml +1 -0
- package/src/adapters/gimp/crop.yaml +1 -0
- package/src/adapters/gimp/filter.yaml +1 -0
- package/src/adapters/gimp/flip.yaml +1 -0
- package/src/adapters/gimp/info.yaml +1 -0
- package/src/adapters/gimp/layers.yaml +1 -0
- package/src/adapters/gimp/merge-layers.yaml +1 -0
- package/src/adapters/gimp/resize.yaml +1 -0
- package/src/adapters/gimp/rotate.yaml +1 -0
- package/src/adapters/gimp/text.yaml +1 -0
- package/src/adapters/godot/scene-export.yaml +1 -0
- package/src/adapters/hackernews/comments.yaml +1 -0
- package/src/adapters/hackernews/item.yaml +1 -0
- package/src/adapters/hf/top.yaml +1 -0
- package/src/adapters/imagemagick/composite.yaml +1 -0
- package/src/adapters/imagemagick/convert.yaml +1 -0
- package/src/adapters/imagemagick/identify.yaml +1 -0
- package/src/adapters/imagemagick/montage.yaml +1 -0
- package/src/adapters/imagemagick/resize.yaml +1 -0
- package/src/adapters/imdb/person.yaml +1 -0
- package/src/adapters/imdb/reviews.yaml +1 -0
- package/src/adapters/imdb/title.yaml +1 -0
- package/src/adapters/inkscape/convert.yaml +2 -0
- package/src/adapters/inkscape/export.yaml +2 -0
- package/src/adapters/inkscape/optimize.yaml +2 -0
- package/src/adapters/instagram/stories.yaml +1 -0
- package/src/adapters/jd/item.yaml +1 -0
- package/src/adapters/jike/post.yaml +2 -0
- package/src/adapters/jike/topic.yaml +2 -0
- package/src/adapters/kdenlive/info.yaml +1 -0
- package/src/adapters/kdenlive/render.yaml +1 -0
- package/src/adapters/krita/batch.yaml +1 -0
- package/src/adapters/krita/convert.yaml +1 -0
- package/src/adapters/krita/export.yaml +1 -0
- package/src/adapters/krita/info.yaml +1 -0
- package/src/adapters/libreoffice/convert.yaml +1 -0
- package/src/adapters/libreoffice/print.yaml +1 -0
- package/src/adapters/linear/issue-update.yaml +1 -0
- package/src/adapters/linux-do/category.yaml +1 -0
- package/src/adapters/linux-do/topic.yaml +1 -0
- package/src/adapters/macos/caffeinate.yaml +2 -2
- package/src/adapters/macos/calendar-create.yaml +1 -0
- package/src/adapters/macos/finder-copy.yaml +1 -0
- package/src/adapters/macos/finder-move.yaml +1 -0
- package/src/adapters/macos/finder-new-folder.yaml +1 -0
- package/src/adapters/macos/finder-tags.yaml +1 -0
- package/src/adapters/macos/open.yaml +2 -0
- package/src/adapters/macos/processes.yaml +3 -3
- package/src/adapters/macos/screen-recording.yaml +3 -2
- package/src/adapters/macos/screenshot.yaml +1 -0
- package/src/adapters/macos/spotlight.yaml +1 -0
- package/src/adapters/macos/wallpaper.yaml +1 -0
- package/src/adapters/medium/article.yaml +1 -0
- package/src/adapters/mermaid/render.yaml +1 -0
- package/src/adapters/minimax/tts.yaml +1 -0
- package/src/adapters/motion-studio/component-get.yaml +1 -0
- package/src/adapters/musescore/convert.yaml +2 -0
- package/src/adapters/musescore/export.yaml +2 -0
- package/src/adapters/musescore/info.yaml +1 -0
- package/src/adapters/musescore/instruments.yaml +1 -0
- package/src/adapters/musescore/transpose.yaml +1 -0
- package/src/adapters/netease-music/playlist.yaml +1 -0
- package/src/adapters/netease-music/top.yaml +1 -0
- package/src/adapters/notebooklm/get.yaml +1 -0
- package/src/adapters/notebooklm/history.yaml +1 -0
- package/src/adapters/notebooklm/note-list.yaml +1 -0
- package/src/adapters/notebooklm/notes-get.yaml +1 -0
- package/src/adapters/notebooklm/open.yaml +1 -0
- package/src/adapters/notebooklm/source-fulltext.yaml +1 -0
- package/src/adapters/notebooklm/source-get.yaml +1 -0
- package/src/adapters/notebooklm/source-guide.yaml +1 -0
- package/src/adapters/notebooklm/source-list.yaml +1 -0
- package/src/adapters/notebooklm/summary.yaml +1 -0
- package/src/adapters/novita/status.yaml +1 -0
- package/src/adapters/obs/screenshot.yaml +1 -0
- package/src/adapters/obsidian/open.yaml +1 -0
- package/src/adapters/ones/login.yaml +1 -0
- package/src/adapters/ones/task.yaml +1 -0
- package/src/adapters/pandoc/convert.yaml +1 -0
- package/src/adapters/paperreview/feedback.yaml +2 -0
- package/src/adapters/paperreview/review.yaml +2 -0
- package/src/adapters/paperreview/submit.yaml +2 -0
- package/src/adapters/pixiv/detail.yaml +1 -0
- package/src/adapters/pixiv/download.yaml +2 -0
- package/src/adapters/quark/ls.yaml +1 -0
- package/src/adapters/reddit/comments.yaml +2 -0
- package/src/adapters/renderdoc/capture-list.yaml +1 -0
- package/src/adapters/renderdoc/frame-export.yaml +1 -0
- package/src/adapters/reuters/article.yaml +2 -0
- package/src/adapters/shotcut/info.yaml +1 -0
- package/src/adapters/shotcut/render.yaml +1 -0
- package/src/adapters/sinablog/article.yaml +1 -0
- package/src/adapters/sinablog/user.yaml +1 -0
- package/src/adapters/sketch/artboards.yaml +1 -0
- package/src/adapters/sketch/export.yaml +1 -0
- package/src/adapters/sketch/symbols.yaml +1 -0
- package/src/adapters/smzdm/article.yaml +1 -0
- package/src/adapters/stackoverflow/question.yaml +1 -0
- package/src/adapters/stagehand/wrap-observe.yaml +1 -0
- package/src/adapters/steam/wishlist.yaml +1 -0
- package/src/adapters/substack/trending.yaml +2 -1
- package/src/adapters/tieba/read.yaml +1 -0
- package/src/adapters/tiktok/comment.yaml +1 -0
- package/src/adapters/tiktok/like.yaml +1 -0
- package/src/adapters/tiktok/save.yaml +1 -0
- package/src/adapters/tiktok/unlike.yaml +1 -0
- package/src/adapters/tiktok/unsave.yaml +1 -0
- package/src/adapters/twitch/streams.yaml +1 -0
- package/src/adapters/twitter/quotes.yaml +2 -0
- package/src/adapters/twitter/retweets.yaml +1 -0
- package/src/adapters/v2ex/replies.yaml +1 -0
- package/src/adapters/v2ex/topic.yaml +1 -0
- package/src/adapters/vscode/install-ext.yaml +1 -0
- package/src/adapters/vscode/open.yaml +1 -0
- package/src/adapters/web/read.yaml +1 -0
- package/src/adapters/weibo/comments.yaml +1 -0
- package/src/adapters/weibo/post.yaml +1 -0
- package/src/adapters/weixin/download.yaml +1 -0
- package/src/adapters/wiremock/create-stub.yaml +2 -0
- package/src/adapters/wiremock/delete-stub.yaml +1 -0
- package/src/adapters/wiremock/verify.yaml +1 -0
- package/src/adapters/xianyu/item.yaml +1 -0
- package/src/adapters/xiaoe/catalog.yaml +1 -0
- package/src/adapters/xiaoe/content.yaml +1 -0
- package/src/adapters/xiaoe/detail.yaml +1 -0
- package/src/adapters/xiaoe/play-url.yaml +1 -0
- package/src/adapters/xiaoyuzhou/podcast.yaml +2 -0
- package/src/adapters/yollomi/edit.yaml +2 -0
- package/src/adapters/yollomi/remove-bg.yaml +2 -0
- package/src/adapters/yollomi/restore.yaml +2 -0
- package/src/adapters/yollomi/upload.yaml +2 -0
- package/src/adapters/yollomi/upscale.yaml +2 -0
- package/src/adapters/youtube/playlist.yaml +1 -0
- package/src/adapters/yt-dlp/download.yaml +2 -0
- package/src/adapters/yt-dlp/extract-audio.yaml +2 -0
- package/src/adapters/yt-dlp/info.yaml +1 -0
- package/src/adapters/zhihu/answer.yaml +1 -0
- package/src/adapters/zhihu/answers.yaml +2 -0
- package/src/adapters/zhihu/article.yaml +1 -0
- package/src/adapters/zhihu/articles.yaml +2 -0
- package/src/adapters/zhihu/collections.yaml +2 -0
- package/src/adapters/zhihu/columns.yaml +2 -0
- package/src/adapters/zhihu/comment.yaml +1 -0
- package/src/adapters/zhihu/download.yaml +1 -0
- package/src/adapters/zhihu/followers.yaml +2 -0
- package/src/adapters/zhihu/following.yaml +2 -0
- package/src/adapters/zhihu/pins.yaml +2 -0
- package/src/adapters/zhihu/question.yaml +1 -0
- package/src/adapters/zhihu/topic.yaml +1 -0
- package/src/adapters/zhihu/topics.yaml +1 -0
- package/src/adapters/zhihu/user.yaml +2 -0
- package/src/adapters/zoom/join.yaml +1 -0
- package/src/adapters/zsxq/search.yaml +1 -0
- package/src/adapters/zsxq/topic.yaml +1 -0
- 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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"}
|
package/dist/protocol/acp.d.ts
CHANGED
|
@@ -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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
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"}
|