@skrr-ai/cli 0.1.109 → 0.1.111
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/bin/run.js +15 -1
- package/dist/base-command.d.ts +44 -1
- package/dist/base-command.js +194 -33
- package/dist/commands/actions/list.js +2 -1
- package/dist/commands/agenda/trigger/create.js +1 -1
- package/dist/commands/agenda/trigger/list.js +2 -1
- package/dist/commands/agent-groups/list.js +2 -1
- package/dist/commands/agents/actions/list.js +2 -1
- package/dist/commands/agents/always-on/status.js +5 -0
- package/dist/commands/agents/chat.js +4 -1
- package/dist/commands/agents/duplicate.js +4 -0
- package/dist/commands/agents/eval/list.js +2 -1
- package/dist/commands/agents/files/list.js +2 -1
- package/dist/commands/agents/folders/list.js +2 -1
- package/dist/commands/agents/goals/list.js +2 -1
- package/dist/commands/agents/intuitions/list.js +8 -5
- package/dist/commands/agents/list.d.ts +12 -0
- package/dist/commands/agents/list.js +45 -8
- package/dist/commands/agents/releases/known-issues/list.js +2 -1
- package/dist/commands/agents/releases/list.js +5 -1
- package/dist/commands/agents/releases/trusted-publishers/list.js +2 -1
- package/dist/commands/agents/roles/list.js +2 -1
- package/dist/commands/agents/skills/list.js +2 -1
- package/dist/commands/agents/todos/list.js +2 -1
- package/dist/commands/agents/triggers/create.js +1 -1
- package/dist/commands/agents/triggers/list.js +2 -1
- package/dist/commands/agents/triggers/update.js +1 -1
- package/dist/commands/agents/update.d.ts +11 -0
- package/dist/commands/agents/update.js +58 -2
- package/dist/commands/api-keys/list.js +2 -1
- package/dist/commands/apps/channel.d.ts +20 -0
- package/dist/commands/apps/channel.js +64 -0
- package/dist/commands/apps/check-draft.d.ts +12 -0
- package/dist/commands/apps/check-draft.js +41 -0
- package/dist/commands/apps/check.d.ts +42 -0
- package/dist/commands/apps/check.js +91 -0
- package/dist/commands/apps/create.d.ts +15 -0
- package/dist/commands/apps/create.js +59 -0
- package/dist/commands/apps/data/put.d.ts +18 -0
- package/dist/commands/apps/data/put.js +72 -0
- package/dist/commands/apps/data/query.d.ts +20 -0
- package/dist/commands/apps/data/query.js +88 -0
- package/dist/commands/apps/disclosure.d.ts +16 -0
- package/dist/commands/apps/disclosure.js +71 -0
- package/dist/commands/apps/file/cat.d.ts +15 -0
- package/dist/commands/apps/file/cat.js +50 -0
- package/dist/commands/apps/file/ls.d.ts +13 -0
- package/dist/commands/apps/file/ls.js +47 -0
- package/dist/commands/apps/file/mv.d.ts +15 -0
- package/dist/commands/apps/file/mv.js +49 -0
- package/dist/commands/apps/file/rm.d.ts +15 -0
- package/dist/commands/apps/file/rm.js +53 -0
- package/dist/commands/apps/file/write.d.ts +17 -0
- package/dist/commands/apps/file/write.js +81 -0
- package/dist/commands/apps/install.d.ts +19 -0
- package/dist/commands/apps/install.js +136 -0
- package/dist/commands/apps/installations/list.d.ts +11 -0
- package/dist/commands/apps/installations/list.js +49 -0
- package/dist/commands/apps/installations/show.d.ts +12 -0
- package/dist/commands/apps/installations/show.js +61 -0
- package/dist/commands/apps/layout/set.d.ts +11 -0
- package/dist/commands/apps/layout/set.js +125 -0
- package/dist/commands/apps/layout/show.d.ts +9 -0
- package/dist/commands/apps/layout/show.js +33 -0
- package/dist/commands/apps/list.d.ts +10 -0
- package/dist/commands/apps/list.js +45 -0
- package/dist/commands/apps/logs.d.ts +13 -0
- package/dist/commands/apps/logs.js +55 -0
- package/dist/commands/apps/preview.d.ts +12 -0
- package/dist/commands/apps/preview.js +39 -0
- package/dist/commands/apps/publish/propose.d.ts +14 -0
- package/dist/commands/apps/publish/propose.js +45 -0
- package/dist/commands/apps/pull.d.ts +14 -0
- package/dist/commands/apps/pull.js +56 -0
- package/dist/commands/apps/push.d.ts +15 -0
- package/dist/commands/apps/push.js +75 -0
- package/dist/commands/apps/reconsent.d.ts +13 -0
- package/dist/commands/apps/reconsent.js +67 -0
- package/dist/commands/apps/report.d.ts +20 -0
- package/dist/commands/apps/report.js +63 -0
- package/dist/commands/apps/resume.d.ts +12 -0
- package/dist/commands/apps/resume.js +36 -0
- package/dist/commands/apps/settings/set.d.ts +13 -0
- package/dist/commands/apps/settings/set.js +54 -0
- package/dist/commands/apps/settings/show.d.ts +11 -0
- package/dist/commands/apps/settings/show.js +31 -0
- package/dist/commands/apps/show.d.ts +12 -0
- package/dist/commands/apps/show.js +49 -0
- package/dist/commands/apps/suspend.d.ts +12 -0
- package/dist/commands/apps/suspend.js +35 -0
- package/dist/commands/apps/uninstall.d.ts +13 -0
- package/dist/commands/apps/uninstall.js +43 -0
- package/dist/commands/apps/upgrade.d.ts +14 -0
- package/dist/commands/apps/upgrade.js +49 -0
- package/dist/commands/apps/version/create.d.ts +14 -0
- package/dist/commands/apps/version/create.js +53 -0
- package/dist/commands/apps/version/show.d.ts +12 -0
- package/dist/commands/apps/version/show.js +39 -0
- package/dist/commands/apps/versions.d.ts +12 -0
- package/dist/commands/apps/versions.js +40 -0
- package/dist/commands/apps/webhooks/list.d.ts +12 -0
- package/dist/commands/apps/webhooks/list.js +47 -0
- package/dist/commands/characters/list.js +2 -1
- package/dist/commands/chats/files/list.js +2 -1
- package/dist/commands/chats/folders/list.js +2 -1
- package/dist/commands/chats/list.js +2 -1
- package/dist/commands/chats/spaces/list.js +2 -1
- package/dist/commands/chats/widgets/list.js +2 -1
- package/dist/commands/code/jobs/list.js +4 -1
- package/dist/commands/commerce/incidents/list.js +2 -1
- package/dist/commands/commitments/accounting.js +3 -0
- package/dist/commands/commitments/action-proposals.d.ts +8 -0
- package/dist/commands/commitments/action-proposals.js +17 -2
- package/dist/commands/commitments/cost.d.ts +11 -0
- package/dist/commands/commitments/cost.js +25 -0
- package/dist/commands/commitments/create.js +6 -1
- package/dist/commands/commitments/endpoints/list.js +2 -1
- package/dist/commands/commitments/links/list.js +2 -1
- package/dist/commands/commitments/list.js +2 -1
- package/dist/commands/commitments/liveness.d.ts +30 -0
- package/dist/commands/commitments/liveness.js +22 -5
- package/dist/commands/commitments/pack/list.js +2 -1
- package/dist/commands/commitments/preflight.js +6 -2
- package/dist/commands/commitments/update.js +10 -1
- package/dist/commands/compass/list.js +2 -1
- package/dist/commands/context.js +7 -1
- package/dist/commands/convos/list.js +3 -2
- package/dist/commands/daemon/install.js +17 -1
- package/dist/commands/daemon/login.js +14 -0
- package/dist/commands/dm/list.js +2 -1
- package/dist/commands/dm/work.d.ts +19 -0
- package/dist/commands/dm/work.js +54 -0
- package/dist/commands/feeds/list.js +2 -1
- package/dist/commands/followups/list.js +2 -1
- package/dist/commands/followups/plans/cancel.d.ts +13 -0
- package/dist/commands/followups/plans/cancel.js +26 -0
- package/dist/commands/followups/plans/create.d.ts +11 -0
- package/dist/commands/followups/plans/create.js +35 -0
- package/dist/commands/followups/plans/list.d.ts +13 -0
- package/dist/commands/followups/plans/list.js +50 -0
- package/dist/commands/followups/plans/observability.d.ts +11 -0
- package/dist/commands/followups/plans/observability.js +46 -0
- package/dist/commands/followups/plans/revise.d.ts +13 -0
- package/dist/commands/followups/plans/revise.js +35 -0
- package/dist/commands/followups/plans/show.d.ts +11 -0
- package/dist/commands/followups/plans/show.js +32 -0
- package/dist/commands/goals/key-results/list.js +2 -1
- package/dist/commands/goals/labels/list.js +3 -2
- package/dist/commands/goals/list.js +3 -2
- package/dist/commands/grants/list.js +2 -1
- package/dist/commands/harnesses/grants/list.js +2 -1
- package/dist/commands/harnesses/leases/list.js +2 -1
- package/dist/commands/harnesses/list.js +10 -1
- package/dist/commands/harnesses/prune.d.ts +26 -0
- package/dist/commands/harnesses/prune.js +172 -0
- package/dist/commands/ingress/list.js +2 -1
- package/dist/commands/initiatives/list.js +2 -1
- package/dist/commands/instruction-blocks/list.js +2 -1
- package/dist/commands/instructions/list.js +2 -1
- package/dist/commands/integrations/connections/list.js +2 -1
- package/dist/commands/integrations/tools/list.js +2 -1
- package/dist/commands/labels/list.js +3 -2
- package/dist/commands/learning/adapters.d.ts +16 -0
- package/dist/commands/learning/adapters.js +44 -0
- package/dist/commands/login.js +11 -0
- package/dist/commands/machines/dedicated/list.js +2 -1
- package/dist/commands/machines/hosted/list.js +2 -1
- package/dist/commands/machines/list.js +2 -1
- package/dist/commands/machines/show.js +5 -2
- package/dist/commands/measures/list.js +2 -1
- package/dist/commands/memory/list.js +2 -1
- package/dist/commands/memory/proposals/list.js +2 -1
- package/dist/commands/memory/stores/list.js +2 -1
- package/dist/commands/memory/topics/list.js +2 -1
- package/dist/commands/memory/versions/list.js +2 -1
- package/dist/commands/messages/list.js +2 -1
- package/dist/commands/northstars/intents/list.js +2 -1
- package/dist/commands/northstars/list.js +2 -1
- package/dist/commands/northstars/recommendations/list.js +2 -1
- package/dist/commands/outbox/list.js +2 -1
- package/dist/commands/profiles/list.js +2 -1
- package/dist/commands/projects/docs/list.js +8 -1
- package/dist/commands/projects/updates/list.js +2 -1
- package/dist/commands/proposals/list.js +2 -1
- package/dist/commands/requests/comments/list.js +2 -1
- package/dist/commands/requests/list.js +2 -1
- package/dist/commands/shares/list.js +2 -1
- package/dist/commands/shortcuts/list.js +2 -1
- package/dist/commands/signals/monitors/list.js +2 -1
- package/dist/commands/signals/schemas/list.js +2 -1
- package/dist/commands/signals/sources/list.js +2 -1
- package/dist/commands/space-directory-views/list.js +2 -1
- package/dist/commands/spaces/actions/list.js +4 -3
- package/dist/commands/spaces/briefs/list.js +2 -1
- package/dist/commands/spaces/cycles/list.js +2 -1
- package/dist/commands/spaces/files/folders/list.js +2 -1
- package/dist/commands/spaces/files/list.js +3 -2
- package/dist/commands/spaces/heartbeats/list.js +3 -2
- package/dist/commands/spaces/labels/list.js +3 -2
- package/dist/commands/spaces/list.d.ts +3 -18
- package/dist/commands/spaces/list.js +28 -35
- package/dist/commands/spaces/live/cards/list.js +2 -1
- package/dist/commands/spaces/members/list.d.ts +1 -0
- package/dist/commands/spaces/members/list.js +4 -1
- package/dist/commands/spaces/show.js +2 -2
- package/dist/commands/spaces/skills/list.js +6 -2
- package/dist/commands/spaces/states/list.js +2 -1
- package/dist/commands/spaces/views/list.js +2 -1
- package/dist/commands/spaces/widgets/list.js +3 -2
- package/dist/commands/spaces/workflow-templates/list.js +2 -1
- package/dist/commands/spaces/workflows/fixtures/list.js +2 -1
- package/dist/commands/spaces/workflows/list.js +3 -2
- package/dist/commands/spaces/workflows/proposals/list.js +2 -1
- package/dist/commands/spaces/workflows/start.js +3 -1
- package/dist/commands/spaces/workflows/triggers/list.js +2 -1
- package/dist/commands/spaces/workflows/validate.js +12 -2
- package/dist/commands/store/acquisitions/list.js +2 -1
- package/dist/commands/store/admissions/list.js +17 -1
- package/dist/commands/store/advisories/list.js +2 -1
- package/dist/commands/store/follows/list.js +2 -1
- package/dist/commands/store/publishers/domains/list.js +2 -1
- package/dist/commands/store/reports/list.js +2 -1
- package/dist/commands/subscriptions/list.js +2 -1
- package/dist/commands/tasks/actionability.js +7 -30
- package/dist/commands/tasks/activity.js +14 -8
- package/dist/commands/tasks/approvals/list.js +2 -1
- package/dist/commands/tasks/assign.d.ts +1 -0
- package/dist/commands/tasks/assign.js +43 -7
- package/dist/commands/tasks/attachments/list.js +2 -1
- package/dist/commands/tasks/chat/send.js +34 -0
- package/dist/commands/tasks/comments/add.js +6 -1
- package/dist/commands/tasks/comments/list.js +2 -1
- package/dist/commands/tasks/complete.js +26 -2
- package/dist/commands/tasks/continue.d.ts +18 -0
- package/dist/commands/tasks/continue.js +54 -0
- package/dist/commands/tasks/create-tree.d.ts +5 -0
- package/dist/commands/tasks/create-tree.js +399 -219
- package/dist/commands/tasks/create.d.ts +1 -0
- package/dist/commands/tasks/create.js +63 -11
- package/dist/commands/tasks/deliverable/add.js +10 -3
- package/dist/commands/tasks/deliverable/list.js +2 -1
- package/dist/commands/tasks/events/list.js +2 -1
- package/dist/commands/tasks/execution-state.d.ts +12 -0
- package/dist/commands/tasks/execution-state.js +28 -0
- package/dist/commands/tasks/expectations/assess.js +40 -5
- package/dist/commands/tasks/guide.d.ts +10 -0
- package/dist/commands/tasks/guide.js +20 -0
- package/dist/commands/tasks/labels/list.js +2 -1
- package/dist/commands/tasks/list.d.ts +19 -0
- package/dist/commands/tasks/list.js +103 -6
- package/dist/commands/tasks/move.js +10 -2
- package/dist/commands/tasks/preflight.d.ts +14 -0
- package/dist/commands/tasks/preflight.js +77 -0
- package/dist/commands/tasks/rearm-recurrence.js +22 -3
- package/dist/commands/tasks/resource/list.js +2 -1
- package/dist/commands/tasks/result/submit.js +10 -1
- package/dist/commands/tasks/review.js +6 -1
- package/dist/commands/tasks/revisions.d.ts +2 -0
- package/dist/commands/tasks/revisions.js +8 -1
- package/dist/commands/tasks/show.d.ts +8 -0
- package/dist/commands/tasks/show.js +81 -43
- package/dist/commands/tasks/start.d.ts +1 -0
- package/dist/commands/tasks/start.js +35 -0
- package/dist/commands/tasks/templates/list.js +2 -1
- package/dist/commands/tasks/timeline.d.ts +5 -0
- package/dist/commands/tasks/timeline.js +9 -1
- package/dist/commands/tasks/unschedule.js +5 -1
- package/dist/commands/tasks/update.d.ts +1 -0
- package/dist/commands/tasks/update.js +36 -3
- package/dist/commands/tasks/updates/add.js +6 -1
- package/dist/commands/tasks/updates/list.js +2 -1
- package/dist/commands/tasks/upsert.d.ts +1 -0
- package/dist/commands/tasks/upsert.js +8 -1
- package/dist/commands/token/list.js +2 -1
- package/dist/commands/tokens/list.js +2 -1
- package/dist/commands/tones/list.js +4 -2
- package/dist/commands/triggers/audit.js +12 -3
- package/dist/commands/triggers/create.js +1 -1
- package/dist/commands/triggers/fire-detail.d.ts +7 -0
- package/dist/commands/triggers/fire-detail.js +30 -12
- package/dist/commands/triggers/fire.js +13 -3
- package/dist/commands/triggers/list.js +2 -1
- package/dist/commands/triggers/parse-intent.js +1 -1
- package/dist/commands/triggers/update.js +1 -1
- package/dist/commands/views/list.js +2 -1
- package/dist/commands/webhooks/list.js +2 -1
- package/dist/commands/whoami.js +1 -1
- package/dist/commands/widgets/list.js +2 -1
- package/dist/commands/widgets/save-as-app.d.ts +13 -0
- package/dist/commands/widgets/save-as-app.js +65 -0
- package/dist/commands/work-views/list.js +2 -1
- package/dist/commands/worklog/list.js +2 -1
- package/dist/commands/workspaces/grants.js +1 -4
- package/dist/commands/workspaces/list.js +3 -2
- package/dist/commands/workspaces/members.d.ts +1 -0
- package/dist/commands/workspaces/members.js +10 -7
- package/dist/generated/managed-instruction-guides.json +2 -2
- package/dist/help.js +7 -0
- package/dist/lib/agent-proactive-baseline.d.ts +9 -0
- package/dist/lib/agent-proactive-baseline.js +44 -0
- package/dist/lib/agentic-stream.d.ts +4 -1
- package/dist/lib/agentic-stream.js +29 -4
- package/dist/lib/appData.d.ts +75 -0
- package/dist/lib/appData.js +274 -0
- package/dist/lib/appInstallations.d.ts +117 -0
- package/dist/lib/appInstallations.js +960 -0
- package/dist/lib/appSettings.d.ts +3 -0
- package/dist/lib/appSettings.js +71 -0
- package/dist/lib/appWebhooks.d.ts +7 -0
- package/dist/lib/appWebhooks.js +59 -0
- package/dist/lib/apps-command.d.ts +44 -0
- package/dist/lib/apps-command.js +164 -0
- package/dist/lib/apps.d.ts +45 -0
- package/dist/lib/apps.js +148 -0
- package/dist/lib/appsCheck.d.ts +12 -0
- package/dist/lib/appsCheck.js +173 -0
- package/dist/lib/appsFs.d.ts +58 -0
- package/dist/lib/appsFs.js +384 -0
- package/dist/lib/auth-failure.d.ts +20 -0
- package/dist/lib/auth-failure.js +40 -3
- package/dist/lib/cli-installers.d.ts +9 -2
- package/dist/lib/command-miss.js +107 -0
- package/dist/lib/commitment-loop-status.js +25 -3
- package/dist/lib/commitment-product.js +5 -2
- package/dist/lib/commitments.d.ts +45 -3
- package/dist/lib/commitments.js +139 -41
- package/dist/lib/compasses.d.ts +4 -0
- package/dist/lib/compasses.js +11 -0
- package/dist/lib/daemon-machine-identity-copy.d.ts +14 -0
- package/dist/lib/daemon-machine-identity-copy.js +27 -0
- package/dist/lib/daemon-machine-identity.d.ts +27 -0
- package/dist/lib/daemon-machine-identity.js +61 -0
- package/dist/lib/daemon-setup.js +7 -7
- package/dist/lib/daemonHandoff.d.ts +19 -1
- package/dist/lib/daemonHandoff.js +62 -2
- package/dist/lib/dedicated-ssh.d.ts +2 -0
- package/dist/lib/dedicated-ssh.js +98 -28
- package/dist/lib/harnesses.d.ts +71 -0
- package/dist/lib/harnesses.js +70 -0
- package/dist/lib/json-output.d.ts +33 -0
- package/dist/lib/json-output.js +37 -0
- package/dist/lib/list-output.d.ts +9 -4
- package/dist/lib/list-output.js +38 -9
- package/dist/lib/lookbackPlans.d.ts +13 -0
- package/dist/lib/lookbackPlans.js +68 -0
- package/dist/lib/machines.d.ts +27 -6
- package/dist/lib/machines.js +25 -14
- package/dist/lib/member-output.d.ts +20 -0
- package/dist/lib/member-output.js +57 -0
- package/dist/lib/preflight-copy.d.ts +7 -0
- package/dist/lib/preflight-copy.js +31 -0
- package/dist/lib/profile-machine-identity-guard.js +11 -1
- package/dist/lib/roles.d.ts +2 -2
- package/dist/lib/task-admission.d.ts +9 -0
- package/dist/lib/task-admission.js +35 -0
- package/dist/lib/task-batch.d.ts +4 -0
- package/dist/lib/task-batch.js +2 -0
- package/dist/lib/task-economics.d.ts +10 -0
- package/dist/lib/task-economics.js +24 -2
- package/dist/lib/task-operations.d.ts +25 -0
- package/dist/lib/task-operations.js +123 -0
- package/dist/lib/task-preflight.d.ts +35 -0
- package/dist/lib/task-preflight.js +121 -0
- package/dist/lib/task-resource-references.d.ts +23 -0
- package/dist/lib/task-resource-references.js +119 -0
- package/dist/lib/task-spec-verification.d.ts +42 -0
- package/dist/lib/task-spec-verification.js +101 -0
- package/dist/lib/task-work.d.ts +11 -0
- package/dist/lib/task-work.js +41 -0
- package/dist/lib/task-write-attribution.d.ts +26 -0
- package/dist/lib/task-write-attribution.js +47 -0
- package/dist/lib/tasks.d.ts +13 -0
- package/dist/lib/tasks.js +61 -8
- package/dist/lib/triggers.d.ts +18 -0
- package/dist/lib/triggers.js +97 -5
- package/dist/lib/usage-discovery.d.ts +4 -0
- package/dist/lib/usage-discovery.js +14 -4
- package/dist/lib/widgetApps.d.ts +10 -0
- package/dist/lib/widgetApps.js +47 -0
- package/dist/lib/widgetStaticScan.js +25 -1
- package/dist/lib/workflow-run-view.d.ts +4 -0
- package/dist/lib/workflow-run-view.js +5 -0
- package/dist/lib/workspaces.d.ts +33 -9
- package/dist/lib/workspaces.js +19 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.d.ts +14 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.js +47 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonToolApproval.d.ts +49 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonToolApproval.js +26 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonWire.d.ts +118 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonWire.js +614 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +5 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/machineUuid.d.ts +60 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/machineUuid.js +130 -6
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refresh.d.ts +2 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refresh.js +15 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refreshClassification.d.ts +5 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refreshClassification.js +3 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/sessionRevocation.d.ts +177 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/sessionRevocation.js +484 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.d.ts +11 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.js +46 -7
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.d.ts +232 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.js +372 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/types.d.ts +17 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/types.js +12 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.d.ts +14 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.js +45 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonToolApproval.d.ts +49 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonToolApproval.js +24 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonWire.d.ts +118 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonWire.js +608 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/machineUuid.d.ts +60 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/machineUuid.js +128 -6
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refresh.d.ts +2 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refresh.js +15 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refreshClassification.d.ts +5 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refreshClassification.js +3 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/sessionRevocation.d.ts +177 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/sessionRevocation.js +472 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.d.ts +11 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.js +44 -6
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.d.ts +232 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.js +360 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/types.d.ts +17 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/types.js +12 -1
- package/dist/node_modules/@skrr-ai/auth-core/package.json +31 -1
- package/dist/node_modules/@skrr-ai/data-provider/index.js +25255 -18711
- package/docs/v1/operations.md +52 -0
- package/docs/v1/space-search.md +19 -0
- package/oclif.manifest.json +4843 -513
- package/package.json +32 -2
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemonWire.ts — the ONE declaration of every name the daemon and the API
|
|
3
|
+
* put on the wire between them, with what each name is for (OSK-16617).
|
|
4
|
+
*
|
|
5
|
+
* `computerWire.ts` proved the pattern for one family: the names live in the
|
|
6
|
+
* published package every end can import, and a boundary spec fails on a
|
|
7
|
+
* second spelling. This module generalises it to the whole daemon wire. Each
|
|
8
|
+
* entry declares:
|
|
9
|
+
*
|
|
10
|
+
* - `direction` — who sends it. `bidirectional` means both ends send AND
|
|
11
|
+
* handle the same name (`rpc:request`, the model-proxy relay);
|
|
12
|
+
* - `delivery` — `acked` when the sender learns that it arrived (a Socket.IO
|
|
13
|
+
* acknowledgement callback, or an answer event named in `answeredBy`),
|
|
14
|
+
* `fire_and_forget` otherwise;
|
|
15
|
+
* - `stability` — `stable`: every supported daemon and API speak it, and a
|
|
16
|
+
* change needs a new capability; `experimental`: newer than the fleet, or
|
|
17
|
+
* declared ahead of a speaker (`dormant` says which), and its shape may
|
|
18
|
+
* still move; `deprecated`: kept only so an older peer is heard, never
|
|
19
|
+
* newly sent;
|
|
20
|
+
* - `capability` — the capability the daemon announces before the API may
|
|
21
|
+
* send it (or before the daemon itself sends it). `null` means the event
|
|
22
|
+
* predates capability gating and every supported daemon speaks it;
|
|
23
|
+
* - `payload` — the zod schema that validates it, NAMED (an export of
|
|
24
|
+
* `@skrr-ai/data-provider`, which owns every zod schema; this module stays
|
|
25
|
+
* zod-free so the browser, React Native and a bun-compiled daemon all load
|
|
26
|
+
* it), or `unvalidated`. "This event has no schema" is a recorded fact
|
|
27
|
+
* here, counted by `scripts/daemon-wire/unvalidated-ratchet.mjs`, which
|
|
28
|
+
* lets the count fall and never rise.
|
|
29
|
+
*
|
|
30
|
+
* Who checks it:
|
|
31
|
+
*
|
|
32
|
+
* - `daemon/src/daemon-wire-registry.test.ts` parses the daemon's source and
|
|
33
|
+
* fails on an event the daemon handles or sends that is not declared here,
|
|
34
|
+
* or that it handles or sends against its declared direction;
|
|
35
|
+
* - `api/server/websocket/__tests__/daemonWireRegistry.spec.js` holds the
|
|
36
|
+
* API's SSE ingress table (`EXACT_DAEMON_INGRESS`) and its daemon-socket
|
|
37
|
+
* listeners to the same declarations. The API keeps its own table on
|
|
38
|
+
* purpose: the routing kind is server-owned, and an API booting on a stale
|
|
39
|
+
* package build must not lose routes;
|
|
40
|
+
* - `scripts/daemon-wire/generate-schema.mjs` writes
|
|
41
|
+
* `docs/protocol/daemon-wire.schema.json` from here (the Codex
|
|
42
|
+
* `generate-json-schema` analogue), and a spec fails when it is stale.
|
|
43
|
+
*
|
|
44
|
+
* Event names, never routing: a `{provider}` placeholder stands for one
|
|
45
|
+
* session-provider spelling (`daemon:{provider}:request`). Which spellings are
|
|
46
|
+
* heard is `firstPartyHarness.ts`'s and the API's `sessionProvider.js`'s
|
|
47
|
+
* decision, not this table's.
|
|
48
|
+
*/
|
|
49
|
+
import { COMPUTER_CAPABILITIES, DAEMON_COMPUTER_EVENTS, DAEMON_COMPUTER_REPORT_EVENT_KEYS, } from './computerWire.js';
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Vocabulary
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
export const DAEMON_WIRE_DIRECTIONS = [
|
|
54
|
+
'server_to_daemon',
|
|
55
|
+
'daemon_to_server',
|
|
56
|
+
'bidirectional',
|
|
57
|
+
];
|
|
58
|
+
export const DAEMON_WIRE_DELIVERIES = ['fire_and_forget', 'acked'];
|
|
59
|
+
export const DAEMON_WIRE_STABILITIES = ['stable', 'experimental', 'deprecated'];
|
|
60
|
+
/**
|
|
61
|
+
* How a name travels. `event` is its own Socket.IO / SSE event; `rpc` is a
|
|
62
|
+
* `method` inside `rpc:request`, answered on `rpc:response` — the shape SSE
|
|
63
|
+
* needs because it has no acknowledgement callback. Several older methods are
|
|
64
|
+
* still ALSO their own event for a Socket.IO daemon, and are declared once
|
|
65
|
+
* with both.
|
|
66
|
+
*/
|
|
67
|
+
export const DAEMON_WIRE_CARRIERS = ['event', 'rpc'];
|
|
68
|
+
const UNVALIDATED = Object.freeze({ kind: 'unvalidated' });
|
|
69
|
+
const EVENT = Object.freeze(['event']);
|
|
70
|
+
const RPC = Object.freeze(['rpc']);
|
|
71
|
+
const EVENT_AND_RPC = Object.freeze(['event', 'rpc']);
|
|
72
|
+
function entry(name, direction, purpose, rest = {}) {
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
name,
|
|
75
|
+
direction,
|
|
76
|
+
delivery: rest.delivery ?? 'fire_and_forget',
|
|
77
|
+
...(rest.answeredBy ? { answeredBy: rest.answeredBy } : {}),
|
|
78
|
+
stability: rest.stability ?? 'stable',
|
|
79
|
+
capability: rest.capability ?? null,
|
|
80
|
+
...(rest.serverCapability ? { serverCapability: rest.serverCapability } : {}),
|
|
81
|
+
carriers: rest.carriers ?? EVENT,
|
|
82
|
+
payload: rest.payload ?? UNVALIDATED,
|
|
83
|
+
purpose,
|
|
84
|
+
...(rest.relayedFromClient ? { relayedFromClient: true } : {}),
|
|
85
|
+
...(rest.dormant ? { dormant: rest.dormant } : {}),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const toDaemon = (name, purpose, rest) => entry(name, 'server_to_daemon', purpose, rest);
|
|
89
|
+
const toServer = (name, purpose, rest) => entry(name, 'daemon_to_server', purpose, rest);
|
|
90
|
+
// Capability strings the daemon announces for the non-computer families. They
|
|
91
|
+
// are DECLARED in the daemon (`dedicated-ssh.ts`, `dedicated-service-probe.ts`,
|
|
92
|
+
// `terminal/…`, `connection.ts` BASE_TOOLS); the daemon spec fails when one
|
|
93
|
+
// named here is not a string the daemon announces, so this is a reference to
|
|
94
|
+
// that declaration, not a second one.
|
|
95
|
+
const SSH_BRIDGE = 'ssh_bridge_v1';
|
|
96
|
+
const SSH_STREAM_RESUME = 'ssh_stream_resume_v2';
|
|
97
|
+
const SERVICES = 'services_v1';
|
|
98
|
+
const PERSISTENT_TERMINAL = 'persistent_terminal_v1';
|
|
99
|
+
const SESSION_TURN_DIFF_LIVE = 'session_turn_diff_live_v1';
|
|
100
|
+
const WORKSPACE_ISOLATION_PROBE = 'workspace_isolation_probe_v1';
|
|
101
|
+
const TOOL_RESPONSE_OUTBOX = 'tool_response_outbox_v1';
|
|
102
|
+
const SESSION_STEER = 'session_steer_v1';
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Connection, identity, liveness
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
const CONNECTION = [
|
|
107
|
+
toServer('daemon:register', 'The daemon introduces itself: identity, version, capabilities, sessions it holds.', {
|
|
108
|
+
delivery: 'acked',
|
|
109
|
+
answeredBy: 'daemon:registered',
|
|
110
|
+
}),
|
|
111
|
+
toDaemon('daemon:registered', 'The API accepted a register: the binding, `serverCaps`, and the state version the daemon reconciles against.'),
|
|
112
|
+
toServer('daemon:heartbeat', 'Liveness and runtime state, every interval. Acked once the API announced `serverCaps.ackHeartbeat`.', {
|
|
113
|
+
delivery: 'acked',
|
|
114
|
+
serverCapability: 'ackHeartbeat',
|
|
115
|
+
}),
|
|
116
|
+
toDaemon('daemon:ping:request', 'A round-trip latency probe from the API.', {
|
|
117
|
+
delivery: 'acked',
|
|
118
|
+
answeredBy: 'daemon:ping:response',
|
|
119
|
+
}),
|
|
120
|
+
toServer('daemon:ping:response', 'The answer to `daemon:ping:request`, echoing its `pingId`.'),
|
|
121
|
+
toServer('daemon:shuttingDown', 'The daemon is draining before it exits, so the API can fail over without waiting for the socket to time out.'),
|
|
122
|
+
toDaemon('server:draining', 'This API task is draining: reconnect (after jitter) to another one.'),
|
|
123
|
+
toDaemon('auth:revoked', 'The credential this socket used was revoked: stop retrying and ask the person to sign in again.'),
|
|
124
|
+
toServer('daemon:auth-failed', 'The daemon could not refresh its own credential and needs the person to sign in again.'),
|
|
125
|
+
toServer('daemon:auth-warning', "The daemon's credential expires soon."),
|
|
126
|
+
toDaemon('error:unauthorized', 'The API refused an event this daemon sent, for lack of authority, naming the event.'),
|
|
127
|
+
toDaemon('error:validation', 'The API refused an event this daemon sent as malformed, naming the event.'),
|
|
128
|
+
toDaemon('daemon:update-available', 'A newer daemon release is available, or this one is below the supported floor.'),
|
|
129
|
+
toDaemon('daemon:consent-status', "The account's consent state as the API holds it, re-sent on change."),
|
|
130
|
+
toDaemon('daemon:managed-instructions:changed', 'The managed instruction block for this machine changed: sync it into CLAUDE.md / AGENTS.md.'),
|
|
131
|
+
toServer('daemon:cost:update', 'Spend observed on a session, for the cost meter.'),
|
|
132
|
+
toServer('daemon:usage:snapshot', 'The provider usage-limit snapshot the daemon read locally.'),
|
|
133
|
+
];
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Control RPC — `rpc:request` / `rpc:response`, and the methods they carry
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
const RPC_ENVELOPE = [
|
|
138
|
+
entry('rpc:request', 'bidirectional', 'A correlated request `{id, method, payload}`; either end may ask. The method set is declared below.', {
|
|
139
|
+
delivery: 'acked',
|
|
140
|
+
answeredBy: 'rpc:response',
|
|
141
|
+
}),
|
|
142
|
+
entry('rpc:response', 'bidirectional', 'The answer to `rpc:request`, `{id, ok, result | error}`.'),
|
|
143
|
+
toServer('rpc:cancel', 'Abandon an in-flight `rpc:request` by id.', {
|
|
144
|
+
dormant: 'The API handles it (`websocket/rpc.js`); no daemon sends it, and a daemon-side call is bounded by its own timeout instead.',
|
|
145
|
+
}),
|
|
146
|
+
];
|
|
147
|
+
const RPC_METHODS = [
|
|
148
|
+
toDaemon('daemon:list-dirs', 'List directories under a path, for the working-directory picker.', {
|
|
149
|
+
delivery: 'acked',
|
|
150
|
+
carriers: EVENT_AND_RPC,
|
|
151
|
+
relayedFromClient: true,
|
|
152
|
+
}),
|
|
153
|
+
toDaemon('daemon:set-cwd', "Change the daemon's working directory.", {
|
|
154
|
+
delivery: 'acked',
|
|
155
|
+
carriers: EVENT_AND_RPC,
|
|
156
|
+
relayedFromClient: true,
|
|
157
|
+
}),
|
|
158
|
+
toDaemon('daemon:list-skill-content', "Read one local skill's content, matched by path hash.", {
|
|
159
|
+
delivery: 'acked',
|
|
160
|
+
carriers: EVENT_AND_RPC,
|
|
161
|
+
}),
|
|
162
|
+
toDaemon('daemon:list-skills', 'The skills a session in a directory would see, for the `/` menu.', {
|
|
163
|
+
delivery: 'acked',
|
|
164
|
+
carriers: RPC,
|
|
165
|
+
}),
|
|
166
|
+
toDaemon('daemon:harness:list-models', 'The models the installed harness can run.', {
|
|
167
|
+
delivery: 'acked',
|
|
168
|
+
carriers: RPC,
|
|
169
|
+
}),
|
|
170
|
+
toDaemon('daemon:workspace:isolation-probe', 'Whether an isolated Run could be rooted where this machine would root it.', {
|
|
171
|
+
delivery: 'acked',
|
|
172
|
+
carriers: RPC,
|
|
173
|
+
capability: WORKSPACE_ISOLATION_PROBE,
|
|
174
|
+
}),
|
|
175
|
+
toDaemon('managed-instructions:preflight', 'Check a managed instruction block against local files before it is written.', {
|
|
176
|
+
delivery: 'acked',
|
|
177
|
+
carriers: RPC,
|
|
178
|
+
}),
|
|
179
|
+
toDaemon('daemon:get-local-signals-config', 'Read the local-signals (file drop) configuration.', {
|
|
180
|
+
delivery: 'acked',
|
|
181
|
+
carriers: EVENT_AND_RPC,
|
|
182
|
+
dormant: 'The API asks (`routes/daemons.js`), but only `connection-handlers/daemon-rpc.ts`, which nothing in production loads, answers; the live dispatcher replies "Unknown RPC method", which the route maps.',
|
|
183
|
+
}),
|
|
184
|
+
toDaemon('daemon:set-file-drop-watchers', 'Replace the local-signals file drop watchers.', {
|
|
185
|
+
delivery: 'acked',
|
|
186
|
+
carriers: EVENT_AND_RPC,
|
|
187
|
+
dormant: 'The API asks (`routes/daemons.js`), but only `connection-handlers/daemon-rpc.ts`, which nothing in production loads, answers; the live dispatcher replies "Unknown RPC method", which the route maps.',
|
|
188
|
+
}),
|
|
189
|
+
...['list', 'install', 'update', 'get-job', 'rescan'].map((op) => toDaemon(`daemon:cli-installers:${op}`, `Managed harness CLI installers: ${op}.`, {
|
|
190
|
+
delivery: 'acked',
|
|
191
|
+
carriers: EVENT_AND_RPC,
|
|
192
|
+
})),
|
|
193
|
+
toDaemon('daemon.session.status', "A daemon session's live status.", {
|
|
194
|
+
delivery: 'acked',
|
|
195
|
+
carriers: RPC,
|
|
196
|
+
}),
|
|
197
|
+
toDaemon('daemon.session.steer', 'A follow-up into the running turn; acks whether the turn took it.', {
|
|
198
|
+
delivery: 'acked',
|
|
199
|
+
carriers: RPC,
|
|
200
|
+
capability: SESSION_STEER,
|
|
201
|
+
stability: 'experimental',
|
|
202
|
+
}),
|
|
203
|
+
toDaemon('daemon.session.stop', 'Stop one daemon session.', { delivery: 'acked', carriers: RPC }),
|
|
204
|
+
toDaemon('daemon.session.spawn', 'Start a daemon session under the daemon-session registry.', {
|
|
205
|
+
delivery: 'acked',
|
|
206
|
+
carriers: RPC,
|
|
207
|
+
}),
|
|
208
|
+
toDaemon('daemon.session.resume', 'Resume a daemon session under the daemon-session registry.', {
|
|
209
|
+
delivery: 'acked',
|
|
210
|
+
carriers: RPC,
|
|
211
|
+
}),
|
|
212
|
+
toDaemon('daemon.stop', 'Stop the daemon process.', { delivery: 'acked', carriers: RPC }),
|
|
213
|
+
toServer('daemon.session.claim', 'Claim a session actor under a fence before running it.', {
|
|
214
|
+
delivery: 'acked',
|
|
215
|
+
carriers: RPC,
|
|
216
|
+
}),
|
|
217
|
+
];
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
// Sessions (a harness turn on the machine)
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
const SESSIONS = [
|
|
222
|
+
toDaemon('daemon:{provider}:request', 'Start or continue a harness session turn under this provider spelling.', {
|
|
223
|
+
delivery: 'acked',
|
|
224
|
+
answeredBy: 'daemon:{provider}:response',
|
|
225
|
+
}),
|
|
226
|
+
toServer('daemon:{provider}:response', "A session turn's output: envelopes, then its terminal fact. Acked as a durable receipt once the API announced `serverCaps.responseAck`.", {
|
|
227
|
+
delivery: 'acked',
|
|
228
|
+
serverCapability: 'responseAck',
|
|
229
|
+
}),
|
|
230
|
+
toDaemon('daemon:{provider}:cancel', 'Cancel a running session turn.', {
|
|
231
|
+
delivery: 'acked',
|
|
232
|
+
answeredBy: 'daemon:{provider}:cancel:ack',
|
|
233
|
+
}),
|
|
234
|
+
toServer('daemon:{provider}:cancel:ack', 'Whether the cancel reached a running turn.'),
|
|
235
|
+
toDaemon('daemon:local:request', 'A whole task for the daemon to run autonomously (hybrid local mode).', {
|
|
236
|
+
stability: 'deprecated',
|
|
237
|
+
dormant: 'The daemon still handles it; no API code sends it any more.',
|
|
238
|
+
}),
|
|
239
|
+
toServer('daemon:delivery:ack', 'The daemon received a dispatched request, so the API stops redelivering it.'),
|
|
240
|
+
toServer('daemon:session:accepted', 'The daemon accepted a session request and owns its execution.'),
|
|
241
|
+
toServer('daemon:session:actor:heartbeat', 'A running session actor is alive.'),
|
|
242
|
+
toServer('daemon:session:replay', 'Envelopes written to the offline queue while disconnected, replayed after register.', {
|
|
243
|
+
delivery: 'acked',
|
|
244
|
+
}),
|
|
245
|
+
toServer('daemon:session:turn-diff', "A running turn's diff, live (not an envelope).", {
|
|
246
|
+
capability: SESSION_TURN_DIFF_LIVE,
|
|
247
|
+
stability: 'experimental',
|
|
248
|
+
}),
|
|
249
|
+
toServer('daemon:claude:permission:request', 'A harness asks a person to approve a tool call.', {
|
|
250
|
+
delivery: 'acked',
|
|
251
|
+
answeredBy: 'daemon:claude:permission:response',
|
|
252
|
+
}),
|
|
253
|
+
toDaemon('daemon:claude:permission:response', "A person's answer to a permission request."),
|
|
254
|
+
entry('daemon:claude:permission:cancel', 'bidirectional', 'A permission request is no longer pending: the harness withdrew it, or the API timed it out.'),
|
|
255
|
+
toServer('daemon:claude:permission:mode', 'The harness changed its permission mode.'),
|
|
256
|
+
toServer('daemon:claude:question:request', 'A harness asks a person a question.', {
|
|
257
|
+
delivery: 'acked',
|
|
258
|
+
answeredBy: 'daemon:claude:question:response',
|
|
259
|
+
}),
|
|
260
|
+
toDaemon('daemon:claude:question:response', "A person's answer to a question."),
|
|
261
|
+
];
|
|
262
|
+
// ---------------------------------------------------------------------------
|
|
263
|
+
// Tools (the cloud agent's tool calls, proxied to the machine)
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
const TOOLS = [
|
|
266
|
+
toDaemon('daemon:tool:request', 'Run one tool call on this machine.', {
|
|
267
|
+
delivery: 'acked',
|
|
268
|
+
answeredBy: 'daemon:tool:response',
|
|
269
|
+
}),
|
|
270
|
+
toServer('daemon:tool:response', "A tool call's result. Written to the outbox and retried until acked once the API announced `serverCaps.toolResponseAck`; fire-and-forget otherwise.", {
|
|
271
|
+
delivery: 'acked',
|
|
272
|
+
serverCapability: 'toolResponseAck',
|
|
273
|
+
capability: TOOL_RESPONSE_OUTBOX,
|
|
274
|
+
}),
|
|
275
|
+
toDaemon('daemon:tool:cancel', 'Abandon a running tool call.'),
|
|
276
|
+
toServer('daemon:wire:chunk', 'One slice of a tool or session response above the single-message ceiling, sha256-checked and reassembled by the API before the reassembled event reaches its normal handler. Sent only to a server that announced `serverCaps.wireChunking`; the last slice is acked by that handler (OSK-16616).', {
|
|
277
|
+
delivery: 'acked',
|
|
278
|
+
stability: 'experimental',
|
|
279
|
+
serverCapability: 'wireChunking',
|
|
280
|
+
capability: 'wire_chunking_v1',
|
|
281
|
+
}),
|
|
282
|
+
];
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
// Terminals
|
|
285
|
+
// ---------------------------------------------------------------------------
|
|
286
|
+
const TERMINALS = [
|
|
287
|
+
toDaemon('daemon:terminal:start', 'Open a terminal (persistent when `persistent: true` and announced).', {
|
|
288
|
+
delivery: 'acked',
|
|
289
|
+
answeredBy: 'daemon:terminal:start:ack',
|
|
290
|
+
}),
|
|
291
|
+
toServer('daemon:terminal:start:ack', 'Whether the terminal started.'),
|
|
292
|
+
toDaemon('daemon:terminal:input', 'Bytes typed into a terminal.'),
|
|
293
|
+
toDaemon('daemon:terminal:resize', "A terminal's new size."),
|
|
294
|
+
toDaemon('daemon:terminal:stop', 'Close a terminal.'),
|
|
295
|
+
toServer('daemon:terminal:output', 'Bytes a terminal wrote.'),
|
|
296
|
+
...['list', 'kill', 'rename'].map((op) => toDaemon(`dedicated:terminal:${op}`, `Persistent terminal management: ${op}.`, {
|
|
297
|
+
delivery: 'acked',
|
|
298
|
+
answeredBy: 'dedicated:terminal:ack',
|
|
299
|
+
capability: PERSISTENT_TERMINAL,
|
|
300
|
+
relayedFromClient: true,
|
|
301
|
+
})),
|
|
302
|
+
toServer('dedicated:terminal:ack', 'The answer to a persistent terminal list / kill / rename, relayed to the asking client under the same name.', {
|
|
303
|
+
capability: PERSISTENT_TERMINAL,
|
|
304
|
+
}),
|
|
305
|
+
];
|
|
306
|
+
// ---------------------------------------------------------------------------
|
|
307
|
+
// Dedicated Runtime guest
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
const DEDICATED = [
|
|
310
|
+
toDaemon('daemon:dedicated:quiesce', "Quiesce the guest's workload before a stop, so the workspace is consistent.", {
|
|
311
|
+
delivery: 'acked',
|
|
312
|
+
answeredBy: 'daemon:dedicated:quiesce:ack',
|
|
313
|
+
}),
|
|
314
|
+
toServer('daemon:dedicated:quiesce:ack', 'The quiesce outcome, when the transport has no acknowledgement callback.'),
|
|
315
|
+
toDaemon('daemon:dedicated:thaw', 'Release a quiesce.', {
|
|
316
|
+
delivery: 'acked',
|
|
317
|
+
answeredBy: 'daemon:dedicated:thaw:ack',
|
|
318
|
+
}),
|
|
319
|
+
toServer('daemon:dedicated:thaw:ack', 'The thaw outcome, when the transport has no acknowledgement callback.'),
|
|
320
|
+
toServer('daemon:dedicated:git-credential', "Mint a short-lived git credential for the guest's workload.", {
|
|
321
|
+
delivery: 'acked',
|
|
322
|
+
}),
|
|
323
|
+
...['register', 'heartbeat', 'bye'].map((verb) => toServer(`daemon:agent-worker:${verb}`, `The guest agent worker's liveness lane: ${verb}.`)),
|
|
324
|
+
toDaemon('daemon:ssh:start', 'Open a tenant SSH channel.', {
|
|
325
|
+
delivery: 'acked',
|
|
326
|
+
answeredBy: 'daemon:ssh:start:ack',
|
|
327
|
+
capability: SSH_BRIDGE,
|
|
328
|
+
}),
|
|
329
|
+
toServer('daemon:ssh:start:ack', 'Whether the SSH channel opened.', { capability: SSH_BRIDGE }),
|
|
330
|
+
toDaemon('daemon:ssh:resume', "Resume an SSH channel's byte stream after a reconnect.", {
|
|
331
|
+
delivery: 'acked',
|
|
332
|
+
answeredBy: 'daemon:ssh:resume:ack',
|
|
333
|
+
capability: SSH_STREAM_RESUME,
|
|
334
|
+
}),
|
|
335
|
+
toServer('daemon:ssh:resume:ack', 'Whether the SSH stream resumed, and from where.', {
|
|
336
|
+
capability: SSH_STREAM_RESUME,
|
|
337
|
+
}),
|
|
338
|
+
toDaemon('daemon:ssh:input', 'Bytes into an SSH channel.', {
|
|
339
|
+
delivery: 'acked',
|
|
340
|
+
answeredBy: 'daemon:ssh:input:ack',
|
|
341
|
+
capability: SSH_BRIDGE,
|
|
342
|
+
}),
|
|
343
|
+
toServer('daemon:ssh:input:ack', 'Input received, for flow control.', { capability: SSH_BRIDGE }),
|
|
344
|
+
toDaemon('daemon:ssh:keepalive', 'Keep an idle SSH channel open.', { capability: SSH_BRIDGE }),
|
|
345
|
+
toDaemon('daemon:ssh:stop', 'Close an SSH channel.', { capability: SSH_BRIDGE }),
|
|
346
|
+
toServer('daemon:ssh:output', 'Bytes out of an SSH channel.', { capability: SSH_BRIDGE }),
|
|
347
|
+
toServer('daemon:ssh:closed', 'An SSH channel closed, with the reason.', {
|
|
348
|
+
capability: SSH_BRIDGE,
|
|
349
|
+
}),
|
|
350
|
+
...['list', 'get', 'create', 'update', 'action', 'logs', 'approve', 'secret', 'exec'].map((op) => toDaemon(`daemon:service:${op}`, `Declared services: ${op}.`, {
|
|
351
|
+
delivery: 'acked',
|
|
352
|
+
answeredBy: 'daemon:service:ack',
|
|
353
|
+
capability: SERVICES,
|
|
354
|
+
})),
|
|
355
|
+
toDaemon('daemon:service:logs:stop', "Stop following a service's log.", { capability: SERVICES }),
|
|
356
|
+
toServer('daemon:service:ack', 'The answer to a `daemon:service:*` request, by `requestId`.', {
|
|
357
|
+
capability: SERVICES,
|
|
358
|
+
}),
|
|
359
|
+
toServer('daemon:service:state', 'A declared service changed state.', { capability: SERVICES }),
|
|
360
|
+
toServer('daemon:service:log', 'Lines from a followed service log.', { capability: SERVICES }),
|
|
361
|
+
toServer('daemon:service:log:closed', 'A followed service log ended.', { capability: SERVICES }),
|
|
362
|
+
toServer('daemon:service:proposed', 'The agent proposed a service for a person to approve.', {
|
|
363
|
+
capability: SERVICES,
|
|
364
|
+
}),
|
|
365
|
+
];
|
|
366
|
+
// ---------------------------------------------------------------------------
|
|
367
|
+
// Model proxy (sandbox ⇄ home daemon, relayed by the API)
|
|
368
|
+
// ---------------------------------------------------------------------------
|
|
369
|
+
/**
|
|
370
|
+
* Declared in `@skrr-ai/inference-broker` (`MODEL_PROXY_EVENTS`); the daemon
|
|
371
|
+
* spec holds these to that table. Every name both enters and leaves the API:
|
|
372
|
+
* the sandbox daemon sends a request the API relays to the home daemon, and
|
|
373
|
+
* the home daemon's response is relayed back.
|
|
374
|
+
*/
|
|
375
|
+
const MODEL_PROXY = [
|
|
376
|
+
entry('daemon:model-proxy:request', 'bidirectional', "A sandbox daemon's model request, relayed to the home daemon that holds the subscription."),
|
|
377
|
+
entry('daemon:model-proxy:cancel', 'bidirectional', 'Abort an in-flight model-proxy exchange.'),
|
|
378
|
+
entry('daemon:model-proxy:response', 'bidirectional', 'The response head, relayed back to the sandbox daemon.'),
|
|
379
|
+
entry('daemon:model-proxy:response:chunk', 'bidirectional', 'A response body chunk.'),
|
|
380
|
+
entry('daemon:model-proxy:response:end', 'bidirectional', 'The response ended.'),
|
|
381
|
+
];
|
|
382
|
+
// ---------------------------------------------------------------------------
|
|
383
|
+
// Retired (accepted and ignored by the API so an older daemon is not refused)
|
|
384
|
+
// ---------------------------------------------------------------------------
|
|
385
|
+
/** The API's own list is `Computer/RetiredFamilies.js` `RETIRED_DAEMON_EVENTS`; its spec holds the two equal. */
|
|
386
|
+
const RETIRED = [
|
|
387
|
+
'daemon:browser:liveview:frame',
|
|
388
|
+
'daemon:browser:liveview:state',
|
|
389
|
+
'daemon:browser:liveview:ack',
|
|
390
|
+
'daemon:browser:sessions',
|
|
391
|
+
'daemon:agent-terminal:state',
|
|
392
|
+
'daemon:agent-terminal:attach:ack',
|
|
393
|
+
'daemon:agent-terminal:control:ack',
|
|
394
|
+
'daemon:agent-terminal:error',
|
|
395
|
+
'daemon:terminal:run:chunk',
|
|
396
|
+
].map((name) => toServer(name, 'Retired with the old browser live view and agent-terminal attach (OSK-13509); accepted and ignored.', {
|
|
397
|
+
stability: 'deprecated',
|
|
398
|
+
dormant: 'No current daemon sends it.',
|
|
399
|
+
}));
|
|
400
|
+
/**
|
|
401
|
+
* One row per `DAEMON_COMPUTER_EVENTS` key. `satisfies Record<…>` makes a new
|
|
402
|
+
* computer event a compile error here until it has a capability, a delivery
|
|
403
|
+
* and a purpose. Requests that carry a `requestId` are answered on
|
|
404
|
+
* `daemon:computer:ack`.
|
|
405
|
+
*/
|
|
406
|
+
const COMPUTER_META = {
|
|
407
|
+
attach: {
|
|
408
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
409
|
+
acked: true,
|
|
410
|
+
purpose: 'Bind an attachment: its principal, operations and (dedicated) generation.',
|
|
411
|
+
},
|
|
412
|
+
detach: {
|
|
413
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
414
|
+
acked: false,
|
|
415
|
+
purpose: 'Unbind an attachment.',
|
|
416
|
+
},
|
|
417
|
+
grants: {
|
|
418
|
+
capability: COMPUTER_CAPABILITIES.access,
|
|
419
|
+
acked: false,
|
|
420
|
+
purpose: "The machine's whole grant set, on registration and on every change.",
|
|
421
|
+
},
|
|
422
|
+
subscribe: {
|
|
423
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
424
|
+
acked: true,
|
|
425
|
+
purpose: 'Observe one surface.',
|
|
426
|
+
},
|
|
427
|
+
unsubscribe: {
|
|
428
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
429
|
+
acked: false,
|
|
430
|
+
purpose: 'Stop observing one surface.',
|
|
431
|
+
},
|
|
432
|
+
frameAck: {
|
|
433
|
+
capability: COMPUTER_CAPABILITIES.browserObserve,
|
|
434
|
+
acked: false,
|
|
435
|
+
purpose: 'A viewer painted a page frame and wants the next.',
|
|
436
|
+
},
|
|
437
|
+
control: {
|
|
438
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
439
|
+
acked: true,
|
|
440
|
+
purpose: 'Take, release, request, grant or decline control of a surface.',
|
|
441
|
+
},
|
|
442
|
+
share: {
|
|
443
|
+
capability: COMPUTER_CAPABILITIES.surfaceShare,
|
|
444
|
+
acked: true,
|
|
445
|
+
purpose: "Share or unshare a person's own surface with an agent session.",
|
|
446
|
+
},
|
|
447
|
+
input: {
|
|
448
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
449
|
+
acked: false,
|
|
450
|
+
purpose: 'One input from the control holder, carrying the lease epoch.',
|
|
451
|
+
},
|
|
452
|
+
open: {
|
|
453
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
454
|
+
acked: true,
|
|
455
|
+
purpose: "Open a person's own terminal or browser window.",
|
|
456
|
+
},
|
|
457
|
+
close: { capability: COMPUTER_CAPABILITIES.computer, acked: true, purpose: 'Close a surface.' },
|
|
458
|
+
activityFill: {
|
|
459
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
460
|
+
acked: true,
|
|
461
|
+
purpose: 'The activity events after a `seq`, to fill a gap.',
|
|
462
|
+
},
|
|
463
|
+
filesWatch: {
|
|
464
|
+
capability: COMPUTER_CAPABILITIES.filesWatch,
|
|
465
|
+
acked: true,
|
|
466
|
+
purpose: 'The directories expanded and files open, which scope the file watches.',
|
|
467
|
+
},
|
|
468
|
+
files: {
|
|
469
|
+
capability: COMPUTER_CAPABILITIES.files,
|
|
470
|
+
acked: true,
|
|
471
|
+
purpose: 'One file operation, relayed from the machine file routes.',
|
|
472
|
+
stability: 'experimental',
|
|
473
|
+
dormant: 'Declared in computerWire.ts; the file routes reach the daemon as `File*` tool requests on `daemon:tool:request`, and neither end speaks this name.',
|
|
474
|
+
},
|
|
475
|
+
dialog: {
|
|
476
|
+
capability: COMPUTER_CAPABILITIES.browserPage,
|
|
477
|
+
acked: true,
|
|
478
|
+
purpose: 'Answer a dialog the page is blocked on.',
|
|
479
|
+
},
|
|
480
|
+
copy: {
|
|
481
|
+
capability: COMPUTER_CAPABILITIES.browserPage,
|
|
482
|
+
acked: true,
|
|
483
|
+
purpose: 'Copy-out: the text the person selected on the page.',
|
|
484
|
+
},
|
|
485
|
+
fileChooser: {
|
|
486
|
+
capability: COMPUTER_CAPABILITIES.browserFileChooser,
|
|
487
|
+
acked: true,
|
|
488
|
+
purpose: 'Answer the file chooser a page opened.',
|
|
489
|
+
},
|
|
490
|
+
teaching: {
|
|
491
|
+
capability: COMPUTER_CAPABILITIES.browserTeaching,
|
|
492
|
+
acked: true,
|
|
493
|
+
purpose: 'Control an explicitly selected, bounded browser teaching or activity-review capture.',
|
|
494
|
+
},
|
|
495
|
+
pin: {
|
|
496
|
+
capability: COMPUTER_CAPABILITIES.surfacePin,
|
|
497
|
+
acked: false,
|
|
498
|
+
purpose: 'Pin or unpin the surface an open human-input request names.',
|
|
499
|
+
},
|
|
500
|
+
services: {
|
|
501
|
+
capability: COMPUTER_CAPABILITIES.declaredServices,
|
|
502
|
+
acked: true,
|
|
503
|
+
purpose: "Declare, withdraw or list the machine's declared services.",
|
|
504
|
+
},
|
|
505
|
+
daemonLog: {
|
|
506
|
+
capability: COMPUTER_CAPABILITIES.daemonLog,
|
|
507
|
+
acked: true,
|
|
508
|
+
purpose: "Read the tail of the daemon's own process log.",
|
|
509
|
+
},
|
|
510
|
+
ack: {
|
|
511
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
512
|
+
acked: false,
|
|
513
|
+
purpose: 'The answer to any computer request that carried a `requestId`.',
|
|
514
|
+
},
|
|
515
|
+
manifest: {
|
|
516
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
517
|
+
acked: false,
|
|
518
|
+
purpose: 'A whole manifest, or a revisioned delta.',
|
|
519
|
+
},
|
|
520
|
+
data: {
|
|
521
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
522
|
+
acked: false,
|
|
523
|
+
purpose: 'Terminal bytes with a byte cursor, or a page frame.',
|
|
524
|
+
},
|
|
525
|
+
activity: {
|
|
526
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
527
|
+
acked: false,
|
|
528
|
+
purpose: 'Activity events.',
|
|
529
|
+
},
|
|
530
|
+
detached: {
|
|
531
|
+
capability: COMPUTER_CAPABILITIES.computer,
|
|
532
|
+
acked: false,
|
|
533
|
+
purpose: 'The daemon detached an attachment itself, e.g. its grant was revoked.',
|
|
534
|
+
},
|
|
535
|
+
filesChanged: {
|
|
536
|
+
capability: COMPUTER_CAPABILITIES.filesWatch,
|
|
537
|
+
acked: false,
|
|
538
|
+
purpose: "One attachment's scoped watches saw changes, or went stale.",
|
|
539
|
+
},
|
|
540
|
+
diagnostics: {
|
|
541
|
+
capability: COMPUTER_CAPABILITIES.diagnostics,
|
|
542
|
+
acked: false,
|
|
543
|
+
purpose: "The daemon's frame-lane counters while anyone is attached.",
|
|
544
|
+
},
|
|
545
|
+
};
|
|
546
|
+
const REPORT_KEYS = new Set(DAEMON_COMPUTER_REPORT_EVENT_KEYS);
|
|
547
|
+
const COMPUTER = Object.keys(DAEMON_COMPUTER_EVENTS).map((key) => {
|
|
548
|
+
const meta = COMPUTER_META[key];
|
|
549
|
+
return entry(DAEMON_COMPUTER_EVENTS[key], REPORT_KEYS.has(key) ? 'daemon_to_server' : 'server_to_daemon', meta.purpose, {
|
|
550
|
+
delivery: meta.acked ? 'acked' : 'fire_and_forget',
|
|
551
|
+
...(meta.acked ? { answeredBy: DAEMON_COMPUTER_EVENTS.ack } : {}),
|
|
552
|
+
capability: meta.capability,
|
|
553
|
+
stability: meta.stability ?? 'stable',
|
|
554
|
+
payload: { kind: 'zod', schema: `DAEMON_COMPUTER_EVENT_PAYLOAD_SCHEMAS.${key}` },
|
|
555
|
+
...(meta.dormant ? { dormant: meta.dormant } : {}),
|
|
556
|
+
});
|
|
557
|
+
});
|
|
558
|
+
// ---------------------------------------------------------------------------
|
|
559
|
+
// The registry
|
|
560
|
+
// ---------------------------------------------------------------------------
|
|
561
|
+
/** Every daemon ⇄ API name, in declaration order (which the generated schema keeps). */
|
|
562
|
+
export const DAEMON_WIRE = Object.freeze([
|
|
563
|
+
...CONNECTION,
|
|
564
|
+
...RPC_ENVELOPE,
|
|
565
|
+
...RPC_METHODS,
|
|
566
|
+
...SESSIONS,
|
|
567
|
+
...TOOLS,
|
|
568
|
+
...TERMINALS,
|
|
569
|
+
...DEDICATED,
|
|
570
|
+
...MODEL_PROXY,
|
|
571
|
+
...COMPUTER,
|
|
572
|
+
...RETIRED,
|
|
573
|
+
]);
|
|
574
|
+
export const DAEMON_WIRE_NAMES = Object.freeze(DAEMON_WIRE.map((e) => e.name));
|
|
575
|
+
const BY_NAME = new Map(DAEMON_WIRE.map((e) => [e.name, e]));
|
|
576
|
+
const TEMPLATED = DAEMON_WIRE.filter((e) => e.name.includes('{')).map((e) => ({
|
|
577
|
+
entry: e,
|
|
578
|
+
pattern: new RegExp(`^${e.name
|
|
579
|
+
.split(/(\{[a-zA-Z]+\})/)
|
|
580
|
+
.map((part) => /^\{[a-zA-Z]+\}$/.test(part)
|
|
581
|
+
? '[a-z0-9][a-z0-9-]*'
|
|
582
|
+
: part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
|
|
583
|
+
.join('')}$`),
|
|
584
|
+
}));
|
|
585
|
+
/**
|
|
586
|
+
* The declaration a concrete name belongs to, or null. An exact declaration
|
|
587
|
+
* wins over a templated one: `daemon:ping:response` is its own event, not a
|
|
588
|
+
* `daemon:{provider}:response`. A templated match says only that the SHAPE is
|
|
589
|
+
* declared; whether a provider spelling is heard is the API's decision.
|
|
590
|
+
*/
|
|
591
|
+
export function daemonWireEntry(name) {
|
|
592
|
+
const exact = BY_NAME.get(name);
|
|
593
|
+
if (exact)
|
|
594
|
+
return exact;
|
|
595
|
+
return TEMPLATED.find((t) => t.pattern.test(name))?.entry ?? null;
|
|
596
|
+
}
|
|
597
|
+
/** Whether `direction` lets `end` send the name. */
|
|
598
|
+
export function daemonWireSends(entry, end) {
|
|
599
|
+
if (entry.direction === 'bidirectional')
|
|
600
|
+
return true;
|
|
601
|
+
return end === 'daemon'
|
|
602
|
+
? entry.direction === 'daemon_to_server'
|
|
603
|
+
: entry.direction === 'server_to_daemon';
|
|
604
|
+
}
|
|
605
|
+
/** Whether `direction` lets `end` handle the name. */
|
|
606
|
+
export function daemonWireHandles(entry, end) {
|
|
607
|
+
return daemonWireSends(entry, end === 'daemon' ? 'server' : 'daemon');
|
|
608
|
+
}
|
|
@@ -30,7 +30,7 @@ export { buildProof as buildDeviceProof, generateDeviceKeyPair, jwkThumbprint, n
|
|
|
30
30
|
export { DPOP_HEADER, DPOP_MAX_AGE_SECONDS, DPOP_PROOF_INVALID, DPOP_PROOF_REQUIRED, DPOP_PROOF_TYP, DPOP_PROOF_VERIFY_UNAVAILABLE, accessTokenHash, createDpopKey, isAth, isJwkThumbprint, normalizeDpopHtu, verifyDpopProof, type DpopKey, type DpopProofClaims, type DpopProofRequest, type DpopVerifyFailureReason, type DpopVerifyOptions, type DpopVerifyResult, } from './dpop.js';
|
|
31
31
|
export { initCredEnvelope, resetCredEnvelope, shutdownCredEnvelope, isCredEnvelopeActive, hasCredEnvelopePathConflict, describeCredEnvelopeState, splitKeyConvergencePolicy, maybeEncryptForWrite, maybeDecryptOnRead, DEFAULT_UNREADABLE_CREDENTIAL_HINT, type DecryptOnReadOptions, __wrappedDekFilePathForTest, __setStateForTest as __setCredEnvelopeStateForTest, __getStateForTest as __getCredEnvelopeStateForTest, __resetShutdownGuardForTest, type ReadTransformResult, } from './credentialEnvelopeBridge.js';
|
|
32
32
|
export { initDeviceIdentity, resetDeviceIdentity, signServerRequest, enrollWithServer, clearEnrollmentMarker, isDeviceIdentityActive, getDevicePublicKey, describeDeviceIdentityState, describeDeviceKeySplit, __publicKeyPathForTest, __privateKeyPathForTest, __enrollmentMarkerPathForTest, __enrollmentBackoffPathForTest, __setStateForTest as __setDeviceIdentityStateForTest, __getStateForTest as __getDeviceIdentityStateForTest, type EnrollmentResult, } from './deviceIdentityBridge.js';
|
|
33
|
-
export { getMachineUuid, getHardwareMachineUuid, setMachineUuidProfile, getMachineUuidProfile, qualifyMachineUuid, MACHINE_IDENTITY_FILENAME, hostedRuntimeIdOverride, HOSTED_RUNTIME_MACHINE_SOURCES, __resetMachineUuidCacheForTest, } from './machineUuid.js';
|
|
33
|
+
export { getMachineUuid, getMachineUuidForProfile, describeMachineIdentity, type MachineIdentityDescription, type MachineIdentityReason, getHardwareMachineUuid, setMachineUuidProfile, getMachineUuidProfile, qualifyMachineUuid, MACHINE_IDENTITY_FILENAME, hostedRuntimeIdOverride, HOSTED_RUNTIME_MACHINE_SOURCES, __resetMachineUuidCacheForTest, } from './machineUuid.js';
|
|
34
34
|
export { ensureMachineDaemonId, legacyDaemonUuids, __resetCachedDaemonIdForTest, } from './machineId.js';
|
|
35
35
|
export { PAIR_AAD_PREFIX, PAIR_AAD_MAX_LEN, PAIR_BUNDLE_MAX_BASE64_LEN, PAIR_NONCE_LEN, PAIR_PUBKEY_LEN, PAIR_SECRET_LEN, PairBundleError, assemblePairBundleBase64, base64ToUint8Array as pairBase64ToUint8Array, base64UrlToUint8Array as pairBase64UrlToUint8Array, buildPairAad, buildPairUrl, generatePairKeyPair, openPairBundleBase64, parsePairBundle, parsePairPlaintext, parsePairUrl, uint8ArrayToBase64 as pairUint8ArrayToBase64, uint8ArrayToBase64Url as pairUint8ArrayToBase64Url, type AssembleBundleOptions as PairAssembleBundleOptions, type OpenBundleOptions as PairOpenBundleOptions, type PairBundle, type PairBundleErrorCode, type PairKeyPair, type PairPlaintextV1, type PairUrlFields, } from './daemonPair.js';
|
|
36
36
|
export { HARNESS_TIERS, getHarnessTier, credentialPolicyForTier, tierPermitsConfiguredAutoMode, type HarnessTrustTier, type CredentialDeliveryPolicy, type CredentialMode, } from './harnessTrust.js';
|
|
@@ -125,7 +125,7 @@ __publicKeyPathForTest, __privateKeyPathForTest, __enrollmentMarkerPathForTest,
|
|
|
125
125
|
// Hardware machine identity sent as `machineUuid` (IOPlatformUUID /
|
|
126
126
|
// machine-id / MachineGuid). ONE implementation for daemon and CLI —
|
|
127
127
|
// OSK-12063. Also exposed dependency-free as `@skrr-ai/auth-core/machine-uuid`.
|
|
128
|
-
export { getMachineUuid, getHardwareMachineUuid, setMachineUuidProfile, getMachineUuidProfile, qualifyMachineUuid, MACHINE_IDENTITY_FILENAME, hostedRuntimeIdOverride, HOSTED_RUNTIME_MACHINE_SOURCES, __resetMachineUuidCacheForTest, } from './machineUuid.js';
|
|
128
|
+
export { getMachineUuid, getMachineUuidForProfile, describeMachineIdentity, getHardwareMachineUuid, setMachineUuidProfile, getMachineUuidProfile, qualifyMachineUuid, MACHINE_IDENTITY_FILENAME, hostedRuntimeIdOverride, HOSTED_RUNTIME_MACHINE_SOURCES, __resetMachineUuidCacheForTest, } from './machineUuid.js';
|
|
129
129
|
// Stable per-machine UUIDv7 identity persisted at <configDir>/daemon.id.
|
|
130
130
|
// NOT a `machineUuid` — see machineUuid.ts.
|
|
131
131
|
export { ensureMachineDaemonId, legacyDaemonUuids, __resetCachedDaemonIdForTest, } from './machineId.js';
|