@skrr-ai/cli 0.1.110 → 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 +31 -3
- package/dist/base-command.js +136 -22
- 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/list.js +2 -1
- 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/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/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/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/triggers/list.js +2 -1
- 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 +3 -7
- 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 +97 -4
- 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/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.js +17 -11
- 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/update.d.ts +1 -0
- package/dist/commands/tasks/update.js +25 -2
- 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/list.js +2 -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/list.js +3 -2
- package/dist/commands/workspaces/members.d.ts +1 -0
- package/dist/commands/workspaces/members.js +5 -2
- 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/commitments.d.ts +44 -3
- package/dist/lib/commitments.js +107 -9
- package/dist/lib/compasses.d.ts +4 -0
- package/dist/lib/compasses.js +11 -0
- package/dist/lib/daemon-setup.js +7 -7
- package/dist/lib/daemonHandoff.js +3 -2
- package/dist/lib/dedicated-ssh.d.ts +2 -0
- package/dist/lib/dedicated-ssh.js +98 -28
- 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 +36 -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/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-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 +7 -0
- package/dist/lib/triggers.js +54 -4
- 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/workspaces.d.ts +11 -4
- package/dist/lib/workspaces.js +7 -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/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/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 +30 -0
- package/dist/node_modules/@skrr-ai/data-provider/index.js +25239 -18730
- package/docs/v1/operations.md +52 -0
- package/docs/v1/space-search.md +19 -0
- package/oclif.manifest.json +4719 -479
- package/package.json +23 -2
|
@@ -35,6 +35,13 @@
|
|
|
35
35
|
* `api/server/services/HostedPreview/__tests__/telemetryRedaction.spec.js` mints credentials with the real minting
|
|
36
36
|
* code and requires every one to come out as the marker, so a change to either side fails there.
|
|
37
37
|
*
|
|
38
|
+
* HUMAN QR SIGN-IN. Its locator has no token prefix, so redact only the known
|
|
39
|
+
* `/api/auth/qr/requests/<locator>` path and `/auth/qr?request=<locator>` query
|
|
40
|
+
* (including percent-encoded nested URLs). Private protocol field names are
|
|
41
|
+
* redacted in serialized text and structured records, including numeric
|
|
42
|
+
* comparison codes. Ordinary request ids, operation names and error/metric
|
|
43
|
+
* categories remain usable. All existing preview-redaction sinks inherit it.
|
|
44
|
+
*
|
|
38
45
|
* WHAT IT DOES NOT. A prefix that is itself percent-encoded (`%70vw_`) is not recognised: nothing in this
|
|
39
46
|
* repository writes one, and a scan that decoded every string first would cost every sink on every record. A
|
|
40
47
|
* credential cut off before its id is whole (`pinv_0123abc`) is an identifier, not yet the secret, and is left as it
|
|
@@ -50,6 +57,10 @@
|
|
|
50
57
|
*/
|
|
51
58
|
/** What replaces a token. Fixed, so a trace can say a preview was involved but not which one. */
|
|
52
59
|
export declare const PREVIEW_TOKEN_REDACTION: "pvw_[redacted]";
|
|
60
|
+
/** QR locators have no identifying prefix, so match only their protocol locations. */
|
|
61
|
+
export declare const QR_SIGN_IN_REDACTION: "[redacted]";
|
|
62
|
+
/** Fields are protocol-specific; preserve ordinary request ids, error codes and metrics. */
|
|
63
|
+
export declare function isQrSignInSecretField(key: string): boolean;
|
|
53
64
|
/**
|
|
54
65
|
* Replace every credential that travels in a URL with a marker: a Hosted Machine preview token with
|
|
55
66
|
* {@link PREVIEW_TOKEN_REDACTION}, and a workspace invitation, platform invitation, member link or operator code with
|
|
@@ -36,6 +36,13 @@
|
|
|
36
36
|
* `api/server/services/HostedPreview/__tests__/telemetryRedaction.spec.js` mints credentials with the real minting
|
|
37
37
|
* code and requires every one to come out as the marker, so a change to either side fails there.
|
|
38
38
|
*
|
|
39
|
+
* HUMAN QR SIGN-IN. Its locator has no token prefix, so redact only the known
|
|
40
|
+
* `/api/auth/qr/requests/<locator>` path and `/auth/qr?request=<locator>` query
|
|
41
|
+
* (including percent-encoded nested URLs). Private protocol field names are
|
|
42
|
+
* redacted in serialized text and structured records, including numeric
|
|
43
|
+
* comparison codes. Ordinary request ids, operation names and error/metric
|
|
44
|
+
* categories remain usable. All existing preview-redaction sinks inherit it.
|
|
45
|
+
*
|
|
39
46
|
* WHAT IT DOES NOT. A prefix that is itself percent-encoded (`%70vw_`) is not recognised: nothing in this
|
|
40
47
|
* repository writes one, and a scan that decoded every string first would cost every sink on every record. A
|
|
41
48
|
* credential cut off before its id is whole (`pinv_0123abc`) is an identifier, not yet the secret, and is left as it
|
|
@@ -50,7 +57,8 @@
|
|
|
50
57
|
* record, because a record with the token still in it is exactly what this exists to prevent.
|
|
51
58
|
*/
|
|
52
59
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.PREVIEW_TOKEN_REDACTION = void 0;
|
|
60
|
+
exports.QR_SIGN_IN_REDACTION = exports.PREVIEW_TOKEN_REDACTION = void 0;
|
|
61
|
+
exports.isQrSignInSecretField = isQrSignInSecretField;
|
|
54
62
|
exports.redactPreviewTokens = redactPreviewTokens;
|
|
55
63
|
exports.redactPreviewTokensDeep = redactPreviewTokensDeep;
|
|
56
64
|
exports.withPreviewTokenRedaction = withPreviewTokenRedaction;
|
|
@@ -88,14 +96,45 @@ const SIGNED_CREDENTIAL = new RegExp(`(wsi|pinv|usr|adm2)${UNDERSCORE}(?=[0-9a-f
|
|
|
88
96
|
* `TOKEN_CHAR`, whose dot would swallow the full stop at the end of a sentence.
|
|
89
97
|
*/
|
|
90
98
|
const LEGACY_OPERATOR_CODE = new RegExp(`(adm)${UNDERSCORE}(?=[A-Za-z0-9_-]{43}(?![A-Za-z0-9_-]))[A-Za-z0-9_-]{43}`, 'g');
|
|
91
|
-
/**
|
|
99
|
+
/** QR locators have no identifying prefix, so match only their protocol locations. */
|
|
100
|
+
exports.QR_SIGN_IN_REDACTION = '[redacted]';
|
|
101
|
+
const escapedLiteral = (value) => [...value].map((char) => {
|
|
102
|
+
const literal = char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
103
|
+
return `(?:${literal}|%(?:25)*${char.charCodeAt(0).toString(16)})`;
|
|
104
|
+
}).join('');
|
|
105
|
+
const QR_REQUEST_PATH = new RegExp(`(${escapedLiteral('/api/auth/qr/requests/')})${TOKEN_CHAR}+`, 'gi');
|
|
106
|
+
const QR_LINK_QUERY = new RegExp(`(${escapedLiteral('/auth/qr?')})([^\\s"'<>#]*)`, 'gi');
|
|
107
|
+
const QR_REQUEST_QUERY = new RegExp(`(^|${escapedLiteral('&')})(${escapedLiteral('request')}${escapedLiteral('=')})${TOKEN_CHAR}+`, 'gi');
|
|
108
|
+
const QR_SECRET_FIELDS = new Set([
|
|
109
|
+
'statustoken', 'claimtoken', 'codeverifier', 'codechallenge', 'comparisoncode',
|
|
110
|
+
]);
|
|
111
|
+
/** Fields are protocol-specific; preserve ordinary request ids, error codes and metrics. */
|
|
112
|
+
function isQrSignInSecretField(key) {
|
|
113
|
+
const leaf = key.split('.').pop() || '';
|
|
114
|
+
return QR_SECRET_FIELDS.has(leaf.replace(/[_-]/g, '').toLowerCase());
|
|
115
|
+
}
|
|
116
|
+
const QR_SECRET_ASSIGNMENT = /((?:["']?)(?:statusToken|claimToken|codeVerifier|codeChallenge|comparisonCode|status_token|claim_token|code_verifier|code_challenge|comparison_code)(?:["']?)\s*[:=]\s*["']?)([A-Za-z0-9._~%+-]+)/gi;
|
|
117
|
+
function redactQrSignInText(value) {
|
|
118
|
+
// Undici/Sentry may split url.query/query_string from its path. The QR's
|
|
119
|
+
// direction vocabulary identifies that standalone query without treating an
|
|
120
|
+
// ordinary application's `request` query key as a secret globally.
|
|
121
|
+
const standaloneQuery = /(?:^|[?&])direction=(?:mobile_approves_web|web_approves_mobile)(?:&|$)/.test(value)
|
|
122
|
+
? value.replace(QR_REQUEST_QUERY, `$1$2${exports.QR_SIGN_IN_REDACTION}`) : value;
|
|
123
|
+
return standaloneQuery
|
|
124
|
+
.replace(QR_REQUEST_PATH, `$1${exports.QR_SIGN_IN_REDACTION}`)
|
|
125
|
+
.replace(QR_LINK_QUERY, (_match, prefix, query) => prefix + query.replace(QR_REQUEST_QUERY, `$1$2${exports.QR_SIGN_IN_REDACTION}`))
|
|
126
|
+
.replace(QR_SECRET_ASSIGNMENT, `$1${exports.QR_SIGN_IN_REDACTION}`);
|
|
127
|
+
}
|
|
128
|
+
/** Cheap test before the older prefix-based credential expressions. */
|
|
92
129
|
const CREDENTIAL_HINTS = ['pvw', 'wsi', 'pinv', 'usr', 'adm'];
|
|
93
130
|
const credentialMarker = (_match, prefix) => `${prefix}_[redacted]`;
|
|
94
131
|
function redactPreviewTokens(value) {
|
|
95
|
-
if (typeof value !== 'string'
|
|
132
|
+
if (typeof value !== 'string')
|
|
96
133
|
return value;
|
|
97
|
-
|
|
98
|
-
|
|
134
|
+
const qrSafe = redactQrSignInText(value);
|
|
135
|
+
if (!CREDENTIAL_HINTS.some((hint) => qrSafe.indexOf(hint) !== -1))
|
|
136
|
+
return qrSafe;
|
|
137
|
+
return qrSafe
|
|
99
138
|
.replace(PREVIEW_TOKEN, exports.PREVIEW_TOKEN_REDACTION)
|
|
100
139
|
.replace(SIGNED_CREDENTIAL, credentialMarker)
|
|
101
140
|
.replace(LEGACY_OPERATOR_CODE, credentialMarker);
|
|
@@ -121,7 +160,7 @@ function redactPreviewTokensDeep(root, limits = {}) {
|
|
|
121
160
|
let visited = 0;
|
|
122
161
|
let complete = true;
|
|
123
162
|
const rewrite = (holder, key, current) => {
|
|
124
|
-
const next = redactPreviewTokens(current);
|
|
163
|
+
const next = isQrSignInSecretField(key) ? exports.QR_SIGN_IN_REDACTION : redactPreviewTokens(current);
|
|
125
164
|
if (next === current) {
|
|
126
165
|
return;
|
|
127
166
|
}
|
|
@@ -163,7 +202,7 @@ function redactPreviewTokensDeep(root, limits = {}) {
|
|
|
163
202
|
complete = false;
|
|
164
203
|
continue;
|
|
165
204
|
}
|
|
166
|
-
if (typeof child === 'string') {
|
|
205
|
+
if (isQrSignInSecretField(key) || typeof child === 'string') {
|
|
167
206
|
rewrite(holder, key, child);
|
|
168
207
|
}
|
|
169
208
|
else if (child !== null && typeof child === 'object') {
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { type KeyObject } from 'node:crypto';
|
|
2
|
+
import { type AttestedToolApprovalRefusalReason } from './daemonToolApproval.js';
|
|
3
|
+
/**
|
|
4
|
+
* Platform-signed tool approvals (OSK-16614) — attestation v2.
|
|
5
|
+
*
|
|
6
|
+
* v1 (`daemonToolApproval.ts`) is a plain JSON object whose authority is the
|
|
7
|
+
* channel it arrived on. That stops the MODEL approving itself, and nothing
|
|
8
|
+
* else: anything that can put a `daemon:tool:request` on the daemon's channel
|
|
9
|
+
* — a websocket or SSE layer bug, a relay, the Redis pub/sub bridge the
|
|
10
|
+
* request crosses, an injected event, a peer holding a stolen daemon session
|
|
11
|
+
* — can approve any `manual`-category call by writing the field.
|
|
12
|
+
*
|
|
13
|
+
* v2 is `{v: 2, payload, kid, sig}`: an Ed25519 signature by a platform
|
|
14
|
+
* approval key over the canonical JSON `payload`, which carries the v1 claims
|
|
15
|
+
* plus the `daemonId` and `sessionId` it was minted for. The daemon verifies
|
|
16
|
+
* it against a keyset it PINNED outside the approval decision (fetched over
|
|
17
|
+
* authenticated HTTPS, TOFU, per server origin) and that only changes through
|
|
18
|
+
* a keyset signed by a key it already trusts.
|
|
19
|
+
*
|
|
20
|
+
* What it stops: every writer to the channel that cannot reach the signing
|
|
21
|
+
* key. What it does NOT stop: a fully compromised API host with access to the
|
|
22
|
+
* key, or server code that mints without a person having answered — the key
|
|
23
|
+
* says "the platform says a person approved this call", not that one did.
|
|
24
|
+
* Only an approval signed by the approving person's own device closes that,
|
|
25
|
+
* and that is the long-term target this format is shaped for (a second key
|
|
26
|
+
* class in the same keyset), not something it claims today.
|
|
27
|
+
*
|
|
28
|
+
* Pure: node:crypto only, no schema library (auth-core is schema-free), no
|
|
29
|
+
* I/O. Where the keyset is stored and how it is fetched is the daemon's
|
|
30
|
+
* (`daemon/src/permissions/approval-keyset.ts`); where the private key lives
|
|
31
|
+
* is the server's (`api/server/utils/toolApprovalSigning.js`).
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Announced by a daemon that holds a pinned approval keyset and therefore
|
|
35
|
+
* verifies v2. The daemon announces it ONLY while pinned — positive
|
|
36
|
+
* withholding on its side too — and the server mints v2 only for a daemon
|
|
37
|
+
* that announced it, v1 otherwise.
|
|
38
|
+
*/
|
|
39
|
+
export declare const TOOL_APPROVAL_SIGNED_CAPABILITY = "tool_approval_signed_v1";
|
|
40
|
+
/**
|
|
41
|
+
* One public approval key. Same encoding as the release keys
|
|
42
|
+
* (`releaseKeys.ts`): base64 DER-SPKI Ed25519.
|
|
43
|
+
*/
|
|
44
|
+
export interface ApprovalPublicKey {
|
|
45
|
+
kid: string;
|
|
46
|
+
publicKeySpkiB64: string;
|
|
47
|
+
}
|
|
48
|
+
export interface ApprovalSigner {
|
|
49
|
+
kid: string;
|
|
50
|
+
privateKey: KeyObject;
|
|
51
|
+
}
|
|
52
|
+
/** Derive the wire public key from a private (or public) Ed25519 KeyObject. */
|
|
53
|
+
export declare function approvalPublicKeyFromKeyObject(kid: string, key: KeyObject): ApprovalPublicKey;
|
|
54
|
+
/**
|
|
55
|
+
* The set of approval keys a daemon trusts for one server origin. `seq` only
|
|
56
|
+
* ever rises: a daemon refuses a keyset older than the one it pinned, so a
|
|
57
|
+
* retired (possibly compromised) key cannot be brought back by replaying the
|
|
58
|
+
* keyset that still listed it.
|
|
59
|
+
*/
|
|
60
|
+
export interface ApprovalKeyset {
|
|
61
|
+
v: 1;
|
|
62
|
+
seq: number;
|
|
63
|
+
keys: ApprovalPublicKey[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* What the server serves and the daemon pins. `keyset` is the canonical JSON
|
|
67
|
+
* TEXT of an `ApprovalKeyset`: signatures are over these exact bytes, so the
|
|
68
|
+
* verifier never has to re-serialize to check one. Each signature names the
|
|
69
|
+
* key that made it; a keyset is normally signed by every key it lists (that is
|
|
70
|
+
* what lets a daemon pinning only the old key accept the set that adds the new
|
|
71
|
+
* one), plus any offline root endorsements.
|
|
72
|
+
*/
|
|
73
|
+
export interface ApprovalKeysetDocument {
|
|
74
|
+
keyset: string;
|
|
75
|
+
signatures: Array<{
|
|
76
|
+
kid: string;
|
|
77
|
+
sig: string;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/** Canonical keyset text: keys sorted by kid, canonical JSON. */
|
|
81
|
+
export declare function canonicalApprovalKeysetText(keyset: ApprovalKeyset): string;
|
|
82
|
+
/**
|
|
83
|
+
* Server side: the document for a keyring. Every signer signs, and every
|
|
84
|
+
* signer's public key is listed. `endorsements` are signatures made OFFLINE
|
|
85
|
+
* over the same canonical text by a root key the daemon may have embedded
|
|
86
|
+
* (see `verifyApprovalKeysetDocument`'s `anchors`); the text is deterministic
|
|
87
|
+
* — no timestamp — precisely so an endorsement can be made ahead of time.
|
|
88
|
+
*/
|
|
89
|
+
export declare function buildApprovalKeysetDocument(args: {
|
|
90
|
+
seq: number;
|
|
91
|
+
signers: ApprovalSigner[];
|
|
92
|
+
endorsements?: Array<{
|
|
93
|
+
kid: string;
|
|
94
|
+
sig: string;
|
|
95
|
+
}>;
|
|
96
|
+
}): ApprovalKeysetDocument;
|
|
97
|
+
/** Sign keyset text with one key — for an offline root endorsement. */
|
|
98
|
+
export declare function endorseApprovalKeysetText(keysetText: string, signer: ApprovalSigner): {
|
|
99
|
+
kid: string;
|
|
100
|
+
sig: string;
|
|
101
|
+
};
|
|
102
|
+
/** Parse and validate keyset text. Null when it is not a well-formed keyset. */
|
|
103
|
+
export declare function parseApprovalKeysetText(text: unknown): ApprovalKeyset | null;
|
|
104
|
+
/**
|
|
105
|
+
* Why a keyset document was not adopted. Internal-only (daemon log and the
|
|
106
|
+
* `skrrd status` approvals line's last-refresh note), never a person's action
|
|
107
|
+
* except through the runbook in daemon/CLAUDE.md:
|
|
108
|
+
* - `malformed` — not a keyset document
|
|
109
|
+
* - `untrusted` — no valid signature by a key the daemon already trusts (a
|
|
110
|
+
* pinned key or an embedded root), or, for a first pin with no
|
|
111
|
+
* anchor, not even self-signed
|
|
112
|
+
* - `rollback` — `seq` is lower than the pinned keyset's
|
|
113
|
+
* - `conflict` — same `seq` as the pinned keyset with different keys
|
|
114
|
+
*/
|
|
115
|
+
export type ApprovalKeysetRefusalReason = 'malformed' | 'untrusted' | 'rollback' | 'conflict';
|
|
116
|
+
export type ApprovalKeysetVerdict = {
|
|
117
|
+
ok: true;
|
|
118
|
+
keyset: ApprovalKeyset;
|
|
119
|
+
/** The canonical text to pin. */
|
|
120
|
+
text: string;
|
|
121
|
+
/** `first_pin` (TOFU or root-anchored), `rotated`, or `unchanged`. */
|
|
122
|
+
change: 'first_pin' | 'rotated' | 'unchanged';
|
|
123
|
+
} | {
|
|
124
|
+
ok: false;
|
|
125
|
+
reason: ApprovalKeysetRefusalReason;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Daemon side: decide whether to adopt a keyset document.
|
|
129
|
+
*
|
|
130
|
+
* - Pinned: at least one signature must verify under a key in the PINNED set
|
|
131
|
+
* (or an anchor). The new set may drop or add keys — that is rotation — but
|
|
132
|
+
* its `seq` may not fall, and the same `seq` must be the same set.
|
|
133
|
+
* - Not pinned, anchors given (an embedded root for this server origin): at
|
|
134
|
+
* least one signature must verify under an anchor. No TOFU.
|
|
135
|
+
* - Not pinned, no anchors: trust on first use. The document must still be
|
|
136
|
+
* signed by a key it lists (proof that whoever served it holds one), but
|
|
137
|
+
* its authority is the authenticated HTTPS fetch it came from.
|
|
138
|
+
*
|
|
139
|
+
* A signature is checked against the TRUSTED copy of a key, looked up by kid —
|
|
140
|
+
* never against the key the new document lists under that kid, or a document
|
|
141
|
+
* could swap a key's bytes while keeping its name.
|
|
142
|
+
*/
|
|
143
|
+
export declare function verifyApprovalKeysetDocument(doc: unknown, trust: {
|
|
144
|
+
pinned: ApprovalKeyset | null;
|
|
145
|
+
anchors?: readonly ApprovalPublicKey[];
|
|
146
|
+
}): ApprovalKeysetVerdict;
|
|
147
|
+
export interface SignedToolApprovalPayload {
|
|
148
|
+
v: 2;
|
|
149
|
+
toolUseId: string;
|
|
150
|
+
toolName: string;
|
|
151
|
+
/** SHA-256 of the canonical tool input (`canonicalToolInputDigest`). */
|
|
152
|
+
inputSha256: string;
|
|
153
|
+
decidedBy: 'user';
|
|
154
|
+
/** The daemon this approval was minted for — another daemon refuses it. */
|
|
155
|
+
daemonId: string;
|
|
156
|
+
/** The agent session the call belongs to. */
|
|
157
|
+
sessionId: string;
|
|
158
|
+
issuedAt: number;
|
|
159
|
+
expiresAt: number;
|
|
160
|
+
}
|
|
161
|
+
export interface SignedToolApproval {
|
|
162
|
+
v: 2;
|
|
163
|
+
/** Canonical JSON text of a `SignedToolApprovalPayload` — the signed bytes. */
|
|
164
|
+
payload: string;
|
|
165
|
+
kid: string;
|
|
166
|
+
/** base64 Ed25519 signature over the domain prefix + `payload`. */
|
|
167
|
+
sig: string;
|
|
168
|
+
}
|
|
169
|
+
/** Server side: mint and sign a v2 attestation after a person approved THIS call. */
|
|
170
|
+
export declare function signToolApproval(args: {
|
|
171
|
+
toolUseId: string;
|
|
172
|
+
toolName: string;
|
|
173
|
+
toolInput: unknown;
|
|
174
|
+
daemonId: string;
|
|
175
|
+
sessionId: string;
|
|
176
|
+
signer: ApprovalSigner;
|
|
177
|
+
now?: number;
|
|
178
|
+
ttlMs?: number;
|
|
179
|
+
}): SignedToolApproval;
|
|
180
|
+
export interface SignedToolApprovalCall {
|
|
181
|
+
toolUseId: string;
|
|
182
|
+
toolName: string;
|
|
183
|
+
toolInput: unknown;
|
|
184
|
+
/** The verifying daemon's own id. */
|
|
185
|
+
daemonId: string;
|
|
186
|
+
/** The session the request says it belongs to. */
|
|
187
|
+
sessionId: string;
|
|
188
|
+
now?: number;
|
|
189
|
+
}
|
|
190
|
+
export type SignedToolApprovalVerdict = {
|
|
191
|
+
ok: true;
|
|
192
|
+
toolUseId: string;
|
|
193
|
+
expiresAt: number;
|
|
194
|
+
} | {
|
|
195
|
+
ok: false;
|
|
196
|
+
reason: AttestedToolApprovalRefusalReason;
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Daemon side: verify a v2 attestation against the pinned keyset and the call.
|
|
200
|
+
* Order matters: nothing in the payload is READ until the signature verified
|
|
201
|
+
* under a pinned key, so an unsigned claim can never pick which check runs.
|
|
202
|
+
*/
|
|
203
|
+
export declare function verifySignedToolApproval(approval: unknown, call: SignedToolApprovalCall, keyset: ApprovalKeyset): SignedToolApprovalVerdict;
|
|
204
|
+
/**
|
|
205
|
+
* Where the verifying daemon stands with the platform's approval keyset.
|
|
206
|
+
* `unreadable` is its own state, not `unpinned`: a pin file that exists and
|
|
207
|
+
* cannot be read must not quietly re-open the unsigned path.
|
|
208
|
+
*/
|
|
209
|
+
export type ApprovalKeysetPinState = {
|
|
210
|
+
state: 'pinned';
|
|
211
|
+
keyset: ApprovalKeyset;
|
|
212
|
+
} | {
|
|
213
|
+
state: 'unpinned';
|
|
214
|
+
} | {
|
|
215
|
+
state: 'unreadable';
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Daemon side: THE decision for any attestation, whatever version arrived.
|
|
219
|
+
*
|
|
220
|
+
* - pinned → only v2 verified against the pinned keyset approves; v1 is
|
|
221
|
+
* refused as `unsigned` (downgrade protection).
|
|
222
|
+
* - unpinned → legacy: v1 is verified exactly as before; v2 is refused as
|
|
223
|
+
* `unpinned` (nothing here could check it — the server should
|
|
224
|
+
* not have sent it, since this daemon did not announce
|
|
225
|
+
* `tool_approval_signed_v1`).
|
|
226
|
+
* - unreadable → nothing approves.
|
|
227
|
+
*
|
|
228
|
+
* Returns the claims the spend-once ledger keys on when it approves.
|
|
229
|
+
*/
|
|
230
|
+
export declare function verifyToolApprovalAttestation(approval: unknown, call: SignedToolApprovalCall, pin: ApprovalKeysetPinState): SignedToolApprovalVerdict & {
|
|
231
|
+
signed?: boolean;
|
|
232
|
+
};
|