@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,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — Agent Gateway HTTP client (Ed25519-authenticated).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python `agent_gateway_client.py` and the Go middleware in
|
|
5
|
+
* `backend/services/agent-gateway/internal/agentauth/verify.go`:
|
|
6
|
+
*
|
|
7
|
+
* - Headers: X-Agent-Public-Key / X-Agent-Signature / X-Agent-Timestamp / X-Agent-Nonce
|
|
8
|
+
* - Signature: ed25519(privateKey, "METHOD|PATH|timestamp|nonce") (PATH excludes query)
|
|
9
|
+
* - Timestamp: unix seconds (string)
|
|
10
|
+
* - Nonce: random UUID v4 (replay-protected by Redis with ±5 min skew)
|
|
11
|
+
*
|
|
12
|
+
* Endpoints used:
|
|
13
|
+
* - `fetchBridgeConfig()` — `GET /api/v1/bridge/config` (geo-aware Bridge URL)
|
|
14
|
+
* - `syncAgents()` — `POST /api/v1/agents/sync` (Agent Identity registration)
|
|
15
|
+
*/
|
|
16
|
+
export interface BridgeConfig {
|
|
17
|
+
url: string;
|
|
18
|
+
region: string;
|
|
19
|
+
}
|
|
20
|
+
export interface AgentGatewayIdentity {
|
|
21
|
+
publicKey: Uint8Array;
|
|
22
|
+
privateKey: Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
export interface FetchBridgeConfigOptions {
|
|
25
|
+
/** Agent Gateway base URL, e.g. `https://agent-gw.beeos.ai`. */
|
|
26
|
+
agentGatewayUrl: string;
|
|
27
|
+
/** Optional preferred region for geo-aware bridge allocation. */
|
|
28
|
+
region?: string;
|
|
29
|
+
/** Ed25519 identity used to sign the request. */
|
|
30
|
+
identity: AgentGatewayIdentity;
|
|
31
|
+
/** Default 10s. */
|
|
32
|
+
timeoutMs?: number;
|
|
33
|
+
/** Test seam. Defaults to `globalThis.fetch`. */
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
/** Test seam. Defaults to `Date.now()`. */
|
|
36
|
+
now?: () => number;
|
|
37
|
+
/** Test seam. Defaults to `crypto.randomUUID()`. */
|
|
38
|
+
randomUUID?: () => string;
|
|
39
|
+
}
|
|
40
|
+
export declare class AgentGatewayError extends Error {
|
|
41
|
+
readonly status?: number | undefined;
|
|
42
|
+
readonly body?: string | undefined;
|
|
43
|
+
constructor(message: string, status?: number | undefined, body?: string | undefined);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* GET /api/v1/bridge/config — returns the bridge WebSocket URL plus the
|
|
47
|
+
* region it was allocated in. Throws `AgentGatewayError` on non-2xx
|
|
48
|
+
* responses or transport failures.
|
|
49
|
+
*/
|
|
50
|
+
export declare function fetchBridgeConfig(opts: FetchBridgeConfigOptions): Promise<BridgeConfig>;
|
|
51
|
+
export interface AgentCapabilitiesInput {
|
|
52
|
+
canvas?: boolean;
|
|
53
|
+
terminal?: boolean;
|
|
54
|
+
webSsh?: boolean;
|
|
55
|
+
fileSystem?: boolean;
|
|
56
|
+
image?: boolean;
|
|
57
|
+
audio?: boolean;
|
|
58
|
+
mcp?: boolean;
|
|
59
|
+
cron?: boolean;
|
|
60
|
+
streaming?: boolean;
|
|
61
|
+
pushNotifications?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface AgentSkillInput {
|
|
64
|
+
name: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
emoji?: string;
|
|
67
|
+
id?: string;
|
|
68
|
+
tags?: string[];
|
|
69
|
+
inputModes?: string[];
|
|
70
|
+
outputModes?: string[];
|
|
71
|
+
}
|
|
72
|
+
export interface AgentDeclarationInput {
|
|
73
|
+
name: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
version?: string;
|
|
76
|
+
capabilities?: AgentCapabilitiesInput;
|
|
77
|
+
skills?: AgentSkillInput[];
|
|
78
|
+
avatarUrl?: string;
|
|
79
|
+
homepage?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface SyncedAgentRecord {
|
|
82
|
+
id: string;
|
|
83
|
+
instanceId?: string;
|
|
84
|
+
name: string;
|
|
85
|
+
displayName?: string;
|
|
86
|
+
description?: string;
|
|
87
|
+
version?: string;
|
|
88
|
+
status?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface SyncAgentsResult {
|
|
91
|
+
created: number;
|
|
92
|
+
updated: number;
|
|
93
|
+
deactivated: number;
|
|
94
|
+
agents: SyncedAgentRecord[];
|
|
95
|
+
}
|
|
96
|
+
export interface SyncAgentsOptions {
|
|
97
|
+
agentGatewayUrl: string;
|
|
98
|
+
identity: AgentGatewayIdentity;
|
|
99
|
+
agents: AgentDeclarationInput[];
|
|
100
|
+
timeoutMs?: number;
|
|
101
|
+
fetchImpl?: typeof fetch;
|
|
102
|
+
now?: () => number;
|
|
103
|
+
randomUUID?: () => string;
|
|
104
|
+
}
|
|
105
|
+
export interface AgentConfigModel {
|
|
106
|
+
id: string;
|
|
107
|
+
name: string;
|
|
108
|
+
provider: string;
|
|
109
|
+
}
|
|
110
|
+
export interface AgentConfigPayload {
|
|
111
|
+
/**
|
|
112
|
+
* VLM API key — empty string means the dashboard hasn't configured
|
|
113
|
+
* `AROUTER_API_KEY` yet (the GW serializes the field with
|
|
114
|
+
* `omitempty`, so absence and emptiness collapse).
|
|
115
|
+
*/
|
|
116
|
+
vlmApiKey: string;
|
|
117
|
+
/**
|
|
118
|
+
* Currently-selected default model for this instance (mirrors
|
|
119
|
+
* `instances.model_primary`). Empty when nothing has been picked
|
|
120
|
+
* yet — agent should fall back to its own zod default.
|
|
121
|
+
*/
|
|
122
|
+
vlmModel: string;
|
|
123
|
+
availableModels: AgentConfigModel[];
|
|
124
|
+
/**
|
|
125
|
+
* True iff the GW response either omitted `vlm_api_key` entirely or
|
|
126
|
+
* returned an empty string. Lets callers warn the user without
|
|
127
|
+
* having to reach into the omitempty wire convention themselves.
|
|
128
|
+
*/
|
|
129
|
+
keyMissing: boolean;
|
|
130
|
+
}
|
|
131
|
+
export interface FetchAgentConfigOptions {
|
|
132
|
+
agentGatewayUrl: string;
|
|
133
|
+
identity: AgentGatewayIdentity;
|
|
134
|
+
timeoutMs?: number;
|
|
135
|
+
fetchImpl?: typeof fetch;
|
|
136
|
+
now?: () => number;
|
|
137
|
+
randomUUID?: () => string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* GET /api/v1/agent/config — fetch the user-scoped VLM configuration
|
|
141
|
+
* (ARouter API key, default model, list of selectable models).
|
|
142
|
+
*
|
|
143
|
+
* `vlm_base_url` is intentionally not part of the response (per ADR
|
|
144
|
+
* — base URL is a deployment detail). device-agent's loader applies
|
|
145
|
+
* its own zod default (`https://api.arouter.ai`).
|
|
146
|
+
*
|
|
147
|
+
* Currently exposed for tests and future ACP `session.setModel`
|
|
148
|
+
* round-trips. The CLI is the primary consumer at attach time and
|
|
149
|
+
* uses `@beeos/core::fetchAgentConfig` to talk to the same endpoint.
|
|
150
|
+
*/
|
|
151
|
+
export declare function fetchAgentConfig(opts: FetchAgentConfigOptions): Promise<AgentConfigPayload>;
|
|
152
|
+
export interface UpdateAgentConfigOptions {
|
|
153
|
+
agentGatewayUrl: string;
|
|
154
|
+
identity: AgentGatewayIdentity;
|
|
155
|
+
modelPrimary: string;
|
|
156
|
+
timeoutMs?: number;
|
|
157
|
+
fetchImpl?: typeof fetch;
|
|
158
|
+
now?: () => number;
|
|
159
|
+
randomUUID?: () => string;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* PUT /api/v1/agent/config — persist the user-selected default model
|
|
163
|
+
* back to the platform instance (`instances.model_primary`). Future
|
|
164
|
+
* ACP `session.setModel` will likely call this; for today the
|
|
165
|
+
* adapter is shipped to keep the contract symmetric with the GET.
|
|
166
|
+
*/
|
|
167
|
+
export declare function updateAgentConfig(opts: UpdateAgentConfigOptions): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* POST /api/v1/agents/sync — declare the full set of agents this
|
|
170
|
+
* instance hosts. Agent Identity Service reconciles on the platform
|
|
171
|
+
* side (create / update / deactivate). Throws `AgentGatewayError`
|
|
172
|
+
* on non-2xx or transport failures.
|
|
173
|
+
*
|
|
174
|
+
* For device-agent this is called once per boot with a single
|
|
175
|
+
* agent declaration so the device shows up in the platform's Agents
|
|
176
|
+
* directory (Dashboard → Agents).
|
|
177
|
+
*/
|
|
178
|
+
export declare function syncAgents(opts: SyncAgentsOptions): Promise<SyncAgentsResult>;
|
|
179
|
+
/**
|
|
180
|
+
* Result of `POST /api/v1/agent/files/presign`. The `downloadUrl` and
|
|
181
|
+
* `downloadExpiresIn` fields are populated when the storage backend
|
|
182
|
+
* supports pre-signed downloads (S3 / MinIO); `LocalStore` in
|
|
183
|
+
* dev returns empty strings, in which case callers must fall back to
|
|
184
|
+
* `GET /api/v1/agent/files/{id}/resolve` after `confirm`.
|
|
185
|
+
*
|
|
186
|
+
* `downloadExpiresIn` is in seconds. The default Runtime config is
|
|
187
|
+
* 24 h (86400) and the hard cap is 168 h / 7 d (604800) per AWS
|
|
188
|
+
* SigV4. The TTL is set on the Runtime side via the
|
|
189
|
+
* `PRESIGN_DOWNLOAD_TTL` env.
|
|
190
|
+
*/
|
|
191
|
+
export interface PresignFilePair {
|
|
192
|
+
fileId: string;
|
|
193
|
+
uploadUrl: string;
|
|
194
|
+
downloadUrl: string;
|
|
195
|
+
downloadExpiresIn: number;
|
|
196
|
+
}
|
|
197
|
+
export interface PresignFileUploadOptions {
|
|
198
|
+
agentGatewayUrl: string;
|
|
199
|
+
identity: AgentGatewayIdentity;
|
|
200
|
+
fileName: string;
|
|
201
|
+
mimeType: string;
|
|
202
|
+
timeoutMs?: number;
|
|
203
|
+
fetchImpl?: typeof fetch;
|
|
204
|
+
now?: () => number;
|
|
205
|
+
randomUUID?: () => string;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Pre-sign a paired PUT + GET URL for a file the agent is about to
|
|
209
|
+
* stage. The Agent Gateway resolves the calling agent's `instanceId` /
|
|
210
|
+
* `ownerId` from the Ed25519 signature and forwards both to the
|
|
211
|
+
* Runtime FileService — the client never needs to know either.
|
|
212
|
+
*
|
|
213
|
+
* The returned `downloadUrl` is suitable for embedding directly as an
|
|
214
|
+
* OpenAI vision `image_url` part: it is publicly fetchable for up to
|
|
215
|
+
* `downloadExpiresIn` seconds without any platform credential. Callers
|
|
216
|
+
* that ship images to a remote VLM should:
|
|
217
|
+
*
|
|
218
|
+
* 1. Call this method with `{ fileName, mimeType }`.
|
|
219
|
+
* 2. PUT the bytes to `uploadUrl` (S3 sigv4 — no auth headers needed).
|
|
220
|
+
* 3. Use `downloadUrl` in the chat-completion message.
|
|
221
|
+
*
|
|
222
|
+
* No `confirm` round-trip is required for VLM use — `confirm` is only
|
|
223
|
+
* needed when the platform's file index ought to surface the upload
|
|
224
|
+
* (e.g. user-visible attachments). Throws `AgentGatewayError` on
|
|
225
|
+
* non-2xx responses.
|
|
226
|
+
*/
|
|
227
|
+
export declare function presignFileUpload(opts: PresignFileUploadOptions): Promise<PresignFilePair>;
|
|
228
|
+
/**
|
|
229
|
+
* PUT the staged bytes to the pre-signed S3 / MinIO URL.
|
|
230
|
+
* Pre-signed URLs already encode the auth, so the call is a single
|
|
231
|
+
* unauthenticated HTTP PUT. The `Content-Type` header MUST match the
|
|
232
|
+
* one passed to `presignFileUpload` — S3's sigv4 binds the header
|
|
233
|
+
* into the signature.
|
|
234
|
+
*
|
|
235
|
+
* Returns silently on success; throws `AgentGatewayError` on non-2xx
|
|
236
|
+
* (preserves status code for caller's transport-level fallback).
|
|
237
|
+
*/
|
|
238
|
+
export declare function putPresignedBytes(opts: {
|
|
239
|
+
uploadUrl: string;
|
|
240
|
+
bytes: Uint8Array;
|
|
241
|
+
mimeType: string;
|
|
242
|
+
timeoutMs?: number;
|
|
243
|
+
fetchImpl?: typeof fetch;
|
|
244
|
+
}): Promise<void>;
|
|
245
|
+
/**
|
|
246
|
+
* Build the four `X-Agent-*` Ed25519 auth headers for an HTTP request.
|
|
247
|
+
* Exposed for unit tests and adapters that talk to other AGW endpoints.
|
|
248
|
+
*/
|
|
249
|
+
export declare function buildAuthHeaders(opts: {
|
|
250
|
+
method: string;
|
|
251
|
+
/** URL path WITHOUT query string. */
|
|
252
|
+
path: string;
|
|
253
|
+
identity: AgentGatewayIdentity;
|
|
254
|
+
now?: () => number;
|
|
255
|
+
randomUUID?: () => string;
|
|
256
|
+
}): Record<string, string>;
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter — Agent Gateway HTTP client (Ed25519-authenticated).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python `agent_gateway_client.py` and the Go middleware in
|
|
5
|
+
* `backend/services/agent-gateway/internal/agentauth/verify.go`:
|
|
6
|
+
*
|
|
7
|
+
* - Headers: X-Agent-Public-Key / X-Agent-Signature / X-Agent-Timestamp / X-Agent-Nonce
|
|
8
|
+
* - Signature: ed25519(privateKey, "METHOD|PATH|timestamp|nonce") (PATH excludes query)
|
|
9
|
+
* - Timestamp: unix seconds (string)
|
|
10
|
+
* - Nonce: random UUID v4 (replay-protected by Redis with ±5 min skew)
|
|
11
|
+
*
|
|
12
|
+
* Endpoints used:
|
|
13
|
+
* - `fetchBridgeConfig()` — `GET /api/v1/bridge/config` (geo-aware Bridge URL)
|
|
14
|
+
* - `syncAgents()` — `POST /api/v1/agents/sync` (Agent Identity registration)
|
|
15
|
+
*/
|
|
16
|
+
import { sign } from "@beeos-ai/bridge-client";
|
|
17
|
+
export class AgentGatewayError extends Error {
|
|
18
|
+
status;
|
|
19
|
+
body;
|
|
20
|
+
constructor(message, status, body) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.status = status;
|
|
23
|
+
this.body = body;
|
|
24
|
+
this.name = "AgentGatewayError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* GET /api/v1/bridge/config — returns the bridge WebSocket URL plus the
|
|
29
|
+
* region it was allocated in. Throws `AgentGatewayError` on non-2xx
|
|
30
|
+
* responses or transport failures.
|
|
31
|
+
*/
|
|
32
|
+
export async function fetchBridgeConfig(opts) {
|
|
33
|
+
const path = "/api/v1/bridge/config";
|
|
34
|
+
const query = opts.region ? `?region=${encodeURIComponent(opts.region)}` : "";
|
|
35
|
+
const url = `${trimSlash(opts.agentGatewayUrl)}${path}${query}`;
|
|
36
|
+
const headers = buildAuthHeaders({
|
|
37
|
+
method: "GET",
|
|
38
|
+
path,
|
|
39
|
+
identity: opts.identity,
|
|
40
|
+
now: opts.now,
|
|
41
|
+
randomUUID: opts.randomUUID,
|
|
42
|
+
});
|
|
43
|
+
const data = await gwGet(url, headers, opts.timeoutMs ?? 10_000, opts.fetchImpl);
|
|
44
|
+
const u = data.url;
|
|
45
|
+
const r = data.region;
|
|
46
|
+
if (typeof u !== "string" || u.length === 0) {
|
|
47
|
+
throw new AgentGatewayError(`bridge/config: missing 'url' in response (got ${JSON.stringify(data)})`);
|
|
48
|
+
}
|
|
49
|
+
return { url: u, region: typeof r === "string" ? r : "" };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* GET /api/v1/agent/config — fetch the user-scoped VLM configuration
|
|
53
|
+
* (ARouter API key, default model, list of selectable models).
|
|
54
|
+
*
|
|
55
|
+
* `vlm_base_url` is intentionally not part of the response (per ADR
|
|
56
|
+
* — base URL is a deployment detail). device-agent's loader applies
|
|
57
|
+
* its own zod default (`https://api.arouter.ai`).
|
|
58
|
+
*
|
|
59
|
+
* Currently exposed for tests and future ACP `session.setModel`
|
|
60
|
+
* round-trips. The CLI is the primary consumer at attach time and
|
|
61
|
+
* uses `@beeos/core::fetchAgentConfig` to talk to the same endpoint.
|
|
62
|
+
*/
|
|
63
|
+
export async function fetchAgentConfig(opts) {
|
|
64
|
+
const path = "/api/v1/agent/config";
|
|
65
|
+
const url = `${trimSlash(opts.agentGatewayUrl)}${path}`;
|
|
66
|
+
const headers = buildAuthHeaders({
|
|
67
|
+
method: "GET",
|
|
68
|
+
path,
|
|
69
|
+
identity: opts.identity,
|
|
70
|
+
now: opts.now,
|
|
71
|
+
randomUUID: opts.randomUUID,
|
|
72
|
+
});
|
|
73
|
+
const data = (await gwGet(url, headers, opts.timeoutMs ?? 10_000, opts.fetchImpl));
|
|
74
|
+
const obj = (data ?? {});
|
|
75
|
+
const apiKeyField = obj["vlm_api_key"];
|
|
76
|
+
const vlmApiKey = typeof apiKeyField === "string" ? apiKeyField : "";
|
|
77
|
+
const modelField = obj["vlm_model"];
|
|
78
|
+
const vlmModel = typeof modelField === "string" ? modelField : "";
|
|
79
|
+
const rawModels = Array.isArray(obj["available_models"])
|
|
80
|
+
? obj["available_models"]
|
|
81
|
+
: [];
|
|
82
|
+
const availableModels = rawModels
|
|
83
|
+
.filter((m) => !!m && typeof m === "object")
|
|
84
|
+
.map((m) => ({
|
|
85
|
+
id: typeof m["id"] === "string" ? m["id"] : "",
|
|
86
|
+
name: typeof m["name"] === "string" ? m["name"] : "",
|
|
87
|
+
provider: typeof m["provider"] === "string"
|
|
88
|
+
? m["provider"]
|
|
89
|
+
: "",
|
|
90
|
+
}));
|
|
91
|
+
return {
|
|
92
|
+
vlmApiKey,
|
|
93
|
+
vlmModel,
|
|
94
|
+
availableModels,
|
|
95
|
+
keyMissing: !("vlm_api_key" in obj) || vlmApiKey === "",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* PUT /api/v1/agent/config — persist the user-selected default model
|
|
100
|
+
* back to the platform instance (`instances.model_primary`). Future
|
|
101
|
+
* ACP `session.setModel` will likely call this; for today the
|
|
102
|
+
* adapter is shipped to keep the contract symmetric with the GET.
|
|
103
|
+
*/
|
|
104
|
+
export async function updateAgentConfig(opts) {
|
|
105
|
+
const path = "/api/v1/agent/config";
|
|
106
|
+
const url = `${trimSlash(opts.agentGatewayUrl)}${path}`;
|
|
107
|
+
const body = JSON.stringify({ model_primary: opts.modelPrimary });
|
|
108
|
+
const headers = {
|
|
109
|
+
...buildAuthHeaders({
|
|
110
|
+
method: "PUT",
|
|
111
|
+
path,
|
|
112
|
+
identity: opts.identity,
|
|
113
|
+
now: opts.now,
|
|
114
|
+
randomUUID: opts.randomUUID,
|
|
115
|
+
}),
|
|
116
|
+
"Content-Type": "application/json",
|
|
117
|
+
};
|
|
118
|
+
await gwRequest("PUT", url, headers, body, opts.timeoutMs ?? 10_000, opts.fetchImpl);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* POST /api/v1/agents/sync — declare the full set of agents this
|
|
122
|
+
* instance hosts. Agent Identity Service reconciles on the platform
|
|
123
|
+
* side (create / update / deactivate). Throws `AgentGatewayError`
|
|
124
|
+
* on non-2xx or transport failures.
|
|
125
|
+
*
|
|
126
|
+
* For device-agent this is called once per boot with a single
|
|
127
|
+
* agent declaration so the device shows up in the platform's Agents
|
|
128
|
+
* directory (Dashboard → Agents).
|
|
129
|
+
*/
|
|
130
|
+
export async function syncAgents(opts) {
|
|
131
|
+
const path = "/api/v1/agents/sync";
|
|
132
|
+
const url = `${trimSlash(opts.agentGatewayUrl)}${path}`;
|
|
133
|
+
const body = JSON.stringify({ agents: opts.agents });
|
|
134
|
+
const headers = {
|
|
135
|
+
...buildAuthHeaders({
|
|
136
|
+
method: "POST",
|
|
137
|
+
path,
|
|
138
|
+
identity: opts.identity,
|
|
139
|
+
now: opts.now,
|
|
140
|
+
randomUUID: opts.randomUUID,
|
|
141
|
+
}),
|
|
142
|
+
"Content-Type": "application/json",
|
|
143
|
+
};
|
|
144
|
+
const data = await gwRequest("POST", url, headers, body, opts.timeoutMs ?? 10_000, opts.fetchImpl);
|
|
145
|
+
// Agent Gateway returns the standard `{success, data, ...}` envelope —
|
|
146
|
+
// counts live at top level (created/updated/deactivated), platform agent
|
|
147
|
+
// records live under `data`.
|
|
148
|
+
const obj = (data ?? {});
|
|
149
|
+
const agentsRaw = Array.isArray(obj.data) ? obj.data : [];
|
|
150
|
+
const agents = agentsRaw
|
|
151
|
+
.filter((a) => !!a && typeof a === "object")
|
|
152
|
+
.map((a) => ({
|
|
153
|
+
id: String(a.id ?? ""),
|
|
154
|
+
instanceId: typeof a.instanceId === "string" ? a.instanceId : undefined,
|
|
155
|
+
name: String(a.name ?? ""),
|
|
156
|
+
displayName: typeof a.displayName === "string" ? a.displayName : undefined,
|
|
157
|
+
description: typeof a.description === "string" ? a.description : undefined,
|
|
158
|
+
version: typeof a.version === "string" ? a.version : undefined,
|
|
159
|
+
status: typeof a.status === "string" ? a.status : undefined,
|
|
160
|
+
}));
|
|
161
|
+
return {
|
|
162
|
+
created: typeof obj.created === "number" ? obj.created : 0,
|
|
163
|
+
updated: typeof obj.updated === "number" ? obj.updated : 0,
|
|
164
|
+
deactivated: typeof obj.deactivated === "number" ? obj.deactivated : 0,
|
|
165
|
+
agents,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Pre-sign a paired PUT + GET URL for a file the agent is about to
|
|
170
|
+
* stage. The Agent Gateway resolves the calling agent's `instanceId` /
|
|
171
|
+
* `ownerId` from the Ed25519 signature and forwards both to the
|
|
172
|
+
* Runtime FileService — the client never needs to know either.
|
|
173
|
+
*
|
|
174
|
+
* The returned `downloadUrl` is suitable for embedding directly as an
|
|
175
|
+
* OpenAI vision `image_url` part: it is publicly fetchable for up to
|
|
176
|
+
* `downloadExpiresIn` seconds without any platform credential. Callers
|
|
177
|
+
* that ship images to a remote VLM should:
|
|
178
|
+
*
|
|
179
|
+
* 1. Call this method with `{ fileName, mimeType }`.
|
|
180
|
+
* 2. PUT the bytes to `uploadUrl` (S3 sigv4 — no auth headers needed).
|
|
181
|
+
* 3. Use `downloadUrl` in the chat-completion message.
|
|
182
|
+
*
|
|
183
|
+
* No `confirm` round-trip is required for VLM use — `confirm` is only
|
|
184
|
+
* needed when the platform's file index ought to surface the upload
|
|
185
|
+
* (e.g. user-visible attachments). Throws `AgentGatewayError` on
|
|
186
|
+
* non-2xx responses.
|
|
187
|
+
*/
|
|
188
|
+
export async function presignFileUpload(opts) {
|
|
189
|
+
const path = "/api/v1/agent/files/presign";
|
|
190
|
+
const url = `${trimSlash(opts.agentGatewayUrl)}${path}`;
|
|
191
|
+
const body = JSON.stringify({
|
|
192
|
+
fileName: opts.fileName,
|
|
193
|
+
mimeType: opts.mimeType,
|
|
194
|
+
});
|
|
195
|
+
const headers = {
|
|
196
|
+
...buildAuthHeaders({
|
|
197
|
+
method: "POST",
|
|
198
|
+
path,
|
|
199
|
+
identity: opts.identity,
|
|
200
|
+
now: opts.now,
|
|
201
|
+
randomUUID: opts.randomUUID,
|
|
202
|
+
}),
|
|
203
|
+
"Content-Type": "application/json",
|
|
204
|
+
};
|
|
205
|
+
const data = (await gwRequest("POST", url, headers, body, opts.timeoutMs ?? 10_000, opts.fetchImpl));
|
|
206
|
+
const obj = (data ?? {});
|
|
207
|
+
const fileId = typeof obj.fileId === "string" ? obj.fileId : "";
|
|
208
|
+
const uploadUrl = typeof obj.uploadUrl === "string" ? obj.uploadUrl : "";
|
|
209
|
+
const downloadUrl = typeof obj.downloadUrl === "string" ? obj.downloadUrl : "";
|
|
210
|
+
const downloadExpiresIn = typeof obj.downloadExpiresIn === "number" ? obj.downloadExpiresIn : 0;
|
|
211
|
+
if (!fileId || !uploadUrl) {
|
|
212
|
+
throw new AgentGatewayError(`files/presign: missing fileId/uploadUrl (got ${JSON.stringify(data)})`);
|
|
213
|
+
}
|
|
214
|
+
return { fileId, uploadUrl, downloadUrl, downloadExpiresIn };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* PUT the staged bytes to the pre-signed S3 / MinIO URL.
|
|
218
|
+
* Pre-signed URLs already encode the auth, so the call is a single
|
|
219
|
+
* unauthenticated HTTP PUT. The `Content-Type` header MUST match the
|
|
220
|
+
* one passed to `presignFileUpload` — S3's sigv4 binds the header
|
|
221
|
+
* into the signature.
|
|
222
|
+
*
|
|
223
|
+
* Returns silently on success; throws `AgentGatewayError` on non-2xx
|
|
224
|
+
* (preserves status code for caller's transport-level fallback).
|
|
225
|
+
*/
|
|
226
|
+
export async function putPresignedBytes(opts) {
|
|
227
|
+
const f = opts.fetchImpl ?? globalThis.fetch;
|
|
228
|
+
if (typeof f !== "function") {
|
|
229
|
+
throw new AgentGatewayError("global fetch is not available (Node >=18 required)");
|
|
230
|
+
}
|
|
231
|
+
const ctrl = new AbortController();
|
|
232
|
+
const timer = setTimeout(() => ctrl.abort(), opts.timeoutMs ?? 30_000);
|
|
233
|
+
try {
|
|
234
|
+
// Node's fetch typings narrow `body` to `BodyInit`, which technically
|
|
235
|
+
// accepts an `ArrayBuffer` but not the generic `Uint8Array<ArrayBufferLike>`
|
|
236
|
+
// shape produced by callers (compressForVlm output, etc.). At runtime
|
|
237
|
+
// a Uint8Array is a perfectly valid `BodyInit` for Node fetch — the
|
|
238
|
+
// cast keeps the byte-exact PUT contract without an extra copy.
|
|
239
|
+
const resp = await f(opts.uploadUrl, {
|
|
240
|
+
method: "PUT",
|
|
241
|
+
headers: { "Content-Type": opts.mimeType },
|
|
242
|
+
body: opts.bytes,
|
|
243
|
+
signal: ctrl.signal,
|
|
244
|
+
});
|
|
245
|
+
if (!resp.ok) {
|
|
246
|
+
const text = await safeReadBody(resp);
|
|
247
|
+
throw new AgentGatewayError(`presigned PUT failed: ${resp.status} ${resp.statusText}`, resp.status, text);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
if (e instanceof AgentGatewayError)
|
|
252
|
+
throw e;
|
|
253
|
+
if (e.name === "AbortError") {
|
|
254
|
+
throw new AgentGatewayError(`presigned PUT timed out after ${opts.timeoutMs ?? 30_000}ms`);
|
|
255
|
+
}
|
|
256
|
+
throw new AgentGatewayError(`presigned PUT failed: ${e.message}`);
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
clearTimeout(timer);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Build the four `X-Agent-*` Ed25519 auth headers for an HTTP request.
|
|
264
|
+
* Exposed for unit tests and adapters that talk to other AGW endpoints.
|
|
265
|
+
*/
|
|
266
|
+
export function buildAuthHeaders(opts) {
|
|
267
|
+
const tsMs = opts.now ? opts.now() : Date.now();
|
|
268
|
+
const timestamp = Math.floor(tsMs / 1000).toString();
|
|
269
|
+
const nonce = opts.randomUUID ? opts.randomUUID() : globalThis.crypto.randomUUID();
|
|
270
|
+
const message = `${opts.method.toUpperCase()}|${opts.path}|${timestamp}|${nonce}`;
|
|
271
|
+
const signature = sign(message, opts.identity.privateKey);
|
|
272
|
+
return {
|
|
273
|
+
"X-Agent-Public-Key": Buffer.from(opts.identity.publicKey).toString("base64"),
|
|
274
|
+
"X-Agent-Signature": Buffer.from(signature).toString("base64"),
|
|
275
|
+
"X-Agent-Timestamp": timestamp,
|
|
276
|
+
"X-Agent-Nonce": nonce,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
async function gwGet(url, headers, timeoutMs, fetchImpl) {
|
|
280
|
+
return gwRequest("GET", url, headers, undefined, timeoutMs, fetchImpl);
|
|
281
|
+
}
|
|
282
|
+
async function gwRequest(method, url, headers, body, timeoutMs, fetchImpl) {
|
|
283
|
+
const f = fetchImpl ?? globalThis.fetch;
|
|
284
|
+
if (typeof f !== "function") {
|
|
285
|
+
throw new AgentGatewayError("global fetch is not available (Node >=18 required)");
|
|
286
|
+
}
|
|
287
|
+
const ctrl = new AbortController();
|
|
288
|
+
const timer = setTimeout(() => ctrl.abort(), timeoutMs);
|
|
289
|
+
try {
|
|
290
|
+
const init = { method, headers, signal: ctrl.signal };
|
|
291
|
+
if (body !== undefined)
|
|
292
|
+
init.body = body;
|
|
293
|
+
const resp = await f(url, init);
|
|
294
|
+
if (!resp.ok) {
|
|
295
|
+
const text = await safeReadBody(resp);
|
|
296
|
+
throw new AgentGatewayError(`agent gateway request failed: ${resp.status} ${resp.statusText}`, resp.status, text);
|
|
297
|
+
}
|
|
298
|
+
const text = await resp.text();
|
|
299
|
+
if (!text)
|
|
300
|
+
return null;
|
|
301
|
+
try {
|
|
302
|
+
return JSON.parse(text);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return text;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (e) {
|
|
309
|
+
if (e instanceof AgentGatewayError)
|
|
310
|
+
throw e;
|
|
311
|
+
if (e.name === "AbortError") {
|
|
312
|
+
throw new AgentGatewayError(`agent gateway request timed out after ${timeoutMs}ms`);
|
|
313
|
+
}
|
|
314
|
+
throw new AgentGatewayError(`agent gateway request failed: ${e.message}`);
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
clearTimeout(timer);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async function safeReadBody(resp) {
|
|
321
|
+
try {
|
|
322
|
+
const t = await resp.text();
|
|
323
|
+
return t.slice(0, 500);
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
return "";
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function trimSlash(s) {
|
|
330
|
+
return s.endsWith("/") ? s.slice(0, -1) : s;
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=agent-gateway-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-gateway-client.js","sourceRoot":"","sources":["../../src/adapters/agent-gateway-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
import type { AgentCoreRunOptions, AgentCoreRunResult, IAgentCore } from "../ports/agent-core.js";
|
|
21
|
+
import type { IVlm } from "../ports/vlm.js";
|
|
22
|
+
export declare class InnerLoopAgent implements IAgentCore {
|
|
23
|
+
private readonly vlm;
|
|
24
|
+
constructor(vlm: IVlm);
|
|
25
|
+
get modelName(): string;
|
|
26
|
+
get providerName(): string | undefined;
|
|
27
|
+
run(opts: AgentCoreRunOptions): Promise<AgentCoreRunResult>;
|
|
28
|
+
setModel(provider: string, model: string): Promise<void>;
|
|
29
|
+
}
|