@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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `inert`, across the React versions this package's peer range admits.
|
|
3
|
+
*
|
|
4
|
+
* MEASURED, not reasoned. `react` + `react-dom` 18.3.1 and 19.2.8, each
|
|
5
|
+
* rendering `<div inert={…}>x</div>` through `renderToStaticMarkup`, and the
|
|
6
|
+
* same four cases re-read as `outerHTML` after `createRoot().render` — server
|
|
7
|
+
* and client agreed on every row:
|
|
8
|
+
*
|
|
9
|
+
* | prop | React 18.3.1 | React 19.2.8 |
|
|
10
|
+
* | --------------- | ------------------------------- | ------------------------------- |
|
|
11
|
+
* | `inert={false}` | `<div>x</div>` — NO attribute | `<div>x</div>` — NO attribute |
|
|
12
|
+
* | `inert={''}` | `<div inert="">x</div>` — inert | `<div>x</div>` — NO attribute |
|
|
13
|
+
* | `inert={true}` | `<div>x</div>` — NO attribute | `<div inert="">x</div>` — inert |
|
|
14
|
+
* | `inert={'1'}` | `<div inert="1">x</div>` — inert | `<div inert="">x</div>` — inert |
|
|
15
|
+
*
|
|
16
|
+
* React 18 warns on the two it drops (`Received \`false\`/\`true\` for a
|
|
17
|
+
* non-boolean attribute \`inert\`.`); React 19 warns on the one it drops
|
|
18
|
+
* (`Received an empty string for a boolean attribute \`inert\`.`).
|
|
19
|
+
*
|
|
20
|
+
* So the FALSE case needs no help: both majors already emit nothing, and a
|
|
21
|
+
* plain `inert={!open}` binding never made an open panel inert on either. The
|
|
22
|
+
* TRUE case is the defect — `true` is dropped by 18 and `''` is dropped by 19,
|
|
23
|
+
* so a plain boolean binding leaves a COLLAPSED panel focusable and
|
|
24
|
+
* screen-reader readable on React 18, which `peerDependencies` (`react >=18`)
|
|
25
|
+
* admits.
|
|
26
|
+
*
|
|
27
|
+
* The last row is the answer, and it is why this file no longer detects
|
|
28
|
+
* anything. `inert` is an HTML boolean attribute: its PRESENCE is what makes an
|
|
29
|
+
* element inert, whatever the value reads. A non-empty string is emitted by
|
|
30
|
+
* both majors, warned about by neither, and inert on both — so there is one
|
|
31
|
+
* spelling and no branch.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Props that make an element inert when `inert` is true, and nothing at all
|
|
35
|
+
* when it is false.
|
|
36
|
+
*/
|
|
37
|
+
export declare function inertProps(inert: boolean): {
|
|
38
|
+
inert?: boolean;
|
|
39
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `InsightCard` + `InsightDeck` — the number that moved, and the paged deck of
|
|
3
|
+
* them.
|
|
4
|
+
*
|
|
5
|
+
* Every product on this shell computes insights already: `/spend` knows today's
|
|
6
|
+
* burn against yesterday's, `/missions` knows how many runs landed, the eval
|
|
7
|
+
* lanes know a pass rate per release. All of it renders as a line of text, so
|
|
8
|
+
* the reader does the comparison in their head and the series behind the number
|
|
9
|
+
* never reaches the screen at all.
|
|
10
|
+
*
|
|
11
|
+
* Two rules this surface exists to hold:
|
|
12
|
+
*
|
|
13
|
+
* - **A delta needs a baseline.** `previous` absent means no delta is drawn —
|
|
14
|
+
* not a green `+0%`, which is the specific fabrication a hand-rolled card
|
|
15
|
+
* produces when it defaults its baseline to zero, and which reads as "we
|
|
16
|
+
* measured, nothing changed" when the truth is "we have nothing to compare
|
|
17
|
+
* against". {@link insightDelta} returns `null` rather than a zero.
|
|
18
|
+
* - **Direction is not sentiment.** Spend going up and missions going up are
|
|
19
|
+
* the same arrow and opposite news, so tone is a caller declaration
|
|
20
|
+
* (`polarity`), and the default is neutral. A card that paints every rise
|
|
21
|
+
* green teaches the reader to stop reading the label.
|
|
22
|
+
*
|
|
23
|
+
* The deck is built on `web-react/async` rather than a loading boolean, so it
|
|
24
|
+
* inherits that module's invariant instead of restating it: `AsyncView` renders
|
|
25
|
+
* `error` with its message and retry, and `empty` is reachable only from a load
|
|
26
|
+
* that resolved — a failed fetch can never paint "No insights yet"
|
|
27
|
+
* (`docs/async-state-module.md`).
|
|
28
|
+
*
|
|
29
|
+
* Motion: cards arrive with `.agent-arrive`, staggered by `--stagger-index`
|
|
30
|
+
* from the deck, and a page TURN remounts them so the next page arrives as a
|
|
31
|
+
* sequence instead of swapping text under cards that never moved. A REFRESH is
|
|
32
|
+
* the opposite case and gets the opposite treatment — see the deck's own note.
|
|
33
|
+
* Every piece of that is decoration, carries no `data-motion`, and collapses
|
|
34
|
+
* under `prefers-reduced-motion` — the live label included.
|
|
35
|
+
*
|
|
36
|
+
* The live label does NOT opt out, and the reasoning is worth stating because
|
|
37
|
+
* the opposite reads plausible. What tells the reader a figure is still being
|
|
38
|
+
* computed is the WORD (`liveLabel`, "Updating"): it is rendered only while
|
|
39
|
+
* `live`, and a settled card does not render it at all. The sweep through its
|
|
40
|
+
* glyphs is emphasis on a signal that is already there, not the signal. So a
|
|
41
|
+
* reader who asked for less motion still sees the word — static, in the
|
|
42
|
+
* shimmer's resting gradient, still legible, and still disappearing the moment
|
|
43
|
+
* the figure is final. Nothing here overrides a request the reader made.
|
|
44
|
+
*/
|
|
45
|
+
import { type CSSProperties, type ReactElement } from 'react';
|
|
46
|
+
import { type AsyncEmptySpec, type AsyncResourceState } from './async';
|
|
47
|
+
export type InsightDirection = 'up' | 'down' | 'flat';
|
|
48
|
+
/** Which way is good news for THIS metric. `neutral` is the default because it
|
|
49
|
+
* is the only answer that is true for every metric. */
|
|
50
|
+
export type InsightPolarity = 'higher-is-better' | 'lower-is-better' | 'neutral';
|
|
51
|
+
export type InsightTone = 'positive' | 'negative' | 'neutral';
|
|
52
|
+
export interface InsightDelta {
|
|
53
|
+
/** The baseline the move is measured against — rendered, so the delta is
|
|
54
|
+
* never a number floating free of what produced it. */
|
|
55
|
+
readonly previous: number;
|
|
56
|
+
readonly absolute: number;
|
|
57
|
+
/** `null` when the baseline is `0`: a share of nothing is undefined, and
|
|
58
|
+
* "+∞%" or a silently-dropped percentage are both worse than the absolute. */
|
|
59
|
+
readonly percent: number | null;
|
|
60
|
+
readonly direction: InsightDirection;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The move, or `null` when there is no honest one to state.
|
|
64
|
+
*
|
|
65
|
+
* `unknown` inputs on purpose: these arrive from a fetched payload, and the
|
|
66
|
+
* cases that must not produce a delta — a missing baseline, a `null` from a
|
|
67
|
+
* first-ever reading, a `NaN` from a producer's division — are exactly the ones
|
|
68
|
+
* a narrower signature would let through as `0`.
|
|
69
|
+
*/
|
|
70
|
+
export declare function insightDelta(value: unknown, previous: unknown): InsightDelta | null;
|
|
71
|
+
/** Maps a direction onto good/bad news, which only the caller knows. */
|
|
72
|
+
export declare function insightDeltaTone(direction: InsightDirection, polarity?: InsightPolarity): InsightTone;
|
|
73
|
+
/**
|
|
74
|
+
* The delta as words: direction, magnitude, and the baseline it is measured
|
|
75
|
+
* against. Words rather than an arrow plus a bare number, because the arrow is
|
|
76
|
+
* `aria-hidden` and a reader hearing "12%" learns nothing about which way.
|
|
77
|
+
*/
|
|
78
|
+
export declare function formatInsightDelta(delta: InsightDelta, format?: (value: number) => string): string;
|
|
79
|
+
export interface InsightAction {
|
|
80
|
+
label: string;
|
|
81
|
+
onClick: () => void;
|
|
82
|
+
}
|
|
83
|
+
export interface InsightCardProps {
|
|
84
|
+
/** What was measured, in the reader's words ("Spend today"). */
|
|
85
|
+
title: string;
|
|
86
|
+
/** The number that moved. A `string` renders verbatim — a total the caller
|
|
87
|
+
* already formatted with its own currency — and takes no delta, because
|
|
88
|
+
* there is nothing to subtract. A non-finite number is not a measurement and
|
|
89
|
+
* renders as {@link INSIGHT_UNAVAILABLE_GLYPH}, never as "NaN" or "∞". */
|
|
90
|
+
value: number | string;
|
|
91
|
+
/** "USD", "runs", "%" — the unit the number is in, beside it rather than
|
|
92
|
+
* glued into it, so the figure stays scannable. */
|
|
93
|
+
unit?: string;
|
|
94
|
+
/** The baseline. Absent ⇒ the card renders the value and no delta. */
|
|
95
|
+
previous?: number;
|
|
96
|
+
polarity?: InsightPolarity;
|
|
97
|
+
/** One number format for the value, the delta and the series, so the three
|
|
98
|
+
* cannot disagree about decimals on the same card. */
|
|
99
|
+
format?: (value: number) => string;
|
|
100
|
+
series?: readonly number[];
|
|
101
|
+
/** Names the series in its accessible label; defaults to the card's title. */
|
|
102
|
+
seriesLabel?: string;
|
|
103
|
+
/** One line of context under the number — what the window is, what is
|
|
104
|
+
* excluded. Not a restatement of the title. */
|
|
105
|
+
description?: string;
|
|
106
|
+
/** The next action for this insight. An element renders as supplied (a link,
|
|
107
|
+
* a dialog trigger); the object form renders the standard button. */
|
|
108
|
+
action?: InsightAction | ReactElement;
|
|
109
|
+
/** The number is still being computed. The label's PRESENCE is the signal, so
|
|
110
|
+
* it reads the same with motion collapsed — see the module note. */
|
|
111
|
+
live?: boolean;
|
|
112
|
+
liveLabel?: string;
|
|
113
|
+
className?: string;
|
|
114
|
+
style?: CSSProperties;
|
|
115
|
+
}
|
|
116
|
+
export declare function InsightCard({ title, value, unit, previous, polarity, format, series, seriesLabel, description, action, live, liveLabel, className, style, }: InsightCardProps): ReactElement;
|
|
117
|
+
export interface Insight extends InsightCardProps {
|
|
118
|
+
/** Stable across refreshes: it keys the card. Paired with the deck holding
|
|
119
|
+
* the last loaded page across a reload, a stable id is what lets a settled
|
|
120
|
+
* card keep its own DOM node — and therefore not replay its arrival — when
|
|
121
|
+
* a poll returns the same insight. */
|
|
122
|
+
readonly id: string;
|
|
123
|
+
}
|
|
124
|
+
export declare const DEFAULT_INSIGHT_PAGE_SIZE = 3;
|
|
125
|
+
/**
|
|
126
|
+
* The page size — ONE definition, read by the count and by the slice.
|
|
127
|
+
*
|
|
128
|
+
* Two definitions is how a deck hides an insight with no error at all: a count
|
|
129
|
+
* that divides by the raw `2.5` claims two pages of a five-card deck, a slice
|
|
130
|
+
* that floors it puts two cards on each, and the fifth card is on no page the
|
|
131
|
+
* reader can reach. Nothing renders wrong; a card is simply gone.
|
|
132
|
+
*
|
|
133
|
+
* A page size is a count of cards, so a fraction, a zero and a negative are not
|
|
134
|
+
* smaller decks — they are caller mistakes, and this normalises them back to the
|
|
135
|
+
* default and says so once per offending value. Normalised rather than thrown
|
|
136
|
+
* because the value is often computed from a measured viewport, where the first
|
|
137
|
+
* paint legitimately produces a `0`: a deck that pages in threes is a far
|
|
138
|
+
* smaller failure than a dashboard that throws during render.
|
|
139
|
+
*/
|
|
140
|
+
export declare function insightPageSize(pageSize?: number): number;
|
|
141
|
+
/** Always at least one page, so "Page 1 of 0" cannot be rendered. */
|
|
142
|
+
export declare function insightPageCount(total: number, pageSize?: number): number;
|
|
143
|
+
/** The items on `page`, with the page clamped into range — a deck whose list
|
|
144
|
+
* shrank under the reader shows the last page that exists, never a blank one. */
|
|
145
|
+
export declare function insightPageSlice<T>(items: readonly T[], page: number, pageSize?: number): readonly T[];
|
|
146
|
+
export interface InsightDeckProps {
|
|
147
|
+
/** The same five-state contract every other screen fetches through. */
|
|
148
|
+
state: AsyncResourceState<readonly Insight[]>;
|
|
149
|
+
/** Required by `AsyncView`: an empty deck must say what is missing and what
|
|
150
|
+
* to do about it. */
|
|
151
|
+
empty: AsyncEmptySpec | ReactElement;
|
|
152
|
+
/** Names the region for assistive tech and titles nothing visually — the
|
|
153
|
+
* cards carry their own headings. */
|
|
154
|
+
label?: string;
|
|
155
|
+
pageSize?: number;
|
|
156
|
+
loadingLabel?: string;
|
|
157
|
+
retryLabel?: string;
|
|
158
|
+
className?: string;
|
|
159
|
+
/**
|
|
160
|
+
* The page the reader is ON, whatever moved them there.
|
|
161
|
+
*
|
|
162
|
+
* That includes the render-time clamp: a list that shrinks under a reader
|
|
163
|
+
* standing on page 3 leaves them on the last page that exists, and a parent
|
|
164
|
+
* persisting this to a URL or to storage would otherwise keep writing a page
|
|
165
|
+
* number nothing can reach. Reported once per effective page, never twice for
|
|
166
|
+
* the same one.
|
|
167
|
+
*/
|
|
168
|
+
onPageChange?: (page: number) => void;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The paged deck.
|
|
172
|
+
*
|
|
173
|
+
* `AsyncView` owns the non-`ready` branches, which is what makes the invariant
|
|
174
|
+
* structural here: the cards are rendered from one branch of that component,
|
|
175
|
+
* and no branch of this one could paint the empty copy over a failure.
|
|
176
|
+
*
|
|
177
|
+
* **A REFRESH DOES NOT REPLACE WHAT IS ON SCREEN.** `useAsyncResource` re-enters
|
|
178
|
+
* `loading` with no value held on every reload, and handing that straight to
|
|
179
|
+
* `AsyncView` swaps the ready subtree for the busy block — which destroys the
|
|
180
|
+
* DOM the reader is standing in. Measured, on a real reload: `document.
|
|
181
|
+
* activeElement` fell to `document.body`, so a keyboard reader mid-page lost
|
|
182
|
+
* their place on every automatic poll; and every settled card was a NEW node, so
|
|
183
|
+
* `.agent-arrive` replayed across the whole visible page — the exact flash this
|
|
184
|
+
* surface's motion rules exist to prevent. Holding the page NUMBER above the
|
|
185
|
+
* boundary fixed the counter and none of that, because the subtree under it was
|
|
186
|
+
* still being torn down.
|
|
187
|
+
*
|
|
188
|
+
* So the deck holds the last insights it rendered and keeps handing them to the
|
|
189
|
+
* SAME `AsyncView` branch while a reload is in flight: same element, same
|
|
190
|
+
* position, same keys — React reuses the nodes, focus stays where the reader put
|
|
191
|
+
* it, and nothing re-animates. `aria-busy` on the region is the signal that a
|
|
192
|
+
* load is in flight; a per-card one is `live` on the card.
|
|
193
|
+
*
|
|
194
|
+
* The bridge is only ever over a WAIT. `error` and `empty` are answers about the
|
|
195
|
+
* resource, so they drop what was held and render their own branch — a failed
|
|
196
|
+
* fetch still cannot paint stale numbers, and the async module's invariant is
|
|
197
|
+
* untouched.
|
|
198
|
+
*
|
|
199
|
+
* It bridges one resource, not one component: if the SUBJECT changes (a
|
|
200
|
+
* different workspace, a different window), give the deck a `key` so it remounts
|
|
201
|
+
* rather than showing the previous subject's numbers while the new ones load.
|
|
202
|
+
*/
|
|
203
|
+
export declare function InsightDeck({ state, empty, label, pageSize, loadingLabel, retryLabel, className, onPageChange, }: InsightDeckProps): ReactElement;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared answer-building + submit plumbing for the interaction cards
|
|
3
|
+
* (question, plan). Client-safe, no React: cards own their state, this owns
|
|
4
|
+
* the wire. Lifted from the gtm-agent fork (the most fix-absorbed of the three
|
|
5
|
+
* product copies), including the 30s submit timeout that keeps a dead route
|
|
6
|
+
* from wedging a card in "Submitting…".
|
|
7
|
+
*/
|
|
8
|
+
import type { ChatInteraction, ChatInteractionField, ChatInteractionStatus, InteractionAnswers, InteractionData } from './chat-interactions';
|
|
9
|
+
/** Status-badge labels for an interaction card. `cancelled`/`expired` read the
|
|
10
|
+
* same across cards; each card supplies its own verbs for the other states
|
|
11
|
+
* (a question is answered/declined; a plan is approved/rejected). */
|
|
12
|
+
export declare function interactionStatusLabels(labels: {
|
|
13
|
+
pending: string;
|
|
14
|
+
answered: string;
|
|
15
|
+
declined: string;
|
|
16
|
+
}): Record<ChatInteractionStatus, string>;
|
|
17
|
+
/** Terminal-state notes for an interaction card. The expiry/withdrawal lines
|
|
18
|
+
* share one shape around the card's noun ("question"/"plan"); any extra notes
|
|
19
|
+
* (e.g. a plan's `declined` revision line) merge on top. */
|
|
20
|
+
export declare function interactionTerminalNotes(noun: string, extra?: Partial<Record<ChatInteractionStatus, string>>): Partial<Record<ChatInteractionStatus, string>>;
|
|
21
|
+
/** Define a record mapping field names to objects with optional selected, text, and custom string arrays or values */
|
|
22
|
+
export type FieldValues = Record<string, {
|
|
23
|
+
selected?: string[];
|
|
24
|
+
text?: string;
|
|
25
|
+
custom?: string;
|
|
26
|
+
}>;
|
|
27
|
+
/** Converts acknowledged, persisted answers back into the local field state
|
|
28
|
+
* consumed by the shared cards. Persisted values are authoritative: this is
|
|
29
|
+
* intentionally used only when an interaction carries `answers`, never to
|
|
30
|
+
* guess an answer from the absence of an outstanding sidecar ask. */
|
|
31
|
+
export declare function fieldValuesFromAnswers(fields: ChatInteractionField[], answers: InteractionAnswers | undefined): FieldValues;
|
|
32
|
+
/** The submitted value for one field, or null when it has no answer yet.
|
|
33
|
+
*
|
|
34
|
+
* Returns `InteractionAnswers[string]`, not the wider `InteractionData[string]`:
|
|
35
|
+
* a card reads its value out of a rendered control, so every branch below
|
|
36
|
+
* yields a plain scalar or string array. `InteractionData` also admits a
|
|
37
|
+
* one-use `secret_handle` reference, which no control here can produce and
|
|
38
|
+
* which `onResolved` must never receive — that path persists into the visible
|
|
39
|
+
* transcript. Declaring the narrow type keeps the handle out by construction
|
|
40
|
+
* rather than by review. */
|
|
41
|
+
export declare function fieldAnswer(field: ChatInteractionField, values: FieldValues): InteractionAnswers[string] | null;
|
|
42
|
+
/** All required fields answered → the respond payload; else null (not
|
|
43
|
+
* submittable yet). Optional unanswered fields are omitted. */
|
|
44
|
+
export declare function buildAnswerData(fields: ChatInteractionField[], values: FieldValues): InteractionAnswers | null;
|
|
45
|
+
/** Determine if a status is late answerable by checking if it is expired or cancelled */
|
|
46
|
+
export declare function isLateAnswerableStatus(status: ChatInteractionStatus): boolean;
|
|
47
|
+
/** Secrets must never leave the sidecar answer channel for the visible chat
|
|
48
|
+
* transcript, so a secret-bearing ask cannot be late-answered. */
|
|
49
|
+
export declare function hasSecretField(fields: ChatInteractionField[]): boolean;
|
|
50
|
+
/** Renders the late answer as a self-contained chat message: the original
|
|
51
|
+
* question, its context, and the user's answer(s). */
|
|
52
|
+
export declare function lateAnswerMessage(interaction: ChatInteraction, data: InteractionData): string;
|
|
53
|
+
/** Define the timeout duration in milliseconds for submitting an interaction */
|
|
54
|
+
export declare const INTERACTION_SUBMIT_TIMEOUT_MS = 30000;
|
|
55
|
+
/** Provide the timeout message displayed when the agent cannot be reached during interaction submission */
|
|
56
|
+
export declare const INTERACTION_SUBMIT_TIMEOUT_MESSAGE = "Could not reach the agent. Try again.";
|
|
57
|
+
/** One card submission: which ask, resolved how, with what answers. */
|
|
58
|
+
export interface InteractionAnswerSubmission {
|
|
59
|
+
id: string;
|
|
60
|
+
outcome: 'accepted' | 'declined';
|
|
61
|
+
data?: InteractionData;
|
|
62
|
+
}
|
|
63
|
+
/** Resolve the result of an interaction submission indicating success or failure with details */
|
|
64
|
+
export type InteractionSubmitResult = {
|
|
65
|
+
ok: true;
|
|
66
|
+
} | {
|
|
67
|
+
ok: false;
|
|
68
|
+
expired: boolean;
|
|
69
|
+
message: string;
|
|
70
|
+
};
|
|
71
|
+
/** The cards' only side-effect seam: POST one resolution, report the normalized
|
|
72
|
+
* outcome. Products bind their route URL + routing fields (workspaceId,
|
|
73
|
+
* threadId, session path param) via `createInteractionAnswerSubmitter` or a
|
|
74
|
+
* hand-rolled implementation. */
|
|
75
|
+
export type SubmitInteractionAnswer = (submission: InteractionAnswerSubmission) => Promise<InteractionSubmitResult>;
|
|
76
|
+
/** Extracts the most specific error message a route returned. */
|
|
77
|
+
export declare function responseErrorMessage(res: Response): Promise<{
|
|
78
|
+
code?: string;
|
|
79
|
+
message: string;
|
|
80
|
+
}>;
|
|
81
|
+
/** Define options for submitting interaction answers including URL, body, timeout, and fetch implementation */
|
|
82
|
+
export interface InteractionAnswerSubmitterOptions {
|
|
83
|
+
/** The product's answer route (the POST half of `createInteractionAnswerRoute`).
|
|
84
|
+
* A function when the URL carries the session (e.g. `/api/sessions/${id}/interactions`). */
|
|
85
|
+
url: string | ((submission: InteractionAnswerSubmission) => string);
|
|
86
|
+
/** Extra routing fields merged into the POST body (e.g. workspaceId, threadId). */
|
|
87
|
+
body?: Record<string, unknown> | ((submission: InteractionAnswerSubmission) => Record<string, unknown>);
|
|
88
|
+
timeoutMs?: number;
|
|
89
|
+
fetchImpl?: typeof fetch;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Runs a host-supplied submitter under the CARD's own deadline, and always
|
|
93
|
+
* resolves.
|
|
94
|
+
*
|
|
95
|
+
* `createInteractionAnswerSubmitter` aborts its own fetch, but a product may
|
|
96
|
+
* pass any `SubmitInteractionAnswer` — commonly one wrapping an untimed
|
|
97
|
+
* `fetch`. The deadline cannot live only in the submitter, because what gets
|
|
98
|
+
* stuck is the card: its in-flight guard is cleared by the awaited promise
|
|
99
|
+
* settling, so a submitter that never settles leaves that guard set for the
|
|
100
|
+
* life of the instance — "Submitting…" forever, and no answer can be sent
|
|
101
|
+
* again. A submitter with its own shorter timeout simply wins the race.
|
|
102
|
+
*
|
|
103
|
+
* Rejection is normalized too: a submitter that throws would otherwise escape
|
|
104
|
+
* the click handler as an unhandled rejection, leaving the user with a card
|
|
105
|
+
* that silently did nothing. It becomes a visible, retryable message instead.
|
|
106
|
+
*/
|
|
107
|
+
export declare function settleInteractionSubmit(run: () => Promise<InteractionSubmitResult>, timeoutMs?: number): Promise<InteractionSubmitResult>;
|
|
108
|
+
/**
|
|
109
|
+
* Builds the `SubmitInteractionAnswer` the cards consume: POSTs
|
|
110
|
+
* `{ ...routingFields, id, outcome, data? }` with an abortable timeout and
|
|
111
|
+
* normalizes the outcome. `expired` is the 410 path — the ask is gone
|
|
112
|
+
* (answered elsewhere, timed out, or the session moved on) and the card must
|
|
113
|
+
* flip to the same dead state a cancel event produces.
|
|
114
|
+
*/
|
|
115
|
+
export declare function createInteractionAnswerSubmitter(options: InteractionAnswerSubmitterOptions): SubmitInteractionAnswer;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InteractionPlanCard — the plan-approval round-trip card (kind:"plan",
|
|
3
|
+
* claude-code plan mode). The plan itself arrives as markdown in
|
|
4
|
+
* `interaction.body`; the answerSpec is producer-defined, so fields render
|
|
5
|
+
* generically — a free-text field doubles as the rejection-feedback input.
|
|
6
|
+
* Approve POSTs outcome:"accepted", Request changes POSTs outcome:"declined"
|
|
7
|
+
* with any typed feedback.
|
|
8
|
+
*
|
|
9
|
+
* Markdown is injected (`renderMarkdown`, matching the rest of `web-react`);
|
|
10
|
+
* without it the plan body falls back to pre-wrapped plain text. Pure data +
|
|
11
|
+
* callbacks: no fetch inside the component.
|
|
12
|
+
*/
|
|
13
|
+
import { type ReactNode } from 'react';
|
|
14
|
+
import type { ChatInteraction, ChatInteractionStatus } from './chat-interactions';
|
|
15
|
+
import { type SubmitInteractionAnswer } from './interaction-card-support';
|
|
16
|
+
export interface InteractionPlanCardProps {
|
|
17
|
+
interaction: ChatInteraction;
|
|
18
|
+
/** Viewer-vs-editor gate: false renders everything read-only. */
|
|
19
|
+
canWrite: boolean;
|
|
20
|
+
/** POST one resolution to the product's answer route (see
|
|
21
|
+
* `createInteractionAnswerSubmitter`). */
|
|
22
|
+
submitAnswer: SubmitInteractionAnswer;
|
|
23
|
+
/** Fired when this card resolves locally (approved/rejected, or discovered
|
|
24
|
+
* expired via a 410) so the stream/route state stays in sync. */
|
|
25
|
+
onResolved?: (id: string, status: Exclude<ChatInteractionStatus, 'pending'>) => void;
|
|
26
|
+
/** Fired when the user asks the agent to re-submit an expired/withdrawn plan
|
|
27
|
+
* as a new chat turn. Receives the interaction so a callback shared across
|
|
28
|
+
* cards (e.g. via DurableChatCards) knows which plan fired. Return/resolve
|
|
29
|
+
* `false` (or throw) to report the send failed and keep the affordance
|
|
30
|
+
* retryable. Omit to hide it entirely. */
|
|
31
|
+
onReRequest?: (interaction: ChatInteraction) => boolean | void | Promise<boolean | void>;
|
|
32
|
+
/** Overrides the default re-request button label
|
|
33
|
+
* ("Ask agent to re-submit the plan" — gtm's exact current copy). */
|
|
34
|
+
reRequestLabel?: string;
|
|
35
|
+
/** Renders the plan body (markdown). Falls back to pre-wrapped plain text. */
|
|
36
|
+
renderMarkdown?: (markdown: string) => ReactNode;
|
|
37
|
+
className?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function InteractionPlanCard({ interaction, canWrite, submitAnswer, onResolved, onReRequest, reRequestLabel, renderMarkdown, className, }: InteractionPlanCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InteractionQuestionCard — the agent-ask card every sandbox-backed chat UI
|
|
3
|
+
* forked (~1,000 lines each in gtm/legal/tax). Renders the answerSpec
|
|
4
|
+
* verbatim: selects (radio/checkbox by `multi`, write-in row only when the
|
|
5
|
+
* sidecar granted `allowCustom`), free text, and minimal number/boolean/secret
|
|
6
|
+
* inputs for open kinds.
|
|
7
|
+
*
|
|
8
|
+
* Behavior lifted from the gtm-agent fork (the most fix-absorbed):
|
|
9
|
+
* - a terminal stream status always wins over local optimistic state,
|
|
10
|
+
* - a 410 from the answer route flips the card to the same dead state a
|
|
11
|
+
* cancel event produces (never a raw error),
|
|
12
|
+
* - expired/withdrawn asks stay answerable: the answer is delivered as a NEW
|
|
13
|
+
* chat turn via `onLateAnswer` (secret-bearing asks are blocked from that
|
|
14
|
+
* path),
|
|
15
|
+
* - one submit in flight at a time; a failed/timed-out submit stays
|
|
16
|
+
* retryable.
|
|
17
|
+
*
|
|
18
|
+
* Pure data + callbacks: no fetch inside the component. Products bind the wire
|
|
19
|
+
* via `createInteractionAnswerSubmitter` (or any `SubmitInteractionAnswer`).
|
|
20
|
+
*/
|
|
21
|
+
import { type ReactNode } from 'react';
|
|
22
|
+
import type { ChatInteraction, ChatInteractionStatus, ChatSelectField } from './chat-interactions';
|
|
23
|
+
import { type SubmitInteractionAnswer } from './interaction-card-support';
|
|
24
|
+
export type InteractionBadgeVariant = 'outline' | 'default' | 'destructive';
|
|
25
|
+
export declare function InteractionBadge({ variant, children }: {
|
|
26
|
+
variant: InteractionBadgeVariant;
|
|
27
|
+
children: string;
|
|
28
|
+
}): import("react").JSX.Element;
|
|
29
|
+
export declare function InteractionActionButton({ variant, onClick, disabled, children, }: {
|
|
30
|
+
variant?: 'primary' | 'outline';
|
|
31
|
+
onClick: () => void;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
children: string;
|
|
34
|
+
}): import("react").JSX.Element;
|
|
35
|
+
export interface QuestionOptionListProps {
|
|
36
|
+
/** Radio/checkbox group name — unique per field so selection is isolated. */
|
|
37
|
+
groupName: string;
|
|
38
|
+
/** Stable prefix for per-option input ids (label htmlFor pairing). */
|
|
39
|
+
idPrefix: string;
|
|
40
|
+
options: ChatSelectField['options'];
|
|
41
|
+
/** Checkbox (multi-select) vs radio (single). */
|
|
42
|
+
multi: boolean;
|
|
43
|
+
selectedValues: string[];
|
|
44
|
+
disabled: boolean;
|
|
45
|
+
onToggle: (value: string) => void;
|
|
46
|
+
/** Terminal answered state: the selected rows highlight (primary edge, tint,
|
|
47
|
+
* trailing check) so the card shows WHAT was answered, not just that it was. */
|
|
48
|
+
answered?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** The radio/checkbox option rows for a select field. Renders a fragment of
|
|
51
|
+
* option `<label>` rows so a card keeps its own wrapping layout and appends
|
|
52
|
+
* its own write-in input.
|
|
53
|
+
*
|
|
54
|
+
* The rows arrive as a SEQUENCE (`.agent-arrive` + `--stagger-index`), which
|
|
55
|
+
* is the difference between reading a list and being shown one: the eye is
|
|
56
|
+
* told there are N choices and in what order before it has read any of them.
|
|
57
|
+
* The index is safe to take straight from the map because an option list does
|
|
58
|
+
* not re-sort under a mounted card — a different set of options is a
|
|
59
|
+
* different `key`, and a different ask resets the card wholesale. */
|
|
60
|
+
export declare function QuestionOptionList({ groupName, idPrefix, options, multi, selectedValues, disabled, onToggle, answered, }: QuestionOptionListProps): import("react").JSX.Element;
|
|
61
|
+
export interface InteractionQuestionCardProps {
|
|
62
|
+
interaction: ChatInteraction;
|
|
63
|
+
/** Viewer-vs-editor gate: false renders everything read-only. */
|
|
64
|
+
canWrite: boolean;
|
|
65
|
+
/** POST one resolution to the product's answer route (see
|
|
66
|
+
* `createInteractionAnswerSubmitter`). Never called for late answers. */
|
|
67
|
+
submitAnswer: SubmitInteractionAnswer;
|
|
68
|
+
/** Fired when this card resolves locally (answered, or discovered expired
|
|
69
|
+
* via a 410) so the stream/route state stays in sync. */
|
|
70
|
+
onResolved?: (id: string, status: Exclude<ChatInteractionStatus, 'pending'>, answers?: ChatInteraction['answers']) => void;
|
|
71
|
+
/** Delivers a late answer (the ask expired/was withdrawn) as a fresh chat
|
|
72
|
+
* turn. Return/resolve `false` when the send was rejected so the card stays
|
|
73
|
+
* retryable. Omit to hide the late-answer affordance entirely. */
|
|
74
|
+
onLateAnswer?: (message: string) => boolean | void | Promise<boolean | void>;
|
|
75
|
+
/** Overrides the kind badge ("Question"). */
|
|
76
|
+
kindLabel?: string;
|
|
77
|
+
/** What happens if nobody answers, rendered beside the submit action.
|
|
78
|
+
*
|
|
79
|
+
* The caller owns both the clock and the copy: this card holds no timer, so a
|
|
80
|
+
* deadline that counts down re-renders on the caller's cadence rather than
|
|
81
|
+
* driving one of its own — and the consequence of silence ("the default is
|
|
82
|
+
* taken", "the run fails") is the host's policy to state, not this card's to
|
|
83
|
+
* infer. */
|
|
84
|
+
timeoutNote?: ReactNode;
|
|
85
|
+
/** Renders `body` as markdown. Omitted, `body` renders as plain text — so a
|
|
86
|
+
* host that passes authored markdown without this shows its syntax raw.
|
|
87
|
+
*
|
|
88
|
+
* `body` ONLY. `title` and every `field.label` stay plain strings: a label is
|
|
89
|
+
* also the input's accessible name (`aria-label`), which has to be text, and
|
|
90
|
+
* rendering one as nodes would either break that or silently disagree with
|
|
91
|
+
* what a screen reader announces. Put prose in `body`.
|
|
92
|
+
*
|
|
93
|
+
* `interaction.body` is untrusted: it arrives off the wire, written by an
|
|
94
|
+
* agent or whoever authored the ask. This card never injects HTML, but a
|
|
95
|
+
* renderer that does is an XSS sink — so return React elements, and sanitize
|
|
96
|
+
* (DOMPurify or equivalent) if you must produce HTML. */
|
|
97
|
+
renderMarkdown?: (markdown: string) => ReactNode;
|
|
98
|
+
className?: string;
|
|
99
|
+
}
|
|
100
|
+
export declare function InteractionQuestionCard({ interaction, canWrite, submitAnswer, onResolved, onLateAnswer, kindLabel, timeoutNote, renderMarkdown, className, }: InteractionQuestionCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders a message's attachment parts (images + files) as thumbnails and
|
|
3
|
+
* download chips — the transcript-side counterpart to `ChatComposer`'s
|
|
4
|
+
* staged-upload chips. Ported from gtm-agent's `chat-attachment-parts.tsx`
|
|
5
|
+
* onto agent-app's RAW-BYTES download contract: the host supplies
|
|
6
|
+
* `resolveFileUrl(part)`, a URL that serves the attachment's raw bytes
|
|
7
|
+
* directly, so this module never parses a JSON `{file:{blobUrl,body}}`
|
|
8
|
+
* envelope or decodes a `[base64]` marker the way gtm's vault route did.
|
|
9
|
+
*
|
|
10
|
+
* No icon-library or primitives dependency (`ChatComposer`'s house style):
|
|
11
|
+
* the loading skeleton is an inline `animate-pulse` span and the few glyphs
|
|
12
|
+
* are inline SVGs.
|
|
13
|
+
*/
|
|
14
|
+
import { type ReactNode } from 'react';
|
|
15
|
+
import type { ChatAttachmentPart } from './chat-attachments';
|
|
16
|
+
/** Typed outcome of fetching one attachment's raw bytes. Callers must check
|
|
17
|
+
* `ok` before touching `blob` — a failed fetch never produces a blank
|
|
18
|
+
* render, it produces a visible error state. */
|
|
19
|
+
export type AttachmentFileResult = {
|
|
20
|
+
ok: true;
|
|
21
|
+
blob: Blob;
|
|
22
|
+
} | {
|
|
23
|
+
ok: false;
|
|
24
|
+
message: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function __resetAttachmentFileCacheForTests(): void;
|
|
27
|
+
/** Fetches (and caches) the raw bytes behind one attachment url. Concurrent
|
|
28
|
+
* callers for the SAME url dedupe to one in-flight fetch. Only a successful
|
|
29
|
+
* settlement stays cached — evicting failures means a remount or click-retry
|
|
30
|
+
* after a transient error issues a fresh fetch. */
|
|
31
|
+
export declare function loadAttachmentFile(url: string, fetchFile?: (url: string) => Promise<Response>): Promise<AttachmentFileResult>;
|
|
32
|
+
/** Drives an anchor-click download from an already-resolved blob. Returns a
|
|
33
|
+
* typed outcome rather than throwing — a chip that fails to synthesize the
|
|
34
|
+
* download must show the failure, not silently no-op. */
|
|
35
|
+
export declare function triggerAttachmentDownload(name: string, blob: Blob): {
|
|
36
|
+
ok: true;
|
|
37
|
+
} | {
|
|
38
|
+
ok: false;
|
|
39
|
+
message: string;
|
|
40
|
+
};
|
|
41
|
+
export interface MessageAttachmentsProps {
|
|
42
|
+
parts: ChatAttachmentPart[];
|
|
43
|
+
/** URL serving the attachment's RAW bytes. */
|
|
44
|
+
resolveFileUrl: (part: ChatAttachmentPart) => string;
|
|
45
|
+
/** Row alignment — a user-bubble attachment row is right-aligned by
|
|
46
|
+
* default; pass `"start"` for an assistant-turn attachment, which sits
|
|
47
|
+
* inline with the rest of the transcript. */
|
|
48
|
+
justify?: 'start' | 'end';
|
|
49
|
+
/** Override the fetch used to load an attachment's bytes. Default:
|
|
50
|
+
* `fetch(url, { credentials: 'same-origin' })`. */
|
|
51
|
+
fetchFile?: (url: string) => Promise<Response>;
|
|
52
|
+
}
|
|
53
|
+
/** Renders a message's attachment parts as a row of image thumbnails and file
|
|
54
|
+
* chips. `null` when there are none, so callers can render unconditionally
|
|
55
|
+
* without an extra length check. */
|
|
56
|
+
export declare function MessageAttachments({ parts, resolveFileUrl, justify, fetchFile }: MessageAttachmentsProps): ReactNode;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mission + delegation observability surfaces — different nouns, one trace
|
|
3
|
+
* tree:
|
|
4
|
+
*
|
|
5
|
+
* - {@link MissionActivityLane}: the collapsed sub-rows under a mission step
|
|
6
|
+
* (what the step's agent is actually doing), expanding to a compact web
|
|
7
|
+
* waterfall rendered from the `/trace` converters.
|
|
8
|
+
* - {@link AgentActivityPanel}: the standalone cross-context surface — every
|
|
9
|
+
* delegation a workspace ran, regardless of which mission (if any) spawned
|
|
10
|
+
* it — behind a `fetchActivity` data port with cursor + refresh.
|
|
11
|
+
* - {@link FlowWaterfall}: the web counterpart of `/trace`'s ASCII
|
|
12
|
+
* `renderWaterfall` (which stays CLI) — proportional bars over a FlowTrace.
|
|
13
|
+
*
|
|
14
|
+
* Same styling contract as the rest of `/web-react`: Tailwind classes against
|
|
15
|
+
* the shared design tokens, inline SVG glyphs, no icon library. The pure
|
|
16
|
+
* layout/merge/format helpers are exported for tests and reuse.
|
|
17
|
+
*/
|
|
18
|
+
import { type ReactNode } from 'react';
|
|
19
|
+
import type { StepAgentActivity } from '../missions/agent-activity';
|
|
20
|
+
import type { FlowTrace } from '../trace/index';
|
|
21
|
+
export type ActivityTone = 'live' | 'ok' | 'error' | 'neutral';
|
|
22
|
+
/** Map a delegation status (free-form string on the wire) to a render tone. */
|
|
23
|
+
export declare function activityTone(status: string): ActivityTone;
|
|
24
|
+
/** "$0.4000" under a cent shows 4 decimals; null when unknown/zero. */
|
|
25
|
+
export declare function formatActivityCost(costUsd?: number): string | null;
|
|
26
|
+
/** "8s" / "2m 05s" / "1h 12m"; null when unknown. */
|
|
27
|
+
export declare function formatActivityDuration(durationMs?: number): string | null;
|
|
28
|
+
/** A delegation record on the cross-context surface; `missionRef` links a
|
|
29
|
+
* promoted delegation back to the mission/step that spawned it. */
|
|
30
|
+
export interface AgentActivityRecord extends StepAgentActivity {
|
|
31
|
+
missionRef?: {
|
|
32
|
+
missionId: string;
|
|
33
|
+
stepId?: string;
|
|
34
|
+
label?: string;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface AgentActivityPage {
|
|
38
|
+
items: AgentActivityRecord[];
|
|
39
|
+
/** Opaque continuation token; absent ⇒ no further pages. */
|
|
40
|
+
nextCursor?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Fold a fetched page into the held rows: dedupe by `taskId` with the
|
|
44
|
+
* incoming row winning (a refresh re-fetches the head page, so newer
|
|
45
|
+
* snapshots of in-flight runs replace stale ones), newest `startedAt` first.
|
|
46
|
+
*/
|
|
47
|
+
export declare function mergeActivityPages(existing: AgentActivityRecord[], incoming: AgentActivityRecord[]): AgentActivityRecord[];
|
|
48
|
+
export interface WaterfallRow {
|
|
49
|
+
name: string;
|
|
50
|
+
kind: 'pipeline' | 'model' | 'tool';
|
|
51
|
+
/** Bar geometry as percentages of the trace's total span. */
|
|
52
|
+
offsetPct: number;
|
|
53
|
+
widthPct: number;
|
|
54
|
+
durationLabel: string;
|
|
55
|
+
approx: boolean;
|
|
56
|
+
/** False only when the span's meta carries an explicit failure. */
|
|
57
|
+
ok: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Project a FlowTrace into proportional bar geometry for {@link FlowWaterfall}. */
|
|
60
|
+
export declare function waterfallLayout(trace: FlowTrace): WaterfallRow[];
|
|
61
|
+
export interface FlowWaterfallProps {
|
|
62
|
+
trace: FlowTrace;
|
|
63
|
+
}
|
|
64
|
+
/** Compact proportional waterfall over a FlowTrace — span name, bar, duration
|
|
65
|
+
* per row; total + cost in the footer. */
|
|
66
|
+
export declare function FlowWaterfall({ trace }: FlowWaterfallProps): import("react").JSX.Element | null;
|
|
67
|
+
export interface MissionActivityLaneProps {
|
|
68
|
+
/** The step's delegated-run snapshot (`MissionStepState.agentActivity`). */
|
|
69
|
+
activity: StepAgentActivity[];
|
|
70
|
+
/** Epoch ms origin for the expanded waterfall — usually the step start. */
|
|
71
|
+
startedAt?: number;
|
|
72
|
+
/** Wall clock for extending in-flight runs on the waterfall. */
|
|
73
|
+
nowMs?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Collapsed sub-rows under a mission step — one row per delegated run —
|
|
77
|
+
* expanding to the step's waterfall. Renders nothing for an empty lane.
|
|
78
|
+
*
|
|
79
|
+
* A sub-row appears because a delegated run STARTED or FINISHED, which is the
|
|
80
|
+
* one kind of list change worth choreographing: it arrives, and the group
|
|
81
|
+
* arrives as a sequence. Keying on `taskId` is what keeps the rest still — the
|
|
82
|
+
* snapshot re-renders every poll, and a row whose status merely advanced holds
|
|
83
|
+
* the DOM node it already had.
|
|
84
|
+
*/
|
|
85
|
+
export declare function MissionActivityLane({ activity, startedAt, nowMs }: MissionActivityLaneProps): import("react").JSX.Element | null;
|
|
86
|
+
export interface AgentActivityPanelProps {
|
|
87
|
+
/** Data port — page through the product's delegation records. Called with
|
|
88
|
+
* no cursor on mount/refresh, with `nextCursor` for older pages. */
|
|
89
|
+
fetchActivity: (cursor?: string) => Promise<AgentActivityPage>;
|
|
90
|
+
/** Render the mission link for a promoted delegation (chip, anchor, router
|
|
91
|
+
* Link — the product's routing, not ours). */
|
|
92
|
+
renderMissionRef?: (ref: NonNullable<AgentActivityRecord['missionRef']>, record: AgentActivityRecord) => ReactNode;
|
|
93
|
+
title?: string;
|
|
94
|
+
emptyLabel?: string;
|
|
95
|
+
}
|
|
96
|
+
export declare function AgentActivityPanel({ fetchActivity, renderMissionRef, title, emptyLabel }: AgentActivityPanelProps): import("react").JSX.Element;
|