@beeos-ai/device-agent 0.4.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/.pi/extensions/android-tools.ts +139 -0
- package/.pi/skills/.gitkeep +0 -0
- package/.pi/skills/ground-mobile-fallback/SKILL.md +50 -0
- package/LICENSE +201 -0
- package/dist/action/handler.d.ts +9 -0
- package/dist/action/handler.js +124 -0
- package/dist/action/handler.js.map +1 -0
- package/dist/adapters/agent-gateway-client.d.ts +256 -0
- package/dist/adapters/agent-gateway-client.js +332 -0
- package/dist/adapters/agent-gateway-client.js.map +1 -0
- package/dist/adapters/agentcore-inner-loop.d.ts +29 -0
- package/dist/adapters/agentcore-inner-loop.js +72 -0
- package/dist/adapters/agentcore-inner-loop.js.map +1 -0
- package/dist/adapters/agentcore-pi.d.ts +215 -0
- package/dist/adapters/agentcore-pi.js +464 -0
- package/dist/adapters/agentcore-pi.js.map +1 -0
- package/dist/adapters/agentcore-runner.d.ts +70 -0
- package/dist/adapters/agentcore-runner.js +255 -0
- package/dist/adapters/agentcore-runner.js.map +1 -0
- package/dist/adapters/device-android-adb.d.ts +41 -0
- package/dist/adapters/device-android-adb.js +279 -0
- package/dist/adapters/device-android-adb.js.map +1 -0
- package/dist/adapters/device-desktop.d.ts +37 -0
- package/dist/adapters/device-desktop.js +101 -0
- package/dist/adapters/device-desktop.js.map +1 -0
- package/dist/adapters/identity-file.d.ts +30 -0
- package/dist/adapters/identity-file.js +50 -0
- package/dist/adapters/identity-file.js.map +1 -0
- package/dist/adapters/transport-bridge-ws.d.ts +39 -0
- package/dist/adapters/transport-bridge-ws.js +49 -0
- package/dist/adapters/transport-bridge-ws.js.map +1 -0
- package/dist/adapters/vlm-inner-loop.d.ts +88 -0
- package/dist/adapters/vlm-inner-loop.js +199 -0
- package/dist/adapters/vlm-inner-loop.js.map +1 -0
- package/dist/agent-runtime/adapters/base.d.ts +145 -0
- package/dist/agent-runtime/adapters/base.js +29 -0
- package/dist/agent-runtime/adapters/base.js.map +1 -0
- package/dist/agent-runtime/adapters/index.d.ts +17 -0
- package/dist/agent-runtime/adapters/index.js +17 -0
- package/dist/agent-runtime/adapters/index.js.map +1 -0
- package/dist/agent-runtime/adapters/mock.d.ts +44 -0
- package/dist/agent-runtime/adapters/mock.js +54 -0
- package/dist/agent-runtime/adapters/mock.js.map +1 -0
- package/dist/agent-runtime/adapters/openai.d.ts +63 -0
- package/dist/agent-runtime/adapters/openai.js +302 -0
- package/dist/agent-runtime/adapters/openai.js.map +1 -0
- package/dist/agent-runtime/adapters/registry.d.ts +49 -0
- package/dist/agent-runtime/adapters/registry.js +129 -0
- package/dist/agent-runtime/adapters/registry.js.map +1 -0
- package/dist/agent-runtime/adapters/ui-tars.d.ts +13 -0
- package/dist/agent-runtime/adapters/ui-tars.js +22 -0
- package/dist/agent-runtime/adapters/ui-tars.js.map +1 -0
- package/dist/agent-runtime/agent-runner.d.ts +149 -0
- package/dist/agent-runtime/agent-runner.js +356 -0
- package/dist/agent-runtime/agent-runner.js.map +1 -0
- package/dist/agent-runtime/core.d.ts +170 -0
- package/dist/agent-runtime/core.js +624 -0
- package/dist/agent-runtime/core.js.map +1 -0
- package/dist/agent-runtime/index.d.ts +16 -0
- package/dist/agent-runtime/index.js +17 -0
- package/dist/agent-runtime/index.js.map +1 -0
- package/dist/agent-runtime/plan-executor.d.ts +118 -0
- package/dist/agent-runtime/plan-executor.js +501 -0
- package/dist/agent-runtime/plan-executor.js.map +1 -0
- package/dist/agent-runtime/planner/base.d.ts +128 -0
- package/dist/agent-runtime/planner/base.js +157 -0
- package/dist/agent-runtime/planner/base.js.map +1 -0
- package/dist/agent-runtime/planner/llm-planner.d.ts +58 -0
- package/dist/agent-runtime/planner/llm-planner.js +112 -0
- package/dist/agent-runtime/planner/llm-planner.js.map +1 -0
- package/dist/agent-runtime/planner/noop-planner.d.ts +13 -0
- package/dist/agent-runtime/planner/noop-planner.js +30 -0
- package/dist/agent-runtime/planner/noop-planner.js.map +1 -0
- package/dist/agent-runtime/planner/prompts.d.ts +33 -0
- package/dist/agent-runtime/planner/prompts.js +165 -0
- package/dist/agent-runtime/planner/prompts.js.map +1 -0
- package/dist/agent-runtime/reflection.d.ts +81 -0
- package/dist/agent-runtime/reflection.js +189 -0
- package/dist/agent-runtime/reflection.js.map +1 -0
- package/dist/agent-runtime/reflectors/action-reflector.d.ts +97 -0
- package/dist/agent-runtime/reflectors/action-reflector.js +233 -0
- package/dist/agent-runtime/reflectors/action-reflector.js.map +1 -0
- package/dist/agent-runtime/reflectors/policy.d.ts +53 -0
- package/dist/agent-runtime/reflectors/policy.js +106 -0
- package/dist/agent-runtime/reflectors/policy.js.map +1 -0
- package/dist/agent-runtime/reflectors/trajectory-reflector.d.ts +94 -0
- package/dist/agent-runtime/reflectors/trajectory-reflector.js +223 -0
- package/dist/agent-runtime/reflectors/trajectory-reflector.js.map +1 -0
- package/dist/agent-runtime/skills/embedding.d.ts +53 -0
- package/dist/agent-runtime/skills/embedding.js +134 -0
- package/dist/agent-runtime/skills/embedding.js.map +1 -0
- package/dist/agent-runtime/skills/fs-store.d.ts +88 -0
- package/dist/agent-runtime/skills/fs-store.js +483 -0
- package/dist/agent-runtime/skills/fs-store.js.map +1 -0
- package/dist/agent-runtime/skills/index.d.ts +10 -0
- package/dist/agent-runtime/skills/index.js +10 -0
- package/dist/agent-runtime/skills/index.js.map +1 -0
- package/dist/agent-runtime/skills/matcher-evolver.d.ts +88 -0
- package/dist/agent-runtime/skills/matcher-evolver.js +110 -0
- package/dist/agent-runtime/skills/matcher-evolver.js.map +1 -0
- package/dist/agent-runtime/skills/memory-store.d.ts +23 -0
- package/dist/agent-runtime/skills/memory-store.js +94 -0
- package/dist/agent-runtime/skills/memory-store.js.map +1 -0
- package/dist/agent-runtime/skills/normalise.d.ts +40 -0
- package/dist/agent-runtime/skills/normalise.js +152 -0
- package/dist/agent-runtime/skills/normalise.js.map +1 -0
- package/dist/agent-runtime/skills/replay.d.ts +46 -0
- package/dist/agent-runtime/skills/replay.js +106 -0
- package/dist/agent-runtime/skills/replay.js.map +1 -0
- package/dist/agent-runtime/skills/sqlite-store.d.ts +60 -0
- package/dist/agent-runtime/skills/sqlite-store.js +234 -0
- package/dist/agent-runtime/skills/sqlite-store.js.map +1 -0
- package/dist/agent-runtime/skills/types.d.ts +99 -0
- package/dist/agent-runtime/skills/types.js +14 -0
- package/dist/agent-runtime/skills/types.js.map +1 -0
- package/dist/agent.d.ts +110 -0
- package/dist/agent.js +162 -0
- package/dist/agent.js.map +1 -0
- package/dist/api.d.ts +27 -0
- package/dist/api.js +48 -0
- package/dist/api.js.map +1 -0
- package/dist/app/agent-host.d.ts +59 -0
- package/dist/app/agent-host.js +263 -0
- package/dist/app/agent-host.js.map +1 -0
- package/dist/app/device-manager.d.ts +28 -0
- package/dist/app/device-manager.js +64 -0
- package/dist/app/device-manager.js.map +1 -0
- package/dist/app/message-store.d.ts +55 -0
- package/dist/app/message-store.js +99 -0
- package/dist/app/message-store.js.map +1 -0
- package/dist/app/session-manager.d.ts +132 -0
- package/dist/app/session-manager.js +350 -0
- package/dist/app/session-manager.js.map +1 -0
- package/dist/bootstrap.d.ts +94 -0
- package/dist/bootstrap.js +459 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/chat.d.ts +16 -0
- package/dist/chat.js +175 -0
- package/dist/chat.js.map +1 -0
- package/dist/config/loader.d.ts +77 -0
- package/dist/config/loader.js +292 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +162 -0
- package/dist/config/schema.js +243 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/actions.d.ts +60 -0
- package/dist/core/actions.js +120 -0
- package/dist/core/actions.js.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.js +9 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/screen.d.ts +7 -0
- package/dist/core/screen.js +8 -0
- package/dist/core/screen.js.map +1 -0
- package/dist/core/session.d.ts +42 -0
- package/dist/core/session.js +29 -0
- package/dist/core/session.js.map +1 -0
- package/dist/debug/dump-system-prompt.d.ts +1 -0
- package/dist/debug/dump-system-prompt.js +34 -0
- package/dist/debug/dump-system-prompt.js.map +1 -0
- package/dist/device/android.d.ts +25 -0
- package/dist/device/android.js +231 -0
- package/dist/device/android.js.map +1 -0
- package/dist/device/apps.d.ts +3 -0
- package/dist/device/apps.js +77 -0
- package/dist/device/apps.js.map +1 -0
- package/dist/device/base.d.ts +20 -0
- package/dist/device/base.js +2 -0
- package/dist/device/base.js.map +1 -0
- package/dist/device/ui-xml.d.ts +29 -0
- package/dist/device/ui-xml.js +194 -0
- package/dist/device/ui-xml.js.map +1 -0
- package/dist/fleet/adapters/process/node-process-manager.d.ts +157 -0
- package/dist/fleet/adapters/process/node-process-manager.js +664 -0
- package/dist/fleet/adapters/process/node-process-manager.js.map +1 -0
- package/dist/fleet/adapters/sources/local-adb.d.ts +105 -0
- package/dist/fleet/adapters/sources/local-adb.js +353 -0
- package/dist/fleet/adapters/sources/local-adb.js.map +1 -0
- package/dist/fleet/adapters/sources/remote-adb.d.ts +97 -0
- package/dist/fleet/adapters/sources/remote-adb.js +138 -0
- package/dist/fleet/adapters/sources/remote-adb.js.map +1 -0
- package/dist/fleet/adapters/state/beeos-cli-store.d.ts +72 -0
- package/dist/fleet/adapters/state/beeos-cli-store.js +250 -0
- package/dist/fleet/adapters/state/beeos-cli-store.js.map +1 -0
- package/dist/fleet/adapters/state/port-allocator.d.ts +43 -0
- package/dist/fleet/adapters/state/port-allocator.js +173 -0
- package/dist/fleet/adapters/state/port-allocator.js.map +1 -0
- package/dist/fleet/domain/device.d.ts +138 -0
- package/dist/fleet/domain/device.js +49 -0
- package/dist/fleet/domain/device.js.map +1 -0
- package/dist/fleet/domain/events.d.ts +102 -0
- package/dist/fleet/domain/events.js +15 -0
- package/dist/fleet/domain/events.js.map +1 -0
- package/dist/fleet/domain/fsm.d.ts +122 -0
- package/dist/fleet/domain/fsm.js +475 -0
- package/dist/fleet/domain/fsm.js.map +1 -0
- package/dist/fleet/http/status-client.d.ts +31 -0
- package/dist/fleet/http/status-client.js +115 -0
- package/dist/fleet/http/status-client.js.map +1 -0
- package/dist/fleet/http/status-server.d.ts +64 -0
- package/dist/fleet/http/status-server.js +200 -0
- package/dist/fleet/http/status-server.js.map +1 -0
- package/dist/fleet/index.d.ts +27 -0
- package/dist/fleet/index.js +17 -0
- package/dist/fleet/index.js.map +1 -0
- package/dist/fleet/installer/index.d.ts +12 -0
- package/dist/fleet/installer/index.js +13 -0
- package/dist/fleet/installer/index.js.map +1 -0
- package/dist/fleet/installer/launchd-mac.d.ts +73 -0
- package/dist/fleet/installer/launchd-mac.js +291 -0
- package/dist/fleet/installer/launchd-mac.js.map +1 -0
- package/dist/fleet/installer/service-spec.d.ts +70 -0
- package/dist/fleet/installer/service-spec.js +43 -0
- package/dist/fleet/installer/service-spec.js.map +1 -0
- package/dist/fleet/installer/spawn-env.d.ts +45 -0
- package/dist/fleet/installer/spawn-env.js +224 -0
- package/dist/fleet/installer/spawn-env.js.map +1 -0
- package/dist/fleet/ports/clock.d.ts +19 -0
- package/dist/fleet/ports/clock.js +26 -0
- package/dist/fleet/ports/clock.js.map +1 -0
- package/dist/fleet/ports/device-source.d.ts +28 -0
- package/dist/fleet/ports/device-source.js +18 -0
- package/dist/fleet/ports/device-source.js.map +1 -0
- package/dist/fleet/ports/process-manager.d.ts +110 -0
- package/dist/fleet/ports/process-manager.js +27 -0
- package/dist/fleet/ports/process-manager.js.map +1 -0
- package/dist/fleet/ports/state-registry.d.ts +49 -0
- package/dist/fleet/ports/state-registry.js +12 -0
- package/dist/fleet/ports/state-registry.js.map +1 -0
- package/dist/fleet/supervisor.d.ts +107 -0
- package/dist/fleet/supervisor.js +508 -0
- package/dist/fleet/supervisor.js.map +1 -0
- package/dist/grounding/grounder.d.ts +46 -0
- package/dist/grounding/grounder.js +82 -0
- package/dist/grounding/grounder.js.map +1 -0
- package/dist/inbound/acp/handlers/device.d.ts +43 -0
- package/dist/inbound/acp/handlers/device.js +153 -0
- package/dist/inbound/acp/handlers/device.js.map +1 -0
- package/dist/inbound/acp/handlers/initialize.d.ts +71 -0
- package/dist/inbound/acp/handlers/initialize.js +53 -0
- package/dist/inbound/acp/handlers/initialize.js.map +1 -0
- package/dist/inbound/acp/handlers/models.d.ts +16 -0
- package/dist/inbound/acp/handlers/models.js +23 -0
- package/dist/inbound/acp/handlers/models.js.map +1 -0
- package/dist/inbound/acp/handlers/session.d.ts +51 -0
- package/dist/inbound/acp/handlers/session.js +61 -0
- package/dist/inbound/acp/handlers/session.js.map +1 -0
- package/dist/inbound/acp/handlers/skills.d.ts +8 -0
- package/dist/inbound/acp/handlers/skills.js +9 -0
- package/dist/inbound/acp/handlers/skills.js.map +1 -0
- package/dist/inbound/acp/notifier.d.ts +35 -0
- package/dist/inbound/acp/notifier.js +45 -0
- package/dist/inbound/acp/notifier.js.map +1 -0
- package/dist/inbound/acp/router.d.ts +67 -0
- package/dist/inbound/acp/router.js +179 -0
- package/dist/inbound/acp/router.js.map +1 -0
- package/dist/inbound/cli/fleet-command.d.ts +34 -0
- package/dist/inbound/cli/fleet-command.js +792 -0
- package/dist/inbound/cli/fleet-command.js.map +1 -0
- package/dist/inbound/cli/main.d.ts +38 -0
- package/dist/inbound/cli/main.js +364 -0
- package/dist/inbound/cli/main.js.map +1 -0
- package/dist/inbound/cli/run-command.d.ts +101 -0
- package/dist/inbound/cli/run-command.js +405 -0
- package/dist/inbound/cli/run-command.js.map +1 -0
- package/dist/inbound/cli/skills-command.d.ts +39 -0
- package/dist/inbound/cli/skills-command.js +333 -0
- package/dist/inbound/cli/skills-command.js.map +1 -0
- package/dist/inbound/http/server.d.ts +7 -0
- package/dist/inbound/http/server.js +8 -0
- package/dist/inbound/http/server.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/index.d.ts +37 -0
- package/dist/logger/index.js +84 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/mcp-client/autospawn.d.ts +67 -0
- package/dist/mcp-client/autospawn.js +173 -0
- package/dist/mcp-client/autospawn.js.map +1 -0
- package/dist/mcp-client/client.d.ts +78 -0
- package/dist/mcp-client/client.js +168 -0
- package/dist/mcp-client/client.js.map +1 -0
- package/dist/mcp-client/index.d.ts +7 -0
- package/dist/mcp-client/index.js +4 -0
- package/dist/mcp-client/index.js.map +1 -0
- package/dist/mcp-client/inproc.d.ts +47 -0
- package/dist/mcp-client/inproc.js +229 -0
- package/dist/mcp-client/inproc.js.map +1 -0
- package/dist/mcp-client/runtime.d.ts +34 -0
- package/dist/mcp-client/runtime.js +15 -0
- package/dist/mcp-client/runtime.js.map +1 -0
- package/dist/model/adapters/autoglm.d.ts +31 -0
- package/dist/model/adapters/autoglm.js +409 -0
- package/dist/model/adapters/autoglm.js.map +1 -0
- package/dist/model/adapters/base.d.ts +13 -0
- package/dist/model/adapters/base.js +27 -0
- package/dist/model/adapters/base.js.map +1 -0
- package/dist/model/adapters/guiowl.d.ts +1 -0
- package/dist/model/adapters/guiowl.js +253 -0
- package/dist/model/adapters/guiowl.js.map +1 -0
- package/dist/model/adapters/index.d.ts +6 -0
- package/dist/model/adapters/index.js +8 -0
- package/dist/model/adapters/index.js.map +1 -0
- package/dist/model/adapters/maiui.d.ts +1 -0
- package/dist/model/adapters/maiui.js +117 -0
- package/dist/model/adapters/maiui.js.map +1 -0
- package/dist/model/adapters/qwenvl.d.ts +1 -0
- package/dist/model/adapters/qwenvl.js +108 -0
- package/dist/model/adapters/qwenvl.js.map +1 -0
- package/dist/model/adapters/showui.d.ts +1 -0
- package/dist/model/adapters/showui.js +132 -0
- package/dist/model/adapters/showui.js.map +1 -0
- package/dist/model/adapters/tool-call.d.ts +6 -0
- package/dist/model/adapters/tool-call.js +102 -0
- package/dist/model/adapters/tool-call.js.map +1 -0
- package/dist/model/adapters/uitars.d.ts +1 -0
- package/dist/model/adapters/uitars.js +180 -0
- package/dist/model/adapters/uitars.js.map +1 -0
- package/dist/model/base.d.ts +32 -0
- package/dist/model/base.js +2 -0
- package/dist/model/base.js.map +1 -0
- package/dist/model/client.d.ts +26 -0
- package/dist/model/client.js +300 -0
- package/dist/model/client.js.map +1 -0
- package/dist/model/image/compress.d.ts +53 -0
- package/dist/model/image/compress.js +89 -0
- package/dist/model/image/compress.js.map +1 -0
- package/dist/model/image/transport.d.ts +134 -0
- package/dist/model/image/transport.js +154 -0
- package/dist/model/image/transport.js.map +1 -0
- package/dist/orchestrator-system-prompt.d.ts +6 -0
- package/dist/orchestrator-system-prompt.js +81 -0
- package/dist/orchestrator-system-prompt.js.map +1 -0
- package/dist/pi-context.d.ts +82 -0
- package/dist/pi-context.js +62 -0
- package/dist/pi-context.js.map +1 -0
- package/dist/pi-local-skills.d.ts +17 -0
- package/dist/pi-local-skills.js +24 -0
- package/dist/pi-local-skills.js.map +1 -0
- package/dist/plugins/acp/index.d.ts +46 -0
- package/dist/plugins/acp/index.js +111 -0
- package/dist/plugins/acp/index.js.map +1 -0
- package/dist/plugins/agent-sync/index.d.ts +40 -0
- package/dist/plugins/agent-sync/index.js +98 -0
- package/dist/plugins/agent-sync/index.js.map +1 -0
- package/dist/plugins/http-debug/index.d.ts +30 -0
- package/dist/plugins/http-debug/index.js +64 -0
- package/dist/plugins/http-debug/index.js.map +1 -0
- package/dist/plugins/http-debug/server.d.ts +92 -0
- package/dist/plugins/http-debug/server.js +464 -0
- package/dist/plugins/http-debug/server.js.map +1 -0
- package/dist/ports/agent-core.d.ts +158 -0
- package/dist/ports/agent-core.js +2 -0
- package/dist/ports/agent-core.js.map +1 -0
- package/dist/ports/agent-host.d.ts +125 -0
- package/dist/ports/agent-host.js +23 -0
- package/dist/ports/agent-host.js.map +1 -0
- package/dist/ports/device.d.ts +53 -0
- package/dist/ports/device.js +13 -0
- package/dist/ports/device.js.map +1 -0
- package/dist/ports/identity.d.ts +22 -0
- package/dist/ports/identity.js +9 -0
- package/dist/ports/identity.js.map +1 -0
- package/dist/ports/plugin.d.ts +62 -0
- package/dist/ports/plugin.js +35 -0
- package/dist/ports/plugin.js.map +1 -0
- package/dist/ports/transport.d.ts +32 -0
- package/dist/ports/transport.js +12 -0
- package/dist/ports/transport.js.map +1 -0
- package/dist/ports/vlm.d.ts +59 -0
- package/dist/ports/vlm.js +14 -0
- package/dist/ports/vlm.js.map +1 -0
- package/dist/test-lan-autoglm.d.ts +7 -0
- package/dist/test-lan-autoglm.js +46 -0
- package/dist/test-lan-autoglm.js.map +1 -0
- package/dist/test-mem-breakdown.d.ts +1 -0
- package/dist/test-mem-breakdown.js +103 -0
- package/dist/test-mem-breakdown.js.map +1 -0
- package/dist/test-mem.d.ts +1 -0
- package/dist/test-mem.js +60 -0
- package/dist/test-mem.js.map +1 -0
- package/dist/test-mobile-use.d.ts +1 -0
- package/dist/test-mobile-use.js +18 -0
- package/dist/test-mobile-use.js.map +1 -0
- package/dist/test-screenshot-loop.d.ts +1 -0
- package/dist/test-screenshot-loop.js +43 -0
- package/dist/test-screenshot-loop.js.map +1 -0
- package/dist/test-screenshot.d.ts +1 -0
- package/dist/test-screenshot.js +10 -0
- package/dist/test-screenshot.js.map +1 -0
- package/dist/test-ui-xml-dump.d.ts +15 -0
- package/dist/test-ui-xml-dump.js +49 -0
- package/dist/test-ui-xml-dump.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `device/*` handlers (6 methods).
|
|
3
|
+
*
|
|
4
|
+
* Wire format is preserved byte-for-byte (matches the Python reference and
|
|
5
|
+
* existing ACP clients):
|
|
6
|
+
* - device/info → DeviceInfo dataclass shape
|
|
7
|
+
* - device/screenshot → { image: <base64>, format: "png"|"jpeg" }
|
|
8
|
+
* - device/ui-tree → { nodes: UiNode[] }
|
|
9
|
+
* - device/action → { status: "ok", action: <verb> }
|
|
10
|
+
* - device/install → { status: "ok" }
|
|
11
|
+
* - device/shell → { output: <stdout> }
|
|
12
|
+
*
|
|
13
|
+
* Internally the handlers route through an `IMcpRuntime` provider — either
|
|
14
|
+
* the sibling `device-mcp-server` (HTTP) or the legacy in-process bridge.
|
|
15
|
+
* The `parseAcpAction()` translator (in `@beeos-ai/device-common`) maps the
|
|
16
|
+
* ACP wire vocabulary onto the unified `Action` schema, which the MCP
|
|
17
|
+
* runtime then dispatches.
|
|
18
|
+
*/
|
|
19
|
+
import type { IMcpRuntime } from "../../../mcp-client/runtime.js";
|
|
20
|
+
export interface AcpDeviceHandlersOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Lazy resolver for the MCP runtime — invoked per request so callers can
|
|
23
|
+
* swap the underlying runtime (autospawn restart, ACP device switch) at
|
|
24
|
+
* runtime without recreating the handlers.
|
|
25
|
+
*/
|
|
26
|
+
mcpProvider: () => IMcpRuntime;
|
|
27
|
+
}
|
|
28
|
+
export declare class AcpDeviceHandlers {
|
|
29
|
+
private readonly mcpProvider;
|
|
30
|
+
constructor(provider: AcpDeviceHandlersOptions | (() => IMcpRuntime));
|
|
31
|
+
info(_msg: AcpMessage): Promise<Record<string, unknown>>;
|
|
32
|
+
screenshot(_msg: AcpMessage): Promise<Record<string, unknown>>;
|
|
33
|
+
uiTree(_msg: AcpMessage): Promise<Record<string, unknown>>;
|
|
34
|
+
action(msg: AcpMessage): Promise<Record<string, unknown>>;
|
|
35
|
+
install(msg: AcpMessage): Promise<Record<string, unknown>>;
|
|
36
|
+
shell(msg: AcpMessage): Promise<Record<string, unknown>>;
|
|
37
|
+
}
|
|
38
|
+
export interface AcpMessage {
|
|
39
|
+
jsonrpc?: string;
|
|
40
|
+
id?: string | number | null;
|
|
41
|
+
method?: string;
|
|
42
|
+
params?: Record<string, unknown>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `device/*` handlers (6 methods).
|
|
3
|
+
*
|
|
4
|
+
* Wire format is preserved byte-for-byte (matches the Python reference and
|
|
5
|
+
* existing ACP clients):
|
|
6
|
+
* - device/info → DeviceInfo dataclass shape
|
|
7
|
+
* - device/screenshot → { image: <base64>, format: "png"|"jpeg" }
|
|
8
|
+
* - device/ui-tree → { nodes: UiNode[] }
|
|
9
|
+
* - device/action → { status: "ok", action: <verb> }
|
|
10
|
+
* - device/install → { status: "ok" }
|
|
11
|
+
* - device/shell → { output: <stdout> }
|
|
12
|
+
*
|
|
13
|
+
* Internally the handlers route through an `IMcpRuntime` provider — either
|
|
14
|
+
* the sibling `device-mcp-server` (HTTP) or the legacy in-process bridge.
|
|
15
|
+
* The `parseAcpAction()` translator (in `@beeos-ai/device-common`) maps the
|
|
16
|
+
* ACP wire vocabulary onto the unified `Action` schema, which the MCP
|
|
17
|
+
* runtime then dispatches.
|
|
18
|
+
*/
|
|
19
|
+
import * as os from "node:os";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
import { parseAcpAction } from "@beeos-ai/device-common";
|
|
22
|
+
import { searchUiXmlNodes } from "../../../device/ui-xml.js";
|
|
23
|
+
import { AcpError, DeviceError } from "../../../core/errors.js";
|
|
24
|
+
export class AcpDeviceHandlers {
|
|
25
|
+
mcpProvider;
|
|
26
|
+
constructor(provider) {
|
|
27
|
+
this.mcpProvider =
|
|
28
|
+
typeof provider === "function" ? provider : provider.mcpProvider;
|
|
29
|
+
}
|
|
30
|
+
async info(_msg) {
|
|
31
|
+
const mcp = this.mcpProvider();
|
|
32
|
+
if (!mcp.info) {
|
|
33
|
+
throw new DeviceError("device/info is not supported on this MCP runtime", { subtype: "internal_error" });
|
|
34
|
+
}
|
|
35
|
+
const info = await mcp.info();
|
|
36
|
+
return serializeDeviceInfo(info);
|
|
37
|
+
}
|
|
38
|
+
async screenshot(_msg) {
|
|
39
|
+
const mcp = this.mcpProvider();
|
|
40
|
+
const ss = await mcp.screenshot();
|
|
41
|
+
return { image: ss.b64, format: ss.format };
|
|
42
|
+
}
|
|
43
|
+
async uiTree(_msg) {
|
|
44
|
+
const mcp = this.mcpProvider();
|
|
45
|
+
// Always pull the raw uiautomator XML — searchUiXmlNodes turns it into
|
|
46
|
+
// the legacy `UiNode[]` ACP wire shape that existing clients expect.
|
|
47
|
+
const dump = await mcp.uiDump({ format: "raw" });
|
|
48
|
+
if (!dump.supported)
|
|
49
|
+
return { nodes: [] };
|
|
50
|
+
const nodes = searchUiXmlNodes(dump.content ?? "", "");
|
|
51
|
+
return { nodes };
|
|
52
|
+
}
|
|
53
|
+
async action(msg) {
|
|
54
|
+
const params = msg.params ?? {};
|
|
55
|
+
const action = params.action ?? "";
|
|
56
|
+
if (!action)
|
|
57
|
+
throw new DeviceError("'action' is required", { subtype: "invalid_args" });
|
|
58
|
+
// ACP wire: action args MAY arrive nested under `parameters` (HTTP-style)
|
|
59
|
+
// or flattened alongside `action` (legacy / convenience). Accept both.
|
|
60
|
+
const args = params.parameters && typeof params.parameters === "object"
|
|
61
|
+
? params.parameters
|
|
62
|
+
: params;
|
|
63
|
+
const a = parseAcpAction(action, args);
|
|
64
|
+
const mcp = this.mcpProvider();
|
|
65
|
+
const r = await mcp.act(a);
|
|
66
|
+
if (!r.ok) {
|
|
67
|
+
throw new DeviceError(r.error?.message ?? `device/action ${action} failed`, {
|
|
68
|
+
subtype: "device_error",
|
|
69
|
+
cause: { code: r.error?.code, action: r.action, durationMs: r.durationMs },
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return { status: "ok", action };
|
|
73
|
+
}
|
|
74
|
+
async install(msg) {
|
|
75
|
+
// ACP wire v2 prefers `apkPath` (camelCase); accept `apk_path` for
|
|
76
|
+
// backward compatibility with the Python implementation.
|
|
77
|
+
const params = msg.params ?? {};
|
|
78
|
+
const apkPath = params.apkPath ??
|
|
79
|
+
params.apk_path ??
|
|
80
|
+
"";
|
|
81
|
+
if (!apkPath) {
|
|
82
|
+
throw new DeviceError("apkPath is required", { subtype: "invalid_args" });
|
|
83
|
+
}
|
|
84
|
+
const sanitized = sanitizeApkPath(apkPath);
|
|
85
|
+
const mcp = this.mcpProvider();
|
|
86
|
+
if (!mcp.installApk) {
|
|
87
|
+
throw new DeviceError("device/install is not supported on this MCP runtime", { subtype: "internal_error" });
|
|
88
|
+
}
|
|
89
|
+
await mcp.installApk(sanitized);
|
|
90
|
+
return { status: "ok" };
|
|
91
|
+
}
|
|
92
|
+
async shell(msg) {
|
|
93
|
+
if (process.env.BEEOS_SHELL_ALLOW !== "true") {
|
|
94
|
+
throw new AcpError("shell command execution is disabled — set BEEOS_SHELL_ALLOW=true to opt in", -32603, { category: "shell-disabled" });
|
|
95
|
+
}
|
|
96
|
+
const command = msg.params?.command ?? "";
|
|
97
|
+
if (!command)
|
|
98
|
+
throw new DeviceError("command is required", { subtype: "invalid_args" });
|
|
99
|
+
const mcp = this.mcpProvider();
|
|
100
|
+
if (!mcp.executeCommand) {
|
|
101
|
+
throw new DeviceError("device/shell is not supported on this MCP runtime", { subtype: "internal_error" });
|
|
102
|
+
}
|
|
103
|
+
const r = await mcp.executeCommand(command);
|
|
104
|
+
return { output: r.stdout };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Validate `apk_path` against an install-root whitelist.
|
|
109
|
+
*
|
|
110
|
+
* Rules:
|
|
111
|
+
* - Must be absolute.
|
|
112
|
+
* - May not contain `..` segments.
|
|
113
|
+
* - Must reside under one of the allowed roots:
|
|
114
|
+
* • `~/.beeos/uploads/`
|
|
115
|
+
* • `BEEOS_INSTALL_ROOT` env (if set)
|
|
116
|
+
*
|
|
117
|
+
* Returns a normalized absolute path on success; throws DeviceError on failure.
|
|
118
|
+
*/
|
|
119
|
+
function sanitizeApkPath(input) {
|
|
120
|
+
if (!path.isAbsolute(input)) {
|
|
121
|
+
throw new DeviceError(`apk_path must be absolute: ${input}`, { subtype: "invalid_args" });
|
|
122
|
+
}
|
|
123
|
+
if (input.split(path.sep).some((seg) => seg === "..")) {
|
|
124
|
+
throw new DeviceError("apk_path may not contain '..' segments", { subtype: "invalid_args" });
|
|
125
|
+
}
|
|
126
|
+
const normalized = path.normalize(input);
|
|
127
|
+
const roots = [path.join(os.homedir(), ".beeos", "uploads")];
|
|
128
|
+
if (process.env.BEEOS_INSTALL_ROOT) {
|
|
129
|
+
roots.push(path.normalize(process.env.BEEOS_INSTALL_ROOT));
|
|
130
|
+
}
|
|
131
|
+
const allowed = roots.some((root) => {
|
|
132
|
+
const rel = path.relative(root, normalized);
|
|
133
|
+
return rel !== "" && !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
134
|
+
});
|
|
135
|
+
if (!allowed) {
|
|
136
|
+
throw new DeviceError(`apk_path must reside under ${roots.join(" or ")} (got ${normalized})`, { subtype: "invalid_args" });
|
|
137
|
+
}
|
|
138
|
+
return normalized;
|
|
139
|
+
}
|
|
140
|
+
function serializeDeviceInfo(info) {
|
|
141
|
+
return {
|
|
142
|
+
type: info.type,
|
|
143
|
+
name: info.name,
|
|
144
|
+
os: info.os,
|
|
145
|
+
width: info.width,
|
|
146
|
+
height: info.height,
|
|
147
|
+
capabilities: info.capabilities,
|
|
148
|
+
osVersion: info.osVersion,
|
|
149
|
+
density: info.density,
|
|
150
|
+
metadata: info.metadata,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../../../src/inbound/acp/handlers/device.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `initialize` handler.
|
|
3
|
+
*
|
|
4
|
+
* Response shape MUST match the beeos-claw / web SDK contract:
|
|
5
|
+
*
|
|
6
|
+
* - `protocolVersion` is sourced from `@beeos-ai/beeos-types/acp`
|
|
7
|
+
* (`ACP_PROTOCOL_VERSION`) so a future bump propagates without an
|
|
8
|
+
* edit here.
|
|
9
|
+
* - `agentCapabilities.promptCapabilities.image` / `embeddedContext`
|
|
10
|
+
* are TRUE because the device agent forwards screenshots + base64
|
|
11
|
+
* image blocks straight into the inner mobile-use VLM. Audio stays
|
|
12
|
+
* false (we have no audio capture path).
|
|
13
|
+
* - `terminal` / `skills` / `mcp` / `sessionCapabilities` stay false
|
|
14
|
+
* / empty — this agent intentionally does NOT implement those
|
|
15
|
+
* business surfaces (skills/, canvas/, cron/, terminal/, mcp/),
|
|
16
|
+
* and `Method not found` (-32601) is the documented response for
|
|
17
|
+
* such probes.
|
|
18
|
+
* - `forwardThinking` / `forwardToolCalls` from the client are
|
|
19
|
+
* surfaced on the returned options so callers can wire transport
|
|
20
|
+
* filtering (mirrors beeos-claw `transport.ts.forwardControl`).
|
|
21
|
+
*/
|
|
22
|
+
import { ACP_PROTOCOL_VERSION } from "@beeos-ai/beeos-types/acp";
|
|
23
|
+
export interface InitializeRequestParams {
|
|
24
|
+
/** Server should suppress `agent_thought_chunk` notifications when false. */
|
|
25
|
+
forwardThinking?: boolean;
|
|
26
|
+
/** Server should suppress `tool_call` / `tool_call_update` notifications when false. */
|
|
27
|
+
forwardToolCalls?: boolean;
|
|
28
|
+
/** Echoed back to allow the client to verify identity binding. */
|
|
29
|
+
clientName?: string;
|
|
30
|
+
/** Tolerated forward-compat fields. */
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface InitializeOptions {
|
|
34
|
+
agentName?: string;
|
|
35
|
+
agentTitle?: string;
|
|
36
|
+
version?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Optional hook invoked with the resolved forward-control flags so the
|
|
39
|
+
* caller can apply them to its transport (mirrors beeos-claw's
|
|
40
|
+
* forwardControl). Pure read-side: the handler still returns the same
|
|
41
|
+
* response shape regardless of whether the hook is set.
|
|
42
|
+
*/
|
|
43
|
+
onForwardControl?: (control: {
|
|
44
|
+
forwardThinking: boolean;
|
|
45
|
+
forwardToolCalls: boolean;
|
|
46
|
+
}) => void;
|
|
47
|
+
}
|
|
48
|
+
export interface InitializeResponse {
|
|
49
|
+
protocolVersion: typeof ACP_PROTOCOL_VERSION;
|
|
50
|
+
agentCapabilities: {
|
|
51
|
+
loadSession: boolean;
|
|
52
|
+
terminal: boolean;
|
|
53
|
+
skills: boolean;
|
|
54
|
+
multipleSessions: boolean;
|
|
55
|
+
mcp: Record<string, never>;
|
|
56
|
+
sessionCapabilities: Record<string, never>;
|
|
57
|
+
promptCapabilities: {
|
|
58
|
+
image: boolean;
|
|
59
|
+
audio: boolean;
|
|
60
|
+
embeddedContext: boolean;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
agentInfo: {
|
|
64
|
+
name: string;
|
|
65
|
+
title: string;
|
|
66
|
+
version: string;
|
|
67
|
+
};
|
|
68
|
+
_meta: Record<string, never>;
|
|
69
|
+
authMethods: string[];
|
|
70
|
+
}
|
|
71
|
+
export declare function buildInitializeResponse(opts?: InitializeOptions, params?: InitializeRequestParams): InitializeResponse;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `initialize` handler.
|
|
3
|
+
*
|
|
4
|
+
* Response shape MUST match the beeos-claw / web SDK contract:
|
|
5
|
+
*
|
|
6
|
+
* - `protocolVersion` is sourced from `@beeos-ai/beeos-types/acp`
|
|
7
|
+
* (`ACP_PROTOCOL_VERSION`) so a future bump propagates without an
|
|
8
|
+
* edit here.
|
|
9
|
+
* - `agentCapabilities.promptCapabilities.image` / `embeddedContext`
|
|
10
|
+
* are TRUE because the device agent forwards screenshots + base64
|
|
11
|
+
* image blocks straight into the inner mobile-use VLM. Audio stays
|
|
12
|
+
* false (we have no audio capture path).
|
|
13
|
+
* - `terminal` / `skills` / `mcp` / `sessionCapabilities` stay false
|
|
14
|
+
* / empty — this agent intentionally does NOT implement those
|
|
15
|
+
* business surfaces (skills/, canvas/, cron/, terminal/, mcp/),
|
|
16
|
+
* and `Method not found` (-32601) is the documented response for
|
|
17
|
+
* such probes.
|
|
18
|
+
* - `forwardThinking` / `forwardToolCalls` from the client are
|
|
19
|
+
* surfaced on the returned options so callers can wire transport
|
|
20
|
+
* filtering (mirrors beeos-claw `transport.ts.forwardControl`).
|
|
21
|
+
*/
|
|
22
|
+
import { ACP_PROTOCOL_VERSION } from "@beeos-ai/beeos-types/acp";
|
|
23
|
+
export function buildInitializeResponse(opts = {}, params = {}) {
|
|
24
|
+
// Default to true so legacy clients (which don't send the flags at all)
|
|
25
|
+
// keep receiving the full stream — same default beeos-claw applies.
|
|
26
|
+
const forwardThinking = params.forwardThinking ?? true;
|
|
27
|
+
const forwardToolCalls = params.forwardToolCalls ?? true;
|
|
28
|
+
opts.onForwardControl?.({ forwardThinking, forwardToolCalls });
|
|
29
|
+
return {
|
|
30
|
+
protocolVersion: ACP_PROTOCOL_VERSION,
|
|
31
|
+
agentCapabilities: {
|
|
32
|
+
loadSession: true,
|
|
33
|
+
terminal: false,
|
|
34
|
+
skills: false,
|
|
35
|
+
multipleSessions: true,
|
|
36
|
+
mcp: {},
|
|
37
|
+
sessionCapabilities: {},
|
|
38
|
+
promptCapabilities: {
|
|
39
|
+
image: true,
|
|
40
|
+
audio: false,
|
|
41
|
+
embeddedContext: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
agentInfo: {
|
|
45
|
+
name: opts.agentName ?? "device-agent",
|
|
46
|
+
title: opts.agentTitle ?? "BeeOS Device Agent",
|
|
47
|
+
version: opts.version ?? "0.1.0",
|
|
48
|
+
},
|
|
49
|
+
_meta: {},
|
|
50
|
+
authMethods: [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=initialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../src/inbound/acp/handlers/initialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAkDjE,MAAM,UAAU,uBAAuB,CACrC,OAA0B,EAAE,EAC5B,SAAkC,EAAE;IAEpC,wEAAwE;IACxE,oEAAoE;IACpE,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC;IACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAE/D,OAAO;QACL,eAAe,EAAE,oBAAoB;QACrC,iBAAiB,EAAE;YACjB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,KAAK;YACb,gBAAgB,EAAE,IAAI;YACtB,GAAG,EAAE,EAAE;YACP,mBAAmB,EAAE,EAAE;YACvB,kBAAkB,EAAE;gBAClB,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,KAAK;gBACZ,eAAe,EAAE,IAAI;aACtB;SACF;QACD,SAAS,EAAE;YACT,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,cAAc;YACtC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,oBAAoB;YAC9C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;SACjC;QACD,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `models/list` handler.
|
|
3
|
+
*/
|
|
4
|
+
export interface ModelEntry {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
provider: string;
|
|
8
|
+
}
|
|
9
|
+
export type ModelListProvider = () => ModelEntry[] | Promise<ModelEntry[]>;
|
|
10
|
+
export declare class AcpModelHandlers {
|
|
11
|
+
private readonly getModels?;
|
|
12
|
+
constructor(getModels?: ModelListProvider | undefined);
|
|
13
|
+
list(): Promise<{
|
|
14
|
+
models: ModelEntry[];
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `models/list` handler.
|
|
3
|
+
*/
|
|
4
|
+
const DEFAULT_MODELS = [
|
|
5
|
+
{ id: "openrouter/bytedance/ui-tars-1.5-7b", name: "UI-TARS 1.5 7B", provider: "openrouter" },
|
|
6
|
+
{ id: "openrouter/qwen/qwen2.5-vl-72b-instruct", name: "Qwen 2.5 VL 72B", provider: "openrouter" },
|
|
7
|
+
{ id: "openrouter/anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6", provider: "openrouter" },
|
|
8
|
+
{ id: "openrouter/anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5", provider: "openrouter" },
|
|
9
|
+
{ id: "openrouter/openai/gpt-5.4", name: "GPT-5.4", provider: "openrouter" },
|
|
10
|
+
{ id: "openrouter/openai/gpt-5.4-mini", name: "GPT-5.4 Mini", provider: "openrouter" },
|
|
11
|
+
{ id: "openrouter/google/gemini-3-flash-preview", name: "Gemini 3 Flash", provider: "openrouter" },
|
|
12
|
+
];
|
|
13
|
+
export class AcpModelHandlers {
|
|
14
|
+
getModels;
|
|
15
|
+
constructor(getModels) {
|
|
16
|
+
this.getModels = getModels;
|
|
17
|
+
}
|
|
18
|
+
async list() {
|
|
19
|
+
const models = this.getModels ? await this.getModels() : DEFAULT_MODELS;
|
|
20
|
+
return { models };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/inbound/acp/handlers/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,cAAc,GAAiB;IACnC,EAAE,EAAE,EAAE,qCAAqC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC7F,EAAE,EAAE,EAAE,yCAAyC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAClG,EAAE,EAAE,EAAE,wCAAwC,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE;IACnG,EAAE,EAAE,EAAE,uCAAuC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IACjG,EAAE,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC5E,EAAE,EAAE,EAAE,gCAAgC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE;IACtF,EAAE,EAAE,EAAE,0CAA0C,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;CACnG,CAAC;AAIF,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,SAA6B;QAA7B,cAAS,GAAT,SAAS,CAAoB;IAAG,CAAC;IAE9D,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;QACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `session/*` handlers (10 methods).
|
|
3
|
+
*
|
|
4
|
+
* Thin pass-through to `SessionManager`. Field names use camelCase to match
|
|
5
|
+
* the web SDK (`acp-client.ts`).
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionManager } from "../../../app/session-manager.js";
|
|
8
|
+
import type { AcpMessage } from "./device.js";
|
|
9
|
+
export declare class AcpSessionHandlers {
|
|
10
|
+
private readonly sessions;
|
|
11
|
+
constructor(sessions: SessionManager);
|
|
12
|
+
new(_msg: AcpMessage): Promise<{
|
|
13
|
+
sessionId: string;
|
|
14
|
+
}>;
|
|
15
|
+
load(msg: AcpMessage): Promise<{
|
|
16
|
+
sessionId: string;
|
|
17
|
+
history: import("../../../app/message-store.js").MessageHistoryEntry[];
|
|
18
|
+
}>;
|
|
19
|
+
list(_msg: AcpMessage): Promise<{
|
|
20
|
+
sessions: {
|
|
21
|
+
sessionId: string;
|
|
22
|
+
title: string;
|
|
23
|
+
updatedAt: number;
|
|
24
|
+
}[];
|
|
25
|
+
}>;
|
|
26
|
+
prompt(msg: AcpMessage): Promise<{
|
|
27
|
+
stopReason: string;
|
|
28
|
+
}>;
|
|
29
|
+
rename(msg: AcpMessage): Promise<{
|
|
30
|
+
sessionId: string;
|
|
31
|
+
title: string;
|
|
32
|
+
}>;
|
|
33
|
+
delete(msg: AcpMessage): Promise<{
|
|
34
|
+
deleted: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
clear(msg: AcpMessage): Promise<{
|
|
37
|
+
cleared: boolean;
|
|
38
|
+
}>;
|
|
39
|
+
cancel(_msg: AcpMessage): Promise<{
|
|
40
|
+
cancelled: boolean;
|
|
41
|
+
}>;
|
|
42
|
+
setMode(msg: AcpMessage): Promise<{
|
|
43
|
+
sessionId: string;
|
|
44
|
+
mode: string;
|
|
45
|
+
}>;
|
|
46
|
+
setModel(msg: AcpMessage): Promise<{
|
|
47
|
+
sessionId: string;
|
|
48
|
+
provider: string;
|
|
49
|
+
model: string;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `session/*` handlers (10 methods).
|
|
3
|
+
*
|
|
4
|
+
* Thin pass-through to `SessionManager`. Field names use camelCase to match
|
|
5
|
+
* the web SDK (`acp-client.ts`).
|
|
6
|
+
*/
|
|
7
|
+
export class AcpSessionHandlers {
|
|
8
|
+
sessions;
|
|
9
|
+
constructor(sessions) {
|
|
10
|
+
this.sessions = sessions;
|
|
11
|
+
}
|
|
12
|
+
async new(_msg) {
|
|
13
|
+
return this.sessions.newSession();
|
|
14
|
+
}
|
|
15
|
+
async load(msg) {
|
|
16
|
+
const params = msg.params ?? {};
|
|
17
|
+
const id = params.sessionId || params.session_id || "";
|
|
18
|
+
return this.sessions.loadSession(id);
|
|
19
|
+
}
|
|
20
|
+
async list(_msg) {
|
|
21
|
+
return this.sessions.listSessions();
|
|
22
|
+
}
|
|
23
|
+
async prompt(msg) {
|
|
24
|
+
const params = msg.params ?? {};
|
|
25
|
+
const sessionId = params.sessionId || params.session_id || undefined;
|
|
26
|
+
const prompt = params.prompt;
|
|
27
|
+
return this.sessions.prompt(prompt, sessionId);
|
|
28
|
+
}
|
|
29
|
+
async rename(msg) {
|
|
30
|
+
const params = msg.params ?? {};
|
|
31
|
+
const id = params.sessionId ?? "";
|
|
32
|
+
const title = params.title ?? "";
|
|
33
|
+
return this.sessions.renameSession(id, title);
|
|
34
|
+
}
|
|
35
|
+
async delete(msg) {
|
|
36
|
+
const id = msg.params?.sessionId ?? "";
|
|
37
|
+
return this.sessions.deleteSession(id);
|
|
38
|
+
}
|
|
39
|
+
async clear(msg) {
|
|
40
|
+
const id = msg.params?.sessionId ?? "";
|
|
41
|
+
return this.sessions.clearSession(id);
|
|
42
|
+
}
|
|
43
|
+
async cancel(_msg) {
|
|
44
|
+
const cancelled = await this.sessions.cancel();
|
|
45
|
+
return { cancelled };
|
|
46
|
+
}
|
|
47
|
+
async setMode(msg) {
|
|
48
|
+
const params = msg.params ?? {};
|
|
49
|
+
const id = params.sessionId ?? "";
|
|
50
|
+
const mode = params.mode ?? "agent";
|
|
51
|
+
return this.sessions.setMode(id, mode);
|
|
52
|
+
}
|
|
53
|
+
async setModel(msg) {
|
|
54
|
+
const params = msg.params ?? {};
|
|
55
|
+
const id = params.sessionId ?? "";
|
|
56
|
+
const model = params.model ?? "";
|
|
57
|
+
const provider = params.provider ?? "";
|
|
58
|
+
return this.sessions.setModel(id, model, provider);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/inbound/acp/handlers/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../src/inbound/acp/handlers/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,IAAI;QACR,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — push `session/update` notifications onto the Bridge transport.
|
|
3
|
+
*
|
|
4
|
+
* Used by SessionManager to stream agent_message_chunk / tool_call /
|
|
5
|
+
* tool_call_update / agent_status events back to the connected client.
|
|
6
|
+
*
|
|
7
|
+
* Wire-shape contract (mirrors beeos-claw `acp-gateway/transport.ts`
|
|
8
|
+
* `sendNotification`):
|
|
9
|
+
*
|
|
10
|
+
* {
|
|
11
|
+
* jsonrpc: "2.0",
|
|
12
|
+
* method: "session/update",
|
|
13
|
+
* params: { sessionId, update },
|
|
14
|
+
* _debug_index: <process-monotonic uint>,
|
|
15
|
+
* _ts: <Date.now() in ms>,
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* `_debug_index` lets the client deterministically order chunks even when
|
|
19
|
+
* transport reorders, and `_ts` carries server-wall-clock ms for timeline
|
|
20
|
+
* debugging. Clients ignore unknown envelope keys — both fields are
|
|
21
|
+
* additive, never load-bearing.
|
|
22
|
+
*/
|
|
23
|
+
import type { IBridgeTransport } from "../../ports/transport.js";
|
|
24
|
+
import type { SessionUpdateNotifier } from "../../app/session-manager.js";
|
|
25
|
+
export declare class TransportSessionNotifier implements SessionUpdateNotifier {
|
|
26
|
+
private readonly transport;
|
|
27
|
+
/**
|
|
28
|
+
* Process-monotonic counter shared across every notification on a
|
|
29
|
+
* given transport instance. Wraps cleanly via JS number safety bounds
|
|
30
|
+
* (>1e15 events before precision loss).
|
|
31
|
+
*/
|
|
32
|
+
private debugIndex;
|
|
33
|
+
constructor(transport: IBridgeTransport);
|
|
34
|
+
send(sessionId: string, update: Record<string, unknown>): void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — push `session/update` notifications onto the Bridge transport.
|
|
3
|
+
*
|
|
4
|
+
* Used by SessionManager to stream agent_message_chunk / tool_call /
|
|
5
|
+
* tool_call_update / agent_status events back to the connected client.
|
|
6
|
+
*
|
|
7
|
+
* Wire-shape contract (mirrors beeos-claw `acp-gateway/transport.ts`
|
|
8
|
+
* `sendNotification`):
|
|
9
|
+
*
|
|
10
|
+
* {
|
|
11
|
+
* jsonrpc: "2.0",
|
|
12
|
+
* method: "session/update",
|
|
13
|
+
* params: { sessionId, update },
|
|
14
|
+
* _debug_index: <process-monotonic uint>,
|
|
15
|
+
* _ts: <Date.now() in ms>,
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* `_debug_index` lets the client deterministically order chunks even when
|
|
19
|
+
* transport reorders, and `_ts` carries server-wall-clock ms for timeline
|
|
20
|
+
* debugging. Clients ignore unknown envelope keys — both fields are
|
|
21
|
+
* additive, never load-bearing.
|
|
22
|
+
*/
|
|
23
|
+
export class TransportSessionNotifier {
|
|
24
|
+
transport;
|
|
25
|
+
/**
|
|
26
|
+
* Process-monotonic counter shared across every notification on a
|
|
27
|
+
* given transport instance. Wraps cleanly via JS number safety bounds
|
|
28
|
+
* (>1e15 events before precision loss).
|
|
29
|
+
*/
|
|
30
|
+
debugIndex = 0;
|
|
31
|
+
constructor(transport) {
|
|
32
|
+
this.transport = transport;
|
|
33
|
+
}
|
|
34
|
+
send(sessionId, update) {
|
|
35
|
+
const msg = JSON.stringify({
|
|
36
|
+
jsonrpc: "2.0",
|
|
37
|
+
method: "session/update",
|
|
38
|
+
params: { sessionId, update },
|
|
39
|
+
_debug_index: this.debugIndex++,
|
|
40
|
+
_ts: Date.now(),
|
|
41
|
+
});
|
|
42
|
+
void this.transport.send(msg).catch(() => undefined);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../../src/inbound/acp/notifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,MAAM,OAAO,wBAAwB;IAQN;IAP7B;;;;OAIG;IACK,UAAU,GAAG,CAAC,CAAC;IAEvB,YAA6B,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAE5D,IAAI,CAAC,SAAiB,EAAE,MAA+B;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAC7B,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;SAChB,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;CACF"}
|