@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,92 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { AgentComposer } from '@tangle-network/sandbox-ui/chat';
|
|
3
|
+
import type { UseFileMentionsResult } from '../web-react/use-file-mentions';
|
|
4
|
+
import type { ChatAttachmentInput, FileMention } from '../chat-routes/wire';
|
|
5
|
+
import { type AgentSessionControlsProps } from '../web-react/agent-session-controls';
|
|
6
|
+
import type { ComposerPlanModeSelection } from './types';
|
|
7
|
+
export interface EntryComposerProps {
|
|
8
|
+
/** The one line above the input. Domain copy — always a product parameter. */
|
|
9
|
+
heading?: ReactNode;
|
|
10
|
+
/** Optional supporting line under the heading. */
|
|
11
|
+
subheading?: ReactNode;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
initialValue?: string;
|
|
14
|
+
sendLabel?: string;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Agent identity (backend/model/effort). Pass it and the control row renders;
|
|
18
|
+
* omit it and the composer ships without one. Omitting is a real choice for a
|
|
19
|
+
* surface with nothing to choose — it should never be an oversight, which is
|
|
20
|
+
* why this is one prop rather than a free-form slot a caller can forget.
|
|
21
|
+
*
|
|
22
|
+
* This is the CANONICAL picker cluster: `AgentSessionControls` from
|
|
23
|
+
* `/web-react` (its model menu IS the canonical `ModelPicker`). The legacy
|
|
24
|
+
* sandbox-ui adapter that used to back this prop was removed; the props
|
|
25
|
+
* mapping for migrating a stored selection lives in
|
|
26
|
+
* `docs/ui-picker-canon.md`.
|
|
27
|
+
*/
|
|
28
|
+
agent?: AgentSessionControlsProps;
|
|
29
|
+
/**
|
|
30
|
+
* Product-specific behavioral controls docked on the LEFT. A mode is an
|
|
31
|
+
* on/off switch, not a value picker, so it sits apart from agent identity.
|
|
32
|
+
* For the standard plan-approval control, prefer `planMode`.
|
|
33
|
+
*/
|
|
34
|
+
modes?: ReactNode;
|
|
35
|
+
/**
|
|
36
|
+
* Standard plan-approval mode. Pass only when the selected backend supports
|
|
37
|
+
* it; omitted means the control is not rendered.
|
|
38
|
+
*/
|
|
39
|
+
planMode?: ComposerPlanModeSelection;
|
|
40
|
+
/**
|
|
41
|
+
* Upload endpoint for staged attachments. Omit and the attach affordance is
|
|
42
|
+
* hidden — a composer with no place to put a file must not offer one.
|
|
43
|
+
*/
|
|
44
|
+
uploadUrl?: string;
|
|
45
|
+
accept?: string;
|
|
46
|
+
onAttachmentError?: (reason: string) => void;
|
|
47
|
+
onRejectFiles?: Parameters<typeof AgentComposer>[0]['onRejectFiles'];
|
|
48
|
+
/**
|
|
49
|
+
* `@`-file mentions. The hook itself is shared (`useFileMentions`), but the
|
|
50
|
+
* cold-box policy around it — whether pressing `@` is worth starting a
|
|
51
|
+
* sandbox — is a per-surface product call, so the result is injected rather
|
|
52
|
+
* than created here.
|
|
53
|
+
*/
|
|
54
|
+
mentions?: UseFileMentionsResult;
|
|
55
|
+
mentionPopoverClassName?: string;
|
|
56
|
+
/** Rendered under the composer: suggestion pills, an onboarding nudge, a
|
|
57
|
+
* disclaimer. All domain copy. */
|
|
58
|
+
footer?: ReactNode;
|
|
59
|
+
/** Block submit until a persisted selection has resolved against the catalog,
|
|
60
|
+
* so the first turn cannot go out under the wrong model. Defaults to true. */
|
|
61
|
+
ready?: boolean;
|
|
62
|
+
onSubmit: (prompt: string, attachments: ChatAttachmentInput[], mentions: FileMention[]) => void;
|
|
63
|
+
className?: string;
|
|
64
|
+
composerClassName?: string;
|
|
65
|
+
/** Max width of the centered column. Defaults to the fleet's 820px. */
|
|
66
|
+
maxWidth?: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* `EntryComposer` — the centered "what do you want to work on?" surface a
|
|
70
|
+
* product shows before a conversation exists (a new thread, an empty session,
|
|
71
|
+
* a workspace overview).
|
|
72
|
+
*
|
|
73
|
+
* It exists because three products each grew their own, and they drifted into
|
|
74
|
+
* three different capability sets rather than three different looks: one lost
|
|
75
|
+
* the attach button, one lost the model and effort pickers entirely, one
|
|
76
|
+
* hand-rolled a `<textarea>` and wired pickers from three separate packages
|
|
77
|
+
* into one row. The composer, the pickers, the attachment queue and the mention
|
|
78
|
+
* index were all ALREADY shared — what was not shared was the assembly, so
|
|
79
|
+
* every product re-derived which controls an entry surface gets, and each
|
|
80
|
+
* re-derivation dropped a different one.
|
|
81
|
+
*
|
|
82
|
+
* Mechanism lives here: layout, the attachment queue, the mention wiring, the
|
|
83
|
+
* submit gate (nothing sends while an upload is pending or failed, or before
|
|
84
|
+
* the model selection has resolved). Domain stays a parameter: `heading`,
|
|
85
|
+
* `placeholder`, `footer` (suggestion pills, disclaimers) and the selections
|
|
86
|
+
* themselves.
|
|
87
|
+
*
|
|
88
|
+
* The docked in-thread composer is NOT this component — it renders
|
|
89
|
+
* `AgentComposer` directly with the same canonical `AgentSessionControls`,
|
|
90
|
+
* because a docked composer has a transcript above it and no hero layout.
|
|
91
|
+
*/
|
|
92
|
+
export declare function EntryComposer({ heading, subheading, placeholder, initialValue, sendLabel, disabled, agent, modes, planMode, uploadUrl, accept, onAttachmentError, onRejectFiles, mentions, mentionPopoverClassName, footer, ready, onSubmit, className, composerClassName, maxWidth, }: EntryComposerProps): import("react").JSX.Element;
|
|
@@ -1,123 +1,27 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
import { AgentComposer } from '@tangle-network/sandbox-ui/chat';
|
|
4
|
-
import { A as AgentSessionControlsProps, U as UseFileMentionsResult } from '../agent-session-controls-CmlXwp_H.js';
|
|
5
|
-
import { b as ChatAttachmentInput, F as FileMention } from '../wire-DOZ-O6hD.js';
|
|
6
|
-
import '../harness/index.js';
|
|
7
|
-
import '@tangle-network/agent-interface';
|
|
8
|
-
import '../catalog/index.js';
|
|
9
|
-
|
|
10
1
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `AgentSessionControls` vocabulary from `../web-react` — see "UI chrome
|
|
14
|
-
* ownership (picker canon)" in AGENTS.md.
|
|
15
|
-
*/
|
|
16
|
-
interface ComposerPlanModeSelection {
|
|
17
|
-
enabled: boolean;
|
|
18
|
-
setEnabled: (next: boolean) => void;
|
|
19
|
-
saving?: boolean;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
interface EntryComposerProps {
|
|
23
|
-
/** The one line above the input. Domain copy — always a product parameter. */
|
|
24
|
-
heading?: ReactNode;
|
|
25
|
-
/** Optional supporting line under the heading. */
|
|
26
|
-
subheading?: ReactNode;
|
|
27
|
-
placeholder?: string;
|
|
28
|
-
initialValue?: string;
|
|
29
|
-
sendLabel?: string;
|
|
30
|
-
disabled?: boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Agent identity (backend/model/effort). Pass it and the control row renders;
|
|
33
|
-
* omit it and the composer ships without one. Omitting is a real choice for a
|
|
34
|
-
* surface with nothing to choose — it should never be an oversight, which is
|
|
35
|
-
* why this is one prop rather than a free-form slot a caller can forget.
|
|
36
|
-
*
|
|
37
|
-
* This is the CANONICAL picker cluster: `AgentSessionControls` from
|
|
38
|
-
* `/web-react` (its model menu IS the canonical `ModelPicker`). The legacy
|
|
39
|
-
* sandbox-ui adapter that used to back this prop was removed; the props
|
|
40
|
-
* mapping for migrating a stored selection lives in
|
|
41
|
-
* `docs/ui-picker-canon.md`.
|
|
42
|
-
*/
|
|
43
|
-
agent?: AgentSessionControlsProps;
|
|
44
|
-
/**
|
|
45
|
-
* Product-specific behavioral controls docked on the LEFT. A mode is an
|
|
46
|
-
* on/off switch, not a value picker, so it sits apart from agent identity.
|
|
47
|
-
* For the standard plan-approval control, prefer `planMode`.
|
|
48
|
-
*/
|
|
49
|
-
modes?: ReactNode;
|
|
50
|
-
/**
|
|
51
|
-
* Standard plan-approval mode. Pass only when the selected backend supports
|
|
52
|
-
* it; omitted means the control is not rendered.
|
|
53
|
-
*/
|
|
54
|
-
planMode?: ComposerPlanModeSelection;
|
|
55
|
-
/**
|
|
56
|
-
* Upload endpoint for staged attachments. Omit and the attach affordance is
|
|
57
|
-
* hidden — a composer with no place to put a file must not offer one.
|
|
58
|
-
*/
|
|
59
|
-
uploadUrl?: string;
|
|
60
|
-
accept?: string;
|
|
61
|
-
onAttachmentError?: (reason: string) => void;
|
|
62
|
-
onRejectFiles?: Parameters<typeof AgentComposer>[0]['onRejectFiles'];
|
|
63
|
-
/**
|
|
64
|
-
* `@`-file mentions. The hook itself is shared (`useFileMentions`), but the
|
|
65
|
-
* cold-box policy around it — whether pressing `@` is worth starting a
|
|
66
|
-
* sandbox — is a per-surface product call, so the result is injected rather
|
|
67
|
-
* than created here.
|
|
68
|
-
*/
|
|
69
|
-
mentions?: UseFileMentionsResult;
|
|
70
|
-
mentionPopoverClassName?: string;
|
|
71
|
-
/** Rendered under the composer: suggestion pills, an onboarding nudge, a
|
|
72
|
-
* disclaimer. All domain copy. */
|
|
73
|
-
footer?: ReactNode;
|
|
74
|
-
/** Block submit until a persisted selection has resolved against the catalog,
|
|
75
|
-
* so the first turn cannot go out under the wrong model. Defaults to true. */
|
|
76
|
-
ready?: boolean;
|
|
77
|
-
onSubmit: (prompt: string, attachments: ChatAttachmentInput[], mentions: FileMention[]) => void;
|
|
78
|
-
className?: string;
|
|
79
|
-
composerClassName?: string;
|
|
80
|
-
/** Max width of the centered column. Defaults to the fleet's 820px. */
|
|
81
|
-
maxWidth?: number;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* `EntryComposer` — the centered "what do you want to work on?" surface a
|
|
85
|
-
* product shows before a conversation exists (a new thread, an empty session,
|
|
86
|
-
* a workspace overview).
|
|
2
|
+
* `@tangle-network/agent-app/chat-react` — the chat-composer surfaces that need
|
|
3
|
+
* `@tangle-network/sandbox-ui`.
|
|
87
4
|
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* index were all ALREADY shared — what was not shared was the assembly, so
|
|
94
|
-
* every product re-derived which controls an entry surface gets, and each
|
|
95
|
-
* re-derivation dropped a different one.
|
|
5
|
+
* Isolated behind its own entry for the OPTIONAL-PEER rule: sandbox-ui is an
|
|
6
|
+
* optional peer of this package, so a subpath that imports it must never be
|
|
7
|
+
* reachable from one that does not. `/web-react` stays sandbox-ui-free; anything
|
|
8
|
+
* that renders sandbox-ui's `AgentComposer` lives here. (Same rule, same shape
|
|
9
|
+
* as `/work-product-react`.)
|
|
96
10
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
11
|
+
* WHY THIS EXISTS. sandbox-ui owns the composer chrome; this subpath owns the
|
|
12
|
+
* app-shell ASSEMBLY over it — which controls an entry surface gets, the
|
|
13
|
+
* submit gate. Three products each re-derived that assembly and each dropped a
|
|
14
|
+
* different control, so the same "shared" components produced three different
|
|
15
|
+
* capability sets. One assembly, three products, domain by parameter.
|
|
102
16
|
*
|
|
103
|
-
* The
|
|
104
|
-
* `
|
|
105
|
-
*
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Plan-approval mode. Products pass it only when the selected backend can
|
|
112
|
-
* propose a plan and wait for approval; omitted means nothing renders.
|
|
113
|
-
*/
|
|
114
|
-
planMode?: ComposerPlanModeSelection;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* The shared plan-mode toggle for the left side of an agent composer.
|
|
118
|
-
* Plan mode is a behavioral switch, not part of the profile/backend/model/
|
|
119
|
-
* thinking identity controls on the right.
|
|
17
|
+
* PICKER CANON. The agent-identity controls an `EntryComposer` renders are the
|
|
18
|
+
* canonical ones: its `agent` prop is `AgentSessionControlsProps` and the row
|
|
19
|
+
* is `/web-react`'s `AgentSessionControls`, whose model menu IS the canonical
|
|
20
|
+
* `ModelPicker` — see "UI chrome ownership (picker canon)" in AGENTS.md and
|
|
21
|
+
* `docs/ui-picker-canon.md`. The legacy `ComposerAgentControls` adapter over
|
|
22
|
+
* sandbox-ui's strip was REMOVED (it was deprecated-first); products still on
|
|
23
|
+
* it migrate per the props mapping in that doc.
|
|
120
24
|
*/
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
export
|
|
25
|
+
export { EntryComposer, type EntryComposerProps } from './entry-composer';
|
|
26
|
+
export { ComposerModeControls, type ComposerModeControlsProps, } from './composer-mode-controls';
|
|
27
|
+
export type { ComposerPlanModeSelection } from './types';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The plan-mode toggle state an entry surface docks beside the composer. The
|
|
3
|
+
* agent-identity pickers (model / harness / effort) speak the canonical
|
|
4
|
+
* `AgentSessionControls` vocabulary from `../web-react` — see "UI chrome
|
|
5
|
+
* ownership (picker canon)" in AGENTS.md.
|
|
6
|
+
*/
|
|
7
|
+
export interface ComposerPlanModeSelection {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
setEnabled: (next: boolean) => void;
|
|
10
|
+
saving?: boolean;
|
|
11
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage seams for the chat-attachment vertical (`resolveChatAttachments`,
|
|
3
|
+
* `buildDispatchParts`, `promoteAgentFilePart`). Structural function ports in
|
|
4
|
+
* the same style as `upload.ts`'s `SandboxUploadSink`: REQUIRED injection, no
|
|
5
|
+
* default implementation — agent-app owns the size/budget/idempotency
|
|
6
|
+
* mechanism, the product owns where the bytes actually live.
|
|
7
|
+
*
|
|
8
|
+
* One reader, two callers: `resolveChatAttachments` reads only the
|
|
9
|
+
* authoritative `size` (never trusting the client-reported size), while
|
|
10
|
+
* `buildDispatchParts` reads the inline `content` (base64 or raw bytes) to
|
|
11
|
+
* build a `data:` URI. Both fit behind ONE `ReadAttachmentFn` so a product
|
|
12
|
+
* wires a single vault/object-store adapter, not two. gtm's KV vault (stores
|
|
13
|
+
* base64 bodies) and `/object-store`'s `ObjectStore` (hands back raw bytes)
|
|
14
|
+
* both satisfy this shape.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* The result of reading one stored attachment. `ok:true` MUST carry the
|
|
18
|
+
* authoritative decoded byte `size` (the cap is meaningless against a
|
|
19
|
+
* client-controlled number) and, when the caller needs to inline the file,
|
|
20
|
+
* its content as `base64` and/or raw `bytes`. `mediaType` is the stored
|
|
21
|
+
* content type when the store knows it (used as the fallback when the wire
|
|
22
|
+
* part carried none). `ok:false` carries a human `reason` that SHOULD name the
|
|
23
|
+
* offending path — it is surfaced verbatim in the caller's typed outcome.
|
|
24
|
+
*/
|
|
25
|
+
export type AttachmentReadResult = {
|
|
26
|
+
ok: true;
|
|
27
|
+
/** Authoritative decoded byte length of the stored content. */
|
|
28
|
+
size: number;
|
|
29
|
+
/** Inline content as base64 — reused verbatim for a `data:` URI, so a
|
|
30
|
+
* store holding already-base64 bodies never decodes-and-re-encodes. */
|
|
31
|
+
base64?: string;
|
|
32
|
+
/** Inline content as raw bytes — base64-encoded by the caller when a
|
|
33
|
+
* `data:` URI is needed. Ignored when `base64` is present. */
|
|
34
|
+
bytes?: Uint8Array;
|
|
35
|
+
/** Stored content type, when the store tracks one. */
|
|
36
|
+
mediaType?: string;
|
|
37
|
+
} | {
|
|
38
|
+
ok: false;
|
|
39
|
+
reason: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Read one stored attachment for `scopeId` (the product's workspace/tenant
|
|
43
|
+
* key) at its store-relative `path`. Missing, deleted, or unreadable content
|
|
44
|
+
* MUST resolve to `{ ok: false, reason }`, never throw — a store failure is a
|
|
45
|
+
* per-attachment outcome the caller folds into its own typed result, not a
|
|
46
|
+
* turn-level exception.
|
|
47
|
+
*/
|
|
48
|
+
export type ReadAttachmentFn = (scopeId: string, path: string) => Promise<AttachmentReadResult>;
|
|
49
|
+
/** Outcome of persisting one attachment. Mirrors `AttachmentReadResult`'s
|
|
50
|
+
* `ok`/`reason` shape and `upload.ts`'s `{ ok }` convention. */
|
|
51
|
+
export type AttachmentWriteResult = {
|
|
52
|
+
ok: true;
|
|
53
|
+
} | {
|
|
54
|
+
ok: false;
|
|
55
|
+
reason: string;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Persist `content` for `scopeId` at `path`. `content` is either raw `bytes`
|
|
59
|
+
* or a base64 `string` — a string argument is ALWAYS base64 (never utf8), so
|
|
60
|
+
* a store that speaks base64 (gtm's vault) writes it verbatim and one that
|
|
61
|
+
* speaks bytes decodes once. Like the reader, failures resolve to
|
|
62
|
+
* `{ ok: false, reason }` rather than throwing.
|
|
63
|
+
*
|
|
64
|
+
* `opts` mirrors the vault frontmatter gtm's `writeAttachmentVaultFile`
|
|
65
|
+
* persists alongside the body (promote-file-parts.ts:181-190), so a product
|
|
66
|
+
* reimplementing that vault writer through this seam can reproduce it
|
|
67
|
+
* exactly:
|
|
68
|
+
* - `mediaType` — the resolved MIME type; gtm's frontmatter key `mime`.
|
|
69
|
+
* - `name` — the sanitized (store-path-safe) display filename; gtm passes
|
|
70
|
+
* this only to shape its oversize message, not into frontmatter.
|
|
71
|
+
* - `originalName` — the filename as the harness/browser reported it, BEFORE
|
|
72
|
+
* sanitization (`raw.filename ?? filename` — falls back to the sanitized
|
|
73
|
+
* name when the source carried none); gtm's frontmatter key `originalName`.
|
|
74
|
+
* This is the one field with no other recovery path once sanitization has
|
|
75
|
+
* run, so it must ride the write, not be re-derived after the fact.
|
|
76
|
+
* - `size` — the authoritative decoded byte length being written; gtm's
|
|
77
|
+
* frontmatter key `size`.
|
|
78
|
+
*/
|
|
79
|
+
export type WriteAttachmentFn = (scopeId: string, path: string, content: Uint8Array | string, opts: {
|
|
80
|
+
mediaType?: string;
|
|
81
|
+
name?: string;
|
|
82
|
+
originalName?: string;
|
|
83
|
+
size?: number;
|
|
84
|
+
}) => Promise<AttachmentWriteResult>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createAttachmentUploadRoute` — the fleet-primitive durable-store upload
|
|
3
|
+
* route: a two-phase atomic batch (every file is validated before any file is
|
|
4
|
+
* written — a batch never partially lands), a content-sniffed type gate
|
|
5
|
+
* (`checkAttachmentType` over `sniffBinary`'s magic-byte read, not the
|
|
6
|
+
* extension or the browser-reported MIME), per-kind + aggregate byte caps,
|
|
7
|
+
* and sanitized filenames. Storage is fully seamed through the injected
|
|
8
|
+
* `WriteAttachmentFn` (`./attachment-store`) — no default store, the product
|
|
9
|
+
* owns where bytes actually live (vault, object store, …) — and auth/rate
|
|
10
|
+
* limiting is entirely the injected `authorize` seam's job: this factory
|
|
11
|
+
* never invents a 401 or 429 response, it only returns `auth.response`
|
|
12
|
+
* verbatim on failure.
|
|
13
|
+
*
|
|
14
|
+
* Lifted from gtm-agent's `src/routes/api.vault.upload.ts` (the hardening
|
|
15
|
+
* lineage other lifted modules in this vertical cite: gtm#584 binary
|
|
16
|
+
* corruption, gtm#592 sniff gate/caps, gtm#593 batch-atomic writes) and
|
|
17
|
+
* generalized the way `resolve-attachments.ts` generalized gtm's read path —
|
|
18
|
+
* the vault-specific pieces (KV vault paths, frontmatter, per-user rate
|
|
19
|
+
* limiting) are all injected seams here, while the validate-then-write phase
|
|
20
|
+
* split and the type/size gate ordering survive byte-for-byte.
|
|
21
|
+
*
|
|
22
|
+
* @remarks Sibling to, NOT an extension of, `./upload.ts`'s
|
|
23
|
+
* `createUploadRoute` — a different persistence model (durable product store
|
|
24
|
+
* vs. inline-`data:`-or-ephemeral-sandbox-workspace). See that module's doc
|
|
25
|
+
* comment for the up-to-date framing between the two.
|
|
26
|
+
*/
|
|
27
|
+
import type { ChatAttachmentKind } from './wire';
|
|
28
|
+
import type { WriteAttachmentFn } from './attachment-store';
|
|
29
|
+
import { type AttachmentPathCheck } from './resolve-attachments';
|
|
30
|
+
/** Outcome of the injected `authorize` seam: auth + rate limiting +
|
|
31
|
+
* scope resolution, all in one place so a 429 rides `{ok:false, response}`
|
|
32
|
+
* exactly like a 401 does — this factory has no rate-limit opinion of its
|
|
33
|
+
* own. `writeAttachment` lets a single request override the option-level
|
|
34
|
+
* store (e.g. routing per-tenant), defaulting to `options.writeAttachment`
|
|
35
|
+
* when absent. */
|
|
36
|
+
export type AttachmentUploadAuthorization = {
|
|
37
|
+
ok: true;
|
|
38
|
+
scopeId: string;
|
|
39
|
+
writeAttachment?: WriteAttachmentFn;
|
|
40
|
+
} | {
|
|
41
|
+
ok: false;
|
|
42
|
+
response: Response;
|
|
43
|
+
};
|
|
44
|
+
/** Define options to authorize, write, and limit attachment uploads in a route */
|
|
45
|
+
export interface CreateAttachmentUploadRouteOptions {
|
|
46
|
+
/** Authenticate the caller, rate-limit, and resolve the store scope
|
|
47
|
+
* (workspace/tenant id) — never a query param. */
|
|
48
|
+
authorize(args: {
|
|
49
|
+
request: Request;
|
|
50
|
+
}): Promise<AttachmentUploadAuthorization>;
|
|
51
|
+
/** Default store writer. `authorize` may override it per-request. */
|
|
52
|
+
writeAttachment: WriteAttachmentFn;
|
|
53
|
+
/** Overridable caps. Defaults come from `./attachment-validation`. */
|
|
54
|
+
limits?: {
|
|
55
|
+
/** Most files one request may carry. Default {@link ATTACHMENT_MAX_COUNT}. */
|
|
56
|
+
maxCount?: number;
|
|
57
|
+
/** Ceiling on a binary file's raw size. Default {@link MAX_BINARY_ATTACHMENT_BYTES}. */
|
|
58
|
+
maxBinaryBytes?: number;
|
|
59
|
+
/** Ceiling on a text file's raw size. Default {@link MAX_TEXT_ATTACHMENT_BYTES}. */
|
|
60
|
+
maxTextBytes?: number;
|
|
61
|
+
/** Aggregate raw-byte ceiling across the batch. Default {@link MAX_ATTACHMENT_TOTAL_BYTES}. */
|
|
62
|
+
maxTotalBytes?: number;
|
|
63
|
+
};
|
|
64
|
+
/** Attachment kinds this route accepts. Default `['image', 'file']`. */
|
|
65
|
+
allowedKinds?: ChatAttachmentKind[];
|
|
66
|
+
/** Sniffed-mime allowlist fed to `checkAttachmentType`. Default
|
|
67
|
+
* {@link ALLOWED_ATTACHMENT_SNIFFED_MIMES}. Narrow it to accept less than
|
|
68
|
+
* the default (`new Set(['application/pdf'])`), or widen it to accept a
|
|
69
|
+
* format the default refuses — macro-enabled Office packages are the
|
|
70
|
+
* shipped case:
|
|
71
|
+
* `new Set([...ALLOWED_ATTACHMENT_SNIFFED_MIMES, ...MACRO_ENABLED_OOXML_SNIFFED_MIMES])`. */
|
|
72
|
+
allowedSniffedMimes?: ReadonlySet<string>;
|
|
73
|
+
/** Sanitized-name → store path. Default identity (the sanitized name IS
|
|
74
|
+
* the path); gtm passes `vaultFolderForFileName`, a tenant product a
|
|
75
|
+
* scope prefix. */
|
|
76
|
+
pathFor?: (name: string) => string;
|
|
77
|
+
/** Store-path validator. Default {@link defaultValidateAttachmentPath}. */
|
|
78
|
+
validatePath?: (path: string) => AttachmentPathCheck;
|
|
79
|
+
/** Last-resort media-type hook for text content the sniffer can't type.
|
|
80
|
+
* Default {@link sniffMimeFromName}. */
|
|
81
|
+
sniffMime?: (name: string) => string;
|
|
82
|
+
}
|
|
83
|
+
/** Resolve an attachment upload route handler with customizable limits and validation options */
|
|
84
|
+
export declare function createAttachmentUploadRoute(options: CreateAttachmentUploadRouteOptions): (request: Request) => Promise<Response>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared attachment validation core — constants, type-gate, and filename
|
|
3
|
+
* sanitization used by BOTH the (server) attachment upload route and the
|
|
4
|
+
* (browser) composer's client-side pre-validation, so a rejection never
|
|
5
|
+
* differs depending on which side classified the bytes first.
|
|
6
|
+
*
|
|
7
|
+
* ≈ gtm-agent's `src/lib/attachment-limits.ts`, minus what agent-app already
|
|
8
|
+
* has (`ATTACHMENT_MAX_COUNT`/`MAX_ATTACHMENT_TOTAL_BYTES`/
|
|
9
|
+
* `attachmentTotalSizeErrorMessage` lived in `./resolve-attachments` and are
|
|
10
|
+
* re-homed here so the whole validation vocabulary — count cap, size caps,
|
|
11
|
+
* and type gate — has one address). Import-free besides `./wire`
|
|
12
|
+
* (`formatBytes`) and `./binary-sniff` (`SniffResult`): `/web-react`
|
|
13
|
+
* re-exports `/chat-routes` modules into browser bundles
|
|
14
|
+
* (`tests/browser-safe-subpaths.test.ts` walks the graph), so nothing here
|
|
15
|
+
* may reach a Node builtin or an engine package.
|
|
16
|
+
*/
|
|
17
|
+
import type { SniffResult } from './binary-sniff';
|
|
18
|
+
/** Ceiling on a binary attachment's raw (pre-encoding) byte size. */
|
|
19
|
+
export declare const MAX_BINARY_ATTACHMENT_BYTES: number;
|
|
20
|
+
/** Ceiling on a text attachment's raw byte size. Text hydrates through
|
|
21
|
+
* inline prompt parts, a separate path that remains proxy-capped (see
|
|
22
|
+
* `INLINE_PARTS_MAX_BYTES` in `./wire`). */
|
|
23
|
+
export declare const MAX_TEXT_ATTACHMENT_BYTES: number;
|
|
24
|
+
/** Most files a single request may carry: the composer staging cap, the
|
|
25
|
+
* upload route's per-request cap, and the chat body's `attachments` cap. */
|
|
26
|
+
export declare const ATTACHMENT_MAX_COUNT = 10;
|
|
27
|
+
/** Aggregate raw-byte ceiling across one message's attachments. */
|
|
28
|
+
export declare const MAX_ATTACHMENT_TOTAL_BYTES: number;
|
|
29
|
+
/**
|
|
30
|
+
* Accept list for the composer file picker + type validation, same grammar as
|
|
31
|
+
* the native `<input accept>` attribute. Images plus the text/doc types a
|
|
32
|
+
* product's store actually reads.
|
|
33
|
+
*
|
|
34
|
+
* Every extension here is one the default {@link ALLOWED_ATTACHMENT_SNIFFED_MIMES}
|
|
35
|
+
* actually admits — a picker that offers a format the gate then rejects is a
|
|
36
|
+
* defect, so `tests/chat-routes/attachment-validation.test.ts` walks this
|
|
37
|
+
* string and proves each entry uploads.
|
|
38
|
+
*/
|
|
39
|
+
export declare const ATTACHMENT_ACCEPT = "image/*,.pdf,.docx,.xlsx,.pptx,.txt,.md,.csv,.json,.yaml,.yml,.html";
|
|
40
|
+
/** The Office (OOXML) package mimes the default allow-list admits — the
|
|
41
|
+
* formats professionals actually send: Word contracts, Excel workpapers,
|
|
42
|
+
* PowerPoint decks. Admitting the format is a gate decision only; whether a
|
|
43
|
+
* product can EXTRACT text from one is that product's concern. */
|
|
44
|
+
export declare const OOXML_SNIFFED_MIMES: ReadonlySet<string>;
|
|
45
|
+
/** Macro-enabled Office package mimes (`.docm`/`.xlsm`/`.pptm`), reported by
|
|
46
|
+
* `sniffBinary` but deliberately NOT in the default allow-list: a package
|
|
47
|
+
* carrying a VBA project is a different risk decision than a plain document,
|
|
48
|
+
* and it is the product's to make. Opt in by widening the allow-list at the
|
|
49
|
+
* route's `allowedSniffedMimes` seam:
|
|
50
|
+
* `new Set([...ALLOWED_ATTACHMENT_SNIFFED_MIMES, ...MACRO_ENABLED_OOXML_SNIFFED_MIMES])`. */
|
|
51
|
+
export declare const MACRO_ENABLED_OOXML_SNIFFED_MIMES: ReadonlySet<string>;
|
|
52
|
+
/** Sniffed-mime counterpart of `ATTACHMENT_ACCEPT`: the binary formats
|
|
53
|
+
* `sniffBinary` can identify from content among the accepted types.
|
|
54
|
+
* Values must match `sniffBinary`'s output strings verbatim, or every
|
|
55
|
+
* upload of that format fails the type gate — locked by the round-trip test
|
|
56
|
+
* that sniffs real bytes of every mime listed here. */
|
|
57
|
+
export declare const ALLOWED_ATTACHMENT_SNIFFED_MIMES: ReadonlySet<string>;
|
|
58
|
+
/** Represent the result of checking an attachment's type with success or specific failure details */
|
|
59
|
+
export type AttachmentTypeCheckResult = {
|
|
60
|
+
succeeded: true;
|
|
61
|
+
} | {
|
|
62
|
+
succeeded: false;
|
|
63
|
+
code: 'attachment_type_mismatch' | 'attachment_type_not_allowed';
|
|
64
|
+
message: string;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Cross-check a filename's extension against its sniffed content.
|
|
68
|
+
*
|
|
69
|
+
* Text content (`sniff.binary === false`) always passes here — it has no
|
|
70
|
+
* magic bytes to compare, so it rides the existing UTF-8 gate instead. For
|
|
71
|
+
* binary content: an extension with an unambiguous magic-byte family (e.g.
|
|
72
|
+
* `.pdf`) must match the sniffed mime, or the upload is a mismatch (a
|
|
73
|
+
* renamed file). Otherwise the sniffed mime must be one of `allowed`
|
|
74
|
+
* (default {@link ALLOWED_ATTACHMENT_SNIFFED_MIMES}), or the upload is
|
|
75
|
+
* rejected outright. The `allowed` param feeds a route's override seam (a
|
|
76
|
+
* product accepting a narrower or wider set than the default).
|
|
77
|
+
*/
|
|
78
|
+
export declare function checkAttachmentType(fileName: string, sniff: SniffResult, allowed?: ReadonlySet<string>): AttachmentTypeCheckResult;
|
|
79
|
+
/**
|
|
80
|
+
* Rewrite a filename into the store-path charset (`A-Za-z0-9._-` per
|
|
81
|
+
* segment) — attachment paths double as store keys, sandbox file paths, and
|
|
82
|
+
* in-message path references, none of which tolerate spaces or punctuation.
|
|
83
|
+
* Runs of unsupported characters collapse to one `-`; leading dots/dashes are
|
|
84
|
+
* stripped so the name can't read as a hidden segment. The original name is
|
|
85
|
+
* preserved separately (the returned `ChatAttachmentInput.name`), so
|
|
86
|
+
* sanitization loses nothing.
|
|
87
|
+
*/
|
|
88
|
+
export declare function sanitizeAttachmentFileName(name: string): string;
|
|
89
|
+
/** Human-readable error naming both the actual size and the limit that was
|
|
90
|
+
* exceeded. Shared so the server route and the composer pre-check report
|
|
91
|
+
* the same message shape. */
|
|
92
|
+
export declare function attachmentSizeErrorMessage(name: string, actualBytes: number, limitBytes: number): string;
|
|
93
|
+
/** Human-readable error for a chat message whose combined attachments exceed
|
|
94
|
+
* the aggregate raw-byte ceiling. */
|
|
95
|
+
export declare function attachmentTotalSizeErrorMessage(totalBytes: number, limitBytes: number): string;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-based binary/text classification, shared by the attachment upload
|
|
3
|
+
* route (server) and the composer's client-side pre-validation (browser) —
|
|
4
|
+
* both sides must agree on what counts as binary before a byte ever leaves
|
|
5
|
+
* the client. Extension-based allowlists lie (a renamed `.docx`, a PNG saved
|
|
6
|
+
* as `.txt`), so classification reads the actual bytes: a magic-byte table
|
|
7
|
+
* for common binary formats first, then a UTF-8 decode attempt for
|
|
8
|
+
* everything else. Two families need more than a fixed-offset signature and
|
|
9
|
+
* get a reader of their own — ISO-BMFF brands (`sniffFtyp`) and OOXML Office
|
|
10
|
+
* packages, whose PKZIP container is shared with every other `.zip`
|
|
11
|
+
* (`sniffOoxml`).
|
|
12
|
+
*
|
|
13
|
+
* Lifted near-verbatim from gtm-agent's `src/lib/binary-sniff.ts` (the
|
|
14
|
+
* source PRs hardened this against real corruption/gate bugs: gtm#584,
|
|
15
|
+
* gtm#592). Import-free by design — `/web-react` re-exports `/chat-routes`
|
|
16
|
+
* modules into browser bundles (`tests/browser-safe-subpaths.test.ts` walks
|
|
17
|
+
* the graph), so nothing here may reach a Node builtin or an engine package.
|
|
18
|
+
*/
|
|
19
|
+
export interface SniffResult {
|
|
20
|
+
binary: boolean;
|
|
21
|
+
mime: string | null;
|
|
22
|
+
}
|
|
23
|
+
/** Sniffed mime for a Word OOXML package (`.docx`). */
|
|
24
|
+
export declare const OOXML_WORD_MIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
25
|
+
/** Sniffed mime for an Excel OOXML package (`.xlsx`). */
|
|
26
|
+
export declare const OOXML_SPREADSHEET_MIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
27
|
+
/** Sniffed mime for a PowerPoint OOXML package (`.pptx`). */
|
|
28
|
+
export declare const OOXML_PRESENTATION_MIME = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
29
|
+
/** Sniffed mime for a macro-enabled Word package (`.docm`). Reported
|
|
30
|
+
* separately from {@link OOXML_WORD_MIME} so a package carrying a VBA project
|
|
31
|
+
* can never be admitted under the plain-document mime: a route that wants
|
|
32
|
+
* macro-enabled files opts in explicitly through its allowed-mime seam. */
|
|
33
|
+
export declare const OOXML_WORD_MACRO_ENABLED_MIME = "application/vnd.ms-word.document.macroEnabled.12";
|
|
34
|
+
/** Sniffed mime for a macro-enabled Excel package (`.xlsm`). */
|
|
35
|
+
export declare const OOXML_SPREADSHEET_MACRO_ENABLED_MIME = "application/vnd.ms-excel.sheet.macroEnabled.12";
|
|
36
|
+
/** Sniffed mime for a macro-enabled PowerPoint package (`.pptm`). */
|
|
37
|
+
export declare const OOXML_PRESENTATION_MACRO_ENABLED_MIME = "application/vnd.ms-powerpoint.presentation.macroEnabled.12";
|
|
38
|
+
/** Decide whether uploaded bytes are binary or text, and identify the mime
|
|
39
|
+
* type when it can be determined from content. Magic bytes are checked
|
|
40
|
+
* first; anything unmatched falls back to a fatal UTF-8 decode. A NUL byte
|
|
41
|
+
* or a decode failure means binary. Valid UTF-8 that is an SVG document is
|
|
42
|
+
* binary (byte-identity matters for image tooling). Content that matches
|
|
43
|
+
* nothing and does not decode as text is binary with an unknown mime —
|
|
44
|
+
* extension-based guessing happens at the call site, not here. */
|
|
45
|
+
export declare function sniffBinary(bytes: Uint8Array): SniffResult;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recover a detached Sandbox turn from its durable completed records.
|
|
3
|
+
*
|
|
4
|
+
* A fast detached run can finish before the live event subscriber receives
|
|
5
|
+
* every message-part event. The Sandbox still retains two exact records: a
|
|
6
|
+
* turn-id keyed result cache and the completed assistant message on the
|
|
7
|
+
* session. This adapter joins them without guessing across turns, then returns
|
|
8
|
+
* the same `DetachedTurnFinal` shape `runDetachedTurn` already consumes.
|
|
9
|
+
*/
|
|
10
|
+
import type { SandboxInstance } from '@tangle-network/sandbox';
|
|
11
|
+
import type { DetachedTurnFinal } from './detached-turn';
|
|
12
|
+
/** The official Sandbox methods needed for completed-turn recovery. */
|
|
13
|
+
export type CompletedSandboxTurnSource = Pick<SandboxInstance, 'findCompletedTurn' | 'session'>;
|
|
14
|
+
/** Options for resolving one exact detached turn. */
|
|
15
|
+
export interface ReadCompletedSandboxTurnOptions {
|
|
16
|
+
turnId: string;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
log?: (message: string, meta?: Record<string, unknown>) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Read the exact completed turn. The session-level result is consulted only
|
|
22
|
+
* when the matching completed assistant message is still the latest message;
|
|
23
|
+
* otherwise that result could belong to a newer turn on the same session.
|
|
24
|
+
*/
|
|
25
|
+
export declare function readCompletedSandboxTurn(box: CompletedSandboxTurnSource, options: ReadCompletedSandboxTurnOptions): Promise<DetachedTurnFinal | null>;
|