hivehq 2.0.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/CHANGELOG.md +592 -0
- package/LICENSE +208 -0
- package/LICENSE.BSL +101 -0
- package/NOTICE +15 -0
- package/README.en.md +451 -0
- package/README.md +329 -0
- package/SECURITY.md +59 -0
- package/TRADEMARK.md +41 -0
- package/assets/hive-hero.png +0 -0
- package/assets/hive-team-view.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/qq-group.jpg +0 -0
- package/dist/bin/team +7 -0
- package/dist/bin/team.cmd +3 -0
- package/dist/src/cli/hive-remote.d.ts +46 -0
- package/dist/src/cli/hive-remote.js +257 -0
- package/dist/src/cli/hive-update.d.ts +75 -0
- package/dist/src/cli/hive-update.js +215 -0
- package/dist/src/cli/hive.d.ts +78 -0
- package/dist/src/cli/hive.js +336 -0
- package/dist/src/cli/team.d.ts +38 -0
- package/dist/src/cli/team.js +762 -0
- package/dist/src/server/agent-command-resolver.d.ts +17 -0
- package/dist/src/server/agent-command-resolver.js +106 -0
- package/dist/src/server/agent-exit-classification.d.ts +6 -0
- package/dist/src/server/agent-exit-classification.js +6 -0
- package/dist/src/server/agent-launch-cache.d.ts +20 -0
- package/dist/src/server/agent-launch-cache.js +75 -0
- package/dist/src/server/agent-launch-resolver.d.ts +4 -0
- package/dist/src/server/agent-launch-resolver.js +38 -0
- package/dist/src/server/agent-manager-support.d.ts +36 -0
- package/dist/src/server/agent-manager-support.js +318 -0
- package/dist/src/server/agent-manager.d.ts +54 -0
- package/dist/src/server/agent-manager.js +104 -0
- package/dist/src/server/agent-run-bootstrap.d.ts +83 -0
- package/dist/src/server/agent-run-bootstrap.js +101 -0
- package/dist/src/server/agent-run-exit-handler.d.ts +8 -0
- package/dist/src/server/agent-run-exit-handler.js +32 -0
- package/dist/src/server/agent-run-start-context.d.ts +24 -0
- package/dist/src/server/agent-run-start-context.js +1 -0
- package/dist/src/server/agent-run-starter.d.ts +30 -0
- package/dist/src/server/agent-run-starter.js +155 -0
- package/dist/src/server/agent-run-store.d.ts +51 -0
- package/dist/src/server/agent-run-store.js +137 -0
- package/dist/src/server/agent-run-sync.d.ts +10 -0
- package/dist/src/server/agent-run-sync.js +32 -0
- package/dist/src/server/agent-runtime-active-run.d.ts +3 -0
- package/dist/src/server/agent-runtime-active-run.js +10 -0
- package/dist/src/server/agent-runtime-close.d.ts +5 -0
- package/dist/src/server/agent-runtime-close.js +36 -0
- package/dist/src/server/agent-runtime-contract.d.ts +48 -0
- package/dist/src/server/agent-runtime-contract.js +1 -0
- package/dist/src/server/agent-runtime-flow-adapter.d.ts +10 -0
- package/dist/src/server/agent-runtime-flow-adapter.js +14 -0
- package/dist/src/server/agent-runtime-list-runs.d.ts +3 -0
- package/dist/src/server/agent-runtime-list-runs.js +18 -0
- package/dist/src/server/agent-runtime-ports.d.ts +22 -0
- package/dist/src/server/agent-runtime-ports.js +1 -0
- package/dist/src/server/agent-runtime-stop-run.d.ts +4 -0
- package/dist/src/server/agent-runtime-stop-run.js +19 -0
- package/dist/src/server/agent-runtime-types.d.ts +5 -0
- package/dist/src/server/agent-runtime-types.js +1 -0
- package/dist/src/server/agent-runtime.d.ts +10 -0
- package/dist/src/server/agent-runtime.js +143 -0
- package/dist/src/server/agent-session-store.d.ts +7 -0
- package/dist/src/server/agent-session-store.js +45 -0
- package/dist/src/server/agent-startup-instructions.d.ts +20 -0
- package/dist/src/server/agent-startup-instructions.js +36 -0
- package/dist/src/server/agent-stdin-dispatcher.d.ts +52 -0
- package/dist/src/server/agent-stdin-dispatcher.js +224 -0
- package/dist/src/server/agent-tokens.d.ts +15 -0
- package/dist/src/server/agent-tokens.js +25 -0
- package/dist/src/server/app-state-store.d.ts +10 -0
- package/dist/src/server/app-state-store.js +12 -0
- package/dist/src/server/app.d.ts +20 -0
- package/dist/src/server/app.js +211 -0
- package/dist/src/server/claude-command-defaults.d.ts +1 -0
- package/dist/src/server/claude-command-defaults.js +5 -0
- package/dist/src/server/claude-session-coordinator.d.ts +10 -0
- package/dist/src/server/claude-session-coordinator.js +68 -0
- package/dist/src/server/claude-session-support.d.ts +1 -0
- package/dist/src/server/claude-session-support.js +1 -0
- package/dist/src/server/command-preset-defaults.d.ts +11 -0
- package/dist/src/server/command-preset-defaults.js +63 -0
- package/dist/src/server/command-preset-store.d.ts +49 -0
- package/dist/src/server/command-preset-store.js +83 -0
- package/dist/src/server/cron-util.d.ts +7 -0
- package/dist/src/server/cron-util.js +19 -0
- package/dist/src/server/dispatch-ledger-serializer.d.ts +15 -0
- package/dist/src/server/dispatch-ledger-serializer.js +14 -0
- package/dist/src/server/dispatch-ledger-store.d.ts +108 -0
- package/dist/src/server/dispatch-ledger-store.js +241 -0
- package/dist/src/server/env-sync-message.d.ts +9 -0
- package/dist/src/server/env-sync-message.js +29 -0
- package/dist/src/server/feature-flags.d.ts +42 -0
- package/dist/src/server/feature-flags.js +24 -0
- package/dist/src/server/fs-browse.d.ts +40 -0
- package/dist/src/server/fs-browse.js +306 -0
- package/dist/src/server/fs-pick-folder.d.ts +25 -0
- package/dist/src/server/fs-pick-folder.js +115 -0
- package/dist/src/server/fs-sandbox.d.ts +15 -0
- package/dist/src/server/fs-sandbox.js +56 -0
- package/dist/src/server/hive-team-guidance.d.ts +39 -0
- package/dist/src/server/hive-team-guidance.js +295 -0
- package/dist/src/server/http-errors.d.ts +22 -0
- package/dist/src/server/http-errors.js +44 -0
- package/dist/src/server/live-run-registry.d.ts +22 -0
- package/dist/src/server/live-run-registry.js +52 -0
- package/dist/src/server/local-request-guard.d.ts +3 -0
- package/dist/src/server/local-request-guard.js +41 -0
- package/dist/src/server/machine-name.d.ts +2 -0
- package/dist/src/server/machine-name.js +13 -0
- package/dist/src/server/marketplace-store.d.ts +38 -0
- package/dist/src/server/marketplace-store.js +85 -0
- package/dist/src/server/message-log-store.d.ts +51 -0
- package/dist/src/server/message-log-store.js +90 -0
- package/dist/src/server/open-target-commands.d.ts +54 -0
- package/dist/src/server/open-target-commands.js +204 -0
- package/dist/src/server/orchestrator-autostart.d.ts +42 -0
- package/dist/src/server/orchestrator-autostart.js +114 -0
- package/dist/src/server/orchestrator-launch.d.ts +24 -0
- package/dist/src/server/orchestrator-launch.js +71 -0
- package/dist/src/server/package-version.d.ts +17 -0
- package/dist/src/server/package-version.js +32 -0
- package/dist/src/server/path-canonicalization.d.ts +3 -0
- package/dist/src/server/path-canonicalization.js +29 -0
- package/dist/src/server/platform-path.d.ts +4 -0
- package/dist/src/server/platform-path.js +26 -0
- package/dist/src/server/post-start-input-writer.d.ts +6 -0
- package/dist/src/server/post-start-input-writer.js +242 -0
- package/dist/src/server/preset-launch-support.d.ts +6 -0
- package/dist/src/server/preset-launch-support.js +98 -0
- package/dist/src/server/pty-output-bus.d.ts +8 -0
- package/dist/src/server/pty-output-bus.js +32 -0
- package/dist/src/server/recovery-summary.d.ts +15 -0
- package/dist/src/server/recovery-summary.js +92 -0
- package/dist/src/server/remote-audit-store.d.ts +51 -0
- package/dist/src/server/remote-audit-store.js +108 -0
- package/dist/src/server/remote-config-keys.d.ts +17 -0
- package/dist/src/server/remote-config-keys.js +27 -0
- package/dist/src/server/remote-control-constants.d.ts +30 -0
- package/dist/src/server/remote-control-constants.js +29 -0
- package/dist/src/server/remote-device-session.d.ts +40 -0
- package/dist/src/server/remote-device-session.js +22 -0
- package/dist/src/server/remote-device-store.d.ts +36 -0
- package/dist/src/server/remote-device-store.js +67 -0
- package/dist/src/server/remote-frame-bridge.d.ts +102 -0
- package/dist/src/server/remote-frame-bridge.js +791 -0
- package/dist/src/server/remote-gateway-client.d.ts +14 -0
- package/dist/src/server/remote-gateway-client.js +36 -0
- package/dist/src/server/remote-loopback-auth.d.ts +6 -0
- package/dist/src/server/remote-loopback-auth.js +112 -0
- package/dist/src/server/remote-pairing-tunnel.d.ts +59 -0
- package/dist/src/server/remote-pairing-tunnel.js +146 -0
- package/dist/src/server/remote-pairing.d.ts +58 -0
- package/dist/src/server/remote-pairing.js +237 -0
- package/dist/src/server/remote-tunnel.d.ts +113 -0
- package/dist/src/server/remote-tunnel.js +514 -0
- package/dist/src/server/report-outbox-store.d.ts +36 -0
- package/dist/src/server/report-outbox-store.js +33 -0
- package/dist/src/server/restart-policy-support.d.ts +30 -0
- package/dist/src/server/restart-policy-support.js +21 -0
- package/dist/src/server/restart-policy.d.ts +18 -0
- package/dist/src/server/restart-policy.js +77 -0
- package/dist/src/server/role-template-store.d.ts +45 -0
- package/dist/src/server/role-template-store.js +76 -0
- package/dist/src/server/role-templates.d.ts +7 -0
- package/dist/src/server/role-templates.js +54 -0
- package/dist/src/server/route-helpers.d.ts +9 -0
- package/dist/src/server/route-helpers.js +61 -0
- package/dist/src/server/route-types.d.ts +121 -0
- package/dist/src/server/route-types.js +1 -0
- package/dist/src/server/routes-dispatches.d.ts +2 -0
- package/dist/src/server/routes-dispatches.js +54 -0
- package/dist/src/server/routes-fs.d.ts +2 -0
- package/dist/src/server/routes-fs.js +24 -0
- package/dist/src/server/routes-marketplace.d.ts +2 -0
- package/dist/src/server/routes-marketplace.js +54 -0
- package/dist/src/server/routes-open-workspace.d.ts +2 -0
- package/dist/src/server/routes-open-workspace.js +47 -0
- package/dist/src/server/routes-remote.d.ts +2 -0
- package/dist/src/server/routes-remote.js +166 -0
- package/dist/src/server/routes-runtime.d.ts +2 -0
- package/dist/src/server/routes-runtime.js +79 -0
- package/dist/src/server/routes-settings.d.ts +2 -0
- package/dist/src/server/routes-settings.js +213 -0
- package/dist/src/server/routes-tasks.d.ts +2 -0
- package/dist/src/server/routes-tasks.js +47 -0
- package/dist/src/server/routes-team-memory.d.ts +2 -0
- package/dist/src/server/routes-team-memory.js +154 -0
- package/dist/src/server/routes-team-recall.d.ts +2 -0
- package/dist/src/server/routes-team-recall.js +119 -0
- package/dist/src/server/routes-team.d.ts +2 -0
- package/dist/src/server/routes-team.js +351 -0
- package/dist/src/server/routes-ui.d.ts +2 -0
- package/dist/src/server/routes-ui.js +17 -0
- package/dist/src/server/routes-version.d.ts +2 -0
- package/dist/src/server/routes-version.js +6 -0
- package/dist/src/server/routes-workflow-schedules.d.ts +2 -0
- package/dist/src/server/routes-workflow-schedules.js +58 -0
- package/dist/src/server/routes-workflows.d.ts +2 -0
- package/dist/src/server/routes-workflows.js +83 -0
- package/dist/src/server/routes-workspace-memory-dreams.d.ts +2 -0
- package/dist/src/server/routes-workspace-memory-dreams.js +105 -0
- package/dist/src/server/routes-workspace-memory.d.ts +2 -0
- package/dist/src/server/routes-workspace-memory.js +215 -0
- package/dist/src/server/routes-workspaces.d.ts +2 -0
- package/dist/src/server/routes-workspaces.js +177 -0
- package/dist/src/server/routes.d.ts +6 -0
- package/dist/src/server/routes.js +55 -0
- package/dist/src/server/runtime-database.d.ts +3 -0
- package/dist/src/server/runtime-database.js +41 -0
- package/dist/src/server/runtime-message-builders.d.ts +7 -0
- package/dist/src/server/runtime-message-builders.js +60 -0
- package/dist/src/server/runtime-restart-policy.d.ts +18 -0
- package/dist/src/server/runtime-restart-policy.js +12 -0
- package/dist/src/server/runtime-store-contract.d.ts +162 -0
- package/dist/src/server/runtime-store-contract.js +1 -0
- package/dist/src/server/runtime-store-dream.d.ts +23 -0
- package/dist/src/server/runtime-store-dream.js +16 -0
- package/dist/src/server/runtime-store-helpers.d.ts +115 -0
- package/dist/src/server/runtime-store-helpers.js +411 -0
- package/dist/src/server/runtime-store-memory.d.ts +33 -0
- package/dist/src/server/runtime-store-memory.js +37 -0
- package/dist/src/server/runtime-store-remote.d.ts +5 -0
- package/dist/src/server/runtime-store-remote.js +45 -0
- package/dist/src/server/runtime-store-workflows.d.ts +6 -0
- package/dist/src/server/runtime-store-workflows.js +108 -0
- package/dist/src/server/runtime-store.d.ts +4 -0
- package/dist/src/server/runtime-store.js +165 -0
- package/dist/src/server/session-capture-claude.d.ts +34 -0
- package/dist/src/server/session-capture-claude.js +103 -0
- package/dist/src/server/session-capture-codex.d.ts +6 -0
- package/dist/src/server/session-capture-codex.js +108 -0
- package/dist/src/server/session-capture-gemini.d.ts +5 -0
- package/dist/src/server/session-capture-gemini.js +81 -0
- package/dist/src/server/session-capture-opencode.d.ts +22 -0
- package/dist/src/server/session-capture-opencode.js +75 -0
- package/dist/src/server/session-capture.d.ts +77 -0
- package/dist/src/server/session-capture.js +123 -0
- package/dist/src/server/settings-store.d.ts +22 -0
- package/dist/src/server/settings-store.js +22 -0
- package/dist/src/server/sqlite-schema-v10.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v10.js +13 -0
- package/dist/src/server/sqlite-schema-v11.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v11.js +10 -0
- package/dist/src/server/sqlite-schema-v12.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v12.js +21 -0
- package/dist/src/server/sqlite-schema-v13.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v13.js +4 -0
- package/dist/src/server/sqlite-schema-v14.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v14.js +84 -0
- package/dist/src/server/sqlite-schema-v15.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v15.js +73 -0
- package/dist/src/server/sqlite-schema-v16.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v16.js +6 -0
- package/dist/src/server/sqlite-schema-v17.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v17.js +15 -0
- package/dist/src/server/sqlite-schema-v18.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v18.js +6 -0
- package/dist/src/server/sqlite-schema-v19.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v19.js +17 -0
- package/dist/src/server/sqlite-schema-v20.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v20.js +20 -0
- package/dist/src/server/sqlite-schema-v21.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v21.js +20 -0
- package/dist/src/server/sqlite-schema-v22.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v22.js +27 -0
- package/dist/src/server/sqlite-schema-v23.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v23.js +43 -0
- package/dist/src/server/sqlite-schema-v24.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v24.js +34 -0
- package/dist/src/server/sqlite-schema-v25.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v25.js +127 -0
- package/dist/src/server/sqlite-schema-v26.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v26.js +56 -0
- package/dist/src/server/sqlite-schema-v27.d.ts +6 -0
- package/dist/src/server/sqlite-schema-v27.js +92 -0
- package/dist/src/server/sqlite-schema-v28.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v28.js +19 -0
- package/dist/src/server/sqlite-schema-v5.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v5.js +61 -0
- package/dist/src/server/sqlite-schema-v7.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v7.js +70 -0
- package/dist/src/server/sqlite-schema-v8.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v8.js +6 -0
- package/dist/src/server/sqlite-schema-v9.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v9.js +6 -0
- package/dist/src/server/sqlite-schema.d.ts +3 -0
- package/dist/src/server/sqlite-schema.js +353 -0
- package/dist/src/server/startup-command-parser.d.ts +20 -0
- package/dist/src/server/startup-command-parser.js +72 -0
- package/dist/src/server/system-message.d.ts +8 -0
- package/dist/src/server/system-message.js +8 -0
- package/dist/src/server/task-deps.d.ts +32 -0
- package/dist/src/server/task-deps.js +40 -0
- package/dist/src/server/tasks-file-watcher.d.ts +47 -0
- package/dist/src/server/tasks-file-watcher.js +200 -0
- package/dist/src/server/tasks-file.d.ts +23 -0
- package/dist/src/server/tasks-file.js +101 -0
- package/dist/src/server/tasks-websocket-server.d.ts +8 -0
- package/dist/src/server/tasks-websocket-server.js +95 -0
- package/dist/src/server/team-authz.d.ts +13 -0
- package/dist/src/server/team-authz.js +53 -0
- package/dist/src/server/team-autostaff.d.ts +16 -0
- package/dist/src/server/team-autostaff.js +16 -0
- package/dist/src/server/team-list-enrichment.d.ts +22 -0
- package/dist/src/server/team-list-enrichment.js +40 -0
- package/dist/src/server/team-list-serializer.d.ts +2 -0
- package/dist/src/server/team-list-serializer.js +11 -0
- package/dist/src/server/team-memory-digest.d.ts +52 -0
- package/dist/src/server/team-memory-digest.js +200 -0
- package/dist/src/server/team-memory-dream-applier.d.ts +5 -0
- package/dist/src/server/team-memory-dream-applier.js +234 -0
- package/dist/src/server/team-memory-dream-http-serializers.d.ts +13 -0
- package/dist/src/server/team-memory-dream-http-serializers.js +12 -0
- package/dist/src/server/team-memory-dream-ops.d.ts +40 -0
- package/dist/src/server/team-memory-dream-ops.js +153 -0
- package/dist/src/server/team-memory-dream-reverter.d.ts +22 -0
- package/dist/src/server/team-memory-dream-reverter.js +221 -0
- package/dist/src/server/team-memory-dream-run-store.d.ts +23 -0
- package/dist/src/server/team-memory-dream-run-store.js +211 -0
- package/dist/src/server/team-memory-dream-runner.d.ts +37 -0
- package/dist/src/server/team-memory-dream-runner.js +178 -0
- package/dist/src/server/team-memory-dream-scheduler.d.ts +32 -0
- package/dist/src/server/team-memory-dream-scheduler.js +115 -0
- package/dist/src/server/team-memory-dream-store.d.ts +19 -0
- package/dist/src/server/team-memory-dream-store.js +16 -0
- package/dist/src/server/team-memory-dream-types.d.ts +104 -0
- package/dist/src/server/team-memory-dream-types.js +23 -0
- package/dist/src/server/team-memory-export.d.ts +22 -0
- package/dist/src/server/team-memory-export.js +220 -0
- package/dist/src/server/team-memory-feature.d.ts +12 -0
- package/dist/src/server/team-memory-feature.js +12 -0
- package/dist/src/server/team-memory-http-serializers.d.ts +102 -0
- package/dist/src/server/team-memory-http-serializers.js +46 -0
- package/dist/src/server/team-memory-injection.d.ts +31 -0
- package/dist/src/server/team-memory-injection.js +49 -0
- package/dist/src/server/team-memory-store.d.ts +116 -0
- package/dist/src/server/team-memory-store.js +513 -0
- package/dist/src/server/team-operations.d.ts +102 -0
- package/dist/src/server/team-operations.js +387 -0
- package/dist/src/server/team-recall-store.d.ts +38 -0
- package/dist/src/server/team-recall-store.js +205 -0
- package/dist/src/server/terminal-flow-control.d.ts +19 -0
- package/dist/src/server/terminal-flow-control.js +116 -0
- package/dist/src/server/terminal-input-profile.d.ts +10 -0
- package/dist/src/server/terminal-input-profile.js +9 -0
- package/dist/src/server/terminal-protocol.d.ts +29 -0
- package/dist/src/server/terminal-protocol.js +47 -0
- package/dist/src/server/terminal-state-mirror.d.ts +21 -0
- package/dist/src/server/terminal-state-mirror.js +67 -0
- package/dist/src/server/terminal-stream-hub.d.ts +9 -0
- package/dist/src/server/terminal-stream-hub.js +192 -0
- package/dist/src/server/terminal-ws-server.d.ts +6 -0
- package/dist/src/server/terminal-ws-server.js +115 -0
- package/dist/src/server/ui-auth-helpers.d.ts +4 -0
- package/dist/src/server/ui-auth-helpers.js +28 -0
- package/dist/src/server/ui-auth.d.ts +8 -0
- package/dist/src/server/ui-auth.js +32 -0
- package/dist/src/server/version-service.d.ts +16 -0
- package/dist/src/server/version-service.js +72 -0
- package/dist/src/server/webhook-notifier.d.ts +34 -0
- package/dist/src/server/webhook-notifier.js +47 -0
- package/dist/src/server/websocket-upgrade-safety.d.ts +10 -0
- package/dist/src/server/websocket-upgrade-safety.js +35 -0
- package/dist/src/server/windows-command-line.d.ts +3 -0
- package/dist/src/server/windows-command-line.js +9 -0
- package/dist/src/server/windows-filename.d.ts +2 -0
- package/dist/src/server/windows-filename.js +33 -0
- package/dist/src/server/worker-output-tracker.d.ts +14 -0
- package/dist/src/server/worker-output-tracker.js +50 -0
- package/dist/src/server/workflow-cli-policy.d.ts +60 -0
- package/dist/src/server/workflow-cli-policy.js +110 -0
- package/dist/src/server/workflow-dispatch-awaiter.d.ts +12 -0
- package/dist/src/server/workflow-dispatch-awaiter.js +80 -0
- package/dist/src/server/workflow-feature.d.ts +15 -0
- package/dist/src/server/workflow-feature.js +15 -0
- package/dist/src/server/workflow-http-serializers.d.ts +64 -0
- package/dist/src/server/workflow-http-serializers.js +58 -0
- package/dist/src/server/workflow-output-schema.d.ts +18 -0
- package/dist/src/server/workflow-output-schema.js +41 -0
- package/dist/src/server/workflow-run-log-store.d.ts +19 -0
- package/dist/src/server/workflow-run-log-store.js +45 -0
- package/dist/src/server/workflow-run-store.d.ts +50 -0
- package/dist/src/server/workflow-run-store.js +103 -0
- package/dist/src/server/workflow-runner.d.ts +147 -0
- package/dist/src/server/workflow-runner.js +411 -0
- package/dist/src/server/workflow-schedule-create.d.ts +14 -0
- package/dist/src/server/workflow-schedule-create.js +41 -0
- package/dist/src/server/workflow-schedule-store.d.ts +43 -0
- package/dist/src/server/workflow-schedule-store.js +112 -0
- package/dist/src/server/workflow-scheduler.d.ts +36 -0
- package/dist/src/server/workflow-scheduler.js +97 -0
- package/dist/src/server/workflow-script-loader.d.ts +34 -0
- package/dist/src/server/workflow-script-loader.js +106 -0
- package/dist/src/server/workspace-path-validation.d.ts +1 -0
- package/dist/src/server/workspace-path-validation.js +42 -0
- package/dist/src/server/workspace-shell-runtime.d.ts +35 -0
- package/dist/src/server/workspace-shell-runtime.js +228 -0
- package/dist/src/server/workspace-store-contract.d.ts +32 -0
- package/dist/src/server/workspace-store-contract.js +1 -0
- package/dist/src/server/workspace-store-hydration.d.ts +5 -0
- package/dist/src/server/workspace-store-hydration.js +76 -0
- package/dist/src/server/workspace-store-mutations.d.ts +14 -0
- package/dist/src/server/workspace-store-mutations.js +48 -0
- package/dist/src/server/workspace-store-support.d.ts +33 -0
- package/dist/src/server/workspace-store-support.js +36 -0
- package/dist/src/server/workspace-store.d.ts +5 -0
- package/dist/src/server/workspace-store.js +153 -0
- package/dist/src/shared/fs-browse.d.ts +1 -0
- package/dist/src/shared/fs-browse.js +1 -0
- package/dist/src/shared/open-targets.d.ts +20 -0
- package/dist/src/shared/open-targets.js +36 -0
- package/dist/src/shared/path-input.d.ts +12 -0
- package/dist/src/shared/path-input.js +22 -0
- package/dist/src/shared/remote-bridge-routing.d.ts +19 -0
- package/dist/src/shared/remote-bridge-routing.js +141 -0
- package/dist/src/shared/remote-crypto.d.ts +138 -0
- package/dist/src/shared/remote-crypto.js +427 -0
- package/dist/src/shared/remote-pairing-code.d.ts +7 -0
- package/dist/src/shared/remote-pairing-code.js +47 -0
- package/dist/src/shared/remote-protocol.d.ts +160 -0
- package/dist/src/shared/remote-protocol.js +526 -0
- package/dist/src/shared/team-memory.d.ts +11 -0
- package/dist/src/shared/team-memory.js +10 -0
- package/dist/src/shared/team-recall.d.ts +1 -0
- package/dist/src/shared/team-recall.js +1 -0
- package/dist/src/shared/types.d.ts +66 -0
- package/dist/src/shared/types.js +1 -0
- package/dist/vendor/marketplace/en/LICENSE +21 -0
- package/dist/vendor/marketplace/en/SOURCES.md +12 -0
- package/dist/vendor/marketplace/en/academic/academic-anthropologist.md +125 -0
- package/dist/vendor/marketplace/en/academic/academic-geographer.md +127 -0
- package/dist/vendor/marketplace/en/academic/academic-historian.md +123 -0
- package/dist/vendor/marketplace/en/academic/academic-narratologist.md +118 -0
- package/dist/vendor/marketplace/en/academic/academic-psychologist.md +118 -0
- package/dist/vendor/marketplace/en/design/design-brand-guardian.md +322 -0
- package/dist/vendor/marketplace/en/design/design-image-prompt-engineer.md +236 -0
- package/dist/vendor/marketplace/en/design/design-inclusive-visuals-specialist.md +71 -0
- package/dist/vendor/marketplace/en/design/design-ui-designer.md +383 -0
- package/dist/vendor/marketplace/en/design/design-ux-architect.md +469 -0
- package/dist/vendor/marketplace/en/design/design-ux-researcher.md +329 -0
- package/dist/vendor/marketplace/en/design/design-visual-storyteller.md +149 -0
- package/dist/vendor/marketplace/en/design/design-whimsy-injector.md +438 -0
- package/dist/vendor/marketplace/en/engineering/engineering-ai-data-remediation-engineer.md +211 -0
- package/dist/vendor/marketplace/en/engineering/engineering-ai-engineer.md +146 -0
- package/dist/vendor/marketplace/en/engineering/engineering-autonomous-optimization-architect.md +107 -0
- package/dist/vendor/marketplace/en/engineering/engineering-backend-architect.md +235 -0
- package/dist/vendor/marketplace/en/engineering/engineering-cms-developer.md +536 -0
- package/dist/vendor/marketplace/en/engineering/engineering-code-reviewer.md +76 -0
- package/dist/vendor/marketplace/en/engineering/engineering-codebase-onboarding-engineer.md +173 -0
- package/dist/vendor/marketplace/en/engineering/engineering-data-engineer.md +306 -0
- package/dist/vendor/marketplace/en/engineering/engineering-database-optimizer.md +176 -0
- package/dist/vendor/marketplace/en/engineering/engineering-devops-automator.md +376 -0
- package/dist/vendor/marketplace/en/engineering/engineering-email-intelligence-engineer.md +353 -0
- package/dist/vendor/marketplace/en/engineering/engineering-embedded-firmware-engineer.md +173 -0
- package/dist/vendor/marketplace/en/engineering/engineering-feishu-integration-developer.md +598 -0
- package/dist/vendor/marketplace/en/engineering/engineering-filament-optimization-specialist.md +283 -0
- package/dist/vendor/marketplace/en/engineering/engineering-frontend-developer.md +225 -0
- package/dist/vendor/marketplace/en/engineering/engineering-git-workflow-master.md +84 -0
- package/dist/vendor/marketplace/en/engineering/engineering-incident-response-commander.md +444 -0
- package/dist/vendor/marketplace/en/engineering/engineering-minimal-change-engineer.md +207 -0
- package/dist/vendor/marketplace/en/engineering/engineering-mobile-app-builder.md +493 -0
- package/dist/vendor/marketplace/en/engineering/engineering-rapid-prototyper.md +462 -0
- package/dist/vendor/marketplace/en/engineering/engineering-security-engineer.md +304 -0
- package/dist/vendor/marketplace/en/engineering/engineering-senior-developer.md +176 -0
- package/dist/vendor/marketplace/en/engineering/engineering-software-architect.md +81 -0
- package/dist/vendor/marketplace/en/engineering/engineering-solidity-smart-contract-engineer.md +522 -0
- package/dist/vendor/marketplace/en/engineering/engineering-sre.md +90 -0
- package/dist/vendor/marketplace/en/engineering/engineering-technical-writer.md +393 -0
- package/dist/vendor/marketplace/en/engineering/engineering-threat-detection-engineer.md +534 -0
- package/dist/vendor/marketplace/en/engineering/engineering-voice-ai-integration-engineer.md +561 -0
- package/dist/vendor/marketplace/en/engineering/engineering-wechat-mini-program-developer.md +350 -0
- package/dist/vendor/marketplace/en/finance/finance-bookkeeper-controller.md +260 -0
- package/dist/vendor/marketplace/en/finance/finance-financial-analyst.md +234 -0
- package/dist/vendor/marketplace/en/finance/finance-fpa-analyst.md +263 -0
- package/dist/vendor/marketplace/en/finance/finance-investment-researcher.md +272 -0
- package/dist/vendor/marketplace/en/finance/finance-tax-strategist.md +239 -0
- package/dist/vendor/marketplace/en/game-development/blender/blender-addon-engineer.md +234 -0
- package/dist/vendor/marketplace/en/game-development/game-audio-engineer.md +264 -0
- package/dist/vendor/marketplace/en/game-development/game-designer.md +167 -0
- package/dist/vendor/marketplace/en/game-development/godot/godot-gameplay-scripter.md +334 -0
- package/dist/vendor/marketplace/en/game-development/godot/godot-multiplayer-engineer.md +297 -0
- package/dist/vendor/marketplace/en/game-development/godot/godot-shader-developer.md +266 -0
- package/dist/vendor/marketplace/en/game-development/level-designer.md +208 -0
- package/dist/vendor/marketplace/en/game-development/narrative-designer.md +243 -0
- package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-avatar-creator.md +297 -0
- package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-experience-designer.md +305 -0
- package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
- package/dist/vendor/marketplace/en/game-development/technical-artist.md +229 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-architect.md +271 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-editor-tool-developer.md +310 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-multiplayer-engineer.md +321 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-shader-graph-artist.md +269 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-multiplayer-architect.md +313 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-systems-engineer.md +310 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-technical-artist.md +256 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-world-builder.md +273 -0
- package/dist/vendor/marketplace/en/integrations/mcp-memory/backend-architect-with-memory.md +247 -0
- package/dist/vendor/marketplace/en/manifest.json +1869 -0
- package/dist/vendor/marketplace/en/marketing/marketing-agentic-search-optimizer.md +311 -0
- package/dist/vendor/marketplace/en/marketing/marketing-ai-citation-strategist.md +170 -0
- package/dist/vendor/marketplace/en/marketing/marketing-app-store-optimizer.md +321 -0
- package/dist/vendor/marketplace/en/marketing/marketing-baidu-seo-specialist.md +226 -0
- package/dist/vendor/marketplace/en/marketing/marketing-bilibili-content-strategist.md +199 -0
- package/dist/vendor/marketplace/en/marketing/marketing-book-co-author.md +110 -0
- package/dist/vendor/marketplace/en/marketing/marketing-carousel-growth-engine.md +199 -0
- package/dist/vendor/marketplace/en/marketing/marketing-china-ecommerce-operator.md +283 -0
- package/dist/vendor/marketplace/en/marketing/marketing-china-market-localization-strategist.md +283 -0
- package/dist/vendor/marketplace/en/marketing/marketing-content-creator.md +54 -0
- package/dist/vendor/marketplace/en/marketing/marketing-cross-border-ecommerce.md +259 -0
- package/dist/vendor/marketplace/en/marketing/marketing-douyin-strategist.md +149 -0
- package/dist/vendor/marketplace/en/marketing/marketing-growth-hacker.md +54 -0
- package/dist/vendor/marketplace/en/marketing/marketing-instagram-curator.md +113 -0
- package/dist/vendor/marketplace/en/marketing/marketing-kuaishou-strategist.md +223 -0
- package/dist/vendor/marketplace/en/marketing/marketing-linkedin-content-creator.md +214 -0
- package/dist/vendor/marketplace/en/marketing/marketing-livestream-commerce-coach.md +305 -0
- package/dist/vendor/marketplace/en/marketing/marketing-podcast-strategist.md +277 -0
- package/dist/vendor/marketplace/en/marketing/marketing-private-domain-operator.md +308 -0
- package/dist/vendor/marketplace/en/marketing/marketing-reddit-community-builder.md +123 -0
- package/dist/vendor/marketplace/en/marketing/marketing-seo-specialist.md +321 -0
- package/dist/vendor/marketplace/en/marketing/marketing-short-video-editing-coach.md +412 -0
- package/dist/vendor/marketplace/en/marketing/marketing-social-media-strategist.md +125 -0
- package/dist/vendor/marketplace/en/marketing/marketing-tiktok-strategist.md +125 -0
- package/dist/vendor/marketplace/en/marketing/marketing-twitter-engager.md +126 -0
- package/dist/vendor/marketplace/en/marketing/marketing-video-optimization-specialist.md +119 -0
- package/dist/vendor/marketplace/en/marketing/marketing-wechat-official-account.md +145 -0
- package/dist/vendor/marketplace/en/marketing/marketing-weibo-strategist.md +240 -0
- package/dist/vendor/marketplace/en/marketing/marketing-xiaohongshu-specialist.md +138 -0
- package/dist/vendor/marketplace/en/marketing/marketing-zhihu-strategist.md +162 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-auditor.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-creative-strategist.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-paid-social-strategist.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-ppc-strategist.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-programmatic-buyer.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-search-query-analyst.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-tracking-specialist.md +71 -0
- package/dist/vendor/marketplace/en/product/product-behavioral-nudge-engine.md +80 -0
- package/dist/vendor/marketplace/en/product/product-feedback-synthesizer.md +119 -0
- package/dist/vendor/marketplace/en/product/product-manager.md +469 -0
- package/dist/vendor/marketplace/en/product/product-sprint-prioritizer.md +154 -0
- package/dist/vendor/marketplace/en/product/product-trend-researcher.md +159 -0
- package/dist/vendor/marketplace/en/project-management/project-management-experiment-tracker.md +198 -0
- package/dist/vendor/marketplace/en/project-management/project-management-jira-workflow-steward.md +230 -0
- package/dist/vendor/marketplace/en/project-management/project-management-project-shepherd.md +194 -0
- package/dist/vendor/marketplace/en/project-management/project-management-studio-operations.md +200 -0
- package/dist/vendor/marketplace/en/project-management/project-management-studio-producer.md +203 -0
- package/dist/vendor/marketplace/en/project-management/project-manager-senior.md +135 -0
- package/dist/vendor/marketplace/en/sales/sales-account-strategist.md +227 -0
- package/dist/vendor/marketplace/en/sales/sales-coach.md +271 -0
- package/dist/vendor/marketplace/en/sales/sales-deal-strategist.md +180 -0
- package/dist/vendor/marketplace/en/sales/sales-discovery-coach.md +225 -0
- package/dist/vendor/marketplace/en/sales/sales-engineer.md +182 -0
- package/dist/vendor/marketplace/en/sales/sales-outbound-strategist.md +201 -0
- package/dist/vendor/marketplace/en/sales/sales-pipeline-analyst.md +267 -0
- package/dist/vendor/marketplace/en/sales/sales-proposal-strategist.md +217 -0
- package/dist/vendor/marketplace/en/spatial-computing/macos-spatial-metal-engineer.md +337 -0
- package/dist/vendor/marketplace/en/spatial-computing/terminal-integration-specialist.md +70 -0
- package/dist/vendor/marketplace/en/spatial-computing/visionos-spatial-engineer.md +54 -0
- package/dist/vendor/marketplace/en/spatial-computing/xr-cockpit-interaction-specialist.md +32 -0
- package/dist/vendor/marketplace/en/spatial-computing/xr-immersive-developer.md +32 -0
- package/dist/vendor/marketplace/en/spatial-computing/xr-interface-architect.md +32 -0
- package/dist/vendor/marketplace/en/specialized/accounts-payable-agent.md +185 -0
- package/dist/vendor/marketplace/en/specialized/agentic-identity-trust.md +387 -0
- package/dist/vendor/marketplace/en/specialized/agents-orchestrator.md +367 -0
- package/dist/vendor/marketplace/en/specialized/automation-governance-architect.md +216 -0
- package/dist/vendor/marketplace/en/specialized/blockchain-security-auditor.md +463 -0
- package/dist/vendor/marketplace/en/specialized/compliance-auditor.md +158 -0
- package/dist/vendor/marketplace/en/specialized/corporate-training-designer.md +192 -0
- package/dist/vendor/marketplace/en/specialized/customer-service.md +398 -0
- package/dist/vendor/marketplace/en/specialized/data-consolidation-agent.md +60 -0
- package/dist/vendor/marketplace/en/specialized/government-digital-presales-consultant.md +363 -0
- package/dist/vendor/marketplace/en/specialized/healthcare-customer-service.md +389 -0
- package/dist/vendor/marketplace/en/specialized/healthcare-marketing-compliance.md +395 -0
- package/dist/vendor/marketplace/en/specialized/hospitality-guest-services.md +603 -0
- package/dist/vendor/marketplace/en/specialized/hr-onboarding.md +451 -0
- package/dist/vendor/marketplace/en/specialized/identity-graph-operator.md +260 -0
- package/dist/vendor/marketplace/en/specialized/language-translator.md +264 -0
- package/dist/vendor/marketplace/en/specialized/legal-billing-time-tracking.md +569 -0
- package/dist/vendor/marketplace/en/specialized/legal-client-intake.md +492 -0
- package/dist/vendor/marketplace/en/specialized/legal-document-review.md +454 -0
- package/dist/vendor/marketplace/en/specialized/loan-officer-assistant.md +555 -0
- package/dist/vendor/marketplace/en/specialized/lsp-index-engineer.md +314 -0
- package/dist/vendor/marketplace/en/specialized/real-estate-buyer-seller.md +596 -0
- package/dist/vendor/marketplace/en/specialized/recruitment-specialist.md +509 -0
- package/dist/vendor/marketplace/en/specialized/report-distribution-agent.md +65 -0
- package/dist/vendor/marketplace/en/specialized/retail-customer-returns.md +566 -0
- package/dist/vendor/marketplace/en/specialized/sales-data-extraction-agent.md +67 -0
- package/dist/vendor/marketplace/en/specialized/sales-outreach.md +425 -0
- package/dist/vendor/marketplace/en/specialized/specialized-chief-of-staff.md +279 -0
- package/dist/vendor/marketplace/en/specialized/specialized-civil-engineer.md +356 -0
- package/dist/vendor/marketplace/en/specialized/specialized-cultural-intelligence-strategist.md +88 -0
- package/dist/vendor/marketplace/en/specialized/specialized-developer-advocate.md +317 -0
- package/dist/vendor/marketplace/en/specialized/specialized-document-generator.md +55 -0
- package/dist/vendor/marketplace/en/specialized/specialized-french-consulting-market.md +192 -0
- package/dist/vendor/marketplace/en/specialized/specialized-korean-business-navigator.md +216 -0
- package/dist/vendor/marketplace/en/specialized/specialized-mcp-builder.md +248 -0
- package/dist/vendor/marketplace/en/specialized/specialized-model-qa.md +488 -0
- package/dist/vendor/marketplace/en/specialized/specialized-salesforce-architect.md +180 -0
- package/dist/vendor/marketplace/en/specialized/specialized-workflow-architect.md +597 -0
- package/dist/vendor/marketplace/en/specialized/study-abroad-advisor.md +282 -0
- package/dist/vendor/marketplace/en/specialized/supply-chain-strategist.md +582 -0
- package/dist/vendor/marketplace/en/support/support-analytics-reporter.md +365 -0
- package/dist/vendor/marketplace/en/support/support-executive-summary-generator.md +212 -0
- package/dist/vendor/marketplace/en/support/support-finance-tracker.md +442 -0
- package/dist/vendor/marketplace/en/support/support-infrastructure-maintainer.md +618 -0
- package/dist/vendor/marketplace/en/support/support-legal-compliance-checker.md +588 -0
- package/dist/vendor/marketplace/en/support/support-support-responder.md +585 -0
- package/dist/vendor/marketplace/en/testing/testing-accessibility-auditor.md +316 -0
- package/dist/vendor/marketplace/en/testing/testing-api-tester.md +306 -0
- package/dist/vendor/marketplace/en/testing/testing-evidence-collector.md +210 -0
- package/dist/vendor/marketplace/en/testing/testing-performance-benchmarker.md +268 -0
- package/dist/vendor/marketplace/en/testing/testing-reality-checker.md +236 -0
- package/dist/vendor/marketplace/en/testing/testing-test-results-analyzer.md +305 -0
- package/dist/vendor/marketplace/en/testing/testing-tool-evaluator.md +394 -0
- package/dist/vendor/marketplace/en/testing/testing-workflow-optimizer.md +450 -0
- package/dist/vendor/marketplace/zh/LICENSE +22 -0
- package/dist/vendor/marketplace/zh/SOURCES.md +12 -0
- package/dist/vendor/marketplace/zh/academic/academic-anthropologist.md +124 -0
- package/dist/vendor/marketplace/zh/academic/academic-geographer.md +126 -0
- package/dist/vendor/marketplace/zh/academic/academic-historian.md +122 -0
- package/dist/vendor/marketplace/zh/academic/academic-narratologist.md +117 -0
- package/dist/vendor/marketplace/zh/academic/academic-psychologist.md +117 -0
- package/dist/vendor/marketplace/zh/academic/academic-study-planner.md +214 -0
- package/dist/vendor/marketplace/zh/design/design-brand-guardian.md +321 -0
- package/dist/vendor/marketplace/zh/design/design-image-prompt-engineer.md +255 -0
- package/dist/vendor/marketplace/zh/design/design-inclusive-visuals-specialist.md +177 -0
- package/dist/vendor/marketplace/zh/design/design-ui-designer.md +382 -0
- package/dist/vendor/marketplace/zh/design/design-ux-architect.md +482 -0
- package/dist/vendor/marketplace/zh/design/design-ux-researcher.md +328 -0
- package/dist/vendor/marketplace/zh/design/design-visual-storyteller.md +159 -0
- package/dist/vendor/marketplace/zh/design/design-whimsy-injector.md +453 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-ai-data-remediation-engineer.md +209 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-ai-engineer.md +161 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-autonomous-optimization-architect.md +115 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-backend-architect.md +234 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-cms-developer.md +534 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-code-reviewer.md +172 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-codebase-onboarding-engineer.md +172 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-data-engineer.md +324 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-database-optimizer.md +175 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-devops-automator.md +375 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-dingtalk-integration-developer.md +574 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-email-intelligence-engineer.md +349 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-embedded-firmware-engineer.md +168 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-embedded-linux-driver-engineer.md +255 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-feishu-integration-developer.md +597 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-filament-optimization-specialist.md +283 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-fpga-digital-design-engineer.md +227 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-frontend-developer.md +224 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-git-workflow-master.md +220 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-incident-response-commander.md +465 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-iot-solution-architect.md +220 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-mechanical-design-engineer.md +311 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-minimal-change-engineer.md +206 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-mobile-app-builder.md +434 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-pc-host-engineer.md +231 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-rapid-prototyper.md +461 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-security-engineer.md +303 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-senior-developer.md +177 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-software-architect.md +200 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-solidity-smart-contract-engineer.md +541 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-sre.md +233 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-technical-writer.md +409 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-threat-detection-engineer.md +553 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-voice-ai-integration-engineer.md +560 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-wechat-mini-program-developer.md +288 -0
- package/dist/vendor/marketplace/zh/finance/finance-bookkeeper-controller.md +271 -0
- package/dist/vendor/marketplace/zh/finance/finance-financial-analyst.md +244 -0
- package/dist/vendor/marketplace/zh/finance/finance-financial-forecaster.md +213 -0
- package/dist/vendor/marketplace/zh/finance/finance-fpa-analyst.md +272 -0
- package/dist/vendor/marketplace/zh/finance/finance-fraud-detector.md +241 -0
- package/dist/vendor/marketplace/zh/finance/finance-investment-researcher.md +283 -0
- package/dist/vendor/marketplace/zh/finance/finance-invoice-manager.md +242 -0
- package/dist/vendor/marketplace/zh/finance/finance-tax-strategist.md +250 -0
- package/dist/vendor/marketplace/zh/game-development/blender/blender-addon-engineer.md +233 -0
- package/dist/vendor/marketplace/zh/game-development/game-audio-engineer.md +265 -0
- package/dist/vendor/marketplace/zh/game-development/game-designer.md +168 -0
- package/dist/vendor/marketplace/zh/game-development/godot/godot-gameplay-scripter.md +335 -0
- package/dist/vendor/marketplace/zh/game-development/godot/godot-multiplayer-engineer.md +296 -0
- package/dist/vendor/marketplace/zh/game-development/godot/godot-shader-developer.md +267 -0
- package/dist/vendor/marketplace/zh/game-development/level-designer.md +209 -0
- package/dist/vendor/marketplace/zh/game-development/narrative-designer.md +244 -0
- package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-avatar-creator.md +298 -0
- package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-experience-designer.md +306 -0
- package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
- package/dist/vendor/marketplace/zh/game-development/technical-artist.md +230 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-architect.md +272 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-editor-tool-developer.md +300 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-multiplayer-engineer.md +238 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-shader-graph-artist.md +270 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-multiplayer-architect.md +314 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-systems-engineer.md +311 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-technical-artist.md +256 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-world-builder.md +274 -0
- package/dist/vendor/marketplace/zh/hr/hr-performance-reviewer.md +248 -0
- package/dist/vendor/marketplace/zh/hr/hr-recruiter.md +232 -0
- package/dist/vendor/marketplace/zh/legal/legal-contract-reviewer.md +240 -0
- package/dist/vendor/marketplace/zh/legal/legal-policy-writer.md +308 -0
- package/dist/vendor/marketplace/zh/manifest.json +2181 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-agentic-search-optimizer.md +312 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-ai-citation-strategist.md +169 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-app-store-optimizer.md +319 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-baidu-seo-specialist.md +220 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-bilibili-strategist.md +194 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-book-co-author.md +109 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-carousel-growth-engine.md +215 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-china-ecommerce-operator.md +277 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-china-market-localization-strategist.md +282 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-content-creator.md +145 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-cross-border-ecommerce.md +260 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-daily-news-briefing.md +303 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-douyin-strategist.md +150 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-ecommerce-operator.md +216 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-growth-hacker.md +121 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-instagram-curator.md +179 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-knowledge-commerce-strategist.md +384 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-kuaishou-strategist.md +182 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-linkedin-content-creator.md +232 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-livestream-commerce-coach.md +303 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-podcast-strategist.md +278 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-private-domain-operator.md +309 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-reddit-community-builder.md +127 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-seo-specialist.md +298 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-short-video-editing-coach.md +413 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-social-media-strategist.md +118 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-tiktok-strategist.md +124 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-twitter-engager.md +132 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-video-optimization-specialist.md +128 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-wechat-official-account.md +158 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-wechat-operator.md +156 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-weibo-strategist.md +241 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-weixin-channels-strategist.md +297 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-xiaohongshu-operator.md +139 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-xiaohongshu-specialist.md +151 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-zhihu-strategist.md +175 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-auditor.md +170 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-creative-strategist.md +173 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-paid-social-strategist.md +180 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-ppc-strategist.md +180 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-programmatic-buyer.md +177 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-search-query-analyst.md +182 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-tracking-specialist.md +199 -0
- package/dist/vendor/marketplace/zh/product/product-behavioral-nudge-engine.md +246 -0
- package/dist/vendor/marketplace/zh/product/product-feedback-synthesizer.md +175 -0
- package/dist/vendor/marketplace/zh/product/product-manager.md +474 -0
- package/dist/vendor/marketplace/zh/product/product-sprint-prioritizer.md +133 -0
- package/dist/vendor/marketplace/zh/product/product-trend-researcher.md +143 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-experiment-tracker.md +206 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-jira-workflow-steward.md +249 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-project-shepherd.md +202 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-studio-operations.md +208 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-studio-producer.md +211 -0
- package/dist/vendor/marketplace/zh/project-management/project-manager-senior.md +135 -0
- package/dist/vendor/marketplace/zh/sales/sales-account-strategist.md +243 -0
- package/dist/vendor/marketplace/zh/sales/sales-coach.md +291 -0
- package/dist/vendor/marketplace/zh/sales/sales-deal-strategist.md +204 -0
- package/dist/vendor/marketplace/zh/sales/sales-discovery-coach.md +230 -0
- package/dist/vendor/marketplace/zh/sales/sales-engineer.md +200 -0
- package/dist/vendor/marketplace/zh/sales/sales-outbound-strategist.md +208 -0
- package/dist/vendor/marketplace/zh/sales/sales-pipeline-analyst.md +284 -0
- package/dist/vendor/marketplace/zh/sales/sales-proposal-strategist.md +233 -0
- package/dist/vendor/marketplace/zh/spatial-computing/macos-spatial-metal-engineer.md +337 -0
- package/dist/vendor/marketplace/zh/spatial-computing/terminal-integration-specialist.md +236 -0
- package/dist/vendor/marketplace/zh/spatial-computing/visionos-spatial-engineer.md +282 -0
- package/dist/vendor/marketplace/zh/spatial-computing/xr-cockpit-interaction-specialist.md +220 -0
- package/dist/vendor/marketplace/zh/spatial-computing/xr-immersive-developer.md +229 -0
- package/dist/vendor/marketplace/zh/spatial-computing/xr-interface-architect.md +253 -0
- package/dist/vendor/marketplace/zh/specialized/accounts-payable-agent.md +212 -0
- package/dist/vendor/marketplace/zh/specialized/agentic-identity-trust.md +388 -0
- package/dist/vendor/marketplace/zh/specialized/agents-orchestrator.md +366 -0
- package/dist/vendor/marketplace/zh/specialized/automation-governance-architect.md +215 -0
- package/dist/vendor/marketplace/zh/specialized/blockchain-security-auditor.md +484 -0
- package/dist/vendor/marketplace/zh/specialized/compliance-auditor.md +172 -0
- package/dist/vendor/marketplace/zh/specialized/corporate-training-designer.md +191 -0
- package/dist/vendor/marketplace/zh/specialized/data-consolidation-agent.md +327 -0
- package/dist/vendor/marketplace/zh/specialized/gaokao-college-advisor.md +333 -0
- package/dist/vendor/marketplace/zh/specialized/government-digital-presales-consultant.md +362 -0
- package/dist/vendor/marketplace/zh/specialized/healthcare-customer-service.md +388 -0
- package/dist/vendor/marketplace/zh/specialized/healthcare-marketing-compliance.md +394 -0
- package/dist/vendor/marketplace/zh/specialized/hospitality-guest-services.md +597 -0
- package/dist/vendor/marketplace/zh/specialized/hr-onboarding.md +450 -0
- package/dist/vendor/marketplace/zh/specialized/identity-graph-operator.md +270 -0
- package/dist/vendor/marketplace/zh/specialized/language-translator.md +275 -0
- package/dist/vendor/marketplace/zh/specialized/legal-billing-time-tracking.md +566 -0
- package/dist/vendor/marketplace/zh/specialized/legal-client-intake.md +487 -0
- package/dist/vendor/marketplace/zh/specialized/legal-document-review.md +452 -0
- package/dist/vendor/marketplace/zh/specialized/livestock-archive-auditor.md +135 -0
- package/dist/vendor/marketplace/zh/specialized/loan-officer-assistant.md +549 -0
- package/dist/vendor/marketplace/zh/specialized/lsp-index-engineer.md +334 -0
- package/dist/vendor/marketplace/zh/specialized/prompt-engineer.md +176 -0
- package/dist/vendor/marketplace/zh/specialized/real-estate-buyer-seller.md +594 -0
- package/dist/vendor/marketplace/zh/specialized/recruitment-specialist.md +508 -0
- package/dist/vendor/marketplace/zh/specialized/report-distribution-agent.md +354 -0
- package/dist/vendor/marketplace/zh/specialized/retail-customer-returns.md +564 -0
- package/dist/vendor/marketplace/zh/specialized/sales-data-extraction-agent.md +159 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-ai-policy-writer.md +217 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-chief-of-staff.md +278 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-civil-engineer.md +355 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-cultural-intelligence-strategist.md +168 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-developer-advocate.md +334 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-document-generator.md +346 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-french-consulting-market.md +191 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-korean-business-navigator.md +215 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-mcp-builder.md +351 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-meeting-assistant.md +236 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-model-qa.md +507 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-pricing-optimizer.md +254 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-risk-assessor.md +240 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-salesforce-architect.md +179 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-workflow-architect.md +596 -0
- package/dist/vendor/marketplace/zh/specialized/study-abroad-advisor.md +281 -0
- package/dist/vendor/marketplace/zh/specialized/technical-translator-agent.md +167 -0
- package/dist/vendor/marketplace/zh/specialized/zk-steward.md +228 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-inventory-forecaster.md +212 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-route-optimizer.md +224 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-strategist.md +581 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-vendor-evaluator.md +232 -0
- package/dist/vendor/marketplace/zh/support/support-analytics-reporter.md +364 -0
- package/dist/vendor/marketplace/zh/support/support-executive-summary-generator.md +217 -0
- package/dist/vendor/marketplace/zh/support/support-finance-tracker.md +447 -0
- package/dist/vendor/marketplace/zh/support/support-infrastructure-maintainer.md +623 -0
- package/dist/vendor/marketplace/zh/support/support-legal-compliance-checker.md +587 -0
- package/dist/vendor/marketplace/zh/support/support-recruitment-specialist.md +508 -0
- package/dist/vendor/marketplace/zh/support/support-support-responder.md +584 -0
- package/dist/vendor/marketplace/zh/testing/testing-accessibility-auditor.md +329 -0
- package/dist/vendor/marketplace/zh/testing/testing-api-tester.md +305 -0
- package/dist/vendor/marketplace/zh/testing/testing-embedded-qa-engineer.md +258 -0
- package/dist/vendor/marketplace/zh/testing/testing-evidence-collector.md +153 -0
- package/dist/vendor/marketplace/zh/testing/testing-performance-benchmarker.md +196 -0
- package/dist/vendor/marketplace/zh/testing/testing-reality-checker.md +235 -0
- package/dist/vendor/marketplace/zh/testing/testing-test-results-analyzer.md +313 -0
- package/dist/vendor/marketplace/zh/testing/testing-tool-evaluator.md +402 -0
- package/dist/vendor/marketplace/zh/testing/testing-workflow-optimizer.md +458 -0
- package/package.json +131 -0
- package/scripts/postinstall-native-artifacts.mjs +113 -0
- package/web/dist/assets/AddWorkerDialog-BU2Fn-Mx.js +2 -0
- package/web/dist/assets/AddWorkspaceFlow-BV04MkRt.js +1 -0
- package/web/dist/assets/FirstRunWizard-DS4IYOrd.js +1 -0
- package/web/dist/assets/MarketplaceDrawer-CIQ2B6Fx.js +76 -0
- package/web/dist/assets/TaskGraphDrawer-BPMcRocd.js +1 -0
- package/web/dist/assets/WhatsNewDialog-DEgVY_LD.js +1 -0
- package/web/dist/assets/WorkerModal-DiCcTPpc.js +1 -0
- package/web/dist/assets/WorkflowsDrawer-M2CgAJWK.js +1 -0
- package/web/dist/assets/WorkspaceMemoryDrawer-ClJIqWck.js +1 -0
- package/web/dist/assets/WorkspaceTaskDrawer-gjvXuZ2K.js +1 -0
- package/web/dist/assets/addon-clipboard-wHJhZAA4.js +1 -0
- package/web/dist/assets/addon-fit-DX4qG4td.js +1 -0
- package/web/dist/assets/addon-unicode11-Bt8F3D7-.js +7 -0
- package/web/dist/assets/addon-web-links-DIbG5aQx.js +1 -0
- package/web/dist/assets/addon-webgl-DCtw1yLn.js +64 -0
- package/web/dist/assets/finder-C4Jmsb0B.png +0 -0
- package/web/dist/assets/ghostty-D-Js4rdm.png +0 -0
- package/web/dist/assets/index-bOMtwrkA.js +73 -0
- package/web/dist/assets/index-i9YgsMdD.css +1 -0
- package/web/dist/assets/path-join-7MR1s7b1.js +1 -0
- package/web/dist/assets/search-CmzeVhy0.js +1 -0
- package/web/dist/assets/xterm-B-qIQCd3.js +16 -0
- package/web/dist/assets/zed-C5BQT8X3.png +0 -0
- package/web/dist/bilibili.ico +0 -0
- package/web/dist/cli-icons/claude.png +0 -0
- package/web/dist/cli-icons/codex.png +0 -0
- package/web/dist/cli-icons/gemini.png +0 -0
- package/web/dist/cli-icons/hermes.png +0 -0
- package/web/dist/cli-icons/opencode.svg +18 -0
- package/web/dist/icons/apple-touch-icon-180.png +0 -0
- package/web/dist/icons/icon-192.png +0 -0
- package/web/dist/icons/icon-32.png +0 -0
- package/web/dist/icons/icon-512-maskable.png +0 -0
- package/web/dist/icons/icon-512.png +0 -0
- package/web/dist/index.html +39 -0
- package/web/dist/logo.png +0 -0
- package/web/dist/manifest.webmanifest +60 -0
- package/web/dist/screenshots/wide-overview.png +0 -0
- package/web/dist/sounds/LICENSE-KENNEY.txt +22 -0
- package/web/dist/sounds/hive-beacon.ogg +0 -0
- package/web/dist/sounds/hive-cascade.ogg +0 -0
- package/web/dist/sounds/hive-chime.ogg +0 -0
- package/web/dist/sounds/hive-ping.ogg +0 -0
- package/web/dist/sounds/hive-resolve.ogg +0 -0
- package/web/dist/sounds/hive-soft.ogg +0 -0
- package/web/dist/sw.js +99 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
export { REMOTE_CRYPTO_VERSION as PROTOCOL_VERSION } from './remote-crypto.js';
|
|
2
|
+
export declare const FrameKind: {
|
|
3
|
+
readonly Open: 1;
|
|
4
|
+
readonly Data: 2;
|
|
5
|
+
readonly End: 3;
|
|
6
|
+
readonly Reset: 4;
|
|
7
|
+
readonly Ping: 5;
|
|
8
|
+
readonly Ack: 6;
|
|
9
|
+
};
|
|
10
|
+
export type FrameKind = (typeof FrameKind)[keyof typeof FrameKind];
|
|
11
|
+
export declare const StreamTransport: {
|
|
12
|
+
readonly Http: 1;
|
|
13
|
+
readonly Ws: 2;
|
|
14
|
+
};
|
|
15
|
+
export type StreamTransport = (typeof StreamTransport)[keyof typeof StreamTransport];
|
|
16
|
+
export declare const ResetCode: {
|
|
17
|
+
readonly Normal: 0;
|
|
18
|
+
readonly ProtocolError: 1;
|
|
19
|
+
readonly FlowViolation: 2;
|
|
20
|
+
readonly StreamRefused: 3;
|
|
21
|
+
readonly VersionMismatch: 4;
|
|
22
|
+
readonly InternalError: 5;
|
|
23
|
+
};
|
|
24
|
+
export type ResetCode = (typeof ResetCode)[keyof typeof ResetCode];
|
|
25
|
+
export declare const FLOW: {
|
|
26
|
+
readonly INITIAL_WINDOW: number;
|
|
27
|
+
readonly ACK_THRESHOLD: number;
|
|
28
|
+
};
|
|
29
|
+
export declare const HEADER_BYTES = 12;
|
|
30
|
+
export declare const CHANNEL_STREAM_ID = 0;
|
|
31
|
+
export declare const CONN_SALT_STREAM_ID = 4294967295;
|
|
32
|
+
export declare class ProtocolError extends Error {
|
|
33
|
+
code: ResetCode;
|
|
34
|
+
constructor(message: string, code: ResetCode);
|
|
35
|
+
}
|
|
36
|
+
export interface FrameHeader {
|
|
37
|
+
version: number;
|
|
38
|
+
kind: FrameKind;
|
|
39
|
+
flags: number;
|
|
40
|
+
streamId: number;
|
|
41
|
+
seq: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* bit0 (FIN) is a permitted Data flag; every other bit is reserved-MUST-be-0. So this returns true
|
|
45
|
+
* for 0x0000 and 0x0001 only. The non-Data canonicalization (where even bit0 is reserved) is
|
|
46
|
+
* enforced in decodeHeader, which knows the kind.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isReservedFlagsClear(flags: number): boolean;
|
|
49
|
+
export declare function encodeHeader(h: FrameHeader): Uint8Array;
|
|
50
|
+
export declare function decodeHeader(bytes: Uint8Array): FrameHeader;
|
|
51
|
+
export interface StreamMeta {
|
|
52
|
+
transport: StreamTransport;
|
|
53
|
+
http?: {
|
|
54
|
+
method: string;
|
|
55
|
+
path: string;
|
|
56
|
+
headers: [string, string][];
|
|
57
|
+
hasBody: boolean;
|
|
58
|
+
};
|
|
59
|
+
ws?: {
|
|
60
|
+
path: string;
|
|
61
|
+
query?: [string, string][];
|
|
62
|
+
subprotocol?: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export interface HelloMeta {
|
|
66
|
+
protocolVersion: number;
|
|
67
|
+
role: 'daemon' | 'device';
|
|
68
|
+
daemonId: string;
|
|
69
|
+
deviceId: string;
|
|
70
|
+
}
|
|
71
|
+
export interface HttpResponseHead {
|
|
72
|
+
status: number;
|
|
73
|
+
headers: [string, string][];
|
|
74
|
+
}
|
|
75
|
+
export declare function encodeOpenPayload(m: StreamMeta): Uint8Array;
|
|
76
|
+
export declare function decodeOpenPayload(p: Uint8Array): StreamMeta;
|
|
77
|
+
export declare const CHANNEL_DISC: {
|
|
78
|
+
readonly ConnSalt: 1;
|
|
79
|
+
readonly Hello: 2;
|
|
80
|
+
};
|
|
81
|
+
export type ChannelDisc = (typeof CHANNEL_DISC)[keyof typeof CHANNEL_DISC];
|
|
82
|
+
export interface ConnSaltMsg {
|
|
83
|
+
role: 'daemon' | 'device';
|
|
84
|
+
salt: Uint8Array;
|
|
85
|
+
}
|
|
86
|
+
export declare function encodeConnSalt(m: ConnSaltMsg): Uint8Array;
|
|
87
|
+
export declare function decodeConnSalt(p: Uint8Array): ConnSaltMsg;
|
|
88
|
+
/**
|
|
89
|
+
* True iff a frame's payload self-describes as the unsealed ConnSalt disc. Only consulted for frames
|
|
90
|
+
* that already arrived on CONN_SALT_STREAM_ID — a secondary self-check, NOT the primary demux. The
|
|
91
|
+
* primary demux is the cleartext streamId (a sealed Hello on CHANNEL_STREAM_ID has uniform-random
|
|
92
|
+
* byte 0, so this byte alone is never trusted to route a streamId-0 frame).
|
|
93
|
+
*/
|
|
94
|
+
export declare function isConnSaltPayload(payload: Uint8Array): boolean;
|
|
95
|
+
export declare function encodeHello(m: HelloMeta): Uint8Array;
|
|
96
|
+
export declare function decodeHello(p: Uint8Array): HelloMeta;
|
|
97
|
+
export declare function encodeAckPayload(cumulativeBytes: number): Uint8Array;
|
|
98
|
+
export declare function decodeAckPayload(p: Uint8Array): number;
|
|
99
|
+
export declare function encodeResetPayload(code: ResetCode): Uint8Array;
|
|
100
|
+
export declare function decodeResetPayload(p: Uint8Array): ResetCode;
|
|
101
|
+
export declare function encodeWsMessage(data: Uint8Array, isText: boolean): Uint8Array;
|
|
102
|
+
export declare function decodeWsMessage(p: Uint8Array): {
|
|
103
|
+
data: Uint8Array;
|
|
104
|
+
isText: boolean;
|
|
105
|
+
};
|
|
106
|
+
export declare function encodeHttpHead(h: HttpResponseHead): Uint8Array;
|
|
107
|
+
export declare function encodeHttpBodyChunk(b: Uint8Array): Uint8Array;
|
|
108
|
+
export declare function decodeHttpData(p: Uint8Array): {
|
|
109
|
+
kind: 'head';
|
|
110
|
+
head: HttpResponseHead;
|
|
111
|
+
} | {
|
|
112
|
+
kind: 'body';
|
|
113
|
+
data: Uint8Array;
|
|
114
|
+
};
|
|
115
|
+
export declare function createStreamIdAllocator(side: 'daemon' | 'device'): () => number;
|
|
116
|
+
export type StreamState = 'idle' | 'open' | 'localClosed' | 'remoteClosed' | 'closed';
|
|
117
|
+
export interface StreamMachine {
|
|
118
|
+
state(): StreamState;
|
|
119
|
+
onRecv(kind: FrameKind): {
|
|
120
|
+
ok: true;
|
|
121
|
+
} | {
|
|
122
|
+
ok: false;
|
|
123
|
+
reset: ResetCode;
|
|
124
|
+
};
|
|
125
|
+
onSendData(): {
|
|
126
|
+
ok: true;
|
|
127
|
+
} | {
|
|
128
|
+
ok: false;
|
|
129
|
+
reset: ResetCode;
|
|
130
|
+
};
|
|
131
|
+
onLocalEnd(): void;
|
|
132
|
+
onReset(): void;
|
|
133
|
+
}
|
|
134
|
+
export declare function createStreamMachine(): StreamMachine;
|
|
135
|
+
export interface FlowController {
|
|
136
|
+
trySend(n: number): {
|
|
137
|
+
ok: true;
|
|
138
|
+
} | {
|
|
139
|
+
ok: false;
|
|
140
|
+
reason: 'WindowExhausted';
|
|
141
|
+
};
|
|
142
|
+
applyAck(cumulativeBytes: number): {
|
|
143
|
+
resumed: boolean;
|
|
144
|
+
};
|
|
145
|
+
onConsume(n: number): {
|
|
146
|
+
ackCumulative: number;
|
|
147
|
+
} | null;
|
|
148
|
+
flushAck(): {
|
|
149
|
+
ackCumulative: number;
|
|
150
|
+
};
|
|
151
|
+
isPaused(): boolean;
|
|
152
|
+
}
|
|
153
|
+
export declare function createFlowController(window?: number, ackThreshold?: number): FlowController;
|
|
154
|
+
export declare function negotiateVersion(_localHello: HelloMeta, peerHello: HelloMeta): {
|
|
155
|
+
ok: true;
|
|
156
|
+
version: number;
|
|
157
|
+
} | {
|
|
158
|
+
ok: false;
|
|
159
|
+
reset: ResetCode;
|
|
160
|
+
};
|
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
// Mux frame format + per-stream state machine + flow control + version negotiation.
|
|
2
|
+
//
|
|
3
|
+
// Runs in BOTH node and browser: no Buffer, no node-only APIs, no I/O, no timers, no crypto.
|
|
4
|
+
// Pure synchronous functions over Uint8Array.
|
|
5
|
+
//
|
|
6
|
+
// THE SEAM (R5, load-bearing): the 12-byte header this module emits via encodeHeader() is exactly
|
|
7
|
+
// the bytes remote-crypto authenticates as AEAD AAD, byte-for-byte, with zero transformation. The
|
|
8
|
+
// gateway routes on the in-the-clear streamId field; crypto reads streamId@4 and seq@8 out of the
|
|
9
|
+
// same bytes to build the nonce. So the wire layout below is a hard contract with remote-crypto.ts:
|
|
10
|
+
// off 0 (u8) version off 4 (u32be) streamId <- crypto reads this
|
|
11
|
+
// off 1 (u8) kind off 8 (u32be) seq <- crypto reads this
|
|
12
|
+
// off 2 (u16be) flags
|
|
13
|
+
//
|
|
14
|
+
// Failure contract (R4): decode of a malformed/non-canonical frame THROWS ProtocolError (carries a
|
|
15
|
+
// ResetCode). State-machine / flow-control rejections return typed results so the caller can emit a
|
|
16
|
+
// Reset frame instead of crashing the channel.
|
|
17
|
+
// R6 — single wire version: crypto owns it, protocol re-exports it. There is one version integer.
|
|
18
|
+
export { REMOTE_CRYPTO_VERSION as PROTOCOL_VERSION } from './remote-crypto.js';
|
|
19
|
+
import { REMOTE_CRYPTO_VERSION } from './remote-crypto.js';
|
|
20
|
+
export const FrameKind = {
|
|
21
|
+
Open: 0x01,
|
|
22
|
+
Data: 0x02,
|
|
23
|
+
End: 0x03,
|
|
24
|
+
Reset: 0x04,
|
|
25
|
+
Ping: 0x05,
|
|
26
|
+
Ack: 0x06,
|
|
27
|
+
};
|
|
28
|
+
export const StreamTransport = { Http: 0x01, Ws: 0x02 };
|
|
29
|
+
export const ResetCode = {
|
|
30
|
+
Normal: 0x00,
|
|
31
|
+
ProtocolError: 0x01,
|
|
32
|
+
FlowViolation: 0x02,
|
|
33
|
+
StreamRefused: 0x03,
|
|
34
|
+
VersionMismatch: 0x04,
|
|
35
|
+
InternalError: 0x05,
|
|
36
|
+
};
|
|
37
|
+
export const FLOW = { INITIAL_WINDOW: 256 * 1024, ACK_THRESHOLD: 32 * 1024 };
|
|
38
|
+
export const HEADER_BYTES = 12;
|
|
39
|
+
export const CHANNEL_STREAM_ID = 0; // reserved: sealed Hello/Ping/Ack-of-channel
|
|
40
|
+
// Reserved for the UNSEALED bilateral connection-salt exchange (M6.1). A separate id from
|
|
41
|
+
// CHANNEL_STREAM_ID so the demux branches on the cleartext streamId alone — never on a payload byte
|
|
42
|
+
// that, for a sealed channel frame, is uniform-random ciphertext (~1/256 false ConnSalt match
|
|
43
|
+
// otherwise, silently eating the binding Hello). createStreamIdAllocator never returns this id.
|
|
44
|
+
export const CONN_SALT_STREAM_ID = 0xffffffff;
|
|
45
|
+
const FLAG_FIN = 0x0001; // bit0, only meaningful on Data
|
|
46
|
+
const U32_MAX = 0xffffffff;
|
|
47
|
+
// HTTP data envelope discriminators (§2.3).
|
|
48
|
+
const HTTP_DISC_HEAD = 0x00;
|
|
49
|
+
const HTTP_DISC_BODY = 0x01;
|
|
50
|
+
// ── error type ──────────────────────────────────────────────────────────────
|
|
51
|
+
export class ProtocolError extends Error {
|
|
52
|
+
code;
|
|
53
|
+
constructor(message, code) {
|
|
54
|
+
super(message);
|
|
55
|
+
this.name = 'ProtocolError';
|
|
56
|
+
this.code = code;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ── small byte helpers (no Buffer) ────────────────────────────────────────────
|
|
60
|
+
const te = new TextEncoder();
|
|
61
|
+
const td = new TextDecoder();
|
|
62
|
+
function utf8(s) {
|
|
63
|
+
return te.encode(s);
|
|
64
|
+
}
|
|
65
|
+
function dv(b) {
|
|
66
|
+
return new DataView(b.buffer, b.byteOffset, b.byteLength);
|
|
67
|
+
}
|
|
68
|
+
function assertU32(n, name) {
|
|
69
|
+
if (!Number.isInteger(n) || n < 0 || n > U32_MAX) {
|
|
70
|
+
throw new RangeError(`${name} out of u32 range: ${n}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function knownKind(k) {
|
|
74
|
+
return (k === FrameKind.Open ||
|
|
75
|
+
k === FrameKind.Data ||
|
|
76
|
+
k === FrameKind.End ||
|
|
77
|
+
k === FrameKind.Reset ||
|
|
78
|
+
k === FrameKind.Ping ||
|
|
79
|
+
k === FrameKind.Ack);
|
|
80
|
+
}
|
|
81
|
+
function knownResetCode(c) {
|
|
82
|
+
return (c === ResetCode.Normal ||
|
|
83
|
+
c === ResetCode.ProtocolError ||
|
|
84
|
+
c === ResetCode.FlowViolation ||
|
|
85
|
+
c === ResetCode.StreamRefused ||
|
|
86
|
+
c === ResetCode.VersionMismatch ||
|
|
87
|
+
c === ResetCode.InternalError);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* bit0 (FIN) is a permitted Data flag; every other bit is reserved-MUST-be-0. So this returns true
|
|
91
|
+
* for 0x0000 and 0x0001 only. The non-Data canonicalization (where even bit0 is reserved) is
|
|
92
|
+
* enforced in decodeHeader, which knows the kind.
|
|
93
|
+
*/
|
|
94
|
+
export function isReservedFlagsClear(flags) {
|
|
95
|
+
return (flags & ~FLAG_FIN) === 0;
|
|
96
|
+
}
|
|
97
|
+
export function encodeHeader(h) {
|
|
98
|
+
if (h.version !== REMOTE_CRYPTO_VERSION) {
|
|
99
|
+
throw new RangeError(`version must be ${REMOTE_CRYPTO_VERSION}`);
|
|
100
|
+
}
|
|
101
|
+
if (!knownKind(h.kind))
|
|
102
|
+
throw new RangeError(`unknown kind: ${h.kind}`);
|
|
103
|
+
if (!Number.isInteger(h.flags) || h.flags < 0 || h.flags > 0xffff) {
|
|
104
|
+
throw new RangeError(`flags out of u16 range: ${h.flags}`);
|
|
105
|
+
}
|
|
106
|
+
// canonicalization mirrors decodeHeader so we can never EMIT a header decode would reject.
|
|
107
|
+
if (h.kind === FrameKind.Data) {
|
|
108
|
+
if (!isReservedFlagsClear(h.flags))
|
|
109
|
+
throw new RangeError('reserved flag bits set on Data frame');
|
|
110
|
+
}
|
|
111
|
+
else if (h.flags !== 0) {
|
|
112
|
+
throw new RangeError('flags must be 0 on a non-Data frame');
|
|
113
|
+
}
|
|
114
|
+
assertU32(h.streamId, 'streamId');
|
|
115
|
+
assertU32(h.seq, 'seq');
|
|
116
|
+
const out = new Uint8Array(HEADER_BYTES);
|
|
117
|
+
const view = dv(out);
|
|
118
|
+
view.setUint8(0, h.version);
|
|
119
|
+
view.setUint8(1, h.kind);
|
|
120
|
+
view.setUint16(2, h.flags);
|
|
121
|
+
view.setUint32(4, h.streamId);
|
|
122
|
+
view.setUint32(8, h.seq);
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
export function decodeHeader(bytes) {
|
|
126
|
+
if (bytes.length < HEADER_BYTES) {
|
|
127
|
+
throw new ProtocolError('header too short', ResetCode.ProtocolError);
|
|
128
|
+
}
|
|
129
|
+
const view = dv(bytes);
|
|
130
|
+
const version = view.getUint8(0);
|
|
131
|
+
// version is checked BEFORE anything else (defense-in-depth against a spliced old frame).
|
|
132
|
+
if (version !== REMOTE_CRYPTO_VERSION) {
|
|
133
|
+
throw new ProtocolError(`bad version ${version}`, ResetCode.VersionMismatch);
|
|
134
|
+
}
|
|
135
|
+
const kind = view.getUint8(1);
|
|
136
|
+
if (!knownKind(kind)) {
|
|
137
|
+
throw new ProtocolError(`unknown kind ${kind}`, ResetCode.ProtocolError);
|
|
138
|
+
}
|
|
139
|
+
const flags = view.getUint16(2);
|
|
140
|
+
// Canonical AAD: exactly one valid byte encoding per semantic header.
|
|
141
|
+
if (kind === FrameKind.Data) {
|
|
142
|
+
if (!isReservedFlagsClear(flags)) {
|
|
143
|
+
throw new ProtocolError('reserved flag bits set on Data frame', ResetCode.ProtocolError);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else if (flags !== 0) {
|
|
147
|
+
throw new ProtocolError('flags must be 0 on a non-Data frame', ResetCode.ProtocolError);
|
|
148
|
+
}
|
|
149
|
+
const streamId = view.getUint32(4);
|
|
150
|
+
const seq = view.getUint32(8);
|
|
151
|
+
return { version, kind, flags, streamId, seq };
|
|
152
|
+
}
|
|
153
|
+
// Open: [transport:u8][metaLen:u16 BE][meta:utf8 JSON]. JSON arrays keep header order + duplicates.
|
|
154
|
+
export function encodeOpenPayload(m) {
|
|
155
|
+
let meta;
|
|
156
|
+
if (m.transport === StreamTransport.Http) {
|
|
157
|
+
if (!m.http)
|
|
158
|
+
throw new RangeError('http meta required for Http transport');
|
|
159
|
+
meta = m.http;
|
|
160
|
+
}
|
|
161
|
+
else if (m.transport === StreamTransport.Ws) {
|
|
162
|
+
if (!m.ws)
|
|
163
|
+
throw new RangeError('ws meta required for Ws transport');
|
|
164
|
+
meta = m.ws;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
throw new RangeError(`unknown transport: ${m.transport}`);
|
|
168
|
+
}
|
|
169
|
+
const metaBytes = utf8(JSON.stringify(meta));
|
|
170
|
+
if (metaBytes.length > 0xffff)
|
|
171
|
+
throw new RangeError('open meta too large');
|
|
172
|
+
const out = new Uint8Array(3 + metaBytes.length);
|
|
173
|
+
out[0] = m.transport;
|
|
174
|
+
dv(out).setUint16(1, metaBytes.length);
|
|
175
|
+
out.set(metaBytes, 3);
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
export function decodeOpenPayload(p) {
|
|
179
|
+
if (p.length < 3)
|
|
180
|
+
throw new ProtocolError('open payload too short', ResetCode.ProtocolError);
|
|
181
|
+
const transport = p[0];
|
|
182
|
+
const metaLen = dv(p).getUint16(1);
|
|
183
|
+
if (p.length !== 3 + metaLen) {
|
|
184
|
+
throw new ProtocolError('open meta length mismatch', ResetCode.ProtocolError);
|
|
185
|
+
}
|
|
186
|
+
let meta;
|
|
187
|
+
try {
|
|
188
|
+
meta = JSON.parse(td.decode(p.subarray(3)));
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
throw new ProtocolError('open meta not JSON', ResetCode.ProtocolError);
|
|
192
|
+
}
|
|
193
|
+
if (transport === StreamTransport.Http) {
|
|
194
|
+
const h = meta;
|
|
195
|
+
if (typeof h.method !== 'string' ||
|
|
196
|
+
typeof h.path !== 'string' ||
|
|
197
|
+
typeof h.hasBody !== 'boolean' ||
|
|
198
|
+
!isHeaderList(h.headers)) {
|
|
199
|
+
throw new ProtocolError('bad http open meta', ResetCode.ProtocolError);
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
transport: StreamTransport.Http,
|
|
203
|
+
http: { method: h.method, path: h.path, headers: h.headers, hasBody: h.hasBody },
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (transport === StreamTransport.Ws) {
|
|
207
|
+
const w = meta;
|
|
208
|
+
if (typeof w.path !== 'string') {
|
|
209
|
+
throw new ProtocolError('bad ws open meta', ResetCode.ProtocolError);
|
|
210
|
+
}
|
|
211
|
+
if (w.subprotocol !== undefined && typeof w.subprotocol !== 'string') {
|
|
212
|
+
throw new ProtocolError('bad ws subprotocol', ResetCode.ProtocolError);
|
|
213
|
+
}
|
|
214
|
+
if (w.query !== undefined && !isHeaderList(w.query)) {
|
|
215
|
+
throw new ProtocolError('bad ws query', ResetCode.ProtocolError);
|
|
216
|
+
}
|
|
217
|
+
// exactOptionalPropertyTypes: only attach optional fields when actually present.
|
|
218
|
+
const ws = { path: w.path };
|
|
219
|
+
if (isHeaderList(w.query))
|
|
220
|
+
ws.query = w.query;
|
|
221
|
+
if (typeof w.subprotocol === 'string')
|
|
222
|
+
ws.subprotocol = w.subprotocol;
|
|
223
|
+
return { transport: StreamTransport.Ws, ws };
|
|
224
|
+
}
|
|
225
|
+
throw new ProtocolError(`unknown transport ${transport}`, ResetCode.ProtocolError);
|
|
226
|
+
}
|
|
227
|
+
function isHeaderList(v) {
|
|
228
|
+
if (!Array.isArray(v))
|
|
229
|
+
return false;
|
|
230
|
+
for (const pair of v) {
|
|
231
|
+
if (!Array.isArray(pair) || pair.length !== 2)
|
|
232
|
+
return false;
|
|
233
|
+
if (typeof pair[0] !== 'string' || typeof pair[1] !== 'string')
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
// ── channel handshake (M6.1): unsealed bilateral conn-salt + sealed binding Hello ─────────────
|
|
239
|
+
//
|
|
240
|
+
// CHANNEL_DISC self-describes each channel-open frame's payload byte 0. It is NOT the demux
|
|
241
|
+
// discriminator — the engines branch on the cleartext streamId (CONN_SALT_STREAM_ID vs
|
|
242
|
+
// CHANNEL_STREAM_ID), since a sealed Hello's byte 0 is uniform-random ciphertext and can't be
|
|
243
|
+
// trusted. The disc is a cheap self-check after the streamId already selected the frame type.
|
|
244
|
+
export const CHANNEL_DISC = { ConnSalt: 0x01, Hello: 0x02 };
|
|
245
|
+
// Wire: [disc:0x01][role:u8 (0x01 daemon | 0x02 device)][salt:32 raw]. UNSEALED — rides cleartext on
|
|
246
|
+
// CONN_SALT_STREAM_ID. Total 34 bytes. Canonical: decode THROWS ProtocolError on any deviation (R4).
|
|
247
|
+
const CONN_ROLE = { daemon: 0x01, device: 0x02 };
|
|
248
|
+
const CONN_SALT_PAYLOAD_LEN = 34;
|
|
249
|
+
export function encodeConnSalt(m) {
|
|
250
|
+
if (m.role !== 'daemon' && m.role !== 'device')
|
|
251
|
+
throw new RangeError(`bad role: ${m.role}`);
|
|
252
|
+
if (m.salt.length !== 32)
|
|
253
|
+
throw new RangeError(`conn salt must be 32 bytes, got ${m.salt.length}`);
|
|
254
|
+
const out = new Uint8Array(2 + 32);
|
|
255
|
+
out[0] = CHANNEL_DISC.ConnSalt;
|
|
256
|
+
out[1] = m.role === 'daemon' ? CONN_ROLE.daemon : CONN_ROLE.device;
|
|
257
|
+
out.set(m.salt, 2);
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
260
|
+
export function decodeConnSalt(p) {
|
|
261
|
+
if (p.length !== CONN_SALT_PAYLOAD_LEN) {
|
|
262
|
+
throw new ProtocolError('conn salt must be 34 bytes', ResetCode.ProtocolError);
|
|
263
|
+
}
|
|
264
|
+
if (p[0] !== CHANNEL_DISC.ConnSalt) {
|
|
265
|
+
throw new ProtocolError('not a ConnSalt frame', ResetCode.ProtocolError);
|
|
266
|
+
}
|
|
267
|
+
const roleByte = p[1];
|
|
268
|
+
const role = roleByte === CONN_ROLE.daemon ? 'daemon' : roleByte === CONN_ROLE.device ? 'device' : null;
|
|
269
|
+
if (role === null)
|
|
270
|
+
throw new ProtocolError('bad conn salt role', ResetCode.ProtocolError);
|
|
271
|
+
return { role, salt: p.slice(2) };
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* True iff a frame's payload self-describes as the unsealed ConnSalt disc. Only consulted for frames
|
|
275
|
+
* that already arrived on CONN_SALT_STREAM_ID — a secondary self-check, NOT the primary demux. The
|
|
276
|
+
* primary demux is the cleartext streamId (a sealed Hello on CHANNEL_STREAM_ID has uniform-random
|
|
277
|
+
* byte 0, so this byte alone is never trusted to route a streamId-0 frame).
|
|
278
|
+
*/
|
|
279
|
+
export function isConnSaltPayload(payload) {
|
|
280
|
+
return payload.length >= 1 && payload[0] === CHANNEL_DISC.ConnSalt;
|
|
281
|
+
}
|
|
282
|
+
export function encodeHello(m) {
|
|
283
|
+
if (m.role !== 'daemon' && m.role !== 'device')
|
|
284
|
+
throw new RangeError(`bad role: ${m.role}`);
|
|
285
|
+
const json = utf8(JSON.stringify(m));
|
|
286
|
+
const out = new Uint8Array(1 + json.length);
|
|
287
|
+
out[0] = CHANNEL_DISC.Hello;
|
|
288
|
+
out.set(json, 1);
|
|
289
|
+
return out;
|
|
290
|
+
}
|
|
291
|
+
export function decodeHello(p) {
|
|
292
|
+
if (p.length < 1 || p[0] !== CHANNEL_DISC.Hello) {
|
|
293
|
+
throw new ProtocolError('hello missing disc', ResetCode.ProtocolError);
|
|
294
|
+
}
|
|
295
|
+
let raw;
|
|
296
|
+
try {
|
|
297
|
+
raw = JSON.parse(td.decode(p.subarray(1)));
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
throw new ProtocolError('hello not JSON', ResetCode.ProtocolError);
|
|
301
|
+
}
|
|
302
|
+
const o = raw;
|
|
303
|
+
if (typeof o.protocolVersion !== 'number' ||
|
|
304
|
+
(o.role !== 'daemon' && o.role !== 'device') ||
|
|
305
|
+
typeof o.daemonId !== 'string' ||
|
|
306
|
+
typeof o.deviceId !== 'string') {
|
|
307
|
+
throw new ProtocolError('bad hello meta', ResetCode.ProtocolError);
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
protocolVersion: o.protocolVersion,
|
|
311
|
+
role: o.role,
|
|
312
|
+
daemonId: o.daemonId,
|
|
313
|
+
deviceId: o.deviceId,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
export function encodeAckPayload(cumulativeBytes) {
|
|
317
|
+
assertU32(cumulativeBytes, 'cumulativeBytes');
|
|
318
|
+
const out = new Uint8Array(4);
|
|
319
|
+
dv(out).setUint32(0, cumulativeBytes);
|
|
320
|
+
return out;
|
|
321
|
+
}
|
|
322
|
+
export function decodeAckPayload(p) {
|
|
323
|
+
if (p.length !== 4)
|
|
324
|
+
throw new ProtocolError('ack payload must be 4 bytes', ResetCode.ProtocolError);
|
|
325
|
+
return dv(p).getUint32(0);
|
|
326
|
+
}
|
|
327
|
+
export function encodeResetPayload(code) {
|
|
328
|
+
if (!knownResetCode(code))
|
|
329
|
+
throw new RangeError(`unknown reset code: ${code}`);
|
|
330
|
+
return Uint8Array.of(code);
|
|
331
|
+
}
|
|
332
|
+
export function decodeResetPayload(p) {
|
|
333
|
+
if (p.length !== 1)
|
|
334
|
+
throw new ProtocolError('reset payload must be 1 byte', ResetCode.ProtocolError);
|
|
335
|
+
const code = p[0];
|
|
336
|
+
if (!knownResetCode(code)) {
|
|
337
|
+
throw new ProtocolError(`unknown reset code ${code}`, ResetCode.ProtocolError);
|
|
338
|
+
}
|
|
339
|
+
return code;
|
|
340
|
+
}
|
|
341
|
+
// WS message envelope: [isText:u8 (0x00 bin | 0x01 text)][data...] — binary-safe, no coercion.
|
|
342
|
+
export function encodeWsMessage(data, isText) {
|
|
343
|
+
const out = new Uint8Array(1 + data.length);
|
|
344
|
+
out[0] = isText ? 0x01 : 0x00;
|
|
345
|
+
out.set(data, 1);
|
|
346
|
+
return out;
|
|
347
|
+
}
|
|
348
|
+
export function decodeWsMessage(p) {
|
|
349
|
+
if (p.length < 1)
|
|
350
|
+
throw new ProtocolError('ws message too short', ResetCode.ProtocolError);
|
|
351
|
+
const flag = p[0];
|
|
352
|
+
if (flag !== 0x00 && flag !== 0x01) {
|
|
353
|
+
throw new ProtocolError('bad ws isText flag', ResetCode.ProtocolError);
|
|
354
|
+
}
|
|
355
|
+
// copy out so the caller owns the bytes independent of the framing buffer
|
|
356
|
+
return { data: p.slice(1), isText: flag === 0x01 };
|
|
357
|
+
}
|
|
358
|
+
// HTTP data envelope: [disc:u8][...]; head = utf8 JSON {status, headers}, body = raw bytes.
|
|
359
|
+
export function encodeHttpHead(h) {
|
|
360
|
+
if (!Number.isInteger(h.status) || h.status < 0 || h.status > 0xffff) {
|
|
361
|
+
throw new RangeError(`bad http status: ${h.status}`);
|
|
362
|
+
}
|
|
363
|
+
const json = utf8(JSON.stringify({ status: h.status, headers: h.headers }));
|
|
364
|
+
const out = new Uint8Array(1 + json.length);
|
|
365
|
+
out[0] = HTTP_DISC_HEAD;
|
|
366
|
+
out.set(json, 1);
|
|
367
|
+
return out;
|
|
368
|
+
}
|
|
369
|
+
export function encodeHttpBodyChunk(b) {
|
|
370
|
+
const out = new Uint8Array(1 + b.length);
|
|
371
|
+
out[0] = HTTP_DISC_BODY;
|
|
372
|
+
out.set(b, 1);
|
|
373
|
+
return out;
|
|
374
|
+
}
|
|
375
|
+
export function decodeHttpData(p) {
|
|
376
|
+
if (p.length < 1)
|
|
377
|
+
throw new ProtocolError('http data too short', ResetCode.ProtocolError);
|
|
378
|
+
const disc = p[0];
|
|
379
|
+
if (disc === HTTP_DISC_HEAD) {
|
|
380
|
+
let raw;
|
|
381
|
+
try {
|
|
382
|
+
raw = JSON.parse(td.decode(p.subarray(1)));
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
throw new ProtocolError('http head not JSON', ResetCode.ProtocolError);
|
|
386
|
+
}
|
|
387
|
+
const o = raw;
|
|
388
|
+
if (typeof o.status !== 'number' || !isHeaderList(o.headers)) {
|
|
389
|
+
throw new ProtocolError('bad http head', ResetCode.ProtocolError);
|
|
390
|
+
}
|
|
391
|
+
return { kind: 'head', head: { status: o.status, headers: o.headers } };
|
|
392
|
+
}
|
|
393
|
+
if (disc === HTTP_DISC_BODY) {
|
|
394
|
+
return { kind: 'body', data: p.slice(1) };
|
|
395
|
+
}
|
|
396
|
+
throw new ProtocolError(`unknown http disc ${disc}`, ResetCode.ProtocolError);
|
|
397
|
+
}
|
|
398
|
+
// ── stream id allocator (daemon even, device odd, skip the reserved channel id) ─
|
|
399
|
+
export function createStreamIdAllocator(side) {
|
|
400
|
+
if (side !== 'daemon' && side !== 'device')
|
|
401
|
+
throw new RangeError(`bad side: ${side}`);
|
|
402
|
+
// daemon: 2,4,6... device: 1,3,5... — 0 is reserved (CHANNEL_STREAM_ID), never returned.
|
|
403
|
+
// CONN_SALT_STREAM_ID (0xffffffff, odd) is also reserved: skip it so the device side never emits
|
|
404
|
+
// it as a data-stream id, keeping the salt-vs-data demux unambiguous.
|
|
405
|
+
let next = side === 'daemon' ? 2 : 1;
|
|
406
|
+
return () => {
|
|
407
|
+
if (next === CONN_SALT_STREAM_ID)
|
|
408
|
+
next += 2;
|
|
409
|
+
const id = next;
|
|
410
|
+
next += 2;
|
|
411
|
+
if (next > U32_MAX)
|
|
412
|
+
throw new RangeError('stream id space exhausted; re-handshake required');
|
|
413
|
+
return id;
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
const OK = { ok: true };
|
|
417
|
+
function bad(reset = ResetCode.ProtocolError) {
|
|
418
|
+
return { ok: false, reset };
|
|
419
|
+
}
|
|
420
|
+
export function createStreamMachine() {
|
|
421
|
+
let state = 'idle';
|
|
422
|
+
return {
|
|
423
|
+
state: () => state,
|
|
424
|
+
onRecv(kind) {
|
|
425
|
+
// Reset is always accepted as teardown (idempotent once closed).
|
|
426
|
+
if (kind === FrameKind.Reset) {
|
|
427
|
+
state = 'closed';
|
|
428
|
+
return OK;
|
|
429
|
+
}
|
|
430
|
+
switch (state) {
|
|
431
|
+
case 'idle':
|
|
432
|
+
if (kind === FrameKind.Open) {
|
|
433
|
+
state = 'open';
|
|
434
|
+
return OK;
|
|
435
|
+
}
|
|
436
|
+
// Data/End before Open is illegal — no lazy auto-open.
|
|
437
|
+
return bad();
|
|
438
|
+
case 'open':
|
|
439
|
+
if (kind === FrameKind.Data)
|
|
440
|
+
return OK;
|
|
441
|
+
if (kind === FrameKind.End) {
|
|
442
|
+
state = 'remoteClosed';
|
|
443
|
+
return OK;
|
|
444
|
+
}
|
|
445
|
+
// duplicate Open is a collision
|
|
446
|
+
return bad();
|
|
447
|
+
case 'localClosed':
|
|
448
|
+
// we've half-closed our side; inbound Data still flows until peer End.
|
|
449
|
+
if (kind === FrameKind.Data)
|
|
450
|
+
return OK;
|
|
451
|
+
if (kind === FrameKind.End) {
|
|
452
|
+
state = 'closed';
|
|
453
|
+
return OK;
|
|
454
|
+
}
|
|
455
|
+
return bad();
|
|
456
|
+
case 'remoteClosed':
|
|
457
|
+
// peer already sent End — any further Data/End/Open is use-after-close.
|
|
458
|
+
return bad();
|
|
459
|
+
case 'closed':
|
|
460
|
+
return bad();
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
onSendData() {
|
|
464
|
+
if (state === 'open' || state === 'remoteClosed')
|
|
465
|
+
return OK;
|
|
466
|
+
return bad();
|
|
467
|
+
},
|
|
468
|
+
onLocalEnd() {
|
|
469
|
+
if (state === 'open')
|
|
470
|
+
state = 'localClosed';
|
|
471
|
+
else if (state === 'remoteClosed')
|
|
472
|
+
state = 'closed';
|
|
473
|
+
},
|
|
474
|
+
onReset() {
|
|
475
|
+
state = 'closed';
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
export function createFlowController(window = FLOW.INITIAL_WINDOW, ackThreshold = FLOW.ACK_THRESHOLD) {
|
|
480
|
+
// sender side
|
|
481
|
+
let sentBytes = 0;
|
|
482
|
+
let acked = 0;
|
|
483
|
+
// receiver side
|
|
484
|
+
let consumed = 0;
|
|
485
|
+
let lastAckedAt = 0;
|
|
486
|
+
const unacked = () => sentBytes - acked;
|
|
487
|
+
const paused = () => unacked() >= window;
|
|
488
|
+
return {
|
|
489
|
+
trySend(n) {
|
|
490
|
+
if (unacked() + n > window)
|
|
491
|
+
return { ok: false, reason: 'WindowExhausted' };
|
|
492
|
+
sentBytes += n;
|
|
493
|
+
return OK;
|
|
494
|
+
},
|
|
495
|
+
applyAck(cumulativeBytes) {
|
|
496
|
+
const wasPaused = paused();
|
|
497
|
+
// cumulative, never a delta: ignore a stale/dup ack at or below current acked.
|
|
498
|
+
if (cumulativeBytes <= acked)
|
|
499
|
+
return { resumed: false };
|
|
500
|
+
// clamp over-ack at sentBytes so the window can never grow past its configured size.
|
|
501
|
+
acked = Math.min(cumulativeBytes, sentBytes);
|
|
502
|
+
const resumed = wasPaused && !paused();
|
|
503
|
+
return { resumed };
|
|
504
|
+
},
|
|
505
|
+
onConsume(n) {
|
|
506
|
+
consumed += n;
|
|
507
|
+
if (consumed - lastAckedAt >= ackThreshold) {
|
|
508
|
+
lastAckedAt = consumed;
|
|
509
|
+
return { ackCumulative: consumed };
|
|
510
|
+
}
|
|
511
|
+
return null;
|
|
512
|
+
},
|
|
513
|
+
flushAck() {
|
|
514
|
+
lastAckedAt = consumed;
|
|
515
|
+
return { ackCumulative: consumed };
|
|
516
|
+
},
|
|
517
|
+
isPaused: () => paused(),
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
// ── version negotiation ────────────────────────────────────────────────────────
|
|
521
|
+
export function negotiateVersion(_localHello, peerHello) {
|
|
522
|
+
if (peerHello.protocolVersion === REMOTE_CRYPTO_VERSION) {
|
|
523
|
+
return { ok: true, version: REMOTE_CRYPTO_VERSION };
|
|
524
|
+
}
|
|
525
|
+
return { ok: false, reset: ResetCode.VersionMismatch };
|
|
526
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const MEMORY_BODY_MAX_CHARS = 4000;
|
|
2
|
+
export declare const DREAM_MEMORY_BODY_MAX_CHARS = 500;
|
|
3
|
+
export declare const DREAM_MEMORY_MAX_ADDS_PER_RUN = 10;
|
|
4
|
+
export declare const MEMORY_QUERY_MAX_CHARS = 500;
|
|
5
|
+
export declare const MEMORY_SEARCH_DEFAULT_LIMIT = 10;
|
|
6
|
+
export declare const MEMORY_SEARCH_MAX_LIMIT = 50;
|
|
7
|
+
export declare const MEMORY_TAG_MAX_CHARS = 64;
|
|
8
|
+
export declare const MEMORY_TAG_MAX_COUNT = 20;
|
|
9
|
+
export declare const MEMORY_KINDS: readonly ["fact", "preference", "decision", "pitfall", "procedure_ref"];
|
|
10
|
+
export type MemoryKind = (typeof MEMORY_KINDS)[number];
|
|
11
|
+
export declare const isMemoryKind: (value: unknown) => value is MemoryKind;
|