@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,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The LIVE half: judge each turn the moment it settles.
|
|
3
|
+
*
|
|
4
|
+
* This adds no control flow. `createChatTurnRoutes` already exposes a
|
|
5
|
+
* `lifecycle` seam that fires exactly one of `onTurnComplete`/`onTurnError`
|
|
6
|
+
* after a turn settles, and already swallows hook errors so telemetry cannot
|
|
7
|
+
* fail a turn. That seam was shipped and then wired by nobody, which is a fair
|
|
8
|
+
* description of why the outage lasted 17 days. This function fills it.
|
|
9
|
+
*
|
|
10
|
+
* The shape is declared structurally rather than imported from
|
|
11
|
+
* `/chat-routes`, so `/turn-health` stays free of the server chat vertical and
|
|
12
|
+
* can be used by any turn driver that reports the same three moments.
|
|
13
|
+
*/
|
|
14
|
+
import { type AlertSink } from './sink.js';
|
|
15
|
+
/** Structural mirror of `/chat-routes`' `ChatTurnLifecycle` complete payload. */
|
|
16
|
+
export interface TurnHealthCompleteInfo {
|
|
17
|
+
finalText: string;
|
|
18
|
+
usage?: {
|
|
19
|
+
outputTokens?: number | null;
|
|
20
|
+
} | null;
|
|
21
|
+
durationMs: number;
|
|
22
|
+
threadId?: string;
|
|
23
|
+
turnStreamId?: string;
|
|
24
|
+
executionId?: string;
|
|
25
|
+
/** `/chat-routes` sets this when a `contextGate` short-circuited the turn and
|
|
26
|
+
* the producer never ran. */
|
|
27
|
+
gated?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** Structural mirror of the lifecycle error payload. */
|
|
30
|
+
export interface TurnHealthErrorInfo {
|
|
31
|
+
error: unknown;
|
|
32
|
+
durationMs: number;
|
|
33
|
+
threadId?: string;
|
|
34
|
+
turnStreamId?: string;
|
|
35
|
+
executionId?: string;
|
|
36
|
+
}
|
|
37
|
+
/** What {@link createTurnHealthLifecycle} returns — assignable to
|
|
38
|
+
* `createChatTurnRoutes`' `lifecycle` option. */
|
|
39
|
+
export interface TurnHealthLifecycle {
|
|
40
|
+
onTurnComplete(info: TurnHealthCompleteInfo): Promise<void>;
|
|
41
|
+
onTurnError(info: TurnHealthErrorInfo): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export interface TurnHealthLifecycleOptions {
|
|
44
|
+
/** Names the product in every alert. */
|
|
45
|
+
product: string;
|
|
46
|
+
sink: AlertSink;
|
|
47
|
+
/** Called for every verdict, healthy or not — the hook for a counter or a
|
|
48
|
+
* metrics push. Alerts are for humans; this is for graphs. */
|
|
49
|
+
onVerdict?(verdict: {
|
|
50
|
+
product: string;
|
|
51
|
+
healthy: boolean;
|
|
52
|
+
kinds: string[];
|
|
53
|
+
durationMs: number;
|
|
54
|
+
}): void;
|
|
55
|
+
/** Page when a turn was answered by a gate instead of the model.
|
|
56
|
+
*
|
|
57
|
+
* Default `false`, and the default is the honest one: gating is a legitimate
|
|
58
|
+
* design and a product that gates its intake would otherwise page on every
|
|
59
|
+
* healthy turn. Whether the rate is pathological is domain knowledge, so it
|
|
60
|
+
* stays a product decision — the verdict is ALWAYS reported through
|
|
61
|
+
* {@link TurnHealthLifecycleOptions.onVerdict} so a counter can watch the
|
|
62
|
+
* rate even when nobody is paged. */
|
|
63
|
+
alertOnGatedTurn?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the lifecycle hooks that page on a turn which succeeded at nothing.
|
|
67
|
+
*
|
|
68
|
+
* The live lane sees `finalText` and usage but not the persisted parts, so it
|
|
69
|
+
* catches the blank-completion and hard-failure shapes immediately. The
|
|
70
|
+
* parts-dependent shapes (a tool call whose arguments never parsed, a tool
|
|
71
|
+
* call that left no effect) are caught by {@link sweepSilentFailures}, which
|
|
72
|
+
* reads what was actually written to the store — the honest place to ask
|
|
73
|
+
* whether an effect persisted.
|
|
74
|
+
*/
|
|
75
|
+
export declare function createTurnHealthLifecycle(options: TurnHealthLifecycleOptions): TurnHealthLifecycle;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a silent-failure verdict GOES.
|
|
3
|
+
*
|
|
4
|
+
* The detection half is worthless without this half. Every failure this module
|
|
5
|
+
* finds was already visible in the database the whole time — 255 unanswered
|
|
6
|
+
* messages sat in a table for 17 days. What was missing was not the data, it
|
|
7
|
+
* was delivery to a human who had not thought to look.
|
|
8
|
+
*
|
|
9
|
+
* So the sink is a seam, not a channel: the product supplies the transport,
|
|
10
|
+
* and agent-app ships the two shapes the fleet already has credentials for
|
|
11
|
+
* (an ops webhook, and stderr). No new channel is invented here.
|
|
12
|
+
*/
|
|
13
|
+
import { type TurnHealthReason, type TurnHealthSeverity } from './classify.js';
|
|
14
|
+
/** One deliverable alert. */
|
|
15
|
+
export interface TurnHealthAlert {
|
|
16
|
+
/** Which product raised it (`projectId`). Alerts from four products land in
|
|
17
|
+
* one channel, so this is what makes the message actionable. */
|
|
18
|
+
product: string;
|
|
19
|
+
severity: TurnHealthSeverity;
|
|
20
|
+
/** Stable grouping key. Throttling is keyed on this, so it must NOT contain
|
|
21
|
+
* a turn id or a timestamp or every alert is unique and nothing dedupes. */
|
|
22
|
+
key: string;
|
|
23
|
+
title: string;
|
|
24
|
+
/** Human-readable lines. */
|
|
25
|
+
details: string[];
|
|
26
|
+
/** Structured payload for a machine consumer. */
|
|
27
|
+
data?: Record<string, unknown>;
|
|
28
|
+
at: number;
|
|
29
|
+
}
|
|
30
|
+
/** Deliver an alert. Implementations MUST NOT throw — see
|
|
31
|
+
* {@link createGuardedAlertSink}. */
|
|
32
|
+
export interface AlertSink {
|
|
33
|
+
deliver(alert: TurnHealthAlert): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
/** Build the alert for a set of reasons found on one turn. */
|
|
36
|
+
export declare function turnAlert(input: {
|
|
37
|
+
product: string;
|
|
38
|
+
severity: TurnHealthSeverity;
|
|
39
|
+
reasons: TurnHealthReason[];
|
|
40
|
+
threadId?: string;
|
|
41
|
+
turnId?: string;
|
|
42
|
+
model?: string;
|
|
43
|
+
at?: number;
|
|
44
|
+
}): TurnHealthAlert;
|
|
45
|
+
/** Minimal structural fetch, so this module has no lib-dom dependency and can
|
|
46
|
+
* be driven by a fake in tests. */
|
|
47
|
+
export type FetchLike = (url: string, init: {
|
|
48
|
+
method: string;
|
|
49
|
+
headers: Record<string, string>;
|
|
50
|
+
body: string;
|
|
51
|
+
}) => Promise<{
|
|
52
|
+
ok: boolean;
|
|
53
|
+
status: number;
|
|
54
|
+
text?(): Promise<string>;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* POST to an incoming webhook in the Slack message format.
|
|
58
|
+
*
|
|
59
|
+
* Chosen because the org already runs one (`SLACK_OPS_WEBHOOK_URL`) and
|
|
60
|
+
* gtm-agent's outbound webhook code already speaks this exact shape — the
|
|
61
|
+
* instruction was to route somewhere humans already look, not to stand up a
|
|
62
|
+
* new channel. Discord and most log drains accept the same `{text}` body.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createWebhookAlertSink(options: {
|
|
65
|
+
webhookUrl: string;
|
|
66
|
+
fetchImpl?: FetchLike;
|
|
67
|
+
}): AlertSink;
|
|
68
|
+
/**
|
|
69
|
+
* POST to Slack `chat.postMessage` with a bot token.
|
|
70
|
+
*
|
|
71
|
+
* This is the transport the org actually has. A survey of the four product
|
|
72
|
+
* repos found NO ops alert path of any kind — no incoming webhook, no pager, no
|
|
73
|
+
* notifier — which is the mechanical reason a 17-day outage never reached a
|
|
74
|
+
* human. What does exist is a Slack bot token in the shared secrets store, and
|
|
75
|
+
* `@tangle-network/agent-integrations` already speaks this exact API, so this
|
|
76
|
+
* routes alerts through the channel the org runs rather than standing up a new
|
|
77
|
+
* one.
|
|
78
|
+
*
|
|
79
|
+
* Slack answers `200 OK` with `{"ok": false, "error": "..."}` for an invalid
|
|
80
|
+
* token or channel, so the body is checked and not just the status — a
|
|
81
|
+
* transport that reports success on a rejected post would make the alerter
|
|
82
|
+
* itself a silent failure.
|
|
83
|
+
*/
|
|
84
|
+
export declare function createSlackBotAlertSink(options: {
|
|
85
|
+
botToken: string;
|
|
86
|
+
channel: string;
|
|
87
|
+
fetchImpl?: FetchLike;
|
|
88
|
+
}): AlertSink;
|
|
89
|
+
/** stderr sink. The zero-config fallback so a product that has not yet been
|
|
90
|
+
* given a webhook still emits something a log search can find. */
|
|
91
|
+
export declare function createConsoleAlertSink(log?: (message: string) => void): AlertSink;
|
|
92
|
+
/** Fan out to several sinks. One failing transport must not stop the others. */
|
|
93
|
+
export declare function createMultiAlertSink(sinks: readonly AlertSink[]): AlertSink;
|
|
94
|
+
/** Records the last time a key was alerted on. A product backs this with KV,
|
|
95
|
+
* D1, or a Durable Object; the in-memory default is correct for a sweep that
|
|
96
|
+
* runs as a single cron invocation. */
|
|
97
|
+
export interface AlertThrottleStore {
|
|
98
|
+
lastSentAt(key: string): Promise<number | null>;
|
|
99
|
+
markSent(key: string, at: number): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
/** Process-local throttle store. */
|
|
102
|
+
export declare function createMemoryThrottleStore(): AlertThrottleStore;
|
|
103
|
+
/**
|
|
104
|
+
* Collapse repeats of the same `key` inside `windowMs`.
|
|
105
|
+
*
|
|
106
|
+
* Deliberately re-alerts once per window rather than going silent after the
|
|
107
|
+
* first: an incident that is still burning must keep saying so. Going quiet
|
|
108
|
+
* after one message is how a 17-day outage stays invisible after someone
|
|
109
|
+
* dismisses the first notification.
|
|
110
|
+
*/
|
|
111
|
+
export declare function createThrottledAlertSink(inner: AlertSink, options: {
|
|
112
|
+
windowMs: number;
|
|
113
|
+
store?: AlertThrottleStore;
|
|
114
|
+
}): AlertSink;
|
|
115
|
+
/**
|
|
116
|
+
* Swallow transport errors so telemetry can never fail the turn it measures.
|
|
117
|
+
*
|
|
118
|
+
* Use this at the LIVE lifecycle call site only. A sweep should let the error
|
|
119
|
+
* surface, because a sweep that cannot deliver has done nothing at all and its
|
|
120
|
+
* cron run should go red.
|
|
121
|
+
*/
|
|
122
|
+
export declare function createGuardedAlertSink(inner: AlertSink, onError?: (error: unknown) => void): AlertSink;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SWEEP half: ask the store what it has been quietly accumulating.
|
|
3
|
+
*
|
|
4
|
+
* A live per-turn hook cannot see the failure that matters most, because the
|
|
5
|
+
* worst outage produced NO turns at all to hook: gtm-agent took 9–21 user
|
|
6
|
+
* messages a day for sixteen straight days and wrote zero real assistant
|
|
7
|
+
* replies. Nothing crashed on a schedule; the product simply stopped
|
|
8
|
+
* answering. The only thing that could have noticed is something that
|
|
9
|
+
* periodically counts what arrived against what was answered.
|
|
10
|
+
*
|
|
11
|
+
* That is this. It runs on a cron, reads the shared `/chat-store` schema, and
|
|
12
|
+
* pages when the ratio breaks.
|
|
13
|
+
*
|
|
14
|
+
* The queries live HERE and not in each product because all four products
|
|
15
|
+
* (gtm, tax, legal, workcomp) persist to the same `message`/`thread` tables —
|
|
16
|
+
* four copies of this cron is exactly the duplication the repo's engine/shell
|
|
17
|
+
* rule exists to prevent.
|
|
18
|
+
*/
|
|
19
|
+
import type { AlertSink, TurnHealthAlert } from './sink.js';
|
|
20
|
+
/** A thread that has taken user messages with no reply since. */
|
|
21
|
+
export interface UnansweredThread {
|
|
22
|
+
threadId: string;
|
|
23
|
+
/** User messages newer than the newest real assistant reply. */
|
|
24
|
+
pendingMessages: number;
|
|
25
|
+
/** Age of the OLDEST unanswered user message, in ms. */
|
|
26
|
+
oldestAgeMs: number;
|
|
27
|
+
}
|
|
28
|
+
/** A persisted assistant row, as the sweep needs to judge it. */
|
|
29
|
+
export interface PersistedTurnRow {
|
|
30
|
+
id: string;
|
|
31
|
+
threadId: string;
|
|
32
|
+
content: string;
|
|
33
|
+
/** Raw `parts` column. A JSON string or an already-parsed array; the sweep
|
|
34
|
+
* accepts both because D1 drivers differ. */
|
|
35
|
+
parts: unknown;
|
|
36
|
+
outputTokens?: number | null;
|
|
37
|
+
model?: string | null;
|
|
38
|
+
createdAt: number;
|
|
39
|
+
}
|
|
40
|
+
/** What the sweep needs from a store. A product on a non-standard schema
|
|
41
|
+
* implements these two reads; everything else is shared. */
|
|
42
|
+
export interface TurnHealthSource {
|
|
43
|
+
findUnansweredThreads(input: {
|
|
44
|
+
minAgeMs: number;
|
|
45
|
+
/** Ignore user messages older than this. See {@link SweepOptions.maxAgeMs}. */
|
|
46
|
+
maxAgeMs: number;
|
|
47
|
+
now: number;
|
|
48
|
+
}): Promise<UnansweredThread[]>;
|
|
49
|
+
listRecentAssistantTurns(input: {
|
|
50
|
+
sinceMs: number;
|
|
51
|
+
now: number;
|
|
52
|
+
limit: number;
|
|
53
|
+
}): Promise<PersistedTurnRow[]>;
|
|
54
|
+
}
|
|
55
|
+
export interface SweepOptions {
|
|
56
|
+
product: string;
|
|
57
|
+
source: TurnHealthSource;
|
|
58
|
+
sink: AlertSink;
|
|
59
|
+
/** A user message must go unanswered this long before it counts. Guards
|
|
60
|
+
* against alerting on a turn that is simply still streaming. Default 15 min. */
|
|
61
|
+
minAgeMs?: number;
|
|
62
|
+
/**
|
|
63
|
+
* A user message OLDER than this is abandoned, not unanswered — it stops
|
|
64
|
+
* counting. Default 7 days.
|
|
65
|
+
*
|
|
66
|
+
* Without this bound the sweep is worse than useless. gtm-agent's table
|
|
67
|
+
* holds 384 unanswered messages whose oldest is 1,676 h (70 days) old;
|
|
68
|
+
* paging hourly on a backlog nobody will ever reply to is exactly how an
|
|
69
|
+
* alert channel gets muted, and a muted channel is the state this module
|
|
70
|
+
* exists to escape. The alert has to mean "something broke recently".
|
|
71
|
+
*/
|
|
72
|
+
maxAgeMs?: number;
|
|
73
|
+
/** How far back to judge settled turns. Default 24 h. */
|
|
74
|
+
lookbackMs?: number;
|
|
75
|
+
/** Cap on rows judged per sweep. Default 500. */
|
|
76
|
+
limit?: number;
|
|
77
|
+
/** Fraction of recent turns allowed to be silently broken before paging.
|
|
78
|
+
* Default 0.05 — the measured blank-completion rate on the tax tool surface
|
|
79
|
+
* was 12.2%, so 5% separates a real regression from noise. */
|
|
80
|
+
emptyRateThreshold?: number;
|
|
81
|
+
/** Absolute floor: never page on a rate computed from fewer turns than this. */
|
|
82
|
+
minTurnsForRate?: number;
|
|
83
|
+
/** Declare that this product's deliverable comes from TOOL calls, which
|
|
84
|
+
* switches on the dead-tool-surface detector.
|
|
85
|
+
*
|
|
86
|
+
* Opt-in because only the product knows: a copilot that answers from context
|
|
87
|
+
* is perfectly healthy with zero tool calls, while an agent whose entire job
|
|
88
|
+
* is to file, draft, or submit something is broken the moment its tool
|
|
89
|
+
* surface goes quiet — and broken INVISIBLY, because every turn still
|
|
90
|
+
* returns fluent prose and HTTP 200.
|
|
91
|
+
*
|
|
92
|
+
* This is the fourth failure shape, and the only one no per-turn rule can
|
|
93
|
+
* see.
|
|
94
|
+
*
|
|
95
|
+
* The verdict is drawn ONLY over turns whose parts were present and
|
|
96
|
+
* readable. An earlier revision counted rows that stored no parts, and the
|
|
97
|
+
* production example this comment used to cite was that bug rather than a
|
|
98
|
+
* finding: tax-agent's 97 parts-less rows all predate its parts persistence
|
|
99
|
+
* (they stop at 2026-07-17T02:20Z, the encrypted rows start 02:58Z), while
|
|
100
|
+
* the same database's `turn_events` table holds 243 `tool_call` frames over
|
|
101
|
+
* 15 turns. The tool surface was never dead; the rows were empty. */
|
|
102
|
+
expectsToolCalls?: boolean;
|
|
103
|
+
/** Turns needed before a dead tool surface is called. Default 10. */
|
|
104
|
+
minTurnsForToolSurface?: number;
|
|
105
|
+
/**
|
|
106
|
+
* Make an at-rest parts encoding readable, so this sweep can judge a product
|
|
107
|
+
* that does not store parts in the clear.
|
|
108
|
+
*
|
|
109
|
+
* Without it, a product that encrypts `parts` (tax-agent wraps the whole
|
|
110
|
+
* array in one `__encrypted_parts__` part) is permanently UNMEASURABLE by the
|
|
111
|
+
* tool-surface rule: every row is opaque, so the honest verdict is "cannot
|
|
112
|
+
* certify" forever. This seam is how such a product gets a real verdict
|
|
113
|
+
* instead of permanent blindness — the sweep stays domain-free and the
|
|
114
|
+
* product supplies the decoder.
|
|
115
|
+
*
|
|
116
|
+
* Return the decoded parts value (it is parsed exactly like a stored one).
|
|
117
|
+
* Returning `null`/`undefined` or THROWING leaves the row's stored value in
|
|
118
|
+
* place, so a decoder that fails reports the row as opaque. It must never
|
|
119
|
+
* report success as an empty array: that manufactures the exact absent-parts
|
|
120
|
+
* blindness this module now refuses to draw conclusions from.
|
|
121
|
+
*/
|
|
122
|
+
decodeParts?: (raw: unknown, row: PersistedTurnRow) => Promise<unknown> | unknown;
|
|
123
|
+
now?: number;
|
|
124
|
+
}
|
|
125
|
+
/** What the sweep found. Returned as well as alerted, so a cron can log it and
|
|
126
|
+
* a test can assert on it. */
|
|
127
|
+
export interface SweepResult {
|
|
128
|
+
product: string;
|
|
129
|
+
unansweredThreads: number;
|
|
130
|
+
pendingUserMessages: number;
|
|
131
|
+
oldestUnansweredMs: number;
|
|
132
|
+
turnsJudged: number;
|
|
133
|
+
unhealthyTurns: number;
|
|
134
|
+
emptyCompletions: number;
|
|
135
|
+
malformedToolCalls: number;
|
|
136
|
+
toolCallsWithoutEffect: number;
|
|
137
|
+
/** Tool calls the harness rejected while settling them as `completed`. */
|
|
138
|
+
rejectedToolCalls: number;
|
|
139
|
+
/** Turns carrying at least one tool part. */
|
|
140
|
+
turnsWithToolCalls: number;
|
|
141
|
+
/** Total tool parts across the window. */
|
|
142
|
+
toolCalls: number;
|
|
143
|
+
/** Turns the classifier could not interpret at all (encrypted at rest, or a
|
|
144
|
+
* part vocabulary this module does not know). These are EXCLUDED from
|
|
145
|
+
* `turnsJudged`-based rates — a rate computed over rows nobody could read is
|
|
146
|
+
* a fabricated number. */
|
|
147
|
+
unreadableTurns: number;
|
|
148
|
+
/** Turns whose PARTS could not be interpreted. A superset of
|
|
149
|
+
* {@link unreadableTurns} (a row can have readable text and opaque parts).
|
|
150
|
+
* No tool verdict is drawn over these. */
|
|
151
|
+
opaquePartsTurns: number;
|
|
152
|
+
/** Turns that persisted NO parts at all. Distinct from
|
|
153
|
+
* {@link opaquePartsTurns}: nothing failed to parse, there was simply
|
|
154
|
+
* nothing there. Also excluded from every tool verdict. */
|
|
155
|
+
noPartsTurns: number;
|
|
156
|
+
/** Turns a tool verdict may actually be drawn from — parts present AND
|
|
157
|
+
* interpretable. The denominator behind `dead_tool_surface`. */
|
|
158
|
+
toolReadableTurns: number;
|
|
159
|
+
alerts: TurnHealthAlert[];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Assistant-row openers agent-app writes ITSELF when a sandbox turn fails.
|
|
163
|
+
*
|
|
164
|
+
* Kept byte-identical to the strings `createSandboxChatProducer` composes
|
|
165
|
+
* (`src/chat-routes/sandbox-producer.ts`). They are shell vocabulary, not
|
|
166
|
+
* product domain, so recognising them is this package's job — a product on
|
|
167
|
+
* the shared producer gets a correct sweep with no configuration.
|
|
168
|
+
*
|
|
169
|
+
* `tests/turn-health/turn-health.test.ts` pins these against the producer, so
|
|
170
|
+
* changing the producer's wording without changing this list fails CI rather
|
|
171
|
+
* than silently making dead threads look answered.
|
|
172
|
+
*/
|
|
173
|
+
/** D1's maximum LIKE pattern length, including the trailing `%`. Measured, not
|
|
174
|
+
* documented: 50 succeeds, 51 raises `SQLITE_ERROR: LIKE or GLOB pattern too
|
|
175
|
+
* complex`. */
|
|
176
|
+
export declare const D1_MAX_LIKE_PATTERN_LENGTH = 50;
|
|
177
|
+
export declare const SHELL_ERROR_REPLY_PREFIXES: readonly string[];
|
|
178
|
+
/**
|
|
179
|
+
* Run one sweep and deliver whatever it finds.
|
|
180
|
+
*
|
|
181
|
+
* Errors from the sink are NOT swallowed here (unlike the live lane): a sweep
|
|
182
|
+
* that could not deliver has accomplished nothing, and its cron invocation
|
|
183
|
+
* should go red rather than report a clean run.
|
|
184
|
+
*/
|
|
185
|
+
export declare function sweepSilentFailures(options: SweepOptions): Promise<SweepResult>;
|
|
186
|
+
/** Minimal structural D1 contract (Cloudflare's `D1Database` satisfies it). */
|
|
187
|
+
export interface D1LikeForHealth {
|
|
188
|
+
prepare(sql: string): {
|
|
189
|
+
bind(...values: unknown[]): {
|
|
190
|
+
all<T = Record<string, unknown>>(): Promise<{
|
|
191
|
+
results: T[];
|
|
192
|
+
}>;
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* The sweep source for products on the canonical `/chat-store` tables.
|
|
198
|
+
*
|
|
199
|
+
* "Answered" deliberately means an assistant row with NON-EMPTY content. A
|
|
200
|
+
* blank assistant row is what a broken turn writes, so counting it as an
|
|
201
|
+
* answer would let the exact failure being hunted mark itself resolved. That
|
|
202
|
+
* single predicate is the difference between this catching the gtm outage and
|
|
203
|
+
* sleeping through it — during those sixteen days the table was NOT empty.
|
|
204
|
+
*
|
|
205
|
+
* The query deliberately does NOT join the thread table. Products do not all
|
|
206
|
+
* keep one: tax-agent's `thread` table holds zero rows because it groups by
|
|
207
|
+
* its own `tax_sessions`, and an inner join against it silently reported "0
|
|
208
|
+
* unanswered threads, healthy" while 18 real messages sat unanswered. A
|
|
209
|
+
* detector that reports healthy because its join found nothing is the same
|
|
210
|
+
* bug class it was built to catch.
|
|
211
|
+
*/
|
|
212
|
+
export declare function createD1TurnHealthSource(db: D1LikeForHealth, options?: {
|
|
213
|
+
messageTable?: string;
|
|
214
|
+
threadTable?: string;
|
|
215
|
+
/**
|
|
216
|
+
* Content prefixes that mark an assistant row as an ERROR SURFACE rather
|
|
217
|
+
* than an answer. A row matching one of these stops counting as a reply,
|
|
218
|
+
* so the thread keeps reporting as unanswered.
|
|
219
|
+
*
|
|
220
|
+
* This exists because the obvious rule — "an assistant row with non-empty
|
|
221
|
+
* content is an answer" — is wrong in the exact case that matters. On
|
|
222
|
+
* 2026-07-27 gtm-agent's newest assistant row read:
|
|
223
|
+
*
|
|
224
|
+
* "The sandbox model stream stopped before a clean completion.
|
|
225
|
+
* Error: All 2 model(s) failed. gpt-5-mini: TANGLE_HUB_URL is required …"
|
|
226
|
+
*
|
|
227
|
+
* 246 characters of well-formed prose that answers nothing. Counting it
|
|
228
|
+
* marks a dead product healthy — the same failure-returning-success shape
|
|
229
|
+
* this module exists to catch, recursing into the detector itself.
|
|
230
|
+
*
|
|
231
|
+
* There is no schema-level way to recognise it: `output_tokens IS NULL`
|
|
232
|
+
* looked promising until legal-agent showed 22 of 25 GENUINE replies with
|
|
233
|
+
* null usage — it would have reported a working product broken.
|
|
234
|
+
*
|
|
235
|
+
* Defaults to {@link SHELL_ERROR_REPLY_PREFIXES}, the openers agent-app
|
|
236
|
+
* ITSELF writes in `createSandboxChatProducer`. Those are not domain —
|
|
237
|
+
* this package composed them, so this package is what must recognise
|
|
238
|
+
* them, and every product on the shared producer is correct with no
|
|
239
|
+
* configuration. Pass your own list to ADD product-specific error prose;
|
|
240
|
+
* pass `[]` to disable the rule.
|
|
241
|
+
*
|
|
242
|
+
* Prefixes are bound as query parameters, never interpolated.
|
|
243
|
+
*/
|
|
244
|
+
errorReplyPrefixes?: readonly string[];
|
|
245
|
+
}): TurnHealthSource;
|