@cavi-ai/api-client 0.1.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/ARCHITECTURE.md +12 -0
- package/CHANGELOG.md +80 -0
- package/CONTRIBUTING.md +158 -0
- package/LICENSE +21 -0
- package/README.md +618 -0
- package/SECURITY.md +48 -0
- package/dist/contracts/index.d.ts +5 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +4 -0
- package/dist/contracts/paths.d.ts +154 -0
- package/dist/contracts/paths.d.ts.map +1 -0
- package/dist/contracts/paths.js +89 -0
- package/dist/contracts/resolve.d.ts +7 -0
- package/dist/contracts/resolve.d.ts.map +1 -0
- package/dist/contracts/resolve.js +22 -0
- package/dist/contracts/surfaces.d.ts +13 -0
- package/dist/contracts/surfaces.d.ts.map +1 -0
- package/dist/contracts/surfaces.js +332 -0
- package/dist/contracts/team-manifest.d.ts +200 -0
- package/dist/contracts/team-manifest.d.ts.map +1 -0
- package/dist/contracts/team-manifest.js +951 -0
- package/dist/core/data/guards.d.ts +6 -0
- package/dist/core/data/guards.d.ts.map +1 -0
- package/dist/core/data/guards.js +22 -0
- package/dist/core/data/index.d.ts +2 -0
- package/dist/core/data/index.d.ts.map +1 -0
- package/dist/core/data/index.js +1 -0
- package/dist/core/env/config.d.ts +40 -0
- package/dist/core/env/config.d.ts.map +1 -0
- package/dist/core/env/config.js +44 -0
- package/dist/core/env/index.d.ts +3 -0
- package/dist/core/env/index.d.ts.map +1 -0
- package/dist/core/env/index.js +2 -0
- package/dist/core/env/repo-root.d.ts +11 -0
- package/dist/core/env/repo-root.d.ts.map +1 -0
- package/dist/core/env/repo-root.js +36 -0
- package/dist/core/gateway/agent/commands.d.ts +93 -0
- package/dist/core/gateway/agent/commands.d.ts.map +1 -0
- package/dist/core/gateway/agent/commands.js +351 -0
- package/dist/core/gateway/agent/config.d.ts +158 -0
- package/dist/core/gateway/agent/config.d.ts.map +1 -0
- package/dist/core/gateway/agent/config.js +536 -0
- package/dist/core/gateway/agent/index.d.ts +4 -0
- package/dist/core/gateway/agent/index.d.ts.map +1 -0
- package/dist/core/gateway/agent/index.js +3 -0
- package/dist/core/gateway/agent/voice-config.d.ts +20 -0
- package/dist/core/gateway/agent/voice-config.d.ts.map +1 -0
- package/dist/core/gateway/agent/voice-config.js +65 -0
- package/dist/core/gateway/client/capabilities.d.ts +28 -0
- package/dist/core/gateway/client/capabilities.d.ts.map +1 -0
- package/dist/core/gateway/client/capabilities.js +288 -0
- package/dist/core/gateway/client/client.d.ts +106 -0
- package/dist/core/gateway/client/client.d.ts.map +1 -0
- package/dist/core/gateway/client/client.js +41 -0
- package/dist/core/gateway/client/error-details.d.ts +17 -0
- package/dist/core/gateway/client/error-details.d.ts.map +1 -0
- package/dist/core/gateway/client/error-details.js +50 -0
- package/dist/core/gateway/client/fetch.d.ts +24 -0
- package/dist/core/gateway/client/fetch.d.ts.map +1 -0
- package/dist/core/gateway/client/fetch.js +98 -0
- package/dist/core/gateway/client/index.d.ts +6 -0
- package/dist/core/gateway/client/index.d.ts.map +1 -0
- package/dist/core/gateway/client/index.js +5 -0
- package/dist/core/gateway/client/runtime-targets.d.ts +11 -0
- package/dist/core/gateway/client/runtime-targets.d.ts.map +1 -0
- package/dist/core/gateway/client/runtime-targets.js +86 -0
- package/dist/core/gateway/envelope/envelope.d.ts +25 -0
- package/dist/core/gateway/envelope/envelope.d.ts.map +1 -0
- package/dist/core/gateway/envelope/envelope.js +141 -0
- package/dist/core/gateway/envelope/index.d.ts +3 -0
- package/dist/core/gateway/envelope/index.d.ts.map +1 -0
- package/dist/core/gateway/envelope/index.js +1 -0
- package/dist/core/gateway/envelope/types.d.ts +32 -0
- package/dist/core/gateway/envelope/types.d.ts.map +1 -0
- package/dist/core/gateway/envelope/types.js +1 -0
- package/dist/core/gateway/index.d.ts +11 -0
- package/dist/core/gateway/index.d.ts.map +1 -0
- package/dist/core/gateway/index.js +10 -0
- package/dist/core/gateway/jobs.d.ts +44 -0
- package/dist/core/gateway/jobs.d.ts.map +1 -0
- package/dist/core/gateway/jobs.js +104 -0
- package/dist/core/gateway/portal/config-patch.d.ts +42 -0
- package/dist/core/gateway/portal/config-patch.d.ts.map +1 -0
- package/dist/core/gateway/portal/config-patch.js +99 -0
- package/dist/core/gateway/portal/index.d.ts +2 -0
- package/dist/core/gateway/portal/index.d.ts.map +1 -0
- package/dist/core/gateway/portal/index.js +1 -0
- package/dist/core/gateway/providers/factory.d.ts +18 -0
- package/dist/core/gateway/providers/factory.d.ts.map +1 -0
- package/dist/core/gateway/providers/factory.js +40 -0
- package/dist/core/gateway/providers/index.d.ts +5 -0
- package/dist/core/gateway/providers/index.d.ts.map +1 -0
- package/dist/core/gateway/providers/index.js +4 -0
- package/dist/core/gateway/providers/normalize.d.ts +2 -0
- package/dist/core/gateway/providers/normalize.d.ts.map +1 -0
- package/dist/core/gateway/providers/normalize.js +6 -0
- package/dist/core/gateway/providers/registry.d.ts +5 -0
- package/dist/core/gateway/providers/registry.d.ts.map +1 -0
- package/dist/core/gateway/providers/registry.js +76 -0
- package/dist/core/gateway/providers/types.d.ts +42 -0
- package/dist/core/gateway/providers/types.d.ts.map +1 -0
- package/dist/core/gateway/providers/types.js +4 -0
- package/dist/core/gateway/resources/index.d.ts +3 -0
- package/dist/core/gateway/resources/index.d.ts.map +1 -0
- package/dist/core/gateway/resources/index.js +2 -0
- package/dist/core/gateway/resources/media.d.ts +165 -0
- package/dist/core/gateway/resources/media.d.ts.map +1 -0
- package/dist/core/gateway/resources/media.js +170 -0
- package/dist/core/gateway/resources/wiki.d.ts +136 -0
- package/dist/core/gateway/resources/wiki.d.ts.map +1 -0
- package/dist/core/gateway/resources/wiki.js +72 -0
- package/dist/core/gateway/rpc/client.d.ts +150 -0
- package/dist/core/gateway/rpc/client.d.ts.map +1 -0
- package/dist/core/gateway/rpc/client.js +675 -0
- package/dist/core/gateway/rpc/device-crypto.d.ts +19 -0
- package/dist/core/gateway/rpc/device-crypto.d.ts.map +1 -0
- package/dist/core/gateway/rpc/device-crypto.js +75 -0
- package/dist/core/gateway/rpc/device-store.d.ts +8 -0
- package/dist/core/gateway/rpc/device-store.d.ts.map +1 -0
- package/dist/core/gateway/rpc/device-store.js +113 -0
- package/dist/core/gateway/rpc/error.d.ts +5 -0
- package/dist/core/gateway/rpc/error.d.ts.map +1 -0
- package/dist/core/gateway/rpc/error.js +9 -0
- package/dist/core/gateway/rpc/index.d.ts +6 -0
- package/dist/core/gateway/rpc/index.d.ts.map +1 -0
- package/dist/core/gateway/rpc/index.js +5 -0
- package/dist/core/gateway/rpc/preauth-handshake.d.ts +39 -0
- package/dist/core/gateway/rpc/preauth-handshake.d.ts.map +1 -0
- package/dist/core/gateway/rpc/preauth-handshake.js +58 -0
- package/dist/core/gateway/run/contracts.d.ts +126 -0
- package/dist/core/gateway/run/contracts.d.ts.map +1 -0
- package/dist/core/gateway/run/contracts.js +23 -0
- package/dist/core/gateway/run/event-stream.d.ts +106 -0
- package/dist/core/gateway/run/event-stream.d.ts.map +1 -0
- package/dist/core/gateway/run/event-stream.js +264 -0
- package/dist/core/gateway/run/index.d.ts +5 -0
- package/dist/core/gateway/run/index.d.ts.map +1 -0
- package/dist/core/gateway/run/index.js +4 -0
- package/dist/core/gateway/run/sse-run-event-provider.d.ts +55 -0
- package/dist/core/gateway/run/sse-run-event-provider.d.ts.map +1 -0
- package/dist/core/gateway/run/sse-run-event-provider.js +394 -0
- package/dist/core/gateway/run/stream-failure.d.ts +11 -0
- package/dist/core/gateway/run/stream-failure.d.ts.map +1 -0
- package/dist/core/gateway/run/stream-failure.js +101 -0
- package/dist/core/gateway/snapshots/cache.d.ts +7 -0
- package/dist/core/gateway/snapshots/cache.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/cache.js +13 -0
- package/dist/core/gateway/snapshots/contracts.d.ts +279 -0
- package/dist/core/gateway/snapshots/contracts.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/contracts.js +1 -0
- package/dist/core/gateway/snapshots/index.d.ts +7 -0
- package/dist/core/gateway/snapshots/index.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/index.js +6 -0
- package/dist/core/gateway/snapshots/loaders.d.ts +76 -0
- package/dist/core/gateway/snapshots/loaders.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/loaders.js +515 -0
- package/dist/core/gateway/snapshots/session-loaders.d.ts +116 -0
- package/dist/core/gateway/snapshots/session-loaders.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/session-loaders.js +310 -0
- package/dist/core/gateway/snapshots/system-loaders.d.ts +16 -0
- package/dist/core/gateway/snapshots/system-loaders.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/system-loaders.js +61 -0
- package/dist/core/gateway/snapshots/transforms.d.ts +38 -0
- package/dist/core/gateway/snapshots/transforms.d.ts.map +1 -0
- package/dist/core/gateway/snapshots/transforms.js +328 -0
- package/dist/core/http/client-id.d.ts +6 -0
- package/dist/core/http/client-id.d.ts.map +1 -0
- package/dist/core/http/client-id.js +29 -0
- package/dist/core/http/client.d.ts +25 -0
- package/dist/core/http/client.d.ts.map +1 -0
- package/dist/core/http/client.js +234 -0
- package/dist/core/http/contracts.d.ts +3 -0
- package/dist/core/http/contracts.d.ts.map +1 -0
- package/dist/core/http/contracts.js +5 -0
- package/dist/core/http/errors.d.ts +17 -0
- package/dist/core/http/errors.d.ts.map +1 -0
- package/dist/core/http/errors.js +16 -0
- package/dist/core/http/gateway-error.d.ts +15 -0
- package/dist/core/http/gateway-error.d.ts.map +1 -0
- package/dist/core/http/gateway-error.js +15 -0
- package/dist/core/http/index.d.ts +10 -0
- package/dist/core/http/index.d.ts.map +1 -0
- package/dist/core/http/index.js +9 -0
- package/dist/core/http/json-client.d.ts +17 -0
- package/dist/core/http/json-client.d.ts.map +1 -0
- package/dist/core/http/json-client.js +62 -0
- package/dist/core/http/raw-client.d.ts +16 -0
- package/dist/core/http/raw-client.d.ts.map +1 -0
- package/dist/core/http/raw-client.js +36 -0
- package/dist/core/http/redaction.d.ts +20 -0
- package/dist/core/http/redaction.d.ts.map +1 -0
- package/dist/core/http/redaction.js +58 -0
- package/dist/core/http/types.d.ts +44 -0
- package/dist/core/http/types.d.ts.map +1 -0
- package/dist/core/http/types.js +3 -0
- package/dist/core/runtime/index.d.ts +2 -0
- package/dist/core/runtime/index.d.ts.map +1 -0
- package/dist/core/runtime/index.js +1 -0
- package/dist/core/runtime/paths.d.ts +5 -0
- package/dist/core/runtime/paths.d.ts.map +1 -0
- package/dist/core/runtime/paths.js +29 -0
- package/dist/core/sse/index.d.ts +2 -0
- package/dist/core/sse/index.d.ts.map +1 -0
- package/dist/core/sse/index.js +1 -0
- package/dist/core/sse/stream.d.ts +17 -0
- package/dist/core/sse/stream.d.ts.map +1 -0
- package/dist/core/sse/stream.js +106 -0
- package/dist/core/ws/close.d.ts +11 -0
- package/dist/core/ws/close.d.ts.map +1 -0
- package/dist/core/ws/close.js +34 -0
- package/dist/core/ws/gateway-websocket.d.ts +2 -0
- package/dist/core/ws/gateway-websocket.d.ts.map +1 -0
- package/dist/core/ws/gateway-websocket.js +1 -0
- package/dist/core/ws/index.d.ts +4 -0
- package/dist/core/ws/index.d.ts.map +1 -0
- package/dist/core/ws/index.js +3 -0
- package/dist/core/ws/targets.d.ts +21 -0
- package/dist/core/ws/targets.d.ts.map +1 -0
- package/dist/core/ws/targets.js +61 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.d.ts +21 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.d.ts.map +1 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.js +22 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.d.ts +30 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.d.ts.map +1 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.js +72 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/library-live.d.ts +4 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/library-live.d.ts.map +1 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/library-live.js +66 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.d.ts +7 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.d.ts.map +1 -0
- package/dist/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.js +318 -0
- package/dist/extensions/cavi/adapters/create-cavi-control-adapters.d.ts +88 -0
- package/dist/extensions/cavi/adapters/create-cavi-control-adapters.d.ts.map +1 -0
- package/dist/extensions/cavi/adapters/create-cavi-control-adapters.js +172 -0
- package/dist/extensions/cavi/client.d.ts +72 -0
- package/dist/extensions/cavi/client.d.ts.map +1 -0
- package/dist/extensions/cavi/client.js +19 -0
- package/dist/extensions/cavi/contracts/index.d.ts +6 -0
- package/dist/extensions/cavi/contracts/index.d.ts.map +1 -0
- package/dist/extensions/cavi/contracts/index.js +5 -0
- package/dist/extensions/cavi/contracts/mobile.d.ts +441 -0
- package/dist/extensions/cavi/contracts/mobile.d.ts.map +1 -0
- package/dist/extensions/cavi/contracts/mobile.js +467 -0
- package/dist/extensions/cavi/contracts/paths.d.ts +121 -0
- package/dist/extensions/cavi/contracts/paths.d.ts.map +1 -0
- package/dist/extensions/cavi/contracts/paths.js +197 -0
- package/dist/extensions/cavi/contracts/portals.d.ts +78 -0
- package/dist/extensions/cavi/contracts/portals.d.ts.map +1 -0
- package/dist/extensions/cavi/contracts/portals.js +70 -0
- package/dist/extensions/cavi/contracts/resolve.d.ts +3 -0
- package/dist/extensions/cavi/contracts/resolve.d.ts.map +1 -0
- package/dist/extensions/cavi/contracts/resolve.js +4 -0
- package/dist/extensions/cavi/contracts/surfaces.d.ts +5 -0
- package/dist/extensions/cavi/contracts/surfaces.d.ts.map +1 -0
- package/dist/extensions/cavi/contracts/surfaces.js +551 -0
- package/dist/extensions/cavi/discourse/contracts.d.ts +5 -0
- package/dist/extensions/cavi/discourse/contracts.d.ts.map +1 -0
- package/dist/extensions/cavi/discourse/contracts.js +7 -0
- package/dist/extensions/cavi/discourse/fallback.d.ts +3 -0
- package/dist/extensions/cavi/discourse/fallback.d.ts.map +1 -0
- package/dist/extensions/cavi/discourse/fallback.js +364 -0
- package/dist/extensions/cavi/discourse/live.d.ts +5 -0
- package/dist/extensions/cavi/discourse/live.d.ts.map +1 -0
- package/dist/extensions/cavi/discourse/live.js +22 -0
- package/dist/extensions/cavi/discourse/normalize-helpers.d.ts +11 -0
- package/dist/extensions/cavi/discourse/normalize-helpers.d.ts.map +1 -0
- package/dist/extensions/cavi/discourse/normalize-helpers.js +155 -0
- package/dist/extensions/cavi/discourse/normalize.d.ts +4 -0
- package/dist/extensions/cavi/discourse/normalize.d.ts.map +1 -0
- package/dist/extensions/cavi/discourse/normalize.js +287 -0
- package/dist/extensions/cavi/domain/discourse.d.ts +161 -0
- package/dist/extensions/cavi/domain/discourse.d.ts.map +1 -0
- package/dist/extensions/cavi/domain/discourse.js +1 -0
- package/dist/extensions/cavi/domain/index.d.ts +6 -0
- package/dist/extensions/cavi/domain/index.d.ts.map +1 -0
- package/dist/extensions/cavi/domain/index.js +5 -0
- package/dist/extensions/cavi/domain/library.d.ts +80 -0
- package/dist/extensions/cavi/domain/library.d.ts.map +1 -0
- package/dist/extensions/cavi/domain/library.js +2 -0
- package/dist/extensions/cavi/domain/observability.d.ts +34 -0
- package/dist/extensions/cavi/domain/observability.d.ts.map +1 -0
- package/dist/extensions/cavi/domain/observability.js +1 -0
- package/dist/extensions/cavi/domain/operator.d.ts +420 -0
- package/dist/extensions/cavi/domain/operator.d.ts.map +1 -0
- package/dist/extensions/cavi/domain/operator.js +1 -0
- package/dist/extensions/cavi/domain/project-board.d.ts +96 -0
- package/dist/extensions/cavi/domain/project-board.d.ts.map +1 -0
- package/dist/extensions/cavi/domain/project-board.js +1 -0
- package/dist/extensions/cavi/fallbacks/provider.d.ts +13 -0
- package/dist/extensions/cavi/fallbacks/provider.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/provider.js +23 -0
- package/dist/extensions/cavi/fallbacks/snapshots/agent-memory.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/agent-memory.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/agent-memory.js +6 -0
- package/dist/extensions/cavi/fallbacks/snapshots/cost-history.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/cost-history.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/cost-history.js +73 -0
- package/dist/extensions/cavi/fallbacks/snapshots/incidents.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/incidents.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/incidents.js +50 -0
- package/dist/extensions/cavi/fallbacks/snapshots/index.d.ts +10 -0
- package/dist/extensions/cavi/fallbacks/snapshots/index.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/index.js +9 -0
- package/dist/extensions/cavi/fallbacks/snapshots/library.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/library.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/library.js +110 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/defaults.d.ts +8 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/defaults.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/defaults.js +29 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/index.d.ts +4 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/index.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/index.js +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.js +63 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.js +716 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.js +38 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.js +84 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.js +111 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.js +16 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.js +43 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.js +16 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/transports.d.ts +4 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/transports.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/operator-control/transports.js +65 -0
- package/dist/extensions/cavi/fallbacks/snapshots/overview.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/overview.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/overview.js +40 -0
- package/dist/extensions/cavi/fallbacks/snapshots/routing.d.ts +3 -0
- package/dist/extensions/cavi/fallbacks/snapshots/routing.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/routing.js +36 -0
- package/dist/extensions/cavi/fallbacks/snapshots/runs.d.ts +4 -0
- package/dist/extensions/cavi/fallbacks/snapshots/runs.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/runs.js +133 -0
- package/dist/extensions/cavi/fallbacks/snapshots/shared.d.ts +2 -0
- package/dist/extensions/cavi/fallbacks/snapshots/shared.d.ts.map +1 -0
- package/dist/extensions/cavi/fallbacks/snapshots/shared.js +1 -0
- package/dist/extensions/cavi/index.d.ts +27 -0
- package/dist/extensions/cavi/index.d.ts.map +1 -0
- package/dist/extensions/cavi/index.js +26 -0
- package/dist/extensions/cavi/library/api.d.ts +18 -0
- package/dist/extensions/cavi/library/api.d.ts.map +1 -0
- package/dist/extensions/cavi/library/api.js +67 -0
- package/dist/extensions/cavi/library/client.d.ts +51 -0
- package/dist/extensions/cavi/library/client.d.ts.map +1 -0
- package/dist/extensions/cavi/library/client.js +23 -0
- package/dist/extensions/cavi/library/clip.d.ts +93 -0
- package/dist/extensions/cavi/library/clip.d.ts.map +1 -0
- package/dist/extensions/cavi/library/clip.js +272 -0
- package/dist/extensions/cavi/operator-control/constants.d.ts +4 -0
- package/dist/extensions/cavi/operator-control/constants.d.ts.map +1 -0
- package/dist/extensions/cavi/operator-control/constants.js +3 -0
- package/dist/extensions/cavi/operator-control/defaults.d.ts +11 -0
- package/dist/extensions/cavi/operator-control/defaults.d.ts.map +1 -0
- package/dist/extensions/cavi/operator-control/defaults.js +243 -0
- package/dist/extensions/cavi/operator-control/load-section.d.ts +24 -0
- package/dist/extensions/cavi/operator-control/load-section.d.ts.map +1 -0
- package/dist/extensions/cavi/operator-control/load-section.js +46 -0
- package/dist/extensions/cavi/portal/client.d.ts +16 -0
- package/dist/extensions/cavi/portal/client.d.ts.map +1 -0
- package/dist/extensions/cavi/portal/client.js +38 -0
- package/dist/extensions/cavi/portal/tts.d.ts +69 -0
- package/dist/extensions/cavi/portal/tts.d.ts.map +1 -0
- package/dist/extensions/cavi/portal/tts.js +116 -0
- package/dist/extensions/cavi/project-board/constants.d.ts +68 -0
- package/dist/extensions/cavi/project-board/constants.d.ts.map +1 -0
- package/dist/extensions/cavi/project-board/constants.js +9 -0
- package/dist/extensions/cavi/project-board/fallback.d.ts +3 -0
- package/dist/extensions/cavi/project-board/fallback.d.ts.map +1 -0
- package/dist/extensions/cavi/project-board/fallback.js +127 -0
- package/dist/extensions/cavi/project-board/live.d.ts +16 -0
- package/dist/extensions/cavi/project-board/live.d.ts.map +1 -0
- package/dist/extensions/cavi/project-board/live.js +86 -0
- package/dist/extensions/cavi/project-board/mutations.d.ts +43 -0
- package/dist/extensions/cavi/project-board/mutations.d.ts.map +1 -0
- package/dist/extensions/cavi/project-board/mutations.js +210 -0
- package/dist/extensions/cavi/project-board/normalize.d.ts +23 -0
- package/dist/extensions/cavi/project-board/normalize.d.ts.map +1 -0
- package/dist/extensions/cavi/project-board/normalize.js +410 -0
- package/dist/extensions/cavi/project-board/trace-id.d.ts +2 -0
- package/dist/extensions/cavi/project-board/trace-id.d.ts.map +1 -0
- package/dist/extensions/cavi/project-board/trace-id.js +7 -0
- package/dist/extensions/cavi/registry/canonical-team-registry.d.ts +41 -0
- package/dist/extensions/cavi/registry/canonical-team-registry.d.ts.map +1 -0
- package/dist/extensions/cavi/registry/canonical-team-registry.js +102 -0
- package/dist/extensions/cavi/registry/portal-library-registry.d.ts +6 -0
- package/dist/extensions/cavi/registry/portal-library-registry.d.ts.map +1 -0
- package/dist/extensions/cavi/registry/portal-library-registry.js +17 -0
- package/dist/extensions/cavi/registry/session-keys.d.ts +16 -0
- package/dist/extensions/cavi/registry/session-keys.d.ts.map +1 -0
- package/dist/extensions/cavi/registry/session-keys.js +68 -0
- package/dist/extensions/cavi/registry/team-registry-config.d.ts +6 -0
- package/dist/extensions/cavi/registry/team-registry-config.d.ts.map +1 -0
- package/dist/extensions/cavi/registry/team-registry-config.js +23 -0
- package/dist/extensions/cavi/registry/team-registry.d.ts +49 -0
- package/dist/extensions/cavi/registry/team-registry.d.ts.map +1 -0
- package/dist/extensions/cavi/registry/team-registry.js +290 -0
- package/dist/extensions/cavi/runtime/env-config.d.ts +35 -0
- package/dist/extensions/cavi/runtime/env-config.d.ts.map +1 -0
- package/dist/extensions/cavi/runtime/env-config.js +74 -0
- package/dist/extensions/cavi/runtime/paths.d.ts +11 -0
- package/dist/extensions/cavi/runtime/paths.d.ts.map +1 -0
- package/dist/extensions/cavi/runtime/paths.js +43 -0
- package/dist/extensions/cavi/runtime/standalone-mode.d.ts +3 -0
- package/dist/extensions/cavi/runtime/standalone-mode.d.ts.map +1 -0
- package/dist/extensions/cavi/runtime/standalone-mode.js +15 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/providers/hermes/agent-config.d.ts +36 -0
- package/dist/providers/hermes/agent-config.d.ts.map +1 -0
- package/dist/providers/hermes/agent-config.js +242 -0
- package/dist/providers/hermes/chat-run.d.ts +106 -0
- package/dist/providers/hermes/chat-run.d.ts.map +1 -0
- package/dist/providers/hermes/chat-run.js +221 -0
- package/dist/providers/hermes/client.d.ts +13 -0
- package/dist/providers/hermes/client.d.ts.map +1 -0
- package/dist/providers/hermes/client.js +6 -0
- package/dist/providers/hermes/env-config.d.ts +18 -0
- package/dist/providers/hermes/env-config.d.ts.map +1 -0
- package/dist/providers/hermes/env-config.js +38 -0
- package/dist/providers/hermes/index.d.ts +12 -0
- package/dist/providers/hermes/index.d.ts.map +1 -0
- package/dist/providers/hermes/index.js +11 -0
- package/dist/providers/hermes/media.d.ts +6 -0
- package/dist/providers/hermes/media.d.ts.map +1 -0
- package/dist/providers/hermes/media.js +10 -0
- package/dist/providers/hermes/provider-module.d.ts +3 -0
- package/dist/providers/hermes/provider-module.d.ts.map +1 -0
- package/dist/providers/hermes/provider-module.js +22 -0
- package/dist/providers/hermes/sse-run-event-provider.d.ts +24 -0
- package/dist/providers/hermes/sse-run-event-provider.d.ts.map +1 -0
- package/dist/providers/hermes/sse-run-event-provider.js +32 -0
- package/dist/providers/hermes/team-registry-config.d.ts +3 -0
- package/dist/providers/hermes/team-registry-config.d.ts.map +1 -0
- package/dist/providers/hermes/team-registry-config.js +1 -0
- package/dist/providers/hermes/team-registry.d.ts +3 -0
- package/dist/providers/hermes/team-registry.d.ts.map +1 -0
- package/dist/providers/hermes/team-registry.js +5 -0
- package/dist/providers/hermes/websocket.d.ts +6 -0
- package/dist/providers/hermes/websocket.d.ts.map +1 -0
- package/dist/providers/hermes/websocket.js +6 -0
- package/dist/providers/hermes/wiki.d.ts +6 -0
- package/dist/providers/hermes/wiki.d.ts.map +1 -0
- package/dist/providers/hermes/wiki.js +10 -0
- package/dist/providers/openclaw/agent-config.d.ts +6 -0
- package/dist/providers/openclaw/agent-config.d.ts.map +1 -0
- package/dist/providers/openclaw/agent-config.js +10 -0
- package/dist/providers/openclaw/client.d.ts +13 -0
- package/dist/providers/openclaw/client.d.ts.map +1 -0
- package/dist/providers/openclaw/client.js +6 -0
- package/dist/providers/openclaw/index.d.ts +10 -0
- package/dist/providers/openclaw/index.d.ts.map +1 -0
- package/dist/providers/openclaw/index.js +9 -0
- package/dist/providers/openclaw/media.d.ts +6 -0
- package/dist/providers/openclaw/media.d.ts.map +1 -0
- package/dist/providers/openclaw/media.js +10 -0
- package/dist/providers/openclaw/provider-module.d.ts +3 -0
- package/dist/providers/openclaw/provider-module.d.ts.map +1 -0
- package/dist/providers/openclaw/provider-module.js +16 -0
- package/dist/providers/openclaw/sse-run-event-provider.d.ts +6 -0
- package/dist/providers/openclaw/sse-run-event-provider.d.ts.map +1 -0
- package/dist/providers/openclaw/sse-run-event-provider.js +10 -0
- package/dist/providers/openclaw/team-registry-config.d.ts +3 -0
- package/dist/providers/openclaw/team-registry-config.d.ts.map +1 -0
- package/dist/providers/openclaw/team-registry-config.js +1 -0
- package/dist/providers/openclaw/team-registry.d.ts +3 -0
- package/dist/providers/openclaw/team-registry.d.ts.map +1 -0
- package/dist/providers/openclaw/team-registry.js +5 -0
- package/dist/providers/openclaw/websocket.d.ts +6 -0
- package/dist/providers/openclaw/websocket.d.ts.map +1 -0
- package/dist/providers/openclaw/websocket.js +28 -0
- package/dist/providers/openclaw/wiki.d.ts +6 -0
- package/dist/providers/openclaw/wiki.d.ts.map +1 -0
- package/dist/providers/openclaw/wiki.js +10 -0
- package/dist/react/gateway-provider.d.ts +142 -0
- package/dist/react/gateway-provider.d.ts.map +1 -0
- package/dist/react/gateway-provider.js +569 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +1 -0
- package/docs/assets/api-client-hero.svg +73 -0
- package/docs/cavi-team-manifest.example.ts +219 -0
- package/docs/team-manifest.consumer.template.ts +248 -0
- package/docs/team-manifest.md +252 -0
- package/package.json +152 -0
- package/src/contracts/index.ts +4 -0
- package/src/contracts/paths.ts +126 -0
- package/src/contracts/resolve.ts +42 -0
- package/src/contracts/surfaces.ts +366 -0
- package/src/contracts/team-manifest.ts +1402 -0
- package/src/core/data/guards.ts +26 -0
- package/src/core/data/index.ts +1 -0
- package/src/core/env/config.ts +97 -0
- package/src/core/env/index.ts +2 -0
- package/src/core/env/repo-root.ts +59 -0
- package/src/core/gateway/README.md +35 -0
- package/src/core/gateway/agent/commands.ts +482 -0
- package/src/core/gateway/agent/config.ts +786 -0
- package/src/core/gateway/agent/index.ts +3 -0
- package/src/core/gateway/agent/voice-config.ts +91 -0
- package/src/core/gateway/client/capabilities.ts +385 -0
- package/src/core/gateway/client/client.ts +137 -0
- package/src/core/gateway/client/error-details.ts +74 -0
- package/src/core/gateway/client/fetch.ts +180 -0
- package/src/core/gateway/client/index.ts +5 -0
- package/src/core/gateway/client/runtime-targets.ts +132 -0
- package/src/core/gateway/envelope/envelope.ts +204 -0
- package/src/core/gateway/envelope/index.ts +2 -0
- package/src/core/gateway/envelope/types.ts +48 -0
- package/src/core/gateway/index.ts +10 -0
- package/src/core/gateway/jobs.ts +178 -0
- package/src/core/gateway/portal/config-patch.ts +136 -0
- package/src/core/gateway/portal/index.ts +1 -0
- package/src/core/gateway/providers/factory.ts +77 -0
- package/src/core/gateway/providers/index.ts +4 -0
- package/src/core/gateway/providers/normalize.ts +7 -0
- package/src/core/gateway/providers/registry.ts +96 -0
- package/src/core/gateway/providers/types.ts +73 -0
- package/src/core/gateway/resources/index.ts +2 -0
- package/src/core/gateway/resources/media.ts +474 -0
- package/src/core/gateway/resources/wiki.ts +301 -0
- package/src/core/gateway/rpc/client.ts +1067 -0
- package/src/core/gateway/rpc/device-crypto.ts +101 -0
- package/src/core/gateway/rpc/device-store.ts +147 -0
- package/src/core/gateway/rpc/error.ts +11 -0
- package/src/core/gateway/rpc/index.ts +5 -0
- package/src/core/gateway/rpc/preauth-handshake.ts +99 -0
- package/src/core/gateway/run/contracts.ts +155 -0
- package/src/core/gateway/run/event-stream.ts +373 -0
- package/src/core/gateway/run/index.ts +4 -0
- package/src/core/gateway/run/sse-run-event-provider.ts +513 -0
- package/src/core/gateway/run/stream-failure.ts +135 -0
- package/src/core/gateway/snapshots/cache.ts +22 -0
- package/src/core/gateway/snapshots/contracts.ts +293 -0
- package/src/core/gateway/snapshots/index.ts +6 -0
- package/src/core/gateway/snapshots/loaders.ts +738 -0
- package/src/core/gateway/snapshots/session-loaders.ts +534 -0
- package/src/core/gateway/snapshots/system-loaders.ts +93 -0
- package/src/core/gateway/snapshots/transforms.ts +508 -0
- package/src/core/http/client-id.ts +40 -0
- package/src/core/http/client.ts +271 -0
- package/src/core/http/contracts.ts +9 -0
- package/src/core/http/errors.ts +26 -0
- package/src/core/http/gateway-error.ts +38 -0
- package/src/core/http/index.ts +9 -0
- package/src/core/http/json-client.ts +90 -0
- package/src/core/http/raw-client.ts +57 -0
- package/src/core/http/redaction.ts +78 -0
- package/src/core/http/types.ts +59 -0
- package/src/core/runtime/index.ts +1 -0
- package/src/core/runtime/paths.ts +44 -0
- package/src/core/sse/index.ts +1 -0
- package/src/core/sse/stream.ts +118 -0
- package/src/core/ws/close.ts +51 -0
- package/src/core/ws/gateway-websocket.ts +8 -0
- package/src/core/ws/index.ts +3 -0
- package/src/core/ws/targets.ts +74 -0
- package/src/extensions/README.md +16 -0
- package/src/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.ts +33 -0
- package/src/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.ts +152 -0
- package/src/extensions/cavi/adapters/cavi-control-adapters/library-live.ts +120 -0
- package/src/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.ts +422 -0
- package/src/extensions/cavi/adapters/create-cavi-control-adapters.ts +350 -0
- package/src/extensions/cavi/client.ts +25 -0
- package/src/extensions/cavi/contracts/index.ts +5 -0
- package/src/extensions/cavi/contracts/mobile.ts +528 -0
- package/src/extensions/cavi/contracts/paths.ts +242 -0
- package/src/extensions/cavi/contracts/portals.ts +165 -0
- package/src/extensions/cavi/contracts/resolve.ts +6 -0
- package/src/extensions/cavi/contracts/surfaces.ts +567 -0
- package/src/extensions/cavi/discourse/contracts.ts +9 -0
- package/src/extensions/cavi/discourse/fallback.ts +387 -0
- package/src/extensions/cavi/discourse/live.ts +36 -0
- package/src/extensions/cavi/discourse/normalize-helpers.ts +202 -0
- package/src/extensions/cavi/discourse/normalize.ts +415 -0
- package/src/extensions/cavi/domain/discourse.ts +209 -0
- package/src/extensions/cavi/domain/index.ts +5 -0
- package/src/extensions/cavi/domain/library.ts +96 -0
- package/src/extensions/cavi/domain/observability.ts +36 -0
- package/src/extensions/cavi/domain/operator.ts +486 -0
- package/src/extensions/cavi/domain/project-board.ts +107 -0
- package/src/extensions/cavi/fallbacks/provider.ts +57 -0
- package/src/extensions/cavi/fallbacks/snapshots/agent-memory.ts +8 -0
- package/src/extensions/cavi/fallbacks/snapshots/cost-history.ts +101 -0
- package/src/extensions/cavi/fallbacks/snapshots/incidents.ts +56 -0
- package/src/extensions/cavi/fallbacks/snapshots/index.ts +9 -0
- package/src/extensions/cavi/fallbacks/snapshots/library.ts +112 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/defaults.ts +57 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/index.ts +3 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.ts +65 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.ts +735 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.ts +41 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.ts +87 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.ts +113 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.ts +19 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.ts +46 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.ts +18 -0
- package/src/extensions/cavi/fallbacks/snapshots/operator-control/transports.ts +81 -0
- package/src/extensions/cavi/fallbacks/snapshots/overview.ts +42 -0
- package/src/extensions/cavi/fallbacks/snapshots/routing.ts +38 -0
- package/src/extensions/cavi/fallbacks/snapshots/runs.ts +141 -0
- package/src/extensions/cavi/fallbacks/snapshots/shared.ts +1 -0
- package/src/extensions/cavi/index.ts +52 -0
- package/src/extensions/cavi/library/api.ts +120 -0
- package/src/extensions/cavi/library/client.ts +54 -0
- package/src/extensions/cavi/library/clip.ts +389 -0
- package/src/extensions/cavi/operator-control/constants.ts +3 -0
- package/src/extensions/cavi/operator-control/defaults.ts +254 -0
- package/src/extensions/cavi/operator-control/load-section.ts +92 -0
- package/src/extensions/cavi/portal/client.ts +63 -0
- package/src/extensions/cavi/portal/tts.ts +213 -0
- package/src/extensions/cavi/project-board/constants.ts +84 -0
- package/src/extensions/cavi/project-board/fallback.ts +129 -0
- package/src/extensions/cavi/project-board/live.ts +121 -0
- package/src/extensions/cavi/project-board/mutations.ts +306 -0
- package/src/extensions/cavi/project-board/normalize.ts +552 -0
- package/src/extensions/cavi/project-board/trace-id.ts +9 -0
- package/src/extensions/cavi/registry/canonical-team-registry.ts +193 -0
- package/src/extensions/cavi/registry/portal-library-registry.ts +24 -0
- package/src/extensions/cavi/registry/session-keys.ts +92 -0
- package/src/extensions/cavi/registry/team-registry-config.ts +36 -0
- package/src/extensions/cavi/registry/team-registry.ts +414 -0
- package/src/extensions/cavi/runtime/env-config.ts +114 -0
- package/src/extensions/cavi/runtime/paths.ts +82 -0
- package/src/extensions/cavi/runtime/standalone-mode.ts +28 -0
- package/src/index.ts +576 -0
- package/src/providers/hermes/agent-config.ts +322 -0
- package/src/providers/hermes/chat-run.ts +340 -0
- package/src/providers/hermes/client.ts +21 -0
- package/src/providers/hermes/env-config.ts +58 -0
- package/src/providers/hermes/index.ts +11 -0
- package/src/providers/hermes/media.ts +12 -0
- package/src/providers/hermes/provider-module.ts +26 -0
- package/src/providers/hermes/sse-run-event-provider.ts +47 -0
- package/src/providers/hermes/team-registry-config.ts +2 -0
- package/src/providers/hermes/team-registry.ts +12 -0
- package/src/providers/hermes/websocket.ts +16 -0
- package/src/providers/hermes/wiki.ts +12 -0
- package/src/providers/openclaw/agent-config.ts +12 -0
- package/src/providers/openclaw/client.ts +21 -0
- package/src/providers/openclaw/index.ts +9 -0
- package/src/providers/openclaw/media.ts +12 -0
- package/src/providers/openclaw/provider-module.ts +20 -0
- package/src/providers/openclaw/sse-run-event-provider.ts +16 -0
- package/src/providers/openclaw/team-registry-config.ts +2 -0
- package/src/providers/openclaw/team-registry.ts +12 -0
- package/src/providers/openclaw/websocket.ts +56 -0
- package/src/providers/openclaw/wiki.ts +12 -0
- package/src/react/gateway-provider.tsx +835 -0
- package/src/react/index.ts +1 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// CANONICAL — single source of truth lives here. Do not duplicate. See packages/README.md.
|
|
2
|
+
// Device identity crypto utilities for the gateway client.
|
|
3
|
+
// Uses Web Crypto API (SubtleCrypto) for Ed25519 key generation, signing, and ID derivation.
|
|
4
|
+
// Pure functions — no side effects, no storage.
|
|
5
|
+
// --- Base64url ---
|
|
6
|
+
export function base64UrlEncode(buf) {
|
|
7
|
+
let binary = "";
|
|
8
|
+
for (const byte of buf) {
|
|
9
|
+
binary += String.fromCharCode(byte);
|
|
10
|
+
}
|
|
11
|
+
return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
|
|
12
|
+
}
|
|
13
|
+
export function base64UrlDecode(input) {
|
|
14
|
+
const normalized = input.replaceAll("-", "+").replaceAll("_", "/");
|
|
15
|
+
const padded = normalized + "=".repeat((4 - (normalized.length % 4)) % 4);
|
|
16
|
+
const binary = atob(padded);
|
|
17
|
+
const bytes = new Uint8Array(binary.length);
|
|
18
|
+
for (let i = 0; i < binary.length; i++) {
|
|
19
|
+
bytes[i] = binary.charCodeAt(i);
|
|
20
|
+
}
|
|
21
|
+
return bytes;
|
|
22
|
+
}
|
|
23
|
+
// --- Key Generation ---
|
|
24
|
+
export async function generateDeviceKeypair() {
|
|
25
|
+
return await crypto.subtle.generateKey("Ed25519", false, ["sign", "verify"]);
|
|
26
|
+
}
|
|
27
|
+
// --- Key Export ---
|
|
28
|
+
export async function exportPublicKeyRaw(key) {
|
|
29
|
+
const raw = await crypto.subtle.exportKey("raw", key);
|
|
30
|
+
return new Uint8Array(raw);
|
|
31
|
+
}
|
|
32
|
+
// --- Device ID ---
|
|
33
|
+
export async function deriveDeviceId(publicKeyRaw) {
|
|
34
|
+
const hash = await crypto.subtle.digest("SHA-256", publicKeyRaw);
|
|
35
|
+
const bytes = new Uint8Array(hash);
|
|
36
|
+
return Array.from(bytes)
|
|
37
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
38
|
+
.join("");
|
|
39
|
+
}
|
|
40
|
+
// --- Payload ---
|
|
41
|
+
function normalizeMetadata(value) {
|
|
42
|
+
if (typeof value !== "string") {
|
|
43
|
+
return "";
|
|
44
|
+
}
|
|
45
|
+
const trimmed = value.trim();
|
|
46
|
+
if (!trimmed) {
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
// Must match server's normalizeDeviceMetadataForAuth: ASCII lowercase only.
|
|
50
|
+
return trimmed.replace(/[A-Z]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 32));
|
|
51
|
+
}
|
|
52
|
+
export function buildDeviceAuthPayloadV3(params) {
|
|
53
|
+
const scopes = params.scopes.join(",");
|
|
54
|
+
const platform = normalizeMetadata(params.platform);
|
|
55
|
+
const deviceFamily = normalizeMetadata(params.deviceFamily);
|
|
56
|
+
return [
|
|
57
|
+
"v3",
|
|
58
|
+
params.deviceId,
|
|
59
|
+
params.clientId,
|
|
60
|
+
params.clientMode,
|
|
61
|
+
params.role,
|
|
62
|
+
scopes,
|
|
63
|
+
String(params.signedAtMs),
|
|
64
|
+
params.token,
|
|
65
|
+
params.nonce,
|
|
66
|
+
platform,
|
|
67
|
+
deviceFamily,
|
|
68
|
+
].join("|");
|
|
69
|
+
}
|
|
70
|
+
// --- Signing ---
|
|
71
|
+
export async function signPayload(privateKey, payload) {
|
|
72
|
+
const encoded = new TextEncoder().encode(payload);
|
|
73
|
+
const signature = await crypto.subtle.sign("Ed25519", privateKey, encoded);
|
|
74
|
+
return base64UrlEncode(new Uint8Array(signature));
|
|
75
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type DeviceIdentity = {
|
|
2
|
+
deviceId: string;
|
|
3
|
+
privateKey: CryptoKey;
|
|
4
|
+
publicKeyBase64Url: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function isDeviceIdentitySupported(): boolean;
|
|
7
|
+
export declare function loadOrCreateDeviceIdentity(): Promise<DeviceIdentity | null>;
|
|
8
|
+
//# sourceMappingURL=device-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-store.d.ts","sourceRoot":"","sources":["../../../../src/core/gateway/rpc/device-store.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAWF,wBAAgB,yBAAyB,IAAI,OAAO,CASnD;AAwCD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgEjF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// CANONICAL — single source of truth lives here. Do not duplicate. See packages/README.md.
|
|
2
|
+
// Device identity persistent store.
|
|
3
|
+
// Private key: non-extractable CryptoKey in IndexedDB (never leaves crypto subsystem).
|
|
4
|
+
// Device ID: SHA-256 hex in localStorage (public, fast lookup).
|
|
5
|
+
import { generateDeviceKeypair, exportPublicKeyRaw, deriveDeviceId, base64UrlEncode, } from "./device-crypto.js";
|
|
6
|
+
const IDB_NAME = "openclaw-device-identity";
|
|
7
|
+
const IDB_STORE = "keys";
|
|
8
|
+
const IDB_KEY = "current";
|
|
9
|
+
const LS_KEY = "openclaw-device-id";
|
|
10
|
+
// --- SubtleCrypto + IndexedDB availability ---
|
|
11
|
+
export function isDeviceIdentitySupported() {
|
|
12
|
+
try {
|
|
13
|
+
return (typeof globalThis.crypto?.subtle?.generateKey === "function" &&
|
|
14
|
+
typeof globalThis.indexedDB?.open === "function");
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// --- IndexedDB helpers ---
|
|
21
|
+
function openDb() {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const request = indexedDB.open(IDB_NAME, 1);
|
|
24
|
+
request.addEventListener("upgradeneeded", () => {
|
|
25
|
+
const db = request.result;
|
|
26
|
+
if (!db.objectStoreNames.contains(IDB_STORE)) {
|
|
27
|
+
db.createObjectStore(IDB_STORE);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
request.addEventListener("success", () => resolve(request.result));
|
|
31
|
+
request.addEventListener("error", () => reject(request.error));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function idbGet(db, key) {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
const tx = db.transaction(IDB_STORE, "readonly");
|
|
37
|
+
const store = tx.objectStore(IDB_STORE);
|
|
38
|
+
const request = store.get(key);
|
|
39
|
+
request.addEventListener("success", () => resolve(request.result));
|
|
40
|
+
request.addEventListener("error", () => reject(request.error));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function idbPut(db, key, value) {
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
const tx = db.transaction(IDB_STORE, "readwrite");
|
|
46
|
+
const store = tx.objectStore(IDB_STORE);
|
|
47
|
+
const request = store.put(value, key);
|
|
48
|
+
request.addEventListener("success", () => resolve());
|
|
49
|
+
request.addEventListener("error", () => reject(request.error));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// --- Load or Create ---
|
|
53
|
+
export async function loadOrCreateDeviceIdentity() {
|
|
54
|
+
if (!isDeviceIdentitySupported()) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
let db;
|
|
58
|
+
try {
|
|
59
|
+
db = await openDb();
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
// Try loading existing identity
|
|
66
|
+
const existing = await idbGet(db, IDB_KEY);
|
|
67
|
+
if (existing &&
|
|
68
|
+
typeof existing.deviceId === "string" &&
|
|
69
|
+
typeof existing.publicKeyRaw === "string" &&
|
|
70
|
+
existing.keyPair?.privateKey instanceof CryptoKey) {
|
|
71
|
+
return {
|
|
72
|
+
deviceId: existing.deviceId,
|
|
73
|
+
privateKey: existing.keyPair.privateKey,
|
|
74
|
+
publicKeyBase64Url: existing.publicKeyRaw,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Corrupt entry — fall through to regenerate
|
|
80
|
+
}
|
|
81
|
+
// Generate new identity
|
|
82
|
+
try {
|
|
83
|
+
const keyPair = await generateDeviceKeypair();
|
|
84
|
+
const publicKeyRaw = await exportPublicKeyRaw(keyPair.publicKey);
|
|
85
|
+
const deviceId = await deriveDeviceId(publicKeyRaw);
|
|
86
|
+
const publicKeyBase64Url = base64UrlEncode(publicKeyRaw);
|
|
87
|
+
const entry = {
|
|
88
|
+
deviceId,
|
|
89
|
+
publicKeyRaw: publicKeyBase64Url,
|
|
90
|
+
keyPair,
|
|
91
|
+
createdAtMs: Date.now(),
|
|
92
|
+
};
|
|
93
|
+
await idbPut(db, IDB_KEY, entry);
|
|
94
|
+
// Device ID in localStorage for quick existence check
|
|
95
|
+
try {
|
|
96
|
+
localStorage.setItem(LS_KEY, deviceId);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// localStorage blocked — non-fatal
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
deviceId,
|
|
103
|
+
privateKey: keyPair.privateKey,
|
|
104
|
+
publicKeyBase64Url,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
db.close();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../src/core/gateway/rpc/error.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,SAAkB;CAKpD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// CANONICAL — single source of truth lives here. Do not duplicate. See packages/README.md.
|
|
2
|
+
export class GatewayRpcError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, code = "gateway_error") {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "GatewayRpcError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/gateway/rpc/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep token-only connect fallback strictly before the gateway pre-auth
|
|
3
|
+
* handshake timeout. Core owns the timing math; providers and host apps own
|
|
4
|
+
* gateway-specific env keys or explicit timeout overrides.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_PREAUTH_HANDSHAKE_TIMEOUT_MS = 10000;
|
|
7
|
+
export type GatewayPreauthHandshakeEnv = Readonly<Record<string, string | undefined>>;
|
|
8
|
+
export type GatewayPreauthHandshakeEnvKeys = Readonly<{
|
|
9
|
+
timeoutMs: string;
|
|
10
|
+
testTimeoutMs?: string;
|
|
11
|
+
testFlag?: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const GATEWAY_PREAUTH_HANDSHAKE_ENV_KEYS: GatewayPreauthHandshakeEnvKeys;
|
|
14
|
+
export type ResolvePreauthHandshakeTimeoutMsParams = {
|
|
15
|
+
env?: GatewayPreauthHandshakeEnv;
|
|
16
|
+
envKeys?: GatewayPreauthHandshakeEnvKeys;
|
|
17
|
+
preauthHandshakeTimeoutMs?: number;
|
|
18
|
+
};
|
|
19
|
+
type LegacyGatewayHandshakeEnv = Readonly<{
|
|
20
|
+
GATEWAY_PREAUTH_HANDSHAKE_TIMEOUT_MS?: string;
|
|
21
|
+
GATEWAY_TEST_PREAUTH_HANDSHAKE_TIMEOUT_MS?: string;
|
|
22
|
+
VITEST?: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function resolvePreauthHandshakeTimeoutMs(params?: ResolvePreauthHandshakeTimeoutMsParams): number;
|
|
25
|
+
/**
|
|
26
|
+
* @deprecated Use resolvePreauthHandshakeTimeoutMs({ env }) with generic
|
|
27
|
+
* gateway env keys, or pass provider-specific env keys explicitly.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolvePreauthHandshakeTimeoutMsFromEnv(env?: LegacyGatewayHandshakeEnv): number;
|
|
30
|
+
export type ResolveDeviceTokenOnlyFallbackMsParams = {
|
|
31
|
+
env?: GatewayPreauthHandshakeEnv;
|
|
32
|
+
envKeys?: GatewayPreauthHandshakeEnvKeys;
|
|
33
|
+
/** Explicit gateway handshake budget in milliseconds. */
|
|
34
|
+
preauthHandshakeTimeoutMs?: number;
|
|
35
|
+
};
|
|
36
|
+
/** Delay before sending `connect` without a nonce when device identity is enabled. */
|
|
37
|
+
export declare function resolveDeviceTokenOnlyFallbackMs(params?: ResolveDeviceTokenOnlyFallbackMsParams): number;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=preauth-handshake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preauth-handshake.d.ts","sourceRoot":"","sources":["../../../../src/core/gateway/rpc/preauth-handshake.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAM3D,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAEtF,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,eAAO,MAAM,kCAAkC,EAAE,8BAIhD,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,GAAG,CAAC,EAAE,0BAA0B,CAAC;IACjC,OAAO,CAAC,EAAE,8BAA8B,CAAC;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,KAAK,yBAAyB,GAAG,QAAQ,CAAC;IACxC,oCAAoC,CAAC,EAAE,MAAM,CAAC;IAC9C,yCAAyC,CAAC,EAAE,MAAM,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAUH,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,sCAA2C,GAClD,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,uCAAuC,CACrD,GAAG,CAAC,EAAE,yBAAyB,GAC9B,MAAM,CAER;AAED,MAAM,MAAM,sCAAsC,GAAG;IACnD,GAAG,CAAC,EAAE,0BAA0B,CAAC;IACjC,OAAO,CAAC,EAAE,8BAA8B,CAAC;IACzC,yDAAyD;IACzD,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,gCAAgC,CAC9C,MAAM,CAAC,EAAE,sCAAsC,GAC9C,MAAM,CAMR"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// CANONICAL — single source of truth lives here. Do not duplicate. See packages/README.md.
|
|
2
|
+
/**
|
|
3
|
+
* Keep token-only connect fallback strictly before the gateway pre-auth
|
|
4
|
+
* handshake timeout. Core owns the timing math; providers and host apps own
|
|
5
|
+
* gateway-specific env keys or explicit timeout overrides.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_PREAUTH_HANDSHAKE_TIMEOUT_MS = 10_000;
|
|
8
|
+
const HANDSHAKE_SAFETY_MARGIN_MS = 2_000;
|
|
9
|
+
/** Leave at least this much room before the server closes the pre-auth window. */
|
|
10
|
+
const MIN_MS_BEFORE_SERVER_CLOSE = 250;
|
|
11
|
+
export const GATEWAY_PREAUTH_HANDSHAKE_ENV_KEYS = {
|
|
12
|
+
timeoutMs: "GATEWAY_PREAUTH_HANDSHAKE_TIMEOUT_MS",
|
|
13
|
+
testTimeoutMs: "GATEWAY_TEST_PREAUTH_HANDSHAKE_TIMEOUT_MS",
|
|
14
|
+
testFlag: "VITEST",
|
|
15
|
+
};
|
|
16
|
+
function parsePositiveMs(value) {
|
|
17
|
+
if (!value) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const parsed = Number(value);
|
|
21
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
|
|
22
|
+
}
|
|
23
|
+
export function resolvePreauthHandshakeTimeoutMs(params = {}) {
|
|
24
|
+
if (typeof params.preauthHandshakeTimeoutMs === "number" &&
|
|
25
|
+
Number.isFinite(params.preauthHandshakeTimeoutMs) &&
|
|
26
|
+
params.preauthHandshakeTimeoutMs > 0) {
|
|
27
|
+
return params.preauthHandshakeTimeoutMs;
|
|
28
|
+
}
|
|
29
|
+
const env = params.env;
|
|
30
|
+
if (!env) {
|
|
31
|
+
return DEFAULT_PREAUTH_HANDSHAKE_TIMEOUT_MS;
|
|
32
|
+
}
|
|
33
|
+
const keys = params.envKeys ?? GATEWAY_PREAUTH_HANDSHAKE_ENV_KEYS;
|
|
34
|
+
const configuredTimeout = parsePositiveMs(env[keys.timeoutMs]);
|
|
35
|
+
if (configuredTimeout)
|
|
36
|
+
return configuredTimeout;
|
|
37
|
+
const testFlag = keys.testFlag ? env[keys.testFlag] : undefined;
|
|
38
|
+
const testTimeout = keys.testTimeoutMs && testFlag
|
|
39
|
+
? parsePositiveMs(env[keys.testTimeoutMs])
|
|
40
|
+
: null;
|
|
41
|
+
if (testTimeout)
|
|
42
|
+
return testTimeout;
|
|
43
|
+
return DEFAULT_PREAUTH_HANDSHAKE_TIMEOUT_MS;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Use resolvePreauthHandshakeTimeoutMs({ env }) with generic
|
|
47
|
+
* gateway env keys, or pass provider-specific env keys explicitly.
|
|
48
|
+
*/
|
|
49
|
+
export function resolvePreauthHandshakeTimeoutMsFromEnv(env) {
|
|
50
|
+
return resolvePreauthHandshakeTimeoutMs({ env });
|
|
51
|
+
}
|
|
52
|
+
/** Delay before sending `connect` without a nonce when device identity is enabled. */
|
|
53
|
+
export function resolveDeviceTokenOnlyFallbackMs(params) {
|
|
54
|
+
const rawTimeout = resolvePreauthHandshakeTimeoutMs(params);
|
|
55
|
+
const preferred = Math.max(750, rawTimeout - HANDSHAKE_SAFETY_MARGIN_MS);
|
|
56
|
+
const maxAllowed = Math.max(1, rawTimeout - MIN_MS_BEFORE_SERVER_CLOSE);
|
|
57
|
+
return Math.min(preferred, maxAllowed);
|
|
58
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { GatewayResolvedRouteBinding } from "../../../contracts/team-manifest.js";
|
|
2
|
+
export type AgentRunStatus = "active" | "idle" | "stalled" | "error";
|
|
3
|
+
export type AgentRun = {
|
|
4
|
+
key: string;
|
|
5
|
+
title: string;
|
|
6
|
+
agentId: string;
|
|
7
|
+
channel: string;
|
|
8
|
+
updatedAt: number | null;
|
|
9
|
+
status: AgentRunStatus;
|
|
10
|
+
totalTokens: number;
|
|
11
|
+
errors: number;
|
|
12
|
+
/** Model used for this run (e.g. claude-sonnet-4, gpt-4). From backend when available. */
|
|
13
|
+
model?: string;
|
|
14
|
+
/** Cost in USD for this run. From backend when available. */
|
|
15
|
+
totalCostUsd?: number;
|
|
16
|
+
/** Optional manifest-derived binding for source/channel/team routing diagnostics. */
|
|
17
|
+
binding?: GatewayResolvedRouteBinding | null;
|
|
18
|
+
};
|
|
19
|
+
export type AgentRunPreviewItem = {
|
|
20
|
+
role: string;
|
|
21
|
+
text: string;
|
|
22
|
+
at: number | null;
|
|
23
|
+
eventType?: string;
|
|
24
|
+
toolName?: string;
|
|
25
|
+
durationMs?: number | null;
|
|
26
|
+
error?: string | null;
|
|
27
|
+
};
|
|
28
|
+
export type AgentRunDetailSnapshot = {
|
|
29
|
+
run: AgentRun | null;
|
|
30
|
+
preview: {
|
|
31
|
+
status: string;
|
|
32
|
+
items: AgentRunPreviewItem[];
|
|
33
|
+
};
|
|
34
|
+
usage: {
|
|
35
|
+
totalTokens: number;
|
|
36
|
+
totalCostUsd: number;
|
|
37
|
+
messages: number;
|
|
38
|
+
toolCalls: number;
|
|
39
|
+
errors: number;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Canonical wire names for live run-stream events.
|
|
44
|
+
*
|
|
45
|
+
* Producers (Hermes SSE, gateway WebSocket, run-preview poll stopgap, mock)
|
|
46
|
+
* MUST emit these exact strings on the `event` field of every
|
|
47
|
+
* {@link RunStreamEvent}. Consumers MUST switch on these constants — never
|
|
48
|
+
* inline string literals.
|
|
49
|
+
*
|
|
50
|
+
* Tool events are part of the contract even when the upstream transport does
|
|
51
|
+
* not yet emit them: the {@link RunPreviewPollProvider}-style implementation
|
|
52
|
+
* synthesizes them from {@link AgentRunPreviewItem} so the consumer code path
|
|
53
|
+
* is identical regardless of producer.
|
|
54
|
+
*/
|
|
55
|
+
export declare const RUN_STREAM_EVENT_NAMES: {
|
|
56
|
+
readonly MESSAGE_DELTA: "message.delta";
|
|
57
|
+
readonly RUN_COMPLETED: "run.completed";
|
|
58
|
+
readonly RUN_FAILED: "run.failed";
|
|
59
|
+
readonly RUN_CANCELLED: "run.cancelled";
|
|
60
|
+
readonly APPROVAL_REQUEST: "approval.request";
|
|
61
|
+
readonly TOOL_CALL_STARTED: "tool.call.started";
|
|
62
|
+
readonly TOOL_CALL_COMPLETED: "tool.call.completed";
|
|
63
|
+
readonly TOOL_CALL_FAILED: "tool.call.failed";
|
|
64
|
+
};
|
|
65
|
+
export type RunStreamEventName = (typeof RUN_STREAM_EVENT_NAMES)[keyof typeof RUN_STREAM_EVENT_NAMES];
|
|
66
|
+
export type RunStreamToolStatus = "pending" | "running" | "completed" | "failed";
|
|
67
|
+
export type RunStreamToolCall = {
|
|
68
|
+
/** Stable id for this tool invocation within the run; producers should make this best-effort unique. */
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
status: RunStreamToolStatus;
|
|
72
|
+
/** Free-form provider-side event tag (e.g. the underlying SSE event name) for diagnostics. */
|
|
73
|
+
event?: string;
|
|
74
|
+
/** JSON-stringified arguments / input payload (size-bounded by producer). */
|
|
75
|
+
input?: string;
|
|
76
|
+
/** JSON-stringified result / output (size-bounded by producer). */
|
|
77
|
+
output?: string;
|
|
78
|
+
error?: string;
|
|
79
|
+
durationMs?: number;
|
|
80
|
+
/** Epoch ms when this snapshot was produced. */
|
|
81
|
+
at?: number;
|
|
82
|
+
};
|
|
83
|
+
export type RunStreamApprovalChoice = "once" | "session" | "always" | "deny";
|
|
84
|
+
export type RunStreamMessageDeltaEvent = {
|
|
85
|
+
event: typeof RUN_STREAM_EVENT_NAMES.MESSAGE_DELTA;
|
|
86
|
+
runId: string;
|
|
87
|
+
delta: string;
|
|
88
|
+
at?: number;
|
|
89
|
+
};
|
|
90
|
+
export type RunStreamRunCompletedEvent = {
|
|
91
|
+
event: typeof RUN_STREAM_EVENT_NAMES.RUN_COMPLETED;
|
|
92
|
+
runId: string;
|
|
93
|
+
output?: string;
|
|
94
|
+
at?: number;
|
|
95
|
+
};
|
|
96
|
+
export type RunStreamRunFailedEvent = {
|
|
97
|
+
event: typeof RUN_STREAM_EVENT_NAMES.RUN_FAILED;
|
|
98
|
+
runId: string;
|
|
99
|
+
error: string;
|
|
100
|
+
at?: number;
|
|
101
|
+
};
|
|
102
|
+
export type RunStreamRunCancelledEvent = {
|
|
103
|
+
event: typeof RUN_STREAM_EVENT_NAMES.RUN_CANCELLED;
|
|
104
|
+
runId: string;
|
|
105
|
+
reason?: string;
|
|
106
|
+
at?: number;
|
|
107
|
+
};
|
|
108
|
+
export type RunStreamApprovalRequestEvent = {
|
|
109
|
+
event: typeof RUN_STREAM_EVENT_NAMES.APPROVAL_REQUEST;
|
|
110
|
+
runId: string;
|
|
111
|
+
choices: RunStreamApprovalChoice[];
|
|
112
|
+
at?: number;
|
|
113
|
+
};
|
|
114
|
+
export type RunStreamToolEvent = {
|
|
115
|
+
event: typeof RUN_STREAM_EVENT_NAMES.TOOL_CALL_STARTED | typeof RUN_STREAM_EVENT_NAMES.TOOL_CALL_COMPLETED | typeof RUN_STREAM_EVENT_NAMES.TOOL_CALL_FAILED;
|
|
116
|
+
runId: string;
|
|
117
|
+
toolCall: RunStreamToolCall;
|
|
118
|
+
at?: number;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Discriminated union of every event a {@link RunEventStreamProvider}-shaped
|
|
122
|
+
* source can emit. Add new variants here when extending the contract — do not
|
|
123
|
+
* add untagged variants.
|
|
124
|
+
*/
|
|
125
|
+
export type RunStreamEvent = RunStreamMessageDeltaEvent | RunStreamRunCompletedEvent | RunStreamRunFailedEvent | RunStreamRunCancelledEvent | RunStreamApprovalRequestEvent | RunStreamToolEvent;
|
|
126
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../src/core/gateway/run/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEvF,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,mBAAmB,EAAE,CAAC;KAC9B,CAAC;IACF,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;CASzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAC5B,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,iBAAiB,GAAG;IAC9B,wGAAwG;IACxG,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7E,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,OAAO,sBAAsB,CAAC,UAAU,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,OAAO,sBAAsB,CAAC,gBAAgB,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EACD,OAAO,sBAAsB,CAAC,iBAAiB,GAC/C,OAAO,sBAAsB,CAAC,mBAAmB,GACjD,OAAO,sBAAsB,CAAC,gBAAgB,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB,0BAA0B,GAC1B,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,GAC7B,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical wire names for live run-stream events.
|
|
3
|
+
*
|
|
4
|
+
* Producers (Hermes SSE, gateway WebSocket, run-preview poll stopgap, mock)
|
|
5
|
+
* MUST emit these exact strings on the `event` field of every
|
|
6
|
+
* {@link RunStreamEvent}. Consumers MUST switch on these constants — never
|
|
7
|
+
* inline string literals.
|
|
8
|
+
*
|
|
9
|
+
* Tool events are part of the contract even when the upstream transport does
|
|
10
|
+
* not yet emit them: the {@link RunPreviewPollProvider}-style implementation
|
|
11
|
+
* synthesizes them from {@link AgentRunPreviewItem} so the consumer code path
|
|
12
|
+
* is identical regardless of producer.
|
|
13
|
+
*/
|
|
14
|
+
export const RUN_STREAM_EVENT_NAMES = {
|
|
15
|
+
MESSAGE_DELTA: "message.delta",
|
|
16
|
+
RUN_COMPLETED: "run.completed",
|
|
17
|
+
RUN_FAILED: "run.failed",
|
|
18
|
+
RUN_CANCELLED: "run.cancelled",
|
|
19
|
+
APPROVAL_REQUEST: "approval.request",
|
|
20
|
+
TOOL_CALL_STARTED: "tool.call.started",
|
|
21
|
+
TOOL_CALL_COMPLETED: "tool.call.completed",
|
|
22
|
+
TOOL_CALL_FAILED: "tool.call.failed",
|
|
23
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { type AgentRunDetailSnapshot, type RunStreamEvent } from "./contracts.js";
|
|
2
|
+
/**
|
|
3
|
+
* Disposes an active subscription. Idempotent: calling more than once is a no-op.
|
|
4
|
+
*/
|
|
5
|
+
export type RunEventStreamSubscription = {
|
|
6
|
+
dispose(): void | Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
export type RunEventStreamSubscribeParams = {
|
|
9
|
+
runId: string;
|
|
10
|
+
/** Optional caller-supplied abort signal. Implementations MUST honor abort and dispose. */
|
|
11
|
+
signal?: AbortSignal;
|
|
12
|
+
};
|
|
13
|
+
export type RunEventStreamHandlers = {
|
|
14
|
+
onEvent: (event: RunStreamEvent) => void;
|
|
15
|
+
/** Transport / parse errors. Lifecycle "run.failed" is delivered via {@link onEvent}, not here. */
|
|
16
|
+
onError?: (error: unknown) => void;
|
|
17
|
+
/** Fired once after the stream has emitted its last event of the run. */
|
|
18
|
+
onComplete?: () => void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Harness-agnostic source of live run events.
|
|
22
|
+
*
|
|
23
|
+
* Implementations bind to a specific transport (Hermes SSE, gateway WebSocket,
|
|
24
|
+
* run-detail poll, mock) and translate transport-native messages into the
|
|
25
|
+
* canonical {@link RunStreamEvent} discriminated union from this package.
|
|
26
|
+
*
|
|
27
|
+
* Contract:
|
|
28
|
+
* - Every emitted event MUST have its `event` field set to one of
|
|
29
|
+
* {@link RUN_STREAM_EVENT_NAMES}. No transport-native names leak through.
|
|
30
|
+
* - Implementations MUST be safe to dispose at any time (during, before, or
|
|
31
|
+
* after the first event) without throwing.
|
|
32
|
+
* - Implementations MAY synthesize events that the underlying transport does
|
|
33
|
+
* not natively emit (e.g. the poll provider synthesizes tool events from a
|
|
34
|
+
* post-hoc preview). Consumers cannot tell the difference and shouldn't try.
|
|
35
|
+
*/
|
|
36
|
+
export interface RunEventStreamProvider {
|
|
37
|
+
subscribe(params: RunEventStreamSubscribeParams, handlers: RunEventStreamHandlers): Promise<RunEventStreamSubscription>;
|
|
38
|
+
}
|
|
39
|
+
export type RunPreviewSnapshotFetcher = (runId: string, signal?: AbortSignal) => Promise<AgentRunDetailSnapshot | null>;
|
|
40
|
+
export type RunPreviewPollProviderOptions = {
|
|
41
|
+
/** Caller-supplied fetcher for the run-detail snapshot (mobile uses gateway loaders; web hits HTTP directly). */
|
|
42
|
+
fetchSnapshot: RunPreviewSnapshotFetcher;
|
|
43
|
+
/**
|
|
44
|
+
* Cap on how many snapshots to poll before giving up. Each poll synthesizes
|
|
45
|
+
* tool events for items newer than the previous snapshot.
|
|
46
|
+
*
|
|
47
|
+
* Set to 1 for one-shot "stitch tool events after run completed" usage.
|
|
48
|
+
* Set higher to track in-progress tool calls before backend SSE catches up.
|
|
49
|
+
*/
|
|
50
|
+
maxPolls?: number;
|
|
51
|
+
/** Delay between polls when {@link maxPolls} > 1. */
|
|
52
|
+
pollIntervalMs?: number;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Synthesizes tool events from {@link AgentRunPreviewItem}s by polling the
|
|
56
|
+
* run-detail snapshot. Used as a stopgap until the Hermes SSE protocol emits
|
|
57
|
+
* `tool.call.*` events natively.
|
|
58
|
+
*
|
|
59
|
+
* Default mode is one-shot: subscribe → fetch snapshot once → emit a
|
|
60
|
+
* `tool.call.completed` event for each tool item → fire `onComplete` → dispose.
|
|
61
|
+
*
|
|
62
|
+
* For in-progress polling (multi-shot), pass `maxPolls > 1` and a
|
|
63
|
+
* `pollIntervalMs`. The provider dedupes by `(toolName, at)` so the same tool
|
|
64
|
+
* call is never emitted twice.
|
|
65
|
+
*
|
|
66
|
+
* This provider DOES NOT emit lifecycle events (`message.delta`,
|
|
67
|
+
* `run.completed`, etc.). Compose it alongside a Hermes/gateway provider that
|
|
68
|
+
* handles the lifecycle.
|
|
69
|
+
*/
|
|
70
|
+
export declare class RunPreviewPollProvider implements RunEventStreamProvider {
|
|
71
|
+
private readonly fetchSnapshot;
|
|
72
|
+
private readonly maxPolls;
|
|
73
|
+
private readonly pollIntervalMs;
|
|
74
|
+
constructor(options: RunPreviewPollProviderOptions);
|
|
75
|
+
subscribe(params: RunEventStreamSubscribeParams, handlers: RunEventStreamHandlers): Promise<RunEventStreamSubscription>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Fan a single subscription out to multiple providers. Events from each
|
|
79
|
+
* provider are forwarded to the shared handler in arrival order; disposing the
|
|
80
|
+
* composite disposes every child subscription. Errors from any child are
|
|
81
|
+
* surfaced via {@link RunEventStreamHandlers.onError}; the others keep running
|
|
82
|
+
* unless the consumer disposes.
|
|
83
|
+
*/
|
|
84
|
+
export declare function composeRunEventProviders(...providers: RunEventStreamProvider[]): RunEventStreamProvider;
|
|
85
|
+
export type CreateRunStreamWithToolFallbackOptions = {
|
|
86
|
+
/** Authoritative source for lifecycle + (eventually) tool events. */
|
|
87
|
+
primary: RunEventStreamProvider;
|
|
88
|
+
/**
|
|
89
|
+
* One-shot fallback that fires only after the primary emits `run.completed`
|
|
90
|
+
* AND the primary did not emit any tool events during the run. Typically a
|
|
91
|
+
* {@link RunPreviewPollProvider}. Optional — when omitted the composer
|
|
92
|
+
* behaves like `primary` alone.
|
|
93
|
+
*/
|
|
94
|
+
toolEventFallback?: RunEventStreamProvider;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Wraps a primary {@link RunEventStreamProvider} with a tool-event fallback
|
|
98
|
+
* that fires only when the primary's run completes without ever emitting tool
|
|
99
|
+
* events. Used to bridge the gap while the Hermes SSE protocol does not yet
|
|
100
|
+
* surface `tool.call.*` events natively: the
|
|
101
|
+
* {@link RunPreviewPollProvider}-backed fallback stitches tool events in from
|
|
102
|
+
* the post-hoc run preview. When the primary starts emitting tool events
|
|
103
|
+
* natively, the fallback becomes a no-op automatically.
|
|
104
|
+
*/
|
|
105
|
+
export declare function createRunStreamWithToolFallback(options: CreateRunStreamWithToolFallbackOptions): RunEventStreamProvider;
|
|
106
|
+
//# sourceMappingURL=event-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../../../../src/core/gateway/run/event-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,cAAc,EAKpB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,mGAAmG;IACnG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CACP,MAAM,EAAE,6BAA6B,EACrC,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACxC;AAQD,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;AAE5C,MAAM,MAAM,6BAA6B,GAAG;IAC1C,iHAAiH;IACjH,aAAa,EAAE,yBAAyB,CAAC;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAKF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,sBAAsB;IACnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,OAAO,EAAE,6BAA6B;IAM5C,SAAS,CACb,MAAM,EAAE,6BAA6B,EACrC,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,0BAA0B,CAAC;CA8CvC;AAqED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,SAAS,EAAE,sBAAsB,EAAE,GACrC,sBAAsB,CAiBxB;AAkBD,MAAM,MAAM,sCAAsC,GAAG;IACnD,qEAAqE;IACrE,OAAO,EAAE,sBAAsB,CAAC;IAChC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CAC5C,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,sCAAsC,GAC9C,sBAAsB,CA4ExB"}
|