@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,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application use case — SessionManager.
|
|
3
|
+
*
|
|
4
|
+
* Owns ACP session lifecycle (new/load/list/rename/delete/clear) and the
|
|
5
|
+
* dispatch of `session/prompt` to the underlying `AgentHost`. Streaming
|
|
6
|
+
* `session/update` envelopes are produced by translating `AgentEvent`s
|
|
7
|
+
* received from the host bus.
|
|
8
|
+
*
|
|
9
|
+
* SessionManager itself is protocol-agnostic w.r.t. the agent core — it
|
|
10
|
+
* speaks `AgentHost` only. The translation of host events into ACP
|
|
11
|
+
* envelopes lives here so swapping `IAgentCore` (single-layer / pi
|
|
12
|
+
* orchestrator / mock) doesn't change ACP semantics.
|
|
13
|
+
*
|
|
14
|
+
* Surface mirrors the Python `SessionHandler` so ACP handlers remain
|
|
15
|
+
* thin pass-throughs.
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from "node:crypto";
|
|
18
|
+
import { newSession } from "../core/session.js";
|
|
19
|
+
import { MessageStore } from "./message-store.js";
|
|
20
|
+
export class SessionManager {
|
|
21
|
+
host;
|
|
22
|
+
store;
|
|
23
|
+
notifier;
|
|
24
|
+
onSetModel;
|
|
25
|
+
maxSessions;
|
|
26
|
+
sessionTtlMs;
|
|
27
|
+
sessions = new Map();
|
|
28
|
+
/** taskId → sessionId for routing host events to the right ACP session. */
|
|
29
|
+
taskToSession = new Map();
|
|
30
|
+
activeSessionId = null;
|
|
31
|
+
currentTask = null;
|
|
32
|
+
unsubscribe = null;
|
|
33
|
+
constructor(opts) {
|
|
34
|
+
this.host = opts.host;
|
|
35
|
+
this.store = opts.messageStore ?? new MessageStore();
|
|
36
|
+
this.notifier = opts.notifier;
|
|
37
|
+
this.onSetModel = opts.onSetModel;
|
|
38
|
+
this.maxSessions = opts.maxSessions ?? 50;
|
|
39
|
+
this.sessionTtlMs = opts.sessionTtlMs ?? 60 * 60 * 1000;
|
|
40
|
+
this.unsubscribe = this.host.on((ev) => this.handleHostEvent(ev));
|
|
41
|
+
}
|
|
42
|
+
/** Detach from the host bus (used when shutting down the ACP plugin). */
|
|
43
|
+
detach() {
|
|
44
|
+
if (this.unsubscribe) {
|
|
45
|
+
this.unsubscribe();
|
|
46
|
+
this.unsubscribe = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// ── ACP semantics — name mirrors Python SessionHandler ───────────────────
|
|
50
|
+
newSession() {
|
|
51
|
+
this.evictExpired();
|
|
52
|
+
const id = randomUUID();
|
|
53
|
+
this.sessions.set(id, newSession(id));
|
|
54
|
+
this.activeSessionId = id;
|
|
55
|
+
this.store.upsertSession(id);
|
|
56
|
+
return { sessionId: id };
|
|
57
|
+
}
|
|
58
|
+
loadSession(sessionId) {
|
|
59
|
+
let id = sessionId;
|
|
60
|
+
const known = this.sessions.has(id) || this.store.sessionExists(id);
|
|
61
|
+
if (!known)
|
|
62
|
+
id = randomUUID();
|
|
63
|
+
if (!this.sessions.has(id))
|
|
64
|
+
this.sessions.set(id, newSession(id));
|
|
65
|
+
const s = this.sessions.get(id);
|
|
66
|
+
s.lastActive = Date.now();
|
|
67
|
+
this.activeSessionId = id;
|
|
68
|
+
this.store.upsertSession(id);
|
|
69
|
+
return { sessionId: id, history: this.store.getMessagesAsDicts(id, 50) };
|
|
70
|
+
}
|
|
71
|
+
listSessions() {
|
|
72
|
+
this.evictExpired();
|
|
73
|
+
return { sessions: this.store.listSessions(50) };
|
|
74
|
+
}
|
|
75
|
+
renameSession(sessionId, title) {
|
|
76
|
+
const s = this.sessions.get(sessionId);
|
|
77
|
+
if (s) {
|
|
78
|
+
s.title = title || s.title;
|
|
79
|
+
s.lastActive = Date.now();
|
|
80
|
+
}
|
|
81
|
+
if (title)
|
|
82
|
+
this.store.renameSession(sessionId, title);
|
|
83
|
+
return { sessionId, title };
|
|
84
|
+
}
|
|
85
|
+
deleteSession(sessionId) {
|
|
86
|
+
const had = this.sessions.has(sessionId);
|
|
87
|
+
this.sessions.delete(sessionId);
|
|
88
|
+
if (this.activeSessionId === sessionId)
|
|
89
|
+
this.activeSessionId = null;
|
|
90
|
+
this.store.deleteSession(sessionId);
|
|
91
|
+
return { deleted: had };
|
|
92
|
+
}
|
|
93
|
+
clearSession(sessionId) {
|
|
94
|
+
const s = this.sessions.get(sessionId);
|
|
95
|
+
if (s) {
|
|
96
|
+
s.history = [];
|
|
97
|
+
s.lastActive = Date.now();
|
|
98
|
+
}
|
|
99
|
+
this.store.clearSession(sessionId);
|
|
100
|
+
return { cleared: !!s };
|
|
101
|
+
}
|
|
102
|
+
setMode(sessionId, mode) {
|
|
103
|
+
return { sessionId, mode };
|
|
104
|
+
}
|
|
105
|
+
async setModel(sessionId, model, provider = "") {
|
|
106
|
+
if (!model)
|
|
107
|
+
throw new Error("model is required");
|
|
108
|
+
if (this.onSetModel)
|
|
109
|
+
await this.onSetModel(provider, model);
|
|
110
|
+
return { sessionId, provider, model };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Run a prompt to completion and return the ACP `stopReason`.
|
|
114
|
+
*
|
|
115
|
+
* Streams `session/update` notifications during execution (translated
|
|
116
|
+
* from `AgentHost` events).
|
|
117
|
+
*/
|
|
118
|
+
async prompt(rawPrompt, sessionIdHint) {
|
|
119
|
+
const prompt = normalizePrompt(rawPrompt);
|
|
120
|
+
if (!prompt)
|
|
121
|
+
throw new Error("prompt is required");
|
|
122
|
+
const session = this.resolveSession(sessionIdHint);
|
|
123
|
+
session.lastActive = Date.now();
|
|
124
|
+
session.history.push({ role: "user", content: prompt, createdAt: session.lastActive });
|
|
125
|
+
this.store.addMessage(session.id, "user", prompt, "text");
|
|
126
|
+
this.activeSessionId = session.id;
|
|
127
|
+
this.notify(session.id, { sessionUpdate: "agent_status", status: "running" });
|
|
128
|
+
const submitted = this.host.submitTask(prompt, { correlationTag: session.id });
|
|
129
|
+
this.taskToSession.set(submitted.taskId, session.id);
|
|
130
|
+
this.currentTask = submitted;
|
|
131
|
+
session.currentTaskId = submitted.taskId;
|
|
132
|
+
let result;
|
|
133
|
+
try {
|
|
134
|
+
result = await submitted.done;
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
this.currentTask = null;
|
|
138
|
+
session.currentTaskId = null;
|
|
139
|
+
this.taskToSession.delete(submitted.taskId);
|
|
140
|
+
this.notify(session.id, { sessionUpdate: "agent_status", status: "idle" });
|
|
141
|
+
}
|
|
142
|
+
return { stopReason: result.cancelled ? "cancelled" : "end_turn" };
|
|
143
|
+
}
|
|
144
|
+
/** Cancel the in-flight task for the active session, if any. */
|
|
145
|
+
async cancel() {
|
|
146
|
+
if (!this.currentTask)
|
|
147
|
+
return false;
|
|
148
|
+
return this.currentTask.cancel();
|
|
149
|
+
}
|
|
150
|
+
// ── Internal ──────────────────────────────────────────────────────────────
|
|
151
|
+
/**
|
|
152
|
+
* Translate host `AgentEvent`s into ACP `session/update` envelopes.
|
|
153
|
+
*
|
|
154
|
+
* Handles five legitimate ACP-emitting sources plus structural events:
|
|
155
|
+
* - `task:text` — streamed user-visible reply (agent_message_chunk)
|
|
156
|
+
* - `task:reasoning` — streaming "thinking" delta (agent_thought_chunk):
|
|
157
|
+
* planner plan/replan descriptions and per-step
|
|
158
|
+
* VLM rationale.
|
|
159
|
+
* - `task:tool` — start / end pairs (tool_call / tool_call_update)
|
|
160
|
+
* - `task:notice` — out-of-band protocol notice. level=warn
|
|
161
|
+
* (transient retry hints) is dropped — noise
|
|
162
|
+
* the user can't act on. level=error (terminal
|
|
163
|
+
* failure) becomes a `system_message_chunk`
|
|
164
|
+
* with `metadata.kind = "agent_notice"`; the
|
|
165
|
+
* web client merges it into the matching
|
|
166
|
+
* assistant bubble's footer. NOT persisted.
|
|
167
|
+
* - `task:step` — structural step record (no ACP emission, kept
|
|
168
|
+
* for HTTP debug / future plugins).
|
|
169
|
+
*
|
|
170
|
+
* Every emitted envelope carries `_turnId` (groups all chunks of a
|
|
171
|
+
* single user prompt) and `messageId` (the per-task authoritative id
|
|
172
|
+
* shared by every chunk / thought / tool / notice in this turn). The
|
|
173
|
+
* web `chat-store` sidecar resolver pins thoughts and tool calls to
|
|
174
|
+
* the assistant bubble bearing the matching `_messageId`.
|
|
175
|
+
*
|
|
176
|
+
* Events for tasks not owned by this SessionManager are ignored —
|
|
177
|
+
* other plugins (HTTP debug, custom) may submit tasks through the
|
|
178
|
+
* same host bus.
|
|
179
|
+
*/
|
|
180
|
+
handleHostEvent(ev) {
|
|
181
|
+
const sessionId = this.taskToSession.get(ev.taskId);
|
|
182
|
+
if (!sessionId)
|
|
183
|
+
return;
|
|
184
|
+
if (ev.type === "task:text") {
|
|
185
|
+
if (!ev.text)
|
|
186
|
+
return;
|
|
187
|
+
this.notify(sessionId, {
|
|
188
|
+
sessionUpdate: "agent_message_chunk",
|
|
189
|
+
content: { type: "text", text: ev.text },
|
|
190
|
+
_turnId: ev.turnId,
|
|
191
|
+
messageId: ev.messageId,
|
|
192
|
+
});
|
|
193
|
+
this.store.addMessage(sessionId, "assistant", ev.text, "text");
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (ev.type === "task:reasoning") {
|
|
197
|
+
// Reasoning / thinking deltas (planner plan descriptions + per-step
|
|
198
|
+
// VLM rationale) flow through the dedicated `agent_thought_chunk`
|
|
199
|
+
// ACP channel so the web UI can render them in the reasoning side
|
|
200
|
+
// panel without polluting the main conversation. We intentionally
|
|
201
|
+
// do NOT persist reasoning text into MessageStore — it would bloat
|
|
202
|
+
// the LLM context window on resume and is purely a presentation
|
|
203
|
+
// signal.
|
|
204
|
+
if (!ev.text)
|
|
205
|
+
return;
|
|
206
|
+
this.notify(sessionId, {
|
|
207
|
+
sessionUpdate: "agent_thought_chunk",
|
|
208
|
+
content: { type: "text", text: ev.text },
|
|
209
|
+
_turnId: ev.turnId,
|
|
210
|
+
messageId: ev.messageId,
|
|
211
|
+
});
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (ev.type === "task:tool") {
|
|
215
|
+
const t = ev.tool;
|
|
216
|
+
if (t.status === "start") {
|
|
217
|
+
this.notify(sessionId, {
|
|
218
|
+
sessionUpdate: "tool_call",
|
|
219
|
+
toolCallId: t.id,
|
|
220
|
+
title: t.name,
|
|
221
|
+
arguments: JSON.stringify(t.args),
|
|
222
|
+
status: "in_progress",
|
|
223
|
+
_turnId: ev.turnId,
|
|
224
|
+
messageId: ev.messageId,
|
|
225
|
+
});
|
|
226
|
+
this.store.addMessage(sessionId, "assistant", t.name, "tool_call", {
|
|
227
|
+
toolCallId: t.id,
|
|
228
|
+
parameters: t.args,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else if (t.status === "end") {
|
|
232
|
+
const status = t.isError ? "failed" : "completed";
|
|
233
|
+
const output = typeof t.result === "string" ? t.result : JSON.stringify(t.result ?? "");
|
|
234
|
+
this.notify(sessionId, {
|
|
235
|
+
sessionUpdate: "tool_call_update",
|
|
236
|
+
toolCallId: t.id,
|
|
237
|
+
status,
|
|
238
|
+
output: output || `${t.name} ${status}`,
|
|
239
|
+
_turnId: ev.turnId,
|
|
240
|
+
messageId: ev.messageId,
|
|
241
|
+
});
|
|
242
|
+
this.store.addMessage(sessionId, "assistant", output || `${t.name} ${status}`, "tool_result", { toolCallId: t.id, status });
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (ev.type === "task:notice") {
|
|
247
|
+
// Ephemeral protocol notice. Two flavours:
|
|
248
|
+
// - level=warn : transient retry hint ("Model temporarily
|
|
249
|
+
// unavailable, retrying…"). User can't act on it; if the
|
|
250
|
+
// retry succeeds the message is meaningless, and if it
|
|
251
|
+
// ultimately fails the level=error notice will fire anyway.
|
|
252
|
+
// We DROP it on the floor for the UI — agent-host already
|
|
253
|
+
// logged it via pino, and HTTP debug listeners receive the
|
|
254
|
+
// raw `task:notice` event independent of this ACP path.
|
|
255
|
+
// - level=error: terminal failure ("Task failed: …"). We
|
|
256
|
+
// translate to `system_message_chunk` carrying
|
|
257
|
+
// `metadata.kind = "agent_notice"`. The web client recognises
|
|
258
|
+
// this kind and merges the notice into the matching
|
|
259
|
+
// assistant bubble's `metadata.notices` (correlated by
|
|
260
|
+
// `_turnId`), so the user sees a small inline footer line
|
|
261
|
+
// instead of a centered gray capsule. Older clients that
|
|
262
|
+
// don't know `agent_notice` still render it as a plain
|
|
263
|
+
// system message — the kind tag is purely additive.
|
|
264
|
+
//
|
|
265
|
+
// Intentionally NOT written to MessageStore — replaying retry
|
|
266
|
+
// hints / terminal-failure capsules on session resume would
|
|
267
|
+
// bloat the LLM context with stale degraded-state signals. We
|
|
268
|
+
// forward `_turnId` for ordering / merge correlation but DROP
|
|
269
|
+
// `messageId` because chat-store's sidecar resolver would
|
|
270
|
+
// otherwise still try to merge a system row with assistant
|
|
271
|
+
// rows sharing that id.
|
|
272
|
+
if (ev.level === "warn")
|
|
273
|
+
return;
|
|
274
|
+
if (!ev.text)
|
|
275
|
+
return;
|
|
276
|
+
this.notify(sessionId, {
|
|
277
|
+
sessionUpdate: "system_message_chunk",
|
|
278
|
+
content: { type: "text", text: ev.text },
|
|
279
|
+
_turnId: ev.turnId,
|
|
280
|
+
metadata: { kind: "agent_notice", level: ev.level },
|
|
281
|
+
});
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (ev.type === "task:step") {
|
|
285
|
+
// `task:step` is a structural event (`{ stepIndex, action, finished,
|
|
286
|
+
// message }`) consumed by HTTP debug / future plugins. Per-step
|
|
287
|
+
// rationale is now delivered via `task:reasoning` →
|
|
288
|
+
// `agent_thought_chunk` (see above), so we no longer mis-emit
|
|
289
|
+
// `step.thinking` as `agent_message_chunk` here — that double-fire
|
|
290
|
+
// was leaking VLM rationale into the user-visible reply.
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (ev.type === "task:end") {
|
|
294
|
+
const status = ev.error ? "failed" : ev.result.cancelled ? "cancelled" : "completed";
|
|
295
|
+
this.store.addMessage(sessionId, "system", `Task ${status}`, "status", {
|
|
296
|
+
taskId: ev.taskId,
|
|
297
|
+
status,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
resolveSession(idHint) {
|
|
302
|
+
if (idHint && this.sessions.has(idHint))
|
|
303
|
+
return this.sessions.get(idHint);
|
|
304
|
+
if (idHint && this.store.sessionExists(idHint)) {
|
|
305
|
+
this.sessions.set(idHint, newSession(idHint));
|
|
306
|
+
return this.sessions.get(idHint);
|
|
307
|
+
}
|
|
308
|
+
if (this.activeSessionId && this.sessions.has(this.activeSessionId)) {
|
|
309
|
+
return this.sessions.get(this.activeSessionId);
|
|
310
|
+
}
|
|
311
|
+
const { sessionId } = this.newSession();
|
|
312
|
+
return this.sessions.get(sessionId);
|
|
313
|
+
}
|
|
314
|
+
notify(sessionId, update) {
|
|
315
|
+
if (!this.notifier)
|
|
316
|
+
return;
|
|
317
|
+
this.notifier.send(sessionId, update);
|
|
318
|
+
}
|
|
319
|
+
evictExpired() {
|
|
320
|
+
const now = Date.now();
|
|
321
|
+
for (const [id, s] of this.sessions) {
|
|
322
|
+
if (now - s.lastActive > this.sessionTtlMs) {
|
|
323
|
+
this.sessions.delete(id);
|
|
324
|
+
this.store.deleteSession(id);
|
|
325
|
+
if (this.activeSessionId === id)
|
|
326
|
+
this.activeSessionId = null;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (this.sessions.size > this.maxSessions) {
|
|
330
|
+
const sorted = Array.from(this.sessions.entries()).sort((a, b) => a[1].lastActive - b[1].lastActive);
|
|
331
|
+
for (let i = 0; i < sorted.length - this.maxSessions; i++) {
|
|
332
|
+
const [id] = sorted[i];
|
|
333
|
+
this.sessions.delete(id);
|
|
334
|
+
this.store.deleteSession(id);
|
|
335
|
+
if (this.activeSessionId === id)
|
|
336
|
+
this.activeSessionId = null;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
function normalizePrompt(raw) {
|
|
342
|
+
if (typeof raw === "string")
|
|
343
|
+
return raw.trim();
|
|
344
|
+
return raw
|
|
345
|
+
.filter((b) => b && b.type === "text" && typeof b.text === "string")
|
|
346
|
+
.map((b) => b.text)
|
|
347
|
+
.join("\n")
|
|
348
|
+
.trim();
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/app/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bootstrap — wire up the agent core, host, and plugins.
|
|
3
|
+
*
|
|
4
|
+
* High-level flow:
|
|
5
|
+
*
|
|
6
|
+
* 1. Load identity (Ed25519 keypair on disk).
|
|
7
|
+
* 2. Discover Bridge URL via Agent Gateway (when not standalone).
|
|
8
|
+
* 3. Build the device adapter (`IDevice`) and a `DeviceManager`.
|
|
9
|
+
* 4. Build the agent core (v0.3.0 default = AgentRunner Hybrid Plan-Act):
|
|
10
|
+
* - default → `AgentRunnerCore`
|
|
11
|
+
* (one shared `AgentRunner` driving the new agent-runtime
|
|
12
|
+
* `AgentLoop` + optional `LLMPlanner` via OpenAI-compat client.
|
|
13
|
+
* Wired to the AutoGLM-Phone family via the `OpenAIAdapter`
|
|
14
|
+
* adapter registry pattern.)
|
|
15
|
+
* - `legacyInner: true` → `InnerLoopAgent` over `InnerLoopVlm`
|
|
16
|
+
* (single-layer fallback; opt-in)
|
|
17
|
+
* - `pi: true` → `PiOrchestratorAgent`
|
|
18
|
+
* (outer text LLM + inner mobile_use VLM; opt-in)
|
|
19
|
+
* 5. Construct `AgentHostImpl` around the agent.
|
|
20
|
+
* 6. Register plugins in this order: agent-sync, http-debug, acp.
|
|
21
|
+
* The acp plugin is started LAST so the bridge connection only opens
|
|
22
|
+
* after agent-sync has registered the device-agent in the platform's
|
|
23
|
+
* Agents directory.
|
|
24
|
+
* 7. Run `init()` on every plugin sequentially, then `start()`.
|
|
25
|
+
* 8. Return a `stop()` function that tears down plugins in reverse order.
|
|
26
|
+
*
|
|
27
|
+
* Custom callers (tests, EdgeAgent embeds, alternate CLIs) can call
|
|
28
|
+
* `bootstrap()` directly with a custom plugin list to compose the agent
|
|
29
|
+
* however they want — every behavior beyond the core (HTTP, ACP, sync,
|
|
30
|
+
* any future skill plugin) is opt-in.
|
|
31
|
+
*/
|
|
32
|
+
import { type Logger } from "./logger/index.js";
|
|
33
|
+
import { type CliFlags } from "./config/loader.js";
|
|
34
|
+
import type { Config } from "./config/schema.js";
|
|
35
|
+
import { type AgentDeclarationInput } from "./adapters/agent-gateway-client.js";
|
|
36
|
+
import { DeviceManager } from "./app/device-manager.js";
|
|
37
|
+
import { McpClient } from "./mcp-client/index.js";
|
|
38
|
+
import type { IAgentCore } from "./ports/agent-core.js";
|
|
39
|
+
import type { IDevice } from "./ports/device.js";
|
|
40
|
+
import type { IDeviceIdentity } from "./ports/identity.js";
|
|
41
|
+
import type { AgentHost } from "./ports/agent-host.js";
|
|
42
|
+
import type { AgentPlugin } from "./ports/plugin.js";
|
|
43
|
+
export interface BootstrapOptions {
|
|
44
|
+
/** Pre-parsed CLI flags. Defaults to `{}` (env + config file only). */
|
|
45
|
+
flags?: CliFlags;
|
|
46
|
+
/** Override the resolved config (after merging flags / env / file). */
|
|
47
|
+
configOverride?: Partial<Config>;
|
|
48
|
+
/** Inject a custom logger. */
|
|
49
|
+
logger?: Logger;
|
|
50
|
+
/** Inject a custom agent core (e.g. for tests / experimental adapters). */
|
|
51
|
+
agentOverride?: IAgentCore;
|
|
52
|
+
/** Inject a custom device. Useful for tests. */
|
|
53
|
+
deviceOverride?: IDevice;
|
|
54
|
+
/**
|
|
55
|
+
* Replace the default plugin list. When omitted, bootstrap registers
|
|
56
|
+
* agent-sync + http-debug + acp using the loaded config. Pass `[]` to
|
|
57
|
+
* run a barebones agent (host + core only).
|
|
58
|
+
*/
|
|
59
|
+
pluginsOverride?: AgentPlugin[];
|
|
60
|
+
/** Version string surfaced in agent-sync declarations. */
|
|
61
|
+
version?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Custom AgentDeclaration builder. Defaults to a device-agent default
|
|
64
|
+
* matching the legacy `main.ts` declaration.
|
|
65
|
+
*/
|
|
66
|
+
buildDeclarations?: (info: {
|
|
67
|
+
name?: string;
|
|
68
|
+
type?: string;
|
|
69
|
+
} | null) => AgentDeclarationInput[];
|
|
70
|
+
}
|
|
71
|
+
export interface BootstrappedAgent {
|
|
72
|
+
config: Config;
|
|
73
|
+
host: AgentHost;
|
|
74
|
+
devices: DeviceManager;
|
|
75
|
+
identity: IDeviceIdentity;
|
|
76
|
+
plugins: AgentPlugin[];
|
|
77
|
+
/**
|
|
78
|
+
* Optional handle to the sibling device-mcp-server, present when
|
|
79
|
+
* `config.mcpUrl` was set and the readiness probe succeeded. Subsequent
|
|
80
|
+
* tasks (acp_plugin / pi_orchestrator) wire this through to the runtime.
|
|
81
|
+
*/
|
|
82
|
+
mcp?: McpClient;
|
|
83
|
+
/**
|
|
84
|
+
* Tear-down function — stops every plugin in REVERSE registration
|
|
85
|
+
* order, then disconnects all devices. Safe to call multiple times.
|
|
86
|
+
*/
|
|
87
|
+
stop: () => Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
export declare function bootstrap(opts?: BootstrapOptions): Promise<BootstrappedAgent>;
|
|
90
|
+
export declare class BootstrapError extends Error {
|
|
91
|
+
readonly exitCode: number;
|
|
92
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
93
|
+
constructor(message: string, exitCode: number, details?: Record<string, unknown> | undefined);
|
|
94
|
+
}
|