@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,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-runtime/adapters/openai — wraps the legacy `OpenAIClient` (which
|
|
3
|
+
* dispatches to the `model/adapters/*` registry) and exposes it under the
|
|
4
|
+
* new `IModelAdapter` contract.
|
|
5
|
+
*
|
|
6
|
+
* The translation has two parts:
|
|
7
|
+
* - request side: build legacy `Message[]` from the new `Observation` +
|
|
8
|
+
* `StepHistory` rolling context, then call `client.request()`.
|
|
9
|
+
* - response side: call `client.parseResponse()` to recover the legacy
|
|
10
|
+
* `ParsedAction`, then map onto the unified `Action` schema via
|
|
11
|
+
* `parsedToAction()`. Coordinate-system metadata is preserved on
|
|
12
|
+
* `payload._coordSystem` so the `AgentLoop` can scale to actual screen
|
|
13
|
+
* pixels before forwarding to the MCP `/act` route.
|
|
14
|
+
*/
|
|
15
|
+
import { makeAction } from "@beeos-ai/device-common";
|
|
16
|
+
import { OpenAIClient } from "../../model/client.js";
|
|
17
|
+
import { compressForVlm } from "../../model/image/compress.js";
|
|
18
|
+
import { DataUrlTransport } from "../../model/image/transport.js";
|
|
19
|
+
import { getLogger } from "../../logger/index.js";
|
|
20
|
+
import { makeScreenInfo } from "../../types.js";
|
|
21
|
+
import { makePrediction } from "./base.js";
|
|
22
|
+
import { registerAdapter } from "./registry.js";
|
|
23
|
+
/**
|
|
24
|
+
* Legacy `model/adapters/*` names that splice the UI hierarchy XML into the
|
|
25
|
+
* VLM prompt. The default for everything else is the Open-AutoGLM upstream
|
|
26
|
+
* pure-vision flow (screenshot + `current_app` only) — adding adapters that
|
|
27
|
+
* truly read `screenInfo.uiXml` to this set will let `AgentLoop.observe()`
|
|
28
|
+
* fetch `mcp.uiDump()` for them automatically.
|
|
29
|
+
*/
|
|
30
|
+
const LEGACY_ADAPTERS_CONSUMING_UI_DUMP = new Set(["guiowl"]);
|
|
31
|
+
export class OpenAIAdapter {
|
|
32
|
+
name;
|
|
33
|
+
modelName;
|
|
34
|
+
consumesUiDump;
|
|
35
|
+
client;
|
|
36
|
+
lang;
|
|
37
|
+
imageTransport;
|
|
38
|
+
context = [];
|
|
39
|
+
lastStepIdx = 0;
|
|
40
|
+
constructor(opts = {}) {
|
|
41
|
+
this.client =
|
|
42
|
+
opts.client ??
|
|
43
|
+
new OpenAIClient({
|
|
44
|
+
...opts,
|
|
45
|
+
adapter: opts.legacyAdapter,
|
|
46
|
+
});
|
|
47
|
+
this.modelName = this.client.modelName;
|
|
48
|
+
this.name = `openai:${this.client.adapterName}`;
|
|
49
|
+
this.lang = opts.lang ?? "cn";
|
|
50
|
+
this.imageTransport = opts.imageTransport ?? new DataUrlTransport();
|
|
51
|
+
this.consumesUiDump =
|
|
52
|
+
opts.consumesUiDump ??
|
|
53
|
+
LEGACY_ADAPTERS_CONSUMING_UI_DUMP.has(this.client.adapterName.toLowerCase());
|
|
54
|
+
}
|
|
55
|
+
supportsEnv(env) {
|
|
56
|
+
// Mobile/computer/browser are all serviced by the same legacy adapters —
|
|
57
|
+
// they only differ in the system-prompt vocabulary which is the legacy
|
|
58
|
+
// adapter's concern.
|
|
59
|
+
return env === "mobile" || env === "computer" || env === "browser";
|
|
60
|
+
}
|
|
61
|
+
async predictAction(observation, history, opts = {}) {
|
|
62
|
+
if (history.length === 0 || history.length < this.lastStepIdx) {
|
|
63
|
+
// New run started — clear adapter-internal context.
|
|
64
|
+
this.context = [];
|
|
65
|
+
}
|
|
66
|
+
this.lastStepIdx = history.length;
|
|
67
|
+
const isFirst = history.length === 0;
|
|
68
|
+
const screenInfo = await observationToScreenInfo(observation, this.imageTransport);
|
|
69
|
+
this.context = this.client.buildMessages(observation.task, screenInfo, this.context, isFirst, this.lang);
|
|
70
|
+
const startedAt = Date.now();
|
|
71
|
+
let response;
|
|
72
|
+
try {
|
|
73
|
+
response = await this.client.request(this.context, {
|
|
74
|
+
signal: opts.signal,
|
|
75
|
+
onTextDelta: opts.hooks?.onText,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
// Surface upstream HTTP details so MODEL_PREDICT_FAILED is debuggable
|
|
80
|
+
// from logs without resorting to network capture. We catch + rethrow —
|
|
81
|
+
// the AgentLoop's existing handler will fire `onError`.
|
|
82
|
+
const anyE = e;
|
|
83
|
+
getLogger().warn({
|
|
84
|
+
component: "vlm-predict",
|
|
85
|
+
stage: "predict",
|
|
86
|
+
status: anyE?.status,
|
|
87
|
+
code: anyE?.code,
|
|
88
|
+
type: anyE?.type,
|
|
89
|
+
upstreamMessage: anyE?.error?.message,
|
|
90
|
+
message: anyE?.message,
|
|
91
|
+
requestId: anyE?.response?.headers?.["x-request-id"],
|
|
92
|
+
durationMs: Date.now() - startedAt,
|
|
93
|
+
contextMessages: this.context.length,
|
|
94
|
+
}, "vlm.predict.failed");
|
|
95
|
+
throw e;
|
|
96
|
+
}
|
|
97
|
+
const durationMs = Date.now() - startedAt;
|
|
98
|
+
let parsed;
|
|
99
|
+
try {
|
|
100
|
+
parsed = this.client.parseResponse(response.rawContent);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
parsed = {
|
|
104
|
+
actionType: "wait",
|
|
105
|
+
params: { duration_seconds: 2 },
|
|
106
|
+
thinking: response.thinking,
|
|
107
|
+
coordSystem: "0-1000",
|
|
108
|
+
shouldFinish: false,
|
|
109
|
+
finishMessage: null,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
this.context = this.client.updateContext(this.context, response, parsed);
|
|
113
|
+
const action = parsedToAction(parsed);
|
|
114
|
+
return makePrediction(action, {
|
|
115
|
+
rationale: parsed.thinking || response.thinking || "",
|
|
116
|
+
confidence: 0.5,
|
|
117
|
+
usage: { inputTokens: 0, outputTokens: 0, durationMs },
|
|
118
|
+
rawResponse: response.rawContent,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async close() {
|
|
122
|
+
this.context = [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/* -------------------------------------------------------------------------- */
|
|
126
|
+
/* Translation: ParsedAction → unified Action */
|
|
127
|
+
/* -------------------------------------------------------------------------- */
|
|
128
|
+
export function parsedToAction(parsed) {
|
|
129
|
+
const meta = {
|
|
130
|
+
_coordSystem: parsed.coordSystem,
|
|
131
|
+
_legacyType: parsed.actionType,
|
|
132
|
+
};
|
|
133
|
+
const rationale = parsed.thinking || undefined;
|
|
134
|
+
switch (parsed.actionType) {
|
|
135
|
+
case "tap":
|
|
136
|
+
case "click":
|
|
137
|
+
return makeAction("tap", {
|
|
138
|
+
target: { kind: "point", x: numParam(parsed.params, "x"), y: numParam(parsed.params, "y") },
|
|
139
|
+
payload: { ...meta },
|
|
140
|
+
rationale,
|
|
141
|
+
});
|
|
142
|
+
case "double_tap":
|
|
143
|
+
case "double_click":
|
|
144
|
+
return makeAction("double_click", {
|
|
145
|
+
target: { kind: "point", x: numParam(parsed.params, "x"), y: numParam(parsed.params, "y") },
|
|
146
|
+
payload: { ...meta },
|
|
147
|
+
rationale,
|
|
148
|
+
});
|
|
149
|
+
case "long_press":
|
|
150
|
+
return makeAction("long_press", {
|
|
151
|
+
target: { kind: "point", x: numParam(parsed.params, "x"), y: numParam(parsed.params, "y") },
|
|
152
|
+
payload: { ...meta, durationMs: numParam(parsed.params, "duration_ms", 1000) },
|
|
153
|
+
rationale,
|
|
154
|
+
});
|
|
155
|
+
case "swipe":
|
|
156
|
+
return makeAction("swipe", {
|
|
157
|
+
target: {
|
|
158
|
+
kind: "box",
|
|
159
|
+
x1: numParam(parsed.params, "start_x"),
|
|
160
|
+
y1: numParam(parsed.params, "start_y"),
|
|
161
|
+
x2: numParam(parsed.params, "end_x"),
|
|
162
|
+
y2: numParam(parsed.params, "end_y"),
|
|
163
|
+
},
|
|
164
|
+
payload: { ...meta, durationMs: numParam(parsed.params, "duration_ms", 300) },
|
|
165
|
+
rationale,
|
|
166
|
+
});
|
|
167
|
+
case "type":
|
|
168
|
+
return makeAction("type", {
|
|
169
|
+
payload: { ...meta, text: stringParam(parsed.params, "text", "") },
|
|
170
|
+
rationale,
|
|
171
|
+
});
|
|
172
|
+
case "open_app":
|
|
173
|
+
case "launch_app":
|
|
174
|
+
return makeAction("launch_app", {
|
|
175
|
+
payload: {
|
|
176
|
+
...meta,
|
|
177
|
+
packageOrName: stringParam(parsed.params, "app_name", undefined) ??
|
|
178
|
+
stringParam(parsed.params, "package", undefined) ??
|
|
179
|
+
"",
|
|
180
|
+
},
|
|
181
|
+
rationale,
|
|
182
|
+
});
|
|
183
|
+
case "press_back":
|
|
184
|
+
case "back":
|
|
185
|
+
return makeAction("back", { payload: { ...meta }, rationale });
|
|
186
|
+
case "press_home":
|
|
187
|
+
case "home":
|
|
188
|
+
return makeAction("home", { payload: { ...meta }, rationale });
|
|
189
|
+
case "wait":
|
|
190
|
+
return makeAction("wait", {
|
|
191
|
+
payload: { ...meta, durationSeconds: numParam(parsed.params, "duration_seconds", 2) },
|
|
192
|
+
rationale,
|
|
193
|
+
});
|
|
194
|
+
case "takeover":
|
|
195
|
+
case "call_for_user":
|
|
196
|
+
return makeAction("call_for_user", {
|
|
197
|
+
payload: { ...meta, message: stringParam(parsed.params, "message", "") },
|
|
198
|
+
rationale,
|
|
199
|
+
});
|
|
200
|
+
case "take_note":
|
|
201
|
+
return makeAction("take_note", {
|
|
202
|
+
payload: { ...meta, note: stringParam(parsed.params, "note", "") },
|
|
203
|
+
rationale,
|
|
204
|
+
});
|
|
205
|
+
case "finish":
|
|
206
|
+
case "done":
|
|
207
|
+
return makeAction("done", {
|
|
208
|
+
payload: { ...meta, message: parsed.finishMessage ?? stringParam(parsed.params, "message", "") },
|
|
209
|
+
rationale,
|
|
210
|
+
});
|
|
211
|
+
case "fail":
|
|
212
|
+
return makeAction("fail", {
|
|
213
|
+
payload: { ...meta, message: parsed.finishMessage ?? stringParam(parsed.params, "message", "") },
|
|
214
|
+
rationale,
|
|
215
|
+
});
|
|
216
|
+
case "scroll":
|
|
217
|
+
return makeAction("scroll", {
|
|
218
|
+
target: {
|
|
219
|
+
kind: "point",
|
|
220
|
+
x: numParam(parsed.params, "x", 500),
|
|
221
|
+
y: numParam(parsed.params, "y", 500),
|
|
222
|
+
},
|
|
223
|
+
payload: { ...meta, direction: stringParam(parsed.params, "direction", "down") },
|
|
224
|
+
rationale,
|
|
225
|
+
});
|
|
226
|
+
default:
|
|
227
|
+
// Unknown verb — fall back to a wait so the loop keeps making progress
|
|
228
|
+
// instead of throwing on adapter quirks.
|
|
229
|
+
return makeAction("wait", {
|
|
230
|
+
payload: { ...meta, durationSeconds: 1 },
|
|
231
|
+
rationale: `unknown legacy actionType=${parsed.actionType}`,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function numParam(p, key, fallback) {
|
|
236
|
+
const v = p[key];
|
|
237
|
+
if (typeof v === "number" && Number.isFinite(v))
|
|
238
|
+
return v;
|
|
239
|
+
if (fallback !== undefined)
|
|
240
|
+
return fallback;
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
function stringParam(p, key, fallback) {
|
|
244
|
+
const v = p[key];
|
|
245
|
+
if (typeof v === "string")
|
|
246
|
+
return v;
|
|
247
|
+
return fallback;
|
|
248
|
+
}
|
|
249
|
+
async function observationToScreenInfo(o, transport) {
|
|
250
|
+
let imageRef = null;
|
|
251
|
+
if (o.screenshotB64) {
|
|
252
|
+
// Compress at the device-agent edge so every downstream transport
|
|
253
|
+
// (data-url today, http-url tomorrow) sees ARouter-compliant bytes.
|
|
254
|
+
// mcp-server delivers raw screen captures (PNG/JPEG full-res), so
|
|
255
|
+
// the first 1280-edge re-encode here is what keeps the OpenAI body
|
|
256
|
+
// under the 5MB ARouter cap. See `compress.ts` module docstring for
|
|
257
|
+
// the JPEG-q80 / 1280-edge rationale.
|
|
258
|
+
//
|
|
259
|
+
// Observability: emit a single structured `vlm.image.prepared` line
|
|
260
|
+
// covering both compress + transport timings. Metrics aggregators
|
|
261
|
+
// (Loki / CloudWatch) derive image_size_bytes / upload_duration_ms
|
|
262
|
+
// counters from these JSON fields. Keeping the emit at the
|
|
263
|
+
// orchestration layer (rather than inside `compressForVlm` /
|
|
264
|
+
// `transport.send`) avoids polluting hot paths and lets a fleet
|
|
265
|
+
// attribute a screenshot to a uniform stage label.
|
|
266
|
+
const t0 = Date.now();
|
|
267
|
+
const raw = Buffer.from(o.screenshotB64, "base64");
|
|
268
|
+
const compressed = await compressForVlm(raw);
|
|
269
|
+
const t1 = Date.now();
|
|
270
|
+
imageRef = await transport.send(compressed.bytes, compressed.mime);
|
|
271
|
+
const t2 = Date.now();
|
|
272
|
+
getLogger().info({
|
|
273
|
+
component: "vlm-image",
|
|
274
|
+
stage: "predict",
|
|
275
|
+
inputBytes: raw.length,
|
|
276
|
+
outputBytes: compressed.bytes.length,
|
|
277
|
+
width: compressed.width,
|
|
278
|
+
height: compressed.height,
|
|
279
|
+
mime: compressed.mime,
|
|
280
|
+
compressMs: t1 - t0,
|
|
281
|
+
transport: transport.name,
|
|
282
|
+
transportMs: t2 - t1,
|
|
283
|
+
refKind: imageRef.kind,
|
|
284
|
+
}, "vlm.image.prepared");
|
|
285
|
+
}
|
|
286
|
+
return makeScreenInfo({
|
|
287
|
+
imageRef,
|
|
288
|
+
width: o.screenW,
|
|
289
|
+
height: o.screenH,
|
|
290
|
+
currentApp: typeof o.extra?.currentApp === "string" ? o.extra.currentApp : "",
|
|
291
|
+
uiXml: o.uiDump ?? null,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
/* -------------------------------------------------------------------------- */
|
|
295
|
+
/* Registry */
|
|
296
|
+
/* -------------------------------------------------------------------------- */
|
|
297
|
+
registerAdapter({
|
|
298
|
+
name: "openai",
|
|
299
|
+
modelPatterns: [/^gpt-/, /^o1-/, /^o3-/, /openai/, /autoglm/, /^glm-/, /qwen/, /maiui/, /guiowl/, /showui/],
|
|
300
|
+
factory: () => new OpenAIAdapter(),
|
|
301
|
+
});
|
|
302
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/agent-runtime/adapters/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-runtime/adapters/registry — name → adapter resolver.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python reference at
|
|
5
|
+
* /Users/heat/workspace/deviceagent_research/deviceagent/agent_runtime/adapters/registry.py
|
|
6
|
+
*
|
|
7
|
+
* Adapters call `registerAdapter(myAdapter)` at module load time. Callers ask
|
|
8
|
+
* for one by either:
|
|
9
|
+
* - explicit adapter name (`resolveAdapter("mock")`)
|
|
10
|
+
* - model name (`resolveAdapter("gpt-4o")` → first adapter whose
|
|
11
|
+
* `supportsModel` matches; falls back to the env-default adapter)
|
|
12
|
+
*
|
|
13
|
+
* The registry is intentionally per-process — adapters are stateless WRT
|
|
14
|
+
* runs (any per-session state lives in the adapter instance itself).
|
|
15
|
+
*/
|
|
16
|
+
import type { IModelAdapter } from "./base.js";
|
|
17
|
+
export interface AdapterDescriptor {
|
|
18
|
+
/** Stable adapter id (lower-case, alpha-numeric, dashes only). */
|
|
19
|
+
name: string;
|
|
20
|
+
/**
|
|
21
|
+
* Optional regex / string list used by `resolveAdapter(modelName)` to pick
|
|
22
|
+
* an adapter from a free-form model identifier. First match wins.
|
|
23
|
+
*/
|
|
24
|
+
modelPatterns?: Array<RegExp | string>;
|
|
25
|
+
/** Lazy factory to build an instance the first time it is asked for. */
|
|
26
|
+
factory: () => IModelAdapter | Promise<IModelAdapter>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Register a new adapter. Calling twice with the same `name` is allowed and
|
|
30
|
+
* replaces the previous descriptor (test helpers rely on this).
|
|
31
|
+
*/
|
|
32
|
+
export declare function registerAdapter(descriptor: AdapterDescriptor): void;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve an adapter by exact name or by free-form model identifier.
|
|
35
|
+
*
|
|
36
|
+
* Resolution order:
|
|
37
|
+
* 1. `name` matches a registered descriptor exactly → use it.
|
|
38
|
+
* 2. `name` matches some descriptor's `modelPatterns` → use the first match.
|
|
39
|
+
* 3. `process.env.MOBILE_USE_MODEL_ADAPTER` is registered → use it.
|
|
40
|
+
* 4. `mock` (always registered when `./mock.js` is imported) → use it.
|
|
41
|
+
* 5. Throw.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveAdapter(name: string | undefined): Promise<IModelAdapter>;
|
|
44
|
+
/** Synchronous variant for callers that registered eager adapters only. */
|
|
45
|
+
export declare function resolveAdapterSync(name: string | undefined): IModelAdapter;
|
|
46
|
+
/** List adapter names currently registered, sorted alphabetically. */
|
|
47
|
+
export declare function available(): string[];
|
|
48
|
+
/** Test helper — clears every registered adapter. */
|
|
49
|
+
export declare function clearAdapters(): void;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-runtime/adapters/registry — name → adapter resolver.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python reference at
|
|
5
|
+
* /Users/heat/workspace/deviceagent_research/deviceagent/agent_runtime/adapters/registry.py
|
|
6
|
+
*
|
|
7
|
+
* Adapters call `registerAdapter(myAdapter)` at module load time. Callers ask
|
|
8
|
+
* for one by either:
|
|
9
|
+
* - explicit adapter name (`resolveAdapter("mock")`)
|
|
10
|
+
* - model name (`resolveAdapter("gpt-4o")` → first adapter whose
|
|
11
|
+
* `supportsModel` matches; falls back to the env-default adapter)
|
|
12
|
+
*
|
|
13
|
+
* The registry is intentionally per-process — adapters are stateless WRT
|
|
14
|
+
* runs (any per-session state lives in the adapter instance itself).
|
|
15
|
+
*/
|
|
16
|
+
const descriptors = new Map();
|
|
17
|
+
const instances = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Register a new adapter. Calling twice with the same `name` is allowed and
|
|
20
|
+
* replaces the previous descriptor (test helpers rely on this).
|
|
21
|
+
*/
|
|
22
|
+
export function registerAdapter(descriptor) {
|
|
23
|
+
const key = normalizeName(descriptor.name);
|
|
24
|
+
descriptors.set(key, { ...descriptor, name: key });
|
|
25
|
+
instances.delete(key); // re-register invalidates cached instance
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve an adapter by exact name or by free-form model identifier.
|
|
29
|
+
*
|
|
30
|
+
* Resolution order:
|
|
31
|
+
* 1. `name` matches a registered descriptor exactly → use it.
|
|
32
|
+
* 2. `name` matches some descriptor's `modelPatterns` → use the first match.
|
|
33
|
+
* 3. `process.env.MOBILE_USE_MODEL_ADAPTER` is registered → use it.
|
|
34
|
+
* 4. `mock` (always registered when `./mock.js` is imported) → use it.
|
|
35
|
+
* 5. Throw.
|
|
36
|
+
*/
|
|
37
|
+
export async function resolveAdapter(name) {
|
|
38
|
+
const trimmed = name?.trim() ?? "";
|
|
39
|
+
if (trimmed) {
|
|
40
|
+
const exact = descriptors.get(normalizeName(trimmed));
|
|
41
|
+
if (exact)
|
|
42
|
+
return await getInstance(exact);
|
|
43
|
+
const lower = trimmed.toLowerCase();
|
|
44
|
+
for (const desc of descriptors.values()) {
|
|
45
|
+
if (matchesAny(desc.modelPatterns, lower))
|
|
46
|
+
return await getInstance(desc);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const envFallback = process.env.MOBILE_USE_MODEL_ADAPTER?.trim();
|
|
50
|
+
if (envFallback) {
|
|
51
|
+
const desc = descriptors.get(normalizeName(envFallback));
|
|
52
|
+
if (desc)
|
|
53
|
+
return await getInstance(desc);
|
|
54
|
+
}
|
|
55
|
+
const mock = descriptors.get("mock");
|
|
56
|
+
if (mock)
|
|
57
|
+
return await getInstance(mock);
|
|
58
|
+
throw new Error(`No model adapter for "${name ?? ""}". ` +
|
|
59
|
+
`Available: ${available().join(", ") || "(none registered)"}`);
|
|
60
|
+
}
|
|
61
|
+
/** Synchronous variant for callers that registered eager adapters only. */
|
|
62
|
+
export function resolveAdapterSync(name) {
|
|
63
|
+
const trimmed = name?.trim() ?? "";
|
|
64
|
+
const desc = pickDescriptor(trimmed);
|
|
65
|
+
if (!desc) {
|
|
66
|
+
throw new Error(`No model adapter for "${name ?? ""}". ` +
|
|
67
|
+
`Available: ${available().join(", ") || "(none registered)"}`);
|
|
68
|
+
}
|
|
69
|
+
const cached = instances.get(desc.name);
|
|
70
|
+
if (cached)
|
|
71
|
+
return cached;
|
|
72
|
+
const made = desc.factory();
|
|
73
|
+
if (isPromise(made)) {
|
|
74
|
+
throw new Error(`Adapter "${desc.name}" requires async resolveAdapter()`);
|
|
75
|
+
}
|
|
76
|
+
instances.set(desc.name, made);
|
|
77
|
+
return made;
|
|
78
|
+
}
|
|
79
|
+
/** List adapter names currently registered, sorted alphabetically. */
|
|
80
|
+
export function available() {
|
|
81
|
+
return [...descriptors.keys()].sort();
|
|
82
|
+
}
|
|
83
|
+
/** Test helper — clears every registered adapter. */
|
|
84
|
+
export function clearAdapters() {
|
|
85
|
+
descriptors.clear();
|
|
86
|
+
instances.clear();
|
|
87
|
+
}
|
|
88
|
+
/* -------------------------------------------------------------------------- */
|
|
89
|
+
/* Internals */
|
|
90
|
+
/* -------------------------------------------------------------------------- */
|
|
91
|
+
function pickDescriptor(name) {
|
|
92
|
+
if (name) {
|
|
93
|
+
const exact = descriptors.get(normalizeName(name));
|
|
94
|
+
if (exact)
|
|
95
|
+
return exact;
|
|
96
|
+
const lower = name.toLowerCase();
|
|
97
|
+
for (const desc of descriptors.values()) {
|
|
98
|
+
if (matchesAny(desc.modelPatterns, lower))
|
|
99
|
+
return desc;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const envFallback = process.env.MOBILE_USE_MODEL_ADAPTER?.trim();
|
|
103
|
+
if (envFallback) {
|
|
104
|
+
const desc = descriptors.get(normalizeName(envFallback));
|
|
105
|
+
if (desc)
|
|
106
|
+
return desc;
|
|
107
|
+
}
|
|
108
|
+
return descriptors.get("mock");
|
|
109
|
+
}
|
|
110
|
+
async function getInstance(desc) {
|
|
111
|
+
const cached = instances.get(desc.name);
|
|
112
|
+
if (cached)
|
|
113
|
+
return cached;
|
|
114
|
+
const made = await desc.factory();
|
|
115
|
+
instances.set(desc.name, made);
|
|
116
|
+
return made;
|
|
117
|
+
}
|
|
118
|
+
function matchesAny(patterns, value) {
|
|
119
|
+
if (!patterns || patterns.length === 0)
|
|
120
|
+
return false;
|
|
121
|
+
return patterns.some((p) => (typeof p === "string" ? value.includes(p.toLowerCase()) : p.test(value)));
|
|
122
|
+
}
|
|
123
|
+
function normalizeName(name) {
|
|
124
|
+
return name.trim().toLowerCase();
|
|
125
|
+
}
|
|
126
|
+
function isPromise(v) {
|
|
127
|
+
return typeof v === "object" && v !== null && typeof v.then === "function";
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent-runtime/adapters/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-runtime/adapters/ui-tars — convenience wrapper that pre-binds the
|
|
3
|
+
* `OpenAIAdapter` to the legacy `uitars` model adapter.
|
|
4
|
+
*
|
|
5
|
+
* UI-TARS / Doubao-1.5-UI-TARS uses smart_resize coordinates and a custom
|
|
6
|
+
* `Thought:/Action:` output format — the legacy `model/adapters/uitars.ts`
|
|
7
|
+
* implements both. We just expose a separate registry entry so callers can
|
|
8
|
+
* say `resolveAdapter("ui-tars")` without fiddling with `legacyAdapter`.
|
|
9
|
+
*/
|
|
10
|
+
import { OpenAIAdapter, type OpenAIAdapterOptions } from "./openai.js";
|
|
11
|
+
export declare class UITarsAdapter extends OpenAIAdapter {
|
|
12
|
+
constructor(opts?: OpenAIAdapterOptions);
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-runtime/adapters/ui-tars — convenience wrapper that pre-binds the
|
|
3
|
+
* `OpenAIAdapter` to the legacy `uitars` model adapter.
|
|
4
|
+
*
|
|
5
|
+
* UI-TARS / Doubao-1.5-UI-TARS uses smart_resize coordinates and a custom
|
|
6
|
+
* `Thought:/Action:` output format — the legacy `model/adapters/uitars.ts`
|
|
7
|
+
* implements both. We just expose a separate registry entry so callers can
|
|
8
|
+
* say `resolveAdapter("ui-tars")` without fiddling with `legacyAdapter`.
|
|
9
|
+
*/
|
|
10
|
+
import { OpenAIAdapter } from "./openai.js";
|
|
11
|
+
import { registerAdapter } from "./registry.js";
|
|
12
|
+
export class UITarsAdapter extends OpenAIAdapter {
|
|
13
|
+
constructor(opts = {}) {
|
|
14
|
+
super({ ...opts, legacyAdapter: "uitars" });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
registerAdapter({
|
|
18
|
+
name: "ui-tars",
|
|
19
|
+
modelPatterns: [/uitars/, /ui[-_]?tars/, /doubao.*ui/, /ui.*tars/],
|
|
20
|
+
factory: () => new UITarsAdapter(),
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=ui-tars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-tars.js","sourceRoot":"","sources":["../../../src/agent-runtime/adapters/ui-tars.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,YAAY,OAA6B,EAAE;QACzC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,eAAe,CAAC;IACd,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC;IAClE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;CACnC,CAAC,CAAC"}
|