@tangle-network/agent-app 0.45.53 → 0.45.55
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/README.md +1 -1
- package/dist/alerting/index.d.ts +5 -175
- package/dist/alerting/slack.d.ts +176 -0
- package/dist/app-auth/index.d.ts +14 -17
- package/dist/assets/index.d.ts +2 -504
- package/dist/assets/schema.d.ts +264 -0
- package/dist/assets/types.d.ts +237 -0
- package/dist/assistant/AssistantDock.d.ts +56 -0
- package/dist/assistant/AssistantHistory.d.ts +41 -0
- package/dist/assistant/AssistantPanel.d.ts +84 -0
- package/dist/assistant/ProposalCard.d.ts +41 -0
- package/dist/assistant/ResizeHandle.d.ts +19 -0
- package/dist/assistant/client-context.d.ts +20 -0
- package/dist/assistant/client.d.ts +117 -0
- package/dist/assistant/index.d.ts +19 -848
- package/dist/assistant/launcher.d.ts +23 -0
- package/dist/assistant/persistence.d.ts +26 -0
- package/dist/assistant/presentation.d.ts +99 -0
- package/dist/assistant/provider-label.d.ts +7 -0
- package/dist/assistant/reducer.d.ts +130 -0
- package/dist/assistant/sse.d.ts +24 -0
- package/dist/assistant/time-ago.d.ts +6 -0
- package/dist/assistant/transcript.d.ts +97 -0
- package/dist/assistant/types.d.ts +291 -0
- package/dist/assistant/use-stick-to-bottom.d.ts +28 -0
- package/dist/assistant/useAssistantChat.d.ts +63 -0
- package/dist/assistant/useAssistantModels.d.ts +22 -0
- package/dist/assistant/useAssistantThreads.d.ts +47 -0
- package/dist/assistant/usePanelPrefs.d.ts +55 -0
- package/dist/billing/index.d.ts +19 -21
- package/dist/brand/index.d.ts +16 -10
- package/dist/brand-extraction/extract.d.ts +34 -0
- package/dist/brand-extraction/index.d.ts +12 -214
- package/dist/brand-extraction/map.d.ts +58 -0
- package/dist/brand-extraction/types.d.ts +119 -0
- package/dist/catalog/index.d.ts +11 -101
- package/dist/chat-react/composer-mode-controls.d.ts +14 -0
- package/dist/chat-react/entry-composer.d.ts +92 -0
- package/dist/chat-react/index.d.ts +22 -118
- package/dist/chat-react/types.d.ts +11 -0
- package/dist/chat-routes/attachment-store.d.ts +84 -0
- package/dist/chat-routes/attachment-upload.d.ts +84 -0
- package/dist/chat-routes/attachment-validation.d.ts +95 -0
- package/dist/chat-routes/binary-sniff.d.ts +45 -0
- package/dist/chat-routes/completed-sandbox-turn.d.ts +25 -0
- package/dist/chat-routes/detached-turn.d.ts +197 -0
- package/dist/chat-routes/dispatch-parts.d.ts +101 -0
- package/dist/chat-routes/draft-persistence.d.ts +189 -0
- package/dist/chat-routes/durable-projection.d.ts +18 -0
- package/dist/chat-routes/file-index.d.ts +115 -0
- package/dist/chat-routes/index.d.ts +25 -1840
- package/dist/chat-routes/model-failover-stream.d.ts +206 -0
- package/dist/chat-routes/promote-file-part.d.ts +84 -0
- package/dist/chat-routes/resolve-attachments.d.ts +72 -0
- package/dist/chat-routes/sandbox-producer.d.ts +146 -0
- package/dist/chat-routes/sandbox-turn-usage.d.ts +4 -0
- package/dist/{stale-turn-lock-DucQzvXu.d.ts → chat-routes/stale-turn-lock.d.ts} +7 -9
- package/dist/chat-routes/turn-routes.d.ts +540 -0
- package/dist/chat-routes/upload.d.ts +84 -0
- package/dist/{wire-DOZ-O6hD.d.ts → chat-routes/wire.d.ts} +41 -44
- package/dist/chat-store/core.d.ts +19 -0
- package/dist/chat-store/index.d.ts +22 -322
- package/dist/{parts-BqIHMdyu.d.ts → chat-store/parts.d.ts} +49 -47
- package/dist/chat-store/schema.d.ts +157 -0
- package/dist/chat-store/store.d.ts +177 -0
- package/dist/config/index.d.ts +13 -18
- package/dist/crypto/index.d.ts +10 -12
- package/dist/crypto/web-token.d.ts +22 -0
- package/dist/design-canvas/apply.d.ts +70 -0
- package/dist/design-canvas/drizzle-store.d.ts +29 -0
- package/dist/design-canvas/drizzle.d.ts +7 -575
- package/dist/{export-presets-mgVulRaV.d.ts → design-canvas/export-presets.d.ts} +18 -22
- package/dist/design-canvas/index.d.ts +22 -268
- package/dist/design-canvas/mcp-entry.d.ts +15 -0
- package/dist/design-canvas/mcp-handler.d.ts +34 -0
- package/dist/design-canvas/mcp-tools.d.ts +30 -0
- package/dist/{model-DnfO_PdJ.d.ts → design-canvas/model.d.ts} +33 -35
- package/dist/{operations-ByJ6yXOW.d.ts → design-canvas/operations.d.ts} +21 -25
- package/dist/design-canvas/schema.d.ts +558 -0
- package/dist/{store-CqfDtnPQ.d.ts → design-canvas/store.d.ts} +8 -12
- package/dist/design-canvas/templates.d.ts +72 -0
- package/dist/design-canvas/validate.d.ts +32 -0
- package/dist/design-canvas-react/components/BleedTrimOverlay.d.ts +22 -0
- package/dist/design-canvas-react/components/BrandKnot.d.ts +11 -0
- package/dist/design-canvas-react/components/CanvasEmptyState.d.ts +32 -0
- package/dist/design-canvas-react/components/CanvasInsertPanel.d.ts +53 -0
- package/dist/{lazy-DrkVyDpe.d.ts → design-canvas-react/components/DesignCanvas.d.ts} +27 -20
- package/dist/design-canvas-react/components/DesignCanvasEditor.d.ts +23 -0
- package/dist/design-canvas-react/components/ElementNode.d.ts +51 -0
- package/dist/design-canvas-react/components/ExportControl.d.ts +21 -0
- package/dist/design-canvas-react/components/GridLayer.d.ts +47 -0
- package/dist/design-canvas-react/components/InlineTextEditor.d.ts +25 -0
- package/dist/design-canvas-react/components/LayersPanel.d.ts +20 -0
- package/dist/design-canvas-react/components/PagesStrip.d.ts +34 -0
- package/dist/design-canvas-react/components/Rulers.d.ts +31 -0
- package/dist/design-canvas-react/components/SelectionLayer.d.ts +51 -0
- package/dist/design-canvas-react/components/SnapGuidesOverlay.d.ts +25 -0
- package/dist/design-canvas-react/components/Toolbar.d.ts +64 -0
- package/dist/design-canvas-react/components/Workspace.d.ts +92 -0
- package/dist/design-canvas-react/components/ZoomControls.d.ts +14 -0
- package/dist/design-canvas-react/components/glyphs.d.ts +46 -0
- package/dist/design-canvas-react/components/icon-button.d.ts +22 -0
- package/dist/design-canvas-react/components/index.d.ts +27 -0
- package/dist/design-canvas-react/components/layer-tree.d.ts +34 -0
- package/dist/design-canvas-react/components/ruler-math.d.ts +78 -0
- package/dist/design-canvas-react/components/transform-math.d.ts +168 -0
- package/dist/{command-stack-TNPWJCzW.d.ts → design-canvas-react/contracts.d.ts} +16 -63
- package/dist/design-canvas-react/engine/command-stack.d.ts +43 -0
- package/dist/design-canvas-react/engine/commands.d.ts +154 -0
- package/dist/design-canvas-react/engine/selection.d.ts +48 -0
- package/dist/design-canvas-react/engine/snap.d.ts +24 -0
- package/dist/design-canvas-react/engine/zoom-pan.d.ts +18 -0
- package/dist/design-canvas-react/engine.d.ts +21 -399
- package/dist/design-canvas-react/export-math.d.ts +104 -0
- package/dist/design-canvas-react/export.d.ts +89 -0
- package/dist/design-canvas-react/index.d.ts +16 -586
- package/dist/design-canvas-react/insert-builders.d.ts +61 -0
- package/dist/design-canvas-react/lazy.d.ts +21 -6
- package/dist/documents/docx.d.ts +50 -0
- package/dist/documents/extract.d.ts +87 -0
- package/dist/documents/index.d.ts +26 -232
- package/dist/documents/media-type.d.ts +33 -0
- package/dist/documents/pdf-inspector.d.ts +5 -9
- package/dist/{types-DrBidf3O.d.ts → documents/types.d.ts} +13 -15
- package/dist/documents/zip.d.ts +56 -0
- package/dist/eval/calibration.d.ts +106 -0
- package/dist/eval/index.d.ts +8 -116
- package/dist/eval-campaign/index.d.ts +11 -12
- package/dist/{trust-gate-Dcm5xSva.d.ts → eval-campaign/trust-gate.d.ts} +5 -9
- package/dist/forms/blank.d.ts +48 -0
- package/dist/forms/fill.d.ts +105 -0
- package/dist/forms/index.d.ts +58 -332
- package/dist/forms/registry.d.ts +115 -0
- package/dist/forms/verify.d.ts +58 -0
- package/dist/harness/index.d.ts +21 -19
- package/dist/intakes/api.d.ts +5 -11
- package/dist/{completion-CvcNUz07.d.ts → intakes/completion.d.ts} +7 -11
- package/dist/intakes/context-sufficiency.d.ts +113 -0
- package/dist/intakes/drizzle/schema.d.ts +338 -0
- package/dist/intakes/drizzle/store.d.ts +75 -0
- package/dist/intakes/drizzle.d.ts +12 -391
- package/dist/intakes/index.d.ts +23 -113
- package/dist/{model-C8U0HZxL.d.ts → intakes/model.d.ts} +15 -17
- package/dist/intakes-react/components/BrandMark.d.ts +10 -0
- package/dist/intakes-react/components/IntakeInterview.d.ts +15 -0
- package/dist/intakes-react/components/index.d.ts +1 -0
- package/dist/intakes-react/contracts.d.ts +42 -0
- package/dist/intakes-react/index.d.ts +12 -47
- package/dist/intakes-react/lazy.d.ts +9 -8
- package/dist/integrations/index.d.ts +10 -12
- package/dist/{contract-OxG_jVMx.d.ts → interactions/contract.d.ts} +40 -42
- package/dist/interactions/index.d.ts +16 -256
- package/dist/interactions/route.d.ts +151 -0
- package/dist/interactions/sidecar.d.ts +100 -0
- package/dist/knowledge/index.d.ts +7 -11
- package/dist/knowledge-loop/index.d.ts +13 -20
- package/dist/legibility/checks/empty-state.d.ts +59 -0
- package/dist/legibility/checks/reachability.d.ts +103 -0
- package/dist/legibility/checks/silent-failure.d.ts +57 -0
- package/dist/legibility/checks/success.d.ts +38 -0
- package/dist/legibility/checks/vocabulary.d.ts +65 -0
- package/dist/legibility/cli-args.d.ts +30 -0
- package/dist/legibility/cli.d.ts +25 -0
- package/dist/legibility/index.d.ts +10 -530
- package/dist/legibility/report.d.ts +22 -0
- package/dist/legibility/scan.d.ts +29 -0
- package/dist/legibility/source.d.ts +132 -0
- package/dist/legibility/suppress.d.ts +36 -0
- package/dist/legibility/types.d.ts +168 -0
- package/dist/legibility/walk-sources.d.ts +21 -0
- package/dist/{agent-activity-C8ZG0F0M.d.ts → missions/agent-activity.d.ts} +3 -5
- package/dist/missions/engine.d.ts +251 -0
- package/dist/missions/events.d.ts +195 -0
- package/dist/missions/index.d.ts +12 -765
- package/dist/missions/plan-parse.d.ts +50 -0
- package/dist/missions/service.d.ts +265 -0
- package/dist/{failover-D-3UXXTb.d.ts → model-resolution/failover.d.ts} +10 -12
- package/dist/model-resolution/index.d.ts +15 -18
- package/dist/object-store/index.d.ts +15 -17
- package/dist/openui/action.d.ts +54 -0
- package/dist/openui/authoring.d.ts +25 -0
- package/dist/openui/index.d.ts +24 -206
- package/dist/openui/route.d.ts +124 -0
- package/dist/openui/segments.d.ts +71 -0
- package/dist/openui/values.d.ts +82 -0
- package/dist/openui-react/index.d.ts +9 -13
- package/dist/peer-floors/check.d.ts +9 -190
- package/dist/peer-floors/cli.d.ts +2 -3
- package/dist/peer-floors/dependency-source.d.ts +178 -0
- package/dist/plans/index.d.ts +13 -14
- package/dist/{billing-BuNlaKlE.d.ts → platform/billing.d.ts} +28 -32
- package/dist/platform/guards.d.ts +79 -0
- package/dist/platform/hub.d.ts +107 -0
- package/dist/platform/index.d.ts +7 -112
- package/dist/{sso-Cm00S61u.d.ts → platform/sso.d.ts} +15 -97
- package/dist/preflight/cli.d.ts +3 -6
- package/dist/preflight/index.d.ts +16 -18
- package/dist/preset-cloudflare/headers.d.ts +12 -0
- package/dist/preset-cloudflare/index.d.ts +22 -74
- package/dist/preset-cloudflare/workflow-instance.d.ts +35 -0
- package/dist/profile/budget.d.ts +72 -0
- package/dist/profile/fingerprint.d.ts +65 -0
- package/dist/profile/index.d.ts +27 -19
- package/dist/prompt/index.d.ts +3 -5
- package/dist/record/drizzle/schema.d.ts +488 -0
- package/dist/record/drizzle/store.d.ts +224 -0
- package/dist/record/drizzle.d.ts +10 -679
- package/dist/record/fold.d.ts +99 -0
- package/dist/record/index.d.ts +13 -13
- package/dist/{fold-DACU7gtf.d.ts → record/model.d.ts} +22 -124
- package/dist/record/ulid.d.ts +12 -0
- package/dist/redact/index.d.ts +14 -16
- package/dist/run/index.d.ts +11 -16
- package/dist/runtime/agent.d.ts +23 -0
- package/dist/runtime/certified-delivery.d.ts +57 -0
- package/dist/runtime/index.d.ts +17 -367
- package/dist/runtime/loop.d.ts +58 -0
- package/dist/runtime/model-catalog.d.ts +103 -0
- package/dist/{model-CdCDfBA9.d.ts → runtime/model.d.ts} +25 -27
- package/dist/runtime/openai-stream.d.ts +126 -0
- package/dist/runtime/surface-profile.d.ts +115 -0
- package/dist/sandbox/binary-read.d.ts +63 -0
- package/dist/sandbox/diagnostics.d.ts +69 -0
- package/dist/sandbox/index.d.ts +103 -1085
- package/dist/sandbox/model.d.ts +179 -0
- package/dist/sandbox/outcome.d.ts +10 -0
- package/dist/sandbox/prewarm-claim-d1.d.ts +80 -0
- package/dist/sandbox/prewarm.d.ts +193 -0
- package/dist/sandbox/recovery.d.ts +216 -0
- package/dist/sandbox/terminal-connection.d.ts +145 -0
- package/dist/sandbox/workspace-sandbox-manager.d.ts +44 -0
- package/dist/sequences/apply.d.ts +54 -0
- package/dist/sequences/captions.d.ts +91 -0
- package/dist/sequences/drizzle-store.d.ts +36 -0
- package/dist/sequences/drizzle.d.ts +7 -1252
- package/dist/sequences/exports.d.ts +138 -0
- package/dist/sequences/index.d.ts +19 -340
- package/dist/sequences/mcp-entry.d.ts +15 -0
- package/dist/sequences/mcp-handler.d.ts +39 -0
- package/dist/sequences/mcp-tools.d.ts +47 -0
- package/dist/{store-B7LLlk9p.d.ts → sequences/model.d.ts} +26 -110
- package/dist/sequences/operations.d.ts +126 -0
- package/dist/sequences/schema.d.ts +1231 -0
- package/dist/sequences/store.d.ts +81 -0
- package/dist/sequences/validate.d.ts +98 -0
- package/dist/sequences-react/components/BrandMark.d.ts +10 -0
- package/dist/sequences-react/components/PreviewCanvas.d.ts +26 -0
- package/dist/sequences-react/components/SnapIndicatorLine.d.ts +11 -0
- package/dist/sequences-react/components/TimelineClipChip.d.ts +80 -0
- package/dist/sequences-react/components/TimelineEditor.d.ts +44 -0
- package/dist/sequences-react/components/TimelineEmptyState.d.ts +21 -0
- package/dist/sequences-react/components/TimelineGhostLanes.d.ts +14 -0
- package/dist/sequences-react/components/TimelinePlayhead.d.ts +11 -0
- package/dist/sequences-react/components/TimelineRuler.d.ts +16 -0
- package/dist/sequences-react/components/TimelineSmallScreenGate.d.ts +12 -0
- package/dist/sequences-react/components/TimelineTrackRow.d.ts +51 -0
- package/dist/sequences-react/components/ZoomControl.d.ts +15 -0
- package/dist/sequences-react/components/composite-command.d.ts +8 -0
- package/dist/sequences-react/components/glyphs.d.ts +26 -0
- package/dist/sequences-react/components/index.d.ts +31 -0
- package/dist/sequences-react/components/interaction-math.d.ts +103 -0
- package/dist/sequences-react/contracts.d.ts +187 -0
- package/dist/sequences-react/engine/command-stack.d.ts +18 -0
- package/dist/sequences-react/engine/commands.d.ts +146 -0
- package/dist/sequences-react/engine/playback.d.ts +18 -0
- package/dist/sequences-react/engine/snap.d.ts +29 -0
- package/dist/sequences-react/engine/zoom.d.ts +29 -0
- package/dist/sequences-react/index.d.ts +20 -880
- package/dist/sequences-react/lazy.d.ts +8 -0
- package/dist/sequences-react/media/frame-provider.d.ts +70 -0
- package/dist/sequences-react/media/transcription.d.ts +33 -0
- package/dist/sequences-react/media/waveform.d.ts +34 -0
- package/dist/session-shell/index.d.ts +31 -204
- package/dist/session-shell/nav-guard.d.ts +170 -0
- package/dist/session-shell/path.d.ts +19 -0
- package/dist/signoff/cli.d.ts +4 -7
- package/dist/signoff/config.d.ts +12 -0
- package/dist/signoff/exec.d.ts +44 -0
- package/dist/signoff/index.d.ts +56 -14
- package/dist/signoff/invoked-as-script.d.ts +25 -0
- package/dist/signoff/node-version.d.ts +50 -0
- package/dist/signoff/proof-attach.d.ts +88 -0
- package/dist/signoff/proof-cli.d.ts +1 -0
- package/dist/signoff/proof-fixture.d.ts +13 -0
- package/dist/signoff/proof-from-report.d.ts +22 -0
- package/dist/signoff/proof-git.d.ts +57 -0
- package/dist/signoff/proof-record.d.ts +202 -0
- package/dist/signoff/proof-verify.d.ts +103 -0
- package/dist/signoff/proof.d.ts +35 -310
- package/dist/signoff/report.d.ts +7 -0
- package/dist/{run-D80hoLKh.d.ts → signoff/run.d.ts} +3 -6
- package/dist/signoff/schedule.d.ts +55 -0
- package/dist/signoff/seeds.d.ts +50 -0
- package/dist/signoff/store.d.ts +22 -0
- package/dist/{types-Bd6uW9vQ.d.ts → signoff/types.d.ts} +15 -17
- package/dist/signoff/workflow-pin.d.ts +56 -0
- package/dist/signoff/workspace.d.ts +40 -0
- package/dist/skills/index.d.ts +28 -32
- package/dist/skills-placement/index.d.ts +7 -11
- package/dist/spend/budget.d.ts +123 -0
- package/dist/spend/ceiling.d.ts +51 -0
- package/dist/spend/cli-args.d.ts +20 -0
- package/dist/spend/cli.d.ts +1 -0
- package/dist/spend/fixtures/incident-parked-time.d.ts +55 -0
- package/dist/spend/index.d.ts +38 -1144
- package/dist/spend/liveness.d.ts +131 -0
- package/dist/spend/ownership.d.ts +87 -0
- package/dist/spend/reconcile.d.ts +109 -0
- package/dist/spend/reference.d.ts +42 -0
- package/dist/spend/report.d.ts +12 -0
- package/dist/spend/store.d.ts +123 -0
- package/dist/spend/types.d.ts +466 -0
- package/dist/store/index.d.ts +10 -12
- package/dist/stories/app-shell/fixtures.d.ts +43 -0
- package/dist/stories/app-shell/shell.d.ts +81 -0
- package/dist/stories/assistant/fixtures.d.ts +73 -0
- package/dist/stories/chat/fixtures.d.ts +70 -0
- package/dist/stories/chat/markdown.d.ts +11 -0
- package/dist/stories/chat/run-drill-in.d.ts +19 -0
- package/dist/stories/chat-controls/fixtures.d.ts +116 -0
- package/dist/stories/design-canvas/fixtures.d.ts +57 -0
- package/dist/stories/fixtures/canvas.d.ts +10 -0
- package/dist/stories/fixtures/catalog.d.ts +7 -0
- package/dist/stories/fixtures/chat.d.ts +39 -0
- package/dist/stories/fixtures/index.d.ts +4 -0
- package/dist/stories/fixtures/sequences.d.ts +17 -0
- package/dist/stories/panels/fixtures.d.ts +63 -0
- package/dist/stories/sequences/fixtures.d.ts +30 -0
- package/dist/stories/studio/fixtures.d.ts +22 -0
- package/dist/stream/index.d.ts +10 -56
- package/dist/{stream-normalizer-DKRxyVlZ.d.ts → stream/stream-normalizer.d.ts} +23 -26
- package/dist/{turn-buffer-COMQUwO2.d.ts → stream/turn-buffer.d.ts} +21 -23
- package/dist/stream/turn-identity.d.ts +49 -0
- package/dist/studio/generation.d.ts +179 -0
- package/dist/studio/index.d.ts +12 -181
- package/dist/studio-react/avatar-composer.d.ts +8 -0
- package/dist/studio-react/composer-hero.d.ts +12 -0
- package/dist/studio-react/composer-shell.d.ts +18 -0
- package/dist/studio-react/generation-card.d.ts +9 -0
- package/dist/studio-react/generation-detail-modal.d.ts +11 -0
- package/dist/studio-react/generation-detail.d.ts +6 -0
- package/dist/studio-react/generation-grid.d.ts +15 -0
- package/dist/studio-react/image-composer.d.ts +8 -0
- package/dist/studio-react/index.d.ts +32 -245
- package/dist/studio-react/library-drawer.d.ts +12 -0
- package/dist/studio-react/library-panel.d.ts +15 -0
- package/dist/studio-react/publish-package-composer.d.ts +18 -0
- package/dist/studio-react/result-canvas.d.ts +6 -0
- package/dist/studio-react/speech-composer.d.ts +4 -0
- package/dist/studio-react/studio-header.d.ts +5 -0
- package/dist/studio-react/studio-sheet.d.ts +12 -0
- package/dist/studio-react/studio-workspace.d.ts +23 -0
- package/dist/studio-react/transcription-composer.d.ts +12 -0
- package/dist/studio-react/type-config.d.ts +11 -0
- package/dist/studio-react/use-studio-generations.d.ts +20 -0
- package/dist/studio-react/video-composer.d.ts +10 -0
- package/dist/tangle/index.d.ts +7 -9
- package/dist/teams/drizzle/access.d.ts +82 -0
- package/dist/{invitations-schema-_fI7HkJP.d.ts → teams/drizzle/invitations-schema.d.ts} +39 -27
- package/dist/teams/drizzle/personal-organization.d.ts +41 -0
- package/dist/{access-490O6aOU.d.ts → teams/drizzle/schema.d.ts} +57 -122
- package/dist/teams/drizzle.d.ts +12 -44
- package/dist/teams/index.d.ts +20 -44
- package/dist/teams/invitations-api.d.ts +17 -21
- package/dist/{invitations-DoYMvXea.d.ts → teams/invitations.d.ts} +14 -18
- package/dist/teams/invite.d.ts +42 -0
- package/dist/teams/members-api.d.ts +12 -16
- package/dist/teams/resend.d.ts +3 -13
- package/dist/{roles-B4nU3jDi.d.ts → teams/roles.d.ts} +18 -20
- package/dist/teams-react/components/BrandMark.d.ts +10 -0
- package/dist/teams-react/components/InvitationsPanel.d.ts +13 -0
- package/dist/teams-react/components/InviteAcceptPage.d.ts +10 -0
- package/dist/teams-react/components/MembersPanel.d.ts +14 -0
- package/dist/teams-react/components/RoleSelect.d.ts +17 -0
- package/dist/teams-react/components/index.d.ts +3 -0
- package/dist/teams-react/contracts.d.ts +134 -0
- package/dist/teams-react/index.d.ts +12 -143
- package/dist/teams-react/lazy.d.ts +11 -11
- package/dist/test-setup.d.ts +1 -0
- package/dist/theme/index.d.ts +6 -104
- package/dist/theme/tailwind-preset.d.ts +1 -2
- package/dist/theme/theme.d.ts +106 -0
- package/dist/theme-contract/cli.d.ts +21 -0
- package/dist/theme-contract/index.d.ts +4 -6
- package/dist/{auth-BYtiazA4.d.ts → tools/auth.d.ts} +8 -11
- package/dist/tools/capability.d.ts +54 -0
- package/dist/tools/dispatch.d.ts +37 -0
- package/dist/tools/errors.d.ts +8 -0
- package/dist/tools/gating.d.ts +62 -0
- package/dist/tools/http.d.ts +27 -0
- package/dist/tools/index.d.ts +12 -217
- package/dist/{mcp-rpc-DYwPlYbZ.d.ts → tools/mcp-rpc.d.ts} +7 -9
- package/dist/{mcp-xxoZZfor.d.ts → tools/mcp.d.ts} +14 -16
- package/dist/tools/openai.d.ts +28 -0
- package/dist/tools/registry.d.ts +39 -0
- package/dist/tools/runtime.d.ts +22 -0
- package/dist/{types-B25Mib1r.d.ts → tools/types.d.ts} +15 -83
- package/dist/{flow-types-CJxEmaRy.d.ts → trace/flow-types.d.ts} +2 -4
- package/dist/trace/index.d.ts +11 -148
- package/dist/trace/mission-flow.d.ts +82 -0
- package/dist/trace/mission-trace.d.ts +52 -0
- package/dist/turn-health/classify.d.ts +207 -0
- package/dist/turn-health/index.d.ts +29 -637
- package/dist/turn-health/lifecycle.d.ts +75 -0
- package/dist/turn-health/sink.d.ts +122 -0
- package/dist/turn-health/sweep.d.ts +245 -0
- package/dist/turn-stream/adapters.d.ts +257 -0
- package/dist/turn-stream/core.d.ts +293 -0
- package/dist/turn-stream/do.d.ts +144 -0
- package/dist/turn-stream/index.d.ts +62 -738
- package/dist/turn-stream/memory.d.ts +41 -0
- package/dist/vault/ConfirmDialog.d.ts +22 -0
- package/dist/vault/VaultPane.d.ts +15 -0
- package/dist/{VaultPane-BDP6SB_K.d.ts → vault/contracts.d.ts} +15 -22
- package/dist/vault/index.d.ts +15 -22
- package/dist/vault/lazy.d.ts +9 -7
- package/dist/vault/server.d.ts +8 -10
- package/dist/web/free-route-limit.d.ts +187 -0
- package/dist/web/index.d.ts +15 -207
- package/dist/{rate-limit-BOVmJRXZ.d.ts → web/rate-limit.d.ts} +3 -5
- package/dist/web-react/agent-session-controls.d.ts +105 -0
- package/dist/web-react/async/async-view.d.ts +69 -0
- package/dist/web-react/async/index.d.ts +13 -305
- package/dist/web-react/async/state.d.ts +107 -0
- package/dist/web-react/async/use-async-resource.d.ts +41 -0
- package/dist/web-react/async/use-confirmed-mutation.d.ts +90 -0
- package/dist/web-react/brand-mark.d.ts +11 -0
- package/dist/web-react/chat-attachments.d.ts +21 -0
- package/dist/web-react/chat-composer.d.ts +174 -0
- package/dist/web-react/chat-interactions.d.ts +1 -0
- package/dist/web-react/chat-mentions.d.ts +48 -0
- package/dist/web-react/chat-stream.d.ts +106 -0
- package/dist/web-react/class-names.d.ts +10 -0
- package/dist/web-react/controls.d.ts +265 -0
- package/dist/web-react/durable-chat-cards.d.ts +40 -0
- package/dist/web-react/durable-interaction-submit.d.ts +22 -0
- package/dist/web-react/durable-plan-card.d.ts +13 -0
- package/dist/web-react/durable-plan-flow.d.ts +77 -0
- package/dist/web-react/harness-glyphs.d.ts +28 -0
- package/dist/web-react/index.d.ts +80 -2347
- package/dist/web-react/inert.d.ts +39 -0
- package/dist/web-react/insight-card.d.ts +203 -0
- package/dist/web-react/interaction-card-support.d.ts +115 -0
- package/dist/web-react/interaction-plan-card.d.ts +39 -0
- package/dist/web-react/interaction-question-card.d.ts +100 -0
- package/dist/web-react/message-attachments.d.ts +56 -0
- package/dist/web-react/mission-activity.d.ts +96 -0
- package/dist/web-react/motion.d.ts +43 -0
- package/dist/web-react/provenance-model.d.ts +195 -0
- package/dist/web-react/provenance.d.ts +82 -0
- package/dist/web-react/provider-logo.d.ts +14 -0
- package/dist/web-react/record-grid-model.d.ts +257 -0
- package/dist/web-react/record-grid.d.ts +108 -0
- package/dist/web-react/sandbox-terminal.d.ts +90 -0
- package/dist/web-react/seat-paywall.d.ts +47 -0
- package/dist/web-react/session-history.d.ts +196 -0
- package/dist/web-react/smooth-text.d.ts +29 -0
- package/dist/web-react/sparkline.d.ts +150 -0
- package/dist/web-react/terminal.d.ts +1 -92
- package/dist/web-react/use-chat-interactions.d.ts +78 -0
- package/dist/web-react/use-composer-attachments.d.ts +111 -0
- package/dist/web-react/use-file-mentions.d.ts +94 -0
- package/dist/web-react/work-product.d.ts +105 -0
- package/dist/work-product/claim-support.d.ts +288 -0
- package/dist/work-product/index.d.ts +16 -849
- package/dist/work-product/provenance.d.ts +61 -0
- package/dist/{queue-VTBA5ONX.d.ts → work-product/queue.d.ts} +10 -12
- package/dist/work-product/quote.d.ts +139 -0
- package/dist/work-product/route.d.ts +88 -0
- package/dist/work-product/service.d.ts +123 -0
- package/dist/work-product/tools.d.ts +144 -0
- package/dist/{types-CCeYywdS.d.ts → work-product/types.d.ts} +29 -31
- package/dist/work-product-react/index.d.ts +19 -8
- package/dist/workspace-react/index.d.ts +8 -11
- package/package.json +5 -4
- package/dist/agent-session-controls-CmlXwp_H.d.ts +0 -384
- package/dist/apply-6wlMOLf8.d.ts +0 -280
- package/dist/attachment-validation-BfJDBU1g.d.ts +0 -261
- package/dist/budget-BOucfcb_.d.ts +0 -142
- package/dist/values-C7RidJuI.d.ts +0 -156
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nav destinations, and the guard that proves every href the rail renders
|
|
3
|
+
* resolves to a route the product's router actually registered.
|
|
4
|
+
*
|
|
5
|
+
* A rail row's href is assembled from a base plus a relative path, and nothing
|
|
6
|
+
* downstream re-checks it: the sidebar renders a link, the click navigates, and
|
|
7
|
+
* the router answers 404. A unit test written against the nav builder alone
|
|
8
|
+
* cannot catch that — it asserts the href the builder produced, which is the
|
|
9
|
+
* same wrong string the user clicks.
|
|
10
|
+
*
|
|
11
|
+
* Two mechanisms, meant to be used together:
|
|
12
|
+
*
|
|
13
|
+
* 1. `NavDestination` makes the base a REQUIRED discriminant (`scope`). An
|
|
14
|
+
* optional `absolute?: boolean`-style flag has the opposite property:
|
|
15
|
+
* omitting it type-checks, and the destination silently resolves under the
|
|
16
|
+
* workspace prefix instead of the app-level one. A required literal union
|
|
17
|
+
* turns that omission into a compile error, and widening `TScope` demands a
|
|
18
|
+
* base for the new scope rather than defaulting to a wrong one.
|
|
19
|
+
* 2. `assertNavHrefsRegistered` matches every resolved href against the route
|
|
20
|
+
* table, so a destination the router never registered fails a test instead
|
|
21
|
+
* of a user's click. It reads the product's real route table, so it cannot
|
|
22
|
+
* agree with the builder's mistake the way a hand-maintained expected-href
|
|
23
|
+
* list does.
|
|
24
|
+
*/
|
|
25
|
+
/** The bases a product routes rail rows under. `workspace` is the per-workspace
|
|
26
|
+
* prefix (`/app/ws_123`); `app` is the account-level one (`/app`), where
|
|
27
|
+
* singleton surfaces such as a shared terminal or billing live. */
|
|
28
|
+
export type NavScope = 'workspace' | 'app';
|
|
29
|
+
/** A base path per scope. Widening `TScope` widens this record, so a product
|
|
30
|
+
* that adds a scope cannot compile until it supplies that scope's base. */
|
|
31
|
+
export type NavScopeBases<TScope extends string = NavScope> = Readonly<Record<TScope, string>>;
|
|
32
|
+
/** One rail destination as the product declares it, before a base is applied. */
|
|
33
|
+
export interface NavDestination<TScope extends string = NavScope> {
|
|
34
|
+
id: string;
|
|
35
|
+
/** Path relative to the base named by `scope`. `''` is the base itself.
|
|
36
|
+
* Must be empty or start with `/` — a bare `'vault'` would concatenate into
|
|
37
|
+
* `/app/ws_123vault`, so it is rejected rather than silently repaired. */
|
|
38
|
+
path: string;
|
|
39
|
+
/** Which base `path` resolves against. Required on purpose. */
|
|
40
|
+
scope: TScope;
|
|
41
|
+
}
|
|
42
|
+
/** A destination with its base applied. */
|
|
43
|
+
export interface ResolvedNavDestination<TScope extends string = NavScope> {
|
|
44
|
+
id: string;
|
|
45
|
+
href: string;
|
|
46
|
+
scope: TScope;
|
|
47
|
+
}
|
|
48
|
+
/** Apply a destination's scope base to its path.
|
|
49
|
+
*
|
|
50
|
+
* Throws when the scope has no base configured — a product that assembles
|
|
51
|
+
* `bases` dynamically can defeat the type-level guarantee, and a missing base
|
|
52
|
+
* would otherwise produce `undefined/vault`. */
|
|
53
|
+
export declare function resolveNavHref<TScope extends string>(destination: NavDestination<TScope>, bases: NavScopeBases<TScope>): string;
|
|
54
|
+
/** Apply the bases to every destination, preserving declaration order. */
|
|
55
|
+
export declare function resolveNavDestinations<TScope extends string>(destinations: readonly NavDestination<TScope>[], bases: NavScopeBases<TScope>): ResolvedNavDestination<TScope>[];
|
|
56
|
+
export interface ResolveScopedActiveNavIdOptions<TScope extends string = NavScope> {
|
|
57
|
+
pathname: string;
|
|
58
|
+
destinations: readonly NavDestination<TScope>[];
|
|
59
|
+
bases: NavScopeBases<TScope>;
|
|
60
|
+
/** Extra ABSOLUTE prefixes that light an existing row, e.g.
|
|
61
|
+
* `{ '/app/ws_1/agents': 'integrations' }`. Same longest-prefix contest. */
|
|
62
|
+
aliases?: Readonly<Record<string, string>>;
|
|
63
|
+
/** ABSOLUTE prefixes that deliberately highlight nothing, beating any shorter
|
|
64
|
+
* match. */
|
|
65
|
+
claimsNothing?: readonly string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The rail row to highlight, across scopes.
|
|
69
|
+
*
|
|
70
|
+
* `resolveActiveNavId` resolves rows against ONE base, so an app-level row can
|
|
71
|
+
* only be highlighted by a second, hand-rolled scan — the same split that lets
|
|
72
|
+
* an app-level destination render under the workspace base. This resolves the
|
|
73
|
+
* hrefs first and runs a single longest-prefix contest over absolute paths, so
|
|
74
|
+
* declaration order cannot change the answer and no scope needs its own pass.
|
|
75
|
+
*
|
|
76
|
+
* Prefixes in `aliases` / `claimsNothing` are absolute here, unlike
|
|
77
|
+
* `resolveActiveNavId`'s base-relative ones, because the contest itself is
|
|
78
|
+
* absolute.
|
|
79
|
+
*/
|
|
80
|
+
export declare function resolveScopedActiveNavId<TScope extends string>({ pathname, destinations, bases, aliases, claimsNothing, }: ResolveScopedActiveNavIdOptions<TScope>): string | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* One entry of a registered route table. Structurally compatible with
|
|
83
|
+
* react-router's `RouteConfigEntry`, so a product passes its real `routes.ts`
|
|
84
|
+
* default export straight in — the point of the guard is that it reads the
|
|
85
|
+
* router's own truth rather than a second list that can agree with the bug.
|
|
86
|
+
*/
|
|
87
|
+
export interface RegisteredRoute {
|
|
88
|
+
/** Absent on a pathless layout route: its children inherit the parent path. */
|
|
89
|
+
path?: string;
|
|
90
|
+
index?: boolean;
|
|
91
|
+
children?: readonly RegisteredRoute[];
|
|
92
|
+
}
|
|
93
|
+
/** A route table entry is either a bare pattern string or a router config node. */
|
|
94
|
+
export type NavRouteTable = readonly (string | RegisteredRoute)[];
|
|
95
|
+
/**
|
|
96
|
+
* Every path pattern the table registers, rooted and de-duplicated.
|
|
97
|
+
*
|
|
98
|
+
* Parent nodes contribute their own cumulative path as well as their children's:
|
|
99
|
+
* a router matches a parent route with an index child at the parent path, and a
|
|
100
|
+
* parent without one still matches with an empty outlet, so treating parents as
|
|
101
|
+
* unregistered would flag working hrefs.
|
|
102
|
+
*/
|
|
103
|
+
export declare function flattenRouteTable(table: NavRouteTable): string[];
|
|
104
|
+
/**
|
|
105
|
+
* A nav row as the guard needs to see it. Structurally satisfied by
|
|
106
|
+
* `SessionRailNavItem` / `SessionRailSubItem` and by sandbox-ui's
|
|
107
|
+
* `SidebarLayoutNavItem`, so the guard runs over the builder's real output
|
|
108
|
+
* rather than a re-declaration of it.
|
|
109
|
+
*/
|
|
110
|
+
export interface NavHrefItem {
|
|
111
|
+
id: string;
|
|
112
|
+
href: string;
|
|
113
|
+
subItems?: readonly NavHrefItem[];
|
|
114
|
+
}
|
|
115
|
+
export type NavHrefProblemReason =
|
|
116
|
+
/** No registered pattern matches the resolved href. */
|
|
117
|
+
'unregistered'
|
|
118
|
+
/** Empty, fragment-only, or not rooted at `/` — the row navigates nowhere
|
|
119
|
+
* predictable regardless of the route table. */
|
|
120
|
+
| 'not-a-path'
|
|
121
|
+
/** Leaves the router (scheme or protocol-relative) while `allowExternal` is
|
|
122
|
+
* off. */
|
|
123
|
+
| 'external';
|
|
124
|
+
export interface NavHrefProblem {
|
|
125
|
+
id: string;
|
|
126
|
+
href: string;
|
|
127
|
+
reason: NavHrefProblemReason;
|
|
128
|
+
/** Registered patterns ending in the same segment. A destination resolved
|
|
129
|
+
* under the wrong base lands here as its correctly-based twin, which is what
|
|
130
|
+
* names the missing scope in the failure message. */
|
|
131
|
+
nearest: string[];
|
|
132
|
+
message: string;
|
|
133
|
+
}
|
|
134
|
+
export interface NavHrefReport {
|
|
135
|
+
/** Hrefs examined, including nested sub-items. */
|
|
136
|
+
checked: number;
|
|
137
|
+
problems: NavHrefProblem[];
|
|
138
|
+
/** Off-router destinations accepted because `allowExternal` is on. */
|
|
139
|
+
external: string[];
|
|
140
|
+
/** The flattened route table the check ran against. */
|
|
141
|
+
patterns: string[];
|
|
142
|
+
}
|
|
143
|
+
export interface NavHrefCheckOptions {
|
|
144
|
+
/** Hrefs to skip, compared after query/fragment removal. For a destination
|
|
145
|
+
* served outside this route table (a static asset, another worker). */
|
|
146
|
+
ignore?: readonly string[];
|
|
147
|
+
/** Absolute URLs / `mailto:` / `tel:` are reported under `external` instead
|
|
148
|
+
* of failing. Default true. */
|
|
149
|
+
allowExternal?: boolean;
|
|
150
|
+
/** Compare literal segments case-sensitively. Default true — a router that
|
|
151
|
+
* matches case-insensitively still renders a link the deploy's CDN or a
|
|
152
|
+
* case-sensitive origin may not. */
|
|
153
|
+
caseSensitive?: boolean;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check every nav href against the product's route table.
|
|
157
|
+
*
|
|
158
|
+
* Pure — returns the full report so a caller can assert on parts of it. Use
|
|
159
|
+
* {@link assertNavHrefsRegistered} in tests; it turns the report into a failure
|
|
160
|
+
* that names the offending row, its resolved href, and the near-miss pattern.
|
|
161
|
+
*/
|
|
162
|
+
export declare function checkNavHrefs(items: readonly NavHrefItem[], routes: NavRouteTable, options?: NavHrefCheckOptions): NavHrefReport;
|
|
163
|
+
/**
|
|
164
|
+
* Fail unless every nav href resolves to a registered route.
|
|
165
|
+
*
|
|
166
|
+
* Throws on an empty item list or an empty route table as well: a guard that
|
|
167
|
+
* examined nothing reports safety it does not provide, and both are what a
|
|
168
|
+
* mis-wired import looks like.
|
|
169
|
+
*/
|
|
170
|
+
export declare function assertNavHrefsRegistered(items: readonly NavHrefItem[], routes: NavRouteTable, options?: NavHrefCheckOptions): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path normalisation shared by the shell's routing helpers. Segment-aligned
|
|
3
|
+
* comparison is the invariant: `/vault` must never claim `/vault-archive`, so
|
|
4
|
+
* every prefix test here works on whole segments rather than string prefixes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function stripTrailingSlashes(value: string): string;
|
|
7
|
+
/** Bare segment name, so a caller may pass `'/settings'` or `'settings'`. */
|
|
8
|
+
export declare function stripSlashes(value: string): string;
|
|
9
|
+
/** Path with query + fragment removed and trailing slashes trimmed. A caller
|
|
10
|
+
* passing a full href instead of a pathname would otherwise match nothing. */
|
|
11
|
+
export declare function normalizePath(pathname: string): string;
|
|
12
|
+
/** True when `path` is `prefix` or a segment-aligned descendant of it, so
|
|
13
|
+
* `/vault` never claims `/vault-archive`. */
|
|
14
|
+
export declare function isUnderPrefix(path: string, prefix: string): boolean;
|
|
15
|
+
/** Non-empty segments of a path or route pattern. Leading/trailing/duplicate
|
|
16
|
+
* slashes collapse, so `/app//x/` and `app/x` compare equal. */
|
|
17
|
+
export declare function toSegments(value: string): string[];
|
|
18
|
+
/** Canonical display form: rooted, no trailing slash, no empty segments. */
|
|
19
|
+
export declare function toRootedPath(value: string): string;
|
package/dist/signoff/cli.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import '../types-Bd6uW9vQ.js';
|
|
4
|
-
|
|
2
|
+
import { type RunSignoffOptions } from './run';
|
|
5
3
|
interface ParsedArgs extends RunSignoffOptions {
|
|
6
4
|
readonly jsonPath?: string;
|
|
7
5
|
readonly quiet?: boolean;
|
|
8
6
|
}
|
|
9
|
-
declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
10
|
-
declare function runSignoffCli(argv: readonly string[]): Promise<number>;
|
|
11
|
-
|
|
12
|
-
export { parseArgs, runSignoffCli };
|
|
7
|
+
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
8
|
+
export declare function runSignoffCli(argv: readonly string[]): Promise<number>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LoadedSignoffConfig, SignoffConfig } from './types';
|
|
2
|
+
export declare function parseSignoffConfig(value: unknown, where: string): SignoffConfig;
|
|
3
|
+
export declare function deriveSignoffConfig(scripts: Readonly<Record<string, string>>): {
|
|
4
|
+
readonly config: SignoffConfig;
|
|
5
|
+
readonly used: readonly string[];
|
|
6
|
+
};
|
|
7
|
+
export interface LoadSignoffConfigOptions {
|
|
8
|
+
readonly repoRoot: string;
|
|
9
|
+
/** Explicit config path. Missing file is an error, never a silent fallback. */
|
|
10
|
+
readonly configPath?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadSignoffConfig(options: LoadSignoffConfigOptions): Promise<LoadedSignoffConfig>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The subprocess primitive every sign-off step runs through.
|
|
3
|
+
*
|
|
4
|
+
* Three properties the gate depends on, none of which `execSync` gives:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Cancellable.** Under fail-fast, a build still running when typecheck
|
|
7
|
+
* fails is killed rather than waited out — otherwise the "faster than CI"
|
|
8
|
+
* claim is spent waiting for work whose verdict no longer matters.
|
|
9
|
+
* 2. **Process-group kill.** Steps run through `sh -c`, so killing the shell
|
|
10
|
+
* leaves `vitest`'s forks and `tsup`'s dts worker orphaned and holding CPU.
|
|
11
|
+
* The child is spawned as a group leader and the whole group is signalled.
|
|
12
|
+
* 3. **Bounded, non-silent capture.** Output is capped, and when the cap is hit
|
|
13
|
+
* the elision is stated in the captured text. A gate that quietly drops the
|
|
14
|
+
* middle of a failure log is a gate that hides the failure.
|
|
15
|
+
*/
|
|
16
|
+
export interface CommandResult {
|
|
17
|
+
readonly command: string;
|
|
18
|
+
readonly cwd: string;
|
|
19
|
+
readonly exitCode: number;
|
|
20
|
+
readonly signal: string | null;
|
|
21
|
+
readonly durationMs: number;
|
|
22
|
+
readonly output: string;
|
|
23
|
+
readonly truncated: boolean;
|
|
24
|
+
readonly timedOut: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface RunCommandOptions {
|
|
27
|
+
readonly command: string;
|
|
28
|
+
readonly cwd: string;
|
|
29
|
+
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
30
|
+
readonly timeoutMs?: number;
|
|
31
|
+
readonly signal?: AbortSignal;
|
|
32
|
+
/** Retained bytes before elision. Default 2 MiB. */
|
|
33
|
+
readonly maxOutputBytes?: number;
|
|
34
|
+
/** Grace between SIGTERM and SIGKILL. Default 5 s. */
|
|
35
|
+
readonly killGraceMs?: number;
|
|
36
|
+
readonly onData?: (chunk: string) => void;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Run one shell command to completion and report what happened.
|
|
40
|
+
*
|
|
41
|
+
* Never throws on a non-zero exit — a failing step is data, not an exception.
|
|
42
|
+
* It throws only when the process could not be started at all.
|
|
43
|
+
*/
|
|
44
|
+
export declare function runCommand(options: RunCommandOptions): Promise<CommandResult>;
|
package/dist/signoff/index.d.ts
CHANGED
|
@@ -1,14 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `@tangle-network/agent-app/signoff` — the local sign-off gate.
|
|
3
|
+
*
|
|
4
|
+
* A node-only checker a PRODUCT runs against ITSELF, the shape `/peer-floors`
|
|
5
|
+
* and `/theme-contract` already established here. The difference is scope:
|
|
6
|
+
* those check one property, this runs the repo's whole verification in
|
|
7
|
+
* conditions that reproduce a clean CI environment, and then does what CI does
|
|
8
|
+
* not.
|
|
9
|
+
*
|
|
10
|
+
* **Why this exists.** CI is slow enough to stop being a merge gate, and two
|
|
11
|
+
* failures credited to CI in one day needed nothing CI has:
|
|
12
|
+
*
|
|
13
|
+
* - Two legal-agent test files failed only in CI with "Cannot bundle Node.js
|
|
14
|
+
* built-in node:sqlite". Local passed three separate ways — cleared Vite
|
|
15
|
+
* cache, its own `node_modules`, even `--maxWorkers=1`. CI was not smarter;
|
|
16
|
+
* it was a clean install with different file scheduling.
|
|
17
|
+
* - legal-agent `main` went red because a sibling PR called a function an
|
|
18
|
+
* older agent-app did not export — invisible to a clean install, a clean
|
|
19
|
+
* typecheck and a green suite, and caught only by `/peer-floors` at the
|
|
20
|
+
* wire call.
|
|
21
|
+
*
|
|
22
|
+
* Neither is a reason to keep CI as the gate. Both are reasons the local run
|
|
23
|
+
* must be hermetic. That is what this is:
|
|
24
|
+
*
|
|
25
|
+
* | | CI | this gate |
|
|
26
|
+
* |---|---|---|
|
|
27
|
+
* | dependency tree | clean, isolated store | clean `git worktree`, store keyed on the lockfile |
|
|
28
|
+
* | suite order | one arbitrary order | randomized file order, ≥2 seeds, every seed recorded |
|
|
29
|
+
* | step order | serial, as written in YAML | dependency graph, run as wide as the DECLARED edges allow |
|
|
30
|
+
* | failure output | one red line in a long log | named step, exit code, seed, captured output |
|
|
31
|
+
* | reproducibility | re-run the job and hope | one command, printed with the verdict |
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { runSignoff, formatSignoffReport } from '@tangle-network/agent-app/signoff'
|
|
35
|
+
*
|
|
36
|
+
* const report = await runSignoff({ repoDir: process.cwd() })
|
|
37
|
+
* console.log(formatSignoffReport(report))
|
|
38
|
+
* process.exit(report.ok ? 0 : 1)
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* The CLI form is the `agent-app-signoff` bin.
|
|
42
|
+
*
|
|
43
|
+
* **Surface is deliberately narrow.** The steps this runs — dependency-graph
|
|
44
|
+
* scheduling, seed planning, workflow-YAML pin scanning, the pnpm-store cache,
|
|
45
|
+
* the hermetic `git worktree`, the command runner — are this gate's OWN
|
|
46
|
+
* implementation, not things a consumer plausibly calls directly; the `agent-
|
|
47
|
+
* app-signoff` bin imports them from the sibling files (`./run`, `./report`),
|
|
48
|
+
* never through this barrel. What a consumer embeds is: run the gate, load its
|
|
49
|
+
* config, print the result. Everything else stays module-internal, where
|
|
50
|
+
* `knip` can see it unused rather than reading as committed public API with
|
|
51
|
+
* zero callers.
|
|
52
|
+
*/
|
|
53
|
+
export { runSignoff, type RunSignoffOptions } from './run';
|
|
54
|
+
export { loadSignoffConfig, type LoadSignoffConfigOptions } from './config';
|
|
55
|
+
export { formatSignoffReport } from './report';
|
|
56
|
+
export type { LoadedSignoffConfig, SignoffAttempt, SignoffConfig, SignoffConfigOrigin, SignoffEvent, SignoffHostFacts, SignoffInstallResult, SignoffInstallSpec, SignoffRepoFacts, SignoffReport, SignoffShuffleSpec, SignoffSource, SignoffStepResult, SignoffStepSpec, SignoffStepStatus, } from './types';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is this module the script the process was started with?
|
|
3
|
+
*
|
|
4
|
+
* The obvious spelling — `import.meta.url === pathToFileURL(process.argv[1]).href`
|
|
5
|
+
* — is wrong for every packaged bin, and wrong in the silent direction: the
|
|
6
|
+
* module decides it was imported rather than executed, so the CLI does nothing
|
|
7
|
+
* and exits 0.
|
|
8
|
+
*
|
|
9
|
+
* The two sides are not the same kind of path. `import.meta.url` is the module
|
|
10
|
+
* URL Node resolved, and Node resolves a module's realpath unless started with
|
|
11
|
+
* `--preserve-symlinks`. `process.argv[1]` is the path as SPELLED on the
|
|
12
|
+
* command line. A package manager's bin shim spells it through symlinked
|
|
13
|
+
* directories:
|
|
14
|
+
*
|
|
15
|
+
* argv[1] …/node_modules/.bin/../@scope/pkg/dist/cli.js
|
|
16
|
+
* import.meta.url …/node_modules/.pnpm/pkg@1.2.3/node_modules/@scope/pkg/dist/cli.js
|
|
17
|
+
*
|
|
18
|
+
* Same file, two strings, and a `===` between them is false.
|
|
19
|
+
*
|
|
20
|
+
* So the entry path is resolved the same way Node resolved the module before
|
|
21
|
+
* the comparison. A missing or unresolvable entry is not this function's
|
|
22
|
+
* business to explain — it is simply not this module, which is the honest
|
|
23
|
+
* answer and keeps an importer from executing a CLI.
|
|
24
|
+
*/
|
|
25
|
+
export declare function invokedAsScript(moduleUrl: string, entry: string | undefined): boolean;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refuse to sign off on a runtime the product does not ship.
|
|
3
|
+
*
|
|
4
|
+
* CI pins its Node version (`actions/setup-node` with `node-version: 22` in all
|
|
5
|
+
* three fleet workflows). A developer's shell does not — this host runs 24. A
|
|
6
|
+
* local gate that inherits whatever is on `PATH` therefore verifies a runtime
|
|
7
|
+
* nobody deploys, and reports it as the runtime that ships. That is the same
|
|
8
|
+
* failure shape as a number measured in a narrower context than it is
|
|
9
|
+
* presented in, and it is not acceptable in the thing that replaces the merge
|
|
10
|
+
* gate.
|
|
11
|
+
*
|
|
12
|
+
* So the pin is read from the repo and enforced, or it is absent and the report
|
|
13
|
+
* says so. Three sources, in order:
|
|
14
|
+
*
|
|
15
|
+
* - `signoff.config.mjs`'s `nodeVersion` — the explicit declaration.
|
|
16
|
+
* - `.nvmrc` — the pin a repo already keeps for humans.
|
|
17
|
+
* - the `pull_request` workflows' `node-version` (`./workflow-pin`) — the pin
|
|
18
|
+
* CI itself runs on.
|
|
19
|
+
*
|
|
20
|
+
* **The third source was added because the first two were empty on the entire
|
|
21
|
+
* fleet, and that produced a false PASS.** legal-agent `4c0d688` failed CI on
|
|
22
|
+
* `Cannot bundle Node.js built-in "node:sqlite"` and this gate signed it off.
|
|
23
|
+
* Reproduced in one installed tree, same bytes: Node 22 fails both files, Node
|
|
24
|
+
* 24 passes both, every time. No `.nvmrc` exists in tax-agent, legal-agent or
|
|
25
|
+
* agent-app; all three pin `node-version: 22` in the workflow being replaced.
|
|
26
|
+
* A gate that replaces a workflow has to read the runtime that workflow pins.
|
|
27
|
+
*
|
|
28
|
+
* A `.nvmrc` and a workflow that disagree is not resolved by preference — it is
|
|
29
|
+
* a refusal, because it means the local gate and CI verify different runtimes,
|
|
30
|
+
* which is the exact defect this module exists to prevent.
|
|
31
|
+
*
|
|
32
|
+
* **`engines.node` is deliberately NOT read.** It is a floor (`">=18"`), not a
|
|
33
|
+
* pin, so treating it as one manufactures refusals on every version above the
|
|
34
|
+
* floor — and an unsatisfiable gate does not stop bad work, it gets waived.
|
|
35
|
+
*/
|
|
36
|
+
export interface NodeVersionRequirement {
|
|
37
|
+
/** The declared major, e.g. `22`. */
|
|
38
|
+
readonly major: number;
|
|
39
|
+
readonly declared: string;
|
|
40
|
+
/** Where it came from, for the proof. */
|
|
41
|
+
readonly source: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function resolveNodeRequirement(repoRoot: string, configured?: string): NodeVersionRequirement | null;
|
|
44
|
+
/**
|
|
45
|
+
* Throw when the running Node cannot stand in for the declared one.
|
|
46
|
+
*
|
|
47
|
+
* Major-only: a patch difference is not a different runtime, and demanding an
|
|
48
|
+
* exact patch would refuse every host that has not just re-installed.
|
|
49
|
+
*/
|
|
50
|
+
export declare function assertNodeVersion(requirement: NodeVersionRequirement | null, running?: string): void;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attaching a proof to the commit it verified.
|
|
3
|
+
*
|
|
4
|
+
* ## Why `git notes`, and what the two rejected carriers cost
|
|
5
|
+
*
|
|
6
|
+
* **A commit-message trailer** cannot work for the field that matters. The
|
|
7
|
+
* trailer is part of the commit object, so writing it changes the SHA the proof
|
|
8
|
+
* claims to cover — the proof would have to be produced before the commit it
|
|
9
|
+
* names exists. Amending re-writes the SHA again, and GitHub's squash-merge
|
|
10
|
+
* rebuilds the message from the PR body, so the trailer does not survive the one
|
|
11
|
+
* transition it would need to.
|
|
12
|
+
*
|
|
13
|
+
* **A committed artifact directory** (`.signoff/<sha>.json`) changes the tree,
|
|
14
|
+
* so the tree hash inside the proof can never cover the file carrying it. It
|
|
15
|
+
* also lands in every diff, and it is exactly the "file someone can forget"
|
|
16
|
+
* shape the requirement rules out — deleting it is a normal-looking change.
|
|
17
|
+
*
|
|
18
|
+
* **`git notes` wins because it is the only carrier that is addressed BY the
|
|
19
|
+
* SHA without being part of it.** The note is written after the commit exists,
|
|
20
|
+
* it changes neither the SHA nor the tree, and `git notes show <sha>` is a
|
|
21
|
+
* definite yes/no for any commit anyone can name.
|
|
22
|
+
*
|
|
23
|
+
* ## The tradeoff `git notes` really carries, and how this module answers it
|
|
24
|
+
*
|
|
25
|
+
* Notes are attached to a commit id, and a rebase or a squash-merge produces a
|
|
26
|
+
* NEW commit id, so the note does not follow by itself. Two mechanisms close
|
|
27
|
+
* that gap, and both are needed:
|
|
28
|
+
*
|
|
29
|
+
* 1. `notes.rewriteRef` (see `SIGNOFF_NOTES_GIT_CONFIG`) makes local rebase and
|
|
30
|
+
* amend copy the note forward automatically.
|
|
31
|
+
* 2. `resolveSignoffProof` falls back to a **tree scan**: it reads every proof
|
|
32
|
+
* under the notes ref and matches on the TREE the commit carries. A rebase
|
|
33
|
+
* or a squash of one branch onto an unchanged base preserves the tree, so
|
|
34
|
+
* the content that was verified is still provably the content that merged,
|
|
35
|
+
* even though the SHA changed. The verifier reports which binding it used —
|
|
36
|
+
* `exact` or `tree-equivalent` — and never conflates them.
|
|
37
|
+
*
|
|
38
|
+
* Notes are neither pushed nor fetched by default; `SIGNOFF_NOTES_GIT_CONFIG`
|
|
39
|
+
* carries the refspecs that fix that, and a missing note is reported as
|
|
40
|
+
* `not-found`, never as a pass.
|
|
41
|
+
*/
|
|
42
|
+
import { type SignoffProof } from './proof-record';
|
|
43
|
+
export declare const SIGNOFF_NOTES_REF = "refs/notes/signoff";
|
|
44
|
+
/**
|
|
45
|
+
* The git configuration a repo needs for notes to travel. Emitted by the CLI
|
|
46
|
+
* when a proof cannot be found, because the usual cause is an unconfigured repo
|
|
47
|
+
* rather than an unsigned commit.
|
|
48
|
+
*/
|
|
49
|
+
export declare const SIGNOFF_NOTES_GIT_CONFIG: readonly string[];
|
|
50
|
+
export interface AttachSignoffProofInput {
|
|
51
|
+
readonly repoDir: string;
|
|
52
|
+
readonly proof: SignoffProof;
|
|
53
|
+
/** Revision to annotate; defaults to the commit the proof names. */
|
|
54
|
+
readonly rev?: string;
|
|
55
|
+
/** Replace an existing note. Off by default so a second sign-off cannot quietly overwrite the first. */
|
|
56
|
+
readonly overwrite?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface AttachedSignoffProof {
|
|
59
|
+
readonly commit: string;
|
|
60
|
+
readonly ref: string;
|
|
61
|
+
}
|
|
62
|
+
export declare function attachSignoffProof(input: AttachSignoffProofInput): AttachedSignoffProof;
|
|
63
|
+
export type SignoffProofLookup = {
|
|
64
|
+
readonly found: true;
|
|
65
|
+
readonly proof: SignoffProof;
|
|
66
|
+
readonly commit: string;
|
|
67
|
+
readonly binding: 'exact' | 'tree-equivalent';
|
|
68
|
+
} | {
|
|
69
|
+
readonly found: false;
|
|
70
|
+
readonly commit: string;
|
|
71
|
+
};
|
|
72
|
+
/** The note attached to exactly this commit, or `found: false`. Never searches. */
|
|
73
|
+
export declare function readSignoffProofNote(repoDir: string, rev: string): SignoffProofLookup;
|
|
74
|
+
/** Every proof stored under the notes ref, paired with the commit it annotates. */
|
|
75
|
+
export declare function listSignoffProofs(repoDir: string): readonly {
|
|
76
|
+
readonly commit: string;
|
|
77
|
+
readonly proof: SignoffProof;
|
|
78
|
+
}[];
|
|
79
|
+
/**
|
|
80
|
+
* Answer "was this SHA signed off" for any commit, including one produced by a
|
|
81
|
+
* rebase or a squash-merge of the branch that was actually verified.
|
|
82
|
+
*
|
|
83
|
+
* Exact note first. Then the tree scan — a proof whose `commitTree` equals this
|
|
84
|
+
* commit's tree verified byte-identical content, which is the strongest claim
|
|
85
|
+
* available once the SHA has been rewritten. The binding is returned so a caller
|
|
86
|
+
* can tell the two apart; nothing here treats them as the same thing.
|
|
87
|
+
*/
|
|
88
|
+
export declare function resolveSignoffProof(repoDir: string, rev: string): SignoffProofLookup;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type SignoffProofStep } from './proof-record';
|
|
2
|
+
export interface TempRepo {
|
|
3
|
+
readonly dir: string;
|
|
4
|
+
write(relativePath: string, contents: string): void;
|
|
5
|
+
commit(message: string): string;
|
|
6
|
+
git(args: readonly string[]): string;
|
|
7
|
+
cleanup(): void;
|
|
8
|
+
}
|
|
9
|
+
export declare function createTempRepo(options?: {
|
|
10
|
+
readonly name?: string;
|
|
11
|
+
}): TempRepo;
|
|
12
|
+
/** Steps that all succeeded, one per id, with plausible timings. */
|
|
13
|
+
export declare function passingSteps(ids: readonly string[]): SignoffProofStep[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The join between the runner and the proof: one sign-off run produces one
|
|
3
|
+
* report, and this turns that report into the signed, attachable record.
|
|
4
|
+
*
|
|
5
|
+
* Nothing here re-runs or re-judges anything. The runner owns what happened; the
|
|
6
|
+
* proof owns what is provable about it later. Keeping the two in one direction
|
|
7
|
+
* is what stops a second, drifting idea of "which steps ran" from appearing.
|
|
8
|
+
*/
|
|
9
|
+
import { type SignoffProof } from './proof-record';
|
|
10
|
+
import type { SignoffReport } from './types';
|
|
11
|
+
export interface ProofFromReportInput {
|
|
12
|
+
readonly report: SignoffReport;
|
|
13
|
+
/** Repo identity the verifier's required-step table is keyed on. */
|
|
14
|
+
readonly repo: string;
|
|
15
|
+
/** Source repository. Defaults to the root the run recorded. */
|
|
16
|
+
readonly repoDir?: string;
|
|
17
|
+
/** Step ids the run treated as required. Defaults to every step the report carries. */
|
|
18
|
+
readonly declaredRequired?: readonly string[];
|
|
19
|
+
readonly key?: Uint8Array;
|
|
20
|
+
readonly now?: Date;
|
|
21
|
+
}
|
|
22
|
+
export declare function proofFromSignoffReport(input: ProofFromReportInput): SignoffProof;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** A git invocation that exited non-zero, carrying stderr so the caller can act. */
|
|
2
|
+
export declare class SignoffGitError extends Error {
|
|
3
|
+
readonly args: readonly string[];
|
|
4
|
+
readonly status: number | null;
|
|
5
|
+
readonly stderr: string;
|
|
6
|
+
constructor(args: readonly string[], status: number | null, stderr: string);
|
|
7
|
+
}
|
|
8
|
+
export interface GitResult {
|
|
9
|
+
readonly status: number | null;
|
|
10
|
+
readonly stdout: string;
|
|
11
|
+
readonly stderr: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Run git and hand back the raw result. `GIT_OPTIONAL_LOCKS=0` keeps a read
|
|
15
|
+
* from touching the index while another agent works the same worktree — this
|
|
16
|
+
* repo is shared by concurrent sessions.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runGit(repoDir: string, args: readonly string[], options?: {
|
|
19
|
+
readonly input?: string;
|
|
20
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
21
|
+
}): GitResult;
|
|
22
|
+
/** Run git, or throw. Trailing newline is stripped — every caller wants the value, not the line. */
|
|
23
|
+
export declare function gitText(repoDir: string, args: readonly string[], options?: {
|
|
24
|
+
readonly input?: string;
|
|
25
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* Is `ancestor` reachable from `descendant`? A port rather than a direct call so
|
|
29
|
+
* the verifier stays a pure function over facts a caller supplies.
|
|
30
|
+
*/
|
|
31
|
+
export type IsAncestorFn = (ancestor: string, descendant: string) => boolean;
|
|
32
|
+
export declare function gitIsAncestor(repoDir: string): IsAncestorFn;
|
|
33
|
+
export interface CommitFacts {
|
|
34
|
+
/** 40-hex commit id. */
|
|
35
|
+
readonly commit: string;
|
|
36
|
+
/** 40-hex id of the tree the COMMIT points at. */
|
|
37
|
+
readonly commitTree: string;
|
|
38
|
+
readonly parents: readonly string[];
|
|
39
|
+
/** Committer date, UTC ISO-8601 with a `Z` suffix. */
|
|
40
|
+
readonly committedAt: string;
|
|
41
|
+
}
|
|
42
|
+
/** Resolve a revision to the commit it names, failing loud on an unknown rev. */
|
|
43
|
+
export declare function resolveCommit(repoDir: string, rev: string): string;
|
|
44
|
+
export declare function readCommitFacts(repoDir: string, rev: string): CommitFacts;
|
|
45
|
+
/**
|
|
46
|
+
* Hash the tree the checks actually ran against, including uncommitted and
|
|
47
|
+
* untracked (non-ignored) files.
|
|
48
|
+
*
|
|
49
|
+
* This is the field that makes drift detectable. A sign-off that ran over an
|
|
50
|
+
* edited worktree produces a tree id no commit carries, so it cannot verify
|
|
51
|
+
* against the commit it claims — which is the intended outcome, not a bug.
|
|
52
|
+
*
|
|
53
|
+
* Written through a throwaway index (`GIT_INDEX_FILE`) so a concurrent agent's
|
|
54
|
+
* staged work in the real index is neither read nor disturbed. `git add -A`
|
|
55
|
+
* honours `.gitignore`, so `node_modules` / `dist` stay out.
|
|
56
|
+
*/
|
|
57
|
+
export declare function computeWorktreeTree(repoDir: string): string;
|