@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,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — InnerLoopAgent (single-layer fallback).
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing `InnerLoopVlm` (which already implements the legacy
|
|
5
|
+
* `IVlm` port and drives the screenshot→reason→act loop in `agent.ts`) so
|
|
6
|
+
* that it can be plugged into the `IAgentCore` slot.
|
|
7
|
+
*
|
|
8
|
+
* Selected by `--legacy-inner` / `BEEOS_LEGACY_INNER=true`. Useful when
|
|
9
|
+
* the pi-coding-agent two-layer adapter isn't available (offline, custom
|
|
10
|
+
* model with no orchestrator support, …) — the agent still works as an
|
|
11
|
+
* end-to-end VLM controller, just without an outer text LLM picking
|
|
12
|
+
* between tools.
|
|
13
|
+
*
|
|
14
|
+
* The adapter:
|
|
15
|
+
* - re-emits each VlmStep both as `onStep` (legacy compat) and as a
|
|
16
|
+
* synthetic `ToolCallEvent` (`name = action.kind`) so consumers that
|
|
17
|
+
* only care about tool calls keep working.
|
|
18
|
+
* - forwards `setModel(provider, model)` to `IVlm.setProvider`.
|
|
19
|
+
*/
|
|
20
|
+
export class InnerLoopAgent {
|
|
21
|
+
vlm;
|
|
22
|
+
constructor(vlm) {
|
|
23
|
+
this.vlm = vlm;
|
|
24
|
+
}
|
|
25
|
+
get modelName() {
|
|
26
|
+
return this.vlm.modelName;
|
|
27
|
+
}
|
|
28
|
+
get providerName() {
|
|
29
|
+
return this.vlm.providerName;
|
|
30
|
+
}
|
|
31
|
+
async run(opts) {
|
|
32
|
+
const out = await this.vlm.runTask({
|
|
33
|
+
task: opts.task,
|
|
34
|
+
maxSteps: opts.maxSteps ?? 30,
|
|
35
|
+
abortSignal: opts.abortSignal,
|
|
36
|
+
onText: opts.onText,
|
|
37
|
+
onStep: async (step) => {
|
|
38
|
+
if (opts.onStep)
|
|
39
|
+
await opts.onStep(step);
|
|
40
|
+
// Surface the same step as a synthetic ToolCallEvent so plugins
|
|
41
|
+
// wired against `onTool` keep a single code path. We emit
|
|
42
|
+
// start+end back-to-back because the legacy IVlm does not stream
|
|
43
|
+
// tool progress separately from the step boundary.
|
|
44
|
+
if (opts.onTool && step.action) {
|
|
45
|
+
const id = `inner-${step.stepIndex}`;
|
|
46
|
+
const toolName = step.action.kind;
|
|
47
|
+
const args = actionParams(step.action);
|
|
48
|
+
const start = { id, name: toolName, args, status: "start" };
|
|
49
|
+
await opts.onTool(start);
|
|
50
|
+
const end = {
|
|
51
|
+
id,
|
|
52
|
+
name: toolName,
|
|
53
|
+
args,
|
|
54
|
+
status: "end",
|
|
55
|
+
result: step.thinking ?? "",
|
|
56
|
+
isError: false,
|
|
57
|
+
};
|
|
58
|
+
await opts.onTool(end);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
async setModel(provider, model) {
|
|
65
|
+
await this.vlm.setProvider(provider, model);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function actionParams(a) {
|
|
69
|
+
const { kind: _kind, ...rest } = a;
|
|
70
|
+
return rest;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=agentcore-inner-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentcore-inner-loop.js","sourceRoot":"","sources":["../../src/adapters/agentcore-inner-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,GAAS;QAAT,QAAG,GAAH,GAAG,CAAM;IAAG,CAAC;IAE1C,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAyB;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACrB,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAEzC,gEAAgE;gBAChE,0DAA0D;gBAC1D,iEAAiE;gBACjE,mDAAmD;gBACnD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBAClC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC3E,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACzB,MAAM,GAAG,GAAkB;wBACzB,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,IAAI;wBACJ,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;wBAC3B,OAAO,EAAE,KAAK;qBACf,CAAC;oBACF,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,KAAa;QAC5C,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,SAAS,YAAY,CAAC,CAAmB;IACvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAA+C,CAAC;IACjF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — PiOrchestratorAgent (two-layer outer orchestrator).
|
|
3
|
+
*
|
|
4
|
+
* Wraps `@mariozechner/pi-coding-agent`'s `AgentSession` so it can be
|
|
5
|
+
* plugged into the `IAgentCore` slot. The outer layer is the LLM that
|
|
6
|
+
* pi drives; the inner layer is whatever extensions are loaded from
|
|
7
|
+
* `<projectRoot>/.pi/extensions/` (e.g. `mobile_use`, `ground`,
|
|
8
|
+
* `ui_xml`). The adapter is **transport-agnostic** — it only knows about
|
|
9
|
+
* pi events and `AgentHost` callbacks.
|
|
10
|
+
*
|
|
11
|
+
* Key responsibilities:
|
|
12
|
+
* - Lazy session bootstrap (extension/skill scanning, model resolution)
|
|
13
|
+
* on first `run()` call.
|
|
14
|
+
* - Map pi's session events to `IAgentCore` callbacks:
|
|
15
|
+
* `message_update / text_delta` → `onText`
|
|
16
|
+
* `tool_execution_start/update/end` → `onTool` (start/update/end)
|
|
17
|
+
* `message_end (assistant role)` → captures the final assistant text
|
|
18
|
+
* - Translate `setModel(provider, model)` into pi-ai's `getModel()` and
|
|
19
|
+
* forward to `session.setModel`. Hot-swap is best-effort — when model
|
|
20
|
+
* resolution fails we keep the previous model and surface a warning.
|
|
21
|
+
* - Honor `abortSignal` by calling `session.abort()`.
|
|
22
|
+
* - Map ARouter / OpenRouter / OpenAI / Anthropic / Google base URLs to
|
|
23
|
+
* pi-ai's known provider env vars (e.g. `OPENROUTER_API_KEY`) so
|
|
24
|
+
* callers can pass a single `outer.apiKey` without exporting
|
|
25
|
+
* provider-specific env names.
|
|
26
|
+
*
|
|
27
|
+
* NOT responsibilities:
|
|
28
|
+
* - Loading extensions (caller passes the resourceLoader options).
|
|
29
|
+
* - Setting up the device — pi extensions read device handles from
|
|
30
|
+
* process env / DEVAGENT_HTTP_URL like before.
|
|
31
|
+
*/
|
|
32
|
+
import type { AgentCoreRunOptions, AgentCoreRunResult, IAgentCore } from "../ports/agent-core.js";
|
|
33
|
+
import type { Logger } from "../logger/index.js";
|
|
34
|
+
import type { IGrounder } from "../grounding/grounder.js";
|
|
35
|
+
import type { IMcpRuntime } from "../mcp-client/runtime.js";
|
|
36
|
+
export interface PiOuterConfig {
|
|
37
|
+
/** API key for the outer LLM. Mapped to `OPENROUTER_API_KEY` etc. */
|
|
38
|
+
apiKey?: string;
|
|
39
|
+
/** Base URL — used to infer the pi-ai provider. Default ARouter. */
|
|
40
|
+
baseUrl?: string;
|
|
41
|
+
/** Upstream model id (e.g. `moonshotai/kimi-k2.6`). */
|
|
42
|
+
model?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Optional explicit pi-ai provider tag (`openrouter`, `openai`, …).
|
|
45
|
+
* When empty the provider is inferred from `baseUrl`.
|
|
46
|
+
*/
|
|
47
|
+
provider?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Minimal AgentSession surface that the adapter actually consumes.
|
|
51
|
+
* Mirrors `@mariozechner/pi-coding-agent` so we can swap in a fake in
|
|
52
|
+
* unit tests without pulling pi-ai's heavy types into the test boundary.
|
|
53
|
+
*/
|
|
54
|
+
export interface PiAgentSessionLike {
|
|
55
|
+
prompt(text: string): Promise<void>;
|
|
56
|
+
abort(): Promise<void>;
|
|
57
|
+
setModel(model: unknown): Promise<void>;
|
|
58
|
+
subscribe(listener: (event: PiSessionEvent) => void | Promise<void>): () => void;
|
|
59
|
+
dispose(): void;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Subset of pi's `AgentSessionEvent` we care about. Defined locally so
|
|
63
|
+
* tests don't need to import pi types and so the adapter is robust to
|
|
64
|
+
* upstream additions.
|
|
65
|
+
*/
|
|
66
|
+
export type PiSessionEvent = {
|
|
67
|
+
type: "message_start";
|
|
68
|
+
message: PiMessageLike;
|
|
69
|
+
} | {
|
|
70
|
+
type: "message_update";
|
|
71
|
+
message: PiMessageLike;
|
|
72
|
+
assistantMessageEvent: PiAssistantEvent;
|
|
73
|
+
} | {
|
|
74
|
+
type: "message_end";
|
|
75
|
+
message: PiMessageLike;
|
|
76
|
+
} | {
|
|
77
|
+
type: "tool_execution_start";
|
|
78
|
+
toolCallId: string;
|
|
79
|
+
toolName: string;
|
|
80
|
+
args: unknown;
|
|
81
|
+
} | {
|
|
82
|
+
type: "tool_execution_update";
|
|
83
|
+
toolCallId: string;
|
|
84
|
+
toolName: string;
|
|
85
|
+
args: unknown;
|
|
86
|
+
partialResult: unknown;
|
|
87
|
+
} | {
|
|
88
|
+
type: "tool_execution_end";
|
|
89
|
+
toolCallId: string;
|
|
90
|
+
toolName: string;
|
|
91
|
+
result: unknown;
|
|
92
|
+
isError: boolean;
|
|
93
|
+
} | {
|
|
94
|
+
type: string;
|
|
95
|
+
[k: string]: unknown;
|
|
96
|
+
};
|
|
97
|
+
interface PiMessageLike {
|
|
98
|
+
role: string;
|
|
99
|
+
content: unknown;
|
|
100
|
+
}
|
|
101
|
+
type PiAssistantEvent = {
|
|
102
|
+
type: "text_delta";
|
|
103
|
+
delta: string;
|
|
104
|
+
[k: string]: unknown;
|
|
105
|
+
} | {
|
|
106
|
+
type: "thinking_delta";
|
|
107
|
+
delta: string;
|
|
108
|
+
[k: string]: unknown;
|
|
109
|
+
} | {
|
|
110
|
+
type: string;
|
|
111
|
+
[k: string]: unknown;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Test seam — provide a custom session factory. Default factory loads
|
|
115
|
+
* `@mariozechner/pi-coding-agent` lazily so building tests / standalone
|
|
116
|
+
* binaries that skip the orchestrator never imports pi-ai at all.
|
|
117
|
+
*/
|
|
118
|
+
export interface PiSessionFactory {
|
|
119
|
+
(config: PiSessionFactoryConfig): Promise<PiAgentSessionLike>;
|
|
120
|
+
}
|
|
121
|
+
export interface PiSessionFactoryConfig {
|
|
122
|
+
projectRoot: string;
|
|
123
|
+
systemPrompt?: string;
|
|
124
|
+
/** Resolved pi-ai Model object (already URL-rewritten for ARouter). */
|
|
125
|
+
model?: unknown;
|
|
126
|
+
}
|
|
127
|
+
export interface PiOrchestratorAgentOptions {
|
|
128
|
+
/** Project root passed to pi's `DefaultResourceLoader`. */
|
|
129
|
+
projectRoot: string;
|
|
130
|
+
/** Outer-layer LLM config. */
|
|
131
|
+
outer: PiOuterConfig;
|
|
132
|
+
/**
|
|
133
|
+
* Optional override for pi's system prompt. Defaults to
|
|
134
|
+
* `ORCHESTRATOR_SYSTEM_PROMPT` (see `orchestrator-system-prompt.ts`).
|
|
135
|
+
*/
|
|
136
|
+
systemPrompt?: string;
|
|
137
|
+
/** Structured logger; falls back to console.warn. */
|
|
138
|
+
logger?: Pick<Logger, "warn" | "info" | "debug">;
|
|
139
|
+
/** Inject a custom session factory (used by tests). */
|
|
140
|
+
createSession?: PiSessionFactory;
|
|
141
|
+
/** Override pi-ai `getModel`. Used by tests to skip the heavy import. */
|
|
142
|
+
resolveModel?: ModelResolver;
|
|
143
|
+
/**
|
|
144
|
+
* Resolves the active `IMcpRuntime` on every tool call. Typically
|
|
145
|
+
* `() => mcpClient` (the sibling `device-mcp-server` HTTP client) or an
|
|
146
|
+
* `InProcMcpClient` for local CLI usage. Resolved lazily so an ACP
|
|
147
|
+
* device switch (or autospawn restart) is reflected immediately on the
|
|
148
|
+
* next `mobile_use` / `ui_xml` / `ground` invocation.
|
|
149
|
+
*/
|
|
150
|
+
mcpProvider?: () => IMcpRuntime;
|
|
151
|
+
/**
|
|
152
|
+
* Lazily build the grounder used by the `ground` extension. Called the
|
|
153
|
+
* first time the extension reads `getGrounder()` within a session.
|
|
154
|
+
* Typical implementation: `() => new HTTPGrounder(config.grounder)`.
|
|
155
|
+
*/
|
|
156
|
+
grounderFactory?: () => IGrounder;
|
|
157
|
+
/**
|
|
158
|
+
* Run a `mobile_use` task end-to-end and return the final assistant
|
|
159
|
+
* message. Wraps `InnerLoopVlm.runTask`. Letting the bootstrap layer
|
|
160
|
+
* supply this keeps the heavy `OpenAIClient` instance shared with the
|
|
161
|
+
* legacy single-layer path (and lets tests stub it out).
|
|
162
|
+
*/
|
|
163
|
+
mobileUseRunner?: (task: string, maxSteps: number, abortSignal?: AbortSignal) => Promise<string>;
|
|
164
|
+
/**
|
|
165
|
+
* Optional UI-XML formatter. When omitted the adapter calls
|
|
166
|
+
* `mcp.uiDump({ format: "raw" })` and feeds the result through
|
|
167
|
+
* `formatUiXmlToolOutput` — same behaviour the legacy `queryUiXml`
|
|
168
|
+
* used to provide on top of the raw `Device`. Tests can override to
|
|
169
|
+
* skip the dump path entirely.
|
|
170
|
+
*/
|
|
171
|
+
uiXmlRunner?: (query?: string) => Promise<string>;
|
|
172
|
+
}
|
|
173
|
+
export interface ModelResolver {
|
|
174
|
+
(provider: string, modelId: string, baseUrl: string): unknown | undefined;
|
|
175
|
+
}
|
|
176
|
+
export declare class PiOrchestratorAgent implements IAgentCore {
|
|
177
|
+
private session;
|
|
178
|
+
private starting;
|
|
179
|
+
private outer;
|
|
180
|
+
private readonly projectRoot;
|
|
181
|
+
private readonly systemPrompt;
|
|
182
|
+
private readonly logger;
|
|
183
|
+
private readonly createSessionFactory;
|
|
184
|
+
private readonly resolveModelFn;
|
|
185
|
+
private readonly mcpProvider?;
|
|
186
|
+
private readonly grounderFactory?;
|
|
187
|
+
private readonly mobileUseRunner?;
|
|
188
|
+
private readonly uiXmlRunner?;
|
|
189
|
+
private cachedGrounder;
|
|
190
|
+
constructor(opts: PiOrchestratorAgentOptions);
|
|
191
|
+
get modelName(): string;
|
|
192
|
+
get providerName(): string | undefined;
|
|
193
|
+
run(opts: AgentCoreRunOptions): Promise<AgentCoreRunResult>;
|
|
194
|
+
setModel(provider: string, model: string): Promise<void>;
|
|
195
|
+
/** Tear down the underlying pi session. Idempotent. */
|
|
196
|
+
dispose(): Promise<void>;
|
|
197
|
+
private buildExtensionContext;
|
|
198
|
+
private ensureSession;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Map our generic outer config to pi-ai's env-var contract. pi-ai reads
|
|
202
|
+
* provider-specific keys (e.g. `OPENROUTER_API_KEY`) from `process.env`,
|
|
203
|
+
* so we transparently set them when the caller hands us `outer.apiKey`
|
|
204
|
+
* + a recognised baseUrl. Never overwrites a key the caller already set.
|
|
205
|
+
*
|
|
206
|
+
* Recognised hosts:
|
|
207
|
+
* - openrouter.ai / arouter.ai → OPENROUTER_API_KEY
|
|
208
|
+
* - api.openai.com → OPENAI_API_KEY
|
|
209
|
+
* - api.anthropic.com → ANTHROPIC_API_KEY
|
|
210
|
+
* - generativelanguage.googleapis.com → GEMINI_API_KEY
|
|
211
|
+
*/
|
|
212
|
+
export declare function applyOuterEnvMapping(outer: PiOuterConfig): void;
|
|
213
|
+
/** Infer the pi-ai provider tag from a base URL. */
|
|
214
|
+
export declare function inferPiProvider(baseUrl: string): string;
|
|
215
|
+
export {};
|