From a7a7b05e44a57873b343a072100a498ed0c7acc2 Mon Sep 17 00:00:00 2001
From: Nick Gomez <122398915+nick-inkeep@users.noreply.github.com>
Date: Fri, 19 Jun 2026 03:43:58 -0700
Subject: [PATCH 1/2] chore(open-knowledge): drop retired workflow refs from
sample-regression help (#1988)
The sample-regression script printed `gh workflow run nightly.yml` and
`gh workflow run weekly.yml`, but both workflows were retired in #549 (the
perf-regression / parse-health / elevated-PBT tiers). A developer running
`bun run sample-regression` and following the help would hit "workflow not
found". Remove the two dead lines and the now-orphaned "+ perf regressions"
header clause; the measure:fuzz / measure:stress commands and the
specs/2026-04-19-ci-signal-quality pointer remain accurate.
GitOrigin-RevId: 224e053382290e668c80b6ebae739e4b2a49935e
---
docs/scripts/generate-og-wordmark.ts | 1 +
.../app/(home)/sections/eng-specs-graphic.tsx | 1 +
.../sections/knowledge-base-graphic.tsx | 1 +
docs/src/components/copy-prompt.tsx | 3 +-
docs/src/components/overview-blocks.tsx | 1 +
docs/src/lib/deferred-share.ts | 1 +
docs/src/lib/share-splash.ts | 1 +
packages/app/playwright.a11y.config.ts | 1 +
packages/app/playwright.config.ts | 1 +
packages/app/playwright.visual.config.ts | 1 +
packages/app/src/build/app-version.ts | 3 +-
.../app/src/build/electron-mode-class.test.ts | 1 +
.../src/components/ActivityModeContent.tsx | 5 +
.../src/components/ArrayOfObjectsWidget.tsx | 1 +
.../app/src/components/AuthModal.dom.test.tsx | 1 +
packages/app/src/components/AuthModal.tsx | 10 +-
.../components/AutoSyncOnboardingDialog.tsx | 5 +-
packages/app/src/components/BetaBadge.tsx | 1 +
.../ClaudeReadinessBanner.dom.test.tsx | 1 +
.../src/components/CloneDialog.dom.test.tsx | 1 +
packages/app/src/components/ConsentDialog.tsx | 1 +
...ojectDialog.cascade-staleness.dom.test.tsx | 1 +
.../src/components/CreateProjectDialog.tsx | 4 +-
.../components/CreateProjectMenuTrigger.tsx | 1 +
.../components/DeleteConfirmationDialog.tsx | 4 +-
.../app/src/components/DiffViewBoundary.tsx | 3 +-
.../app/src/components/DocPanel.dom.test.tsx | 1 +
.../src/components/DocumentBoundary.test.ts | 4 +-
.../app/src/components/DocumentBoundary.tsx | 1 +
.../components/DocumentErrorBoundary.test.ts | 1 +
.../src/components/EditorActivityPool.test.ts | 2 +
.../app/src/components/EditorActivityPool.tsx | 1 +
...torActivityPool.warm-skeleton.dom.test.tsx | 5 +
packages/app/src/components/EditorTabs.tsx | 7 +-
.../src/components/EmptyEditorState.test.ts | 1 +
.../app/src/components/EmptyEditorState.tsx | 3 +-
.../FileTree.showall-lazy.dom.test.tsx | 1 +
.../FileTree.showall-truncation.dom.test.tsx | 1 +
.../FileTree.superseded-refresh.dom.test.tsx | 1 +
packages/app/src/components/FileTree.tsx | 21 +-
.../app/src/components/FrontmatterRow.tsx | 1 +
packages/app/src/components/GraphPanel.tsx | 3 +-
.../InstallInClaudeDesktopDialog.tsx | 1 +
.../src/components/InteractionPropPanel.tsx | 1 +
.../app/src/components/McpConsentDialog.tsx | 1 +
.../src/components/McpConsentDialogBody.tsx | 1 +
.../src/components/MountStalledAffordance.tsx | 1 +
packages/app/src/components/NavigatorApp.tsx | 1 +
.../app/src/components/NewItemDialog.test.ts | 1 +
packages/app/src/components/ObjectWidget.tsx | 1 +
packages/app/src/components/PageHeader.tsx | 1 +
.../app/src/components/PageHeaderWidgets.tsx | 1 +
.../app/src/components/ProjectSwitcher.tsx | 1 +
.../PropertyInlineLinks.dom.test.tsx | 1 +
.../src/components/PropertyInlineLinks.tsx | 1 +
.../PropertyPanel.nested-crud.dom.test.tsx | 4 +-
.../app/src/components/PropertyPanel.test.tsx | 3 +-
packages/app/src/components/PropertyPanel.tsx | 1 +
.../src/components/PublishToGitHubDialog.tsx | 1 +
.../app/src/components/SettingsButton.tsx | 1 +
.../ShareBranchSwitchDialog.dom.test.tsx | 1 +
.../components/ShareBranchSwitchDialog.tsx | 1 +
packages/app/src/components/ShareButton.tsx | 1 +
.../app/src/components/SharingModeField.tsx | 1 +
.../src/components/SidebarSearchBar.test.ts | 1 +
.../app/src/components/SidebarSearchBar.tsx | 1 +
.../app/src/components/SyncStatusBadge.tsx | 5 +
.../src/components/TerminalDock.dom.test.tsx | 1 +
.../TerminalExitNotice.dom.test.tsx | 1 +
.../src/components/TerminalPanel.dom.test.tsx | 1 +
.../TerminalPanel.launch.dom.test.tsx | 1 +
packages/app/src/components/TerminalPanel.tsx | 1 +
packages/app/src/components/TextViewer.tsx | 1 +
packages/app/src/components/TimelinePanel.tsx | 9 +-
.../app/src/components/TrashFailureModal.tsx | 2 +
.../src/components/UpdateNotices.shared.ts | 1 +
.../app/src/components/UpdateNotices.test.ts | 9 +
.../command-palette-flicker.test.ts | 2 +
.../components/command-palette-semantic.ts | 1 +
.../command-palette-tag-search.test.ts | 1 +
.../components/command-palette-tag-search.ts | 1 +
.../app/src/components/editor-area-overlay.ts | 1 +
.../editor/SelectionAnnouncer.test.ts | 1 +
.../components/editor/SelectionAnnouncer.tsx | 1 +
.../empty-state/CopyablePromptList.tsx | 3 +-
.../CreatePromptComposer.dom.test.tsx | 1 +
.../src/components/extension-picker-utils.ts | 1 +
.../src/components/file-tree-adapter.test.ts | 1 +
.../file-tree-extension-badge.dom.test.tsx | 1 +
.../components/file-tree-extension-badge.ts | 1 +
.../app/src/components/file-tree-merge.ts | 1 +
.../src/components/file-tree-okignore.test.ts | 1 +
.../file-tree-rename-chip.dom.test.tsx | 1 +
.../src/components/file-tree-rename-chip.ts | 1 +
.../components/file-tree-rename-validation.ts | 1 +
.../app/src/components/file-tree-reveal.ts | 1 +
.../components/file-tree-trash-copy.test.ts | 1 +
.../src/components/file-tree-trash-copy.ts | 1 +
.../app/src/components/file-tree-utils.ts | 1 +
packages/app/src/components/graph-colors.ts | 1 +
.../app/src/components/graph-label-utils.ts | 1 +
.../handoff/EditWithAiPanel.dom.test.tsx | 1 +
.../handoff/EditWithAiPopover.dom.test.tsx | 1 +
.../components/handoff/EditWithAiPopover.tsx | 1 +
.../handoff/OpenInAgentContextSubmenu.tsx | 1 +
.../handoff/OpenInAgentEmptySpaceSubmenu.tsx | 1 +
.../components/handoff/OpenInAgentMenu.tsx | 1 +
.../handoff/OpenInAgentMenuItem.test.ts | 1 +
.../handoff/OpenInAgentMenuItem.tsx | 1 +
.../OpenInAgentTerminalRow.dom.test.tsx | 1 +
.../dispatch-single-entry-point.test.ts | 1 +
.../handoff/terminal-launch-events.ts | 1 +
.../handoff/useHandoffDispatch.test.ts | 1 +
.../components/handoff/useHandoffDispatch.ts | 1 +
.../handoff/useInstalledAgents.test.ts | 1 +
.../components/handoff/useInstalledAgents.ts | 1 +
.../src/components/page-header-utils.test.ts | 2 +
.../app/src/components/page-header-utils.ts | 1 +
.../app/src/components/prewarm-correlation.ts | 1 +
.../components/property-inline-link-tokens.ts | 1 +
.../components/resolve-conflict-dispatch.ts | 4 +-
.../settings/AccountSection.dom.test.tsx | 1 +
.../EmbeddingsKeySection.dom.test.tsx | 1 +
.../settings/SearchSection.dom.test.tsx | 1 +
.../settings/SettingsDialogBody.test.ts | 1 +
.../settings/SettingsDialogBodyLazy.ts | 1 +
.../settings/SettingsDialogErrorBoundary.tsx | 1 +
.../settings/SettingsDialogShell.dom.test.tsx | 1 +
.../components/settings/SharingSection.tsx | 1 +
.../components/settings/okignore-doc.test.ts | 1 +
.../src/components/settings/okignore-doc.ts | 1 +
.../components/settings/okignore-preview.ts | 1 +
.../components/settings/okignore-warnings.ts | 1 +
.../components/settings/schema-walker.test.ts | 1 +
.../src/components/settings/schema-walker.ts | 2 +
.../settings/use-config-form.test.ts | 5 +
.../components/settings/use-config-form.ts | 2 +
.../src/components/share-metadata-rows.tsx | 1 +
.../src/components/sidebar-hover-prewarm.ts | 1 +
.../src/components/template-picker-utils.ts | 1 +
.../src/components/text-viewer-languages.ts | 1 +
packages/app/src/components/ui/command.tsx | 1 +
packages/app/src/components/ui/form.test.ts | 1 +
packages/app/src/editor/DocumentContext.tsx | 3 +-
packages/app/src/editor/SourceEditor.tsx | 1 +
packages/app/src/editor/TiptapEditor.tsx | 4 +-
packages/app/src/editor/active-editor.ts | 1 +
.../src/editor/asset-dispatch/dispatcher.ts | 1 +
.../app/src/editor/asset-dispatch/index.ts | 1 +
.../app/src/editor/asset-dispatch/registry.ts | 1 +
.../app/src/editor/asset-dispatch/types.ts | 1 +
.../editor/binding-staleness-guard.test.ts | 9 +
.../app/src/editor/binding-staleness-guard.ts | 1 +
.../app/src/editor/block-ux/keyboard-nav.ts | 1 +
.../src/editor/branch-invalidation.test.ts | 1 +
.../app/src/editor/branch-invalidation.ts | 1 +
.../src/editor/bubble-menu/BubbleMenuBar.tsx | 3 +-
.../EditWithAiBubbleButton.dom.test.tsx | 1 +
.../bubble-menu/EditWithAiBubbleButton.tsx | 1 +
.../editor/bubble-menu/FileBubbleButtons.tsx | 1 +
.../FootnoteBubbleButton.dom.test.tsx | 1 +
.../bubble-menu/FootnoteBubbleButton.tsx | 1 +
.../bubble-menu/ImageAlignButtons.test.ts | 1 +
.../editor/bubble-menu/ImageAlignButtons.tsx | 1 +
.../app/src/editor/client-persistence.test.ts | 4 +-
packages/app/src/editor/client-persistence.ts | 4 +-
.../clipboard/clipboard-sanitize.test.ts | 2 +
.../editor/clipboard/clipboard-sanitize.ts | 3 +
.../clipboard-walker-fallback-palette.test.ts | 2 +
.../clipboard-walker-fallback-palette.ts | 1 +
.../editor/clipboard/clipboard-walker.test.ts | 5 +
.../src/editor/clipboard/clipboard-walker.ts | 4 +
.../editor/clipboard/detect-source.test.ts | 1 +
.../app/src/editor/clipboard/detect-source.ts | 1 +
.../src/editor/clipboard/handle-drop.test.ts | 1 +
.../src/editor/clipboard/handle-paste.test.ts | 1 +
.../app/src/editor/clipboard/handle-paste.ts | 1 +
packages/app/src/editor/clipboard/index.ts | 1 +
.../src/editor/clipboard/instrument.test.ts | 1 +
.../app/src/editor/clipboard/instrument.ts | 1 +
.../src/editor/clipboard/is-markdown.test.ts | 1 +
.../app/src/editor/clipboard/is-markdown.ts | 1 +
...on-portable-render-source-fallback.test.ts | 1 +
.../non-portable-render-source-fallback.ts | 1 +
.../clipboard/paste-failure-toast.test.ts | 1 +
.../editor/clipboard/paste-failure-toast.ts | 1 +
.../src/editor/clipboard/serialize.test.ts | 5 +
.../app/src/editor/clipboard/serialize.ts | 1 +
.../editor/clipboard/shift-tracker.test.ts | 1 +
.../app/src/editor/clipboard/shift-tracker.ts | 1 +
.../source-clipboard-recovery.test.ts | 1 +
.../editor/clipboard/source-clipboard.test.ts | 1 +
.../src/editor/components/Accordion.test.tsx | 1 +
.../app/src/editor/components/Accordion.tsx | 1 +
packages/app/src/editor/components/Audio.tsx | 1 +
.../src/editor/components/Callout.test.tsx | 1 +
.../app/src/editor/components/Callout.tsx | 1 +
.../CodePreviewEditModal.dom.test.tsx | 1 +
.../components/CodePreviewEditModal.tsx | 5 +-
packages/app/src/editor/components/Embed.tsx | 1 +
.../app/src/editor/components/File.test.tsx | 1 +
packages/app/src/editor/components/File.tsx | 1 +
packages/app/src/editor/components/Image.tsx | 1 +
.../app/src/editor/components/Math.test.tsx | 1 +
packages/app/src/editor/components/Math.tsx | 1 +
.../src/editor/components/Mermaid.test.tsx | 1 +
.../app/src/editor/components/Mermaid.tsx | 1 +
packages/app/src/editor/components/Mirror.tsx | 2 +
.../src/editor/components/MirrorSource.tsx | 1 +
packages/app/src/editor/components/Pdf.tsx | 7 +-
.../src/editor/components/PropPanel.test.tsx | 7 +
.../app/src/editor/components/PropPanel.tsx | 7 +-
.../src/editor/components/ResizeHandles.tsx | 4 +-
.../components/SrcAutocomplete.dom.test.tsx | 1 +
.../src/editor/components/SrcAutocomplete.tsx | 1 +
.../app/src/editor/components/Tab.test.tsx | 1 +
packages/app/src/editor/components/Tab.tsx | 1 +
packages/app/src/editor/components/Tabs.tsx | 1 +
.../src/editor/components/TagDialog.test.tsx | 1 +
.../app/src/editor/components/TagDialog.tsx | 1 +
.../src/editor/components/TagView.test.tsx | 1 +
.../app/src/editor/components/TagView.tsx | 1 +
packages/app/src/editor/components/Video.tsx | 1 +
.../editor/components/jsx-host-context.tsx | 1 +
.../src/editor/components/pdf-layout.test.ts | 1 +
.../app/src/editor/components/pdf-layout.ts | 1 +
.../components/use-mirror-source.test.ts | 1 +
.../editor/components/use-mirror-source.ts | 2 +
.../src/editor/edit-with-ai-selection.test.ts | 1 +
.../app/src/editor/edit-with-ai-selection.ts | 1 +
packages/app/src/editor/editor-cache.test.ts | 45 ++-
packages/app/src/editor/editor-cache.ts | 14 +-
packages/app/src/editor/editor-tabs.test.ts | 1 +
.../extensions/CodeBlockView.dom.test.tsx | 1 +
.../src/editor/extensions/CodeBlockView.tsx | 7 +-
.../ImageInlineZoomView.dom.test.tsx | 6 +-
.../editor/extensions/ImageInlineZoomView.tsx | 1 +
.../extensions/InternalLinkPropPanel.tsx | 1 +
.../extensions/JsxComponentView.test.ts | 2 +
.../editor/extensions/JsxComponentView.tsx | 3 +
.../editor/extensions/LinkPropPanelCopy.tsx | 7 +-
.../src/editor/extensions/MathInlineView.tsx | 1 +
.../extensions/RawMdxFallbackCMView.test.ts | 3 +
.../extensions/RawMdxFallbackCMView.tsx | 1 +
.../editor/extensions/WikiLinkPropPanel.tsx | 3 +
.../src/editor/extensions/block-mover.test.ts | 3 +
.../extensions/bridge-id-plugin.test.ts | 3 +
.../src/editor/extensions/bridge-id-plugin.ts | 1 +
.../chunk-wrapper-decoration.test.ts | 2 +
.../extensions/chunk-wrapper-decoration.ts | 1 +
.../editor/extensions/code-block-languages.ts | 1 +
.../extensions/code-block-lowlight-plugin.ts | 1 +
.../src/editor/extensions/code-block-meta.ts | 1 +
.../extensions/code-block-preview-csp.test.ts | 1 +
.../app/src/editor/extensions/code-block.ts | 2 +
.../extensions/frozen-table-headers.test.ts | 1 +
.../editor/extensions/frozen-table-headers.ts | 1 +
.../extensions/link-edit-autoopen.test.ts | 1 +
.../link-resolution-decoration.test.ts | 8 +
.../extensions/link-resolution-decoration.ts | 1 +
.../editor/extensions/link-resolution.test.ts | 1 +
.../src/editor/extensions/link-resolution.ts | 1 +
.../mark-identity-decoration.test.ts | 5 +
.../extensions/mark-identity-decoration.ts | 1 +
.../editor/extensions/mark-identity.test.ts | 6 +
.../src/editor/extensions/mark-identity.ts | 4 +
.../mark-interaction-bridge.test.tsx | 9 +-
.../extensions/mark-interaction-bridge.ts | 5 +
.../editor/extensions/nested-cm-extensions.ts | 1 +
.../extensions/raw-mdx-fallback.test.ts | 3 +
.../editor/extensions/raw-mdx-nav-event.ts | 1 +
.../extensions/selection-state-plugin.test.ts | 11 +-
.../extensions/selection-state-plugin.ts | 9 +-
.../extensions/source-dirty-observer.ts | 1 +
.../extensions/table-insert-commands.ts | 1 +
.../extensions/table-insert-controls.ts | 1 +
.../src/editor/extensions/tag-click-plugin.ts | 1 +
.../editor/extensions/tag-suggestion.test.ts | 6 +-
.../src/editor/extensions/tag-suggestion.ts | 1 +
.../extensions/wiki-link-icon.dom.test.tsx | 1 +
.../src/editor/hooks/use-block-selection.ts | 1 +
packages/app/src/editor/http-client.ts | 1 +
.../editor/image-upload/current-doc-name.ts | 1 +
.../media-drop-shape-invariant.test.ts | 1 +
.../app/src/editor/interaction-layer-host.ts | 1 +
.../app/src/editor/interaction-layer.test.ts | 12 +-
packages/app/src/editor/interaction-layer.tsx | 8 +
packages/app/src/editor/is-system-doc.ts | 1 +
packages/app/src/editor/mount-promise.test.ts | 54 ++-
packages/app/src/editor/mount-promise.ts | 15 +-
packages/app/src/editor/observer-sync.test.ts | 1 +
packages/app/src/editor/observers.test.ts | 17 +-
packages/app/src/editor/observers.ts | 9 +-
packages/app/src/editor/page-list-cache.ts | 1 +
.../editor/pattern-d-schema-identity.test.ts | 3 +
.../editor/pattern-d-walk-currency.test.ts | 3 +
.../src/editor/plugins/agent-flash-source.ts | 3 +-
.../editor/plugins/asset-context-menu.test.ts | 1 +
.../src/editor/plugins/asset-context-menu.ts | 1 +
.../app/src/editor/plugins/md-link-source.ts | 7 +-
.../editor/plugins/wiki-link-source.test.ts | 1 +
.../src/editor/plugins/wiki-link-source.ts | 9 +-
packages/app/src/editor/provider-pool.test.ts | 7 +-
packages/app/src/editor/provider-pool.ts | 12 +-
.../resolve-descriptor-placeholder.test.ts | 1 +
.../app/src/editor/safe-navigation-url.ts | 1 +
packages/app/src/editor/selection-stats.ts | 1 +
.../src/editor/selection/entry-label.test.ts | 1 +
.../app/src/editor/selection/entry-label.ts | 1 +
.../slash-command/auto-open-flag.test.ts | 1 +
.../slash-command/component-items.test.ts | 2 +
.../editor/slash-command/component-items.tsx | 1 +
.../slash-command/embed-starter-items.test.ts | 1 +
.../slash-command/embed-starter-items.tsx | 1 +
.../editor/source-polish/view-plugin.test.ts | 1 +
.../src/editor/source-polish/view-plugin.ts | 1 +
packages/app/src/editor/sync-promise.test.ts | 7 +-
packages/app/src/editor/sync-promise.ts | 2 +
packages/app/src/editor/tab-identity.ts | 1 +
.../table-controls/TableCellHandles.tsx | 1 +
.../tag-suggestion/TagSuggestionMenu.tsx | 1 +
.../app/src/editor/typing-burst-detector.ts | 1 +
.../app/src/editor/use-editor-mode.test.ts | 7 +
packages/app/src/editor/use-editor-mode.ts | 3 +-
.../editor/utils/animate-align-change.test.ts | 1 +
.../src/editor/utils/animate-align-change.ts | 1 +
.../app/src/editor/utils/editor-strings.ts | 1 +
.../editor/utils/filter-assets-by-accept.ts | 1 +
.../app/src/editor/utils/sanitize-url.test.ts | 3 +-
packages/app/src/editor/utils/sanitize-url.ts | 1 +
packages/app/src/editor/utils/severity.ts | 1 +
.../src/editor/utils/validate-css-length.ts | 1 +
.../editor/utils/validate-media-url.test.ts | 4 +
.../src/editor/utils/validate-media-url.ts | 1 +
.../editor/walk-currency-extension.test.ts | 6 +
.../app/src/editor/walk-currency-extension.ts | 1 +
.../src/editor/walk-currency-test-harness.ts | 1 +
packages/app/src/globals.alpha-aware.test.ts | 1 +
.../app/src/globals.image-zoom-dark.test.ts | 1 +
.../src/globals.reduced-transparency.test.ts | 1 +
packages/app/src/hooks/use-folder-config.ts | 1 +
packages/app/src/hooks/use-git-sync-status.ts | 1 +
packages/app/src/lib/api-config.ts | 1 +
packages/app/src/lib/cc1.ts | 1 +
packages/app/src/lib/client-fetch.test.ts | 4 +-
.../lib/config-ignore-nested-error-events.ts | 1 +
.../config-provider.user-synced.dom.test.tsx | 1 +
.../app/src/lib/config-validation-events.ts | 1 +
packages/app/src/lib/consent-store.ts | 1 +
packages/app/src/lib/create-file-events.ts | 1 +
packages/app/src/lib/current-branch-store.ts | 3 +-
packages/app/src/lib/desktop-bridge-types.ts | 4 +-
packages/app/src/lib/doc-panel-width-store.ts | 3 +-
packages/app/src/lib/error-state.ts | 1 +
.../lib/file-menu-target-resolvers.test.ts | 1 +
.../app/src/lib/file-menu-target-resolvers.ts | 1 +
.../lib/file-tree-menu-action-events.test.ts | 1 +
.../src/lib/file-tree-menu-action-events.ts | 1 +
packages/app/src/lib/folder-config-api.ts | 1 +
packages/app/src/lib/folder-config-paths.ts | 1 +
.../lib/handoff/cowork-skill-install.test.ts | 1 +
.../src/lib/handoff/cowork-skill-install.ts | 1 +
packages/app/src/lib/handoff/dispatch.ts | 1 +
.../app/src/lib/handoff/install-detect.ts | 1 +
packages/app/src/lib/handoff/open-external.ts | 1 +
.../src/lib/handoff/skill-installer.test.ts | 1 +
.../app/src/lib/handoff/skill-installer.ts | 4 +-
packages/app/src/lib/handoff/targets.ts | 1 +
packages/app/src/lib/handoff/telemetry.ts | 1 +
.../use-claude-desktop-integration.test.ts | 2 +
.../handoff/use-claude-desktop-integration.ts | 1 +
.../lib/install-client-log-forwarder.test.ts | 1 +
.../src/lib/install-client-log-forwarder.ts | 10 +-
.../app/src/lib/install-deep-link-listener.ts | 1 +
.../app/src/lib/install-onboarding-toast.ts | 1 +
.../src/lib/install-server-drift-listener.ts | 1 +
.../app/src/lib/lazy-with-preload.test.ts | 1 +
packages/app/src/lib/lazy-with-preload.ts | 1 +
packages/app/src/lib/mcp-consent-store.ts | 1 +
packages/app/src/lib/parse-api-error.test.ts | 1 +
packages/app/src/lib/parse-api-error.ts | 1 +
.../app/src/lib/parse-server-response.test.ts | 1 +
packages/app/src/lib/parse-server-response.ts | 1 +
.../perf/cold-mount-instrumentation.test.ts | 11 +-
.../lib/perf/cold-mount-instrumentation.ts | 7 +-
packages/app/src/lib/perf/collector.ts | 1 +
.../app/src/lib/perf/env-override.test.ts | 1 +
packages/app/src/lib/perf/env-override.ts | 1 +
.../app/src/lib/perf/get-pm-stats.test.ts | 8 +
packages/app/src/lib/perf/get-pm-stats.ts | 1 +
packages/app/src/lib/perf/hdr-histogram.ts | 1 +
packages/app/src/lib/perf/index.ts | 1 +
packages/app/src/lib/perf/mark.test.ts | 3 +-
packages/app/src/lib/perf/mark.ts | 4 +-
.../src/lib/perf/profiler-boundary.test.tsx | 1 +
.../app/src/lib/perf/profiler-boundary.tsx | 1 +
.../lib/perf/scheduler-polyfill-shim.test.ts | 1 +
.../src/lib/perf/scheduler-polyfill-shim.ts | 1 +
packages/app/src/lib/perf/types.ts | 1 +
packages/app/src/lib/perf/web-vitals.ts | 1 +
packages/app/src/lib/preferred-agent-store.ts | 3 +-
packages/app/src/lib/project-paths.ts | 1 +
packages/app/src/lib/relaunch-store.test.ts | 1 +
packages/app/src/lib/relaunch-store.ts | 1 +
.../app/src/lib/server-info-refresh.test.ts | 1 +
packages/app/src/lib/server-info-refresh.ts | 4 +-
packages/app/src/lib/server-instance-store.ts | 1 +
.../app/src/lib/share/branch-switch-flow.ts | 1 +
.../src/lib/share/clipboard-adapter.test.ts | 1 +
.../app/src/lib/share/clipboard-adapter.ts | 1 +
.../src/lib/share/clone-controller.test.ts | 2 +
.../app/src/lib/share/clone-controller.ts | 1 +
packages/app/src/lib/share/consent-flow.ts | 1 +
.../app/src/lib/share/publish-wizard.test.ts | 2 +
packages/app/src/lib/share/publish-wizard.ts | 4 +
packages/app/src/lib/share/receive-flow.ts | 1 +
packages/app/src/lib/share/receive-store.ts | 1 +
.../src/lib/share/run-share-action.test.ts | 1 +
packages/app/src/lib/show-all-stream.ts | 1 +
packages/app/src/lib/sidebar-pin-store.ts | 3 +-
.../app/src/lib/single-file-initial-doc.ts | 1 +
packages/app/src/lib/terminal-height-store.ts | 3 +-
.../transports/auth-query-transport.test.ts | 1 +
.../lib/transports/auth-query-transport.ts | 7 +-
.../app/src/lib/transports/auth-transport.ts | 4 +-
.../transports/buffered-async-stream.test.ts | 3 +-
.../lib/transports/buffered-async-stream.ts | 1 +
.../lib/transports/clone-transport.test.ts | 1 +
.../app/src/lib/transports/clone-transport.ts | 4 +-
.../transports/embeddings-key-transport.ts | 4 +-
.../app/src/lib/update-notices-store.test.ts | 1 +
packages/app/src/lib/update-notices-store.ts | 1 +
.../app/src/lib/use-activity-panel.test.ts | 1 +
packages/app/src/lib/use-activity-panel.ts | 4 +
.../app/src/lib/use-settings-route.test.ts | 1 +
packages/app/src/lib/use-settings-route.ts | 1 +
packages/app/src/lib/workspace-paths.ts | 1 +
.../PresenceBar-avatar-click.test.tsx | 1 +
packages/app/src/presence/PresenceBar.test.ts | 1 +
packages/app/src/presence/identity.ts | 1 +
packages/app/src/presence/use-presence.ts | 1 +
packages/app/src/server/agent-sim.ts | 9 +-
packages/app/src/server/api-config-handler.ts | 1 +
packages/app/src/server/hocuspocus-plugin.ts | 12 +-
packages/app/src/telemetry-impl.ts | 3 +-
.../app/tests/a11y/component-blocks.e2e.ts | 8 +
.../conversion/conversion-fidelity.test.ts | 8 +
packages/app/tests/fidelity/arbitraries.ts | 7 +
.../bridge-observer-conversion.test.ts | 14 +
.../tests/fidelity/corpus-commonmark.test.ts | 1 +
.../app/tests/fidelity/corpus-gfm.test.ts | 1 +
.../fidelity/deferred-bug-pinning.test.ts | 1 +
.../doc-boundary-fragment-drop.test.ts | 1 +
.../tests/fidelity/fixtures-isolation.test.ts | 1 +
.../fidelity/frontmatter-malformed.test.ts | 1 +
.../frontmatter-region-roundtrip.test.ts | 1 +
packages/app/tests/fidelity/helpers.ts | 1 +
...ant-astral-brace-byte-preservation.test.ts | 1 +
.../invariant-backslash-idempotence.test.ts | 1 +
.../invariant-emphasis-cumulation.test.ts | 1 +
.../invariant-html-block-edge.test.ts | 1 +
.../app/tests/fidelity/invariant-i1.test.ts | 1 +
.../app/tests/fidelity/invariant-i10.test.ts | 1 +
.../app/tests/fidelity/invariant-i13.test.ts | 3 +
.../app/tests/fidelity/invariant-i14.test.ts | 1 +
.../app/tests/fidelity/invariant-i15.test.ts | 1 +
.../app/tests/fidelity/invariant-i16.test.ts | 1 +
.../app/tests/fidelity/invariant-i17.test.ts | 1 +
.../app/tests/fidelity/invariant-i18.test.ts | 2 +
.../app/tests/fidelity/invariant-i19.test.ts | 1 +
.../app/tests/fidelity/invariant-i2.test.ts | 1 +
.../invariant-i20-walker-adversarial.test.ts | 1 +
.../app/tests/fidelity/invariant-i20.test.ts | 1 +
.../invariant-i21-byte-preservation.test.ts | 1 +
.../app/tests/fidelity/invariant-i21.test.ts | 1 +
.../app/tests/fidelity/invariant-i3.test.ts | 1 +
.../app/tests/fidelity/invariant-i4.test.ts | 2 +
.../app/tests/fidelity/invariant-i5.test.ts | 1 +
.../app/tests/fidelity/invariant-i6.test.ts | 1 +
.../app/tests/fidelity/invariant-i7.test.ts | 1 +
.../app/tests/fidelity/invariant-i9.test.ts | 1 +
.../fidelity/invariant-image-edge.test.ts | 1 +
.../invariant-image-relative-src.test.ts | 1 +
.../fidelity/invariant-link-edge.test.ts | 1 +
.../fidelity/invariant-list-nesting.test.ts | 1 +
...variant-wiki-link-embed-conversion.test.ts | 1 +
.../m2-project-markdown-health.test.ts | 1 +
packages/app/tests/fidelity/ng-pinned.test.ts | 1 +
.../tests/fidelity/p0-entity-escape.test.ts | 4 +
.../_fixtures/init-load-byte-stable-corpus.ts | 1 +
.../init-load-byte-stable-snapshot.ts | 1 +
.../integration/advisory-warnings.test.ts | 1 +
.../app/tests/integration/agent-undo.test.ts | 1 +
.../api-error-envelope/agent-activity.test.ts | 1 +
.../agent-burst-diff.test.ts | 1 +
.../api-error-envelope/agent-patch.test.ts | 1 +
.../api-error-envelope/agent-undo.test.ts | 1 +
.../api-error-envelope/agent-write-md.test.ts | 1 +
.../api-error-envelope/agent-write.test.ts | 1 +
.../auth-query-transport-signout.test.ts | 1 +
.../backlink-counts.test.ts | 1 +
.../api-error-envelope/backlinks.test.ts | 1 +
.../api-error-envelope/create-folder.test.ts | 1 +
.../api-error-envelope/create-page.test.ts | 1 +
.../api-error-envelope/dead-links.test.ts | 1 +
.../api-error-envelope/delete-path.test.ts | 1 +
.../api-error-envelope/document-list.test.ts | 1 +
.../api-error-envelope/document-read.test.ts | 1 +
.../api-error-envelope/folder-config.test.ts | 1 +
.../api-error-envelope/forward-links.test.ts | 1 +
.../history-version.test.ts | 1 +
.../api-error-envelope/history.test.ts | 1 +
.../api-error-envelope/hubs.test.ts | 1 +
.../installed-agents.test.ts | 1 +
.../api-error-envelope/link-graph.test.ts | 1 +
.../local-op-auth-login.test.ts | 1 +
.../local-op-auth-repos.test.ts | 1 +
.../local-op-auth-set-identity.test.ts | 1 +
.../local-op-auth-signout.test.ts | 1 +
.../local-op-auth-status.test.ts | 1 +
.../api-error-envelope/local-op-clone.test.ts | 1 +
.../metrics-agent-presence.test.ts | 1 +
.../metrics-parse-health.test.ts | 1 +
.../metrics-reconciliation.test.ts | 1 +
.../api-error-envelope/orphans.test.ts | 1 +
.../api-error-envelope/page-headings.test.ts | 1 +
.../api-error-envelope/pages.test.ts | 1 +
.../api-error-envelope/principal.test.ts | 1 +
.../api-error-envelope/rename-path.test.ts | 1 +
.../api-error-envelope/rescue-list.test.ts | 1 +
.../api-error-envelope/rollback.test.ts | 1 +
.../api-error-envelope/save-version.test.ts | 1 +
.../api-error-envelope/search.test.ts | 1 +
.../api-error-envelope/seed-apply.test.ts | 1 +
.../api-error-envelope/seed-plan.test.ts | 1 +
.../api-error-envelope/server-info.test.ts | 1 +
.../skill-install-state.test.ts | 1 +
.../api-error-envelope/suggest-links.test.ts | 1 +
.../sync-conflict-content.test.ts | 1 +
.../api-error-envelope/sync-conflicts.test.ts | 1 +
.../sync-resolve-conflict.test.ts | 1 +
.../api-error-envelope/sync-status.test.ts | 1 +
.../api-error-envelope/sync-trigger.test.ts | 1 +
.../api-error-envelope/tags-for-name.test.ts | 1 +
.../api-error-envelope/tags-list.test.ts | 1 +
.../api-error-envelope/template.test.ts | 1 +
.../api-error-envelope/templates-list.test.ts | 1 +
.../api-error-envelope/test-flush-git.test.ts | 1 +
.../test-rescan-backlinks.test.ts | 1 +
.../test-rescan-files.test.ts | 1 +
.../api-error-envelope/test-reset.test.ts | 1 +
.../unmatched-route.test.ts | 1 +
.../api-error-envelope/upload-asset.test.ts | 1 +
.../api-error-envelope/workspace.test.ts | 1 +
.../asset-move-rerenders-embeds.test.ts | 8 +-
...itched-with-stale-embed-resolution.test.ts | 5 +-
.../bridge-cold-load-corpus.test.ts | 4 +
.../bridge-convergence-regression.test.ts | 1 +
.../tests/integration/bridge-matrix.test.ts | 12 +
.../bridge-watchdog-multi-peer-drain.test.ts | 1 +
.../bug-a-mechanism-isolation.test.ts | 3 +
.../bug-c-real-reachability.test.ts | 3 +
...agent-undo-under-concurrent-typing.test.ts | 4 +
.../integration/c1-concurrent-wysiwyg.test.ts | 1 +
.../integration/c10-server-restart.test.ts | 1 +
.../c12-nested-frontmatter.test.ts | 1 +
.../c13-pathb-doc-boundary.test.ts | 1 +
.../integration/c2-concurrent-source.test.ts | 1 +
.../tests/integration/c3-mixed-mode.test.ts | 1 +
.../integration/c4-agent-plus-wysiwyg.test.ts | 1 +
.../integration/c5-agent-plus-source.test.ts | 1 +
.../c6-mode-switch-mid-debounce.test.ts | 1 +
.../c7-disconnect-reconnect-burst.test.ts | 1 +
.../integration/c8-triple-concurrent.test.ts | 2 +
.../integration/c9-join-mid-debounce.test.ts | 1 +
.../tests/integration/cc1-broadcast.test.ts | 4 +-
.../integration/client-logs-endpoint.test.ts | 1 +
...lipboard-cross-app-sanitizer-proxy.test.ts | 4 +
.../clipboard-dispatcher-reorder.test.ts | 1 +
.../clipboard-walker-integration.test.ts | 1 +
...onfig-doc-server-instance-recovery.test.ts | 1 +
.../conflict-aware-write-surfaces.test.ts | 3 +-
.../conflict-resolution-delete-modify.test.ts | 13 +-
.../app/tests/integration/create-page.test.ts | 1 +
.../integration/cross-doc-stale-cache.test.ts | 1 +
.../dom-test-filename-stop-rule.test.ts | 1 +
.../tests/integration/e2e-stop-rules.test.ts | 1 +
.../empty-folder-visibility.test.ts | 3 +
.../error-envelope-coverage.test.ts | 1 +
...lscreen-overlay-safe-area-coverage.test.ts | 5 +-
.../hook-timeout-stop-rules.test.ts | 1 +
.../idle-shutdown-multi-client.test.ts | 1 +
.../integration/init-load-byte-stable.test.ts | 6 +
.../ipc-exhaustiveness-coverage.test.ts | 1 +
.../integration/ipc-log-coverage.test.ts | 1 +
.../jsx-schema-narrowing-safety.test.ts | 1 +
.../keyboard-nav-catch-contract.test.ts | 1 +
.../integration/link-graph-metadata.test.ts | 1 +
.../local-op-auth-login-cancel-reopen.test.ts | 1 +
.../loopback-bind-discipline.test.ts | 1 +
.../integration/loopback-exclusivity.test.ts | 1 +
.../managed-rename-crash-recovery.test.ts | 1 +
.../map-driven-observer-a-crdt.test.ts | 1 +
.../integration/mcp-session-identity.test.ts | 1 +
.../integration/microcopy-ellipsis.test.ts | 1 +
.../mock-module-completeness.test.ts | 2 +
.../integration/multi-agent-presence.test.ts | 1 +
.../app/tests/integration/network-control.ts | 2 +
.../no-sync-set-enabled-references.test.ts | 1 +
.../no-unportaled-editor-content.test.ts | 1 +
.../integration/per-session-um-perf.test.ts | 1 +
...istence-failure-surfacing-handlers.test.ts | 1 +
.../integration/persistence-fan-out.test.ts | 1 +
.../integration/presence-multi-tab.test.ts | 4 +-
.../integration/principal-endpoint.test.ts | 1 +
.../provider-pool-buffer-replay.test.ts | 1 +
...provider-pool-multi-client-restart.test.ts | 4 +-
.../provider-pool-reconnect.test.ts | 4 +-
.../raw-mdx-fallback-multi-client.test.ts | 3 +
.../removal-phantom-resurrection.test.ts | 4 +
.../restart-with-embed-doc.test.ts | 2 +
.../tests/integration/selection-state.test.ts | 3 +
.../server-observer-feedback-loop.test.ts | 1 +
.../tests/integration/session-cleanup.test.ts | 1 +
.../sidebar-show-all-files.test.ts | 1 +
.../integration/single-file-mode.test.ts | 1 +
.../slash-command-extension.test.ts | 1 +
.../source-mode-byte-preservation.test.ts | 1 +
.../tests/integration/symlink-alias.test.ts | 9 +
.../integration/test-harness-origins.test.ts | 4 +-
.../tests/integration/test-harness.test.ts | 1 +
.../app/tests/integration/test-harness.ts | 36 +-
.../test-script-invariants.test.ts | 1 +
.../urn-ipc-registry-coverage.test.ts | 1 +
.../integration/vite-dedupe-parity.test.ts | 1 +
.../vite-worker-cachedir-isolation.test.ts | 1 +
.../integration/workspace-endpoint.test.ts | 1 +
.../tests/integration/worktree-boot.test.ts | 1 +
...worktree-cleanup-and-stale-pointer.test.ts | 1 +
.../integration/worktree-concurrent.test.ts | 4 +-
.../tests/integration/worktree-init.test.ts | 1 +
.../integration/worktree-test-harness.ts | 1 +
.../wysiwyg-x20-cold-reopen.test.ts | 1 +
.../y-prosemirror-import-coverage.test.ts | 1 +
...y-tiptap-schema-throw-substitution.test.ts | 1 +
packages/app/tests/lingui-macro-preload.ts | 1 +
packages/app/tests/lingui-macro-shim.tsx | 3 +
.../no-raw-html-interactive-element.test.ts | 1 +
.../tests/meta/hook-timeout-semantics.test.ts | 1 +
.../meta/substrate-vocabulary-drift.test.ts | 1 +
.../cache-regime-rotation/asymmetric.ts | 1 +
.../fixtures/cache-regime-rotation/broad.ts | 1 +
.../cache-regime-rotation/generator.ts | 1 +
.../fixtures/cache-regime-rotation/index.ts | 1 +
.../fixtures/cache-regime-rotation/tight.ts | 1 +
.../fixtures/cache-regime-rotation/types.ts | 1 +
.../fixtures/cache-regime-rotation/vault.ts | 1 +
.../generate-view-count-fixtures.test.ts | 1 +
.../fixtures/generate-view-count-fixtures.ts | 7 +
packages/app/tests/perf/lib/bootstrap.ts | 2 +
packages/app/tests/perf/lib/bundle-check.ts | 1 +
.../app/tests/perf/lib/cdp-tracer.test.ts | 1 +
packages/app/tests/perf/lib/cdp-tracer.ts | 8 +
.../tests/perf/lib/cell-measurement.test.ts | 6 +
.../app/tests/perf/lib/cell-measurement.ts | 7 +
.../perf/lib/correlate-longtasks.test.ts | 1 +
.../app/tests/perf/lib/correlate-longtasks.ts | 1 +
.../app/tests/perf/lib/define-sweep.test.ts | 3 +-
packages/app/tests/perf/lib/define-sweep.ts | 1 +
packages/app/tests/perf/lib/doc-markers.ts | 1 +
packages/app/tests/perf/lib/kneedle.test.ts | 1 +
packages/app/tests/perf/lib/kneedle.ts | 2 +
.../tests/perf/lib/longtask-observer.test.ts | 1 +
.../app/tests/perf/lib/longtask-observer.ts | 4 +-
.../app/tests/perf/lib/macos-pressure.test.ts | 1 +
packages/app/tests/perf/lib/macos-pressure.ts | 1 +
.../perf/lib/node-peer-simulator.test.ts | 1 +
.../app/tests/perf/lib/node-peer-simulator.ts | 7 +-
.../app/tests/perf/lib/perf-compare.test.ts | 1 +
packages/app/tests/perf/lib/scenario.ts | 3 +
.../app/tests/perf/lib/sweep-runner.test.ts | 1 +
packages/app/tests/perf/lib/sweep-runner.ts | 5 +
packages/app/tests/perf/lib/tempo-client.ts | 5 +
.../tests/perf/lib/with-checkpoint.test.ts | 3 +-
.../app/tests/perf/lib/with-checkpoint.ts | 2 +
.../perf/probes/tiptap-destroy-leak.test.ts | 1 +
.../tests/perf/probes/tiptap-destroy-leak.ts | 11 +-
packages/app/tests/perf/profile.test.ts | 1 +
packages/app/tests/perf/profile.ts | 9 +-
.../perf/scenarios/activity-mount-sweep.ts | 3 +-
.../tests/perf/scenarios/cold-load-big-doc.ts | 1 +
.../tests/perf/scenarios/cold-pool-warm.ts | 1 +
.../scenarios/g4-profile-decomposition.ts | 4 +-
.../perf/scenarios/m2-cache-hit-reparent.ts | 1 +
.../perf/scenarios/m3-defer-mount-sweep.ts | 1 +
.../tests/perf/scenarios/memory-per-editor.ts | 4 +-
.../app/tests/perf/scenarios/mode-toggle.ts | 1 +
.../tests/perf/scenarios/outline-polling.ts | 1 +
.../scenarios/server-bridge-spans-canary.ts | 1 +
.../sweep-cache-regime.smoke.test.ts | 4 +
.../perf/scenarios/sweep-cache-regime.ts | 5 +
...nvention-cap-graduation-real-cycle.test.ts | 1 +
...ep-convention-cap-graduation.smoke.test.ts | 13 +
.../sweep-convention-cap-graduation.ts | 21 +-
.../scenarios/sweep-pool-warm-back-canary.ts | 1 +
.../perf/scenarios/warm-switch-cached.ts | 1 +
.../app/tests/perf/scenarios/warm-switch.ts | 1 +
.../app/tests/stress/_helpers/clipboard.ts | 1 +
.../tests/stress/_helpers/content-reset.ts | 1 +
.../app/tests/stress/_helpers/editor-state.ts | 1 +
.../tests/stress/_helpers/error-filters.ts | 1 +
.../app/tests/stress/_helpers/fixtures.ts | 1 +
.../stress/_helpers/global-warm-cache.ts | 1 +
packages/app/tests/stress/_helpers/graph.ts | 1 +
packages/app/tests/stress/_helpers/index.ts | 1 +
.../app/tests/stress/_helpers/provider.ts | 1 +
.../tests/stress/_helpers/server-process.ts | 10 +-
packages/app/tests/stress/_helpers/sidebar.ts | 1 +
.../app/tests/stress/_helpers/slash-menu.ts | 1 +
.../tests/stress/_helpers/upload-fixtures.ts | 1 +
.../tests/stress/agent-activity-panel.e2e.ts | 1 +
.../tests/stress/asset-click-dispatch.e2e.ts | 2 +
.../tests/stress/asset-embed-advanced.e2e.ts | 1 +
.../stress/asset-embed-real-fidelity.e2e.ts | 1 +
packages/app/tests/stress/asset-embed.e2e.ts | 1 +
.../stress/bridge-convergence.fuzz.test.ts | 22 +-
.../stress/chip-popover-positioning.e2e.ts | 3 +
...pboard-relative-url-source-fallback.e2e.ts | 1 +
.../stress/cm6-list-hanging-indent.e2e.ts | 1 +
.../stress/command-palette-flicker.e2e.ts | 1 +
.../stress/command-palette-semantic.e2e.ts | 1 +
.../stress/component-blocks.perf.test.ts | 4 +
packages/app/tests/stress/crdt-stress.e2e.ts | 1 +
.../stress/docs-open-scroll-restore.e2e.ts | 1 +
packages/app/tests/stress/docs-open.e2e.ts | 5 +
.../stress/drop-pipeline-auto-open.e2e.ts | 3 +
packages/app/tests/stress/edit-with-ai.e2e.ts | 1 +
.../stress/editor-area-viewport-resize.e2e.ts | 1 +
.../editor-mode-flip-cross-doc-bleed.e2e.ts | 1 +
.../stress/editor-mode-persistence.e2e.ts | 7 +-
...le-tree-decoration-chip-strip-repro.e2e.ts | 1 +
packages/app/tests/stress/find-replace.e2e.ts | 1 +
.../tests/stress/fixtures/handoff-mocks.ts | 13 +-
.../fr-7a-disconnect-source-mode.e2e.ts | 1 +
.../app/tests/stress/frontmatter-edit.e2e.ts | 1 +
.../tests/stress/frozen-table-headers.e2e.ts | 1 +
.../tests/stress/grip-click-nodeselect.e2e.ts | 4 +
packages/app/tests/stress/handoff.e2e.ts | 1 +
.../tests/stress/init-load-byte-stable.e2e.ts | 5 +
.../tests/stress/jsx-backspace-delete.e2e.ts | 8 +
.../tests/stress/jsx-halo-semantics.e2e.ts | 8 +
.../tests/stress/jsx-image-body-click.e2e.ts | 1 +
.../stress/jsx-prop-panel-placeholder.e2e.ts | 4 +
.../stress/jsx-range-encompass-halo.e2e.ts | 4 +
.../tests/stress/jsx-wildcard-convert.e2e.ts | 2 +
packages/app/tests/stress/list-keymap.e2e.ts | 1 +
.../app/tests/stress/mid-type-recovery.e2e.ts | 1 +
.../tests/stress/multi-agent-presence.e2e.ts | 2 +
.../stress/new-file-cross-doc-bleed.e2e.ts | 1 +
.../stress/ng7-rapid-nav-coherence.e2e.ts | 29 +-
.../stress/observer-a-multi-client.e2e.ts | 1 +
.../app/tests/stress/okignore-settings.e2e.ts | 14 +-
.../oracle-e-expectations.test-helper.ts | 1 +
.../tests/stress/outline-navigation.e2e.ts | 1 +
.../stress/outline-toolbar-occlusion.e2e.ts | 1 +
.../app/tests/stress/paste-fidelity.e2e.ts | 18 +
packages/app/tests/stress/prop-upload.e2e.ts | 5 +
.../tests/stress/qa-sidebar-responsive.e2e.ts | 4 +-
.../raw-mdx-fallback-onblur-upgrade.e2e.ts | 3 +
.../stress/rename-content-preservation.e2e.ts | 1 +
.../tests/stress/rename-noext-probe.e2e.ts | 1 +
.../tests/stress/selection-indicator.e2e.ts | 28 ++
.../server-authoritative-stress.test.ts | 6 +
.../app/tests/stress/showall-lazy-tree.e2e.ts | 1 +
.../tests/stress/sidebar-search-pill.e2e.ts | 1 +
.../tests/stress/single-file-ephemeral.e2e.ts | 1 +
.../stress/slash-command-auto-open.e2e.ts | 3 +
.../app/tests/stress/slash-command.e2e.ts | 8 +
.../app/tests/stress/source-polish.e2e.ts | 9 +
packages/app/tests/stress/stress-api.ts | 5 +
packages/app/tests/stress/synthetic.ts | 1 +
.../stress/timeline-diff-sidepane.e2e.ts | 2 +
.../app/tests/stress/ux-interactions.e2e.ts | 3 +
.../tests/stress/yjs-no-dual-import.e2e.ts | 1 +
.../app/tests/visual/component-parity.e2e.ts | 8 +
packages/app/vite.react-babel.ts | 1 +
packages/cli/src/auth/embeddings-key-store.ts | 1 +
packages/cli/src/auth/gh-detect.ts | 3 +-
packages/cli/src/auth/resolve-auth.test.ts | 5 +
packages/cli/src/auth/token-store.test.ts | 7 +
packages/cli/src/auth/token-store.ts | 16 +-
packages/cli/src/cli.ts | 1 +
.../src/commands/auth/git-credential.test.ts | 4 +
packages/cli/src/commands/auth/login.ts | 3 +-
.../cli/src/commands/bug-report-redact.ts | 1 +
packages/cli/src/commands/clean.ts | 1 +
packages/cli/src/commands/clone.ts | 3 +
packages/cli/src/commands/config.test.ts | 4 +-
packages/cli/src/commands/config.ts | 1 +
packages/cli/src/commands/desktop-dispatch.ts | 1 +
.../cli/src/commands/diagnose-bundle.test.ts | 8 +
.../diagnose-health-checks/bun.test.ts | 1 +
.../commands/diagnose-health-checks/bun.ts | 1 +
.../config-yaml.test.ts | 1 +
.../diagnose-health-checks/config-yaml.ts | 1 +
.../content-dir.test.ts | 1 +
.../diagnose-health-checks/content-dir.ts | 1 +
.../diagnose-health-checks/git.test.ts | 1 +
.../commands/diagnose-health-checks/git.ts | 1 +
.../commands/diagnose-health-checks/index.ts | 1 +
.../macos-codesig.test.ts | 1 +
.../diagnose-health-checks/macos-codesig.ts | 1 +
.../commands/diagnose-health-checks/names.ts | 1 +
.../diagnose-health-checks/runner.test.ts | 5 +-
.../commands/diagnose-health-checks/runner.ts | 4 +-
.../server-lock.test.ts | 1 +
.../diagnose-health-checks/server-lock.ts | 1 +
.../shadow-health.test.ts | 1 +
.../diagnose-health-checks/shadow-health.ts | 7 +-
.../shadow-repo.test.ts | 1 +
.../diagnose-health-checks/shadow-repo.ts | 1 +
.../commands/diagnose-health-checks/types.ts | 1 +
.../cli/src/commands/diagnose-health.test.ts | 5 +-
packages/cli/src/commands/diagnose-health.ts | 1 +
packages/cli/src/commands/diagnose.test.ts | 4 +
packages/cli/src/commands/diagnose.ts | 16 +-
packages/cli/src/commands/embeddings/index.ts | 1 +
packages/cli/src/commands/init.test.ts | 16 +
packages/cli/src/commands/init.ts | 15 +-
.../cli/src/commands/install-skill.test.ts | 1 +
packages/cli/src/commands/install-skill.ts | 1 +
packages/cli/src/commands/lock-state.ts | 1 +
.../src/commands/mcp-chain-validation.test.ts | 3 +
.../cli/src/commands/mcp-migrate-event.ts | 1 +
packages/cli/src/commands/mcp.ts | 1 +
packages/cli/src/commands/ps.test.ts | 12 +
packages/cli/src/commands/ps.ts | 7 +
.../cli/src/commands/repair-skills.test.ts | 6 +-
packages/cli/src/commands/seed.ts | 1 +
packages/cli/src/commands/self-spawn.ts | 1 +
packages/cli/src/commands/share/index.ts | 1 +
.../cli/src/commands/share/name-check.test.ts | 1 +
packages/cli/src/commands/share/name-check.ts | 1 +
.../cli/src/commands/share/owners.test.ts | 1 +
packages/cli/src/commands/share/owners.ts | 1 +
.../cli/src/commands/share/publish.test.ts | 5 +
packages/cli/src/commands/share/publish.ts | 10 +-
packages/cli/src/commands/sharing/index.ts | 1 +
packages/cli/src/commands/sharing/share.ts | 1 +
.../cli/src/commands/sharing/sharing.test.ts | 1 +
packages/cli/src/commands/sharing/status.ts | 1 +
packages/cli/src/commands/sharing/unshare.ts | 1 +
.../cli/src/commands/single-file-dispatch.ts | 1 +
packages/cli/src/commands/single-file-open.ts | 7 +-
packages/cli/src/commands/start.test.ts | 14 +-
packages/cli/src/commands/start.ts | 6 +-
packages/cli/src/commands/status.ts | 1 +
packages/cli/src/commands/stop.test.ts | 1 +
packages/cli/src/commands/stop.ts | 1 +
packages/cli/src/commands/sync.test.ts | 1 +
packages/cli/src/commands/ui-proxy.ts | 27 +-
packages/cli/src/commands/ui.test.ts | 1 +
packages/cli/src/commands/ui.ts | 15 +-
packages/cli/src/config/loader.test.ts | 5 +
packages/cli/src/config/paths.ts | 1 +
packages/cli/src/config/schema.test.ts | 2 +
packages/cli/src/config/schema.ts | 1 +
.../cli/src/diagnose/bundle-redact.test.ts | 4 +
packages/cli/src/diagnose/bundle-redact.ts | 1 +
packages/cli/src/diagnose/bundle.test.ts | 10 +
packages/cli/src/diagnose/bundle.ts | 12 +
packages/cli/src/diagnose/path-parity.test.ts | 1 +
packages/cli/src/github/folder-validator.ts | 1 +
packages/cli/src/github/visibility.ts | 1 +
packages/cli/src/index.ts | 1 +
.../project-integration-writers.test.ts | 3 +
.../project-integration-writers.ts | 3 +
.../src/integrations/resolve-project-root.ts | 1 +
.../write-project-ai-integrations.test.ts | 1 +
.../write-project-ai-integrations.ts | 1 +
.../src/integrations/write-project-skill.ts | 2 +
.../cli/src/loopback-bind-discipline.test.ts | 1 +
packages/cli/src/mcp/bundle-identity.test.ts | 2 +
packages/cli/src/mcp/bundle-identity.ts | 1 +
packages/cli/src/mcp/host-liveness.ts | 1 +
.../src/mcp/keepalive-orphan-reaping.test.ts | 7 +-
packages/cli/src/mcp/lifecycle-logging.ts | 4 +-
packages/cli/src/mcp/server.ts | 4 +-
packages/cli/src/mcp/shim.test.ts | 3 +
packages/cli/src/mcp/shim.ts | 3 +-
packages/cli/src/sharing/git-exclude.ts | 5 +-
.../cli/src/tsdown-bundle-coverage.test.ts | 1 +
packages/cli/src/utils/frontmatter.ts | 4 +-
packages/cli/src/utils/process-scan.ts | 1 +
packages/cli/tests/e2e/cli-linux-e2e.ts | 1 +
.../_helpers/config-race-worker.ts | 1 +
.../tests/integration/_helpers/lock-worker.ts | 6 +-
.../detached-spawn-lifetime.test.ts | 3 +-
.../integration/mcp-host-config-race.test.ts | 4 +-
.../integration/multi-project-locks.test.ts | 10 +-
packages/core/scripts/dump-schema.ts | 1 +
.../src/bridge/bind-frontmatter-doc.test.ts | 1 +
.../core/src/bridge/bind-frontmatter-doc.ts | 1 +
packages/core/src/bridge/bridge-invariant.ts | 1 +
.../core/src/bridge/doc-boundary-space.ts | 1 +
.../src/bridge/frontmatter-region.test.ts | 2 +
.../core/src/bridge/merge-three-way.test.ts | 1 +
packages/core/src/bridge/merge-three-way.ts | 1 +
packages/core/src/bridge/normalize.test.ts | 5 +
packages/core/src/bridge/normalize.ts | 1 +
packages/core/src/burst-grouping.ts | 1 +
packages/core/src/config/bind-config-doc.ts | 1 +
packages/core/src/config/bind-okignore-doc.ts | 1 +
.../core/src/config/inspect-config-paths.ts | 1 +
.../core/src/config/merge-layered.test.ts | 1 +
packages/core/src/config/merge-layered.ts | 1 +
.../core/src/config/read-config-safely.ts | 1 +
packages/core/src/config/schema-leaf.test.ts | 2 +
packages/core/src/config/schema-leaf.ts | 1 +
packages/core/src/config/source-locator.ts | 1 +
.../core/src/config/validate-patch-scopes.ts | 1 +
.../core/src/config/write-config-patch.ts | 1 +
packages/core/src/config/yaml-patch.ts | 1 +
packages/core/src/constants/code-languages.ts | 1 +
packages/core/src/constants/lifecycle.ts | 1 +
.../constants/preview-embed-starters.test.ts | 1 +
.../src/constants/preview-embed-starters.ts | 1 +
.../src/constants/preview-theme-tokens.ts | 1 +
packages/core/src/constants/upload.test.ts | 1 +
packages/core/src/constants/upload.ts | 1 +
.../src/extensions/blockquote-fidelity.ts | 1 +
.../src/extensions/code-block-fidelity.ts | 1 +
.../core/src/extensions/code-mark-fidelity.ts | 1 +
packages/core/src/extensions/comment-block.ts | 1 +
packages/core/src/extensions/comment-mark.ts | 1 +
.../src/extensions/emphasis-fidelity.test.ts | 1 +
.../core/src/extensions/emphasis-fidelity.ts | 1 +
packages/core/src/extensions/escape-mark.ts | 1 +
.../src/extensions/footnote-definition.ts | 1 +
.../core/src/extensions/footnote-reference.ts | 1 +
packages/core/src/extensions/frontmatter.ts | 1 +
.../src/extensions/hard-break-fidelity.ts | 1 +
.../core/src/extensions/heading-fidelity.ts | 1 +
.../src/extensions/html-block-fidelity.ts | 1 +
.../extensions/image-reference-fidelity.ts | 1 +
.../core/src/extensions/image-src-fidelity.ts | 1 +
.../core/src/extensions/link-fidelity.test.ts | 1 +
packages/core/src/extensions/link-fidelity.ts | 1 +
.../src/extensions/link-ref-def-fidelity.ts | 1 +
packages/core/src/extensions/list.test.ts | 1 +
packages/core/src/extensions/list.ts | 4 +
.../extensions/source-literal-mark.test.ts | 1 +
.../src/extensions/source-literal-mark.ts | 1 +
.../core/src/extensions/strike-fidelity.ts | 1 +
.../core/src/extensions/table-fidelity.ts | 1 +
packages/core/src/extensions/tag.ts | 1 +
.../thematic-break-fidelity.test.ts | 1 +
.../src/extensions/thematic-break-fidelity.ts | 1 +
packages/core/src/frontmatter/tags.ts | 1 +
packages/core/src/git/worktree-list-parser.ts | 1 +
packages/core/src/handoff/index.ts | 1 +
.../core/src/handoff/prompt-composer.test.ts | 4 +
packages/core/src/handoff/terminal-launch.ts | 1 +
packages/core/src/handoff/types.ts | 1 +
.../core/src/handoff/urn-ipc-registry.test.ts | 1 +
packages/core/src/handoff/urn-ipc-registry.ts | 1 +
packages/core/src/index.ts | 307 +++++++++---------
packages/core/src/keepalive/keepalive.test.ts | 2 +
packages/core/src/keepalive/keepalive.ts | 7 +-
packages/core/src/logging/renderer-log.ts | 1 +
...olink-void-html-guard.astral-brace.test.ts | 1 +
...tolink-void-html-guard.consistency.test.ts | 1 +
...autolink-void-html-guard.precision.test.ts | 1 +
.../markdown/autolink-void-html-guard.test.ts | 1 +
.../markdown/backslash-escape-guard.test.ts | 1 +
.../boundary-whitespace-pm-display.test.ts | 1 +
.../core/src/markdown/callout-transformer.ts | 1 +
.../callout-type-expansion.precision.test.ts | 1 +
.../comment-promoter.precision.test.ts | 2 +
.../core/src/markdown/comment-promoter.ts | 1 +
.../markdown/details-accordion-promoter.ts | 1 +
.../src/markdown/entity-ref-guard.test.ts | 1 +
packages/core/src/markdown/fence-regions.ts | 1 +
packages/core/src/markdown/fixtures/index.ts | 5 +
.../src/markdown/fixtures/perf/generate.ts | 5 +
.../src/markdown/footnote.precision.test.ts | 1 +
.../src/markdown/guard-flanking-matrix.ts | 1 +
.../core/src/markdown/handler-shadow-audit.ts | 1 +
.../core/src/markdown/handlers.mdx.test.ts | 2 +
packages/core/src/markdown/handlers.test.ts | 1 +
.../highlight-promoter.precision.test.ts | 3 +
.../core/src/markdown/highlight-promoter.ts | 1 +
.../core/src/markdown/html-to-mdast.test.ts | 1 +
packages/core/src/markdown/html-to-mdast.ts | 4 +-
packages/core/src/markdown/image-promoter.ts | 1 +
packages/core/src/markdown/index.ts | 9 +
.../math-block-guard.precision.test.ts | 2 +
packages/core/src/markdown/math-promoter.ts | 1 +
.../markdown/mdast-to-hast-handlers.test.ts | 2 +
.../src/markdown/mdast-to-hast-handlers.ts | 1 +
.../core/src/markdown/mdast-to-html.test.ts | 2 +
packages/core/src/markdown/mdast-to-html.ts | 1 +
.../markdown/mdx-jsx-mdast-promotion.test.ts | 1 +
.../core/src/markdown/merged-walker.test.ts | 1 +
packages/core/src/markdown/merged-walker.ts | 1 +
.../markdown/mermaid-fence.precision.test.ts | 1 +
.../core/src/markdown/mermaid-promoter.ts | 1 +
.../src/markdown/parse-with-fallback.test.ts | 5 +
.../core/src/markdown/parse-with-fallback.ts | 5 +
.../core/src/markdown/parser-drop-closure.ts | 1 +
.../src/markdown/pdf-embed.precision.test.ts | 1 +
packages/core/src/markdown/pipeline.ts | 1 +
.../core/src/markdown/position-aware-join.ts | 1 +
.../core/src/markdown/position-slice.test.ts | 1 +
packages/core/src/markdown/position-slice.ts | 4 +-
.../markdown/promoted-mdast-coverage.test.ts | 1 +
.../markdown/pua-codepoint-uniqueness.test.ts | 1 +
.../raw-mdx-fallback-mdast-promotion.test.ts | 1 +
.../skip-notion-whitespace.test.ts | 1 +
.../rehype-plugins/skip-notion-whitespace.ts | 1 +
.../rehype-plugins/strip-cocoa-meta.test.ts | 1 +
.../rehype-plugins/strip-cocoa-meta.ts | 1 +
.../strip-gdocs-wrapper.test.ts | 1 +
.../rehype-plugins/strip-gdocs-wrapper.ts | 1 +
.../strip-github-hovercard.test.ts | 1 +
.../rehype-plugins/strip-github-hovercard.ts | 1 +
.../strip-gmail-classes.test.ts | 1 +
.../rehype-plugins/strip-gmail-classes.ts | 1 +
.../strip-gsheets-wrapper.test.ts | 1 +
.../rehype-plugins/strip-gsheets-wrapper.ts | 1 +
.../rehype-plugins/strip-mso-styles.test.ts | 1 +
.../rehype-plugins/strip-mso-styles.ts | 1 +
.../strip-slack-classes.test.ts | 1 +
.../rehype-plugins/strip-slack-classes.ts | 1 +
.../rehype-plugins/strip-vscode-spans.test.ts | 1 +
.../rehype-plugins/strip-vscode-spans.ts | 1 +
.../core/src/markdown/resolve-image-url.ts | 1 +
...oundtrip-boundary-space-overescape.test.ts | 1 +
packages/core/src/markdown/safe-url.test.ts | 1 +
packages/core/src/markdown/safe-url.ts | 1 +
.../core/src/markdown/serialize-helpers.ts | 1 +
.../markdown/single-dollar-math-promoter.ts | 1 +
.../core/src/markdown/tag.precision.test.ts | 1 +
.../to-markdown-handlers.attention.test.ts | 1 +
...arkdown-handlers.charref-attention.test.ts | 1 +
.../to-markdown-handlers.inline-math.test.ts | 1 +
.../to-markdown-handlers.overescape.test.ts | 1 +
...to-markdown-handlers.residual-axes.test.ts | 2 +
.../core/src/markdown/to-markdown-handlers.ts | 1 +
.../src/markdown/unknown-mdast-guard.test.ts | 1 +
.../core/src/markdown/unknown-mdast-guard.ts | 1 +
.../core/src/markdown/whitespace-char-ref.ts | 1 +
.../src/markdown/wiki-embed-opaque.test.ts | 1 +
.../wiki-link-mdast-promotion.test.ts | 1 +
.../src/markdown/wiki-link-micromark.test.ts | 1 +
.../core/src/markdown/wiki-link-micromark.ts | 3 +
.../src/markdown/wrap-as-inline-code.test.ts | 1 +
packages/core/src/metrics/parse-health.ts | 1 +
packages/core/src/registry/built-ins.ts | 8 +
.../src/registry/canonical-compat.test.ts | 2 +
packages/core/src/registry/index.ts | 1 +
packages/core/src/registry/projection.test.ts | 1 +
packages/core/src/registry/projection.ts | 1 +
packages/core/src/registry/types.ts | 4 +
.../src/registry/wiki-embed-compat.test.ts | 3 +
packages/core/src/schema-invariant.test.ts | 4 +
packages/core/src/schemas/api.type-tests.ts | 6 +
.../core/src/schemas/api/_envelope.test.ts | 2 +
packages/core/src/schemas/api/_envelope.ts | 3 +
packages/core/src/schemas/api/_shared.ts | 1 +
.../core/src/schemas/api/agent-write.test.ts | 1 +
packages/core/src/schemas/api/agent-write.ts | 1 +
packages/core/src/schemas/api/client-logs.ts | 1 +
.../src/schemas/api/document-read.test.ts | 1 +
.../core/src/schemas/api/document-read.ts | 1 +
packages/core/src/schemas/api/embed-detect.ts | 1 +
packages/core/src/schemas/api/history.ts | 1 +
packages/core/src/schemas/api/index.ts | 1 +
.../src/schemas/api/links-orphans.test.ts | 1 +
.../core/src/schemas/api/links-orphans.ts | 1 +
.../core/src/schemas/api/local-op.test.ts | 1 +
packages/core/src/schemas/api/local-op.ts | 1 +
packages/core/src/schemas/api/metrics.test.ts | 1 +
packages/core/src/schemas/api/metrics.ts | 1 +
packages/core/src/schemas/api/pages.test.ts | 1 +
packages/core/src/schemas/api/pages.ts | 1 +
packages/core/src/schemas/api/share.ts | 5 +
packages/core/src/schemas/api/sync-seed.ts | 1 +
.../core/src/schemas/api/tags-search.test.ts | 1 +
packages/core/src/schemas/api/tags-search.ts | 2 +
packages/core/src/schemas/cc1.ts | 1 +
packages/core/src/server.ts | 1 +
packages/core/src/shadow-repo-layout.test.ts | 13 +-
packages/core/src/shadow-repo-layout.ts | 7 +-
.../core/src/sharing/candidate-selection.ts | 1 +
packages/core/src/sharing/receive-flow.ts | 1 +
packages/core/src/sharing/share-url.ts | 1 +
packages/core/src/skill-state/schema.ts | 1 +
packages/core/src/util/atomic-yaml-write.ts | 19 +-
packages/core/src/util/file-lock.ts | 22 +-
.../core/src/utils/chunked-insert.test.ts | 1 +
packages/core/src/utils/chunked-insert.ts | 1 +
packages/core/src/utils/embed-url-rewrite.ts | 1 +
packages/core/src/utils/file-size.test.ts | 1 +
packages/core/src/utils/identity.test.ts | 1 +
packages/core/src/utils/identity.ts | 7 +-
packages/core/src/utils/loom-embed.ts | 1 +
packages/core/src/utils/path-resolve.ts | 1 +
packages/core/src/utils/pdf-anchor.ts | 1 +
packages/core/src/utils/tag-rollup.ts | 1 +
packages/core/src/utils/vimeo-embed.ts | 1 +
packages/core/src/utils/youtube-embed.test.ts | 4 +
packages/core/src/utils/youtube-embed.ts | 1 +
packages/core/src/y-prosemirror-patch.test.ts | 7 +-
.../tests/health/parse-health-gate.test.ts | 1 +
.../core/tests/health/parse-health-gate.ts | 11 +-
.../core/tests/perf/markdown-bench.test.ts | 7 +
.../core/tests/perf/regression-gate.test.ts | 2 +
packages/core/tests/perf/regression-gate.ts | 6 +
.../core/tests/perf/run-regression-gate.ts | 1 +
packages/desktop/electron.vite.config.ts | 1 +
packages/desktop/playwright.config.ts | 1 +
packages/desktop/scripts/afterPack.mjs | 1 +
packages/desktop/scripts/afterSign.mjs | 1 +
.../desktop/scripts/ensure-node-pty-exec.mjs | 1 +
.../desktop/src/main/append-okignore.test.ts | 3 +-
packages/desktop/src/main/asset-allowlist.ts | 1 +
packages/desktop/src/main/asset-menu.ts | 1 +
packages/desktop/src/main/asset-safety-net.ts | 1 +
packages/desktop/src/main/auto-updater.ts | 9 +
packages/desktop/src/main/bootstrap.ts | 1 +
.../desktop/src/main/branch-info-proxy.ts | 1 +
.../src/main/bundle-replace-detector.ts | 1 +
packages/desktop/src/main/cascade-position.ts | 1 +
.../desktop/src/main/check-target-exists.ts | 1 +
packages/desktop/src/main/claude-readiness.ts | 1 +
packages/desktop/src/main/consent-dialog.ts | 1 +
.../src/main/create-new-project.test.ts | 4 +-
.../desktop/src/main/create-new-project.ts | 2 +
packages/desktop/src/main/debug-ipc.ts | 1 +
packages/desktop/src/main/desktop-logger.ts | 3 +-
packages/desktop/src/main/dialog-helpers.ts | 1 +
.../src/main/driver-boot-smoke.test.ts | 1 +
.../desktop/src/main/driver-boot-smoke.ts | 1 +
packages/desktop/src/main/embed-referer.ts | 1 +
.../desktop/src/main/folder-admission.test.ts | 2 +
.../main/git-preflight-handler-otel.test.ts | 1 +
.../src/main/git-preflight-handler.test.ts | 5 +-
.../desktop/src/main/git-preflight-handler.ts | 1 +
packages/desktop/src/main/git-remote.test.ts | 3 +-
packages/desktop/src/main/git-remote.ts | 1 +
packages/desktop/src/main/index.ts | 15 +-
packages/desktop/src/main/ipc-handlers.ts | 9 +-
packages/desktop/src/main/ipc-log.test.ts | 1 +
packages/desktop/src/main/ipc-log.ts | 1 +
.../desktop/src/main/ipc/install-skill.ts | 1 +
.../local-op-auth-idempotent-start.test.ts | 1 +
packages/desktop/src/main/ipc/local-op.ts | 1 +
packages/desktop/src/main/ipc/seed.ts | 1 +
packages/desktop/src/main/ipc/sharing.test.ts | 1 +
packages/desktop/src/main/ipc/sharing.ts | 1 +
packages/desktop/src/main/keepalive.ts | 1 +
.../desktop/src/main/list-git-worktrees.ts | 1 +
packages/desktop/src/main/mcp-wiring.ts | 12 +-
packages/desktop/src/main/menu.ts | 1 +
packages/desktop/src/main/navigator-window.ts | 1 +
packages/desktop/src/main/ok-init.test.ts | 1 +
packages/desktop/src/main/ok-init.ts | 1 +
.../desktop/src/main/onboarding-telemetry.ts | 1 +
packages/desktop/src/main/path-install.ts | 3 +-
.../src/main/process-safety-net.test.ts | 1 +
.../desktop/src/main/process-safety-net.ts | 1 +
.../desktop/src/main/project-mcp-reclaim.ts | 1 +
.../desktop/src/main/read-git-dir-kind.ts | 1 +
packages/desktop/src/main/read-head-branch.ts | 1 +
.../src/main/reduced-transparency-handler.ts | 1 +
.../src/main/remove-git-folder.test.ts | 4 +-
.../desktop/src/main/remove-git-folder.ts | 1 +
.../src/main/renderer-console-capture.ts | 4 +-
.../desktop/src/main/resolve-share-target.ts | 1 +
.../desktop/src/main/share-handoff.test.ts | 1 +
packages/desktop/src/main/share-handoff.ts | 2 +
packages/desktop/src/main/shell-allowlist.ts | 1 +
packages/desktop/src/main/show-gate.ts | 1 +
.../desktop/src/main/skill-reclaim.test.ts | 3 +-
packages/desktop/src/main/skill-reclaim.ts | 6 +-
.../src/main/spellcheck-context-menu.ts | 1 +
packages/desktop/src/main/spellcheck-menu.ts | 1 +
packages/desktop/src/main/state-store.ts | 4 +-
.../desktop/src/main/terminal-consent.test.ts | 1 +
packages/desktop/src/main/terminal-consent.ts | 1 +
.../desktop/src/main/terminal-lifecycle.ts | 1 +
packages/desktop/src/main/terminal-manager.ts | 4 +-
.../desktop/src/main/terminal-telemetry.ts | 1 +
.../desktop/src/main/theme-applied-handler.ts | 1 +
packages/desktop/src/main/theme-handler.ts | 1 +
packages/desktop/src/main/url-scheme.test.ts | 1 +
packages/desktop/src/main/url-scheme.ts | 1 +
.../desktop/src/main/utility-fork-env.test.ts | 1 +
packages/desktop/src/main/utility-fork-env.ts | 1 +
packages/desktop/src/main/window-manager.ts | 15 +-
.../desktop/src/main/window-min-size.test.ts | 1 +
packages/desktop/src/preload/index.ts | 1 +
.../desktop/src/shared/bridge-contract.ts | 1 +
packages/desktop/src/shared/entry-point.ts | 1 +
packages/desktop/src/shared/ipc-channels.ts | 1 +
packages/desktop/src/shared/ipc-events.ts | 1 +
packages/desktop/src/shared/ipc-handler.ts | 1 +
packages/desktop/src/shared/ipc-invoke.ts | 1 +
packages/desktop/src/shared/ipc-send.ts | 1 +
packages/desktop/src/shared/labels.ts | 1 +
packages/desktop/src/utility/keyring-smoke.ts | 4 +-
packages/desktop/src/utility/pty-host.ts | 4 +-
packages/desktop/src/utility/server-entry.ts | 1 +
.../tests/integration/asset-open-ipc.test.ts | 1 +
.../tests/integration/auto-updater.test.ts | 29 ++
.../integration/detached-lifecycle.test.ts | 7 +-
.../tests/integration/dock-visibility.test.ts | 2 +
.../integration/ephemeral-lifecycle.test.ts | 4 +-
.../tests/integration/handoff-ipc.test.ts | 4 +-
.../ipc-channel-count-ratchet.test.ts | 1 +
.../tests/integration/m1-smoke.test.ts | 4 +-
.../no-loosely-typed-webcontents-ipc.test.ts | 1 +
.../no-resolved-value-theme-source.test.ts | 1 +
.../packaged-helper-runs-as-node.test.ts | 1 +
.../playwright-topass-budget.test.ts | 1 +
.../integration/smoke-mock-update.test.ts | 1 +
.../desktop/tests/main/asset-menu.test.ts | 1 +
.../tests/main/asset-open-handlers.test.ts | 1 +
.../tests/main/asset-safety-net.test.ts | 1 +
packages/desktop/tests/main/bootstrap.test.ts | 1 +
.../main/bundle-replace-detector.test.ts | 1 +
.../main/git-config-parser-parity.test.ts | 1 +
.../tests/main/install-skill-ipc.test.ts | 1 +
.../desktop/tests/main/ipc-handlers.test.ts | 1 +
packages/desktop/tests/main/menu.test.ts | 3 +
.../tests/main/navigator-window.test.ts | 1 +
packages/desktop/tests/main/show-gate.test.ts | 1 +
.../main/spellcheck-context-menu.test.ts | 1 +
.../tests/main/spellcheck-menu.test.ts | 1 +
.../tests/main/terminal-consent.test.ts | 1 +
.../tests/main/terminal-lifecycle.test.ts | 4 +-
.../tests/main/terminal-manager.test.ts | 1 +
.../tests/main/theme-applied-handler.test.ts | 1 +
.../desktop/tests/main/theme-handler.test.ts | 1 +
.../tests/main/update-state-handlers.test.ts | 1 +
.../tests/main/url-scheme-handler.test.ts | 1 +
.../main/window-manager-ephemeral.test.ts | 1 +
.../desktop/tests/main/window-manager.test.ts | 2 +
packages/desktop/tests/preload/bridge.test.ts | 1 +
.../tests/preload/update-listeners.test.ts | 1 +
.../smoke/_helpers/electron-cleanup.test.ts | 3 +-
.../tests/smoke/_helpers/electron-cleanup.ts | 4 +-
.../tests/smoke/_helpers/electron-stderr.ts | 1 +
.../_helpers/no-unbounded-app-close.test.ts | 1 +
.../smoke/_helpers/parse-timeouts.test.ts | 4 +-
.../tests/smoke/_helpers/parse-timeouts.ts | 1 +
.../tests/smoke/_helpers/smoke-test.ts | 4 +-
.../tests/smoke/_helpers/stale-build-guard.ts | 1 +
.../tests/smoke/_nav-empty-840x600.e2e.ts | 4 +-
.../tests/smoke/_nav-size-screenshots.e2e.ts | 4 +-
.../smoke/agent-patch-divergence-probe.e2e.ts | 3 +
.../desktop/tests/smoke/calibration.test.ts | 1 +
.../desktop/tests/smoke/consent-dialog.e2e.ts | 4 +-
.../tests/smoke/create-new-project.e2e.ts | 4 +-
packages/desktop/tests/smoke/deep-link.e2e.ts | 4 +-
.../desktop/tests/smoke/external-link.e2e.ts | 1 +
.../desktop/tests/smoke/mcp-wiring.e2e.ts | 13 +-
.../smoke/navigator-close-on-open.e2e.ts | 1 +
.../tests/smoke/qa-create-new-extended.e2e.ts | 4 +-
.../smoke/rename-divergence-probe.e2e.ts | 7 +-
.../smoke/share-receive-multi-worktree.e2e.ts | 2 +
.../sidebar-create-rename-editable.e2e.ts | 1 +
.../smoke/sidebar-pill-lockstep-fade.e2e.ts | 1 +
.../desktop/tests/smoke/terminal-dock.e2e.ts | 4 +-
.../desktop/tests/smoke/theme-sync.e2e.ts | 1 +
.../tests/smoke/window-min-size.e2e.ts | 1 +
.../unit/auto-updater-apply-channel.test.ts | 1 +
.../tests/unit/bridge-contract-types.test.ts | 1 +
.../electron-builder-cli-native-deps.test.ts | 1 +
.../unit/electron-builder-cli-pkgjson.test.ts | 1 +
.../electron-builder-node-pty-deps.test.ts | 1 +
...ectron-builder-parcel-watcher-deps.test.ts | 7 +-
.../unit/electron-cleanup-bounded.test.ts | 1 +
.../tests/unit/ensure-node-pty-exec.test.ts | 1 +
.../unit/entitlements-helper-split.test.ts | 1 +
.../unit/helper-bundle-info-plist.test.ts | 1 +
.../unit/helper-bundle-name-agreement.test.ts | 1 +
.../desktop/tests/unit/ok-wrapper.test.ts | 1 +
...ke-test-fixture-attach-conditional.test.ts | 1 +
.../unit/state-store-channel-fields.test.ts | 1 +
.../tests/unit/state-store-m3-fields.test.ts | 1 +
.../tests/utility/pty-flood.harness.ts | 7 +-
.../desktop/tests/utility/pty-flood.test.ts | 1 +
.../tests/utility/pty-host-real-io.test.ts | 1 +
.../tests/utility/pty-host-reap.test.ts | 4 +-
.../tests/utility/pty-host.real-io-harness.ts | 1 +
.../tests/utility/pty-host.reap-harness.ts | 4 +-
.../desktop/tests/utility/pty-host.test.ts | 1 +
.../tests/utility/server-entry.test.ts | 2 +
.../scripts/build-skill-bundles.test.ts | 3 +-
packages/server/src/activity-log.ts | 1 +
packages/server/src/agent-activity.test.ts | 4 +
packages/server/src/agent-activity.ts | 4 +
packages/server/src/agent-presence.test.ts | 1 +
packages/server/src/agent-sessions.ts | 1 +
...ent-write-replace-crdt-convergence.test.ts | 1 +
packages/server/src/agent-write-summary.ts | 1 +
.../server/src/api-agent-frontmatter.test.ts | 1 +
packages/server/src/api-create-page.test.ts | 7 +-
.../src/api-document-list-ready-gate.test.ts | 1 +
packages/server/src/api-extension.ts | 51 ++-
.../src/api-rename-rollback-summary.test.ts | 2 +
.../src/api-search-semantic-factory.test.ts | 1 +
.../server/src/api-search-semantic.test.ts | 1 +
packages/server/src/api-search.test.ts | 2 +
.../server/src/apply-managed-rename.test.ts | 1 +
...asset-serve-middleware.integration.test.ts | 1 +
.../server/src/asset-serve-middleware.test.ts | 1 +
packages/server/src/asset-serve-middleware.ts | 1 +
packages/server/src/asset-walk.ts | 1 +
packages/server/src/backlink-index.test.ts | 3 +
packages/server/src/bash/index.ts | 1 +
packages/server/src/bash/mtime-scan.ts | 3 +-
packages/server/src/bash/parse-command.ts | 1 +
.../server/src/boot-conflict-restore.test.ts | 4 +-
.../src/boot-walk-responsiveness.test.ts | 1 +
packages/server/src/boot.test.ts | 3 +
packages/server/src/boot.ts | 9 +-
.../server/src/bridge-no-wallclock.test.ts | 1 +
packages/server/src/bridge-quiescence.test.ts | 1 +
packages/server/src/bridge-quiescence.ts | 1 +
packages/server/src/bridge-watchdog.test.ts | 8 +
packages/server/src/bridge-watchdog.ts | 4 +
packages/server/src/build-skill-zip.test.ts | 1 +
packages/server/src/build-skill-zip.ts | 1 +
.../server/src/collab-message-limit.test.ts | 3 +-
.../server/src/config-file-watcher.test.ts | 9 +-
packages/server/src/config-file-watcher.ts | 4 +-
.../server/src/config-persistence.test.ts | 7 +-
packages/server/src/config-persistence.ts | 4 +-
packages/server/src/config-telemetry.test.ts | 3 +-
packages/server/src/config/paths.ts | 1 +
packages/server/src/config/schema.test.ts | 2 +
packages/server/src/config/schema.ts | 1 +
packages/server/src/conflict-errors.test.ts | 1 +
packages/server/src/conflict-errors.ts | 1 +
.../server/src/conflict-lifecycle-seed.ts | 1 +
packages/server/src/conflict-storage.test.ts | 4 +
packages/server/src/conflict-storage.ts | 5 +
packages/server/src/content-filter.test.ts | 1 +
packages/server/src/content-filter.ts | 4 +-
packages/server/src/content/enrichment.ts | 3 +-
.../src/content/folder-frontmatter-write.ts | 4 +-
.../server/src/content/frontmatter-merge.ts | 1 +
.../server/src/content/nested-folder-rules.ts | 1 +
packages/server/src/content/substitution.ts | 1 +
.../server/src/content/templates-resolver.ts | 1 +
.../server/src/content/templates-write.ts | 10 +-
packages/server/src/contributor-tracker.ts | 1 +
packages/server/src/doc-extensions.ts | 1 +
packages/server/src/doc-lineage-guard.test.ts | 1 +
packages/server/src/doc-lineage-guard.ts | 1 +
packages/server/src/document-list.test.ts | 2 +
packages/server/src/embed-probe.test.ts | 10 +-
packages/server/src/embed-probe.ts | 3 +
packages/server/src/embeddings/chunking.ts | 1 +
.../server/src/embeddings/concept-embedder.ts | 1 +
packages/server/src/embeddings/embedder.ts | 1 +
.../eval/semantic-eval.smoke.test.ts | 1 +
.../src/embeddings/eval/semantic-eval.ts | 1 +
packages/server/src/embeddings/index.ts | 1 +
.../server/src/embeddings/secrets-store.ts | 4 +-
.../server/src/embeddings/semantic-config.ts | 1 +
.../src/embeddings/semantic-search-service.ts | 1 +
.../server/src/embeddings/vector-cache.ts | 1 +
packages/server/src/error-classification.ts | 9 +
packages/server/src/external-change.ts | 1 +
packages/server/src/file-logger.test.ts | 4 +-
packages/server/src/file-logger.ts | 3 +-
packages/server/src/file-watcher.test.ts | 5 +
packages/server/src/file-watcher.ts | 12 +
.../server/src/frontmatter-malformed-error.ts | 1 +
packages/server/src/fs-traced.ts | 3 +
packages/server/src/fs/find-git-root.ts | 1 +
packages/server/src/fs/find-project-root.ts | 1 +
packages/server/src/gh-token-source.ts | 1 +
packages/server/src/git-branch-info.ts | 1 +
packages/server/src/git-checkout.ts | 1 +
packages/server/src/git-dirty.ts | 1 +
packages/server/src/git-handle.ts | 3 +
packages/server/src/git-identity.test.ts | 3 +
packages/server/src/git-identity.ts | 5 +
.../server/src/git-identity.worktree.test.ts | 3 +
packages/server/src/git-mutex.ts | 1 +
.../server/src/git-preflight-boot.test.ts | 9 +-
.../server/src/git-preflight-spawn.test.ts | 1 +
.../src/git-preflight-telemetry.test.ts | 1 +
.../server/src/git-preflight-telemetry.ts | 1 +
packages/server/src/git-preflight.test.ts | 12 +
packages/server/src/git-preflight.ts | 9 +
.../server/src/github-permissions.test.ts | 5 +
packages/server/src/github-permissions.ts | 2 +
packages/server/src/handoff-api.test.ts | 1 +
packages/server/src/handoff-api.ts | 4 +-
.../server/src/handoff-dispatch-api.test.ts | 1 +
packages/server/src/handoff-dispatch-api.ts | 1 +
packages/server/src/head-watcher.ts | 9 +-
.../server/src/http/error-response.test.ts | 1 +
packages/server/src/http/error-response.ts | 1 +
.../src/http/request-validation.test.ts | 4 +-
.../server/src/http/request-validation.ts | 1 +
.../server/src/http/success-response.test.ts | 1 +
packages/server/src/http/success-response.ts | 1 +
packages/server/src/hub-candidates.ts | 1 +
packages/server/src/idle-shutdown.test.ts | 2 +
packages/server/src/idle-shutdown.ts | 1 +
packages/server/src/init-project.ts | 1 +
.../src/keepalive-presence-bootstrap.test.ts | 3 +-
.../src/keepalive-presence-cleanup.test.ts | 3 +-
packages/server/src/local-op-security.test.ts | 10 +
packages/server/src/local-op-security.ts | 5 +
packages/server/src/local-ops/auth-flow.ts | 1 +
packages/server/src/local-ops/auth-query.ts | 1 +
.../local-ops/clone-error-classify.test.ts | 1 +
.../src/local-ops/clone-error-classify.ts | 1 +
.../server/src/local-ops/clone-flow.test.ts | 1 +
packages/server/src/local-ops/clone-flow.ts | 1 +
packages/server/src/local-ops/subprocess.ts | 4 +-
packages/server/src/local-ops/types.ts | 1 +
packages/server/src/local-sink-resolver.ts | 1 +
packages/server/src/logger.ts | 2 +
.../src/loopback-bind-discipline.test.ts | 1 +
.../server/src/loopback-rig-test-helpers.ts | 1 +
.../server/src/managed-rename-rewrite.test.ts | 1 +
packages/server/src/mcp-http.test.ts | 7 +-
packages/server/src/mcp-mount.ts | 4 +-
packages/server/src/mcp/agent-identity.ts | 1 +
packages/server/src/mcp/logger.ts | 3 +
.../src/mcp/tools/advisory-warnings.test.ts | 1 +
packages/server/src/mcp/tools/config.ts | 1 +
.../server/src/mcp/tools/consolidate-body.ts | 1 +
.../server/src/mcp/tools/discover-body.ts | 1 +
packages/server/src/mcp/tools/edit.ts | 4 +
packages/server/src/mcp/tools/exec.test.ts | 1 +
.../src/mcp/tools/get-preview-url.test.ts | 1 +
.../server/src/mcp/tools/get-preview-url.ts | 4 +-
packages/server/src/mcp/tools/index.ts | 1 +
packages/server/src/mcp/tools/ingest-body.ts | 1 +
packages/server/src/mcp/tools/links.ts | 1 +
.../tools/output-schema-strictness.test.ts | 5 +-
packages/server/src/mcp/tools/palette.test.ts | 1 +
packages/server/src/mcp/tools/palette.ts | 1 +
.../src/mcp/tools/preview-url-test-helpers.ts | 1 +
.../server/src/mcp/tools/research-body.ts | 1 +
.../server/src/mcp/tools/resolve-conflict.ts | 1 +
packages/server/src/mcp/tools/search.test.ts | 1 +
packages/server/src/mcp/tools/search.ts | 1 +
packages/server/src/mcp/tools/shared.test.ts | 5 +
packages/server/src/mcp/tools/shared.ts | 4 +
packages/server/src/mcp/tools/verb-schemas.ts | 1 +
packages/server/src/mcp/tools/write.ts | 4 +
packages/server/src/mermaid-validator.test.ts | 1 +
packages/server/src/mermaid-validator.ts | 1 +
.../src/mermaid-version-alignment.test.ts | 1 +
packages/server/src/metrics.ts | 1 +
.../server/src/missing-ok-config-error.ts | 1 +
packages/server/src/package-exports.test.ts | 1 +
.../src/paired-write-enforcement.test.ts | 3 +
.../server/src/paired-write-origin.test.ts | 5 +-
packages/server/src/pane-target.ts | 4 +-
...path-conditional-map-driven-origin.test.ts | 1 +
packages/server/src/perf-measurement.test.ts | 1 +
packages/server/src/perf-measurement.ts | 1 +
.../src/persistence-deferred-store.test.ts | 6 +-
.../server/src/persistence-fan-out.test.ts | 2 +
.../src/persistence-phantom-doc-guard.test.ts | 1 +
.../src/persistence-ytext-truth.test.ts | 5 +
packages/server/src/persistence.test.ts | 3 +
packages/server/src/persistence.ts | 14 +-
packages/server/src/process-lock.ts | 10 +-
packages/server/src/recently-removed-docs.ts | 1 +
packages/server/src/reconciliation.test.ts | 4 +
packages/server/src/reconciliation.ts | 7 +
.../server/src/removal-redirect-guard.test.ts | 13 +-
packages/server/src/removal-redirect-guard.ts | 1 +
packages/server/src/rename-log.test.ts | 1 +
packages/server/src/rename-log.ts | 17 +-
.../server/src/resolve-package-version.ts | 3 +-
.../src/rig-loopback-exclusivity.test.ts | 1 +
packages/server/src/save-version.test.ts | 6 +-
packages/server/src/seed/index.ts | 1 +
.../server/src/seed/install-pack-skill.ts | 4 +-
.../server/src/seed/okf-conformance.test.ts | 1 +
packages/server/src/seed/path-safety.ts | 1 +
packages/server/src/seed/starter.ts | 10 +
packages/server/src/seed/types.ts | 1 +
.../server/src/serialize-doc-ytext.test.ts | 2 +
packages/server/src/server-factory.test.ts | 8 +
packages/server/src/server-factory.ts | 20 +-
packages/server/src/server-lock.ts | 1 +
...erver-observers-divergent-fallback.test.ts | 5 +
packages/server/src/server-observers.test.ts | 8 +
packages/server/src/server-observers.ts | 5 +
packages/server/src/shadow-branch-gc.ts | 4 +-
packages/server/src/shadow-lock.ts | 4 +-
packages/server/src/shadow-repo.test.ts | 3 +
packages/server/src/shadow-repo.ts | 56 +++-
packages/server/src/share/construct-url.ts | 1 +
packages/server/src/share/git-context.ts | 1 +
.../src/share/publish.integration.test.ts | 4 +
packages/server/src/share/publish.test.ts | 1 +
packages/server/src/share/publish.ts | 11 +-
packages/server/src/showall-stream.test.ts | 2 +
packages/server/src/single-file-open.ts | 1 +
.../server/src/skill-install-events.test.ts | 1 +
packages/server/src/skill-install-events.ts | 1 +
packages/server/src/skill-install.test.ts | 5 +-
packages/server/src/skill-install.ts | 13 +-
packages/server/src/skill-state.test.ts | 1 +
packages/server/src/skill-state.ts | 1 +
packages/server/src/spawn-cursor-api.test.ts | 1 +
packages/server/src/spawn-cursor-api.ts | 1 +
packages/server/src/spawn-detached.test.ts | 1 +
packages/server/src/spawn-detached.ts | 4 +-
packages/server/src/sync-engine.test.ts | 23 +-
packages/server/src/sync-engine.ts | 37 ++-
packages/server/src/sync-timing.test.ts | 1 +
packages/server/src/sync-timing.ts | 1 +
packages/server/src/tag-index.ts | 1 +
packages/server/src/telemetry-file-sink.ts | 14 +-
packages/server/src/telemetry.test.ts | 1 +
packages/server/src/timeline-query.ts | 22 +-
.../src/tolerance-telemetry-writer.test.ts | 3 +-
.../server/src/tsdown-bundle-coverage.test.ts | 1 +
packages/server/src/ui-lock.ts | 1 +
packages/server/src/upload-errors.test.ts | 3 +
packages/server/src/upload-errors.ts | 1 +
packages/server/src/upload-streaming.test.ts | 1 +
packages/server/src/upload-streaming.ts | 9 +-
packages/server/src/version-constants.ts | 3 +-
1541 files changed, 3676 insertions(+), 595 deletions(-)
diff --git a/docs/scripts/generate-og-wordmark.ts b/docs/scripts/generate-og-wordmark.ts
index 2acc8793..a28d174c 100644
--- a/docs/scripts/generate-og-wordmark.ts
+++ b/docs/scripts/generate-og-wordmark.ts
@@ -1,6 +1,7 @@
import { readFileSync, writeFileSync } from 'node:fs';
import path from 'node:path';
+
const root = path.resolve(import.meta.dirname, '..');
const svg = readFileSync(path.join(root, 'public', 'ok-wordmark.svg'));
const dataUrl = `data:image/svg+xml;base64,${svg.toString('base64')}`;
diff --git a/docs/src/app/(home)/sections/eng-specs-graphic.tsx b/docs/src/app/(home)/sections/eng-specs-graphic.tsx
index b208fee1..c62ffde1 100644
--- a/docs/src/app/(home)/sections/eng-specs-graphic.tsx
+++ b/docs/src/app/(home)/sections/eng-specs-graphic.tsx
@@ -1,5 +1,6 @@
import { Code, Sparkles } from 'lucide-react';
+
const RINGS = [56, 82, 108] as const;
const RING_CENTER = { x: 80, y: 45 };
diff --git a/docs/src/app/(home)/sections/knowledge-base-graphic.tsx b/docs/src/app/(home)/sections/knowledge-base-graphic.tsx
index 112feb5b..1482256c 100644
--- a/docs/src/app/(home)/sections/knowledge-base-graphic.tsx
+++ b/docs/src/app/(home)/sections/knowledge-base-graphic.tsx
@@ -1,6 +1,7 @@
import { Sparkles } from 'lucide-react';
import type { CSSProperties } from 'react';
+
const RINGS = [56, 82, 108] as const;
const RING_CENTER = { x: 80, y: 45 };
diff --git a/docs/src/components/copy-prompt.tsx b/docs/src/components/copy-prompt.tsx
index 6a74157b..28ca3b40 100644
--- a/docs/src/components/copy-prompt.tsx
+++ b/docs/src/components/copy-prompt.tsx
@@ -26,7 +26,8 @@ export function CopyPrompt({ children }: CopyPromptProps) {
await navigator.clipboard.writeText(text);
setCopied(true);
window.setTimeout(() => setCopied(false), 2000);
- } catch {}
+ } catch {
+ }
};
return (
diff --git a/docs/src/components/overview-blocks.tsx b/docs/src/components/overview-blocks.tsx
index 462fd664..d50fc421 100644
--- a/docs/src/components/overview-blocks.tsx
+++ b/docs/src/components/overview-blocks.tsx
@@ -1,6 +1,7 @@
import { ArrowRight, Bot, Database, type LucideIcon, NotebookPen } from 'lucide-react';
import type { ReactNode } from 'react';
+
interface Layer {
k: string;
Icon: LucideIcon;
diff --git a/docs/src/lib/deferred-share.ts b/docs/src/lib/deferred-share.ts
index 298df0ad..bdba626a 100644
--- a/docs/src/lib/deferred-share.ts
+++ b/docs/src/lib/deferred-share.ts
@@ -1,3 +1,4 @@
+
export const PENDING_SHARE_COOKIE = 'ok_pending_share';
export const PENDING_SHARE_MAX_AGE_SECONDS = 7 * 24 * 60 * 60;
diff --git a/docs/src/lib/share-splash.ts b/docs/src/lib/share-splash.ts
index e364b801..032bb0ba 100644
--- a/docs/src/lib/share-splash.ts
+++ b/docs/src/lib/share-splash.ts
@@ -1,3 +1,4 @@
+
const SHARE_URL_VERSION_V1 = 0x01;
interface DecodedShare {
diff --git a/packages/app/playwright.a11y.config.ts b/packages/app/playwright.a11y.config.ts
index b7a2a09b..b9061eca 100644
--- a/packages/app/playwright.a11y.config.ts
+++ b/packages/app/playwright.a11y.config.ts
@@ -1,5 +1,6 @@
import { defineConfig } from '@playwright/test';
+
const isCI = !!process.env.CI;
export default defineConfig({
diff --git a/packages/app/playwright.config.ts b/packages/app/playwright.config.ts
index f6c9ec05..910a7870 100644
--- a/packages/app/playwright.config.ts
+++ b/packages/app/playwright.config.ts
@@ -1,5 +1,6 @@
import { defineConfig } from '@playwright/test';
+
const isCI = !!process.env.CI;
export default defineConfig({
diff --git a/packages/app/playwright.visual.config.ts b/packages/app/playwright.visual.config.ts
index e9f60626..c522418a 100644
--- a/packages/app/playwright.visual.config.ts
+++ b/packages/app/playwright.visual.config.ts
@@ -1,5 +1,6 @@
import { defineConfig } from '@playwright/test';
+
const isCI = !!process.env.CI;
export default defineConfig({
diff --git a/packages/app/src/build/app-version.ts b/packages/app/src/build/app-version.ts
index 8de3d072..9c69e05d 100644
--- a/packages/app/src/build/app-version.ts
+++ b/packages/app/src/build/app-version.ts
@@ -12,7 +12,8 @@ export function resolveAppVersion(): string {
if (typeof pkg.version === 'string' && pkg.version.length > 0) {
return pkg.version;
}
- } catch {}
+ } catch {
+ }
return '0.0.0-unknown';
}
diff --git a/packages/app/src/build/electron-mode-class.test.ts b/packages/app/src/build/electron-mode-class.test.ts
index d3e9a169..c13d9303 100644
--- a/packages/app/src/build/electron-mode-class.test.ts
+++ b/packages/app/src/build/electron-mode-class.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/packages/app/src/components/ActivityModeContent.tsx b/packages/app/src/components/ActivityModeContent.tsx
index 44e04f34..7f8d8801 100644
--- a/packages/app/src/components/ActivityModeContent.tsx
+++ b/packages/app/src/components/ActivityModeContent.tsx
@@ -12,6 +12,7 @@ import { AgentIcon } from './icons/AgentIcon';
import { Button } from './ui/button';
import { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';
+
async function postAgentUndo(body: {
connectionId: string;
docName: string;
@@ -31,6 +32,7 @@ async function postAgentUndo(body: {
}
}
+
function hashFromDocName(docName: string): string {
return `#/${docName
.split('/')
@@ -43,6 +45,7 @@ function navigateToDoc(docName: string): void {
window.location.hash = hashFromDocName(docName);
}
+
function LoadingState(): React.JSX.Element {
return (
['data'];
status: ReturnType
['status'];
@@ -304,6 +308,7 @@ function ActivityModeBody({
);
}
+
export function ActivityModeContent({
showBackButton = true,
}: {
diff --git a/packages/app/src/components/ArrayOfObjectsWidget.tsx b/packages/app/src/components/ArrayOfObjectsWidget.tsx
index dc373f2f..1c9159bc 100644
--- a/packages/app/src/components/ArrayOfObjectsWidget.tsx
+++ b/packages/app/src/components/ArrayOfObjectsWidget.tsx
@@ -1,3 +1,4 @@
+
import {
closestCenter,
DndContext,
diff --git a/packages/app/src/components/AuthModal.dom.test.tsx b/packages/app/src/components/AuthModal.dom.test.tsx
index bfa5538b..ad9b4a9e 100644
--- a/packages/app/src/components/AuthModal.dom.test.tsx
+++ b/packages/app/src/components/AuthModal.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, jest, test } from 'bun:test';
import { act, cleanup, render, screen } from '@testing-library/react';
import type { OkLocalOpAuthEvent, OkLocalOpAuthStatusResponse } from '@/lib/desktop-bridge-types';
diff --git a/packages/app/src/components/AuthModal.tsx b/packages/app/src/components/AuthModal.tsx
index 67ddcf0f..1b87a0f9 100644
--- a/packages/app/src/components/AuthModal.tsx
+++ b/packages/app/src/components/AuthModal.tsx
@@ -19,10 +19,12 @@ import {
} from './ui/dialog';
import { Input } from './ui/input';
+
async function copyToClipboard(text: string): Promise {
try {
await navigator.clipboard.writeText(text);
- } catch {}
+ } catch {
+ }
}
interface AuthSuccessResult {
@@ -42,6 +44,7 @@ interface AuthModalProps {
queryTransport?: AuthQueryTransport;
}
+
interface DeviceFlowPanelProps {
onSuccess: (result: AuthSuccessResult) => void;
transport: AuthTransport;
@@ -202,6 +205,7 @@ function DeviceFlowPanel({ onSuccess, transport }: DeviceFlowPanelProps) {
);
}
+
interface IdentityBodyProps {
login: string;
name: string;
@@ -237,6 +241,7 @@ function IdentityBody({ login, name, onNameChange, email, onEmailChange }: Ident
);
}
+
type AuthStep = 'checking' | 'auth' | 'identity' | 'done';
const IDENTITY_PROBE_TIMEOUT_MS = 10_000;
@@ -323,7 +328,8 @@ export function AuthModal({
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name, email }),
- }).catch(() => {});
+ }).catch(() => {
+ });
const result = { ...(authResult ?? { login: '' }), name, email };
setStep('done');
diff --git a/packages/app/src/components/AutoSyncOnboardingDialog.tsx b/packages/app/src/components/AutoSyncOnboardingDialog.tsx
index 80215913..fcce67ea 100644
--- a/packages/app/src/components/AutoSyncOnboardingDialog.tsx
+++ b/packages/app/src/components/AutoSyncOnboardingDialog.tsx
@@ -42,7 +42,10 @@ export function AutoSyncOnboardingDialog({ open, onResolved }: AutoSyncOnboardin
}
return (
- {}}>
+ {}}
+ >
diff --git a/packages/app/src/components/BetaBadge.tsx b/packages/app/src/components/BetaBadge.tsx
index 9c227d08..3dd7f5b6 100644
--- a/packages/app/src/components/BetaBadge.tsx
+++ b/packages/app/src/components/BetaBadge.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { useUpdateChannel } from '@/hooks/use-update-channel';
import { Badge } from './ui/badge';
diff --git a/packages/app/src/components/ClaudeReadinessBanner.dom.test.tsx b/packages/app/src/components/ClaudeReadinessBanner.dom.test.tsx
index daa5874b..2bff838d 100644
--- a/packages/app/src/components/ClaudeReadinessBanner.dom.test.tsx
+++ b/packages/app/src/components/ClaudeReadinessBanner.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
import type { ClaudeReadiness, OkDesktopBridge } from '@/lib/desktop-bridge-types';
diff --git a/packages/app/src/components/CloneDialog.dom.test.tsx b/packages/app/src/components/CloneDialog.dom.test.tsx
index ed5bcb30..fe93c4b0 100644
--- a/packages/app/src/components/CloneDialog.dom.test.tsx
+++ b/packages/app/src/components/CloneDialog.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
import { cleanup, render, screen } from '@testing-library/react';
import { getLastKnownSignedIn, setLastKnownSignedIn } from '@/lib/auth-state-cache';
diff --git a/packages/app/src/components/ConsentDialog.tsx b/packages/app/src/components/ConsentDialog.tsx
index 204a576c..037a8205 100644
--- a/packages/app/src/components/ConsentDialog.tsx
+++ b/packages/app/src/components/ConsentDialog.tsx
@@ -1,3 +1,4 @@
+
import { lazy, Suspense, useSyncExternalStore } from 'react';
import { consentStore } from '@/lib/consent-store';
diff --git a/packages/app/src/components/CreateProjectDialog.cascade-staleness.dom.test.tsx b/packages/app/src/components/CreateProjectDialog.cascade-staleness.dom.test.tsx
index 877e33f1..d58e51f3 100644
--- a/packages/app/src/components/CreateProjectDialog.cascade-staleness.dom.test.tsx
+++ b/packages/app/src/components/CreateProjectDialog.cascade-staleness.dom.test.tsx
@@ -511,6 +511,7 @@ describe('CreateProjectDialog cascade staleness (Tier-3 mount)', () => {
});
test('PRD-6649: 5 s polling skips probeNonce bump while a probe is in-flight (race-prevention gate)', async () => {
+
const stub = makeStubBridge(FIRST_GIT_RESULT, PARENT);
const setIntervalSpy = spyOn(globalThis, 'setInterval');
diff --git a/packages/app/src/components/CreateProjectDialog.tsx b/packages/app/src/components/CreateProjectDialog.tsx
index 7dfee77e..062ef88a 100644
--- a/packages/app/src/components/CreateProjectDialog.tsx
+++ b/packages/app/src/components/CreateProjectDialog.tsx
@@ -1,3 +1,4 @@
+
import {
ALL_EDITOR_IDS,
CREATE_NEW_PROJECT_FAILURE_REASONS,
@@ -308,7 +309,8 @@ export function CreateProjectDialog({ open, onOpenChange, bridge }: CreateProjec
if (banner === null) return;
if (firedBanners.current.has(banner)) return;
firedBanners.current.add(banner);
- bridge.project.recordCreateNewBannerShown(banner).catch(() => {});
+ bridge.project.recordCreateNewBannerShown(banner).catch(() => {
+ });
}, [open, cascade, bridge]);
const rawName = name;
diff --git a/packages/app/src/components/CreateProjectMenuTrigger.tsx b/packages/app/src/components/CreateProjectMenuTrigger.tsx
index a4eb9e25..eb105d7f 100644
--- a/packages/app/src/components/CreateProjectMenuTrigger.tsx
+++ b/packages/app/src/components/CreateProjectMenuTrigger.tsx
@@ -1,3 +1,4 @@
+
import { useEffect, useState } from 'react';
import { CreateProjectDialog } from '@/components/CreateProjectDialog';
import type { OkDesktopBridge } from '@/lib/desktop-bridge-types';
diff --git a/packages/app/src/components/DeleteConfirmationDialog.tsx b/packages/app/src/components/DeleteConfirmationDialog.tsx
index 0230fda1..75730d65 100644
--- a/packages/app/src/components/DeleteConfirmationDialog.tsx
+++ b/packages/app/src/components/DeleteConfirmationDialog.tsx
@@ -43,7 +43,9 @@ export function DeleteConfirmationDialog({
{customTitle ?? t`Delete ${itemName}`}
-
+
{customDescription ??
t`Are you sure you want to delete ${itemName}? This action cannot be undone.`}
diff --git a/packages/app/src/components/DiffViewBoundary.tsx b/packages/app/src/components/DiffViewBoundary.tsx
index 5a95e4ca..f1329e9a 100644
--- a/packages/app/src/components/DiffViewBoundary.tsx
+++ b/packages/app/src/components/DiffViewBoundary.tsx
@@ -38,7 +38,8 @@ async function fetchConflictSides(file: string): Promise {
const payload = (await res.json()) as { detail?: unknown; title?: unknown };
if (typeof payload.detail === 'string') detail = payload.detail;
else if (typeof payload.title === 'string') detail = payload.title;
- } catch {}
+ } catch {
+ }
console.warn(
JSON.stringify({
event: 'conflict-content-fetch-failed',
diff --git a/packages/app/src/components/DocPanel.dom.test.tsx b/packages/app/src/components/DocPanel.dom.test.tsx
index b2567fd2..48b8323d 100644
--- a/packages/app/src/components/DocPanel.dom.test.tsx
+++ b/packages/app/src/components/DocPanel.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
import { cleanup, render, screen } from '@testing-library/react';
import type { ReactNode } from 'react';
diff --git a/packages/app/src/components/DocumentBoundary.test.ts b/packages/app/src/components/DocumentBoundary.test.ts
index 776e5aa0..35f25d18 100644
--- a/packages/app/src/components/DocumentBoundary.test.ts
+++ b/packages/app/src/components/DocumentBoundary.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
import { HocuspocusProvider } from '@hocuspocus/provider';
import { __resetSyncPromiseCache, syncPromise } from '@/editor/sync-promise';
@@ -25,7 +26,8 @@ afterEach(() => {
for (const p of providers) {
try {
p.destroy();
- } catch {}
+ } catch {
+ }
}
providers = [];
});
diff --git a/packages/app/src/components/DocumentBoundary.tsx b/packages/app/src/components/DocumentBoundary.tsx
index cfdb81f0..eaea173e 100644
--- a/packages/app/src/components/DocumentBoundary.tsx
+++ b/packages/app/src/components/DocumentBoundary.tsx
@@ -1,3 +1,4 @@
+
import type { HocuspocusProvider } from '@hocuspocus/provider';
import { type ReactNode, use } from 'react';
import { syncPromise } from '@/editor/sync-promise';
diff --git a/packages/app/src/components/DocumentErrorBoundary.test.ts b/packages/app/src/components/DocumentErrorBoundary.test.ts
index 0374eeb9..227ebb82 100644
--- a/packages/app/src/components/DocumentErrorBoundary.test.ts
+++ b/packages/app/src/components/DocumentErrorBoundary.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { MountAbortError } from '@/editor/mount-promise';
import {
diff --git a/packages/app/src/components/EditorActivityPool.test.ts b/packages/app/src/components/EditorActivityPool.test.ts
index be046da8..d110f573 100644
--- a/packages/app/src/components/EditorActivityPool.test.ts
+++ b/packages/app/src/components/EditorActivityPool.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { SYSTEM_DOC_NAME } from '@inkeep/open-knowledge-core';
import {
@@ -367,6 +368,7 @@ describe('computeEditorMountGate — invariant: at least one editor rendered', (
});
});
+
describe('shouldEmitFirstToggle — first-toggle mark gate', () => {
test('large doc, both editors rendering, not yet emitted → emit', () => {
expect(
diff --git a/packages/app/src/components/EditorActivityPool.tsx b/packages/app/src/components/EditorActivityPool.tsx
index 80896124..b60ba5f6 100644
--- a/packages/app/src/components/EditorActivityPool.tsx
+++ b/packages/app/src/components/EditorActivityPool.tsx
@@ -555,6 +555,7 @@ function ActivityEntry({
const [warmSnapshot] = useState(() => peekRenameSnapshot(entry.docName));
const warmHtml = warmSnapshot?.html ?? null;
+
const [hasEmittedFirstToggle, setHasEmittedFirstToggle] = useState(false);
useEffect(() => {
if (
diff --git a/packages/app/src/components/EditorActivityPool.warm-skeleton.dom.test.tsx b/packages/app/src/components/EditorActivityPool.warm-skeleton.dom.test.tsx
index c7d8b88e..6f591d21 100644
--- a/packages/app/src/components/EditorActivityPool.warm-skeleton.dom.test.tsx
+++ b/packages/app/src/components/EditorActivityPool.warm-skeleton.dom.test.tsx
@@ -12,6 +12,7 @@ import {
} from '@/editor/editor-cache';
import { expectVisualClassTokens } from '@/test-utils/visual-contract';
+
function WarmContentFallbackReplica({ html }: { html: string }) {
return (
@@ -24,6 +25,7 @@ function WarmContentFallbackReplica({ html }: { html: string }) {
);
}
+
function WarmFallbackHost({ docName }: { docName: string }) {
const [warmSnapshot] = useState(() => peekRenameSnapshot(docName));
const warmHtml = warmSnapshot?.html ?? null;
@@ -47,6 +49,7 @@ function WarmFallbackHost({ docName }: { docName: string }) {
const baseSnap = (html: string): RenameSnapshot => ({ html, scrollTop: 0, selection: null });
+
describe('WarmContentFallback DOM geometry', () => {
let consoleErrorSpy: ReturnType
;
let consoleWarnSpy: ReturnType;
@@ -161,6 +164,7 @@ describe('rename-snapshot store → warm-fallback selection contract', () => {
});
});
+
describe('warm-fallback scroll restoration', () => {
let scrollContainer: HTMLDivElement;
let consoleErrorSpy: ReturnType;
@@ -217,6 +221,7 @@ describe('warm-fallback scroll restoration', () => {
});
});
+
describe('captureRenameSnapshots — scrollTop capture (DOM)', () => {
let scrollContainer: HTMLDivElement;
let consoleErrorSpy: ReturnType;
diff --git a/packages/app/src/components/EditorTabs.tsx b/packages/app/src/components/EditorTabs.tsx
index 88871d88..40a81d1c 100644
--- a/packages/app/src/components/EditorTabs.tsx
+++ b/packages/app/src/components/EditorTabs.tsx
@@ -592,7 +592,12 @@ export function EditorTabs() {
)}
onWheel={scrollTabListOnWheel}
>
-
+
{});
+ .catch(() => {
+ });
}
const messageReady = documentCount !== null;
diff --git a/packages/app/src/components/FileTree.showall-lazy.dom.test.tsx b/packages/app/src/components/FileTree.showall-lazy.dom.test.tsx
index 96c9adfe..97791327 100644
--- a/packages/app/src/components/FileTree.showall-lazy.dom.test.tsx
+++ b/packages/app/src/components/FileTree.showall-lazy.dom.test.tsx
@@ -64,6 +64,7 @@ function makeFetchMock() {
});
}
+
class StubItem {
expanded = false;
selected = false;
diff --git a/packages/app/src/components/FileTree.showall-truncation.dom.test.tsx b/packages/app/src/components/FileTree.showall-truncation.dom.test.tsx
index ce67023d..568ce082 100644
--- a/packages/app/src/components/FileTree.showall-truncation.dom.test.tsx
+++ b/packages/app/src/components/FileTree.showall-truncation.dom.test.tsx
@@ -47,6 +47,7 @@ function makeFetchMock() {
});
}
+
class StubItem {
expanded = false;
selected = false;
diff --git a/packages/app/src/components/FileTree.superseded-refresh.dom.test.tsx b/packages/app/src/components/FileTree.superseded-refresh.dom.test.tsx
index b95616f3..4f8e9a86 100644
--- a/packages/app/src/components/FileTree.superseded-refresh.dom.test.tsx
+++ b/packages/app/src/components/FileTree.superseded-refresh.dom.test.tsx
@@ -68,6 +68,7 @@ function makeFetchMock() {
});
}
+
class StubItem {
expanded = false;
selected = false;
diff --git a/packages/app/src/components/FileTree.tsx b/packages/app/src/components/FileTree.tsx
index fe5f9595..5ed6c7e1 100644
--- a/packages/app/src/components/FileTree.tsx
+++ b/packages/app/src/components/FileTree.tsx
@@ -225,7 +225,8 @@ function focusEditorAfterRename(docName: string): void {
if (!editor || editor.isDestroyed) return;
try {
editor.commands.focus();
- } catch {}
+ } catch {
+ }
});
}
@@ -284,14 +285,16 @@ const MARKDOWN_FILE_ICON_SYMBOL = `][];
function iconNodeToSvg(iconNode: IconNode): string {
- return iconNode
- .map(([tag, { key: _, ...attrs }]) => {
- const attrString = Object.entries(attrs)
- .map(([k, v]) => `${k}="${v}"`)
- .join(' ');
- return `<${tag} ${attrString} />`;
- })
- .join('');
+ return (
+ iconNode
+ .map(([tag, { key: _, ...attrs }]) => {
+ const attrString = Object.entries(attrs)
+ .map(([k, v]) => `${k}="${v}"`)
+ .join(' ');
+ return `<${tag} ${attrString} />`;
+ })
+ .join('')
+ );
}
function createLucideSpriteSymbol(id: string, iconNode: IconNode): string {
diff --git a/packages/app/src/components/FrontmatterRow.tsx b/packages/app/src/components/FrontmatterRow.tsx
index 0a7e57cd..eaa02030 100644
--- a/packages/app/src/components/FrontmatterRow.tsx
+++ b/packages/app/src/components/FrontmatterRow.tsx
@@ -1,3 +1,4 @@
+
import { useSortable } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import {
diff --git a/packages/app/src/components/GraphPanel.tsx b/packages/app/src/components/GraphPanel.tsx
index 611bc4e9..142c96d2 100644
--- a/packages/app/src/components/GraphPanel.tsx
+++ b/packages/app/src/components/GraphPanel.tsx
@@ -65,7 +65,8 @@ function saveBoolPref(key: string, value: boolean): void {
} else {
window.localStorage.removeItem(key);
}
- } catch {}
+ } catch {
+ }
}
type FullscreenGraphMode = 'explore' | 'orphans' | 'hubs';
diff --git a/packages/app/src/components/InstallInClaudeDesktopDialog.tsx b/packages/app/src/components/InstallInClaudeDesktopDialog.tsx
index f62ed164..8e4ffe7c 100644
--- a/packages/app/src/components/InstallInClaudeDesktopDialog.tsx
+++ b/packages/app/src/components/InstallInClaudeDesktopDialog.tsx
@@ -15,6 +15,7 @@ import {
import { dispatchExternalLinkClick } from '@/lib/external-link';
import { cn } from '@/lib/utils';
+
const INSTALL_COMMAND = 'npx @inkeep/open-knowledge install-skill';
const DOCS_URL = 'https://openknowledge.ai/docs/integrations/claude-code';
diff --git a/packages/app/src/components/InteractionPropPanel.tsx b/packages/app/src/components/InteractionPropPanel.tsx
index d880eaa6..f891dbe2 100644
--- a/packages/app/src/components/InteractionPropPanel.tsx
+++ b/packages/app/src/components/InteractionPropPanel.tsx
@@ -1,3 +1,4 @@
+
import { autoUpdate, type VirtualElement } from '@floating-ui/dom';
import { type FC, type ReactNode, useLayoutEffect, useRef } from 'react';
import { cn } from '@/lib/utils';
diff --git a/packages/app/src/components/McpConsentDialog.tsx b/packages/app/src/components/McpConsentDialog.tsx
index b0d74a6c..19b0f796 100644
--- a/packages/app/src/components/McpConsentDialog.tsx
+++ b/packages/app/src/components/McpConsentDialog.tsx
@@ -1,3 +1,4 @@
+
import { lazy, Suspense, useSyncExternalStore } from 'react';
import { mcpConsentStore } from '@/lib/mcp-consent-store';
diff --git a/packages/app/src/components/McpConsentDialogBody.tsx b/packages/app/src/components/McpConsentDialogBody.tsx
index 5b5917ed..26a41673 100644
--- a/packages/app/src/components/McpConsentDialogBody.tsx
+++ b/packages/app/src/components/McpConsentDialogBody.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { useId, useState } from 'react';
import { toast as sonnerToast } from 'sonner';
diff --git a/packages/app/src/components/MountStalledAffordance.tsx b/packages/app/src/components/MountStalledAffordance.tsx
index dbfc38e3..65a1aa09 100644
--- a/packages/app/src/components/MountStalledAffordance.tsx
+++ b/packages/app/src/components/MountStalledAffordance.tsx
@@ -1,3 +1,4 @@
+
import { Trans } from '@lingui/react/macro';
import { type ReactElement, useEffect, useState } from 'react';
import { Button } from '@/components/ui/button';
diff --git a/packages/app/src/components/NavigatorApp.tsx b/packages/app/src/components/NavigatorApp.tsx
index 129539bc..8c9a6948 100644
--- a/packages/app/src/components/NavigatorApp.tsx
+++ b/packages/app/src/components/NavigatorApp.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { FolderOpenIcon, GitBranch, Loader2Icon, PlusIcon, XIcon } from 'lucide-react';
import { useTheme } from 'next-themes';
diff --git a/packages/app/src/components/NewItemDialog.test.ts b/packages/app/src/components/NewItemDialog.test.ts
index 5103ffe7..a152013f 100644
--- a/packages/app/src/components/NewItemDialog.test.ts
+++ b/packages/app/src/components/NewItemDialog.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import {
diff --git a/packages/app/src/components/ObjectWidget.tsx b/packages/app/src/components/ObjectWidget.tsx
index ba91de5a..16c83a6d 100644
--- a/packages/app/src/components/ObjectWidget.tsx
+++ b/packages/app/src/components/ObjectWidget.tsx
@@ -1,3 +1,4 @@
+
import {
closestCenter,
DndContext,
diff --git a/packages/app/src/components/PageHeader.tsx b/packages/app/src/components/PageHeader.tsx
index 14f2cb52..53d8f90a 100644
--- a/packages/app/src/components/PageHeader.tsx
+++ b/packages/app/src/components/PageHeader.tsx
@@ -1,3 +1,4 @@
+
import type { HocuspocusProvider } from '@hocuspocus/provider';
import {
bindFrontmatterDoc,
diff --git a/packages/app/src/components/PageHeaderWidgets.tsx b/packages/app/src/components/PageHeaderWidgets.tsx
index 7465b003..869d6217 100644
--- a/packages/app/src/components/PageHeaderWidgets.tsx
+++ b/packages/app/src/components/PageHeaderWidgets.tsx
@@ -1,3 +1,4 @@
+
// biome-ignore-all lint/plugin/no-raw-html-interactive-element: matches the existing PropertyWidgets.tsx posture — raw `` is the typed-input affordance shared across every frontmatter widget; migrating to shadcn `` is the file-wide pre-rule backlog described in PropertyWidgets.tsx's top-of-file ignore comment.
import { ALLOWED_IMAGE_MIME_TYPES } from '@inkeep/open-knowledge-core';
diff --git a/packages/app/src/components/ProjectSwitcher.tsx b/packages/app/src/components/ProjectSwitcher.tsx
index dd8f492e..43ad1a8a 100644
--- a/packages/app/src/components/ProjectSwitcher.tsx
+++ b/packages/app/src/components/ProjectSwitcher.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { ChevronsUpDown, FolderOpen, GitBranch, LayoutGrid, Plus, Search } from 'lucide-react';
import { useEffect, useRef, useState } from 'react';
diff --git a/packages/app/src/components/PropertyInlineLinks.dom.test.tsx b/packages/app/src/components/PropertyInlineLinks.dom.test.tsx
index 6a4b28de..77959eac 100644
--- a/packages/app/src/components/PropertyInlineLinks.dom.test.tsx
+++ b/packages/app/src/components/PropertyInlineLinks.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, test } from 'bun:test';
import { cleanup, render, screen } from '@testing-library/react';
import { PropertyInlineLinks } from './PropertyInlineLinks';
diff --git a/packages/app/src/components/PropertyInlineLinks.tsx b/packages/app/src/components/PropertyInlineLinks.tsx
index 0e9411c9..8762d849 100644
--- a/packages/app/src/components/PropertyInlineLinks.tsx
+++ b/packages/app/src/components/PropertyInlineLinks.tsx
@@ -1,3 +1,4 @@
+
import type { ReactNode } from 'react';
import { dispatchExternalLinkClick } from '@/lib/external-link';
import { cn } from '@/lib/utils';
diff --git a/packages/app/src/components/PropertyPanel.nested-crud.dom.test.tsx b/packages/app/src/components/PropertyPanel.nested-crud.dom.test.tsx
index 7e289356..2686cd74 100644
--- a/packages/app/src/components/PropertyPanel.nested-crud.dom.test.tsx
+++ b/packages/app/src/components/PropertyPanel.nested-crud.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, test } from 'bun:test';
import { HocuspocusProvider } from '@hocuspocus/provider';
import { readFmMap } from '@inkeep/open-knowledge-core';
@@ -44,7 +45,8 @@ afterEach(() => {
for (const p of providers.splice(0)) {
try {
p.destroy();
- } catch {}
+ } catch {
+ }
}
});
diff --git a/packages/app/src/components/PropertyPanel.test.tsx b/packages/app/src/components/PropertyPanel.test.tsx
index 7f3a5b43..a98012a6 100644
--- a/packages/app/src/components/PropertyPanel.test.tsx
+++ b/packages/app/src/components/PropertyPanel.test.tsx
@@ -28,7 +28,8 @@ afterEach(() => {
for (const p of providers.splice(0)) {
try {
p.destroy();
- } catch {}
+ } catch {
+ }
}
});
diff --git a/packages/app/src/components/PropertyPanel.tsx b/packages/app/src/components/PropertyPanel.tsx
index 13d1a403..5c9e3eb4 100644
--- a/packages/app/src/components/PropertyPanel.tsx
+++ b/packages/app/src/components/PropertyPanel.tsx
@@ -85,6 +85,7 @@ export function PropertyPanel({ provider }: PropertyPanelProps) {
const [resetCounters, setResetCounters] = useState>({});
const docName = provider.configuration.name ?? '';
+
function commitPatch(patch: FrontmatterPatch): PatchResult {
if (!binding) {
return { ok: false, error: t`Connecting` };
diff --git a/packages/app/src/components/PublishToGitHubDialog.tsx b/packages/app/src/components/PublishToGitHubDialog.tsx
index 6f71620c..1f2a1161 100644
--- a/packages/app/src/components/PublishToGitHubDialog.tsx
+++ b/packages/app/src/components/PublishToGitHubDialog.tsx
@@ -1,3 +1,4 @@
+
import type { SharePublishOwner } from '@inkeep/open-knowledge-core';
import { Trans, useLingui } from '@lingui/react/macro';
import { CheckCircle2, Copy, ExternalLink, Loader2, XCircle } from 'lucide-react';
diff --git a/packages/app/src/components/SettingsButton.tsx b/packages/app/src/components/SettingsButton.tsx
index 080da4f4..f4b8510b 100644
--- a/packages/app/src/components/SettingsButton.tsx
+++ b/packages/app/src/components/SettingsButton.tsx
@@ -1,3 +1,4 @@
+
import { Trans } from '@lingui/react/macro';
import { Settings } from 'lucide-react';
import { type FC, useEffect, useRef } from 'react';
diff --git a/packages/app/src/components/ShareBranchSwitchDialog.dom.test.tsx b/packages/app/src/components/ShareBranchSwitchDialog.dom.test.tsx
index a43bb630..96528d40 100644
--- a/packages/app/src/components/ShareBranchSwitchDialog.dom.test.tsx
+++ b/packages/app/src/components/ShareBranchSwitchDialog.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import type { BranchInfoResponse, CheckoutResponse } from '@inkeep/open-knowledge-core';
import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
diff --git a/packages/app/src/components/ShareBranchSwitchDialog.tsx b/packages/app/src/components/ShareBranchSwitchDialog.tsx
index 019dc878..59ce9a98 100644
--- a/packages/app/src/components/ShareBranchSwitchDialog.tsx
+++ b/packages/app/src/components/ShareBranchSwitchDialog.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { GitBranch, Loader2, MapPin } from 'lucide-react';
import { useEffect, useRef, useState, useSyncExternalStore } from 'react';
diff --git a/packages/app/src/components/ShareButton.tsx b/packages/app/src/components/ShareButton.tsx
index 8e4a3164..d163ca08 100644
--- a/packages/app/src/components/ShareButton.tsx
+++ b/packages/app/src/components/ShareButton.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { Share2 } from 'lucide-react';
import { useEffect, useRef, useState } from 'react';
diff --git a/packages/app/src/components/SharingModeField.tsx b/packages/app/src/components/SharingModeField.tsx
index e2fd74bb..4dcc8552 100644
--- a/packages/app/src/components/SharingModeField.tsx
+++ b/packages/app/src/components/SharingModeField.tsx
@@ -1,3 +1,4 @@
+
import { Trans } from '@lingui/react/macro';
import { ConfigSharingInfoTooltip } from '@/components/ConfigSharingInfoTooltip';
import { Label } from '@/components/ui/label';
diff --git a/packages/app/src/components/SidebarSearchBar.test.ts b/packages/app/src/components/SidebarSearchBar.test.ts
index ad528df5..6ecbbe93 100644
--- a/packages/app/src/components/SidebarSearchBar.test.ts
+++ b/packages/app/src/components/SidebarSearchBar.test.ts
@@ -15,6 +15,7 @@ describe('SidebarSearchBar module', () => {
});
describe('onPillRenderError — Pattern C runtime observability emission', () => {
+
let warnSpy: ReturnType;
beforeEach(() => {
diff --git a/packages/app/src/components/SidebarSearchBar.tsx b/packages/app/src/components/SidebarSearchBar.tsx
index 6091170b..ce2584d5 100644
--- a/packages/app/src/components/SidebarSearchBar.tsx
+++ b/packages/app/src/components/SidebarSearchBar.tsx
@@ -1,3 +1,4 @@
+
import { incrementJsxRenderFailure } from '@inkeep/open-knowledge-core';
import { Trans } from '@lingui/react/macro';
import { Search } from 'lucide-react';
diff --git a/packages/app/src/components/SyncStatusBadge.tsx b/packages/app/src/components/SyncStatusBadge.tsx
index 879d101f..230e2ac2 100644
--- a/packages/app/src/components/SyncStatusBadge.tsx
+++ b/packages/app/src/components/SyncStatusBadge.tsx
@@ -1,3 +1,4 @@
+
import type { PushPermissionWire, SyncErrorCode } from '@inkeep/open-knowledge-core';
import { plural, t } from '@lingui/core/macro';
import { Plural, Trans, useLingui } from '@lingui/react/macro';
@@ -25,6 +26,7 @@ import { Popover, PopoverContent, PopoverTrigger } from './ui/popover';
import { Switch } from './ui/switch';
import { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';
+
function formatRelative(iso: string | null): string {
if (!iso) return t`never`;
const diff = Date.now() - new Date(iso).getTime();
@@ -48,6 +50,7 @@ async function triggerSync(op: 'sync' | 'push' | 'pull'): Promise {
});
}
+
interface BadgeIconProps {
status: GitSyncStatus;
}
@@ -100,6 +103,7 @@ function badgeLabel(status: GitSyncStatus): string {
}
}
+
function stateLabel(state: GitSyncStatus['state']): string {
switch (state) {
case 'dormant':
@@ -494,6 +498,7 @@ function PopoverBody({ status, onSignIn, onSetIdentity }: PopoverBodyProps) {
);
}
+
interface SyncStatusBadgeProps {
onSignIn?: () => void;
onSetIdentity?: () => void;
diff --git a/packages/app/src/components/TerminalDock.dom.test.tsx b/packages/app/src/components/TerminalDock.dom.test.tsx
index 899a4a6f..c50f8fc5 100644
--- a/packages/app/src/components/TerminalDock.dom.test.tsx
+++ b/packages/app/src/components/TerminalDock.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
import type { OkDesktopBridge } from '@/lib/desktop-bridge-types';
diff --git a/packages/app/src/components/TerminalExitNotice.dom.test.tsx b/packages/app/src/components/TerminalExitNotice.dom.test.tsx
index 011f6034..c734f3cc 100644
--- a/packages/app/src/components/TerminalExitNotice.dom.test.tsx
+++ b/packages/app/src/components/TerminalExitNotice.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import { TerminalExitNotice } from './TerminalExitNotice';
diff --git a/packages/app/src/components/TerminalPanel.dom.test.tsx b/packages/app/src/components/TerminalPanel.dom.test.tsx
index c41bf40a..4c117cca 100644
--- a/packages/app/src/components/TerminalPanel.dom.test.tsx
+++ b/packages/app/src/components/TerminalPanel.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
import type {
diff --git a/packages/app/src/components/TerminalPanel.launch.dom.test.tsx b/packages/app/src/components/TerminalPanel.launch.dom.test.tsx
index a361bafb..a8074f3a 100644
--- a/packages/app/src/components/TerminalPanel.launch.dom.test.tsx
+++ b/packages/app/src/components/TerminalPanel.launch.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import { act, cleanup, render, waitFor } from '@testing-library/react';
import type { ClaudeReadiness, OkDesktopBridge, OkPtyData } from '@/lib/desktop-bridge-types';
diff --git a/packages/app/src/components/TerminalPanel.tsx b/packages/app/src/components/TerminalPanel.tsx
index a3d4b44d..0e931fad 100644
--- a/packages/app/src/components/TerminalPanel.tsx
+++ b/packages/app/src/components/TerminalPanel.tsx
@@ -146,6 +146,7 @@ function TerminalSession({
fit.fit();
+
void (async () => {
let result: Awaited>;
try {
diff --git a/packages/app/src/components/TextViewer.tsx b/packages/app/src/components/TextViewer.tsx
index 7415b644..ccc66e2c 100644
--- a/packages/app/src/components/TextViewer.tsx
+++ b/packages/app/src/components/TextViewer.tsx
@@ -1,3 +1,4 @@
+
import { EditorState } from '@codemirror/state';
import { EditorView } from '@codemirror/view';
import { codeLanguageForExtension } from '@inkeep/open-knowledge-core';
diff --git a/packages/app/src/components/TimelinePanel.tsx b/packages/app/src/components/TimelinePanel.tsx
index ec0b2473..9f6f3226 100644
--- a/packages/app/src/components/TimelinePanel.tsx
+++ b/packages/app/src/components/TimelinePanel.tsx
@@ -93,12 +93,14 @@ async function pollHistoryOnce(
}
}
+
interface TimelineContentProps {
docName: string;
diffLayout: DiffLayout;
onDiffLayoutChange: (layout: DiffLayout) => void;
}
+
function formatRelativeTime(isoString: string): string {
const date = new Date(isoString);
const now = new Date();
@@ -194,6 +196,7 @@ function ContributorIcon({ entry, isDark }: { entry: TimelineEntry; isDark: bool
return ;
}
+
export function allSummariesFor(entry: TimelineEntry): string[] {
const out: string[] = [];
for (const c of entry.contributors) {
@@ -248,6 +251,7 @@ function SummaryBullets({ summaries }: SummaryBulletsProps) {
);
}
+
interface EntryDiffPanelProps {
sha: string;
docName: string;
@@ -288,6 +292,7 @@ function EntryDiffPanel({ sha, docName, cache, diffLayout, panelId }: EntryDiffP
);
}
+
interface EntryRowProps {
entry: TimelineEntry;
isDark: boolean;
@@ -376,7 +381,8 @@ function EntryRow({
try {
const problem = ProblemDetailsSchema.safeParse(await res.json());
if (problem.success) detail = problem.data.title;
- } catch {}
+ } catch {
+ }
console.error('[timeline] rollback failed', {
docName,
sha: entry.sha,
@@ -524,6 +530,7 @@ function EntryRow({
);
}
+
export function TimelineContent({ docName, diffLayout, onDiffLayoutChange }: TimelineContentProps) {
const { t } = useLingui();
const { resolvedTheme } = useTheme();
diff --git a/packages/app/src/components/TrashFailureModal.tsx b/packages/app/src/components/TrashFailureModal.tsx
index 291eb085..8218ea7b 100644
--- a/packages/app/src/components/TrashFailureModal.tsx
+++ b/packages/app/src/components/TrashFailureModal.tsx
@@ -11,6 +11,7 @@ import {
DialogTitle,
} from '@/components/ui/dialog';
+
type TrashFailureReason = 'not-found' | 'permission-denied' | 'system-error' | 'path-escape';
const TRASH_FAILURE_REASONS: ReadonlyArray = [
@@ -43,6 +44,7 @@ interface TrashFailureModalProps {
onCancel: () => void;
}
+
function trashReasonLabel(reason: TrashFailureReason): string {
switch (reason) {
case 'not-found':
diff --git a/packages/app/src/components/UpdateNotices.shared.ts b/packages/app/src/components/UpdateNotices.shared.ts
index 6f1a6342..bde85fc7 100644
--- a/packages/app/src/components/UpdateNotices.shared.ts
+++ b/packages/app/src/components/UpdateNotices.shared.ts
@@ -1,3 +1,4 @@
+
import type { OkDesktopBridge } from '@/lib/desktop-bridge-types';
export const TOAST_A_ACTION = 'Relaunch';
diff --git a/packages/app/src/components/UpdateNotices.test.ts b/packages/app/src/components/UpdateNotices.test.ts
index feb55818..36a7056f 100644
--- a/packages/app/src/components/UpdateNotices.test.ts
+++ b/packages/app/src/components/UpdateNotices.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, mock, test } from 'bun:test';
import type { OkDesktopBridge } from '@/lib/desktop-bridge-types';
import {
@@ -112,6 +113,7 @@ function castBridge(fake: FakeBridge): OkDesktopBridge {
return fake as unknown as OkDesktopBridge;
}
+
describe('copy helpers (minimal-wording revision)', () => {
test('toastABody formats the version-specific pending-install string', () => {
expect(toastABody('0.1.1')).toBe('Version 0.1.1 ready to install');
@@ -174,6 +176,7 @@ describe('appendErrorDetail', () => {
});
});
+
describe('attachUpdateSubscribers — registration', () => {
test('subscribes to all six update channels on the bridge', () => {
const bridge = makeFakeBridge();
@@ -201,6 +204,7 @@ describe('attachUpdateSubscribers — registration', () => {
});
});
+
describe('Notice A cross-window relaunch — ok:update:relaunching', () => {
test('swaps the update-downloaded card to the button-less in-progress card', () => {
const bridge = makeFakeBridge();
@@ -261,6 +265,7 @@ describe('Notice A cross-window relaunch — ok:update:relaunching', () => {
});
});
+
describe('Notice A — ok:update:downloaded', () => {
test('emits notice with canonical copy + relaunch action on dispatch', () => {
const bridge = makeFakeBridge();
@@ -421,6 +426,7 @@ describe('Notice A — ok:update:downloaded', () => {
});
});
+
describe('Notice B — ok:update:whats-new', () => {
test('emits notice with version-specific copy + release URL action', () => {
const bridge = makeFakeBridge();
@@ -509,6 +515,7 @@ describe('Notice B — ok:update:whats-new', () => {
});
});
+
describe('Notice C — ok:update:stuck-hint', () => {
test('emits notice with D12 copy + download URL action', () => {
const bridge = makeFakeBridge();
@@ -537,6 +544,7 @@ describe('Notice C — ok:update:stuck-hint', () => {
});
});
+
describe('Notice E — schema-incompatibility refuse-downgrade', () => {
const diagnostic = {
currentBuild: '0.3.0',
@@ -621,6 +629,7 @@ describe('Notice E — schema-incompatibility refuse-downgrade', () => {
});
});
+
describe('pickActiveNotice', () => {
const a: UpdateNotice = { id: 'a', body: 'A', priority: 2 };
const b: UpdateNotice = { id: 'b', body: 'B', priority: 3 };
diff --git a/packages/app/src/components/command-palette-flicker.test.ts b/packages/app/src/components/command-palette-flicker.test.ts
index 34951fee..8227ed18 100644
--- a/packages/app/src/components/command-palette-flicker.test.ts
+++ b/packages/app/src/components/command-palette-flicker.test.ts
@@ -1,6 +1,8 @@
+
import { describe, expect, test } from 'bun:test';
import type { WorkspaceEntry, WorkspaceSearchEntry } from './command-palette-search';
+
interface VisibleSearchResultsHelperArgs {
searchResults: readonly WorkspaceSearchEntry[];
fallbackSearchResults: readonly WorkspaceEntry[];
diff --git a/packages/app/src/components/command-palette-semantic.ts b/packages/app/src/components/command-palette-semantic.ts
index 0f36bef2..6d98adc3 100644
--- a/packages/app/src/components/command-palette-semantic.ts
+++ b/packages/app/src/components/command-palette-semantic.ts
@@ -1,3 +1,4 @@
+
export interface SemanticModeState {
query: string;
firedQuery: string | null;
diff --git a/packages/app/src/components/command-palette-tag-search.test.ts b/packages/app/src/components/command-palette-tag-search.test.ts
index ff3d98cb..c7622e6f 100644
--- a/packages/app/src/components/command-palette-tag-search.test.ts
+++ b/packages/app/src/components/command-palette-tag-search.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import type { TagSummaryEntry } from '../editor/extensions/tag-suggestion.ts';
import { filterTagList, parseTagPaletteQuery } from './command-palette-tag-search.ts';
diff --git a/packages/app/src/components/command-palette-tag-search.ts b/packages/app/src/components/command-palette-tag-search.ts
index 3478d495..4fcc0b4a 100644
--- a/packages/app/src/components/command-palette-tag-search.ts
+++ b/packages/app/src/components/command-palette-tag-search.ts
@@ -1,3 +1,4 @@
+
import {
fetchTags,
rankTagsByQuery,
diff --git a/packages/app/src/components/editor-area-overlay.ts b/packages/app/src/components/editor-area-overlay.ts
index 52519792..08147d7c 100644
--- a/packages/app/src/components/editor-area-overlay.ts
+++ b/packages/app/src/components/editor-area-overlay.ts
@@ -1,3 +1,4 @@
+
interface OverlayDecisionInput {
activeDocName: string | null;
deferredActiveDocName: string | null;
diff --git a/packages/app/src/components/editor/SelectionAnnouncer.test.ts b/packages/app/src/components/editor/SelectionAnnouncer.test.ts
index 69b2ff68..ffc14a61 100644
--- a/packages/app/src/components/editor/SelectionAnnouncer.test.ts
+++ b/packages/app/src/components/editor/SelectionAnnouncer.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { Schema } from '@tiptap/pm/model';
import { EditorState, NodeSelection } from '@tiptap/pm/state';
diff --git a/packages/app/src/components/editor/SelectionAnnouncer.tsx b/packages/app/src/components/editor/SelectionAnnouncer.tsx
index bdfdcf08..f8b2723c 100644
--- a/packages/app/src/components/editor/SelectionAnnouncer.tsx
+++ b/packages/app/src/components/editor/SelectionAnnouncer.tsx
@@ -1,3 +1,4 @@
+
import type { Editor } from '@tiptap/core';
import { useEffect, useRef } from 'react';
import { useBlockSelection } from '../../editor/hooks/use-block-selection.ts';
diff --git a/packages/app/src/components/empty-state/CopyablePromptList.tsx b/packages/app/src/components/empty-state/CopyablePromptList.tsx
index 49ec9d01..c3ef689f 100644
--- a/packages/app/src/components/empty-state/CopyablePromptList.tsx
+++ b/packages/app/src/components/empty-state/CopyablePromptList.tsx
@@ -29,7 +29,8 @@ export function CopyablePromptList({ scenario, className }: CopyablePromptListPr
clearTimeout(resetTimerRef.current);
resetTimerRef.current = setTimeout(() => setCopiedId(null), 1600);
})
- .catch(() => {});
+ .catch(() => {
+ });
}
return (
diff --git a/packages/app/src/components/empty-state/CreatePromptComposer.dom.test.tsx b/packages/app/src/components/empty-state/CreatePromptComposer.dom.test.tsx
index 9ce18d28..e73cdea2 100644
--- a/packages/app/src/components/empty-state/CreatePromptComposer.dom.test.tsx
+++ b/packages/app/src/components/empty-state/CreatePromptComposer.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
import type { CreateScenario, InstallState } from '@inkeep/open-knowledge-core';
import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
diff --git a/packages/app/src/components/extension-picker-utils.ts b/packages/app/src/components/extension-picker-utils.ts
index 6dcef95c..145221ef 100644
--- a/packages/app/src/components/extension-picker-utils.ts
+++ b/packages/app/src/components/extension-picker-utils.ts
@@ -1,3 +1,4 @@
+
export const SUPPORTED_EXTENSIONS = ['.md', '.mdx'] as const;
export type DocExtension = (typeof SUPPORTED_EXTENSIONS)[number];
diff --git a/packages/app/src/components/file-tree-adapter.test.ts b/packages/app/src/components/file-tree-adapter.test.ts
index 1a541b7e..349e8d8f 100644
--- a/packages/app/src/components/file-tree-adapter.test.ts
+++ b/packages/app/src/components/file-tree-adapter.test.ts
@@ -262,6 +262,7 @@ describe('file-tree-adapter', () => {
).toBe('docs/photo.png');
});
+
test('treeItemToTarget(item, documents) returns the entry-authoritative docExt for an extensionless .md tree path', () => {
const item: ContextMenuItem = {
kind: 'file',
diff --git a/packages/app/src/components/file-tree-extension-badge.dom.test.tsx b/packages/app/src/components/file-tree-extension-badge.dom.test.tsx
index dacb7be5..2c38b451 100644
--- a/packages/app/src/components/file-tree-extension-badge.dom.test.tsx
+++ b/packages/app/src/components/file-tree-extension-badge.dom.test.tsx
@@ -7,6 +7,7 @@ import {
OK_FULLNAME_ROW_ATTR,
} from './file-tree-extension-badge';
+
interface PierreRowInit {
path: string;
filename: string;
diff --git a/packages/app/src/components/file-tree-extension-badge.ts b/packages/app/src/components/file-tree-extension-badge.ts
index bdf5e3af..b32c67f9 100644
--- a/packages/app/src/components/file-tree-extension-badge.ts
+++ b/packages/app/src/components/file-tree-extension-badge.ts
@@ -1,3 +1,4 @@
+
import { getFileExtension } from '@/components/file-tree-rename-validation';
export const OK_EXT_BADGE_ATTR = 'data-ok-ext-badge';
diff --git a/packages/app/src/components/file-tree-merge.ts b/packages/app/src/components/file-tree-merge.ts
index 1af5dce3..935f9793 100644
--- a/packages/app/src/components/file-tree-merge.ts
+++ b/packages/app/src/components/file-tree-merge.ts
@@ -1,3 +1,4 @@
+
import { fileEntryToTreePath } from './file-tree-adapter';
import type { FileEntry } from './file-tree-utils';
diff --git a/packages/app/src/components/file-tree-okignore.test.ts b/packages/app/src/components/file-tree-okignore.test.ts
index 89a5f543..b1d70778 100644
--- a/packages/app/src/components/file-tree-okignore.test.ts
+++ b/packages/app/src/components/file-tree-okignore.test.ts
@@ -101,6 +101,7 @@ describe('buildOkignorePatternFromTarget — invariants', () => {
});
describe('buildOkignorePatternFromTarget — glob-metacharacter escaping', () => {
+
test('filename with [bracket] segment is escaped so the literal file matches', () => {
const pattern = buildOkignorePatternFromTarget({
kind: 'file',
diff --git a/packages/app/src/components/file-tree-rename-chip.dom.test.tsx b/packages/app/src/components/file-tree-rename-chip.dom.test.tsx
index 9f60eacd..47e5cc74 100644
--- a/packages/app/src/components/file-tree-rename-chip.dom.test.tsx
+++ b/packages/app/src/components/file-tree-rename-chip.dom.test.tsx
@@ -301,6 +301,7 @@ describe('applyRenameChip — overlay marker for symptom 2 (icon-flash bridge)',
});
test('post-settle: module-level activeRenameExt is cleared (Makefile selected later gets no marker)', () => {
+
const { row, input } = buildPierreRenameRow({
path: 'AGENTS.md',
initialValue: 'AGENTS.md',
diff --git a/packages/app/src/components/file-tree-rename-chip.ts b/packages/app/src/components/file-tree-rename-chip.ts
index 4fcbdd6f..b47e69e9 100644
--- a/packages/app/src/components/file-tree-rename-chip.ts
+++ b/packages/app/src/components/file-tree-rename-chip.ts
@@ -1,3 +1,4 @@
+
import { getFileExtension } from '@/components/file-tree-rename-validation';
export const OK_RENAME_CHIP_ATTR = 'data-ok-rename-extension-chip';
diff --git a/packages/app/src/components/file-tree-rename-validation.ts b/packages/app/src/components/file-tree-rename-validation.ts
index c036aa5d..631d2e60 100644
--- a/packages/app/src/components/file-tree-rename-validation.ts
+++ b/packages/app/src/components/file-tree-rename-validation.ts
@@ -1,3 +1,4 @@
+
type RenameDestinationValidation = { kind: 'allow'; destinationPath: string } | { kind: 'block' };
export function getFileExtension(path: string): string {
diff --git a/packages/app/src/components/file-tree-reveal.ts b/packages/app/src/components/file-tree-reveal.ts
index 58e6e784..73bb16f7 100644
--- a/packages/app/src/components/file-tree-reveal.ts
+++ b/packages/app/src/components/file-tree-reveal.ts
@@ -1,3 +1,4 @@
+
import type { FileTree as PierreFileTreeModel } from '@pierre/trees';
type RevealModel = Pick;
diff --git a/packages/app/src/components/file-tree-trash-copy.test.ts b/packages/app/src/components/file-tree-trash-copy.test.ts
index 68fd6213..4cea53fa 100644
--- a/packages/app/src/components/file-tree-trash-copy.test.ts
+++ b/packages/app/src/components/file-tree-trash-copy.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import type { FileTreeTarget } from '@/components/file-tree-operations';
import {
diff --git a/packages/app/src/components/file-tree-trash-copy.ts b/packages/app/src/components/file-tree-trash-copy.ts
index 2494992a..1e994233 100644
--- a/packages/app/src/components/file-tree-trash-copy.ts
+++ b/packages/app/src/components/file-tree-trash-copy.ts
@@ -1,3 +1,4 @@
+
import type { FileTreeTarget } from '@/components/file-tree-operations';
interface TrashConfirmCopy {
diff --git a/packages/app/src/components/file-tree-utils.ts b/packages/app/src/components/file-tree-utils.ts
index 74c91633..76b1e1da 100644
--- a/packages/app/src/components/file-tree-utils.ts
+++ b/packages/app/src/components/file-tree-utils.ts
@@ -1,3 +1,4 @@
+
import type { DocumentListEntry, InlineAssetMediaKind } from '@inkeep/open-knowledge-core';
export interface DocumentEntry {
diff --git a/packages/app/src/components/graph-colors.ts b/packages/app/src/components/graph-colors.ts
index 1ebb06bd..c04bf057 100644
--- a/packages/app/src/components/graph-colors.ts
+++ b/packages/app/src/components/graph-colors.ts
@@ -1,3 +1,4 @@
+
const DARK_PALETTE = [
'#60a5fa', // Blue - Knowledge, concepts, structure
'#a78bfa', // Violet - Research, analysis, methodology
diff --git a/packages/app/src/components/graph-label-utils.ts b/packages/app/src/components/graph-label-utils.ts
index 07ef25c9..37fd78f1 100644
--- a/packages/app/src/components/graph-label-utils.ts
+++ b/packages/app/src/components/graph-label-utils.ts
@@ -110,6 +110,7 @@ function clampMiddleByCharacters(
return '';
}
+
const maxKeep = Math.max(1, Math.floor((text.length - ellipsis.length) / 2));
for (let keep = maxKeep; keep >= 1; keep--) {
if (text[keep] !== ' ' || text[text.length - keep - 1] !== ' ') continue;
diff --git a/packages/app/src/components/handoff/EditWithAiPanel.dom.test.tsx b/packages/app/src/components/handoff/EditWithAiPanel.dom.test.tsx
index 85d142fd..96cbcca3 100644
--- a/packages/app/src/components/handoff/EditWithAiPanel.dom.test.tsx
+++ b/packages/app/src/components/handoff/EditWithAiPanel.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, test } from 'bun:test';
import type { HandoffTarget, InstallState } from '@inkeep/open-knowledge-core';
import { cleanup, render, screen } from '@testing-library/react';
diff --git a/packages/app/src/components/handoff/EditWithAiPopover.dom.test.tsx b/packages/app/src/components/handoff/EditWithAiPopover.dom.test.tsx
index a1c6a130..751dc30f 100644
--- a/packages/app/src/components/handoff/EditWithAiPopover.dom.test.tsx
+++ b/packages/app/src/components/handoff/EditWithAiPopover.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
import { cleanup, render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
diff --git a/packages/app/src/components/handoff/EditWithAiPopover.tsx b/packages/app/src/components/handoff/EditWithAiPopover.tsx
index c309cf49..24993ed2 100644
--- a/packages/app/src/components/handoff/EditWithAiPopover.tsx
+++ b/packages/app/src/components/handoff/EditWithAiPopover.tsx
@@ -1,3 +1,4 @@
+
import type { HandoffTarget, InstallState, TargetData } from '@inkeep/open-knowledge-core';
import { Trans, useLingui } from '@lingui/react/macro';
import { type ReactNode, useEffect, useEffectEvent, useState } from 'react';
diff --git a/packages/app/src/components/handoff/OpenInAgentContextSubmenu.tsx b/packages/app/src/components/handoff/OpenInAgentContextSubmenu.tsx
index 2e67d578..56a5379a 100644
--- a/packages/app/src/components/handoff/OpenInAgentContextSubmenu.tsx
+++ b/packages/app/src/components/handoff/OpenInAgentContextSubmenu.tsx
@@ -1,3 +1,4 @@
+
import type { HandoffOutcome, HandoffTarget, InstallState } from '@inkeep/open-knowledge-core';
import { t } from '@lingui/core/macro';
import { Trans, useLingui } from '@lingui/react/macro';
diff --git a/packages/app/src/components/handoff/OpenInAgentEmptySpaceSubmenu.tsx b/packages/app/src/components/handoff/OpenInAgentEmptySpaceSubmenu.tsx
index 3d793e0f..2ae4bfbb 100644
--- a/packages/app/src/components/handoff/OpenInAgentEmptySpaceSubmenu.tsx
+++ b/packages/app/src/components/handoff/OpenInAgentEmptySpaceSubmenu.tsx
@@ -1,3 +1,4 @@
+
import type { HandoffOutcome, HandoffTarget, InstallState } from '@inkeep/open-knowledge-core';
import { t } from '@lingui/core/macro';
import { Trans, useLingui } from '@lingui/react/macro';
diff --git a/packages/app/src/components/handoff/OpenInAgentMenu.tsx b/packages/app/src/components/handoff/OpenInAgentMenu.tsx
index 22b956b6..c6d55a1a 100644
--- a/packages/app/src/components/handoff/OpenInAgentMenu.tsx
+++ b/packages/app/src/components/handoff/OpenInAgentMenu.tsx
@@ -1,3 +1,4 @@
+
import type { HandoffTarget, InstallState, TargetData } from '@inkeep/open-knowledge-core';
import { Trans, useLingui } from '@lingui/react/macro';
import { Sparkles, SquareTerminal } from 'lucide-react';
diff --git a/packages/app/src/components/handoff/OpenInAgentMenuItem.test.ts b/packages/app/src/components/handoff/OpenInAgentMenuItem.test.ts
index bb3c21c8..6c471602 100644
--- a/packages/app/src/components/handoff/OpenInAgentMenuItem.test.ts
+++ b/packages/app/src/components/handoff/OpenInAgentMenuItem.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import type { InstallState, TargetData } from '@inkeep/open-knowledge-core';
import { KNOWN_TARGETS } from '@/lib/handoff/targets';
diff --git a/packages/app/src/components/handoff/OpenInAgentMenuItem.tsx b/packages/app/src/components/handoff/OpenInAgentMenuItem.tsx
index d2aa2353..e6e72442 100644
--- a/packages/app/src/components/handoff/OpenInAgentMenuItem.tsx
+++ b/packages/app/src/components/handoff/OpenInAgentMenuItem.tsx
@@ -1,3 +1,4 @@
+
import {
AGENT_ICON_COLORS,
AGENT_ICON_COLORS_DARK,
diff --git a/packages/app/src/components/handoff/OpenInAgentTerminalRow.dom.test.tsx b/packages/app/src/components/handoff/OpenInAgentTerminalRow.dom.test.tsx
index 4118772c..71962b4a 100644
--- a/packages/app/src/components/handoff/OpenInAgentTerminalRow.dom.test.tsx
+++ b/packages/app/src/components/handoff/OpenInAgentTerminalRow.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
import { cleanup, render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
diff --git a/packages/app/src/components/handoff/dispatch-single-entry-point.test.ts b/packages/app/src/components/handoff/dispatch-single-entry-point.test.ts
index e0238f0e..7e7a07f9 100644
--- a/packages/app/src/components/handoff/dispatch-single-entry-point.test.ts
+++ b/packages/app/src/components/handoff/dispatch-single-entry-point.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { readdirSync, readFileSync, statSync } from 'node:fs';
import { join, relative } from 'node:path';
diff --git a/packages/app/src/components/handoff/terminal-launch-events.ts b/packages/app/src/components/handoff/terminal-launch-events.ts
index f55eca3e..2cfdcc70 100644
--- a/packages/app/src/components/handoff/terminal-launch-events.ts
+++ b/packages/app/src/components/handoff/terminal-launch-events.ts
@@ -1,3 +1,4 @@
+
const TERMINAL_LAUNCH_EVENT = 'open-knowledge:terminal-launch';
interface TerminalLaunchDetail {
diff --git a/packages/app/src/components/handoff/useHandoffDispatch.test.ts b/packages/app/src/components/handoff/useHandoffDispatch.test.ts
index 9f6045f6..b84b481c 100644
--- a/packages/app/src/components/handoff/useHandoffDispatch.test.ts
+++ b/packages/app/src/components/handoff/useHandoffDispatch.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, mock, test } from 'bun:test';
import { setTimeout as wait } from 'node:timers/promises';
import type { HandoffOutcome, HandoffPayload, HandoffTarget } from '@inkeep/open-knowledge-core';
diff --git a/packages/app/src/components/handoff/useHandoffDispatch.ts b/packages/app/src/components/handoff/useHandoffDispatch.ts
index 38bf136c..e12c93d2 100644
--- a/packages/app/src/components/handoff/useHandoffDispatch.ts
+++ b/packages/app/src/components/handoff/useHandoffDispatch.ts
@@ -1,3 +1,4 @@
+
import {
type CreateScenario,
composeCreatePrompt,
diff --git a/packages/app/src/components/handoff/useInstalledAgents.test.ts b/packages/app/src/components/handoff/useInstalledAgents.test.ts
index 1f69926e..e89b8159 100644
--- a/packages/app/src/components/handoff/useInstalledAgents.test.ts
+++ b/packages/app/src/components/handoff/useInstalledAgents.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
describe('useInstalledAgents module surface', () => {
diff --git a/packages/app/src/components/handoff/useInstalledAgents.ts b/packages/app/src/components/handoff/useInstalledAgents.ts
index 2c757b7a..b421127c 100644
--- a/packages/app/src/components/handoff/useInstalledAgents.ts
+++ b/packages/app/src/components/handoff/useInstalledAgents.ts
@@ -1,3 +1,4 @@
+
import type { HandoffTarget, InstallState } from '@inkeep/open-knowledge-core';
import { useEffect, useRef, useState } from 'react';
import {
diff --git a/packages/app/src/components/page-header-utils.test.ts b/packages/app/src/components/page-header-utils.test.ts
index 005d8a8c..306ba225 100644
--- a/packages/app/src/components/page-header-utils.test.ts
+++ b/packages/app/src/components/page-header-utils.test.ts
@@ -1,6 +1,7 @@
import { describe, expect, test } from 'bun:test';
import { resolvePageCover, resolvePageIcon } from './page-header-utils';
+
describe('resolvePageIcon', () => {
test('classifies a single emoji as emoji', () => {
expect(resolvePageIcon('📝')).toEqual({ kind: 'emoji', value: '📝' });
@@ -112,6 +113,7 @@ describe('resolvePageIcon', () => {
});
});
+
describe('resolvePageCover', () => {
test('rejects emoji (covers require an image)', () => {
expect(resolvePageCover('🏔️').kind).toBe('unsupported');
diff --git a/packages/app/src/components/page-header-utils.ts b/packages/app/src/components/page-header-utils.ts
index b71171a5..dfd03228 100644
--- a/packages/app/src/components/page-header-utils.ts
+++ b/packages/app/src/components/page-header-utils.ts
@@ -1,3 +1,4 @@
+
import { IMAGE_EXTENSIONS, isSafeUrl, toDesktopAssetHref } from '@inkeep/open-knowledge-core';
/** Hard cap on raw frontmatter value length we'll classify — anything
diff --git a/packages/app/src/components/prewarm-correlation.ts b/packages/app/src/components/prewarm-correlation.ts
index d3d479e2..ce3aa55f 100644
--- a/packages/app/src/components/prewarm-correlation.ts
+++ b/packages/app/src/components/prewarm-correlation.ts
@@ -1,3 +1,4 @@
+
import { mark } from '@/lib/perf';
import { readNumericOverride } from '@/lib/perf/env-override';
diff --git a/packages/app/src/components/property-inline-link-tokens.ts b/packages/app/src/components/property-inline-link-tokens.ts
index c1d506a3..e626a4a6 100644
--- a/packages/app/src/components/property-inline-link-tokens.ts
+++ b/packages/app/src/components/property-inline-link-tokens.ts
@@ -1,3 +1,4 @@
+
import { parseWikiLink } from '@inkeep/open-knowledge-core';
export type PropertyInlineSegment =
diff --git a/packages/app/src/components/resolve-conflict-dispatch.ts b/packages/app/src/components/resolve-conflict-dispatch.ts
index f1acd20f..f321f456 100644
--- a/packages/app/src/components/resolve-conflict-dispatch.ts
+++ b/packages/app/src/components/resolve-conflict-dispatch.ts
@@ -1,3 +1,4 @@
+
type ResolveStrategy = 'mine' | 'theirs' | 'content' | 'delete';
interface DispatchResult {
@@ -27,7 +28,8 @@ async function dispatchResolve(
const payload = (await res.json()) as { detail?: unknown; title?: unknown };
if (typeof payload.detail === 'string') detail = payload.detail;
else if (typeof payload.title === 'string') detail = payload.title;
- } catch {}
+ } catch {
+ }
return { ok: false, detail };
} catch (err) {
const detail = err instanceof Error ? err.message : String(err);
diff --git a/packages/app/src/components/settings/AccountSection.dom.test.tsx b/packages/app/src/components/settings/AccountSection.dom.test.tsx
index 5f7058d9..cce6c1f7 100644
--- a/packages/app/src/components/settings/AccountSection.dom.test.tsx
+++ b/packages/app/src/components/settings/AccountSection.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
import { act, cleanup, render, screen, within } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
diff --git a/packages/app/src/components/settings/EmbeddingsKeySection.dom.test.tsx b/packages/app/src/components/settings/EmbeddingsKeySection.dom.test.tsx
index 1f0bd7cd..9a90523c 100644
--- a/packages/app/src/components/settings/EmbeddingsKeySection.dom.test.tsx
+++ b/packages/app/src/components/settings/EmbeddingsKeySection.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
import type { SemanticIndexStatus } from '@inkeep/open-knowledge-core';
import { cleanup, render, screen, waitFor } from '@testing-library/react';
diff --git a/packages/app/src/components/settings/SearchSection.dom.test.tsx b/packages/app/src/components/settings/SearchSection.dom.test.tsx
index 29c7385c..a5703eaf 100644
--- a/packages/app/src/components/settings/SearchSection.dom.test.tsx
+++ b/packages/app/src/components/settings/SearchSection.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import type { Config, ConfigBinding, SemanticIndexStatus } from '@inkeep/open-knowledge-core';
import { cleanup, render, screen, waitFor } from '@testing-library/react';
diff --git a/packages/app/src/components/settings/SettingsDialogBody.test.ts b/packages/app/src/components/settings/SettingsDialogBody.test.ts
index 9bf4936f..8ad4ddf3 100644
--- a/packages/app/src/components/settings/SettingsDialogBody.test.ts
+++ b/packages/app/src/components/settings/SettingsDialogBody.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
describe('SettingsDialogBody module', () => {
diff --git a/packages/app/src/components/settings/SettingsDialogBodyLazy.ts b/packages/app/src/components/settings/SettingsDialogBodyLazy.ts
index d5c84ffa..b49bdceb 100644
--- a/packages/app/src/components/settings/SettingsDialogBodyLazy.ts
+++ b/packages/app/src/components/settings/SettingsDialogBodyLazy.ts
@@ -1,3 +1,4 @@
+
import { lazyWithPreload } from '@/lib/lazy-with-preload';
export const SettingsDialogBodyLazy = lazyWithPreload(() =>
diff --git a/packages/app/src/components/settings/SettingsDialogErrorBoundary.tsx b/packages/app/src/components/settings/SettingsDialogErrorBoundary.tsx
index d73ac10e..6e085970 100644
--- a/packages/app/src/components/settings/SettingsDialogErrorBoundary.tsx
+++ b/packages/app/src/components/settings/SettingsDialogErrorBoundary.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { ErrorBoundary, type FallbackProps } from 'react-error-boundary';
import { Button } from '@/components/ui/button';
diff --git a/packages/app/src/components/settings/SettingsDialogShell.dom.test.tsx b/packages/app/src/components/settings/SettingsDialogShell.dom.test.tsx
index b4d100d4..9d73cc12 100644
--- a/packages/app/src/components/settings/SettingsDialogShell.dom.test.tsx
+++ b/packages/app/src/components/settings/SettingsDialogShell.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, spyOn, test } from 'bun:test';
import type { ConfigBinding, OkignoreBinding } from '@inkeep/open-knowledge-core';
import { cleanup, render, screen } from '@testing-library/react';
diff --git a/packages/app/src/components/settings/SharingSection.tsx b/packages/app/src/components/settings/SharingSection.tsx
index f4b02084..ffffde93 100644
--- a/packages/app/src/components/settings/SharingSection.tsx
+++ b/packages/app/src/components/settings/SharingSection.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { useEffect, useState } from 'react';
import { toast } from 'sonner';
diff --git a/packages/app/src/components/settings/okignore-doc.test.ts b/packages/app/src/components/settings/okignore-doc.test.ts
index 56df1beb..8d86ec97 100644
--- a/packages/app/src/components/settings/okignore-doc.test.ts
+++ b/packages/app/src/components/settings/okignore-doc.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import {
appendPattern,
diff --git a/packages/app/src/components/settings/okignore-doc.ts b/packages/app/src/components/settings/okignore-doc.ts
index 60cbc48b..2b4685c0 100644
--- a/packages/app/src/components/settings/okignore-doc.ts
+++ b/packages/app/src/components/settings/okignore-doc.ts
@@ -1,3 +1,4 @@
+
export interface PatternLine {
kind: 'pattern';
raw: string;
diff --git a/packages/app/src/components/settings/okignore-preview.ts b/packages/app/src/components/settings/okignore-preview.ts
index bf1cddc0..ccca2b56 100644
--- a/packages/app/src/components/settings/okignore-preview.ts
+++ b/packages/app/src/components/settings/okignore-preview.ts
@@ -1,3 +1,4 @@
+
import ignore, { type Ignore } from 'ignore';
export const PREVIEW_CACHE_LIMIT = 256;
diff --git a/packages/app/src/components/settings/okignore-warnings.ts b/packages/app/src/components/settings/okignore-warnings.ts
index a922a0d7..e6a34740 100644
--- a/packages/app/src/components/settings/okignore-warnings.ts
+++ b/packages/app/src/components/settings/okignore-warnings.ts
@@ -1,3 +1,4 @@
+
type OkignoreWarningCode =
| 'trailing-backslash'
| 'unmatched-bracket'
diff --git a/packages/app/src/components/settings/schema-walker.test.ts b/packages/app/src/components/settings/schema-walker.test.ts
index bb91e15b..4fa4c541 100644
--- a/packages/app/src/components/settings/schema-walker.test.ts
+++ b/packages/app/src/components/settings/schema-walker.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { ConfigSchema } from '@inkeep/open-knowledge-core';
import {
diff --git a/packages/app/src/components/settings/schema-walker.ts b/packages/app/src/components/settings/schema-walker.ts
index b724bf72..fac70c57 100644
--- a/packages/app/src/components/settings/schema-walker.ts
+++ b/packages/app/src/components/settings/schema-walker.ts
@@ -1,3 +1,4 @@
+
import { resolveLeafSchema } from '@inkeep/open-knowledge-core';
import type { z } from 'zod';
@@ -19,6 +20,7 @@ export function buildPatch(
return { [String(head)]: buildPatch(rest, value) };
}
+
export function getFieldDefault(schema: AnyZ): unknown {
let cur: unknown = schema;
for (let depth = 0; depth < 16; depth++) {
diff --git a/packages/app/src/components/settings/use-config-form.test.ts b/packages/app/src/components/settings/use-config-form.test.ts
index 28ce6da5..6252ed8b 100644
--- a/packages/app/src/components/settings/use-config-form.test.ts
+++ b/packages/app/src/components/settings/use-config-form.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, mock, test } from 'bun:test';
import type {
Config,
@@ -14,6 +15,7 @@ import {
runCommit,
} from './use-config-form';
+
describe('applyExternalUpdate', () => {
test('calls form.reset with keepDirtyValues + keepDirty + keepTouched', () => {
const reset = mock();
@@ -35,6 +37,7 @@ describe('applyExternalUpdate', () => {
});
});
+
interface MockedRunCommitForm extends RunCommitForm {
reset?: never;
}
@@ -309,6 +312,7 @@ describe('runCommit — failure path', () => {
});
});
+
describe('pickFirstIssueForPath', () => {
test('returns the issue.message when an issue path matches the field name', () => {
const error: ConfigValidationError = {
@@ -365,6 +369,7 @@ describe('pickFirstIssueForPath', () => {
});
});
+
describe('useConfigForm module shape', () => {
test('exports useConfigForm as a function', async () => {
const mod = await import('./use-config-form');
diff --git a/packages/app/src/components/settings/use-config-form.ts b/packages/app/src/components/settings/use-config-form.ts
index d2079c13..afdd214b 100644
--- a/packages/app/src/components/settings/use-config-form.ts
+++ b/packages/app/src/components/settings/use-config-form.ts
@@ -1,3 +1,4 @@
+
import {
type Config,
type ConfigBinding,
@@ -34,6 +35,7 @@ export function useConfigForm(binding: ConfigBinding): UseConfigFormResult {
return { form, commitField };
}
+
export type ApplyExternalUpdateForm = Pick, 'reset'>;
export function applyExternalUpdate(
diff --git a/packages/app/src/components/share-metadata-rows.tsx b/packages/app/src/components/share-metadata-rows.tsx
index c136f81e..607ed1cf 100644
--- a/packages/app/src/components/share-metadata-rows.tsx
+++ b/packages/app/src/components/share-metadata-rows.tsx
@@ -1,3 +1,4 @@
+
import { Trans } from '@lingui/react/macro';
import type { ReactNode } from 'react';
diff --git a/packages/app/src/components/sidebar-hover-prewarm.ts b/packages/app/src/components/sidebar-hover-prewarm.ts
index 44dcf30b..cc313084 100644
--- a/packages/app/src/components/sidebar-hover-prewarm.ts
+++ b/packages/app/src/components/sidebar-hover-prewarm.ts
@@ -1,3 +1,4 @@
+
import { isSystemDoc } from '@/editor/is-system-doc';
import { mark } from '@/lib/perf';
import { readNumericOverride } from '@/lib/perf/env-override';
diff --git a/packages/app/src/components/template-picker-utils.ts b/packages/app/src/components/template-picker-utils.ts
index d6c0931d..49b10547 100644
--- a/packages/app/src/components/template-picker-utils.ts
+++ b/packages/app/src/components/template-picker-utils.ts
@@ -1,5 +1,6 @@
import type { TemplateMenuEntry } from '@/hooks/use-folder-config';
+
const SCOPE_ORDER: Record = {
local: 0,
inherited: 1,
diff --git a/packages/app/src/components/text-viewer-languages.ts b/packages/app/src/components/text-viewer-languages.ts
index da5e3ea1..d0cf7b78 100644
--- a/packages/app/src/components/text-viewer-languages.ts
+++ b/packages/app/src/components/text-viewer-languages.ts
@@ -1,3 +1,4 @@
+
import type { Language } from '@codemirror/language';
const cache = new Map>();
diff --git a/packages/app/src/components/ui/command.tsx b/packages/app/src/components/ui/command.tsx
index 824632e1..6fbf16ac 100644
--- a/packages/app/src/components/ui/command.tsx
+++ b/packages/app/src/components/ui/command.tsx
@@ -1,3 +1,4 @@
+
import { Command as CommandPrimitive } from 'cmdk';
import { SearchIcon } from 'lucide-react';
import type { ComponentProps } from 'react';
diff --git a/packages/app/src/components/ui/form.test.ts b/packages/app/src/components/ui/form.test.ts
index 7fb8f673..e89e3f6a 100644
--- a/packages/app/src/components/ui/form.test.ts
+++ b/packages/app/src/components/ui/form.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
describe('ui/form module', () => {
diff --git a/packages/app/src/editor/DocumentContext.tsx b/packages/app/src/editor/DocumentContext.tsx
index c226174b..ac335e8c 100644
--- a/packages/app/src/editor/DocumentContext.tsx
+++ b/packages/app/src/editor/DocumentContext.tsx
@@ -1440,7 +1440,8 @@ if (import.meta.hot) {
delete (window as { __test_rejectSyncPromise?: unknown }).__test_rejectSyncPromise;
delete (window as { __test_armPendingRejection?: unknown }).__test_armPendingRejection;
delete (window as { __test_closeActiveWebSocket?: unknown }).__test_closeActiveWebSocket;
- } catch {}
+ } catch {
+ }
}
});
}
diff --git a/packages/app/src/editor/SourceEditor.tsx b/packages/app/src/editor/SourceEditor.tsx
index 0801301b..a6d6ccbc 100644
--- a/packages/app/src/editor/SourceEditor.tsx
+++ b/packages/app/src/editor/SourceEditor.tsx
@@ -124,6 +124,7 @@ export function SourceEditor({
sourceModeActiveRef.current = isSourceModeActive;
}, [isSourceModeActive]);
+
const cmEntryRef = useRef(null);
// biome-ignore lint/correctness/useExhaustiveDependencies: see comment above
useEffect(() => {
diff --git a/packages/app/src/editor/TiptapEditor.tsx b/packages/app/src/editor/TiptapEditor.tsx
index 4fef8b03..523d47c4 100644
--- a/packages/app/src/editor/TiptapEditor.tsx
+++ b/packages/app/src/editor/TiptapEditor.tsx
@@ -128,7 +128,8 @@ function repairDetachedEditorContent(editor: Editor, portalTarget: HTMLElement):
try {
view.setProps({ nodeViews: {} });
- } catch {}
+ } catch {
+ }
editorWithContent.contentComponent = null;
editorWithContent.isEditorContentInitialized = false;
return true;
@@ -567,6 +568,7 @@ const TiptapEditorChrome: FC = ({
};
}, [editor, docName]);
+
useEffect(() => {
const activityMap = provider.document.getMap('agent-flash');
let lastSeenTimestamp = Date.now();
diff --git a/packages/app/src/editor/active-editor.ts b/packages/app/src/editor/active-editor.ts
index b49b53f3..1b126644 100644
--- a/packages/app/src/editor/active-editor.ts
+++ b/packages/app/src/editor/active-editor.ts
@@ -1,3 +1,4 @@
+
import type { Editor } from '@tiptap/core';
const editors = new Map();
diff --git a/packages/app/src/editor/asset-dispatch/dispatcher.ts b/packages/app/src/editor/asset-dispatch/dispatcher.ts
index 3d4036a8..b1391085 100644
--- a/packages/app/src/editor/asset-dispatch/dispatcher.ts
+++ b/packages/app/src/editor/asset-dispatch/dispatcher.ts
@@ -1,3 +1,4 @@
+
import { type AssetViewerRegistry, assetViewerRegistry } from './registry.ts';
import type { AssetClickContext } from './types.ts';
diff --git a/packages/app/src/editor/asset-dispatch/index.ts b/packages/app/src/editor/asset-dispatch/index.ts
index 297810a2..f9121bc8 100644
--- a/packages/app/src/editor/asset-dispatch/index.ts
+++ b/packages/app/src/editor/asset-dispatch/index.ts
@@ -1 +1,2 @@
+
export { dispatchAssetClick } from './dispatcher.ts';
diff --git a/packages/app/src/editor/asset-dispatch/registry.ts b/packages/app/src/editor/asset-dispatch/registry.ts
index af561a58..f5a5e973 100644
--- a/packages/app/src/editor/asset-dispatch/registry.ts
+++ b/packages/app/src/editor/asset-dispatch/registry.ts
@@ -1,3 +1,4 @@
+
import type { AssetViewer, AssetViewerLookupResult } from './types.ts';
export class AssetViewerRegistry {
diff --git a/packages/app/src/editor/asset-dispatch/types.ts b/packages/app/src/editor/asset-dispatch/types.ts
index 8d6adfcf..4085a600 100644
--- a/packages/app/src/editor/asset-dispatch/types.ts
+++ b/packages/app/src/editor/asset-dispatch/types.ts
@@ -1,3 +1,4 @@
+
export interface AssetClickContext {
readonly url: string;
readonly projectRelPath: string;
diff --git a/packages/app/src/editor/binding-staleness-guard.test.ts b/packages/app/src/editor/binding-staleness-guard.test.ts
index f09cdf13..1ec36384 100644
--- a/packages/app/src/editor/binding-staleness-guard.test.ts
+++ b/packages/app/src/editor/binding-staleness-guard.test.ts
@@ -1,3 +1,4 @@
+
import { afterAll, afterEach, beforeAll, describe, expect, test } from 'bun:test';
import { randomUUID } from 'node:crypto';
import { getSchema } from '@tiptap/core';
@@ -14,6 +15,7 @@ import {
} from './binding-staleness-guard';
import { sharedExtensions } from './extensions/shared';
+
function installDomGlobals(): () => void {
const dom = new JSDOM('', {
url: 'http://localhost:5173',
@@ -72,6 +74,7 @@ afterAll(() => {
restoreDomGlobals = null;
});
+
const schema = getSchema(sharedExtensions);
/** Stands in for a provider applying a remote peer's update (origin is the
@@ -245,6 +248,7 @@ function createHarness(options: HarnessOptions = {}): GuardHarness {
return harness;
}
+
describe('pure helpers', () => {
test('isDiverged is true exactly when external is ahead of applied', () => {
expect(isDiverged(0, 0)).toBe(false);
@@ -275,6 +279,7 @@ describe('pure helpers', () => {
});
});
+
describe('counter semantics', () => {
test('a wedged external burst is reported once, deferred, with the full backlog', async () => {
const harness = createHarness();
@@ -325,6 +330,7 @@ describe('counter semantics', () => {
});
});
+
describe('publication gate', () => {
test('while diverged, every transaction without y-sync meta is blocked — including selection-only', async () => {
const harness = createHarness({ seedText: 'long enough to move a cursor' });
@@ -377,6 +383,7 @@ describe('publication gate', () => {
});
});
+
describe('wedge trigger', () => {
test('fires once per divergence episode across repeated wedged bumps; the gate keeps blocking', async () => {
const harness = createHarness();
@@ -450,6 +457,7 @@ describe('wedge trigger', () => {
});
});
+
describe('binding write-back seam', () => {
/** What the vendored ySyncPlugin's pluginView `update` callback does
* unconditionally on every view-state update (y-tiptap.cjs view section):
@@ -534,6 +542,7 @@ describe('binding write-back seam', () => {
});
});
+
describe('no false positives on healthy bindings', () => {
for (const order of ['registered-before-guard', 'registered-after-guard'] as const) {
test(`rapid external stream interleaved with local typing stays open (binding ${order})`, async () => {
diff --git a/packages/app/src/editor/binding-staleness-guard.ts b/packages/app/src/editor/binding-staleness-guard.ts
index 758caca8..e467cfc7 100644
--- a/packages/app/src/editor/binding-staleness-guard.ts
+++ b/packages/app/src/editor/binding-staleness-guard.ts
@@ -5,6 +5,7 @@ import { ySyncPluginKey } from '@tiptap/y-tiptap';
import type * as Y from 'yjs';
import { mark } from '../lib/perf/mark';
+
export interface WedgeDetail {
externalSeq: number;
appliedSeq: number;
diff --git a/packages/app/src/editor/block-ux/keyboard-nav.ts b/packages/app/src/editor/block-ux/keyboard-nav.ts
index 990ee76e..55314994 100644
--- a/packages/app/src/editor/block-ux/keyboard-nav.ts
+++ b/packages/app/src/editor/block-ux/keyboard-nav.ts
@@ -1,3 +1,4 @@
+
import { incrementJsxArrowNodeSelectFailed } from '@inkeep/open-knowledge-core';
import type { Editor } from '@tiptap/core';
import { Extension } from '@tiptap/core';
diff --git a/packages/app/src/editor/branch-invalidation.test.ts b/packages/app/src/editor/branch-invalidation.test.ts
index 9709fc5e..a18f68a7 100644
--- a/packages/app/src/editor/branch-invalidation.test.ts
+++ b/packages/app/src/editor/branch-invalidation.test.ts
@@ -118,6 +118,7 @@ describe('handleBranchSwitched', () => {
expect(clear2).toHaveBeenCalledTimes(1);
});
+
test('swallows clearData failures and still recycles', async () => {
pool = new ProviderPool(3, DUMMY_WS);
pool.setExpectedServerInstanceId(TEST_SERVER_INSTANCE_ID);
diff --git a/packages/app/src/editor/branch-invalidation.ts b/packages/app/src/editor/branch-invalidation.ts
index 480223e5..f392cde1 100644
--- a/packages/app/src/editor/branch-invalidation.ts
+++ b/packages/app/src/editor/branch-invalidation.ts
@@ -1,3 +1,4 @@
+
import { z } from 'zod';
import type { ProviderPool } from './provider-pool';
diff --git a/packages/app/src/editor/bubble-menu/BubbleMenuBar.tsx b/packages/app/src/editor/bubble-menu/BubbleMenuBar.tsx
index c5a9d333..27be06b6 100644
--- a/packages/app/src/editor/bubble-menu/BubbleMenuBar.tsx
+++ b/packages/app/src/editor/bubble-menu/BubbleMenuBar.tsx
@@ -75,7 +75,8 @@ export function BubbleMenuBar({
popup.style.top = `${y}px`;
}
})
- .catch(() => {});
+ .catch(() => {
+ });
});
};
diff --git a/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.dom.test.tsx b/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.dom.test.tsx
index 93f370e0..ee034e42 100644
--- a/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.dom.test.tsx
+++ b/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, mock, test } from 'bun:test';
import { act, cleanup, render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
diff --git a/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.tsx b/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.tsx
index 0c3ccc7f..ea28d723 100644
--- a/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.tsx
+++ b/packages/app/src/editor/bubble-menu/EditWithAiBubbleButton.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import { isMacOS } from '@tiptap/core';
import type { Editor } from '@tiptap/react';
diff --git a/packages/app/src/editor/bubble-menu/FileBubbleButtons.tsx b/packages/app/src/editor/bubble-menu/FileBubbleButtons.tsx
index c3d5611c..80bd5c49 100644
--- a/packages/app/src/editor/bubble-menu/FileBubbleButtons.tsx
+++ b/packages/app/src/editor/bubble-menu/FileBubbleButtons.tsx
@@ -1,3 +1,4 @@
+
import { Trans, useLingui } from '@lingui/react/macro';
import type { Editor } from '@tiptap/react';
import { useEditorState } from '@tiptap/react';
diff --git a/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.dom.test.tsx b/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.dom.test.tsx
index 300f419d..90f356e4 100644
--- a/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.dom.test.tsx
+++ b/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { cleanup, render } from '@testing-library/react';
import type { Editor } from '@tiptap/react';
diff --git a/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.tsx b/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.tsx
index 7b350047..dee88be2 100644
--- a/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.tsx
+++ b/packages/app/src/editor/bubble-menu/FootnoteBubbleButton.tsx
@@ -1,3 +1,4 @@
+
import {
collectFootnoteIdentifiers,
findFootnoteDefinitionInsertPos,
diff --git a/packages/app/src/editor/bubble-menu/ImageAlignButtons.test.ts b/packages/app/src/editor/bubble-menu/ImageAlignButtons.test.ts
index 8679f7bc..028be7c9 100644
--- a/packages/app/src/editor/bubble-menu/ImageAlignButtons.test.ts
+++ b/packages/app/src/editor/bubble-menu/ImageAlignButtons.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import type { Editor } from '@tiptap/react';
import { isImageNodeSelected } from './ImageAlignButtons';
diff --git a/packages/app/src/editor/bubble-menu/ImageAlignButtons.tsx b/packages/app/src/editor/bubble-menu/ImageAlignButtons.tsx
index a21e80ff..8f0d7472 100644
--- a/packages/app/src/editor/bubble-menu/ImageAlignButtons.tsx
+++ b/packages/app/src/editor/bubble-menu/ImageAlignButtons.tsx
@@ -1,3 +1,4 @@
+
import { NodeSelection } from '@tiptap/pm/state';
import type { Editor } from '@tiptap/react';
import { useEditorState } from '@tiptap/react';
diff --git a/packages/app/src/editor/client-persistence.test.ts b/packages/app/src/editor/client-persistence.test.ts
index d92c4da0..75de15d7 100644
--- a/packages/app/src/editor/client-persistence.test.ts
+++ b/packages/app/src/editor/client-persistence.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, spyOn, test } from 'bun:test';
import { randomUUID } from 'node:crypto';
import * as Y from 'yjs';
@@ -287,7 +288,8 @@ describe('createClientPersistence', () => {
warnSpy.mockRestore();
try {
blocker.close();
- } catch {}
+ } catch {
+ }
docA.destroy();
}
});
diff --git a/packages/app/src/editor/client-persistence.ts b/packages/app/src/editor/client-persistence.ts
index 90b3e786..58d1c7b4 100644
--- a/packages/app/src/editor/client-persistence.ts
+++ b/packages/app/src/editor/client-persistence.ts
@@ -1,3 +1,4 @@
+
import { LINEAGE_EPOCH_KEY } from '@inkeep/open-knowledge-core';
import { IndexeddbPersistence } from 'y-indexeddb';
import * as Y from 'yjs';
@@ -108,7 +109,8 @@ class ClientPersistenceImpl implements ClientPersistenceProvider {
reject(err instanceof Error ? err : new Error(String(err)));
try {
tx.abort();
- } catch {}
+ } catch {
+ }
}
};
tx.oncomplete = () => resolve();
diff --git a/packages/app/src/editor/clipboard/clipboard-sanitize.test.ts b/packages/app/src/editor/clipboard/clipboard-sanitize.test.ts
index fff801fe..83bc7d48 100644
--- a/packages/app/src/editor/clipboard/clipboard-sanitize.test.ts
+++ b/packages/app/src/editor/clipboard/clipboard-sanitize.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import {
classifyUrlPortability,
@@ -407,6 +408,7 @@ describe('OPT_OUT_ATTR — descriptor opt-out marker', () => {
});
describe('classifyUrlPortability — single-pass classification with reason bucket', () => {
+
describe('portable inputs (reason absent)', () => {
test('fragment-only refs return { portable: true }', () => {
expect(classifyUrlPortability('#section')).toEqual({ portable: true });
diff --git a/packages/app/src/editor/clipboard/clipboard-sanitize.ts b/packages/app/src/editor/clipboard/clipboard-sanitize.ts
index 60314421..56e37965 100644
--- a/packages/app/src/editor/clipboard/clipboard-sanitize.ts
+++ b/packages/app/src/editor/clipboard/clipboard-sanitize.ts
@@ -1,3 +1,4 @@
+
import { isRelativeUrl, SAFE_URL_SCHEME_RE } from '@inkeep/open-knowledge-core';
import * as ipaddr from 'ipaddr.js';
@@ -77,6 +78,7 @@ export function sanitizeStyleAttrValue(value: string): string {
return value;
}
+
function parseColorBody(body: string): [number, number, number, number | null] | null {
const slashIdx = body.indexOf('/');
const main = (slashIdx === -1 ? body : body.slice(0, slashIdx)).trim();
@@ -181,6 +183,7 @@ export function convertCssColors(value: string): string {
});
}
+
const PORTABLE_NAVIGATION_SCHEMES: ReadonlySet = new Set([
'mailto',
'tel',
diff --git a/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.test.ts b/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.test.ts
index fc6e336a..d5614357 100644
--- a/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.test.ts
+++ b/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { classifyUrlPortability } from './clipboard-sanitize.ts';
import {
@@ -66,6 +67,7 @@ describe('toneForType — type-to-tone lookup with prototype-pollution guard', (
});
});
+
describe('paletteUrlReason — portability decision', () => {
test('returns null for fragment-only refs', () => {
expect(paletteUrlReason('#section')).toBeNull();
diff --git a/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.ts b/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.ts
index 38d2985f..273ab249 100644
--- a/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.ts
+++ b/packages/app/src/editor/clipboard/clipboard-walker-fallback-palette.ts
@@ -1,3 +1,4 @@
+
import type { Node as PmNode } from '@tiptap/pm/model';
import {
classifyUrlPortability,
diff --git a/packages/app/src/editor/clipboard/clipboard-walker.test.ts b/packages/app/src/editor/clipboard/clipboard-walker.test.ts
index 5a690c98..2634efe8 100644
--- a/packages/app/src/editor/clipboard/clipboard-walker.test.ts
+++ b/packages/app/src/editor/clipboard/clipboard-walker.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { Schema } from '@tiptap/pm/model';
import {
@@ -182,6 +183,7 @@ describe('buildInlineStyleFrom — modern CSS color downgrade', () => {
});
describe('selectionPartiallyCoversTopLevelNode — selection-bound containment guard', () => {
+
const schema = new Schema({
nodes: {
doc: { content: 'block+' },
@@ -297,6 +299,7 @@ describe('glyphForLucide — pure lookup for cross-app icon substitution', () =>
});
});
+
function fakeElementWithClosest(closestResults: Record): Element {
return {
closest: (selector: string) => closestResults[selector] ?? null,
@@ -316,6 +319,7 @@ describe('chooseEmissionClass — paragraph-content-model rule', () => {
});
});
+
interface FakeNode {
tagName: string;
attrs: Record;
@@ -498,6 +502,7 @@ describe('applyWikiLinkTransform — wiki-link rewrite', () => {
});
});
+
interface PostPassFakeElement {
tagName: string;
attrs: Record;
diff --git a/packages/app/src/editor/clipboard/clipboard-walker.ts b/packages/app/src/editor/clipboard/clipboard-walker.ts
index b17d8d0f..a7e25661 100644
--- a/packages/app/src/editor/clipboard/clipboard-walker.ts
+++ b/packages/app/src/editor/clipboard/clipboard-walker.ts
@@ -1,3 +1,4 @@
+
import { normalizeNullableString, wikiLinkHref } from '@inkeep/open-knowledge-core';
import type { Node as PmNode, Slice } from '@tiptap/pm/model';
import type { EditorView } from '@tiptap/pm/view';
@@ -82,6 +83,7 @@ export const ATTR_BLOCKLIST: ReadonlySet = new Set([
'data-pm-slice',
]);
+
export interface ComputedStyleLike {
getPropertyValue(prop: string): string;
}
@@ -339,6 +341,7 @@ function walkPair(live: Element, clone: Element, env: WalkerEnv): void {
}
}
+
export function applyWikiLinkTransform(root: Element): void {
const spans = root.querySelectorAll('span[data-wiki-link]');
for (const span of Array.from(spans)) {
@@ -358,6 +361,7 @@ export function applyWikiLinkTransform(root: Element): void {
}
}
+
type WalkerUrlLeafTag = Exclude;
const URL_LEAF_TAGS: ReadonlySet = new Set([
diff --git a/packages/app/src/editor/clipboard/detect-source.test.ts b/packages/app/src/editor/clipboard/detect-source.test.ts
index 623ff5f8..a6ede7c1 100644
--- a/packages/app/src/editor/clipboard/detect-source.test.ts
+++ b/packages/app/src/editor/clipboard/detect-source.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { detectSource } from './detect-source.ts';
diff --git a/packages/app/src/editor/clipboard/detect-source.ts b/packages/app/src/editor/clipboard/detect-source.ts
index 7a072ba6..e0c29223 100644
--- a/packages/app/src/editor/clipboard/detect-source.ts
+++ b/packages/app/src/editor/clipboard/detect-source.ts
@@ -1,3 +1,4 @@
+
export type ClipboardSource =
| 'vscode'
| 'gfm'
diff --git a/packages/app/src/editor/clipboard/handle-drop.test.ts b/packages/app/src/editor/clipboard/handle-drop.test.ts
index 4496bb64..60df0439 100644
--- a/packages/app/src/editor/clipboard/handle-drop.test.ts
+++ b/packages/app/src/editor/clipboard/handle-drop.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import * as actualCore from '@inkeep/open-knowledge-core';
import * as actualSonner from 'sonner';
diff --git a/packages/app/src/editor/clipboard/handle-paste.test.ts b/packages/app/src/editor/clipboard/handle-paste.test.ts
index 18ddde78..739e43fb 100644
--- a/packages/app/src/editor/clipboard/handle-paste.test.ts
+++ b/packages/app/src/editor/clipboard/handle-paste.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import * as actualCore from '@inkeep/open-knowledge-core';
import * as actualSonner from 'sonner';
diff --git a/packages/app/src/editor/clipboard/handle-paste.ts b/packages/app/src/editor/clipboard/handle-paste.ts
index d1f84eba..763dc5a1 100644
--- a/packages/app/src/editor/clipboard/handle-paste.ts
+++ b/packages/app/src/editor/clipboard/handle-paste.ts
@@ -1,3 +1,4 @@
+
import type { MarkdownManager } from '@inkeep/open-knowledge-core';
import { htmlToMdast, mdastToMarkdown } from '@inkeep/open-knowledge-core';
import type { JSONContent } from '@tiptap/core';
diff --git a/packages/app/src/editor/clipboard/index.ts b/packages/app/src/editor/clipboard/index.ts
index 37a12d90..0bafa091 100644
--- a/packages/app/src/editor/clipboard/index.ts
+++ b/packages/app/src/editor/clipboard/index.ts
@@ -1,3 +1,4 @@
+
export { OPT_OUT_ATTR } from './clipboard-sanitize.ts';
export { createHandleDrop, createHandlePaste } from './handle-paste.ts';
export {
diff --git a/packages/app/src/editor/clipboard/instrument.test.ts b/packages/app/src/editor/clipboard/instrument.test.ts
index 335da32a..7447ed06 100644
--- a/packages/app/src/editor/clipboard/instrument.test.ts
+++ b/packages/app/src/editor/clipboard/instrument.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
import { ChunkedInsertError, HtmlPayloadTooLargeError } from '@inkeep/open-knowledge-core';
diff --git a/packages/app/src/editor/clipboard/instrument.ts b/packages/app/src/editor/clipboard/instrument.ts
index c7effa5b..ad7c1cee 100644
--- a/packages/app/src/editor/clipboard/instrument.ts
+++ b/packages/app/src/editor/clipboard/instrument.ts
@@ -2,6 +2,7 @@ import { ChunkedInsertError, HtmlPayloadTooLargeError } from '@inkeep/open-knowl
import type { UrlPortabilityReason } from './clipboard-sanitize.ts';
import type { ClipboardSource } from './detect-source.ts';
+
type ClipboardEventName =
| 'clipboard-slow-op'
| 'clipboard-source-detected'
diff --git a/packages/app/src/editor/clipboard/is-markdown.test.ts b/packages/app/src/editor/clipboard/is-markdown.test.ts
index e2e7ca23..239b2af2 100644
--- a/packages/app/src/editor/clipboard/is-markdown.test.ts
+++ b/packages/app/src/editor/clipboard/is-markdown.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { isMarkdown } from './is-markdown.ts';
diff --git a/packages/app/src/editor/clipboard/is-markdown.ts b/packages/app/src/editor/clipboard/is-markdown.ts
index ae00bfba..333a5b33 100644
--- a/packages/app/src/editor/clipboard/is-markdown.ts
+++ b/packages/app/src/editor/clipboard/is-markdown.ts
@@ -1,3 +1,4 @@
+
const FENCE_RE = /^```/m;
const HEADING_RE = /^#{1,6} /m;
const BULLET_RE = /^[-*+] /m;
diff --git a/packages/app/src/editor/clipboard/non-portable-render-source-fallback.test.ts b/packages/app/src/editor/clipboard/non-portable-render-source-fallback.test.ts
index ac29245b..22f37da4 100644
--- a/packages/app/src/editor/clipboard/non-portable-render-source-fallback.test.ts
+++ b/packages/app/src/editor/clipboard/non-portable-render-source-fallback.test.ts
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import type { Node as PmNode } from '@tiptap/pm/model';
import { sourceFallbackFormFor } from './non-portable-render-source-fallback.ts';
diff --git a/packages/app/src/editor/clipboard/non-portable-render-source-fallback.ts b/packages/app/src/editor/clipboard/non-portable-render-source-fallback.ts
index 62651c26..2b946739 100644
--- a/packages/app/src/editor/clipboard/non-portable-render-source-fallback.ts
+++ b/packages/app/src/editor/clipboard/non-portable-render-source-fallback.ts
@@ -1,3 +1,4 @@
+
import type { Node as PmNode } from '@tiptap/pm/model';
type SourceFallbackForm = { source: string };
diff --git a/packages/app/src/editor/clipboard/paste-failure-toast.test.ts b/packages/app/src/editor/clipboard/paste-failure-toast.test.ts
index 6a2e7f12..83eb2671 100644
--- a/packages/app/src/editor/clipboard/paste-failure-toast.test.ts
+++ b/packages/app/src/editor/clipboard/paste-failure-toast.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import * as actualSonner from 'sonner';
diff --git a/packages/app/src/editor/clipboard/paste-failure-toast.ts b/packages/app/src/editor/clipboard/paste-failure-toast.ts
index 28da4659..6b9a64ca 100644
--- a/packages/app/src/editor/clipboard/paste-failure-toast.ts
+++ b/packages/app/src/editor/clipboard/paste-failure-toast.ts
@@ -1,3 +1,4 @@
+
import { toast } from 'sonner';
const THROTTLE_MS = 3000;
diff --git a/packages/app/src/editor/clipboard/serialize.test.ts b/packages/app/src/editor/clipboard/serialize.test.ts
index af9a03f2..9afe862c 100644
--- a/packages/app/src/editor/clipboard/serialize.test.ts
+++ b/packages/app/src/editor/clipboard/serialize.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import type { JSONContent } from '@tiptap/core';
import type { Fragment } from '@tiptap/pm/model';
@@ -86,6 +87,7 @@ describe('createClipboardTextSerializer', () => {
});
describe('createClipboardHtmlSerializer — walker→markdown tier dispatch', () => {
+
function emptyFragment(): Fragment {
return { firstChild: null } as unknown as Fragment;
}
@@ -180,6 +182,7 @@ describe('createClipboardHtmlSerializer — walker→markdown tier dispatch', ()
});
describe('createClipboardHtmlSerializer — walker env wires markdown reconstruction', () => {
+
let warnCalls: string[];
let innerOrigWarn: typeof console.warn;
beforeEach(() => {
@@ -261,6 +264,7 @@ function wrapDescriptor(el: FakeDescriptorElement): Element {
}
describe('findDescriptorRoot — outermost-wrapper selection', () => {
+
test('(a) bare element with only ProseMirror parent → returns null', () => {
const proseMirror = makeDescriptorEl({ classes: ['ProseMirror'] });
const img = makeDescriptorEl();
@@ -337,6 +341,7 @@ describe('findDescriptorRoot — outermost-wrapper selection', () => {
});
describe('sliceToDocJson — inline-first wrapping branch', () => {
+
const inlineImageSchema = new Schema({
nodes: {
doc: { content: 'block+' },
diff --git a/packages/app/src/editor/clipboard/serialize.ts b/packages/app/src/editor/clipboard/serialize.ts
index 0793f6b8..4ab180aa 100644
--- a/packages/app/src/editor/clipboard/serialize.ts
+++ b/packages/app/src/editor/clipboard/serialize.ts
@@ -1,3 +1,4 @@
+
import type { MarkdownManager } from '@inkeep/open-knowledge-core';
import { markdownToHtml } from '@inkeep/open-knowledge-core';
import type { JSONContent } from '@tiptap/core';
diff --git a/packages/app/src/editor/clipboard/shift-tracker.test.ts b/packages/app/src/editor/clipboard/shift-tracker.test.ts
index 78be5917..bc7f11a2 100644
--- a/packages/app/src/editor/clipboard/shift-tracker.test.ts
+++ b/packages/app/src/editor/clipboard/shift-tracker.test.ts
@@ -1,3 +1,4 @@
+
import { afterAll, beforeAll, beforeEach, describe, expect, test } from 'bun:test';
interface Listener {
diff --git a/packages/app/src/editor/clipboard/shift-tracker.ts b/packages/app/src/editor/clipboard/shift-tracker.ts
index e214f82e..ee57f6e9 100644
--- a/packages/app/src/editor/clipboard/shift-tracker.ts
+++ b/packages/app/src/editor/clipboard/shift-tracker.ts
@@ -1,3 +1,4 @@
+
let shiftHeldLatch = false;
let listenersAttached = false;
diff --git a/packages/app/src/editor/clipboard/source-clipboard-recovery.test.ts b/packages/app/src/editor/clipboard/source-clipboard-recovery.test.ts
index 0a5e3069..fcc21ab6 100644
--- a/packages/app/src/editor/clipboard/source-clipboard-recovery.test.ts
+++ b/packages/app/src/editor/clipboard/source-clipboard-recovery.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
import { ChunkedInsertError } from '@inkeep/open-knowledge-core';
import * as actualSonner from 'sonner';
diff --git a/packages/app/src/editor/clipboard/source-clipboard.test.ts b/packages/app/src/editor/clipboard/source-clipboard.test.ts
index e9044ed2..935100d3 100644
--- a/packages/app/src/editor/clipboard/source-clipboard.test.ts
+++ b/packages/app/src/editor/clipboard/source-clipboard.test.ts
@@ -1,3 +1,4 @@
+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
import { buildSourceModeHtml, handleCopyOrCut, handlePaste } from './source-clipboard.ts';
diff --git a/packages/app/src/editor/components/Accordion.test.tsx b/packages/app/src/editor/components/Accordion.test.tsx
index 7fa349a9..fe7bfe1b 100644
--- a/packages/app/src/editor/components/Accordion.test.tsx
+++ b/packages/app/src/editor/components/Accordion.test.tsx
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { renderToString } from 'react-dom/server';
import { Accordion } from './Accordion.tsx';
diff --git a/packages/app/src/editor/components/Accordion.tsx b/packages/app/src/editor/components/Accordion.tsx
index 95efdff1..4fb9b666 100644
--- a/packages/app/src/editor/components/Accordion.tsx
+++ b/packages/app/src/editor/components/Accordion.tsx
@@ -1,3 +1,4 @@
+
import { ChevronRight } from 'lucide-react';
import { resolveLucideIcon } from './lucide-icon-allowlist.ts';
diff --git a/packages/app/src/editor/components/Audio.tsx b/packages/app/src/editor/components/Audio.tsx
index 9d5a734d..1a32406d 100644
--- a/packages/app/src/editor/components/Audio.tsx
+++ b/packages/app/src/editor/components/Audio.tsx
@@ -1,3 +1,4 @@
+
import { toDesktopAssetHref } from '@inkeep/open-knowledge-core';
interface AudioProps {
diff --git a/packages/app/src/editor/components/Callout.test.tsx b/packages/app/src/editor/components/Callout.test.tsx
index 7eebbb70..d3639d5a 100644
--- a/packages/app/src/editor/components/Callout.test.tsx
+++ b/packages/app/src/editor/components/Callout.test.tsx
@@ -1,3 +1,4 @@
+
import { describe, expect, test } from 'bun:test';
import { renderToString } from 'react-dom/server';
import { Callout } from './Callout.tsx';
diff --git a/packages/app/src/editor/components/Callout.tsx b/packages/app/src/editor/components/Callout.tsx
index 41c44e3c..32178a1d 100644
--- a/packages/app/src/editor/components/Callout.tsx
+++ b/packages/app/src/editor/components/Callout.tsx
@@ -1,3 +1,4 @@
+
import { Trans } from '@lingui/react/macro';
import {
AlertOctagon,
diff --git a/packages/app/src/editor/components/CodePreviewEditModal.dom.test.tsx b/packages/app/src/editor/components/CodePreviewEditModal.dom.test.tsx
index f4c22065..55657156 100644
--- a/packages/app/src/editor/components/CodePreviewEditModal.dom.test.tsx
+++ b/packages/app/src/editor/components/CodePreviewEditModal.dom.test.tsx
@@ -1,3 +1,4 @@
+
import { afterEach, describe, expect, test } from 'bun:test';
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
import { useState } from 'react';
diff --git a/packages/app/src/editor/components/CodePreviewEditModal.tsx b/packages/app/src/editor/components/CodePreviewEditModal.tsx
index 5c1b8388..82c32493 100644
--- a/packages/app/src/editor/components/CodePreviewEditModal.tsx
+++ b/packages/app/src/editor/components/CodePreviewEditModal.tsx
@@ -1,3 +1,4 @@
+
import { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';
import { css } from '@codemirror/lang-css';
import { html } from '@codemirror/lang-html';
@@ -182,7 +183,9 @@ export function CodePreviewEditModal({
return (