@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
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { KnowledgeResearchLoopContext, AddSourceTextInput, SourceAdapter, RunKnowledgeResearchLoopOptions, KnowledgeResearchLoopResult } from '@tangle-network/agent-knowledge';
|
|
2
|
-
import { KnowledgeSourceSpec, AgentKnowledgeConfig } from '../config/index.js';
|
|
3
|
-
import '../knowledge/index.js';
|
|
4
|
-
import '@tangle-network/agent-eval';
|
|
5
|
-
import '../model-CdCDfBA9.js';
|
|
6
|
-
|
|
7
1
|
/**
|
|
8
2
|
* `@tangle-network/agent-app/knowledge-loop` — wire the declarative
|
|
9
3
|
* `AgentKnowledgeConfig` to a running, source-grounded, eval-gated knowledge
|
|
@@ -45,14 +39,15 @@ import '../model-CdCDfBA9.js';
|
|
|
45
39
|
* bundled. This module imports only TYPES + the loop entry from agent-knowledge
|
|
46
40
|
* and stays substrate-free behind the `decide` / `driver` / `adapters` seams.
|
|
47
41
|
*/
|
|
48
|
-
|
|
42
|
+
import type { AddSourceTextInput, KnowledgeResearchLoopContext, KnowledgeResearchLoopResult, RunKnowledgeResearchLoopOptions, SourceAdapter } from '@tangle-network/agent-knowledge';
|
|
43
|
+
import type { AgentKnowledgeConfig, KnowledgeSourceSpec } from '../config/index';
|
|
49
44
|
/**
|
|
50
45
|
* A research candidate the decider evaluates before the loop applies it. This is
|
|
51
46
|
* the propose-don't-apply unit: notes + the sources discovered this iteration +
|
|
52
47
|
* the proposed write blocks, each carrying a confidence the gate scores against
|
|
53
48
|
* the configured `minConfidence`.
|
|
54
49
|
*/
|
|
55
|
-
interface KnowledgeCandidate {
|
|
50
|
+
export interface KnowledgeCandidate {
|
|
56
51
|
/** Human-readable research transcript for this iteration. */
|
|
57
52
|
notes?: string;
|
|
58
53
|
/**
|
|
@@ -80,7 +75,7 @@ interface KnowledgeCandidate {
|
|
|
80
75
|
metadata?: Record<string, unknown>;
|
|
81
76
|
}
|
|
82
77
|
/** The verdict a gate returns for one candidate. */
|
|
83
|
-
interface KnowledgeGateVerdict {
|
|
78
|
+
export interface KnowledgeGateVerdict {
|
|
84
79
|
/** Whether the candidate's proposal is accepted (applied) or gated out. */
|
|
85
80
|
accepted: boolean;
|
|
86
81
|
/** Why — surfaced in the decision metadata for audit. */
|
|
@@ -96,11 +91,11 @@ interface KnowledgeGateVerdict {
|
|
|
96
91
|
* verdict on it. This is the seam an agentic judge or a sandbox run plugs into;
|
|
97
92
|
* the default {@link createReviewerDecider} is a confidence gate.
|
|
98
93
|
*/
|
|
99
|
-
interface KnowledgeDecider {
|
|
94
|
+
export interface KnowledgeDecider {
|
|
100
95
|
(input: KnowledgeDeciderInput): Promise<KnowledgeDecision> | KnowledgeDecision;
|
|
101
96
|
}
|
|
102
97
|
/** Define the input parameters required to decide knowledge proposals within an agent-knowledge loop */
|
|
103
|
-
interface KnowledgeDeciderInput {
|
|
98
|
+
export interface KnowledgeDeciderInput {
|
|
104
99
|
/** The agent-knowledge loop context for this iteration. */
|
|
105
100
|
context: KnowledgeResearchLoopContext;
|
|
106
101
|
/** The acquisition goal (from `config.loop.goal` or a deps fallback). */
|
|
@@ -115,7 +110,7 @@ interface KnowledgeDeciderInput {
|
|
|
115
110
|
driver?: KnowledgeLoopDriver;
|
|
116
111
|
}
|
|
117
112
|
/** Define a decision containing a candidate and the gate's verdict on that candidate */
|
|
118
|
-
interface KnowledgeDecision {
|
|
113
|
+
export interface KnowledgeDecision {
|
|
119
114
|
/** The candidate the policy produced (may be empty to end the loop). */
|
|
120
115
|
candidate: KnowledgeCandidate;
|
|
121
116
|
/** The gate's verdict on the candidate's proposal. */
|
|
@@ -128,7 +123,7 @@ interface KnowledgeDecision {
|
|
|
128
123
|
* without this module importing the runtime engine. A deterministic / sandbox
|
|
129
124
|
* decider may omit it.
|
|
130
125
|
*/
|
|
131
|
-
interface KnowledgeLoopDriver {
|
|
126
|
+
export interface KnowledgeLoopDriver {
|
|
132
127
|
(opts: {
|
|
133
128
|
systemPrompt: string;
|
|
134
129
|
userMessage: string;
|
|
@@ -137,7 +132,7 @@ interface KnowledgeLoopDriver {
|
|
|
137
132
|
}>;
|
|
138
133
|
}
|
|
139
134
|
/** Define dependencies required to create and run a knowledge processing loop */
|
|
140
|
-
interface CreateKnowledgeLoopDeps {
|
|
135
|
+
export interface CreateKnowledgeLoopDeps {
|
|
141
136
|
/**
|
|
142
137
|
* The knowledge-base root the loop reads/writes (an agent-knowledge layout).
|
|
143
138
|
* Required — agent-knowledge owns disk; agent-app owns only the wiring.
|
|
@@ -174,7 +169,7 @@ interface CreateKnowledgeLoopDeps {
|
|
|
174
169
|
onStep?: RunKnowledgeResearchLoopOptions['onStep'];
|
|
175
170
|
}
|
|
176
171
|
/** The handle `createKnowledgeLoop` returns. */
|
|
177
|
-
interface KnowledgeLoop {
|
|
172
|
+
export interface KnowledgeLoop {
|
|
178
173
|
/** Run the acquisition loop to completion and return the agent-knowledge result. */
|
|
179
174
|
run(): Promise<KnowledgeResearchLoopResult>;
|
|
180
175
|
/** The resolved goal the loop pursues. */
|
|
@@ -192,7 +187,7 @@ interface KnowledgeLoop {
|
|
|
192
187
|
* accepted (nothing to gate). This is the floor policy; swap in an agentic judge
|
|
193
188
|
* or a sandbox-run decider via `deps.decide` for richer review.
|
|
194
189
|
*/
|
|
195
|
-
declare function reviewCandidate(candidate: KnowledgeCandidate, minConfidence: number): KnowledgeGateVerdict;
|
|
190
|
+
export declare function reviewCandidate(candidate: KnowledgeCandidate, minConfidence: number): KnowledgeGateVerdict;
|
|
196
191
|
/**
|
|
197
192
|
* Wrap a candidate-producing policy in the default reviewer gate. The policy
|
|
198
193
|
* decides WHAT to propose (notes, sources, proposalText, confidence); the gate
|
|
@@ -200,12 +195,10 @@ declare function reviewCandidate(candidate: KnowledgeCandidate, minConfidence: n
|
|
|
200
195
|
* want the standard confidence gate; pass a full {@link KnowledgeDecider} to
|
|
201
196
|
* `deps.decide` to own the gate too.
|
|
202
197
|
*/
|
|
203
|
-
declare function createReviewerDecider(propose: (input: KnowledgeDeciderInput) => Promise<KnowledgeCandidate> | KnowledgeCandidate): KnowledgeDecider;
|
|
198
|
+
export declare function createReviewerDecider(propose: (input: KnowledgeDeciderInput) => Promise<KnowledgeCandidate> | KnowledgeCandidate): KnowledgeDecider;
|
|
204
199
|
/**
|
|
205
200
|
* Build a runnable knowledge-acquisition loop from the product's
|
|
206
201
|
* `AgentKnowledgeConfig` and a small set of seams. Maps config → agent-knowledge
|
|
207
202
|
* `runKnowledgeResearchLoop` options; never reimplements the loop.
|
|
208
203
|
*/
|
|
209
|
-
declare function createKnowledgeLoop(knowledge: AgentKnowledgeConfig, deps: CreateKnowledgeLoopDeps): KnowledgeLoop;
|
|
210
|
-
|
|
211
|
-
export { type CreateKnowledgeLoopDeps, type KnowledgeCandidate, type KnowledgeDecider, type KnowledgeDeciderInput, type KnowledgeDecision, type KnowledgeGateVerdict, type KnowledgeLoop, type KnowledgeLoopDriver, createKnowledgeLoop, createReviewerDecider, reviewCandidate };
|
|
204
|
+
export declare function createKnowledgeLoop(knowledge: AgentKnowledgeConfig, deps: CreateKnowledgeLoopDeps): KnowledgeLoop;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check 2 — dead-end empty states.
|
|
3
|
+
*
|
|
4
|
+
* The defect, measured on one vertical: 21 empty states, 11 of them offering no
|
|
5
|
+
* next action. A screen that says "No deadlines tracked yet" and nothing else
|
|
6
|
+
* has told the reader they are in the right place and stranded them there. It
|
|
7
|
+
* is the cheapest, most repeated legibility failure in the fleet, and it is
|
|
8
|
+
* mechanically detectable: the empty branch renders no button, no link, no form
|
|
9
|
+
* control.
|
|
10
|
+
*
|
|
11
|
+
* ── How the empty branch is scoped ───────────────────────────────────────────
|
|
12
|
+
*
|
|
13
|
+
* The interesting part is not finding the words, it is deciding what subtree
|
|
14
|
+
* "the empty state" means. Walking up to the page root would find some button
|
|
15
|
+
* somewhere and never report anything; stopping at the `<p>` would report every
|
|
16
|
+
* empty state, action or not.
|
|
17
|
+
*
|
|
18
|
+
* The lexer records, for each element, the `{` of its enclosing JSX expression
|
|
19
|
+
* container. Elements sharing a container are one conditional branch — exactly
|
|
20
|
+
* how empty states are written:
|
|
21
|
+
*
|
|
22
|
+
* {rows.length === 0 && ( ← container
|
|
23
|
+
* <div className="empty"> ← branch root, same container
|
|
24
|
+
* <p>No deadlines tracked yet</p>
|
|
25
|
+
* </div>
|
|
26
|
+
* )}
|
|
27
|
+
*
|
|
28
|
+
* So the branch root is the outermost ancestor sharing the text's container,
|
|
29
|
+
* and the subtree searched for an action is exactly that branch. A component
|
|
30
|
+
* that takes its empty copy as props (`emptyTitle="No sessions yet"`) is its own
|
|
31
|
+
* root, and its action props are read the same way.
|
|
32
|
+
*
|
|
33
|
+
* Recall limit: copy held in a variable or returned from a helper is invisible
|
|
34
|
+
* to a lexer, and an "action" reached only through a child component's internals
|
|
35
|
+
* is assumed present when that component takes an action-shaped prop.
|
|
36
|
+
*
|
|
37
|
+
* ── A titled section's zero-state is not a dead end ──────────────────────────
|
|
38
|
+
*
|
|
39
|
+
* The one measured false-positive class, and the one that decides whether this
|
|
40
|
+
* check survives contact with a team. A contract detail screen carries four
|
|
41
|
+
* zero-states — "No parties recorded.", "No open findings.", "No resolved
|
|
42
|
+
* findings yet.", "No renewal alerts configured." — one under each `<h2>`. None
|
|
43
|
+
* of them strands anybody: the screen is full, the reader is oriented, and the
|
|
44
|
+
* line is the honest label for a section that is empty. Reporting all four (and
|
|
45
|
+
* a table's "No findings." beside its own Run button, and a kanban column's "No
|
|
46
|
+
* filings") buries the defect this check exists for — the screen whose ENTIRE
|
|
47
|
+
* body is "No deadlines tracked yet".
|
|
48
|
+
*
|
|
49
|
+
* So a branch whose nearest preceding SIBLING is a heading is a section label
|
|
50
|
+
* and is not reported. Measured over two production verticals: 21 findings → 12,
|
|
51
|
+
* removing 8 section labels and 1 success state, and keeping every page-level
|
|
52
|
+
* dead end. The recall cost is a real one — a screen whose whole body is one
|
|
53
|
+
* titled, actionless section reads as a section here — and `emptyState:
|
|
54
|
+
* { reportSectionZeroStates: true }` turns it back on.
|
|
55
|
+
*/
|
|
56
|
+
import type { ScannedFile } from '../scan';
|
|
57
|
+
import type { EmptyStateOptions, RawFinding } from '../types';
|
|
58
|
+
/** Run the dead-end empty-state check over one lexed file. */
|
|
59
|
+
export declare function checkEmptyStates(file: ScannedFile, options?: EmptyStateOptions): RawFinding[];
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check 5 — a capability with no door.
|
|
3
|
+
*
|
|
4
|
+
* Two deterministic engines shipped in this fleet with no way to reach them: a
|
|
5
|
+
* contract redline that cites statutes, and a court-deadline calculator with 59
|
|
6
|
+
* golden tests. Both correct, both routed, neither in the navigation and
|
|
7
|
+
* neither linked from any screen. The only way to open them was to type the URL.
|
|
8
|
+
* No test failed, because every test was about the engine.
|
|
9
|
+
*
|
|
10
|
+
* This check joins two things a product already has — its route table and its
|
|
11
|
+
* navigation definition — and reports the routes that neither the navigation
|
|
12
|
+
* nor any link in the source reaches.
|
|
13
|
+
*
|
|
14
|
+
* ── Matching, and why it is by STATIC SEGMENTS ───────────────────────────────
|
|
15
|
+
*
|
|
16
|
+
* Links are written against a base that is computed at runtime:
|
|
17
|
+
*
|
|
18
|
+
* route('contracts/redline', …) under route(':workspaceId', …) under route('app', …)
|
|
19
|
+
* <Link to={`${base}/contracts/redline`}> base = `/app/${workspaceId}`
|
|
20
|
+
*
|
|
21
|
+
* Comparing strings finds nothing. So both sides are reduced to their STATIC
|
|
22
|
+
* segments — parameters and `${…}` holes drop out — and a link reaches a route
|
|
23
|
+
* when the link's segments are a suffix of the route's:
|
|
24
|
+
*
|
|
25
|
+
* route app/:workspaceId/contracts/redline → [app, contracts, redline]
|
|
26
|
+
* link `${base}/contracts/redline` → [contracts, redline] ✓ suffix
|
|
27
|
+
* link `${base}/contracts` → [contracts] ✗ (matches the parent, not this)
|
|
28
|
+
*
|
|
29
|
+
* The suffix rule is what makes the check usable without resolving `base`, and
|
|
30
|
+
* the cost is a known blind spot: a detail route (`reviews/:id`) has the same
|
|
31
|
+
* static segments as its list route, so a link to the list marks the detail
|
|
32
|
+
* reachable. That is a missed defect, never a false alarm — the deliberate
|
|
33
|
+
* direction for a gate that only survives if its reports are all real.
|
|
34
|
+
*
|
|
35
|
+
* ── Reachable FROM THE NAVIGATION, not merely linked ─────────────────────────
|
|
36
|
+
*
|
|
37
|
+
* A link is only a door if the screen holding it can itself be opened. The
|
|
38
|
+
* shipped defect is an ISLAND: a contract list, a contract detail page and a
|
|
39
|
+
* statute-citing redline engine, each linking the other two, and no navigation
|
|
40
|
+
* entry pointing at any of them. Every route in it has an inbound link, so a
|
|
41
|
+
* check that asks "does a link exist?" reports nothing at all — which is what
|
|
42
|
+
* happened, and the redline shipped unreachable.
|
|
43
|
+
*
|
|
44
|
+
* So doors are resolved transitively from the navigation:
|
|
45
|
+
*
|
|
46
|
+
* - a nav file's path literals are roots;
|
|
47
|
+
* - so is a link in a file that is NOT a route module (a shared component, a
|
|
48
|
+
* header, an index route) — it could be rendered anywhere, and assuming it
|
|
49
|
+
* is always available is the direction that removes findings rather than
|
|
50
|
+
* inventing them;
|
|
51
|
+
* - a link inside a ROUTE module counts only once that route is itself
|
|
52
|
+
* reachable, and the pass repeats to a fixpoint.
|
|
53
|
+
*
|
|
54
|
+
* An island therefore reports every route in it, which is right: one nav entry
|
|
55
|
+
* clears them all, and naming only the entry route would hide how much shipped
|
|
56
|
+
* behind it.
|
|
57
|
+
*
|
|
58
|
+
* ── What is not a screen ─────────────────────────────────────────────────────
|
|
59
|
+
*
|
|
60
|
+
* `index()` and `layout()` add no path of their own. A route whose module is
|
|
61
|
+
* not `.tsx` is a resource endpoint (the react-router convention) and is
|
|
62
|
+
* skipped by default, as is anything under `ignore` (default `api/*`).
|
|
63
|
+
*/
|
|
64
|
+
import { type ScannedFile } from '../scan';
|
|
65
|
+
import type { RawFinding, ReachabilityOptions } from '../types';
|
|
66
|
+
/** One route as declared, with its composed path. */
|
|
67
|
+
export interface RouteEntry {
|
|
68
|
+
/** Full path from the root of the route table, no leading slash. */
|
|
69
|
+
readonly path: string;
|
|
70
|
+
/** The route module, when the declaration names one. */
|
|
71
|
+
readonly module: string | null;
|
|
72
|
+
/** Offset of the path literal in the route config, for file:line. */
|
|
73
|
+
readonly offset: number;
|
|
74
|
+
/**
|
|
75
|
+
* True when the declaration nests children. Such a route renders an Outlet
|
|
76
|
+
* shell; the destination is its index child, whose path is the same string.
|
|
77
|
+
* Asking a layout for its own door reports every product's `app` wrapper.
|
|
78
|
+
*/
|
|
79
|
+
readonly isLayout: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse a `@react-router/dev/routes` config into composed route paths.
|
|
83
|
+
*
|
|
84
|
+
* Nesting is read from offset containment rather than from a grammar: a call
|
|
85
|
+
* whose parentheses sit inside another call's is that call's child, which is
|
|
86
|
+
* true of `route(p, m, [ route(…) ])` and needs no array bookkeeping.
|
|
87
|
+
*/
|
|
88
|
+
export declare function parseRouteConfig(file: ScannedFile): RouteEntry[];
|
|
89
|
+
/** The comparable segments of a path: statics only, params and holes dropped. */
|
|
90
|
+
export declare function staticSegments(path: string): string[];
|
|
91
|
+
export interface ReachabilityInput {
|
|
92
|
+
/** Every scanned product file — the source of in-source links. */
|
|
93
|
+
readonly files: readonly ScannedFile[];
|
|
94
|
+
readonly options: ReachabilityOptions;
|
|
95
|
+
}
|
|
96
|
+
export interface ReachabilityResult {
|
|
97
|
+
readonly findings: readonly RawFinding[];
|
|
98
|
+
/** The route config, lexed — so the runner can apply its suppressions. */
|
|
99
|
+
readonly routeFile: ScannedFile | null;
|
|
100
|
+
readonly routeCount: number;
|
|
101
|
+
}
|
|
102
|
+
/** Run the unreachable-capability check over a whole product. */
|
|
103
|
+
export declare function checkReachability({ files, options }: ReachabilityInput): ReachabilityResult;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check 4 — a failure the reader never learns about.
|
|
3
|
+
*
|
|
4
|
+
* The shape: a `catch` that clears a loading flag, or returns a fallback, and
|
|
5
|
+
* tells nobody. The request failed; the screen renders the empty state. The
|
|
6
|
+
* reader is shown "No documents yet" for a network error, believes the answer,
|
|
7
|
+
* and acts on it. That is worse than an error message, because it is a
|
|
8
|
+
* confident wrong answer rather than a visible problem.
|
|
9
|
+
*
|
|
10
|
+
* ── What passes ──────────────────────────────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* The handler surfaces the failure (an error/notice state setter, a toast, an
|
|
13
|
+
* injected `onError`), or rethrows / rejects so a boundary above can. Anything
|
|
14
|
+
* else — an empty body, `setLoading(false)`, `return []`, a lone
|
|
15
|
+
* `console.error` — is a finding. `console.error` is deliberately NOT a sink:
|
|
16
|
+
* it writes to a console the reader does not have.
|
|
17
|
+
*
|
|
18
|
+
* ── Precision ────────────────────────────────────────────────────────────────
|
|
19
|
+
*
|
|
20
|
+
* Only handlers around I/O are read. A `try { JSON.parse(raw) } catch { return
|
|
21
|
+
* {} }` is a legitimate fallback over a value already in hand, and reporting it
|
|
22
|
+
* is exactly the noise that gets a gate switched off — so a `try` block with no
|
|
23
|
+
* `await`, no request call and no `.then` is skipped entirely. A `.catch(…)`
|
|
24
|
+
* handler is always on a promise, so it needs no such test.
|
|
25
|
+
*
|
|
26
|
+
* Three narrowings were MEASURED against two production verticals, where the
|
|
27
|
+
* unnarrowed check reported 52 handlers of which 14 were real (27%) — a rate
|
|
28
|
+
* that gets a check deleted, not fixed:
|
|
29
|
+
*
|
|
30
|
+
* 1. Only modules that can reach a browser are read ({@link READERLESS_PATHS}).
|
|
31
|
+
* 31 of the 52 sat in `.server/` service modules and resource routes, where
|
|
32
|
+
* the failure IS reported — to the operator's log — and the question of what
|
|
33
|
+
* the reader is told belongs to the caller that renders. This is the single
|
|
34
|
+
* largest noise class and it is a react-router CONVENTION, not a guess:
|
|
35
|
+
* `.server` modules are compiled out of the client bundle.
|
|
36
|
+
* 2. A handler that RESTORES the prior value has surfaced the failure: the
|
|
37
|
+
* control the reader just moved visibly snaps back.
|
|
38
|
+
* 3. A handler that RETURNS words — `return 'unknown'`, `new Response('Invalid
|
|
39
|
+
* JSON', …)` — hands a distinguishable outcome to a caller that renders it.
|
|
40
|
+
* Words inside a `console` call do not count, for the reason above.
|
|
41
|
+
*
|
|
42
|
+
* The cost is stated rather than hidden: narrowing 1 gives up the real
|
|
43
|
+
* one-hop defect (a service returning `[]` on a network error, which a screen
|
|
44
|
+
* then renders as "nothing here"). That is a caller-side finding this check
|
|
45
|
+
* cannot see from the callee, and a product that wants it back passes
|
|
46
|
+
* `readerlessPaths: []`.
|
|
47
|
+
*/
|
|
48
|
+
import type { ScannedFile } from '../scan';
|
|
49
|
+
import type { RawFinding, SilentFailureOptions } from '../types';
|
|
50
|
+
/**
|
|
51
|
+
* Paths whose modules cannot render. `.server` is react-router's server-only
|
|
52
|
+
* convention (compiled out of the client bundle) and `routes/api.` its resource
|
|
53
|
+
* -route naming; a `catch` in either reports to an operator, not to a reader.
|
|
54
|
+
*/
|
|
55
|
+
export declare const READERLESS_PATHS: readonly string[];
|
|
56
|
+
/** Run the silent-failure check over one lexed file. */
|
|
57
|
+
export declare function checkSilentFailure(file: ScannedFile, options?: SilentFailureOptions): RawFinding[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check 3 — success reported before the response was read.
|
|
3
|
+
*
|
|
4
|
+
* The shipped defect: a Settings page that answered "Saved" to a 404. `fetch`
|
|
5
|
+
* resolves on 404 — it only rejects on a transport failure — so a handler that
|
|
6
|
+
* awaits it and then celebrates has not checked anything. The reader is told
|
|
7
|
+
* their change is stored; it is not; nothing in the UI ever says otherwise.
|
|
8
|
+
*
|
|
9
|
+
* ── What is required for a pass ──────────────────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* Somewhere in the same function body, the response is INSPECTED: `res.ok`,
|
|
12
|
+
* `res.status`, a destructured `{ ok }`, or a guard call the product names in
|
|
13
|
+
* `success.okGuards`. Reading `await res.json()` is not inspection — a 404 body
|
|
14
|
+
* parses fine.
|
|
15
|
+
*
|
|
16
|
+
* Two failing shapes, reported with different messages because the fixes
|
|
17
|
+
* differ:
|
|
18
|
+
*
|
|
19
|
+
* 1. awaited but unchecked — `await fetch(url, {…}); toast.success('Saved')`
|
|
20
|
+
* 2. never awaited — `fetch(url, {…}); setSaved(true)`
|
|
21
|
+
*
|
|
22
|
+
* ── Precision ────────────────────────────────────────────────────────────────
|
|
23
|
+
*
|
|
24
|
+
* Scope is the enclosing FUNCTION body, not the file: a component with a fetch
|
|
25
|
+
* in one handler and a success in another must not report. The trigger is
|
|
26
|
+
* narrow on both ends — only calls the product declares as HTTP (default:
|
|
27
|
+
* `fetch`, which is the only one in the standard library that resolves on a
|
|
28
|
+
* failed request), and only success signals that are unambiguous: `toast.success`,
|
|
29
|
+
* a `set…Saved/Success/Done/Sent/Submitted(true)` setter, or a status setter
|
|
30
|
+
* given a success word. A wrapper that throws on a bad status is correct by
|
|
31
|
+
* construction and is not a default trigger; a wrapper that does NOT throw is
|
|
32
|
+
* the same bug one level down, so a product wraps `fetch` by adding its wrapper
|
|
33
|
+
* to `httpCalls`.
|
|
34
|
+
*/
|
|
35
|
+
import type { ScannedFile } from '../scan';
|
|
36
|
+
import type { RawFinding, SuccessOptions } from '../types';
|
|
37
|
+
/** Run the unchecked-success check over one lexed file. */
|
|
38
|
+
export declare function checkUncheckedSuccess(file: ScannedFile, options?: SuccessOptions): RawFinding[];
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check 1 — engineering vocabulary on screen.
|
|
3
|
+
*
|
|
4
|
+
* The defect: a word from the codebase reaches the reader. Shipped instances
|
|
5
|
+
* include "materialized" inside a user-facing error, a column of `sourceKind`,
|
|
6
|
+
* and a chip reading `undefined`. Nobody decided to say those words; they leaked
|
|
7
|
+
* because the label and the field name were the same string.
|
|
8
|
+
*
|
|
9
|
+
* ── Precision over recall, deliberately ──────────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* A vocabulary gate lives or dies on false positives: one bad report and the
|
|
12
|
+
* check is disabled, after which it guards nothing. `grep -i artifact` over one
|
|
13
|
+
* product's `apps/web/src` returns 11 hits, all of them imports, prop names or
|
|
14
|
+
* doc comments — a checker that reports those is deleted in a week.
|
|
15
|
+
*
|
|
16
|
+
* So this check only reads positions the lexer PROVES are copy, in two tiers
|
|
17
|
+
* that are ON by default:
|
|
18
|
+
*
|
|
19
|
+
* 1. JSX text — `<p>No artifact yet</p>`. Unambiguous.
|
|
20
|
+
* 2. A JSX attribute value, when the attribute is in {@link COPY_KEYS}. An
|
|
21
|
+
* allowlist, so `className`, `data-*`, `aria-*`, `id`, `href` and every
|
|
22
|
+
* other internal attribute are excluded by construction rather than by a
|
|
23
|
+
* denylist that goes stale.
|
|
24
|
+
* 3. The first argument of a call in {@link COPY_CALLS} — `toast.error('…')`,
|
|
25
|
+
* `new Error('…')`, `setError('…')`. This is the tier that catches the
|
|
26
|
+
* flagship defect: "materialization" reached a reader from a `new Error`
|
|
27
|
+
* in a server module, not from a component.
|
|
28
|
+
*
|
|
29
|
+
* And ONE tier that is off by default, `includeObjectCopy`:
|
|
30
|
+
*
|
|
31
|
+
* 4. A string or template filling an object key named in {@link COPY_KEYS}
|
|
32
|
+
* (`emptyTitle: '…'`, `description: '…'`).
|
|
33
|
+
*
|
|
34
|
+
* Tier 4 is off because it was MEASURED as the false-positive tier. Over two
|
|
35
|
+
* production verticals it produced findings on a system prompt (`prompt:` in an
|
|
36
|
+
* agent profile), an MCP tool description the model reads, and the body of a
|
|
37
|
+
* legal document template where "Records" is a term of the drafted document —
|
|
38
|
+
* none of them on any screen. A key named `description` is model-facing about
|
|
39
|
+
* as often as it is reader-facing, and a checker that cannot tell them apart
|
|
40
|
+
* must not be the one that fails the build. Products whose data modules really
|
|
41
|
+
* do hold UI copy turn it on.
|
|
42
|
+
*
|
|
43
|
+
* Everything else — a bare string in code, an import specifier, a comment, an
|
|
44
|
+
* identifier, a test file — is not read at all. The cost is real recall: copy
|
|
45
|
+
* assembled through a variable (`const msg = base + suffix`) is invisible here,
|
|
46
|
+
* and no lexer can see it. That is the trade this check makes on purpose.
|
|
47
|
+
*/
|
|
48
|
+
import type { ScannedFile } from '../scan';
|
|
49
|
+
import type { BannedTerm, RawFinding, VocabularyOptions } from '../types';
|
|
50
|
+
/**
|
|
51
|
+
* The default list. Every entry has shipped to a real screen in this fleet or
|
|
52
|
+
* its verticals, and every one carries the sentence that replaces it — a gate
|
|
53
|
+
* that only says "don't" leaves the author to guess.
|
|
54
|
+
*/
|
|
55
|
+
export declare const DEFAULT_BANNED_TERMS: readonly BannedTerm[];
|
|
56
|
+
/**
|
|
57
|
+
* Attributes and object keys whose string value is copy. An allowlist: an
|
|
58
|
+
* attribute that is not here is never read, which is how `aria-label`,
|
|
59
|
+
* `className`, `data-testid` and `href` stay out without being enumerated.
|
|
60
|
+
*/
|
|
61
|
+
export declare const COPY_KEYS: readonly string[];
|
|
62
|
+
/** Calls whose first string argument reaches the reader. */
|
|
63
|
+
export declare const COPY_CALLS: readonly string[];
|
|
64
|
+
/** Run the vocabulary check over one lexed file. */
|
|
65
|
+
export declare function checkVocabulary(file: ScannedFile, options?: VocabularyOptions): RawFinding[];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bin's argument and config layer, split from `cli.ts` so it can be tested
|
|
3
|
+
* without executing a `main()` that calls `process.exit`.
|
|
4
|
+
*
|
|
5
|
+
* Errors are thrown as {@link LegibilityUsageError} rather than exiting here:
|
|
6
|
+
* exiting is the bin's job, and a parser that exits cannot be exercised.
|
|
7
|
+
*/
|
|
8
|
+
import { type LegibilityCheckId, type LegibilityConfig } from './types';
|
|
9
|
+
export declare const DEFAULT_CONFIG_FILE = "legibility.config.mjs";
|
|
10
|
+
/** A usage or config problem — exit code 2, never a finding. */
|
|
11
|
+
export declare class LegibilityUsageError extends Error {
|
|
12
|
+
}
|
|
13
|
+
export interface ParsedArgs {
|
|
14
|
+
srcDirs: string[];
|
|
15
|
+
navFiles: string[];
|
|
16
|
+
ignorePaths: string[];
|
|
17
|
+
skip: LegibilityCheckId[];
|
|
18
|
+
routes?: string;
|
|
19
|
+
config?: string;
|
|
20
|
+
json: boolean;
|
|
21
|
+
listSuppressions: boolean;
|
|
22
|
+
help: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare const USAGE: string;
|
|
25
|
+
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
26
|
+
/**
|
|
27
|
+
* Merge a config file with the flags. Flags WIN, so a one-off CI invocation can
|
|
28
|
+
* narrow a run without editing the committed config.
|
|
29
|
+
*/
|
|
30
|
+
export declare function mergeConfig(fromFile: Partial<LegibilityConfig>, args: ParsedArgs): LegibilityConfig;
|
package/dist/legibility/cli.d.ts
CHANGED
|
@@ -1 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* `agent-app-legibility-check` — fail a product's CI when a screen leaves its
|
|
4
|
+
* reader guessing.
|
|
5
|
+
*
|
|
6
|
+
* Runs in the PRODUCT's repo, over the product's own source, next to typecheck:
|
|
7
|
+
*
|
|
8
|
+
* "scripts": {
|
|
9
|
+
* "legibility": "agent-app-legibility-check --src src --routes src/routes.ts --nav src/components/workspace-sidebar.tsx"
|
|
10
|
+
* }
|
|
11
|
+
*
|
|
12
|
+
* Flags (repeatable where a list makes sense):
|
|
13
|
+
* --src <dir> source directory to scan (required unless the config supplies it)
|
|
14
|
+
* --routes <file> react-router route config, for the unreachable-capability check
|
|
15
|
+
* --nav <file> a file whose path literals are navigation entries
|
|
16
|
+
* --ignore <substr> skip paths containing this substring
|
|
17
|
+
* --skip <check> turn one check off wholesale (prefer a per-line suppression)
|
|
18
|
+
* --config <file> a legibility.config.mjs default-exporting the config
|
|
19
|
+
* (default: ./legibility.config.mjs when present)
|
|
20
|
+
* --json print the report as JSON instead of text
|
|
21
|
+
* --list-suppressions print every honoured suppression with its reason
|
|
22
|
+
*
|
|
23
|
+
* Exit 0 with no findings, 1 with findings, 2 on a usage or config error — the
|
|
24
|
+
* same contract as `agent-app-preflight` and `agent-app-peer-check`.
|
|
25
|
+
*/
|
|
26
|
+
export {};
|