@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,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detached (autonomous) turn → live buffer bridge.
|
|
3
|
+
*
|
|
4
|
+
* The interactive lane (`createChatTurnRoutes`) already streams a user-typed
|
|
5
|
+
* turn to the browser while it runs. An AUTONOMOUS turn — a mission step, a
|
|
6
|
+
* queue job, an inbound-email review — runs detached (`dispatchPrompt`/
|
|
7
|
+
* `streamPrompt` server-side so it survives no one watching) and, historically,
|
|
8
|
+
* only persisted its FINAL message. A browser opening the session mid-run saw a
|
|
9
|
+
* dead screen: the live tokens existed server-side but were never written to
|
|
10
|
+
* the turn-event buffer the client re-attach path (`listRunning` + `/replay`)
|
|
11
|
+
* reads.
|
|
12
|
+
*
|
|
13
|
+
* `runDetachedTurn` is that missing bridge, packaged. It taps the same buffer
|
|
14
|
+
* the interactive lane uses (`createBufferedTurnTap`) with the same producer
|
|
15
|
+
* mapping (`createSandboxChatProducer`), so an autonomous run is watchable
|
|
16
|
+
* token-by-token exactly like an interactive one — while staying durable
|
|
17
|
+
* (a durable driver re-invokes it after a crash; a turn that finished
|
|
18
|
+
* server-side short-circuits instead of re-streaming). Products supply only the
|
|
19
|
+
* domain seams: the raw sandbox event stream, the turn store, and the ids.
|
|
20
|
+
*
|
|
21
|
+
* This is app-shell mechanism (turn durability + live projection), not engine:
|
|
22
|
+
* it owns no loop logic and imports no SDK — the event source is an injected
|
|
23
|
+
* `AsyncIterable`.
|
|
24
|
+
*/
|
|
25
|
+
import type { ModelFailoverAttempt } from '../model-resolution/failover';
|
|
26
|
+
import { type TurnEventStore } from '../stream/index';
|
|
27
|
+
import { type AssistantDraftStore, type DraftPersistenceTuning } from './draft-persistence';
|
|
28
|
+
import { type SandboxChatProducerOptions } from './sandbox-producer';
|
|
29
|
+
import type { ChatTurnUsage } from './turn-routes';
|
|
30
|
+
/** The normalized structured message body (tool-call / file / plan / interaction
|
|
31
|
+
* parts) that `/chat-store` persists as the durable assistant row — the same
|
|
32
|
+
* shape `createSandboxChatProducer().assistantParts()` returns. */
|
|
33
|
+
export type DetachedTurnParts = Array<Record<string, unknown>>;
|
|
34
|
+
/** Authoritative final receipt for a turn that finished server-side, or whose
|
|
35
|
+
* live stream carried no usage (some harness paths only expose tokens via the
|
|
36
|
+
* completed-turn record, e.g. `box.findCompletedTurn(turnId)`). */
|
|
37
|
+
export interface DetachedTurnFinal {
|
|
38
|
+
text?: string;
|
|
39
|
+
usage?: ChatTurnUsage;
|
|
40
|
+
/** The structured parts to persist when this receipt is more complete than
|
|
41
|
+
* the live stream (cached, finished server-side, or a fast stream that
|
|
42
|
+
* delivered scalar text before its message-part events). Omitted when the
|
|
43
|
+
* record only carries a usage receipt. */
|
|
44
|
+
parts?: DetachedTurnParts;
|
|
45
|
+
}
|
|
46
|
+
/** Define options for managing and projecting a detached turn event stream in a session */
|
|
47
|
+
export interface DetachedTurnOptions {
|
|
48
|
+
store: TurnEventStore;
|
|
49
|
+
turnId: string;
|
|
50
|
+
/** Thread/session id — recorded as the buffer scope so a browser opening the
|
|
51
|
+
* session mid-run rediscovers this turn via `listRunning(scopeId)` after it
|
|
52
|
+
* has lost the turnId. */
|
|
53
|
+
scopeId: string;
|
|
54
|
+
/** The raw sandbox event stream for this turn (e.g. `streamSandboxPrompt`).
|
|
55
|
+
* Ownership of the box, prompt, tooling, and attachments stays with the
|
|
56
|
+
* caller — this only projects the stream.
|
|
57
|
+
*
|
|
58
|
+
* An already-open stream is bound to one model and cannot fail over. Prefer
|
|
59
|
+
* {@link openEvents}; exactly one of the two is required. */
|
|
60
|
+
events?: AsyncIterable<unknown>;
|
|
61
|
+
/** Open the raw sandbox stream FOR A GIVEN MODEL — the failover-capable form
|
|
62
|
+
* of {@link events}. Wiring it turns failover on with no further flag
|
|
63
|
+
* whenever {@link fallbackModels} is non-empty. Requires {@link model}.
|
|
64
|
+
*
|
|
65
|
+
* An autonomous run is the case that most needs this: nobody is watching to
|
|
66
|
+
* notice a dead upstream and retry by hand, so without failover the mission
|
|
67
|
+
* step or queue job simply fails. Forwarded to the producer. */
|
|
68
|
+
openEvents?: SandboxChatProducerOptions['openEvents'];
|
|
69
|
+
/** Models to try, in order, when `model`'s upstream is dead. Product config —
|
|
70
|
+
* see the producer's note on why a same-family fallback is not automatically
|
|
71
|
+
* safe and why every fallback is surfaced. */
|
|
72
|
+
fallbackModels?: SandboxChatProducerOptions['fallbackModels'];
|
|
73
|
+
/** Opt out of failover while still using {@link openEvents}. */
|
|
74
|
+
modelFailover?: false;
|
|
75
|
+
/** Maximum time to open/start one model event source through its first event.
|
|
76
|
+
* Forwarded to the producer; default 120 seconds. */
|
|
77
|
+
openTimeoutMs?: SandboxChatProducerOptions['openTimeoutMs'];
|
|
78
|
+
/** Hard deadline after the source's first lifecycle event for the first
|
|
79
|
+
* answer-bearing event. Forwarded to the producer; default 60 seconds. */
|
|
80
|
+
firstResponseTimeoutMs?: SandboxChatProducerOptions['firstResponseTimeoutMs'];
|
|
81
|
+
/** Fired when a model is abandoned mid-chain (telemetry/alerting). */
|
|
82
|
+
onModelFallback?: SandboxChatProducerOptions['onModelFallback'];
|
|
83
|
+
/** The PREFERRED model. Recorded on the persisted assistant message + usage
|
|
84
|
+
* receipt — unless failover moved the turn, in which case the model that
|
|
85
|
+
* actually served is recorded instead and surfaced on the result. */
|
|
86
|
+
model?: string;
|
|
87
|
+
/** Per-flush buffer coalescer. Default `coalesceDeltas`. */
|
|
88
|
+
coalesce?: (events: unknown[]) => unknown[];
|
|
89
|
+
/** Which ask kinds the product renders a card for; anything else is
|
|
90
|
+
* auto-declined via {@link declineInteraction}. Forwarded to the producer. */
|
|
91
|
+
isRenderableInteraction?: SandboxChatProducerOptions['isRenderableInteraction'];
|
|
92
|
+
/** Resolve a non-renderable ask so the run never hangs in the broker. An
|
|
93
|
+
* autonomous turn has NO human watching to answer an ask, so a caller that
|
|
94
|
+
* omits this risks the run blocking until the broker times out — wire it for
|
|
95
|
+
* any unattended run. Forwarded to the producer. */
|
|
96
|
+
declineInteraction?: SandboxChatProducerOptions['declineInteraction'];
|
|
97
|
+
/** Opt-in eager promotion of harness-emitted `file` parts. Forwarded to the
|
|
98
|
+
* producer (see its docs). */
|
|
99
|
+
promoteFilePart?: SandboxChatProducerOptions['promoteFilePart'];
|
|
100
|
+
/** Authoritative final receipt, consulted whenever a re-invoke finds a prior
|
|
101
|
+
* buffer: (a) an already-`complete` turn returns it as the cached result,
|
|
102
|
+
* (b) a `running` turn (crash mid-run) uses it to detect a run that finished
|
|
103
|
+
* server-side, and (c) a clean run whose stream carried no usage or only
|
|
104
|
+
* scalar text falls back to it. For Sandbox runs, use
|
|
105
|
+
* `readCompletedSandboxTurn` so the exact completed session message
|
|
106
|
+
* restores tool/file parts as well as text. */
|
|
107
|
+
completedResult?: () => Promise<DetachedTurnFinal | null | undefined>;
|
|
108
|
+
/** Clear the prior partial buffer for `turnId` before a genuine re-stream.
|
|
109
|
+
* A crash mid-run leaves buffered rows at seqs 1..N with status `running`;
|
|
110
|
+
* re-streaming restarts the tap's seq at 0 and would duplicate/interleave
|
|
111
|
+
* rows. Wire this (delete `turnId`'s buffered events) so a retry is clean.
|
|
112
|
+
* Unset, a re-stream over a `running` buffer is still attempted but logged
|
|
113
|
+
* as a possible-duplication hazard. */
|
|
114
|
+
resetBuffer?: (turnId: string) => Promise<void>;
|
|
115
|
+
/** Own the durable assistant row for this turn instead of returning the body
|
|
116
|
+
* for the caller to insert — and keep it in step with the stream.
|
|
117
|
+
*
|
|
118
|
+
* An autonomous run is exactly the case a late viewer hits: nobody is
|
|
119
|
+
* watching when it starts, so by the time a browser opens the session the
|
|
120
|
+
* streaming gateway's hot event buffer may already have expired it. Keeping
|
|
121
|
+
* that buffer short is what makes it affordable at scale (its Redis
|
|
122
|
+
* footprint is linear in `ttl x concurrent sessions`), so the durable row —
|
|
123
|
+
* written incrementally here — is what serves the late viewer.
|
|
124
|
+
*
|
|
125
|
+
* WIRING THIS TRANSFERS ROW OWNERSHIP: the returned {@link
|
|
126
|
+
* DetachedTurnResult.messageId} names the row this call wrote (draft rows
|
|
127
|
+
* during the stream, authoritative values at the end, retraction when the
|
|
128
|
+
* turn produced nothing). The caller must NOT insert its own assistant row
|
|
129
|
+
* for the turn. Omit the seam and nothing changes — the result is returned
|
|
130
|
+
* and the caller persists it exactly as today.
|
|
131
|
+
*
|
|
132
|
+
* Idempotency reuses the turn's own identity: the row id defaults to
|
|
133
|
+
* `assistant:<turnId>`, so a durable driver re-invoking after a crash
|
|
134
|
+
* patches the same row instead of duplicating parts. */
|
|
135
|
+
persist?: DraftPersistenceTuning & {
|
|
136
|
+
store: AssistantDraftStore;
|
|
137
|
+
threadId: string;
|
|
138
|
+
/** Deterministic row id. Default `assistant:<turnId>`. */
|
|
139
|
+
messageId?: string;
|
|
140
|
+
/** Pre-persist text transform (`/redact`), applied to drafts AND the final
|
|
141
|
+
* write — parity with the interactive lane's `transformFinalText`. */
|
|
142
|
+
transformText?: (text: string) => string | Promise<string>;
|
|
143
|
+
};
|
|
144
|
+
log?: (message: string, meta?: Record<string, unknown>) => void;
|
|
145
|
+
}
|
|
146
|
+
/** Describe the result of a detached turn including state, text, parts, usage, and optional error or cache flag */
|
|
147
|
+
export interface DetachedTurnResult {
|
|
148
|
+
/** `completed` — clean drain: persist + bill. `failed` — a terminal error
|
|
149
|
+
* event, including the producer's structured `sandbox.stream_failed` event
|
|
150
|
+
* when the raw sandbox stream throws: skip billing, render an error row. */
|
|
151
|
+
state: 'completed' | 'failed';
|
|
152
|
+
text: string;
|
|
153
|
+
/** The structured assistant body to persist (tool calls, file/plan/interaction
|
|
154
|
+
* parts). Empty array when the run produced none. */
|
|
155
|
+
parts: DetachedTurnParts;
|
|
156
|
+
usage: ChatTurnUsage;
|
|
157
|
+
/** Present when `state === 'failed'`. */
|
|
158
|
+
error?: string;
|
|
159
|
+
/** True when a prior buffer meant this call returned a cached/finished result
|
|
160
|
+
* WITHOUT re-streaming (durable-driver retry after a crash). */
|
|
161
|
+
cached: boolean;
|
|
162
|
+
/** The durable assistant row this call wrote, when `persist` was wired.
|
|
163
|
+
* `null` when the turn produced nothing and the row was retracted. Absent
|
|
164
|
+
* when the caller owns persistence (today's behavior). */
|
|
165
|
+
messageId?: string | null;
|
|
166
|
+
/** The model that SERVED the turn — the fallback's id when failover moved it.
|
|
167
|
+
* A caller that bills or scores per model must read this, not the model it
|
|
168
|
+
* requested. */
|
|
169
|
+
model?: string;
|
|
170
|
+
/** The caller's explicit model request, before shell failover. */
|
|
171
|
+
requestedModel?: string;
|
|
172
|
+
/** The effective model echoed by the downstream sandbox. */
|
|
173
|
+
servedModel?: string;
|
|
174
|
+
/** The effective provider echoed by the downstream sandbox. */
|
|
175
|
+
servedProvider?: string;
|
|
176
|
+
/** How the downstream sandbox selected the effective model. */
|
|
177
|
+
servedSource?: 'request' | 'environment' | 'profile';
|
|
178
|
+
/** True when the preferred model did not serve. Makes an autonomous
|
|
179
|
+
* downgrade — which no human watched happen — attributable after the fact. */
|
|
180
|
+
usedModelFallback?: boolean;
|
|
181
|
+
/** Every model tried, in order, with the reason each was abandoned. */
|
|
182
|
+
modelAttempts?: ModelFailoverAttempt[];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Stream a detached turn into the live turn-event buffer, durably.
|
|
186
|
+
*
|
|
187
|
+
* - Idempotent: an already-`complete` turn returns the cached result without
|
|
188
|
+
* re-streaming (a second event sequence would collide with the buffered one).
|
|
189
|
+
* - Crash-safe: a `running` turn (a prior attempt crashed mid-tap) consults
|
|
190
|
+
* `completedResult` to detect a run that finished server-side; only a run that
|
|
191
|
+
* genuinely did not complete is re-streamed, and then over a `resetBuffer`-
|
|
192
|
+
* cleared buffer so seqs don't corrupt.
|
|
193
|
+
* - Marks the turn `running` under `scopeId` so a mid-run browser finds it.
|
|
194
|
+
* - Settles `complete`/`error` so the client stops tailing and billing/render
|
|
195
|
+
* can branch on `state`.
|
|
196
|
+
*/
|
|
197
|
+
export declare function runDetachedTurn(opts: DetachedTurnOptions): Promise<DetachedTurnResult>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `buildDispatchParts` — assemble the `PromptInputPart[]` a turn carrying
|
|
3
|
+
* attachments and/or `@`-mentions dispatches to the sandbox. `parts[0]` is
|
|
4
|
+
* always the full prompt text (typed text plus the attachment + mention pointer
|
|
5
|
+
* blocks); each attachment or mention becomes one media part. An attachment
|
|
6
|
+
* (read from the product store via the injected reader) draws the inline byte
|
|
7
|
+
* budget first; a mention (read from the LIVE box) takes what is left. A file
|
|
8
|
+
* inlines as a `data:` URI when it fits the remaining budget, otherwise uses
|
|
9
|
+
* the in-box file reference supported by the current sandbox prompt contract.
|
|
10
|
+
* Every media part is deduped by its resolved absolute path. This module only
|
|
11
|
+
* produces the parts array; the caller decides when a turn dispatches parts
|
|
12
|
+
* instead of a plain string.
|
|
13
|
+
*
|
|
14
|
+
* Storage-parameterized port of gtm-agent's `dispatch-parts.ts`: the vault
|
|
15
|
+
* default reader is dropped (`readAttachment` is REQUIRED — the product supplies
|
|
16
|
+
* its store adapter), the `GTM_SANDBOX_VAULT_DIR` prefixing becomes the required
|
|
17
|
+
* `resolveAttachmentPath` seam, the `GTM_MULTIMODAL_FORCE_PATH` env fallback
|
|
18
|
+
* becomes an explicit `forcePath` flag, and every budget cap reads an overridable
|
|
19
|
+
* `./wire` constant. Kept behavior-identical for gtm-agent#618 adoption (the
|
|
20
|
+
* demotion math and emitted part shapes reproduce its dispatched prompt bytes).
|
|
21
|
+
*/
|
|
22
|
+
import { type PromptInputPart } from '../sandbox';
|
|
23
|
+
import { type SandboxExecChannel } from '../sandbox/binary-read';
|
|
24
|
+
import { type ChatTurnPartInput } from './wire';
|
|
25
|
+
import type { ChatAttachmentPart, ChatMentionPart } from '../chat-store/parts';
|
|
26
|
+
import type { ReadAttachmentFn } from './attachment-store';
|
|
27
|
+
export type { PromptInputPart };
|
|
28
|
+
/** Resolve the outcome of dispatching parts with success status and corresponding value or error message */
|
|
29
|
+
export type DispatchPartsOutcome = {
|
|
30
|
+
succeeded: true;
|
|
31
|
+
value: PromptInputPart[];
|
|
32
|
+
} | {
|
|
33
|
+
succeeded: false;
|
|
34
|
+
error: string;
|
|
35
|
+
};
|
|
36
|
+
/** One mention file's size (always) and inline bytes (only when the caller
|
|
37
|
+
* asked for them — a path-only mention never reads its bytes). */
|
|
38
|
+
type SandboxMentionReadOutcome = {
|
|
39
|
+
succeeded: true;
|
|
40
|
+
value: {
|
|
41
|
+
size: number;
|
|
42
|
+
base64?: string;
|
|
43
|
+
};
|
|
44
|
+
} | {
|
|
45
|
+
succeeded: false;
|
|
46
|
+
error: string;
|
|
47
|
+
};
|
|
48
|
+
/** Resolve sandbox mention details by reading from a specified path with optional byte reading */
|
|
49
|
+
export type ReadSandboxMentionFn = (box: SandboxExecChannel, absolutePath: string, options: {
|
|
50
|
+
readBytes: boolean;
|
|
51
|
+
}) => Promise<SandboxMentionReadOutcome>;
|
|
52
|
+
/**
|
|
53
|
+
* Convert the browser-safe chat attachment contract into the current sandbox
|
|
54
|
+
* prompt contract. Images carry exactly one URL or path; generic files carry a
|
|
55
|
+
* filename and URL.
|
|
56
|
+
*/
|
|
57
|
+
export declare function normalizeChatPromptForSandbox(prompt: string | readonly ChatTurnPartInput[]): string | PromptInputPart[];
|
|
58
|
+
/** Build input parameters for dispatching chat message parts including text, attachments, mentions, and history */
|
|
59
|
+
export interface BuildDispatchPartsInput {
|
|
60
|
+
text: string;
|
|
61
|
+
attachments: ChatAttachmentPart[];
|
|
62
|
+
mentions?: ChatMentionPart[];
|
|
63
|
+
history: Array<{
|
|
64
|
+
role: 'user' | 'assistant';
|
|
65
|
+
content: string;
|
|
66
|
+
}>;
|
|
67
|
+
systemPrompt: string;
|
|
68
|
+
/** Serialized size of the backend profile the SDK inlines into the same
|
|
69
|
+
* prompt request body — a large, non-negotiable rider that must come out of
|
|
70
|
+
* the inline budget or near-cap attachments 413 at the proxy instead of
|
|
71
|
+
* demoting to path parts. */
|
|
72
|
+
profileWireBytes: number;
|
|
73
|
+
/** The product's workspace/tenant key, passed to `readAttachment`. */
|
|
74
|
+
scopeId: string;
|
|
75
|
+
/** Maps an attachment's store-relative path to the in-box absolute path a
|
|
76
|
+
* local media reference uses (same style as `fileMentionsToParts`'s
|
|
77
|
+
* `resolvePath`). */
|
|
78
|
+
resolveAttachmentPath: (path: string) => string;
|
|
79
|
+
/** Maps a mention's workspace-relative path to its in-box absolute path.
|
|
80
|
+
* Default: {@link BuildDispatchPartsInput.resolveAttachmentPath} — in gtm the
|
|
81
|
+
* vault mount roots both; a product that mounts them apart overrides this. */
|
|
82
|
+
resolveMentionPath?: (path: string) => string;
|
|
83
|
+
/** The turn's already-ensured box — required when `mentions` is non-empty
|
|
84
|
+
* (mention bytes are read from the live box, not the store). */
|
|
85
|
+
box?: SandboxExecChannel;
|
|
86
|
+
/** Force every media part to a local file reference, skipping all inlining. */
|
|
87
|
+
forcePath?: boolean;
|
|
88
|
+
/** REQUIRED store reader for attachment content — no default (the product
|
|
89
|
+
* owns its store; see {@link ReadAttachmentFn}). */
|
|
90
|
+
readAttachment: ReadAttachmentFn;
|
|
91
|
+
readSandboxMention?: ReadSandboxMentionFn;
|
|
92
|
+
/** Whole-request proxy cap. Default {@link DISPATCH_REQUEST_MAX_BYTES}. */
|
|
93
|
+
requestMaxBytes?: number;
|
|
94
|
+
/** JSON-envelope reserve off the top of the request cap. Default
|
|
95
|
+
* {@link DISPATCH_STRUCTURAL_RESERVE_BYTES}. */
|
|
96
|
+
structuralReserveBytes?: number;
|
|
97
|
+
/** Sidecar per-request parts-array cap. Default {@link DISPATCH_MAX_PARTS}. */
|
|
98
|
+
maxParts?: number;
|
|
99
|
+
}
|
|
100
|
+
/** Build dispatch parts from input by resolving mentions, paths, and applying size constraints asynchronously */
|
|
101
|
+
export declare function buildDispatchParts(input: BuildDispatchPartsInput): Promise<DispatchPartsOutcome>;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental ("draft") persistence of the assistant row WHILE a turn streams.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists — the scale argument, not a convenience:
|
|
5
|
+
*
|
|
6
|
+
* A live turn is readable from two places. The hot path is the session
|
|
7
|
+
* gateway's in-memory/Redis event buffer, which exists so a viewer survives a
|
|
8
|
+
* network blip: it is keyed one sorted set per session, refreshed on every
|
|
9
|
+
* push, and expires on a TTL. Its memory cost is `arrival_rate x TTL x
|
|
10
|
+
* bytes_per_session` — strictly LINEAR in the TTL. Stretching that TTL to
|
|
11
|
+
* cover "a viewer who opens the tab later" is a category error: it buys memory
|
|
12
|
+
* proportional to the increase and still serves nothing to a viewer who
|
|
13
|
+
* arrives past the new horizon.
|
|
14
|
+
*
|
|
15
|
+
* So the hot buffer must stay SHORT (live delivery + reconnect only), and
|
|
16
|
+
* durable storage must serve history. That only works if durable storage
|
|
17
|
+
* actually HAS the in-flight turn — which, before this module, it did not: the
|
|
18
|
+
* assistant row was written once, after the stream drained. A viewer arriving
|
|
19
|
+
* mid-turn past the hot window read an empty transcript.
|
|
20
|
+
*
|
|
21
|
+
* This module closes that gap: the assistant row is inserted early and patched
|
|
22
|
+
* on a coalesced cadence, so the durable transcript is at most one interval
|
|
23
|
+
* (default 2 s) behind the live stream and the hot buffer never has to be the
|
|
24
|
+
* history tier.
|
|
25
|
+
*
|
|
26
|
+
* Mechanism only. It owns no vocabulary: the caller supplies the snapshot
|
|
27
|
+
* function, the store, and the deterministic row id.
|
|
28
|
+
*
|
|
29
|
+
* Four properties the cadence guarantees:
|
|
30
|
+
* - **Time-floored.** At most one write per `intervalMs`, never one per token.
|
|
31
|
+
* - **Dirty-gated.** Only content-bearing events arm a write; heartbeats,
|
|
32
|
+
* status pings, and lifecycle envelopes never do.
|
|
33
|
+
* - **Single-flight.** A write already in flight suppresses the next trigger
|
|
34
|
+
* instead of queueing; the final write is authoritative regardless of how
|
|
35
|
+
* many drafts landed.
|
|
36
|
+
* - **Best-effort.** A store failure is logged and swallowed — a durability
|
|
37
|
+
* optimization must never kill a healthy stream (the same rule
|
|
38
|
+
* `withDurableChatProjection` already states).
|
|
39
|
+
*/
|
|
40
|
+
import { type ChatMessagePart } from '../chat-store/parts';
|
|
41
|
+
import type { ChatTurnUsage } from './turn-routes';
|
|
42
|
+
/** Message row shape the writer reads back when re-entering a turn. */
|
|
43
|
+
export interface DraftStoredMessage {
|
|
44
|
+
id: string;
|
|
45
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
46
|
+
content: string;
|
|
47
|
+
parts?: ChatMessagePart[] | null;
|
|
48
|
+
model?: string | null;
|
|
49
|
+
requestedModel?: string | null;
|
|
50
|
+
servedModel?: string | null;
|
|
51
|
+
servedProvider?: string | null;
|
|
52
|
+
servedSource?: string | null;
|
|
53
|
+
}
|
|
54
|
+
/** Values written to the assistant row — the intersection of the append and
|
|
55
|
+
* patch shapes, so one snapshot serves both. */
|
|
56
|
+
export interface AssistantRowValues {
|
|
57
|
+
content: string;
|
|
58
|
+
parts?: ChatMessagePart[];
|
|
59
|
+
model?: string | null;
|
|
60
|
+
requestedModel?: string | null;
|
|
61
|
+
servedModel?: string | null;
|
|
62
|
+
servedProvider?: string | null;
|
|
63
|
+
servedSource?: string | null;
|
|
64
|
+
inputTokens?: number | null;
|
|
65
|
+
outputTokens?: number | null;
|
|
66
|
+
reasoningTokens?: number | null;
|
|
67
|
+
cacheReadTokens?: number | null;
|
|
68
|
+
cacheWriteTokens?: number | null;
|
|
69
|
+
costUsd?: number | null;
|
|
70
|
+
}
|
|
71
|
+
/** The store capability incremental persistence needs on top of
|
|
72
|
+
* `appendMessage`. A store without `updateMessage` cannot patch a row, so it
|
|
73
|
+
* cannot draft at all — the caller keeps today's single-write behavior. */
|
|
74
|
+
export interface AssistantDraftStore {
|
|
75
|
+
listMessages(threadId: string): Promise<DraftStoredMessage[]>;
|
|
76
|
+
appendMessage(input: AssistantRowValues & {
|
|
77
|
+
id?: string;
|
|
78
|
+
threadId: string;
|
|
79
|
+
role: 'user' | 'assistant';
|
|
80
|
+
}): Promise<unknown>;
|
|
81
|
+
updateMessage?(id: string, patch: AssistantRowValues): Promise<unknown>;
|
|
82
|
+
deleteMessage?(id: string): Promise<unknown>;
|
|
83
|
+
}
|
|
84
|
+
/** Live snapshot of the assistant body, taken from the producer's own
|
|
85
|
+
* accumulators. `parts` is the DRAFT projection (`draftParts()`), never the
|
|
86
|
+
* finalized one — see `draftAssistantParts`. */
|
|
87
|
+
export interface AssistantDraftSnapshot {
|
|
88
|
+
content: string;
|
|
89
|
+
parts?: Array<Record<string, unknown>>;
|
|
90
|
+
usage?: ChatTurnUsage;
|
|
91
|
+
model?: string;
|
|
92
|
+
}
|
|
93
|
+
/** Product-tunable cadence. Defaults are stated on each field; a product with
|
|
94
|
+
* a chattier or heavier workload moves them without forking the writer. */
|
|
95
|
+
export interface DraftPersistenceTuning {
|
|
96
|
+
/** Minimum wall-clock gap between draft writes, in ms. Default 2000.
|
|
97
|
+
*
|
|
98
|
+
* Justification for 2 s, from a measured tool-heavy production run (517
|
|
99
|
+
* stream events over ~90 s wall = ~5.7 events/s): a 2 s floor with the
|
|
100
|
+
* dirty gate turns 517 candidate writes into <= 45, while leaving the
|
|
101
|
+
* durable row at most 2 s stale — an order of magnitude below the time it
|
|
102
|
+
* takes a viewer to open a tab and render, so a late viewer never perceives
|
|
103
|
+
* the lag. Fleet arithmetic at 10k concurrent 60 s runs: <= 30 updates per
|
|
104
|
+
* run x 167 run-starts/s = ~334 row-updates/s spread over per-tenant
|
|
105
|
+
* shards. Lower it and write amplification grows with no perceptible
|
|
106
|
+
* freshness gain; raise it past ~5 s and a late viewer starts seeing a
|
|
107
|
+
* visibly truncated answer. */
|
|
108
|
+
intervalMs?: number;
|
|
109
|
+
/** Serialized-parts size (bytes) past which the interval backs off, so a
|
|
110
|
+
* turn accumulating a megabyte-scale `parts` blob does not rewrite it every
|
|
111
|
+
* interval. Default 262144 (256 KiB) -> interval x 2.5; ten times that ->
|
|
112
|
+
* interval x 5. The final write is never throttled. */
|
|
113
|
+
backoffBytes?: number;
|
|
114
|
+
/** Per-tool-part output cap applied to DRAFTS ONLY (bytes). A tool returning
|
|
115
|
+
* a large blob would otherwise be rewritten in full on every draft. The
|
|
116
|
+
* final write always carries the untruncated value. Default 32768 (32 KiB);
|
|
117
|
+
* 0 disables truncation. */
|
|
118
|
+
maxDraftToolOutputBytes?: number;
|
|
119
|
+
}
|
|
120
|
+
/** Define the inputs required to construct an assistant draft writer */
|
|
121
|
+
export interface AssistantDraftWriterOptions extends DraftPersistenceTuning {
|
|
122
|
+
store: AssistantDraftStore;
|
|
123
|
+
threadId: string;
|
|
124
|
+
/** DETERMINISTIC row id for this turn's assistant message — the whole
|
|
125
|
+
* idempotency mechanism. Derived from the turn's existing identity
|
|
126
|
+
* (`deriveExecutionId` in the interactive lane, the turn id in the detached
|
|
127
|
+
* lane), so a re-entered turn addresses the SAME row: the writer looks the
|
|
128
|
+
* id up before its first insert and patches what it finds. */
|
|
129
|
+
messageId: string;
|
|
130
|
+
/** Read the producer's live accumulators. Returns null before the producer
|
|
131
|
+
* is resolved (the assembly defers box resolution into the first pull). */
|
|
132
|
+
snapshot(): AssistantDraftSnapshot | null;
|
|
133
|
+
/** Pre-persist text transform (`/redact`'s `redactPII`). Applied to the
|
|
134
|
+
* draft's scalar content AND every draft text part — parity with the final
|
|
135
|
+
* write, or incremental persistence would re-open the at-rest PII leak that
|
|
136
|
+
* transform closed, just seconds earlier and on every turn. */
|
|
137
|
+
transformText?(text: string): string | Promise<string>;
|
|
138
|
+
log?: (message: string, meta?: Record<string, unknown>) => void;
|
|
139
|
+
}
|
|
140
|
+
/** Coalescing writer that keeps one durable assistant row in step with a
|
|
141
|
+
* streaming turn. Created per turn; not reusable. */
|
|
142
|
+
export interface AssistantDraftWriter {
|
|
143
|
+
/** Arm/trigger a draft write from one engine event. Synchronous by design —
|
|
144
|
+
* the write itself is fire-and-forget so the stream is never blocked on
|
|
145
|
+
* store latency. */
|
|
146
|
+
notify(event: {
|
|
147
|
+
type?: unknown;
|
|
148
|
+
}): void;
|
|
149
|
+
/** Stop drafting and settle any in-flight write. Called before the final
|
|
150
|
+
* write so a late draft can never clobber the authoritative row. */
|
|
151
|
+
close(): Promise<void>;
|
|
152
|
+
/** Write the AUTHORITATIVE completion values onto this turn's row —
|
|
153
|
+
* insert-or-patch under the same deterministic id, un-throttled and
|
|
154
|
+
* un-truncated. Errors propagate: the final write is the one that must not
|
|
155
|
+
* fail silently. Implies {@link close}. */
|
|
156
|
+
finalize(values: AssistantRowValues): Promise<void>;
|
|
157
|
+
/** The durable row this turn is writing, once one exists. */
|
|
158
|
+
rowId(): string | undefined;
|
|
159
|
+
/** Retract the row for a turn that produced nothing (mirrors the final
|
|
160
|
+
* write's empty-turn skip, which leaves no row at all today). Also retracts
|
|
161
|
+
* a row a PREVIOUS attempt left behind, so a re-entered turn that ends
|
|
162
|
+
* empty converges on "no row" rather than a stale partial. */
|
|
163
|
+
discard(): Promise<void>;
|
|
164
|
+
/** Diagnostics: how many draft writes actually reached the store. */
|
|
165
|
+
writeCount(): number;
|
|
166
|
+
}
|
|
167
|
+
/** True when this event should arm a draft write. */
|
|
168
|
+
export declare function isDraftContentEvent(event: {
|
|
169
|
+
type?: unknown;
|
|
170
|
+
}): boolean;
|
|
171
|
+
/** Build the coalescing draft writer for one turn. */
|
|
172
|
+
export declare function createAssistantDraftWriter(options: AssistantDraftWriterOptions): AssistantDraftWriter;
|
|
173
|
+
/** True when a store can support incremental persistence at all. Without
|
|
174
|
+
* `updateMessage` a draft row could never be patched, so the caller keeps
|
|
175
|
+
* today's exact single-write behavior. */
|
|
176
|
+
export declare function storeSupportsDraftPersistence(store: AssistantDraftStore): boolean;
|
|
177
|
+
/** The row id an `appendMessage` actually returned, or `null` when the store
|
|
178
|
+
* returned nothing usable. `ChatTurnMessageStore.appendMessage` is typed
|
|
179
|
+
* `Promise<unknown>` so a product adapter is free to resolve `void`; every
|
|
180
|
+
* caller that wants to NAME the row it just wrote has to read defensively.
|
|
181
|
+
*
|
|
182
|
+
* Deliberately no fallback to a caller-assigned id — see `writeOnce`, which
|
|
183
|
+
* adds its own. A caller that let the store mint the id has nothing to fall
|
|
184
|
+
* back TO, and guessing one would report a row that may not exist. */
|
|
185
|
+
export declare function rowIdOf(inserted: unknown): string | null;
|
|
186
|
+
/** The default deterministic assistant-row id for a turn. Readable on purpose
|
|
187
|
+
* (an operator grepping a transcript row id finds the run), and stable across
|
|
188
|
+
* re-entries because every input already is. */
|
|
189
|
+
export declare function assistantRowIdForTurn(turnKey: string): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ChatTurnRouteProducer } from './turn-routes';
|
|
2
|
+
/** Resolve chat route events and materialize their durable state records */
|
|
3
|
+
export interface ChatRouteDurableProjection {
|
|
4
|
+
observe(event: unknown): void | Promise<void>;
|
|
5
|
+
materialize(): Array<Record<string, unknown>> | Promise<Array<Record<string, unknown>>>;
|
|
6
|
+
}
|
|
7
|
+
/** Log chat route projection messages with optional metadata for durable processing */
|
|
8
|
+
export type ChatRouteDurableProjectionLogger = (message: string, meta?: Record<string, unknown>) => void;
|
|
9
|
+
/** Adds durable lifecycle projection to any producer lane without moving its
|
|
10
|
+
* transport into agent-app. Purely STRUCTURAL: agent-app ships no implementer
|
|
11
|
+
* of {@link ChatRouteDurableProjection} and deliberately does not — the one it
|
|
12
|
+
* used to ship (`/durable-chat`) was removed in 0.44.0 with zero fleet imports.
|
|
13
|
+
* Pass any `{ observe, materialize }` object backed by your own store. The projection is observed inline and its
|
|
14
|
+
* materialized parts replace same-key pending snapshots after the stream
|
|
15
|
+
* drains. Projection persistence is best-effort for the live lane: a store
|
|
16
|
+
* outage must not terminate an otherwise healthy sandbox stream. Failures are
|
|
17
|
+
* reported through the optional logger so products can retain diagnostics. */
|
|
18
|
+
export declare function withDurableChatProjection(producer: ChatTurnRouteProducer, projection: ChatRouteDurableProjection, log?: ChatRouteDurableProjectionLogger): ChatTurnRouteProducer;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createSandboxFileIndexRoute` — server side of `@`-file-mentions
|
|
3
|
+
* (companion to sandbox-ui#184's composer mention primitive). Serves a flat,
|
|
4
|
+
* ignore-filtered listing of the workspace sandbox so `useFileMentions`
|
|
5
|
+
* (`/web-react`) can filter it client-side without a round trip per
|
|
6
|
+
* keystroke.
|
|
7
|
+
*
|
|
8
|
+
* Same seam style as `createUploadRoute`: `authorize({ request })` resolves a
|
|
9
|
+
* structural `{ tree(path, opts) }` handle (the shape of the sandbox SDK's
|
|
10
|
+
* `box.fs.tree`) — no SDK import here. `authorize` also carries the
|
|
11
|
+
* cold-box signal: a sandbox that isn't running yet answers `{ status:
|
|
12
|
+
* 'warming' }` directly, never provisions-and-waits inside this route.
|
|
13
|
+
*
|
|
14
|
+
* A box can also be running with its workspace root not yet materialised, which
|
|
15
|
+
* `authorize` cannot see; the route recognises that one signal off `fs.tree`
|
|
16
|
+
* and answers `warming` too, so every consumer gets the retry-and-wait state
|
|
17
|
+
* instead of a 500. Every other `tree()` failure propagates.
|
|
18
|
+
*/
|
|
19
|
+
import type { FileMention } from './wire';
|
|
20
|
+
/** One entry from a structural `tree()` scan. Mirrors the sandbox SDK's
|
|
21
|
+
* `FileTreeFile` (`path`, `size`, `mtime`) — `mtime` is unused here so it's
|
|
22
|
+
* omitted from the structural match. */
|
|
23
|
+
export interface SandboxTreeFile {
|
|
24
|
+
path: string;
|
|
25
|
+
size: number;
|
|
26
|
+
}
|
|
27
|
+
/** Structural match of the sandbox SDK's `box.fs.tree` result shape
|
|
28
|
+
* (`FileTreeResult`). `stats.truncated` is the only stat this route reads;
|
|
29
|
+
* the rest ride through unread on the real SDK type. */
|
|
30
|
+
export interface SandboxTreeResult {
|
|
31
|
+
root: string;
|
|
32
|
+
files: SandboxTreeFile[];
|
|
33
|
+
stats: {
|
|
34
|
+
truncated: boolean;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Structural match of the sandbox SDK's `box.fs` tree surface. */
|
|
38
|
+
export interface SandboxFileTreeSource {
|
|
39
|
+
tree(path: string, options?: {
|
|
40
|
+
maxDepth?: number;
|
|
41
|
+
}): Promise<SandboxTreeResult>;
|
|
42
|
+
}
|
|
43
|
+
/** Describe a ready file index response with workspace-relative entries and truncation status */
|
|
44
|
+
export interface FileIndexReadyResponse {
|
|
45
|
+
status: 'ready';
|
|
46
|
+
/** Workspace-relative entries. Same shape as `FileMention` (`./wire`) so a
|
|
47
|
+
* client can hand a response entry straight to `fileMentionsToParts` /
|
|
48
|
+
* `buildMentionPromptBlock` without remapping. */
|
|
49
|
+
files: FileMention[];
|
|
50
|
+
/** True when either the underlying scan truncated (SDK-side cap) or this
|
|
51
|
+
* route's own `maxEntries` cap trimmed the filtered list. The client
|
|
52
|
+
* should show "showing first N files" rather than imply completeness. */
|
|
53
|
+
truncated: boolean;
|
|
54
|
+
generatedAt: string;
|
|
55
|
+
}
|
|
56
|
+
/** Cold-box answer: no provisioning happened, no files were scanned. The
|
|
57
|
+
* client shows a warming state and retries — this route never blocks on a
|
|
58
|
+
* box coming up. Two situations produce it: `authorize` reporting a box that
|
|
59
|
+
* is not running, and a running box whose workspace root does not exist yet
|
|
60
|
+
* (see `isMissingRootError`). */
|
|
61
|
+
export interface FileIndexWarmingResponse {
|
|
62
|
+
status: 'warming';
|
|
63
|
+
}
|
|
64
|
+
/** Resolve a response indicating the file index is either ready or warming up */
|
|
65
|
+
export type FileIndexResponse = FileIndexReadyResponse | FileIndexWarmingResponse;
|
|
66
|
+
/** Short-TTL cache seam so repeat popover opens in the same session don't
|
|
67
|
+
* re-scan the workspace. Host-provided (e.g. a KV binding); `key` is
|
|
68
|
+
* whatever `authorize` returns as `cacheKey` — this route treats it opaquely. */
|
|
69
|
+
export interface FileIndexCache {
|
|
70
|
+
get(key: string): Promise<FileIndexReadyResponse | null> | FileIndexReadyResponse | null;
|
|
71
|
+
put(key: string, value: FileIndexReadyResponse, options?: {
|
|
72
|
+
ttlSeconds?: number;
|
|
73
|
+
}): Promise<void> | void;
|
|
74
|
+
}
|
|
75
|
+
/** Define authorization details and parameters for indexing a file workspace with optional caching and ignore rules */
|
|
76
|
+
export type FileIndexAuthorization = {
|
|
77
|
+
status: 'ready';
|
|
78
|
+
/** Structural sandbox `fs` handle, usually `ensureWorkspaceSandbox(...)` → `box.fs`. */
|
|
79
|
+
fs: SandboxFileTreeSource;
|
|
80
|
+
/** Workspace root to index (e.g. `/home/agent`). */
|
|
81
|
+
root: string;
|
|
82
|
+
/** Extra ignore segments for this request, merged with the route's
|
|
83
|
+
* defaults + `CreateSandboxFileIndexRouteOptions.ignore`. */
|
|
84
|
+
ignore?: string[];
|
|
85
|
+
/** Opaque cache key for the optional cache seam. Omit to skip caching
|
|
86
|
+
* for this request (e.g. a workspace the host chooses not to cache). */
|
|
87
|
+
cacheKey?: string;
|
|
88
|
+
} | {
|
|
89
|
+
status: 'warming';
|
|
90
|
+
} | {
|
|
91
|
+
status: 'denied';
|
|
92
|
+
response: Response;
|
|
93
|
+
};
|
|
94
|
+
/** Define options to authorize and configure sandbox file index route behavior */
|
|
95
|
+
export interface CreateSandboxFileIndexRouteOptions {
|
|
96
|
+
/** Authenticate the caller, resolve the sandbox `fs` handle, and signal a
|
|
97
|
+
* cold box — never provisions or waits. */
|
|
98
|
+
authorize(args: {
|
|
99
|
+
request: Request;
|
|
100
|
+
}): Promise<FileIndexAuthorization>;
|
|
101
|
+
/** Extra ignore segments beyond the route's defaults (node_modules, .git,
|
|
102
|
+
* dotfiles/dot-dirs, common build dirs). Matched as exact path-segment
|
|
103
|
+
* names, same rule as the defaults. */
|
|
104
|
+
ignore?: string[];
|
|
105
|
+
/** Passed to `fs.tree` as `options.maxDepth`. Default 12. */
|
|
106
|
+
maxDepth?: number;
|
|
107
|
+
/** Hard cap on entries returned after filtering. Default 5000. */
|
|
108
|
+
maxEntries?: number;
|
|
109
|
+
/** Optional host-provided cache seam. */
|
|
110
|
+
cache?: FileIndexCache;
|
|
111
|
+
/** Cache TTL in seconds when `cache` is set. Default 20. */
|
|
112
|
+
cacheTtlSeconds?: number;
|
|
113
|
+
}
|
|
114
|
+
/** Resolve a sandbox file index route with authorization, caching, and configurable depth and entries limits */
|
|
115
|
+
export declare function createSandboxFileIndexRoute(options: CreateSandboxFileIndexRouteOptions): (request: Request) => Promise<Response>;
|