@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,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model failover for a STREAMING turn.
|
|
3
|
+
*
|
|
4
|
+
* `/model-resolution`'s `runWithModelFailover` already owns the policy: walk a
|
|
5
|
+
* chain, classify a resolved-or-thrown signal, re-throw a non-outage failure
|
|
6
|
+
* immediately, and carry the attempt trail. This module does NOT re-implement
|
|
7
|
+
* any of that — it composes it. What it adds is the one thing a whole-call
|
|
8
|
+
* primitive cannot express, because a stream fails PARTWAY:
|
|
9
|
+
*
|
|
10
|
+
* **A turn may only fail over before its first client-visible byte.**
|
|
11
|
+
*
|
|
12
|
+
* Once a text delta, tool call, or ask has reached the browser (and the
|
|
13
|
+
* persisted transcript), restarting on another model would duplicate the
|
|
14
|
+
* answer. So each attempt is probed: open the stream, pull events into a small
|
|
15
|
+
* buffer, and decide at the first meaningful event whether this model is
|
|
16
|
+
* serving. Committing replays the buffer and hands the live iterator through;
|
|
17
|
+
* abandoning discards the buffer (those events describe the dead model's
|
|
18
|
+
* session — including its `step-finish` usage, which must never be billed) and
|
|
19
|
+
* lets `runWithModelFailover` walk to the next model.
|
|
20
|
+
*
|
|
21
|
+
* The classification itself is `isUpstreamUnavailable` verbatim, so this path
|
|
22
|
+
* inherits the measured facts from the 2026-07-25 outage — above all that an
|
|
23
|
+
* outage is NOT always a thrown error: the sandbox RESOLVES a terminal `error`
|
|
24
|
+
* event carrying `{ errorCode: 'provider_inference_unavailable' }`, which a
|
|
25
|
+
* classifier inspecting only `catch` misses entirely. That resolved shape is
|
|
26
|
+
* the whole reason the breakage went unnoticed, so it is classified here first.
|
|
27
|
+
*
|
|
28
|
+
* Conservative by construction:
|
|
29
|
+
* - A terminal failure that is NOT an outage (400, bad schema, content filter)
|
|
30
|
+
* COMMITS rather than failing over — it surfaces to the user exactly as it
|
|
31
|
+
* does today. Those fail identically on every model; walking the chain would
|
|
32
|
+
* only multiply latency and spend to reach the same error.
|
|
33
|
+
* - A clean stream that produced nothing NEVER walks the chain. An empty answer
|
|
34
|
+
* is not evidence of a dead upstream, and a silent re-roll on another model is
|
|
35
|
+
* precisely the unattributable downgrade this work exists to prevent. Opt-in
|
|
36
|
+
* `emptyTurnRetries` re-runs the SAME model instead, which leaves attribution
|
|
37
|
+
* untouched — measured on production 2026-07-27, an empty turn is a transient
|
|
38
|
+
* platform flake that a same-model re-run recovers (8 hard cases: 7/8
|
|
39
|
+
* delivered on the first pass, 8/8 with one re-run, at a cost of 1 extra turn
|
|
40
|
+
* in 9). Default `0`, so the behavior is unchanged unless a product asks.
|
|
41
|
+
* - A responsive chain of length 1 costs no extra call or latency and remains
|
|
42
|
+
* byte-identical to no failover. A silent chain is now deliberately bounded.
|
|
43
|
+
*/
|
|
44
|
+
import { ModelFailoverExhaustedError, type ModelFailoverAttempt } from '../model-resolution/failover';
|
|
45
|
+
/**
|
|
46
|
+
* True when `event` puts content in front of the user (or in the persisted
|
|
47
|
+
* transcript), making a restart on another model unsafe.
|
|
48
|
+
*
|
|
49
|
+
* Deliberately an allow-list of KNOWN-INERT types rather than a deny-list: an
|
|
50
|
+
* unrecognized event commits. Getting this wrong in the safe direction costs a
|
|
51
|
+
* missed failover; getting it wrong the other way duplicates a user's answer.
|
|
52
|
+
*/
|
|
53
|
+
export declare function isCommittingSandboxEvent(event: unknown): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Condense an abandoned attempt's raw failure text into something safe to show
|
|
56
|
+
* a customer in the transcript.
|
|
57
|
+
*
|
|
58
|
+
* Measured on the live router 2026-07-27 19:40 UTC: an edge 5xx arrives as
|
|
59
|
+
* Cloudflare's full HTML error PAGE, so the verbatim reason began
|
|
60
|
+
* `<!DOCTYPE html>\n<!--[if lt IE 7]> <html class="no-js ie6 oldie"…` and the
|
|
61
|
+
* fallback notice pasted 200 bytes of that markup into the answer the customer
|
|
62
|
+
* reads. The cause is worth stating; the markup is not.
|
|
63
|
+
*
|
|
64
|
+
* Only the DISPLAY string is condensed. The full text stays on
|
|
65
|
+
* `modelFailover.attempts[].reason` for the operator, so nothing is lost —
|
|
66
|
+
* this narrows what the customer sees, never what telemetry records.
|
|
67
|
+
*/
|
|
68
|
+
export declare function summarizeFailoverReason(reason: string): string;
|
|
69
|
+
/** A terminal failure event, classified. `outage` decides failover vs surface. */
|
|
70
|
+
interface TerminalFailure {
|
|
71
|
+
outage: boolean;
|
|
72
|
+
reason: string;
|
|
73
|
+
code?: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Classify a terminal failure event. Returns `null` for any non-terminal event.
|
|
77
|
+
*
|
|
78
|
+
* The RESOLVED shape is checked first and deliberately: the sandbox reports an
|
|
79
|
+
* upstream outage by resolving `{ success: false, errorCode:
|
|
80
|
+
* 'provider_inference_unavailable' }` inside a terminal `error` event's `data`,
|
|
81
|
+
* never by throwing. Both `data` and the whole record are offered to
|
|
82
|
+
* `isUpstreamUnavailable` so a payload nested either way is caught.
|
|
83
|
+
*/
|
|
84
|
+
export declare function classifyTerminalFailure(event: unknown): TerminalFailure | null;
|
|
85
|
+
/** Open the raw turn stream for one specific model. */
|
|
86
|
+
export type OpenModelStream = (args: {
|
|
87
|
+
model: string;
|
|
88
|
+
/** 1 for the preferred model, 2 for the first fallback, and so on. */
|
|
89
|
+
attempt: number;
|
|
90
|
+
/** Aborted when this attempt times out, is abandoned, or finishes. Forward
|
|
91
|
+
* this to `streamSandboxPrompt(..., { signal })` so a blocked transport is
|
|
92
|
+
* cancelled immediately rather than only receiving iterator.return(). */
|
|
93
|
+
signal: AbortSignal;
|
|
94
|
+
}) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>;
|
|
95
|
+
/** Fired when a model is abandoned and the next one is about to be tried. */
|
|
96
|
+
export interface ModelFallbackInfo {
|
|
97
|
+
from: string;
|
|
98
|
+
to: string;
|
|
99
|
+
reason: string;
|
|
100
|
+
}
|
|
101
|
+
/** Define inputs for streaming a turn across a model failover chain */
|
|
102
|
+
export interface ModelFailoverStreamOptions {
|
|
103
|
+
/** Preferred model first, then fallbacks in descending preference. */
|
|
104
|
+
models: readonly string[];
|
|
105
|
+
open: OpenModelStream;
|
|
106
|
+
/**
|
|
107
|
+
* Maximum time to open/start one model's event source, including its first
|
|
108
|
+
* iterator pull. Default 120 seconds, matching the sandbox provisioning
|
|
109
|
+
* ceiling so cold infrastructure startup is bounded independently from
|
|
110
|
+
* provider inference.
|
|
111
|
+
*/
|
|
112
|
+
openTimeoutMs?: number;
|
|
113
|
+
/**
|
|
114
|
+
* Hard deadline from the source's first lifecycle event to its first
|
|
115
|
+
* answer-bearing event. Default 60 seconds. Processing/lifecycle events do
|
|
116
|
+
* not commit the attempt and do not extend this deadline.
|
|
117
|
+
*/
|
|
118
|
+
firstResponseTimeoutMs?: number;
|
|
119
|
+
/** Override the commit-point rule. Default {@link isCommittingSandboxEvent}. */
|
|
120
|
+
isCommitting?: (event: unknown) => boolean;
|
|
121
|
+
onFallback?: (info: ModelFallbackInfo) => void;
|
|
122
|
+
/**
|
|
123
|
+
* How many times to RE-RUN THE SAME MODEL when a turn completes having
|
|
124
|
+
* produced no assistant text at all. Default `0` — byte-identical to no
|
|
125
|
+
* retry.
|
|
126
|
+
*
|
|
127
|
+
* This is deliberately not a chain walk. Falling over to a different model
|
|
128
|
+
* on an empty answer is the unattributable downgrade this module refuses to
|
|
129
|
+
* do; re-running the SAME model changes nothing about attribution, because
|
|
130
|
+
* the model that serves is the model that was asked for.
|
|
131
|
+
*
|
|
132
|
+
* Bounded by the same commit rule as failover: only a turn whose ONLY
|
|
133
|
+
* committing event is a terminal receipt with no text is retried, so nothing
|
|
134
|
+
* that reached the user can ever be produced twice.
|
|
135
|
+
*/
|
|
136
|
+
emptyTurnRetries?: number;
|
|
137
|
+
/** Fired when an empty turn is discarded and the same model re-run. */
|
|
138
|
+
onEmptyTurnRetry?: (info: EmptyTurnRetryInfo) => void;
|
|
139
|
+
log?: (message: string, meta?: Record<string, unknown>) => void;
|
|
140
|
+
}
|
|
141
|
+
/** One same-model re-run of a turn that completed with no assistant text. */
|
|
142
|
+
export interface EmptyTurnRetryInfo {
|
|
143
|
+
model: string;
|
|
144
|
+
/** 1 for the first re-run. */
|
|
145
|
+
retry: number;
|
|
146
|
+
/** How many re-runs remain after this one. */
|
|
147
|
+
remaining: number;
|
|
148
|
+
}
|
|
149
|
+
/** The failover-wrapped stream plus the attribution every consumer needs. */
|
|
150
|
+
export interface ModelFailoverStreamHandle {
|
|
151
|
+
events: AsyncGenerator<unknown, void, unknown>;
|
|
152
|
+
/** The model that actually served. `undefined` until the first pull resolves it. */
|
|
153
|
+
servingModel(): string | undefined;
|
|
154
|
+
/** Every model tried, in order, with the reason each was abandoned. */
|
|
155
|
+
attempts(): ModelFailoverAttempt[];
|
|
156
|
+
/** True when the preferred model did not serve — the attributability signal. */
|
|
157
|
+
usedFallback(): boolean;
|
|
158
|
+
}
|
|
159
|
+
/** Default ceiling for opening/starting one source through its first event. */
|
|
160
|
+
export declare const DEFAULT_MODEL_STREAM_OPEN_TIMEOUT_MS = 120000;
|
|
161
|
+
/** Default ceiling for the first answer-bearing event after the source's first event. */
|
|
162
|
+
export declare const DEFAULT_MODEL_FIRST_RESPONSE_TIMEOUT_MS = 60000;
|
|
163
|
+
/** Structured timeout codes surfaced by the producer on final exhaustion. */
|
|
164
|
+
export type ModelAttemptTimeoutCode = 'model_stream_open_timeout' | 'provider_first_response_timeout';
|
|
165
|
+
/** Every configured model was exhausted and the final one timed out. */
|
|
166
|
+
export declare class ModelFailoverTimeoutError extends ModelFailoverExhaustedError {
|
|
167
|
+
readonly code: ModelAttemptTimeoutCode;
|
|
168
|
+
readonly model: string;
|
|
169
|
+
readonly timeoutMs: number;
|
|
170
|
+
constructor(input: {
|
|
171
|
+
attempts: ModelFailoverAttempt[];
|
|
172
|
+
code: ModelAttemptTimeoutCode;
|
|
173
|
+
model: string;
|
|
174
|
+
timeoutMs: number;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Hard ceiling on same-model re-runs. A turn that comes back blank three times
|
|
179
|
+
* running is not a flake this can retry away, and each pass costs a full
|
|
180
|
+
* sandbox turn — so the budget is capped rather than trusted.
|
|
181
|
+
*/
|
|
182
|
+
export declare const MAX_EMPTY_TURN_RETRIES = 3;
|
|
183
|
+
/**
|
|
184
|
+
* Coerce the caller's budget to a finite, bounded, non-negative integer.
|
|
185
|
+
*
|
|
186
|
+
* `Math.trunc(NaN)` is `NaN` and `retry >= NaN` is false for every `retry`, so
|
|
187
|
+
* a naive clamp turns a bad config value into a loop that opens sandbox streams
|
|
188
|
+
* until the worker dies. `Infinity` has the same shape. Both resolve to `0` —
|
|
189
|
+
* an unusable budget disables the retry rather than running unbounded.
|
|
190
|
+
*/
|
|
191
|
+
export declare function resolveEmptyTurnRetries(value: number | undefined): number;
|
|
192
|
+
/**
|
|
193
|
+
* Wrap `open` in reactive model failover, streaming from the first model in
|
|
194
|
+
* `models` that reaches its commit point.
|
|
195
|
+
*
|
|
196
|
+
* Zero added latency on the happy path: the preferred model is opened first and,
|
|
197
|
+
* the moment it emits anything meaningful, its events flow straight through.
|
|
198
|
+
*
|
|
199
|
+
* @throws ModelFailoverTimeoutError when the final model times out,
|
|
200
|
+
* ModelFailoverExhaustedError when every model's upstream is down, and
|
|
201
|
+
* re-throws a non-outage error from the FIRST model without walking the
|
|
202
|
+
* chain (the latter behaviors are inherited from
|
|
203
|
+
* `runWithModelFailover`).
|
|
204
|
+
*/
|
|
205
|
+
export declare function streamWithModelFailover(options: ModelFailoverStreamOptions): ModelFailoverStreamHandle;
|
|
206
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `promoteAgentFilePart` — turn a harness-emitted `type:"file"` stream part
|
|
3
|
+
* into a store-backed {@link ChatAttachmentPart}. The harness hands back a URL
|
|
4
|
+
* pointing at bytes it produced (a `data:` URI, or a path inside the sandbox);
|
|
5
|
+
* nothing durable survives past the turn unless it is written into the
|
|
6
|
+
* product's store, the same way a user upload is. Typed outcomes throughout:
|
|
7
|
+
* every failure mode (unsupported scheme, no sandbox, oversize, store-write
|
|
8
|
+
* failure, malformed part) resolves to `{ succeeded: false, filename, reason }`
|
|
9
|
+
* rather than throwing past this boundary, so the caller folds a visible notice
|
|
10
|
+
* instead of losing the file silently.
|
|
11
|
+
*
|
|
12
|
+
* Storage-parameterized port of gtm-agent's `promote-file-parts.ts` with the
|
|
13
|
+
* refactor gtm never made: persistence goes through the injected
|
|
14
|
+
* {@link WriteAttachmentFn} (gtm hard-wired its vault writer), the path strategy
|
|
15
|
+
* is the injected `buildAttachmentPath` (neutral `uploads/agent/<date>/` default,
|
|
16
|
+
* no domain bucket taxonomy baked), the MIME map is an injectable hook, and the
|
|
17
|
+
* date segment reads an injectable clock. The idempotent `hash8(id ?? url ??
|
|
18
|
+
* filename)` naming is preserved so re-promoting the same source part resolves
|
|
19
|
+
* to the same path.
|
|
20
|
+
*/
|
|
21
|
+
import { type SandboxExecChannel } from '../sandbox/binary-read';
|
|
22
|
+
import { type ChatAttachmentKind, type ChatAttachmentPart } from '../chat-store/parts';
|
|
23
|
+
import type { WriteAttachmentFn } from './attachment-store';
|
|
24
|
+
/** Default ceiling on a promoted file's raw (pre-encoding) byte size. */
|
|
25
|
+
export declare const PROMOTE_MAX_FILE_BYTES: number;
|
|
26
|
+
/** Define the structure for a raw file part with optional metadata and media type information */
|
|
27
|
+
export interface RawAgentFilePart {
|
|
28
|
+
type: 'file';
|
|
29
|
+
id?: string;
|
|
30
|
+
filename?: string;
|
|
31
|
+
/** AI-SDK-shaped parts carry the MIME type here… */
|
|
32
|
+
mediaType?: string;
|
|
33
|
+
/** …but OpenCode's native FilePart calls the same field `mime`. */
|
|
34
|
+
mime?: string;
|
|
35
|
+
url?: string;
|
|
36
|
+
}
|
|
37
|
+
/** Resolve the result of promoting a file part with success status and relevant data or error details */
|
|
38
|
+
export type PromoteFilePartResult = {
|
|
39
|
+
succeeded: true;
|
|
40
|
+
part: ChatAttachmentPart;
|
|
41
|
+
} | {
|
|
42
|
+
succeeded: false;
|
|
43
|
+
filename: string;
|
|
44
|
+
reason: string;
|
|
45
|
+
};
|
|
46
|
+
/** Arguments handed to a {@link PromoteAgentFilePartOptions.buildAttachmentPath}
|
|
47
|
+
* override — everything needed to place the file deterministically. */
|
|
48
|
+
export interface AttachmentPathArgs {
|
|
49
|
+
/** Sanitized display filename (basename, safe charset). */
|
|
50
|
+
filename: string;
|
|
51
|
+
/** First 8 hex chars of the SHA-256 idempotency digest. */
|
|
52
|
+
hash8: string;
|
|
53
|
+
/** `YYYY-MM-DD` from the injected clock. */
|
|
54
|
+
date: string;
|
|
55
|
+
/** Resolved media type. */
|
|
56
|
+
mediaType: string;
|
|
57
|
+
/** `image`/`file` split of the media type. */
|
|
58
|
+
kind: ChatAttachmentKind;
|
|
59
|
+
}
|
|
60
|
+
/** Default MIME hook: extension → mime, or `text/plain` for the unknown. */
|
|
61
|
+
export declare function sniffMimeFromName(filename: string): string;
|
|
62
|
+
/** Define options for promoting a part of an agent file within a specific session and scope */
|
|
63
|
+
export interface PromoteAgentFilePartOptions {
|
|
64
|
+
raw: RawAgentFilePart;
|
|
65
|
+
/** The turn's box — required only to promote a sandbox-path part; a `data:`
|
|
66
|
+
* URI needs none. */
|
|
67
|
+
box?: SandboxExecChannel;
|
|
68
|
+
/** The product's workspace/tenant key, passed to `writeAttachment`. */
|
|
69
|
+
scopeId: string;
|
|
70
|
+
/** The turn's session id, used for the sandbox stat/read exec calls. */
|
|
71
|
+
sessionId: string;
|
|
72
|
+
/** REQUIRED store writer — no default (the product owns its store). */
|
|
73
|
+
writeAttachment: WriteAttachmentFn;
|
|
74
|
+
/** Store-path strategy. Default {@link defaultBuildAttachmentPath}. */
|
|
75
|
+
buildAttachmentPath?: (args: AttachmentPathArgs) => string;
|
|
76
|
+
/** Raw-byte ceiling. Default {@link PROMOTE_MAX_FILE_BYTES}. */
|
|
77
|
+
maxBytes?: number;
|
|
78
|
+
/** Last-resort media-type hook. Default {@link sniffMimeFromName}. */
|
|
79
|
+
sniffMime?: (filename: string) => string;
|
|
80
|
+
/** Clock for the date path segment. Default `() => new Date()`. */
|
|
81
|
+
now?: () => Date;
|
|
82
|
+
}
|
|
83
|
+
/** Promote a part of an agent file with optional byte limits and MIME type detection */
|
|
84
|
+
export declare function promoteAgentFilePart(options: PromoteAgentFilePartOptions): Promise<PromoteFilePartResult>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `resolveChatAttachments` — validate a turn body's `attachments` field into
|
|
3
|
+
* persistable {@link ChatAttachmentPart}s. Every path is re-validated (a path
|
|
4
|
+
* off the wire is never trusted to stay inside the store root) and every size
|
|
5
|
+
* is re-derived from the STORED body via the injected {@link ReadAttachmentFn},
|
|
6
|
+
* never the client-reported `size` — the upload path lets a caller rewrite its
|
|
7
|
+
* own frontmatter, so a stored size cannot bound anything and the wire size can
|
|
8
|
+
* be anything. Both the aggregate cap and the size carried on the returned part
|
|
9
|
+
* come from the authoritative read.
|
|
10
|
+
*
|
|
11
|
+
* Storage-parameterized: the frontmatter parsing / base64 sizing that derives
|
|
12
|
+
* the authoritative size lives BEHIND `readAttachment` (a product's vault or
|
|
13
|
+
* object-store adapter), so this module is a pure validator + budget gate with
|
|
14
|
+
* no store knowledge. Lifted from gtm-agent's `resolve-attachments.ts`
|
|
15
|
+
* (workspaceId → scopeId, the vault read → the injected reader) and kept
|
|
16
|
+
* behavior-identical for gtm-agent#618 adoption.
|
|
17
|
+
*/
|
|
18
|
+
import { type ChatAttachmentPart } from '../chat-store/parts';
|
|
19
|
+
import type { ReadAttachmentFn } from './attachment-store';
|
|
20
|
+
/** Resolve the result of chat attachment processing with success status and corresponding data or error */
|
|
21
|
+
export type ResolveChatAttachmentsResult = {
|
|
22
|
+
succeeded: true;
|
|
23
|
+
value: ChatAttachmentPart[];
|
|
24
|
+
} | {
|
|
25
|
+
succeeded: false;
|
|
26
|
+
error: string;
|
|
27
|
+
};
|
|
28
|
+
/** Verdict of a path check: OK, or a rejection naming why. Mirrors
|
|
29
|
+
* `SandboxMentionPathCheck` in `./wire`. */
|
|
30
|
+
export type AttachmentPathCheck = {
|
|
31
|
+
succeeded: true;
|
|
32
|
+
} | {
|
|
33
|
+
succeeded: false;
|
|
34
|
+
error: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Default path validator when a caller supplies none. Rejects the ways a path
|
|
38
|
+
* picked in a client can escape the store root — traversal (`..` segment),
|
|
39
|
+
* absolute (leading `/`), backslashes, null bytes, control characters (see
|
|
40
|
+
* {@link CONTROL_CHARS} — a path also feeds {@link buildAttachmentPromptBlock}'s
|
|
41
|
+
* `(vault: ${path})` pointer, so it is exposed to the same injection surface as
|
|
42
|
+
* `name`) — plus a dotfile/hidden segment (a leading `.` on any segment).
|
|
43
|
+
* Generalized from gtm's `validateVaultFilePath`, in the spirit of
|
|
44
|
+
* `validateSandboxMentionPath` (`/chat-routes`'s wire mention-path validator) —
|
|
45
|
+
* but the dotfile rejection here is INTENTIONALLY stricter than that sibling:
|
|
46
|
+
* an uploaded attachment path is sanitized store-relative storage the product
|
|
47
|
+
* itself assigned, whereas a mention path points at a file that already exists
|
|
48
|
+
* in the sandbox and may legitimately live under a dotfile segment. A caller
|
|
49
|
+
* that needs gtm's exact (looser) rule can supply `validatePath` to override
|
|
50
|
+
* this default entirely.
|
|
51
|
+
*/
|
|
52
|
+
export declare function defaultValidateAttachmentPath(path: string): AttachmentPathCheck;
|
|
53
|
+
/** Define options to resolve and validate chat attachments with size, count, and path constraints */
|
|
54
|
+
export interface ResolveChatAttachmentsOptions {
|
|
55
|
+
/** The product's workspace/tenant key, passed to `readAttachment`. */
|
|
56
|
+
scopeId: string;
|
|
57
|
+
/** Authoritative size + content reader — see {@link ReadAttachmentFn}. */
|
|
58
|
+
readAttachment: ReadAttachmentFn;
|
|
59
|
+
/** Most attachments one request may carry. Default {@link ATTACHMENT_MAX_COUNT}. */
|
|
60
|
+
maxCount?: number;
|
|
61
|
+
/** Aggregate raw-byte ceiling. Default {@link MAX_ATTACHMENT_TOTAL_BYTES}. */
|
|
62
|
+
maxTotalBytes?: number;
|
|
63
|
+
/** Path validator override. Default {@link defaultValidateAttachmentPath}. */
|
|
64
|
+
validatePath?: (path: string) => AttachmentPathCheck;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validate and resolve a turn body's `attachments` field into persistable
|
|
68
|
+
* parts. Every path is confirmed present (and not deleted) in the caller's own
|
|
69
|
+
* store by `readAttachment` before it is trusted, and size is derived from the
|
|
70
|
+
* authoritative read for both the aggregate cap and the returned part's size.
|
|
71
|
+
*/
|
|
72
|
+
export declare function resolveChatAttachments(value: unknown, options: ResolveChatAttachmentsOptions): Promise<ResolveChatAttachmentsResult>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox lane: bridge a raw sandbox event stream (`streamSandboxPrompt`) into
|
|
3
|
+
* the `ChatTurnProducer` shape agent-runtime's `handleChatTurn` consumes AND
|
|
4
|
+
* the client vocabulary `/web-react`'s `dispatchChatStreamLine` already parses
|
|
5
|
+
* (`text` / `reasoning` / `tool_call` / `tool_result` / `usage` /
|
|
6
|
+
* `notice` / structured `error` / `interaction`). Legal and tax each hand-rolled
|
|
7
|
+
* this mapping differently;
|
|
8
|
+
* this is that middle, composed from `/stream`'s normalizers — no new loop
|
|
9
|
+
* logic, no SDK import (the event source is an injected `AsyncIterable`).
|
|
10
|
+
*
|
|
11
|
+
* Alongside the live mapping it accumulates the PERSISTED projection — the
|
|
12
|
+
* `message.parts` rows `/chat-store` stores — via `normalizePersistedPart` /
|
|
13
|
+
* `mergePersistedPart` / `finalizeAssistantParts`, plus the usage receipt from
|
|
14
|
+
* `step-finish` parts. `createChatTurnRoutes` reads both after drain.
|
|
15
|
+
*/
|
|
16
|
+
import { type JsonRecord } from '../stream/index';
|
|
17
|
+
import { type EmptyTurnRetryInfo, type ModelFallbackInfo, type OpenModelStream } from './model-failover-stream';
|
|
18
|
+
import type { ChatTurnRouteProducer } from './turn-routes';
|
|
19
|
+
/** Outcome of a `promoteFilePart` attempt. `key`, when given, becomes the
|
|
20
|
+
* persisted part's row key (e.g. `attachment:<path>`) so repeat promotions
|
|
21
|
+
* of the same underlying file fold into one segment instead of appending;
|
|
22
|
+
* omitted, the default `getPartKey` keying applies.
|
|
23
|
+
*
|
|
24
|
+
* On failure, `part` is an OPTIONAL substitute part to persist in place of
|
|
25
|
+
* the raw url-bearing one — this is how a product swaps in a transcript
|
|
26
|
+
* notice (gtm persists a `warning` notice part, never the transient url) for
|
|
27
|
+
* a failed promotion instead of baking a `data:`/sandbox-path url into the
|
|
28
|
+
* durable row. When `part` is present it is persisted (via the same
|
|
29
|
+
* `recordPersistedPart` path as a success, honoring the optional `key`);
|
|
30
|
+
* when absent, the existing raw-part fallback applies unchanged — so a
|
|
31
|
+
* caller that only returns `{ succeeded: false, reason }` keeps today's
|
|
32
|
+
* behavior verbatim. */
|
|
33
|
+
export type FilePartPromotionOutcome = {
|
|
34
|
+
succeeded: true;
|
|
35
|
+
part: Record<string, unknown>;
|
|
36
|
+
key?: string;
|
|
37
|
+
} | {
|
|
38
|
+
succeeded: false;
|
|
39
|
+
reason: string;
|
|
40
|
+
part?: Record<string, unknown>;
|
|
41
|
+
key?: string;
|
|
42
|
+
};
|
|
43
|
+
/** Define options for producing sandbox chat events with rendering and interaction controls */
|
|
44
|
+
export interface SandboxChatProducerOptions {
|
|
45
|
+
/** The raw sandbox event stream (e.g. `streamSandboxPrompt(...)`).
|
|
46
|
+
*
|
|
47
|
+
* An ALREADY-OPEN stream is bound to one model and cannot be reopened, so
|
|
48
|
+
* this form can never fail over. Prefer {@link openEvents}; exactly one of
|
|
49
|
+
* the two is required. */
|
|
50
|
+
events?: AsyncIterable<unknown>;
|
|
51
|
+
/** Open the raw sandbox stream FOR A GIVEN MODEL — the failover-capable form
|
|
52
|
+
* of {@link events}. The callback receives the model to run and returns the
|
|
53
|
+
* same `AsyncIterable` `events` would have been (typically
|
|
54
|
+
* `streamSandboxPrompt(shell, box, prompt, { ...opts, model })`).
|
|
55
|
+
*
|
|
56
|
+
* Wiring this turns failover ON with no further flag: whenever the resolved
|
|
57
|
+
* chain (`model` + {@link fallbackModels}) holds more than one entry, a model
|
|
58
|
+
* whose upstream is dead is abandoned BEFORE its first client-visible byte
|
|
59
|
+
* and the next one is tried. A one-entry chain opens exactly once — no extra
|
|
60
|
+
* call, no added latency, byte-identical to today.
|
|
61
|
+
*
|
|
62
|
+
* Requires {@link model}: failover has to know which model it is running. */
|
|
63
|
+
openEvents?: OpenModelStream;
|
|
64
|
+
/** Recorded on the persisted assistant message. When failover moves the turn
|
|
65
|
+
* to another model, the producer's `model` reports the model that ACTUALLY
|
|
66
|
+
* served, not this preferred one — see {@link modelFailover}. */
|
|
67
|
+
model?: string;
|
|
68
|
+
/** Models to try, in order, when `model`'s upstream is dead. Product config,
|
|
69
|
+
* never a shell default: agent-app cannot know which ids are live, and a
|
|
70
|
+
* baked list would rot into exactly the stale-liveness bug this guards
|
|
71
|
+
* against. Empty/omitted → one attempt, today's behavior.
|
|
72
|
+
*
|
|
73
|
+
* Pick these deliberately. A same-family fallback is NOT automatically safe:
|
|
74
|
+
* `gemini-2.5-flash` produced zero persisted deliverables in 2 of 3 measured
|
|
75
|
+
* runs on a med-legal filing flow where `gemini-2.5-pro` succeeded. That is
|
|
76
|
+
* why every fallback is surfaced (persisted `model`, a transcript notice, and
|
|
77
|
+
* `modelFailover()`) instead of being applied silently. */
|
|
78
|
+
fallbackModels?: readonly string[];
|
|
79
|
+
/** Opt out of failover while still using {@link openEvents}. `false` collapses
|
|
80
|
+
* the chain to `model` alone. */
|
|
81
|
+
modelFailover?: false;
|
|
82
|
+
/** Maximum time to open/start one model event source through its first event.
|
|
83
|
+
* Default 120 seconds. This is separate from provider first-output latency
|
|
84
|
+
* so cold sandbox startup is not mislabeled as an inference failure. */
|
|
85
|
+
openTimeoutMs?: number;
|
|
86
|
+
/** Hard deadline after the source's first lifecycle event for the first
|
|
87
|
+
* answer-bearing event. Default 60 seconds. Processing/lifecycle events do
|
|
88
|
+
* not extend it. */
|
|
89
|
+
firstResponseTimeoutMs?: number;
|
|
90
|
+
/** Fired when a model is abandoned mid-chain (telemetry/alerting). The user
|
|
91
|
+
* already sees a transcript notice; this is for the operator. */
|
|
92
|
+
onModelFallback?: (info: ModelFallbackInfo) => void;
|
|
93
|
+
/** Re-run the SAME model this many times when a turn completes with no
|
|
94
|
+
* assistant text at all. Default `0` (unchanged behavior). Requires
|
|
95
|
+
* {@link openEvents} — there is nothing to re-open on a fixed stream.
|
|
96
|
+
*
|
|
97
|
+
* Distinct from {@link fallbackModels} on purpose: this never changes which
|
|
98
|
+
* model answers, so it carries none of the attribution risk a downgrade
|
|
99
|
+
* does. Measured on production 2026-07-27 through gtm-agent's profile, a
|
|
100
|
+
* completed-but-blank turn is a transient platform flake — 8 hard cases went
|
|
101
|
+
* 7/8 delivered to 8/8 with one re-run, costing 1 extra turn in 9. */
|
|
102
|
+
emptyTurnRetries?: number;
|
|
103
|
+
/** Fired when a blank turn is discarded and the same model re-run. */
|
|
104
|
+
onEmptyTurnRetry?: (info: EmptyTurnRetryInfo) => void;
|
|
105
|
+
/** Which ask kinds the product renders a card for. Anything else is
|
|
106
|
+
* auto-declined (see `declineInteraction`) so the run never hangs in the
|
|
107
|
+
* broker waiting on a card no client will show. Default: question/plan.
|
|
108
|
+
* Products with per-turn plan mode can close over it without another option:
|
|
109
|
+
* `(kind) => kind === 'question' || (kind === 'plan' && planEnabled)`. */
|
|
110
|
+
isRenderableInteraction?: (kind: string) => boolean;
|
|
111
|
+
/** Resolve a non-renderable ask (wire `respondToSessionInteraction` with the
|
|
112
|
+
* session's sidecar connection). Without it, a failure notice is emitted and
|
|
113
|
+
* the run stays blocked until the broker times out. */
|
|
114
|
+
declineInteraction?: (id: string) => Promise<void>;
|
|
115
|
+
/** Opt-in eager promotion of harness-emitted `file` parts. Unset, a `file`
|
|
116
|
+
* part persists exactly as the harness sent it — a transient `url` (a
|
|
117
|
+
* `data:` URI or in-sandbox path) baked into the transcript, which is
|
|
118
|
+
* today's behavior and stays byte-identical if this is never wired. Set,
|
|
119
|
+
* EVERY `file` part (never `image`, never any other kind) is routed
|
|
120
|
+
* through this callback instead of `recordPersistedPart`'s default
|
|
121
|
+
* fallback — including a part with NEITHER `id` NOR `url` (gtm always
|
|
122
|
+
* attempts promotion; such a part simply fails "carries no url" and
|
|
123
|
+
* resolves through the same failure path as any other rejection, rather
|
|
124
|
+
* than being persisted raw and unpromoted) — so the product can durably
|
|
125
|
+
* write the bytes and swap in a path-bearing part before the raw url ever
|
|
126
|
+
* reaches the persisted transcript. Keyed per source-prefixed `id:<id>` /
|
|
127
|
+
* `url:<url>` (an `id` and a `url` sharing the same text must never collide
|
|
128
|
+
* onto one memo entry) and memoized by PROMISE (not result), so re-emitted
|
|
129
|
+
* snapshot events for the same part —
|
|
130
|
+
* the harness resends the whole part on every update, not just deltas —
|
|
131
|
+
* fold onto the one in-flight or settled attempt rather than promoting
|
|
132
|
+
* twice or racing two concurrent writes; a raw part with neither `id` nor
|
|
133
|
+
* `url` cannot be keyed, so it is invoked UN-memoized (once per event) —
|
|
134
|
+
* each occurrence is its own attempt. A rejecting promise is caught,
|
|
135
|
+
* logged via `log`, and treated as `succeeded: false`. On `succeeded:
|
|
136
|
+
* false` the outcome's optional `part` (a substitute — e.g. a warning
|
|
137
|
+
* notice — see {@link FilePartPromotionOutcome}) persists in its place when
|
|
138
|
+
* given; otherwise the raw part persists exactly as it does today — this
|
|
139
|
+
* seam only decides whether to call the promoter and what to do with its
|
|
140
|
+
* outcomes; the promotion mechanics (vault write, key derivation, notice
|
|
141
|
+
* construction) live in the caller's callback, not here. */
|
|
142
|
+
promoteFilePart?: (raw: JsonRecord) => Promise<FilePartPromotionOutcome>;
|
|
143
|
+
log?: (message: string, meta?: Record<string, unknown>) => void;
|
|
144
|
+
}
|
|
145
|
+
/** Create a sandbox chat producer that manages chat turn routing with logging and interaction rendering options */
|
|
146
|
+
export declare function createSandboxChatProducer(options: SandboxChatProducerOptions): ChatTurnRouteProducer;
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
*/
|
|
37
37
|
/** Where the box is, as far as the caller can see. `state` on `not-running`
|
|
38
38
|
* is the platform's own status string, carried through for the log. */
|
|
39
|
-
type StaleTurnLockSandboxProbeResult = {
|
|
39
|
+
export type StaleTurnLockSandboxProbeResult = {
|
|
40
40
|
status: 'running';
|
|
41
41
|
} | {
|
|
42
42
|
status: 'absent';
|
|
@@ -47,7 +47,7 @@ type StaleTurnLockSandboxProbeResult = {
|
|
|
47
47
|
/** What the thing running the turn says about it. `terminal: false` means an
|
|
48
48
|
* execution is LIVE — the strongest signal in the policy. `diagnostics` rides
|
|
49
49
|
* through to the result and the logs unread. */
|
|
50
|
-
type StaleTurnLockSessionProbeResult = {
|
|
50
|
+
export type StaleTurnLockSessionProbeResult = {
|
|
51
51
|
reachable: true;
|
|
52
52
|
terminal: boolean;
|
|
53
53
|
diagnostics?: Record<string, unknown>;
|
|
@@ -69,7 +69,7 @@ type StaleTurnLockSessionProbeResult = {
|
|
|
69
69
|
* minutes. Raising it makes recovery slower; lowering it risks stealing a lock
|
|
70
70
|
* mid-provision.
|
|
71
71
|
*/
|
|
72
|
-
declare const DEFAULT_STALE_TURN_LOCK_GRACE_MS: number;
|
|
72
|
+
export declare const DEFAULT_STALE_TURN_LOCK_GRACE_MS: number;
|
|
73
73
|
/**
|
|
74
74
|
* Minimum age a lock must reach before a TERMINAL session verdict may release
|
|
75
75
|
* it.
|
|
@@ -94,9 +94,9 @@ declare const DEFAULT_STALE_TURN_LOCK_GRACE_MS: number;
|
|
|
94
94
|
* the session probe exists to shortcut. Raising it delays recovery from a
|
|
95
95
|
* crashed turn; lowering it narrows the registration window it protects.
|
|
96
96
|
*/
|
|
97
|
-
declare const DEFAULT_TERMINAL_TURN_LOCK_GRACE_MS: number;
|
|
97
|
+
export declare const DEFAULT_TERMINAL_TURN_LOCK_GRACE_MS: number;
|
|
98
98
|
/** Resolve options for probing and releasing stale TURN locks based on lock start time and sandbox state */
|
|
99
|
-
interface ReconcileStaleTurnLockOptions {
|
|
99
|
+
export interface ReconcileStaleTurnLockOptions {
|
|
100
100
|
/** When the held lock was acquired (epoch ms). The grace period is measured
|
|
101
101
|
* from here, so it must be the LOCK's start, not the turn's. */
|
|
102
102
|
lockStartedAt: number;
|
|
@@ -134,7 +134,7 @@ interface ReconcileStaleTurnLockOptions {
|
|
|
134
134
|
now?(): number;
|
|
135
135
|
}
|
|
136
136
|
/** Describe the outcome of reconciling a stale turn lock including release status and diagnostics */
|
|
137
|
-
interface ReconcileStaleTurnLockResult {
|
|
137
|
+
export interface ReconcileStaleTurnLockResult {
|
|
138
138
|
released: boolean;
|
|
139
139
|
/** Why the policy decided what it did — the probe's own diagnostics on the
|
|
140
140
|
* reachable path, the unreachable reason and lock age on the fallback. */
|
|
@@ -146,6 +146,4 @@ interface ReconcileStaleTurnLockResult {
|
|
|
146
146
|
* Never provisions and never mutates anything but the lock: a reconciliation
|
|
147
147
|
* attempt on a cold workspace leaves it cold.
|
|
148
148
|
*/
|
|
149
|
-
declare function reconcileStaleTurnLock(options: ReconcileStaleTurnLockOptions): Promise<ReconcileStaleTurnLockResult>;
|
|
150
|
-
|
|
151
|
-
export { DEFAULT_STALE_TURN_LOCK_GRACE_MS as D, type ReconcileStaleTurnLockOptions as R, type StaleTurnLockSandboxProbeResult as S, DEFAULT_TERMINAL_TURN_LOCK_GRACE_MS as a, type ReconcileStaleTurnLockResult as b, type StaleTurnLockSessionProbeResult as c, reconcileStaleTurnLock as r };
|
|
149
|
+
export declare function reconcileStaleTurnLock(options: ReconcileStaleTurnLockOptions): Promise<ReconcileStaleTurnLockResult>;
|