@kabmo-labs/kabmo 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +506 -2
- package/bunfig.toml +11 -0
- package/dist/client/index.html +85 -0
- package/dist/client/index.js +1644 -0
- package/dist/client/static/apple-touch-icon-bbhgf3mq.png +0 -0
- package/dist/client/static/icon-192x192-kz5bvz85.png +0 -0
- package/dist/client/static/icon-8h6v1jcy.svg +12 -0
- package/dist/client/static/js/index-enkbbffs.js +5233 -0
- package/dist/client/static/js/index-yn17t04b.css +1 -0
- package/dist/client/static/manifest-42r8wcmg.webmanifest +91 -0
- package/extensions/kabmo-modes/commands.test.ts +209 -0
- package/extensions/kabmo-modes/commands.ts +247 -0
- package/extensions/kabmo-modes/goal.test.ts +239 -0
- package/extensions/kabmo-modes/goal.ts +335 -0
- package/extensions/kabmo-modes/index.ts +272 -0
- package/extensions/kabmo-modes/omp-modules.d.ts +27 -0
- package/extensions/kabmo-modes/parked.test.ts +112 -0
- package/extensions/kabmo-modes/parked.ts +161 -0
- package/extensions/kabmo-modes/plan.test.ts +283 -0
- package/extensions/kabmo-modes/plan.ts +292 -0
- package/extensions/kabmo-modes/prompts.test.ts +70 -0
- package/extensions/kabmo-modes/prompts.ts +167 -0
- package/extensions/kabmo-modes/protocol.test.ts +57 -0
- package/extensions/kabmo-modes/protocol.ts +97 -0
- package/extensions/kabmo-modes/registration.test.ts +26 -0
- package/extensions/kabmo-modes/session.ts +199 -0
- package/index.html +85 -0
- package/marketplace/marketplace.json +25 -0
- package/marketplace/plugins/command-runner/README.md +223 -0
- package/marketplace/plugins/command-runner/icon.svg +18 -0
- package/marketplace/plugins/command-runner/package.json +41 -0
- package/marketplace/plugins/command-runner/src/app.tsx +281 -0
- package/marketplace/plugins/command-runner/src/panel/Custom.test.tsx +324 -0
- package/marketplace/plugins/command-runner/src/panel/CustomForm.tsx +236 -0
- package/marketplace/plugins/command-runner/src/panel/Glyph.tsx +60 -0
- package/marketplace/plugins/command-runner/src/panel/Groups.test.tsx +316 -0
- package/marketplace/plugins/command-runner/src/panel/Groups.tsx +311 -0
- package/marketplace/plugins/command-runner/src/panel/Header.tsx +76 -0
- package/marketplace/plugins/command-runner/src/panel/Output.tsx +109 -0
- package/marketplace/plugins/command-runner/src/panel/Row.test.tsx +278 -0
- package/marketplace/plugins/command-runner/src/panel/Row.tsx +265 -0
- package/marketplace/plugins/command-runner/src/panel/format.ts +29 -0
- package/marketplace/plugins/command-runner/src/panel/index.tsx +165 -0
- package/marketplace/plugins/command-runner/src/panel/use-custom-dialog.ts +147 -0
- package/marketplace/plugins/command-runner/src/protocol.ts +242 -0
- package/marketplace/plugins/command-runner/src/server/custom.test.ts +223 -0
- package/marketplace/plugins/command-runner/src/server/custom.ts +260 -0
- package/marketplace/plugins/command-runner/src/server/detectors/detectors.test.ts +267 -0
- package/marketplace/plugins/command-runner/src/server/detectors/js.ts +38 -0
- package/marketplace/plugins/command-runner/src/server/detectors/jsonc.ts +78 -0
- package/marketplace/plugins/command-runner/src/server/detectors/make.ts +82 -0
- package/marketplace/plugins/command-runner/src/server/detectors/native.ts +153 -0
- package/marketplace/plugins/command-runner/src/server/detectors/python.ts +124 -0
- package/marketplace/plugins/command-runner/src/server/detectors/table.ts +62 -0
- package/marketplace/plugins/command-runner/src/server/detectors/types.ts +147 -0
- package/marketplace/plugins/command-runner/src/server/discovery.test.ts +344 -0
- package/marketplace/plugins/command-runner/src/server/kill.ts +23 -0
- package/marketplace/plugins/command-runner/src/server/package-manager.ts +80 -0
- package/marketplace/plugins/command-runner/src/server/resolve.test.ts +215 -0
- package/marketplace/plugins/command-runner/src/server/resolve.ts +165 -0
- package/marketplace/plugins/command-runner/src/server/ring.ts +74 -0
- package/marketplace/plugins/command-runner/src/server/run-store.ts +226 -0
- package/marketplace/plugins/command-runner/src/server/run-types.ts +57 -0
- package/marketplace/plugins/command-runner/src/server/runner.test.ts +335 -0
- package/marketplace/plugins/command-runner/src/server/runner.ts +179 -0
- package/marketplace/plugins/command-runner/src/server/scan.ts +300 -0
- package/marketplace/plugins/command-runner/src/server/sweeps.test.ts +137 -0
- package/marketplace/plugins/command-runner/src/server.ts +325 -0
- package/marketplace/plugins/command-runner/src/watch.test.ts +235 -0
- package/marketplace/plugins/command-runner/src/watch.ts +97 -0
- package/marketplace/plugins/command-runner/tsconfig.json +16 -0
- package/marketplace/plugins/session-info/README.md +23 -0
- package/marketplace/plugins/session-info/icon.svg +14 -0
- package/marketplace/plugins/session-info/package.json +41 -0
- package/marketplace/plugins/session-info/src/app.test.tsx +172 -0
- package/marketplace/plugins/session-info/src/app.tsx +174 -0
- package/marketplace/plugins/session-info/src/server.ts +118 -0
- package/marketplace/plugins/session-info/src/styles.css +48 -0
- package/marketplace/plugins/session-info/tsconfig.json +22 -0
- package/marketplace/plugins/stats/README.md +99 -0
- package/marketplace/plugins/stats/icon.svg +16 -0
- package/marketplace/plugins/stats/package.json +46 -0
- package/marketplace/plugins/stats/src/ProcessTable.tsx +237 -0
- package/marketplace/plugins/stats/src/RefreshButton.tsx +56 -0
- package/marketplace/plugins/stats/src/Sparkline.tsx +80 -0
- package/marketplace/plugins/stats/src/TotalsBar.test.tsx +139 -0
- package/marketplace/plugins/stats/src/TotalsBar.tsx +96 -0
- package/marketplace/plugins/stats/src/app.test.tsx +228 -0
- package/marketplace/plugins/stats/src/app.tsx +183 -0
- package/marketplace/plugins/stats/src/daemons.ts +157 -0
- package/marketplace/plugins/stats/src/format.test.ts +125 -0
- package/marketplace/plugins/stats/src/format.ts +53 -0
- package/marketplace/plugins/stats/src/groups.test.ts +153 -0
- package/marketplace/plugins/stats/src/groups.ts +204 -0
- package/marketplace/plugins/stats/src/labels.test.ts +188 -0
- package/marketplace/plugins/stats/src/labels.ts +219 -0
- package/marketplace/plugins/stats/src/proc/darwin.ts +268 -0
- package/marketplace/plugins/stats/src/proc/identity.ts +179 -0
- package/marketplace/plugins/stats/src/proc/index.ts +45 -0
- package/marketplace/plugins/stats/src/proc/linux.ts +186 -0
- package/marketplace/plugins/stats/src/proc/ps.ts +121 -0
- package/marketplace/plugins/stats/src/proc/types.ts +78 -0
- package/marketplace/plugins/stats/src/sampler.test.ts +200 -0
- package/marketplace/plugins/stats/src/sampler.ts +281 -0
- package/marketplace/plugins/stats/src/server.ts +252 -0
- package/marketplace/plugins/stats/src/sessions.test.ts +112 -0
- package/marketplace/plugins/stats/src/sessions.ts +189 -0
- package/marketplace/plugins/stats/src/snapshot.ts +121 -0
- package/marketplace/plugins/stats/tsconfig.json +16 -0
- package/package.json +104 -4
- package/public/apple-touch-icon.png +0 -0
- package/public/icon-192x192.png +0 -0
- package/public/icon-512x512.png +0 -0
- package/public/icon-maskable-512x512.png +0 -0
- package/public/icon.svg +12 -0
- package/public/kabmo-wordmark.svg +31 -0
- package/public/manifest.webmanifest +91 -0
- package/public/sw.js +76 -0
- package/src/cli/kabmo.js +5 -0
- package/src/cli/lib/args.js +283 -0
- package/src/cli/lib/args.test.js +76 -0
- package/src/cli/lib/build.js +52 -0
- package/src/cli/lib/commands/logs.js +150 -0
- package/src/cli/lib/commands/plugin.js +285 -0
- package/src/cli/lib/commands/plugin.test.js +125 -0
- package/src/cli/lib/commands/restart.js +94 -0
- package/src/cli/lib/commands/serve.js +278 -0
- package/src/cli/lib/commands/serve.test.js +58 -0
- package/src/cli/lib/commands/status.js +130 -0
- package/src/cli/lib/commands/stop.js +95 -0
- package/src/cli/lib/commands/update.js +147 -0
- package/src/cli/lib/commands/update.test.js +36 -0
- package/src/cli/lib/output.js +143 -0
- package/src/cli/lib/path-utils.js +99 -0
- package/src/cli/lib/path-utils.test.js +184 -0
- package/src/cli/lib/paths.js +40 -0
- package/src/cli/lib/process-lifecycle.js +148 -0
- package/src/cli/lib/process-lifecycle.test.js +156 -0
- package/src/cli/lib/restart-scope.js +93 -0
- package/src/cli/lib/restart-scope.test.js +119 -0
- package/src/cli/lib/runtime.js +279 -0
- package/src/cli/lib/serve-mode.js +20 -0
- package/src/cli/lib/serve-mode.test.js +29 -0
- package/src/cli/lib/stop-instance.js +120 -0
- package/src/cli/lib/stop-instance.test.js +206 -0
- package/src/cli/lib/stop-scope.js +23 -0
- package/src/cli/lib/stop-scope.test.js +41 -0
- package/src/cli/lib/ui-password.js +190 -0
- package/src/cli/main.js +81 -0
- package/src/client/App.tsx +140 -0
- package/src/client/bootstrap.d.ts +33 -0
- package/src/client/components/auth/login-screen/index.test.tsx +93 -0
- package/src/client/components/auth/login-screen/index.tsx +154 -0
- package/src/client/components/auth/login-screen/password-toggle.test.tsx +121 -0
- package/src/client/components/common/ComposerPicker.tsx +141 -0
- package/src/client/components/common/ComposerTextarea.tsx +178 -0
- package/src/client/components/common/CopyButton.tsx +97 -0
- package/src/client/components/common/FolderPicker.tsx +254 -0
- package/src/client/components/common/MarkdownRenderer.tsx +299 -0
- package/src/client/components/common/Modal.tsx +93 -0
- package/src/client/components/common/PWAInstallButton.tsx +113 -0
- package/src/client/components/common/ReloadPageButton.test.tsx +78 -0
- package/src/client/components/common/ReloadPageButton.tsx +30 -0
- package/src/client/components/common/SignOutButton.test.tsx +141 -0
- package/src/client/components/common/SignOutButton.tsx +94 -0
- package/src/client/components/common/StatCard.tsx +52 -0
- package/src/client/components/common/StreamStatusDot.tsx +27 -0
- package/src/client/components/common/SubagentStatusIcon.tsx +27 -0
- package/src/client/components/common/Toast.tsx +79 -0
- package/src/client/components/common/ToastStack.tsx +18 -0
- package/src/client/components/common/UpdateLog.tsx +55 -0
- package/src/client/components/common/ViewportSelector.tsx +206 -0
- package/src/client/components/common/batch-selection/BatchActionBar.test.ts +132 -0
- package/src/client/components/common/batch-selection/BatchActionBar.tsx +118 -0
- package/src/client/components/common/batch-selection/BatchDeleteModal.tsx +177 -0
- package/src/client/components/common/batch-selection/SelectionCheckbox.tsx +58 -0
- package/src/client/components/common/batch-selection/folder-state.test.ts +130 -0
- package/src/client/components/common/batch-selection/folder-state.ts +101 -0
- package/src/client/components/common/batch-selection/types.ts +42 -0
- package/src/client/components/common/brand-wordmark/Mark.tsx +62 -0
- package/src/client/components/common/brand-wordmark/index.test.tsx +115 -0
- package/src/client/components/common/brand-wordmark/index.tsx +57 -0
- package/src/client/components/common/brand-wordmark/wordmark-svg.test.ts +88 -0
- package/src/client/components/common/code-editor/handler.test.ts +274 -0
- package/src/client/components/common/code-editor/handler.ts +175 -0
- package/src/client/components/common/code-editor/index.tsx +314 -0
- package/src/client/components/common/code-surface/index.tsx +348 -0
- package/src/client/components/common/code-surface/measure.ts +148 -0
- package/src/client/components/common/context-usage-button/Ring.tsx +73 -0
- package/src/client/components/common/context-usage-button/index.test.tsx +197 -0
- package/src/client/components/common/context-usage-button/index.tsx +159 -0
- package/src/client/components/common/diagram-viewer/index.tsx +258 -0
- package/src/client/components/common/diagram-viewer/read-block.ts +53 -0
- package/src/client/components/common/file-icon/brand-paths.ts +62 -0
- package/src/client/components/common/file-icon/index.tsx +166 -0
- package/src/client/components/common/header-controls/index.test.tsx +240 -0
- package/src/client/components/common/header-controls/index.tsx +118 -0
- package/src/client/components/common/header-panel-buttons/index.tsx +176 -0
- package/src/client/components/common/image-viewer/index.tsx +224 -0
- package/src/client/components/common/outline-kind-icon/index.tsx +86 -0
- package/src/client/components/common/provider-icon/glyphs.test.ts +94 -0
- package/src/client/components/common/provider-icon/glyphs.ts +118 -0
- package/src/client/components/common/provider-icon/index.plugin.test.ts +133 -0
- package/src/client/components/common/provider-icon/index.test.ts +107 -0
- package/src/client/components/common/provider-icon/index.tsx +104 -0
- package/src/client/components/common/provider-icon/resolve.test.ts +112 -0
- package/src/client/components/common/provider-icon/resolve.ts +94 -0
- package/src/client/components/common/session-actions-menu/index.tsx +220 -0
- package/src/client/components/common/session-delete-modal/index.tsx +128 -0
- package/src/client/components/common/session-state-provider/index.test.ts +142 -0
- package/src/client/components/common/session-state-provider/index.tsx +60 -0
- package/src/client/components/common/sort-menu/index.tsx +63 -0
- package/src/client/components/common/sort-menu/options.ts +24 -0
- package/src/client/components/common/subagent-list/index.tsx +165 -0
- package/src/client/components/common/todo-row/index.test.ts +91 -0
- package/src/client/components/common/todo-row/index.tsx +92 -0
- package/src/client/components/common/viewport.ts +23 -0
- package/src/client/components/common/workspace-options-menu/index.tsx +113 -0
- package/src/client/components/layout/PanelVisibilityMenu.tsx +114 -0
- package/src/client/components/layout/RightActivityBar.test.ts +272 -0
- package/src/client/components/layout/RightActivityBar.tsx +220 -0
- package/src/client/components/layout/desktop-layout/ResizeHandle.tsx +10 -0
- package/src/client/components/layout/desktop-layout/TopNavbar.tsx +167 -0
- package/src/client/components/layout/desktop-layout/WorkspacePanels.tsx +326 -0
- package/src/client/components/layout/desktop-layout/index.tsx +307 -0
- package/src/client/components/layout/desktop-layout/resizer/index.tsx +312 -0
- package/src/client/components/layout/desktop-layout/resizer/panel.test.ts +145 -0
- package/src/client/components/layout/desktop-layout/resizer/separator-drag.ts +140 -0
- package/src/client/components/layout/desktop-layout/resizer/utils.test.ts +33 -0
- package/src/client/components/layout/desktop-layout/resizer/utils.ts +34 -0
- package/src/client/components/layout/session-sidebar/CategoryHeader.tsx +169 -0
- package/src/client/components/layout/session-sidebar/CategoryItem.tsx +297 -0
- package/src/client/components/layout/session-sidebar/Footer.tsx +54 -0
- package/src/client/components/layout/session-sidebar/Header.test.ts +88 -0
- package/src/client/components/layout/session-sidebar/Header.tsx +57 -0
- package/src/client/components/layout/session-sidebar/Modals.tsx +15 -0
- package/src/client/components/layout/session-sidebar/OverflowMenu.test.ts +115 -0
- package/src/client/components/layout/session-sidebar/OverflowMenu.tsx +117 -0
- package/src/client/components/layout/session-sidebar/SessionItem.batch.test.ts +162 -0
- package/src/client/components/layout/session-sidebar/SessionItem.test.ts +106 -0
- package/src/client/components/layout/session-sidebar/SessionItem.tsx +242 -0
- package/src/client/components/layout/session-sidebar/SessionList.tsx +60 -0
- package/src/client/components/layout/session-sidebar/Skeleton.tsx +36 -0
- package/src/client/components/layout/session-sidebar/Toolbar.test.ts +134 -0
- package/src/client/components/layout/session-sidebar/Toolbar.tsx +300 -0
- package/src/client/components/layout/session-sidebar/about-modal/SocialLinks.tsx +59 -0
- package/src/client/components/layout/session-sidebar/about-modal/UpdateSection.tsx +179 -0
- package/src/client/components/layout/session-sidebar/about-modal/index.tsx +83 -0
- package/src/client/components/layout/session-sidebar/index.tsx +283 -0
- package/src/client/components/layout/session-sidebar/new-workspace-modal/CloneField.tsx +83 -0
- package/src/client/components/layout/session-sidebar/new-workspace-modal/DirectoryList.tsx +150 -0
- package/src/client/components/layout/session-sidebar/new-workspace-modal/LocationBar.tsx +101 -0
- package/src/client/components/layout/session-sidebar/new-workspace-modal/index.tsx +304 -0
- package/src/client/components/layout/session-sidebar/new-workspace-modal/use-browse.ts +81 -0
- package/src/client/components/layout/session-sidebar/scheduler-modal/TaskForm.tsx +216 -0
- package/src/client/components/layout/session-sidebar/scheduler-modal/TaskList.tsx +217 -0
- package/src/client/components/layout/session-sidebar/scheduler-modal/folders.ts +52 -0
- package/src/client/components/layout/session-sidebar/scheduler-modal/index.tsx +211 -0
- package/src/client/components/layout/update-popup/Actions.tsx +114 -0
- package/src/client/components/layout/update-popup/ReleaseNotes.tsx +77 -0
- package/src/client/components/layout/update-popup/index.tsx +131 -0
- package/src/client/components/mobile/LayoutWrapper.tsx +269 -0
- package/src/client/components/mobile/MainView.tsx +68 -0
- package/src/client/components/mobile/RightSidebar.tsx +154 -0
- package/src/client/components/mobile/SessionSidebar.tsx +301 -0
- package/src/client/components/mobile/mobile-main-view/Header.tsx +211 -0
- package/src/client/components/mobile/mobile-right-sidebar/FullDiff.tsx +84 -0
- package/src/client/components/mobile/mobile-right-sidebar/FullEditor.tsx +317 -0
- package/src/client/components/mobile/mobile-right-sidebar/Header.tsx +156 -0
- package/src/client/components/mobile/mobile-right-sidebar/OutlineButton.tsx +100 -0
- package/src/client/components/mobile/mobile-right-sidebar/StatusBar.tsx +90 -0
- package/src/client/components/mobile/mobile-session-sidebar/Footer.tsx +69 -0
- package/src/client/components/mobile/mobile-session-sidebar/Header.tsx +34 -0
- package/src/client/components/mobile/mobile-session-sidebar/Item.tsx +334 -0
- package/src/client/components/mobile/mobile-session-sidebar/List.tsx +63 -0
- package/src/client/components/mobile/mobile-session-sidebar/SessionRow.test.ts +122 -0
- package/src/client/components/mobile/mobile-session-sidebar/SessionRow.tsx +202 -0
- package/src/client/components/mobile/mobile-session-sidebar/Skeleton.tsx +36 -0
- package/src/client/components/mobile/mobile-session-sidebar/Toolbar.test.ts +135 -0
- package/src/client/components/mobile/mobile-session-sidebar/Toolbar.tsx +248 -0
- package/src/client/components/mobile/open-file-payload.test.ts +71 -0
- package/src/client/components/mobile/open-file-payload.ts +60 -0
- package/src/client/components/settings/LazyModal.tsx +46 -0
- package/src/client/components/settings/LoadingState.tsx +22 -0
- package/src/client/components/settings/Modal.tsx +342 -0
- package/src/client/components/settings/ProjectSelectorDropdown.tsx +148 -0
- package/src/client/components/settings/SettingsSidebarList.tsx +126 -0
- package/src/client/components/settings/Sidebar.test.tsx +118 -0
- package/src/client/components/settings/Sidebar.tsx +172 -0
- package/src/client/components/settings/categories/AgentSettings.tsx +101 -0
- package/src/client/components/settings/categories/AppearanceSettings.tsx +30 -0
- package/src/client/components/settings/categories/BehaviorSettings.tsx +73 -0
- package/src/client/components/settings/categories/ChatSettings.tsx +30 -0
- package/src/client/components/settings/categories/CommandSettings.tsx +136 -0
- package/src/client/components/settings/categories/McpSettings.tsx +159 -0
- package/src/client/components/settings/categories/NotificationSettings.tsx +97 -0
- package/src/client/components/settings/categories/OmpSettings.tsx +321 -0
- package/src/client/components/settings/categories/OtherSettings.tsx +16 -0
- package/src/client/components/settings/categories/PanelPluginSettings.tsx +25 -0
- package/src/client/components/settings/categories/PluginSettings.tsx +162 -0
- package/src/client/components/settings/categories/ProjectSettings.tsx +195 -0
- package/src/client/components/settings/categories/ProviderSettings.tsx +225 -0
- package/src/client/components/settings/categories/SkillCatalogSettings.tsx +289 -0
- package/src/client/components/settings/categories/SkillSettings.tsx +130 -0
- package/src/client/components/settings/categories/TokenUsageSettings.tsx +264 -0
- package/src/client/components/settings/categories/UsageSettings.tsx +109 -0
- package/src/client/components/settings/categories/agent-settings/DetailPane.tsx +333 -0
- package/src/client/components/settings/categories/agent-settings/SidebarList.tsx +42 -0
- package/src/client/components/settings/categories/appearance-settings/EditorFontSection.tsx +78 -0
- package/src/client/components/settings/categories/appearance-settings/ThemeCard.tsx +61 -0
- package/src/client/components/settings/categories/appearance-settings/ThemeGrid.tsx +80 -0
- package/src/client/components/settings/categories/behavior-settings/Editor.tsx +244 -0
- package/src/client/components/settings/categories/chat-settings/FollowUpSection.tsx +120 -0
- package/src/client/components/settings/categories/chat-settings/GoalSection.tsx +195 -0
- package/src/client/components/settings/categories/chat-settings/KeybindingsSection.tsx +107 -0
- package/src/client/components/settings/categories/chat-settings/TitleSection.tsx +99 -0
- package/src/client/components/settings/categories/command-settings/DetailPane.tsx +298 -0
- package/src/client/components/settings/categories/command-settings/SidebarList.tsx +44 -0
- package/src/client/components/settings/categories/mcp-settings/ConnectionTest.tsx +89 -0
- package/src/client/components/settings/categories/mcp-settings/DetailPane.tsx +311 -0
- package/src/client/components/settings/categories/mcp-settings/ImportModal.tsx +161 -0
- package/src/client/components/settings/categories/mcp-settings/SidebarList.tsx +120 -0
- package/src/client/components/settings/categories/omp-settings/ConfigTabs.tsx +254 -0
- package/src/client/components/settings/categories/omp-settings/ExtensionsPanel.tsx +61 -0
- package/src/client/components/settings/categories/omp-settings/RoleEditor.test.ts +94 -0
- package/src/client/components/settings/categories/omp-settings/RoleEditor.tsx +148 -0
- package/src/client/components/settings/categories/omp-settings/RowEditor.tsx +337 -0
- package/src/client/components/settings/categories/panel-plugins/AvailableList.tsx +108 -0
- package/src/client/components/settings/categories/panel-plugins/BuiltinList.tsx +95 -0
- package/src/client/components/settings/categories/panel-plugins/GitFreshness.test.tsx +232 -0
- package/src/client/components/settings/categories/panel-plugins/GitFreshness.tsx +81 -0
- package/src/client/components/settings/categories/panel-plugins/InstallForm.tsx +136 -0
- package/src/client/components/settings/categories/panel-plugins/InstalledList.tsx +221 -0
- package/src/client/components/settings/categories/panel-plugins/PluginMark.test.ts +142 -0
- package/src/client/components/settings/categories/panel-plugins/PluginMark.tsx +114 -0
- package/src/client/components/settings/categories/panel-plugins/ReadmeModal.tsx +87 -0
- package/src/client/components/settings/categories/panel-plugins/Section.tsx +184 -0
- package/src/client/components/settings/categories/panel-plugins/SyncBlockedNotice.tsx +82 -0
- package/src/client/components/settings/categories/panel-plugins/Toolbar.tsx +85 -0
- package/src/client/components/settings/categories/plugin-settings/DetailPane.tsx +285 -0
- package/src/client/components/settings/categories/plugin-settings/MarketplacePane.tsx +303 -0
- package/src/client/components/settings/categories/plugin-settings/SettingsSection.tsx +209 -0
- package/src/client/components/settings/categories/plugin-settings/SidebarList.tsx +250 -0
- package/src/client/components/settings/categories/plugin-settings/selection.ts +19 -0
- package/src/client/components/settings/categories/project-settings/AccentPalette.tsx +76 -0
- package/src/client/components/settings/categories/project-settings/DetailsForm.tsx +71 -0
- package/src/client/components/settings/categories/project-settings/DetailsHeader.tsx +38 -0
- package/src/client/components/settings/categories/project-settings/IconGrid.tsx +152 -0
- package/src/client/components/settings/categories/project-settings/ModelDropdown.tsx +95 -0
- package/src/client/components/settings/categories/project-settings/NameInput.tsx +26 -0
- package/src/client/components/settings/categories/project-settings/SidebarList.tsx +100 -0
- package/src/client/components/settings/categories/provider-settings/AddModelModal.tsx +322 -0
- package/src/client/components/settings/categories/provider-settings/AddProviderModal.tsx +334 -0
- package/src/client/components/settings/categories/provider-settings/AuthSection.tsx +195 -0
- package/src/client/components/settings/categories/provider-settings/DeleteProviderModal.tsx +133 -0
- package/src/client/components/settings/categories/provider-settings/DialectFields.tsx +136 -0
- package/src/client/components/settings/categories/provider-settings/EffortLadder.tsx +89 -0
- package/src/client/components/settings/categories/provider-settings/Header.tsx +22 -0
- package/src/client/components/settings/categories/provider-settings/LoginModal.tsx +224 -0
- package/src/client/components/settings/categories/provider-settings/LogoutProviderModal.tsx +184 -0
- package/src/client/components/settings/categories/provider-settings/ModelCapabilitiesModal.tsx +114 -0
- package/src/client/components/settings/categories/provider-settings/ModelConfigModal.tsx +155 -0
- package/src/client/components/settings/categories/provider-settings/ModelsList.tsx +221 -0
- package/src/client/components/settings/categories/provider-settings/PresetPicker.tsx +82 -0
- package/src/client/components/settings/categories/provider-settings/PriceFields.tsx +107 -0
- package/src/client/components/settings/categories/provider-settings/ReconnectModal.tsx +184 -0
- package/src/client/components/settings/categories/provider-settings/SidebarList.plugin.test.ts +93 -0
- package/src/client/components/settings/categories/provider-settings/SidebarList.tsx +133 -0
- package/src/client/components/settings/categories/skill-catalog/AddSourceModal.tsx +133 -0
- package/src/client/components/settings/categories/skill-settings/DetailPane.tsx +309 -0
- package/src/client/components/settings/categories/skill-settings/SidebarList.tsx +170 -0
- package/src/client/components/settings/categories/token-usage-settings/Breakdown.tsx +127 -0
- package/src/client/components/settings/categories/token-usage-settings/Chart.tsx +74 -0
- package/src/client/components/settings/categories/token-usage-settings/MetricsGrid.tsx +44 -0
- package/src/client/components/settings/categories/usage-settings/DeepSeekCard.tsx +66 -0
- package/src/client/components/settings/categories/usage-settings/KenariCard.tsx +68 -0
- package/src/client/components/settings/categories/usage-settings/LimitsSection.tsx +115 -0
- package/src/client/components/settings/categories/usage-settings/ProviderCard.tsx +45 -0
- package/src/client/components/settings/categories/usage-settings/ProviderDetail.tsx +46 -0
- package/src/client/components/settings/categories/usage-settings/QuotaSection.tsx +93 -0
- package/src/client/components/settings/categories/usage-settings/SavedResetsSection.tsx +158 -0
- package/src/client/components/settings/categories/usage-settings/SidebarList.tsx +89 -0
- package/src/client/components/settings/categories/usage-settings/UsageTable.tsx +66 -0
- package/src/client/components/settings/categories/usage-settings/format.ts +99 -0
- package/src/client/components/settings/categories/usage-settings/providers.ts +69 -0
- package/src/client/components/settings/categories/usage-settings/usage-and-picker.test.ts +330 -0
- package/src/client/components/settings/master-detail/index.tsx +68 -0
- package/src/client/components/workspace/browser-panel/ActivityToasts.tsx +46 -0
- package/src/client/components/workspace/browser-panel/AddressBar.tsx +75 -0
- package/src/client/components/workspace/browser-panel/Screencast.tsx +108 -0
- package/src/client/components/workspace/browser-panel/index.tsx +69 -0
- package/src/client/components/workspace/browser-toolbar/ZoomControls.tsx +48 -0
- package/src/client/components/workspace/browser-toolbar/index.tsx +150 -0
- package/src/client/components/workspace/btw-panel/AskCard.tsx +165 -0
- package/src/client/components/workspace/btw-panel/Messages.tsx +154 -0
- package/src/client/components/workspace/btw-panel/TopicMenu.tsx +106 -0
- package/src/client/components/workspace/btw-panel/index.tsx +163 -0
- package/src/client/components/workspace/chat-timeline/AiMessageFooter.plugin.test.ts +105 -0
- package/src/client/components/workspace/chat-timeline/AiMessageFooter.tsx +277 -0
- package/src/client/components/workspace/chat-timeline/AttachmentChips.tsx +119 -0
- package/src/client/components/workspace/chat-timeline/ChatOverlays.tsx +108 -0
- package/src/client/components/workspace/chat-timeline/ComposerDock.tsx +167 -0
- package/src/client/components/workspace/chat-timeline/EmptyWorkspacePrompt.tsx +261 -0
- package/src/client/components/workspace/chat-timeline/GeneratingIndicator.test.ts +156 -0
- package/src/client/components/workspace/chat-timeline/GeneratingIndicator.tsx +156 -0
- package/src/client/components/workspace/chat-timeline/GoalNotice.tsx +63 -0
- package/src/client/components/workspace/chat-timeline/MessageItem.tsx +289 -0
- package/src/client/components/workspace/chat-timeline/MessageList.test.ts +76 -0
- package/src/client/components/workspace/chat-timeline/MessageList.tsx +117 -0
- package/src/client/components/workspace/chat-timeline/MinimapShortcuts.test.ts +119 -0
- package/src/client/components/workspace/chat-timeline/MinimapShortcuts.tsx +96 -0
- package/src/client/components/workspace/chat-timeline/MobileTurnJump.tsx +104 -0
- package/src/client/components/workspace/chat-timeline/NewChatModal.tsx +124 -0
- package/src/client/components/workspace/chat-timeline/PluginMessageActions.test.ts +102 -0
- package/src/client/components/workspace/chat-timeline/PluginMessageActions.tsx +51 -0
- package/src/client/components/workspace/chat-timeline/QueueList.test.ts +82 -0
- package/src/client/components/workspace/chat-timeline/QueueList.tsx +86 -0
- package/src/client/components/workspace/chat-timeline/RunFooter.tsx +82 -0
- package/src/client/components/workspace/chat-timeline/SessionSkeleton.tsx +89 -0
- package/src/client/components/workspace/chat-timeline/SubagentControls.tsx +93 -0
- package/src/client/components/workspace/chat-timeline/SubagentView.tsx +181 -0
- package/src/client/components/workspace/chat-timeline/SystemNotice.test.ts +175 -0
- package/src/client/components/workspace/chat-timeline/SystemNotice.tsx +296 -0
- package/src/client/components/workspace/chat-timeline/TaskResultContent.tsx +176 -0
- package/src/client/components/workspace/chat-timeline/ThinkingSection.tsx +130 -0
- package/src/client/components/workspace/chat-timeline/TimelineBody.tsx +135 -0
- package/src/client/components/workspace/chat-timeline/ToolCallCard.plugin.test.ts +111 -0
- package/src/client/components/workspace/chat-timeline/ToolCallCard.tsx +194 -0
- package/src/client/components/workspace/chat-timeline/ToolCallingSection.test.ts +161 -0
- package/src/client/components/workspace/chat-timeline/ToolCallingSection.tsx +101 -0
- package/src/client/components/workspace/chat-timeline/UndoConfirmModal.tsx +90 -0
- package/src/client/components/workspace/chat-timeline/chat-input/AccessDropdown.tsx +53 -0
- package/src/client/components/workspace/chat-timeline/chat-input/AttachmentToolbar.tsx +121 -0
- package/src/client/components/workspace/chat-timeline/chat-input/DropOverlay.tsx +17 -0
- package/src/client/components/workspace/chat-timeline/chat-input/GoalBanner.test.ts +180 -0
- package/src/client/components/workspace/chat-timeline/chat-input/GoalBanner.tsx +236 -0
- package/src/client/components/workspace/chat-timeline/chat-input/GoalModal.tsx +320 -0
- package/src/client/components/workspace/chat-timeline/chat-input/GoalSurfaces.tsx +67 -0
- package/src/client/components/workspace/chat-timeline/chat-input/ModeToggles.test.ts +99 -0
- package/src/client/components/workspace/chat-timeline/chat-input/ModeToggles.tsx +102 -0
- package/src/client/components/workspace/chat-timeline/chat-input/PluginComposerSlots.test.ts +110 -0
- package/src/client/components/workspace/chat-timeline/chat-input/PluginComposerSlots.tsx +61 -0
- package/src/client/components/workspace/chat-timeline/chat-input/ThinkingLevelDropdown.tsx +49 -0
- package/src/client/components/workspace/chat-timeline/chat-input/Toolbar.test.ts +155 -0
- package/src/client/components/workspace/chat-timeline/chat-input/Toolbar.tsx +216 -0
- package/src/client/components/workspace/chat-timeline/chat-input/VoiceNotice.tsx +39 -0
- package/src/client/components/workspace/chat-timeline/chat-input/access-levels.ts +14 -0
- package/src/client/components/workspace/chat-timeline/chat-input/expansion.test.ts +86 -0
- package/src/client/components/workspace/chat-timeline/chat-input/expansion.ts +143 -0
- package/src/client/components/workspace/chat-timeline/chat-input/index.tsx +283 -0
- package/src/client/components/workspace/chat-timeline/chat-input/modes-props.ts +49 -0
- package/src/client/components/workspace/chat-timeline/chat-input/props.ts +100 -0
- package/src/client/components/workspace/chat-timeline/chat-input/selection.ts +57 -0
- package/src/client/components/workspace/chat-timeline/index.tsx +335 -0
- package/src/client/components/workspace/chat-timeline/plan-review/index.tsx +159 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/FrameControl.tsx +151 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/GroupedAsk.tsx +232 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/OptionRow.tsx +85 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/PluginPendingInteractions.test.ts +288 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/PluginPendingInteractions.tsx +186 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/QuestionBlock.tsx +162 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/QuestionCard.tsx +100 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/drafts.ts +113 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/index.test.ts +139 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/index.tsx +193 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/extension-dialog/Footer.tsx +97 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/extension-dialog/Header.tsx +52 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/extension-dialog/Lazy.tsx +24 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/extension-dialog/SelectBody.tsx +110 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/extension-dialog/index.tsx +338 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/hashline-patch/index.tsx +93 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/index.tsx +172 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/AstEdit.tsx +203 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Bash.tsx +279 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Checkpoint.tsx +49 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/ContextNotes.tsx +66 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Debug.tsx +91 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Edit.test.ts +177 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Edit.tsx +286 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Eval.tsx +184 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Github.tsx +91 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Goal.tsx +254 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/GoalRecord.tsx +122 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Lsp.tsx +276 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/ManageSkill.tsx +93 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Mcp.tsx +143 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Memory.tsx +93 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Proc.test.ts +241 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Proc.tsx +309 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Read.test.ts +229 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Read.tsx +342 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Resolve.tsx +96 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/SearchFs.tsx +132 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/SearchTool.tsx +318 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/SecurityScan.tsx +102 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/TaskResult.tsx +240 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Think.tsx +52 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Todo.test.ts +119 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Todo.tsx +110 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Wait.test.ts +276 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Wait.tsx +328 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/WebSearch.tsx +118 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/plugin-renderers.test.ts +73 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/plugin-renderers.ts +40 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/registry.test.ts +215 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/registry.ts +167 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ArtifactBody.test.ts +103 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ArtifactBody.tsx +132 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ArtifactChip.tsx +174 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/DiffView.test.ts +99 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/DiffView.tsx +162 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/EnvelopeHeader.tsx +59 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ExcerptCode.tsx +107 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/FallbackOutput.tsx +57 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/JsonCodeBlock.tsx +79 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/OutputWindow.tsx +62 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ToolCardShell.test.ts +148 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ToolCardShell.tsx +210 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ToolFactChips.tsx +117 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ToolPanelHeader.tsx +63 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/card-header.test.ts +190 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/card-header.ts +160 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/card-helpers.tsx +175 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/read-line-meta.test.ts +102 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/read-line-meta.ts +95 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/tool-input.test.ts +55 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/tool-input.ts +18 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/truncate.test.ts +53 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/truncate.ts +18 -0
- package/src/client/components/workspace/context-panel/CostBreakdownPopover.tsx +74 -0
- package/src/client/components/workspace/context-panel/LastMessageCard.tsx +34 -0
- package/src/client/components/workspace/context-panel/RawJsonViewer.tsx +94 -0
- package/src/client/components/workspace/context-panel/RawMessagesList.tsx +288 -0
- package/src/client/components/workspace/context-panel/StatsGrid.tsx +64 -0
- package/src/client/components/workspace/context-panel/TokenDistributionBar.tsx +62 -0
- package/src/client/components/workspace/context-panel/WindowCard.tsx +35 -0
- package/src/client/components/workspace/context-panel/index.tsx +170 -0
- package/src/client/components/workspace/context-panel/pure-helpers.test.ts +264 -0
- package/src/client/components/workspace/context-panel/raw-messages.ts +54 -0
- package/src/client/components/workspace/diff-panel/ConflictBanner.tsx +85 -0
- package/src/client/components/workspace/diff-panel/SplitView.tsx +209 -0
- package/src/client/components/workspace/diff-panel/Toolbar.tsx +281 -0
- package/src/client/components/workspace/diff-panel/UnifiedView.tsx +150 -0
- package/src/client/components/workspace/diff-panel/index.tsx +341 -0
- package/src/client/components/workspace/editor/Body.tsx +127 -0
- package/src/client/components/workspace/editor/CommandPalette.test.ts +242 -0
- package/src/client/components/workspace/editor/CommandPalette.tsx +138 -0
- package/src/client/components/workspace/editor/EditorDropOverlay.tsx +24 -0
- package/src/client/components/workspace/editor/FileDocument.tsx +150 -0
- package/src/client/components/workspace/editor/FilePane.tsx +228 -0
- package/src/client/components/workspace/editor/FindWidget.test.ts +262 -0
- package/src/client/components/workspace/editor/FindWidget.tsx +219 -0
- package/src/client/components/workspace/editor/SaveDeletedFileModal.tsx +80 -0
- package/src/client/components/workspace/editor/Tabs.test.ts +128 -0
- package/src/client/components/workspace/editor/Tabs.tsx +159 -0
- package/src/client/components/workspace/editor/Toolbar.tsx +239 -0
- package/src/client/components/workspace/editor/index.tsx +339 -0
- package/src/client/components/workspace/editor/plugin-file-view.test.ts +183 -0
- package/src/client/components/workspace/editor/plugin-file-view.tsx +159 -0
- package/src/client/components/workspace/editor/viewers/CsvGrid.tsx +33 -0
- package/src/client/components/workspace/editor/viewers/DataGrid.tsx +102 -0
- package/src/client/components/workspace/editor/viewers/DocxView.tsx +72 -0
- package/src/client/components/workspace/editor/viewers/ImageView.tsx +43 -0
- package/src/client/components/workspace/editor/viewers/PdfView.tsx +56 -0
- package/src/client/components/workspace/editor/viewers/SheetView.tsx +115 -0
- package/src/client/components/workspace/editor/viewers/SvgPreview.tsx +50 -0
- package/src/client/components/workspace/editor/viewers/ViewerError.tsx +32 -0
- package/src/client/components/workspace/editor/viewers/bytes.test.ts +239 -0
- package/src/client/components/workspace/editor/viewers/bytes.ts +114 -0
- package/src/client/components/workspace/editor/viewers/dispatch.tsx +130 -0
- package/src/client/components/workspace/editor/viewers/mammoth-browser.d.ts +36 -0
- package/src/client/components/workspace/editor/viewers/use-byte-document.test.ts +170 -0
- package/src/client/components/workspace/editor/viewers/use-byte-document.ts +73 -0
- package/src/client/components/workspace/editor/viewers/use-byte-url.test.ts +259 -0
- package/src/client/components/workspace/editor/viewers/use-byte-url.ts +118 -0
- package/src/client/components/workspace/editor/viewers/viewers.test.ts +233 -0
- package/src/client/components/workspace/file-explorer/ContextMenu.tsx +142 -0
- package/src/client/components/workspace/file-explorer/Modals.tsx +229 -0
- package/src/client/components/workspace/file-explorer/OutlineSection.test.tsx +218 -0
- package/src/client/components/workspace/file-explorer/OutlineSection.tsx +135 -0
- package/src/client/components/workspace/file-explorer/RootMenu.tsx +81 -0
- package/src/client/components/workspace/file-explorer/TreeItem.tsx +310 -0
- package/src/client/components/workspace/file-explorer/clipboard.test.ts +171 -0
- package/src/client/components/workspace/file-explorer/drag.test.ts +148 -0
- package/src/client/components/workspace/file-explorer/index.test.ts +130 -0
- package/src/client/components/workspace/file-explorer/index.tsx +336 -0
- package/src/client/components/workspace/file-explorer/root-menu.test.ts +79 -0
- package/src/client/components/workspace/git-panel/BranchToolbar.tsx +252 -0
- package/src/client/components/workspace/git-panel/ChangesList.tsx +217 -0
- package/src/client/components/workspace/git-panel/CommitBox.tsx +108 -0
- package/src/client/components/workspace/git-panel/ConflictItem.tsx +128 -0
- package/src/client/components/workspace/git-panel/FileItem.tsx +99 -0
- package/src/client/components/workspace/git-panel/Modals.tsx +97 -0
- package/src/client/components/workspace/git-panel/OperationBar.tsx +95 -0
- package/src/client/components/workspace/git-panel/PanelModals.tsx +110 -0
- package/src/client/components/workspace/git-panel/RepoHeader.tsx +68 -0
- package/src/client/components/workspace/git-panel/StashSection.test.tsx +243 -0
- package/src/client/components/workspace/git-panel/StashSection.tsx +246 -0
- package/src/client/components/workspace/git-panel/TreeItem.tsx +192 -0
- package/src/client/components/workspace/git-panel/TreeView.tsx +36 -0
- package/src/client/components/workspace/git-panel/branch-modal/BranchRow.tsx +164 -0
- package/src/client/components/workspace/git-panel/branch-modal/DeleteDialog.tsx +109 -0
- package/src/client/components/workspace/git-panel/branch-modal/RenameDialog.tsx +154 -0
- package/src/client/components/workspace/git-panel/branch-modal/index.tsx +229 -0
- package/src/client/components/workspace/git-panel/commit-modal/CommitActions.tsx +89 -0
- package/src/client/components/workspace/git-panel/commit-modal/CommitDiffViewer.tsx +285 -0
- package/src/client/components/workspace/git-panel/commit-modal/CommitRow.test.ts +128 -0
- package/src/client/components/workspace/git-panel/commit-modal/CommitRow.tsx +231 -0
- package/src/client/components/workspace/git-panel/commit-modal/GraphCanvas.tsx +167 -0
- package/src/client/components/workspace/git-panel/commit-modal/Header.tsx +144 -0
- package/src/client/components/workspace/git-panel/commit-modal/index.tsx +330 -0
- package/src/client/components/workspace/git-panel/confirm-request.test.ts +72 -0
- package/src/client/components/workspace/git-panel/confirm-request.ts +92 -0
- package/src/client/components/workspace/git-panel/index.test.ts +332 -0
- package/src/client/components/workspace/git-panel/index.tsx +342 -0
- package/src/client/components/workspace/model-dropdown/Footer.tsx +21 -0
- package/src/client/components/workspace/model-dropdown/Header.tsx +50 -0
- package/src/client/components/workspace/model-dropdown/Item.plugin.test.ts +90 -0
- package/src/client/components/workspace/model-dropdown/Item.tsx +127 -0
- package/src/client/components/workspace/model-dropdown/Panel.tsx +146 -0
- package/src/client/components/workspace/model-dropdown/Section.tsx +96 -0
- package/src/client/components/workspace/model-dropdown/Skeleton.tsx +39 -0
- package/src/client/components/workspace/model-dropdown/SpecsTooltip.tsx +91 -0
- package/src/client/components/workspace/model-dropdown/groups.ts +95 -0
- package/src/client/components/workspace/model-dropdown/index.tsx +290 -0
- package/src/client/components/workspace/model-dropdown/use-catalog.ts +135 -0
- package/src/client/components/workspace/panels/builtin.test.ts +79 -0
- package/src/client/components/workspace/panels/builtin.tsx +193 -0
- package/src/client/components/workspace/plan-panel/Nav.tsx +93 -0
- package/src/client/components/workspace/plan-panel/PageView.tsx +91 -0
- package/src/client/components/workspace/plan-panel/index.tsx +188 -0
- package/src/client/components/workspace/plugin-panel/Error.tsx +37 -0
- package/src/client/components/workspace/plugin-panel/RowScope.test.tsx +197 -0
- package/src/client/components/workspace/plugin-panel/resolve.tsx +263 -0
- package/src/client/components/workspace/repo-picker/Modal.test.tsx +260 -0
- package/src/client/components/workspace/repo-picker/Modal.tsx +238 -0
- package/src/client/components/workspace/repo-picker/Row.tsx +223 -0
- package/src/client/components/workspace/repo-picker/index.test.tsx +137 -0
- package/src/client/components/workspace/repo-picker/index.tsx +92 -0
- package/src/client/components/workspace/search-panel/Body.tsx +274 -0
- package/src/client/components/workspace/search-panel/Results.tsx +188 -0
- package/src/client/components/workspace/search-panel/Row.tsx +86 -0
- package/src/client/components/workspace/search-panel/index.tsx +132 -0
- package/src/client/components/workspace/terminal-panel/Header.test.ts +99 -0
- package/src/client/components/workspace/terminal-panel/Header.tsx +90 -0
- package/src/client/components/workspace/terminal-panel/KeyBar.tsx +194 -0
- package/src/client/components/workspace/terminal-panel/QuickActions.tsx +39 -0
- package/src/client/components/workspace/terminal-panel/RealtimeXtermView.tsx +168 -0
- package/src/client/components/workspace/terminal-panel/index.tsx +231 -0
- package/src/client/components/workspace/terminal-panel/mount.ts +322 -0
- package/src/client/components/workspace/todo-panel/PhaseGroup.tsx +76 -0
- package/src/client/components/workspace/todo-panel/index.tsx +169 -0
- package/src/client/components/workspace/usage-panel/ProviderSelect.tsx +213 -0
- package/src/client/components/workspace/usage-panel/index.tsx +124 -0
- package/src/client/components/workspace/usage-panel/report.test.ts +61 -0
- package/src/client/components/workspace/usage-panel/report.ts +36 -0
- package/src/client/components/workspace/user-browser-panel/AddressBar.tsx +134 -0
- package/src/client/components/workspace/user-browser-panel/Frame.tsx +72 -0
- package/src/client/components/workspace/user-browser-panel/index.tsx +87 -0
- package/src/client/components/workspace/wiki-panel/Nav.tsx +140 -0
- package/src/client/components/workspace/wiki-panel/PageView.tsx +126 -0
- package/src/client/components/workspace/wiki-panel/index.tsx +245 -0
- package/src/client/data/agent-data/builtin.ts +31 -0
- package/src/client/data/agent-data/index.ts +10 -0
- package/src/client/data/agent-data/orchestrator.ts +113 -0
- package/src/client/data/agent-data/specialist.ts +245 -0
- package/src/client/data/context-data/index.test.ts +120 -0
- package/src/client/data/context-data/index.ts +312 -0
- package/src/client/data/context-data/presets.ts +128 -0
- package/src/client/data/mock/chat.ts +236 -0
- package/src/client/data/mock/git-commits.ts +309 -0
- package/src/client/data/mock/subagents.ts +212 -0
- package/src/client/data/mock/token-usage.ts +129 -0
- package/src/client/data/models/catalog.ts +301 -0
- package/src/client/data/samples/dialogue-session.ts +285 -0
- package/src/client/data/samples/sample-subagents/scout-raw.ts +341 -0
- package/src/client/data/samples/sample-subagents/sleeper-raw.ts +294 -0
- package/src/client/data/samples/sample-tools/built-in-part1.ts +303 -0
- package/src/client/data/samples/sample-tools/built-in-part2.ts +200 -0
- package/src/client/data/samples/sample-tools/other.ts +162 -0
- package/src/client/data/samples/subagent-session.ts +99 -0
- package/src/client/data/samples/tools-session.ts +85 -0
- package/src/client/data/samples/virtual-devices-internal-url.ts +141 -0
- package/src/client/data/samples/virtual-devices-session.ts +336 -0
- package/src/client/data/settings/behavior.ts +12 -0
- package/src/client/data/settings/command.ts +148 -0
- package/src/client/data/settings/mcp.ts +28 -0
- package/src/client/data/settings/omp-schema.json +8380 -0
- package/src/client/data/settings/plugin.ts +127 -0
- package/src/client/data/settings/project.ts +58 -0
- package/src/client/data/settings/provider.ts +317 -0
- package/src/client/data/settings/skill.ts +340 -0
- package/src/client/data/theme/terminal.ts +163 -0
- package/src/client/hooks/browser/use-screencast.ts +178 -0
- package/src/client/hooks/browser/use-user-browser.ts +105 -0
- package/src/client/hooks/chat/btw/index.ts +238 -0
- package/src/client/hooks/chat/btw/intercept.test.ts +99 -0
- package/src/client/hooks/chat/btw/intercept.ts +46 -0
- package/src/client/hooks/chat/btw/mode.ts +209 -0
- package/src/client/hooks/chat/composer/attachments.test.ts +211 -0
- package/src/client/hooks/chat/composer/attachments.ts +198 -0
- package/src/client/hooks/chat/composer/auto-grow.test.ts +142 -0
- package/src/client/hooks/chat/composer/auto-grow.ts +51 -0
- package/src/client/hooks/chat/composer/browser-context.ts +40 -0
- package/src/client/hooks/chat/composer/drop-entries.test.ts +234 -0
- package/src/client/hooks/chat/composer/drop-entries.ts +204 -0
- package/src/client/hooks/chat/composer/drop-payload.test.ts +97 -0
- package/src/client/hooks/chat/composer/drop-payload.ts +130 -0
- package/src/client/hooks/chat/composer/drop-references.ts +106 -0
- package/src/client/hooks/chat/composer/file-drop.test.ts +194 -0
- package/src/client/hooks/chat/composer/file-drop.ts +226 -0
- package/src/client/hooks/chat/composer/file-reads.test.ts +211 -0
- package/src/client/hooks/chat/composer/file-reads.ts +238 -0
- package/src/client/hooks/chat/composer/index.ts +213 -0
- package/src/client/hooks/chat/composer/items.test.ts +327 -0
- package/src/client/hooks/chat/composer/items.ts +100 -0
- package/src/client/hooks/chat/composer/model-selection.ts +197 -0
- package/src/client/hooks/chat/composer/pipeline.test.ts +260 -0
- package/src/client/hooks/chat/composer/pipeline.ts +183 -0
- package/src/client/hooks/chat/composer/publish-state.ts +80 -0
- package/src/client/hooks/chat/composer/speech-to-text.ts +214 -0
- package/src/client/hooks/chat/composer/use-draft.ts +33 -0
- package/src/client/hooks/chat/composer/voice-input.ts +71 -0
- package/src/client/hooks/chat/context/telemetry.ts +66 -0
- package/src/client/hooks/chat/omp/index-probe.test.ts +164 -0
- package/src/client/hooks/chat/omp/index.ts +276 -0
- package/src/client/hooks/chat/omp/owner-redirect.test.ts +74 -0
- package/src/client/hooks/chat/omp/owner-redirect.ts +44 -0
- package/src/client/hooks/chat/omp/pending-rows.ts +103 -0
- package/src/client/hooks/chat/omp/pending-sessions.test.ts +314 -0
- package/src/client/hooks/chat/omp/pending-sessions.ts +296 -0
- package/src/client/hooks/chat/omp/prompt-send.test.ts +280 -0
- package/src/client/hooks/chat/omp/prompt-send.ts +187 -0
- package/src/client/hooks/chat/omp/run-switch.test.ts +69 -0
- package/src/client/hooks/chat/omp/run-switch.ts +52 -0
- package/src/client/hooks/chat/omp/session-list.test.ts +283 -0
- package/src/client/hooks/chat/omp/session-list.tsx +289 -0
- package/src/client/hooks/chat/omp/session-sidebar-controller.test.ts +234 -0
- package/src/client/hooks/chat/omp/session-sidebar-controller.ts +285 -0
- package/src/client/hooks/chat/omp/session-statuses.test.ts +277 -0
- package/src/client/hooks/chat/omp/session-statuses.ts +129 -0
- package/src/client/hooks/chat/omp/sidebar-overlay.ts +73 -0
- package/src/client/hooks/chat/omp/status.ts +12 -0
- package/src/client/hooks/chat/omp/stream-rpc.test.ts +188 -0
- package/src/client/hooks/chat/omp/stream.test.ts +223 -0
- package/src/client/hooks/chat/omp/stream.ts +149 -0
- package/src/client/hooks/chat/stream.ts +228 -0
- package/src/client/hooks/chat/subagent/index.ts +309 -0
- package/src/client/hooks/chat/timeline/access-mode.ts +41 -0
- package/src/client/hooks/chat/timeline/actions.test.ts +310 -0
- package/src/client/hooks/chat/timeline/actions.ts +335 -0
- package/src/client/hooks/chat/timeline/ask-frames-grouped.test.ts +76 -0
- package/src/client/hooks/chat/timeline/ask-frames.test.ts +151 -0
- package/src/client/hooks/chat/timeline/ask-frames.ts +172 -0
- package/src/client/hooks/chat/timeline/auto-scroll.ts +67 -0
- package/src/client/hooks/chat/timeline/composer-local-actions.test.ts +349 -0
- package/src/client/hooks/chat/timeline/composer-modes.ts +32 -0
- package/src/client/hooks/chat/timeline/deferred-model.test.ts +224 -0
- package/src/client/hooks/chat/timeline/deferred-model.ts +92 -0
- package/src/client/hooks/chat/timeline/extension-dialog.ts +59 -0
- package/src/client/hooks/chat/timeline/generating.test.ts +103 -0
- package/src/client/hooks/chat/timeline/generating.ts +106 -0
- package/src/client/hooks/chat/timeline/goal-command.ts +76 -0
- package/src/client/hooks/chat/timeline/index.ts +349 -0
- package/src/client/hooks/chat/timeline/mode-marker-spellings.test.ts +57 -0
- package/src/client/hooks/chat/timeline/mode-markers.ts +103 -0
- package/src/client/hooks/chat/timeline/modes.test.ts +311 -0
- package/src/client/hooks/chat/timeline/modes.ts +326 -0
- package/src/client/hooks/chat/timeline/new-chat.test.ts +196 -0
- package/src/client/hooks/chat/timeline/new-chat.ts +80 -0
- package/src/client/hooks/chat/timeline/plan-review.test.ts +47 -0
- package/src/client/hooks/chat/timeline/plan-review.ts +148 -0
- package/src/client/hooks/chat/timeline/plugin-commands.test.ts +116 -0
- package/src/client/hooks/chat/timeline/plugin-commands.ts +76 -0
- package/src/client/hooks/chat/timeline/prompt-text.test.ts +123 -0
- package/src/client/hooks/chat/timeline/prompt-text.ts +40 -0
- package/src/client/hooks/chat/timeline/queue-actions.ts +96 -0
- package/src/client/hooks/chat/timeline/queue-rewind.test.ts +271 -0
- package/src/client/hooks/chat/timeline/queue.ts +235 -0
- package/src/client/hooks/chat/timeline/rail-jump.test.ts +204 -0
- package/src/client/hooks/chat/timeline/rail-jump.ts +86 -0
- package/src/client/hooks/chat/timeline/rewind-actions.test.ts +233 -0
- package/src/client/hooks/chat/timeline/rewind-actions.ts +172 -0
- package/src/client/hooks/chat/timeline/rewind.ts +62 -0
- package/src/client/hooks/chat/timeline/scope.ts +55 -0
- package/src/client/hooks/chat/timeline/scroll.test.ts +320 -0
- package/src/client/hooks/chat/timeline/scroll.ts +226 -0
- package/src/client/hooks/chat/timeline/send-execute.test.ts +333 -0
- package/src/client/hooks/chat/timeline/send-helpers.ts +109 -0
- package/src/client/hooks/chat/timeline/send-steer.test.ts +231 -0
- package/src/client/hooks/chat/timeline/send.test.ts +231 -0
- package/src/client/hooks/chat/timeline/send.ts +310 -0
- package/src/client/hooks/chat/timeline/session-load.test.ts +323 -0
- package/src/client/hooks/chat/timeline/session-load.ts +317 -0
- package/src/client/hooks/chat/timeline/session-pagination.test.ts +167 -0
- package/src/client/hooks/chat/timeline/session-pagination.ts +317 -0
- package/src/client/hooks/chat/timeline/session-scope.test.ts +248 -0
- package/src/client/hooks/chat/timeline/session-title.ts +36 -0
- package/src/client/hooks/chat/timeline/subagent-view.ts +92 -0
- package/src/client/hooks/chat/timeline/timeline-mode-state.test.ts +306 -0
- package/src/client/hooks/chat/timeline/timeline-rail.test.ts +259 -0
- package/src/client/hooks/chat/timeline/tool-open.test.ts +141 -0
- package/src/client/hooks/chat/timeline/tool-open.ts +87 -0
- package/src/client/hooks/chat/timeline/tui-only-guard.ts +58 -0
- package/src/client/hooks/chat/timeline/undo-confirmation.ts +45 -0
- package/src/client/hooks/chat/timeline/user-turns.ts +182 -0
- package/src/client/hooks/editor/file-actions.ts +49 -0
- package/src/client/hooks/editor/find-harness.test-util.ts +170 -0
- package/src/client/hooks/editor/find-state.ts +68 -0
- package/src/client/hooks/editor/font.test.ts +344 -0
- package/src/client/hooks/editor/font.ts +53 -0
- package/src/client/hooks/editor/resolve-viewer.test.ts +142 -0
- package/src/client/hooks/editor/resolve-viewer.ts +80 -0
- package/src/client/hooks/editor/save-file.ts +88 -0
- package/src/client/hooks/editor/scroll-container.test.ts +102 -0
- package/src/client/hooks/editor/scroll-container.ts +26 -0
- package/src/client/hooks/editor/use-code-window.ts +100 -0
- package/src/client/hooks/editor/use-editor-document.ts +81 -0
- package/src/client/hooks/editor/use-editor-drop.test.ts +245 -0
- package/src/client/hooks/editor/use-editor-drop.ts +275 -0
- package/src/client/hooks/editor/use-editor-find-write.test.ts +170 -0
- package/src/client/hooks/editor/use-editor-find.test.ts +158 -0
- package/src/client/hooks/editor/use-editor-find.ts +307 -0
- package/src/client/hooks/editor/use-editor-history.test.ts +216 -0
- package/src/client/hooks/editor/use-editor-history.ts +134 -0
- package/src/client/hooks/editor/use-editor-outline-bridge.ts +73 -0
- package/src/client/hooks/editor/use-file-editor-writes.test.ts +118 -0
- package/src/client/hooks/editor/use-file-editor.test.ts +169 -0
- package/src/client/hooks/editor/use-file-editor.ts +331 -0
- package/src/client/hooks/editor/use-file-read.ts +197 -0
- package/src/client/hooks/editor/use-file-transfer.ts +113 -0
- package/src/client/hooks/editor/use-file-writes.ts +228 -0
- package/src/client/hooks/editor/use-line-jump.test.ts +204 -0
- package/src/client/hooks/editor/use-line-jump.ts +112 -0
- package/src/client/hooks/editor/use-line-reveal.ts +71 -0
- package/src/client/hooks/editor/use-occurrences.test.ts +236 -0
- package/src/client/hooks/editor/use-occurrences.ts +98 -0
- package/src/client/hooks/editor/use-outline-view.ts +47 -0
- package/src/client/hooks/editor/use-scroll-restore.test.ts +238 -0
- package/src/client/hooks/editor/use-scroll-restore.ts +209 -0
- package/src/client/hooks/editor/use-search-reveal.ts +74 -0
- package/src/client/hooks/models/use-model-names.ts +17 -0
- package/src/client/hooks/models/use-models-catalog.ts +45 -0
- package/src/client/hooks/models/use-provider-names.ts +18 -0
- package/src/client/hooks/settings/crud-list.test.ts +272 -0
- package/src/client/hooks/settings/crud-list.ts +187 -0
- package/src/client/hooks/settings/instruction-file.ts +91 -0
- package/src/client/hooks/settings/master-detail.ts +33 -0
- package/src/client/hooks/settings/plugins.ts +121 -0
- package/src/client/hooks/settings/providers/actions.ts +341 -0
- package/src/client/hooks/settings/providers/api.ts +69 -0
- package/src/client/hooks/settings/providers/index.ts +154 -0
- package/src/client/hooks/settings/providers/logout.ts +85 -0
- package/src/client/hooks/settings/providers/messages.ts +112 -0
- package/src/client/hooks/settings/reload-engine.ts +74 -0
- package/src/client/hooks/settings/restart-kabmo.test.ts +187 -0
- package/src/client/hooks/settings/restart-kabmo.ts +115 -0
- package/src/client/hooks/settings/settings-siblings.test.ts +168 -0
- package/src/client/hooks/settings/skill-catalog.ts +37 -0
- package/src/client/hooks/settings/use-kabmo-setting.ts +15 -0
- package/src/client/hooks/settings/useUsageReport.ts +45 -0
- package/src/client/hooks/settings/useUsageResets.ts +64 -0
- package/src/client/hooks/settings/workspace-roots.ts +99 -0
- package/src/client/hooks/ui/auth.test.ts +99 -0
- package/src/client/hooks/ui/auth.ts +274 -0
- package/src/client/hooks/ui/clipboard.ts +50 -0
- package/src/client/hooks/ui/copy-flag.ts +27 -0
- package/src/client/hooks/ui/inline-rename.ts +99 -0
- package/src/client/hooks/ui/input-required-alert.ts +43 -0
- package/src/client/hooks/ui/keyboard-inset.test.ts +46 -0
- package/src/client/hooks/ui/keyboard-inset.ts +120 -0
- package/src/client/hooks/ui/notification-sound.ts +173 -0
- package/src/client/hooks/ui/on-click-outside.ts +22 -0
- package/src/client/hooks/ui/open-file.ts +57 -0
- package/src/client/hooks/ui/output-reveal.ts +30 -0
- package/src/client/hooks/ui/realtime.test.ts +84 -0
- package/src/client/hooks/ui/realtime.ts +128 -0
- package/src/client/hooks/ui/show-more.ts +35 -0
- package/src/client/hooks/ui/syntax-ready.ts +30 -0
- package/src/client/hooks/ui/text-overflow.test.ts +152 -0
- package/src/client/hooks/ui/text-overflow.ts +78 -0
- package/src/client/hooks/ui/theme.ts +121 -0
- package/src/client/hooks/ui/toasts.ts +22 -0
- package/src/client/hooks/ui/touch-device.ts +46 -0
- package/src/client/hooks/ui/ui-alert.test.ts +235 -0
- package/src/client/hooks/ui/ui-environment.test.ts +172 -0
- package/src/client/hooks/ui/ui-feedback.test.ts +303 -0
- package/src/client/hooks/ui/ui-inline-rename.test.ts +305 -0
- package/src/client/hooks/ui/ui-listeners.test.ts +331 -0
- package/src/client/hooks/ui/ui-sounds.test.ts +254 -0
- package/src/client/hooks/ui/ui-syntax-ready.test.ts +73 -0
- package/src/client/hooks/ui/updates/changelog.ts +57 -0
- package/src/client/hooks/ui/updates/index.test.ts +218 -0
- package/src/client/hooks/ui/updates/index.ts +254 -0
- package/src/client/hooks/ui/updates/restart.test.ts +129 -0
- package/src/client/hooks/ui/updates/restart.ts +150 -0
- package/src/client/hooks/ui/window-chrome.ts +63 -0
- package/src/client/hooks/ui/window-event.ts +55 -0
- package/src/client/hooks/workspace/available-width.ts +33 -0
- package/src/client/hooks/workspace/batch-delete-run.ts +95 -0
- package/src/client/hooks/workspace/batch-delete.ts +63 -0
- package/src/client/hooks/workspace/batch-selection.ts +98 -0
- package/src/client/hooks/workspace/commit-box.test.ts +203 -0
- package/src/client/hooks/workspace/commit-box.ts +129 -0
- package/src/client/hooks/workspace/commit-interactions.ts +153 -0
- package/src/client/hooks/workspace/commit-layer.test.ts +348 -0
- package/src/client/hooks/workspace/commit-pagination.ts +101 -0
- package/src/client/hooks/workspace/diff-file.ts +128 -0
- package/src/client/hooks/workspace/directives.ts +55 -0
- package/src/client/hooks/workspace/expanded-sessions.ts +62 -0
- package/src/client/hooks/workspace/file-clipboard.test.ts +247 -0
- package/src/client/hooks/workspace/file-clipboard.ts +192 -0
- package/src/client/hooks/workspace/file-create.ts +111 -0
- package/src/client/hooks/workspace/file-listing.ts +242 -0
- package/src/client/hooks/workspace/file-row-drag.ts +98 -0
- package/src/client/hooks/workspace/file-tabs.ts +233 -0
- package/src/client/hooks/workspace/file-tree-actions-clipboard.test.ts +106 -0
- package/src/client/hooks/workspace/file-tree-actions.test.ts +181 -0
- package/src/client/hooks/workspace/file-tree-actions.ts +246 -0
- package/src/client/hooks/workspace/git-actions.ts +56 -0
- package/src/client/hooks/workspace/git-panel-data.ts +162 -0
- package/src/client/hooks/workspace/git-status.test.ts +150 -0
- package/src/client/hooks/workspace/git-status.ts +48 -0
- package/src/client/hooks/workspace/git-tree.test.ts +73 -0
- package/src/client/hooks/workspace/git-tree.ts +146 -0
- package/src/client/hooks/workspace/list-slots.test.ts +86 -0
- package/src/client/hooks/workspace/list-slots.ts +59 -0
- package/src/client/hooks/workspace/missing-files.test.ts +179 -0
- package/src/client/hooks/workspace/missing-files.ts +132 -0
- package/src/client/hooks/workspace/new-workspace.ts +51 -0
- package/src/client/hooks/workspace/panel-order.ts +87 -0
- package/src/client/hooks/workspace/panel-registry.ts +329 -0
- package/src/client/hooks/workspace/panel-reorder.ts +119 -0
- package/src/client/hooks/workspace/panel-widths.test.ts +261 -0
- package/src/client/hooks/workspace/panel-widths.ts +51 -0
- package/src/client/hooks/workspace/renaming-sessions.ts +61 -0
- package/src/client/hooks/workspace/repo-details.ts +128 -0
- package/src/client/hooks/workspace/repo-scope/index.test.ts +213 -0
- package/src/client/hooks/workspace/repo-scope/index.ts +181 -0
- package/src/client/hooks/workspace/repo-scope/store.test.ts +158 -0
- package/src/client/hooks/workspace/repo-scope/store.ts +164 -0
- package/src/client/hooks/workspace/scheduled-tasks.ts +159 -0
- package/src/client/hooks/workspace/search-stream.test.ts +149 -0
- package/src/client/hooks/workspace/search-stream.ts +133 -0
- package/src/client/hooks/workspace/session-actions.test.ts +170 -0
- package/src/client/hooks/workspace/session-actions.ts +99 -0
- package/src/client/hooks/workspace/session-delete.ts +93 -0
- package/src/client/hooks/workspace/session-state/context.ts +15 -0
- package/src/client/hooks/workspace/session-state/index.ts +83 -0
- package/src/client/hooks/workspace/sidebar-width.ts +43 -0
- package/src/client/hooks/workspace/terminal/index.ts +186 -0
- package/src/client/hooks/workspace/terminal/socket.ts +227 -0
- package/src/client/hooks/workspace/wiki.ts +195 -0
- package/src/client/hooks/workspace/workspace-folder-actions.ts +125 -0
- package/src/client/lib/editor-document.ts +106 -0
- package/src/client/lib/launch/file-handlers.test.ts +255 -0
- package/src/client/lib/launch/file-handlers.ts +203 -0
- package/src/client/lib/launch/types.ts +67 -0
- package/src/client/lib/line-reveal.ts +61 -0
- package/src/client/lib/outline-stores.test.ts +94 -0
- package/src/client/lib/plugins/bootstrap.test.ts +258 -0
- package/src/client/lib/plugins/bootstrap.tsx +158 -0
- package/src/client/lib/plugins/composer-bridge.ts +107 -0
- package/src/client/lib/plugins/content-scripts-root.test.ts +158 -0
- package/src/client/lib/plugins/content-scripts.test.ts +331 -0
- package/src/client/lib/plugins/content-scripts.ts +252 -0
- package/src/client/lib/plugins/context.ts +68 -0
- package/src/client/lib/plugins/directives.test.tsx +239 -0
- package/src/client/lib/plugins/directives.tsx +139 -0
- package/src/client/lib/plugins/kit.test.ts +103 -0
- package/src/client/lib/plugins/kit.ts +160 -0
- package/src/client/lib/plugins/list-slots.test.ts +148 -0
- package/src/client/lib/plugins/list-slots.ts +166 -0
- package/src/client/lib/plugins/loader.ts +66 -0
- package/src/client/lib/plugins/repo-scope-service.test.ts +90 -0
- package/src/client/lib/plugins/repo-scope-service.ts +148 -0
- package/src/client/lib/plugins/runtime.ts +64 -0
- package/src/client/lib/plugins/sidebar-bridge.test.ts +200 -0
- package/src/client/lib/plugins/sidebar-bridge.ts +215 -0
- package/src/client/lib/plugins/slots.test.ts +177 -0
- package/src/client/lib/plugins/slots.ts +230 -0
- package/src/client/lib/plugins/stylesheets.test.ts +157 -0
- package/src/client/lib/plugins/stylesheets.ts +89 -0
- package/src/client/lib/plugins/topic.ts +55 -0
- package/src/client/lib/router/fetcher.ts +100 -0
- package/src/client/lib/router/search-params.ts +86 -0
- package/src/client/lib/scrollbar-activity.test.ts +165 -0
- package/src/client/lib/scrollbar-activity.ts +112 -0
- package/src/client/lib/search-reveal.ts +61 -0
- package/src/client/lib/signals.ts +72 -0
- package/src/client/lib/ui/with-chord.ts +21 -0
- package/src/client/main.tsx +78 -0
- package/src/client/stubs/elkjs.ts +42 -0
- package/src/client/tailwind.css +584 -0
- package/src/server/db.server.test.ts +153 -0
- package/src/server/db.server.ts +144 -0
- package/src/server/index.ts +329 -0
- package/src/server/lib/assets/conditional.server.test.ts +74 -0
- package/src/server/lib/assets/conditional.server.ts +54 -0
- package/src/server/lib/assets/dev-assets.server.test.ts +44 -0
- package/src/server/lib/assets/dev-assets.server.ts +128 -0
- package/src/server/lib/assets/font-css.server.test.ts +87 -0
- package/src/server/lib/assets/font-css.server.ts +113 -0
- package/src/server/lib/assets/font-faces.ts +69 -0
- package/src/server/lib/assets/fonts.server.ts +77 -0
- package/src/server/lib/auth/client-address.ts +55 -0
- package/src/server/lib/auth/config.ts +133 -0
- package/src/server/lib/auth/env-password.test.ts +112 -0
- package/src/server/lib/auth/env-password.ts +79 -0
- package/src/server/lib/auth/guard.test.ts +305 -0
- package/src/server/lib/auth/guard.ts +285 -0
- package/src/server/lib/auth/handover-guard.test.ts +100 -0
- package/src/server/lib/auth/rate-limit.test.ts +135 -0
- package/src/server/lib/auth/rate-limit.ts +143 -0
- package/src/server/lib/auth/token.test.ts +236 -0
- package/src/server/lib/auth/token.ts +220 -0
- package/src/server/lib/browser/runtime.test.ts +110 -0
- package/src/server/lib/browser/runtime.ts +160 -0
- package/src/server/lib/btw/child.server.test.ts +68 -0
- package/src/server/lib/btw/child.server.ts +42 -0
- package/src/server/lib/btw/frames.test.ts +59 -0
- package/src/server/lib/btw/frames.ts +50 -0
- package/src/server/lib/btw/lifecycle.server.test.ts +139 -0
- package/src/server/lib/btw/lifecycle.server.ts +264 -0
- package/src/server/lib/btw/prompt.ts +32 -0
- package/src/server/lib/btw/purge.server.ts +56 -0
- package/src/server/lib/btw/registry.server.test.ts +213 -0
- package/src/server/lib/btw/registry.server.ts +142 -0
- package/src/server/lib/btw/reply.ts +54 -0
- package/src/server/lib/btw/runtime.server.test.ts +128 -0
- package/src/server/lib/btw/runtime.server.ts +308 -0
- package/src/server/lib/btw/schema.server.test.ts +84 -0
- package/src/server/lib/btw/schema.server.ts +79 -0
- package/src/server/lib/btw/service.server.test.ts +199 -0
- package/src/server/lib/btw/service.server.ts +241 -0
- package/src/server/lib/btw/session-copy.server.ts +213 -0
- package/src/server/lib/btw/session-copy.test.ts +166 -0
- package/src/server/lib/btw/store.server.test.ts +301 -0
- package/src/server/lib/btw/store.server.ts +280 -0
- package/src/server/lib/bundler/build-errors.server.ts +141 -0
- package/src/server/lib/bundler/build-errors.test.ts +103 -0
- package/src/server/lib/bundler/css.test.ts +237 -0
- package/src/server/lib/bundler/css.ts +82 -0
- package/src/server/lib/bundler/dependencies.test.ts +149 -0
- package/src/server/lib/bundler/nested-at-rules.test.ts +100 -0
- package/src/server/lib/bundler/nested-at-rules.ts +146 -0
- package/src/server/lib/bundler/tsconfig-paths.test.ts +124 -0
- package/src/server/lib/chat/session-store.server.ts +61 -0
- package/src/server/lib/db/client.ts +76 -0
- package/src/server/lib/db/compact-chat-overlay.test.ts +128 -0
- package/src/server/lib/db/compact-chat-overlay.ts +90 -0
- package/src/server/lib/db/schema.test.ts +219 -0
- package/src/server/lib/db/schema.ts +122 -0
- package/src/server/lib/db/seed-terminal.test.ts +227 -0
- package/src/server/lib/db/seed.test.ts +226 -0
- package/src/server/lib/db/seed.ts +160 -0
- package/src/server/lib/db/settings-store.test.ts +65 -0
- package/src/server/lib/db/settings-store.ts +173 -0
- package/src/server/lib/db/workspace-sync.test.ts +274 -0
- package/src/server/lib/db/workspace-sync.ts +144 -0
- package/src/server/lib/dictation/language.server.test.ts +134 -0
- package/src/server/lib/dictation/language.server.ts +82 -0
- package/src/server/lib/dictation/omp-stt-worker.ts +243 -0
- package/src/server/lib/fs/atomic-write.ts +65 -0
- package/src/server/lib/fs/child-env.test.ts +66 -0
- package/src/server/lib/fs/child-env.ts +50 -0
- package/src/server/lib/fs/config-lock.ts +74 -0
- package/src/server/lib/fs/fs-path.test.ts +293 -0
- package/src/server/lib/fs/fs-write-git.test.ts +332 -0
- package/src/server/lib/fs/git-actions-branch.ts +148 -0
- package/src/server/lib/fs/git-actions-history.ts +74 -0
- package/src/server/lib/fs/git-actions-shared.ts +86 -0
- package/src/server/lib/fs/git-actions-worktree.ts +187 -0
- package/src/server/lib/fs/git-actions.ts +39 -0
- package/src/server/lib/fs/git-branch.ts +226 -0
- package/src/server/lib/fs/git-diff.test.ts +304 -0
- package/src/server/lib/fs/git-diff.ts +162 -0
- package/src/server/lib/fs/git-ignore.ts +105 -0
- package/src/server/lib/fs/git-index-lock.test.ts +232 -0
- package/src/server/lib/fs/git-log-parse.test.ts +155 -0
- package/src/server/lib/fs/git-log.test.ts +337 -0
- package/src/server/lib/fs/git-log.ts +335 -0
- package/src/server/lib/fs/git-merge-conflict.test.ts +123 -0
- package/src/server/lib/fs/git-merge.ts +210 -0
- package/src/server/lib/fs/git-porcelain-v2.ts +140 -0
- package/src/server/lib/fs/git-publish.test.ts +147 -0
- package/src/server/lib/fs/git-publish.ts +73 -0
- package/src/server/lib/fs/git-repo-details.test.ts +227 -0
- package/src/server/lib/fs/git-repo-details.ts +163 -0
- package/src/server/lib/fs/git-repos.test.ts +101 -0
- package/src/server/lib/fs/git-repos.ts +117 -0
- package/src/server/lib/fs/git-revert.ts +93 -0
- package/src/server/lib/fs/git-run.ts +219 -0
- package/src/server/lib/fs/git-stash.ts +159 -0
- package/src/server/lib/fs/git-state-verbs.test.ts +117 -0
- package/src/server/lib/fs/git-state.test.ts +171 -0
- package/src/server/lib/fs/git-state.ts +178 -0
- package/src/server/lib/fs/git-status-read.test.ts +141 -0
- package/src/server/lib/fs/git-status-read.ts +174 -0
- package/src/server/lib/fs/git-sync.test.ts +200 -0
- package/src/server/lib/fs/git-sync.ts +216 -0
- package/src/server/lib/fs/listing.ts +64 -0
- package/src/server/lib/fs/package-root.test.ts +99 -0
- package/src/server/lib/fs/package-root.ts +87 -0
- package/src/server/lib/fs/path-segment.test.ts +101 -0
- package/src/server/lib/fs/path-segment.ts +45 -0
- package/src/server/lib/fs/repo-scope.ts +14 -0
- package/src/server/lib/fs/reveal.ts +101 -0
- package/src/server/lib/fs/ripgrep.test.ts +208 -0
- package/src/server/lib/fs/ripgrep.ts +139 -0
- package/src/server/lib/fs/root.ts +156 -0
- package/src/server/lib/fs/shell.ts +131 -0
- package/src/server/lib/fs/transfer.test.ts +183 -0
- package/src/server/lib/fs/transfer.ts +143 -0
- package/src/server/lib/http/same-origin.ts +26 -0
- package/src/server/lib/lifecycle/argv-flags.ts +47 -0
- package/src/server/lib/lifecycle/bun.ts +20 -0
- package/src/server/lib/lifecycle/fd-pressure.test.ts +110 -0
- package/src/server/lib/lifecycle/fd-pressure.ts +240 -0
- package/src/server/lib/lifecycle/flock.test.ts +166 -0
- package/src/server/lib/lifecycle/flock.ts +199 -0
- package/src/server/lib/lifecycle/identity.test.ts +23 -0
- package/src/server/lib/lifecycle/identity.ts +86 -0
- package/src/server/lib/lifecycle/instance.test.ts +306 -0
- package/src/server/lib/lifecycle/instance.ts +131 -0
- package/src/server/lib/lifecycle/kill-tree.test.ts +196 -0
- package/src/server/lib/lifecycle/kill-tree.ts +114 -0
- package/src/server/lib/lifecycle/launch-mode.test.ts +51 -0
- package/src/server/lib/lifecycle/launch-mode.ts +66 -0
- package/src/server/lib/lifecycle/listener.ts +58 -0
- package/src/server/lib/lifecycle/occupant.ts +101 -0
- package/src/server/lib/lifecycle/paths.test.ts +97 -0
- package/src/server/lib/lifecycle/paths.ts +112 -0
- package/src/server/lib/lifecycle/port-guard.test.ts +288 -0
- package/src/server/lib/lifecycle/port-guard.ts +185 -0
- package/src/server/lib/lifecycle/probe.test.ts +279 -0
- package/src/server/lib/lifecycle/probe.ts +215 -0
- package/src/server/lib/lifecycle/proc/darwin.ts +305 -0
- package/src/server/lib/lifecycle/proc/index.ts +38 -0
- package/src/server/lib/lifecycle/proc/linux.ts +110 -0
- package/src/server/lib/lifecycle/proc/proc.test.ts +164 -0
- package/src/server/lib/lifecycle/proc/ps.ts +99 -0
- package/src/server/lib/lifecycle/proc/types.ts +58 -0
- package/src/server/lib/lifecycle/proc/win32.ts +64 -0
- package/src/server/lib/lifecycle/restart.test.ts +331 -0
- package/src/server/lib/lifecycle/restart.ts +228 -0
- package/src/server/lib/lifecycle/shell-route.ts +17 -0
- package/src/server/lib/lifecycle/tls.test.ts +98 -0
- package/src/server/lib/lifecycle/tls.ts +165 -0
- package/src/server/lib/models/detected-registry.server.ts +41 -0
- package/src/server/lib/models/preferences.server.ts +110 -0
- package/src/server/lib/models/provider-items.server.ts +96 -0
- package/src/server/lib/models/provider-listing.server.test.ts +283 -0
- package/src/server/lib/models/provider-listing.server.ts +279 -0
- package/src/server/lib/models/provider-registry.server.test.ts +173 -0
- package/src/server/lib/models/provider-registry.server.ts +257 -0
- package/src/server/lib/models/registry.server.test.ts +263 -0
- package/src/server/lib/models/registry.server.ts +206 -0
- package/src/server/lib/models/selected-context-limit.server.test.ts +162 -0
- package/src/server/lib/models/selected-context-limit.server.ts +52 -0
- package/src/server/lib/observer-ws.ts +150 -0
- package/src/server/lib/omp/config/agents.ts +162 -0
- package/src/server/lib/omp/config/behavior.ts +113 -0
- package/src/server/lib/omp/config/commands.test.ts +167 -0
- package/src/server/lib/omp/config/commands.ts +185 -0
- package/src/server/lib/omp/config/config-cli.test.ts +153 -0
- package/src/server/lib/omp/config/config-cli.ts +154 -0
- package/src/server/lib/omp/config/definitions.test.ts +349 -0
- package/src/server/lib/omp/config/disabled-providers.ts +117 -0
- package/src/server/lib/omp/config/discovery-roots.test.ts +119 -0
- package/src/server/lib/omp/config/discovery-roots.ts +194 -0
- package/src/server/lib/omp/config/document.test.ts +349 -0
- package/src/server/lib/omp/config/document.ts +128 -0
- package/src/server/lib/omp/config/extensions.ts +91 -0
- package/src/server/lib/omp/config/instructions.ts +81 -0
- package/src/server/lib/omp/config/mcp-and-cli.test.ts +318 -0
- package/src/server/lib/omp/config/mcp-test.ts +346 -0
- package/src/server/lib/omp/config/mcp.ts +205 -0
- package/src/server/lib/omp/config/model-overrides.ts +123 -0
- package/src/server/lib/omp/config/models-config.ts +103 -0
- package/src/server/lib/omp/config/models-validation.test.ts +137 -0
- package/src/server/lib/omp/config/models-validation.ts +268 -0
- package/src/server/lib/omp/config/omp-config-files.test.ts +300 -0
- package/src/server/lib/omp/config/path-scoped.ts +74 -0
- package/src/server/lib/omp/config/plugin-actions.ts +87 -0
- package/src/server/lib/omp/config/plugin-cli.ts +69 -0
- package/src/server/lib/omp/config/plugin-registry.test.ts +286 -0
- package/src/server/lib/omp/config/plugin-registry.ts +250 -0
- package/src/server/lib/omp/config/plugins.test.ts +289 -0
- package/src/server/lib/omp/config/plugins.ts +249 -0
- package/src/server/lib/omp/config/provider-seeds.test.ts +167 -0
- package/src/server/lib/omp/config/provider-seeds.ts +220 -0
- package/src/server/lib/omp/config/providers-write.test.ts +340 -0
- package/src/server/lib/omp/config/providers.ts +343 -0
- package/src/server/lib/omp/config/roles.ts +38 -0
- package/src/server/lib/omp/config/roots-watch.server.test.ts +214 -0
- package/src/server/lib/omp/config/roots-watch.server.ts +334 -0
- package/src/server/lib/omp/config/scope.test.ts +53 -0
- package/src/server/lib/omp/config/scope.ts +65 -0
- package/src/server/lib/omp/config/skills-catalog.ts +127 -0
- package/src/server/lib/omp/config/skills.test.ts +108 -0
- package/src/server/lib/omp/config/skills.ts +333 -0
- package/src/server/lib/omp/config/yaml.ts +48 -0
- package/src/server/lib/omp/core/auth-credentials.ts +132 -0
- package/src/server/lib/omp/core/cli.ts +70 -0
- package/src/server/lib/omp/core/host-resolution.test.ts +348 -0
- package/src/server/lib/omp/core/paths.test.ts +229 -0
- package/src/server/lib/omp/core/paths.ts +214 -0
- package/src/server/lib/omp/core/registry.test.ts +234 -0
- package/src/server/lib/omp/core/registry.ts +140 -0
- package/src/server/lib/omp/core/startup.ts +64 -0
- package/src/server/lib/omp/core/worktree.ts +107 -0
- package/src/server/lib/omp/extensions/locator.test.ts +67 -0
- package/src/server/lib/omp/extensions/locator.ts +98 -0
- package/src/server/lib/omp/mode/command-type.test.ts +41 -0
- package/src/server/lib/omp/mode/live-selection.test.ts +133 -0
- package/src/server/lib/omp/mode/live-selection.ts +90 -0
- package/src/server/lib/omp/mode/request.test.ts +73 -0
- package/src/server/lib/omp/mode/request.ts +94 -0
- package/src/server/lib/omp/rpc/agent-start-watchdog.ts +88 -0
- package/src/server/lib/omp/rpc/child-config.ts +48 -0
- package/src/server/lib/omp/rpc/constants.test.ts +229 -0
- package/src/server/lib/omp/rpc/constants.ts +299 -0
- package/src/server/lib/omp/rpc/destroy-stream-row.test.ts +110 -0
- package/src/server/lib/omp/rpc/errors.ts +42 -0
- package/src/server/lib/omp/rpc/event-fanout.ts +43 -0
- package/src/server/lib/omp/rpc/forked-resume.test.ts +119 -0
- package/src/server/lib/omp/rpc/frame-fold.test.ts +300 -0
- package/src/server/lib/omp/rpc/frame-fold.ts +321 -0
- package/src/server/lib/omp/rpc/idle-reaper.ts +59 -0
- package/src/server/lib/omp/rpc/lifecycle.test.ts +293 -0
- package/src/server/lib/omp/rpc/lines.ts +48 -0
- package/src/server/lib/omp/rpc/manager.ts +345 -0
- package/src/server/lib/omp/rpc/mode-mirror.test.ts +156 -0
- package/src/server/lib/omp/rpc/mode-mirror.ts +109 -0
- package/src/server/lib/omp/rpc/peer-proxy.server.test.ts +107 -0
- package/src/server/lib/omp/rpc/peer-proxy.server.ts +150 -0
- package/src/server/lib/omp/rpc/pending-ui-dialogs.ts +59 -0
- package/src/server/lib/omp/rpc/process-helpers.ts +70 -0
- package/src/server/lib/omp/rpc/process.ts +328 -0
- package/src/server/lib/omp/rpc/reload-plugins.ts +43 -0
- package/src/server/lib/omp/rpc/rpc-primitives.test.ts +339 -0
- package/src/server/lib/omp/rpc/rpc-timers.test.ts +302 -0
- package/src/server/lib/omp/rpc/run-model.ts +59 -0
- package/src/server/lib/omp/rpc/run-settle.server.ts +296 -0
- package/src/server/lib/omp/rpc/run-settle.test.ts +288 -0
- package/src/server/lib/omp/rpc/session-command-guards.ts +125 -0
- package/src/server/lib/omp/rpc/session-commands-dialog.test.ts +139 -0
- package/src/server/lib/omp/rpc/session-commands-harness.ts +86 -0
- package/src/server/lib/omp/rpc/session-commands.test.ts +293 -0
- package/src/server/lib/omp/rpc/session-commands.ts +293 -0
- package/src/server/lib/omp/rpc/session-registration.ts +58 -0
- package/src/server/lib/omp/rpc/session-registry.test.ts +234 -0
- package/src/server/lib/omp/rpc/session-registry.ts +349 -0
- package/src/server/lib/omp/rpc/spawn-provenance.ts +82 -0
- package/src/server/lib/omp/rpc/stream-reader.test.ts +124 -0
- package/src/server/lib/omp/rpc/subagent-liveness.test.ts +62 -0
- package/src/server/lib/omp/rpc/subagent-liveness.ts +101 -0
- package/src/server/lib/omp/rpc/terminal-settle.ts +97 -0
- package/src/server/lib/omp/rpc/utility.test.ts +261 -0
- package/src/server/lib/omp/rpc/utility.ts +300 -0
- package/src/server/lib/omp/rpc/web-state.ts +88 -0
- package/src/server/lib/omp/session/artifacts.server.test.ts +117 -0
- package/src/server/lib/omp/session/artifacts.server.ts +106 -0
- package/src/server/lib/omp/session/auto-title.server.test.ts +270 -0
- package/src/server/lib/omp/session/auto-title.server.ts +250 -0
- package/src/server/lib/omp/session/blobs.server.test.ts +129 -0
- package/src/server/lib/omp/session/blobs.server.ts +108 -0
- package/src/server/lib/omp/session/data-mock.ts +88 -0
- package/src/server/lib/omp/session/delete-flow.server.ts +101 -0
- package/src/server/lib/omp/session/delete.server.ts +139 -0
- package/src/server/lib/omp/session/file-scan.ts +180 -0
- package/src/server/lib/omp/session/files.test.ts +147 -0
- package/src/server/lib/omp/session/files.ts +298 -0
- package/src/server/lib/omp/session/goal-auditor.server.ts +187 -0
- package/src/server/lib/omp/session/goal-auditor.test.ts +76 -0
- package/src/server/lib/omp/session/goal-driver.server.ts +230 -0
- package/src/server/lib/omp/session/goal-driver.test.ts +220 -0
- package/src/server/lib/omp/session/goal-settings.server.ts +48 -0
- package/src/server/lib/omp/session/goal-settings.test.ts +45 -0
- package/src/server/lib/omp/session/lease-flock.server.ts +117 -0
- package/src/server/lib/omp/session/lease-holder.server.ts +156 -0
- package/src/server/lib/omp/session/local-runs.server.ts +38 -0
- package/src/server/lib/omp/session/locator.ts +70 -0
- package/src/server/lib/omp/session/merge-stored-anchor.test.ts +85 -0
- package/src/server/lib/omp/session/merge-stored-notices.test.ts +81 -0
- package/src/server/lib/omp/session/merge-stored-overlay-rows.test.ts +106 -0
- package/src/server/lib/omp/session/merge-stored.test.ts +118 -0
- package/src/server/lib/omp/session/merge-stored.ts +307 -0
- package/src/server/lib/omp/session/messages.test.ts +182 -0
- package/src/server/lib/omp/session/messages.ts +288 -0
- package/src/server/lib/omp/session/modes.test.ts +146 -0
- package/src/server/lib/omp/session/modes.ts +164 -0
- package/src/server/lib/omp/session/ownership.server.test.ts +271 -0
- package/src/server/lib/omp/session/ownership.server.ts +156 -0
- package/src/server/lib/omp/session/plan-mode-env.test.ts +65 -0
- package/src/server/lib/omp/session/plans.test.ts +64 -0
- package/src/server/lib/omp/session/plans.ts +192 -0
- package/src/server/lib/omp/session/reader.ts +162 -0
- package/src/server/lib/omp/session/reload.server.test.ts +111 -0
- package/src/server/lib/omp/session/reload.server.ts +114 -0
- package/src/server/lib/omp/session/rename-with-ai.server.test.ts +137 -0
- package/src/server/lib/omp/session/rename-with-ai.server.ts +197 -0
- package/src/server/lib/omp/session/rewind-file.test.ts +212 -0
- package/src/server/lib/omp/session/rewind-file.ts +248 -0
- package/src/server/lib/omp/session/scan.ts +119 -0
- package/src/server/lib/omp/session/session-discovery.test.ts +248 -0
- package/src/server/lib/omp/session/session-reads.test.ts +297 -0
- package/src/server/lib/omp/session/sessions-watch.server.ts +115 -0
- package/src/server/lib/omp/session/sidebar-data.server.ts +270 -0
- package/src/server/lib/omp/session/standby.server.test.ts +109 -0
- package/src/server/lib/omp/session/standby.server.ts +122 -0
- package/src/server/lib/omp/session/subagent-presence.ts +108 -0
- package/src/server/lib/omp/session/telemetry/compute.ts +206 -0
- package/src/server/lib/omp/session/telemetry/format.ts +110 -0
- package/src/server/lib/omp/session/telemetry/index.ts +4 -0
- package/src/server/lib/omp/session/telemetry/scan.ts +103 -0
- package/src/server/lib/omp/session/telemetry-raw.ts +112 -0
- package/src/server/lib/omp/session/telemetry.test.ts +154 -0
- package/src/server/lib/omp/session/title-model-overlay.server.test.ts +152 -0
- package/src/server/lib/omp/session/title-model-overlay.server.ts +161 -0
- package/src/server/lib/omp/session/title-slot.ts +203 -0
- package/src/server/lib/omp/session/todos.ts +100 -0
- package/src/server/lib/omp/session/usage/aggregate-shaping.test.ts +149 -0
- package/src/server/lib/omp/session/usage/aggregate.test.ts +243 -0
- package/src/server/lib/omp/session/usage/aggregate.ts +330 -0
- package/src/server/lib/omp/session/usage/shaping.ts +130 -0
- package/src/server/lib/omp/subagent/history/fold.ts +196 -0
- package/src/server/lib/omp/subagent/history/index.ts +110 -0
- package/src/server/lib/omp/subagent/history/paths.ts +29 -0
- package/src/server/lib/omp/subagent/history/transcript.test.ts +87 -0
- package/src/server/lib/omp/subagent/history/transcript.ts +122 -0
- package/src/server/lib/panels/assets.server.ts +70 -0
- package/src/server/lib/panels/auto-update.server.test.ts +138 -0
- package/src/server/lib/panels/auto-update.server.ts +148 -0
- package/src/server/lib/panels/baseline.server.test.ts +104 -0
- package/src/server/lib/panels/baseline.server.ts +122 -0
- package/src/server/lib/panels/build-targets.server.ts +107 -0
- package/src/server/lib/panels/build.server.test.ts +289 -0
- package/src/server/lib/panels/build.server.ts +297 -0
- package/src/server/lib/panels/bundled-catalog.server.ts +54 -0
- package/src/server/lib/panels/catalog.server.test.ts +149 -0
- package/src/server/lib/panels/catalog.server.ts +142 -0
- package/src/server/lib/panels/compat.server.test.ts +122 -0
- package/src/server/lib/panels/compat.server.ts +79 -0
- package/src/server/lib/panels/files.server.test.ts +133 -0
- package/src/server/lib/panels/files.server.ts +112 -0
- package/src/server/lib/panels/git-clone.server.ts +140 -0
- package/src/server/lib/panels/git-status.server.ts +46 -0
- package/src/server/lib/panels/git-update.server.test.ts +218 -0
- package/src/server/lib/panels/git-update.server.ts +187 -0
- package/src/server/lib/panels/install.server.test.ts +284 -0
- package/src/server/lib/panels/install.server.ts +240 -0
- package/src/server/lib/panels/link.server.ts +106 -0
- package/src/server/lib/panels/local-edits.server.test.ts +127 -0
- package/src/server/lib/panels/local-edits.server.ts +126 -0
- package/src/server/lib/panels/manifest.test.ts +199 -0
- package/src/server/lib/panels/manifest.ts +248 -0
- package/src/server/lib/panels/registry-bundled.server.test.ts +99 -0
- package/src/server/lib/panels/registry.server.test.ts +315 -0
- package/src/server/lib/panels/registry.server.ts +331 -0
- package/src/server/lib/panels/remove.server.test.ts +112 -0
- package/src/server/lib/panels/seed.server.ts +71 -0
- package/src/server/lib/panels/shim.test.ts +160 -0
- package/src/server/lib/panels/shim.ts +139 -0
- package/src/server/lib/panels/state.server.test.ts +131 -0
- package/src/server/lib/panels/state.server.ts +172 -0
- package/src/server/lib/panels/sync.server.test.ts +308 -0
- package/src/server/lib/panels/sync.server.ts +212 -0
- package/src/server/lib/plugins/background.server.ts +99 -0
- package/src/server/lib/plugins/background.test.ts +89 -0
- package/src/server/lib/plugins/build-server.test.ts +85 -0
- package/src/server/lib/plugins/e2e.test.ts +134 -0
- package/src/server/lib/plugins/events.server.ts +88 -0
- package/src/server/lib/plugins/http.server.ts +112 -0
- package/src/server/lib/plugins/loader.server.ts +306 -0
- package/src/server/lib/plugins/log.server.ts +40 -0
- package/src/server/lib/plugins/platform.test.ts +293 -0
- package/src/server/lib/plugins/realtime.server.ts +66 -0
- package/src/server/lib/plugins/rpc.server.ts +180 -0
- package/src/server/lib/plugins/schema.server.ts +75 -0
- package/src/server/lib/plugins/settings.server.ts +172 -0
- package/src/server/lib/plugins/shutdown.test.ts +105 -0
- package/src/server/lib/plugins/storage.server.ts +118 -0
- package/src/server/lib/queue/delivery-dispatch.server.test.ts +180 -0
- package/src/server/lib/queue/delivery-harness.ts +115 -0
- package/src/server/lib/queue/delivery.server.test.ts +206 -0
- package/src/server/lib/queue/delivery.server.ts +258 -0
- package/src/server/lib/queue/schema-migration.server.ts +50 -0
- package/src/server/lib/queue/store.server.test.ts +272 -0
- package/src/server/lib/queue/store.server.ts +219 -0
- package/src/server/lib/realtime/hub.server.test.ts +285 -0
- package/src/server/lib/realtime/hub.server.ts +318 -0
- package/src/server/lib/realtime/hub.types.ts +122 -0
- package/src/server/lib/realtime/signals.server.ts +101 -0
- package/src/server/lib/realtime/topics/btw.server.ts +25 -0
- package/src/server/lib/realtime/topics/catalog.server.ts +126 -0
- package/src/server/lib/realtime/topics/global.server.test.ts +50 -0
- package/src/server/lib/realtime/topics/global.server.ts +52 -0
- package/src/server/lib/realtime/topics/peer-relay.server.test.ts +246 -0
- package/src/server/lib/realtime/topics/peer-relay.server.ts +84 -0
- package/src/server/lib/realtime/topics/plugin.server.ts +30 -0
- package/src/server/lib/realtime/topics/session-data.server.ts +98 -0
- package/src/server/lib/realtime/topics/session.server.ts +123 -0
- package/src/server/lib/realtime/topics/workspace.server.ts +106 -0
- package/src/server/lib/realtime/topics.server.test.ts +255 -0
- package/src/server/lib/realtime/topics.server.ts +261 -0
- package/src/server/lib/remix-compat.ts +29 -0
- package/src/server/lib/route-adapter.test.ts +322 -0
- package/src/server/lib/route-adapter.ts +144 -0
- package/src/server/lib/schedule/rows.server.ts +111 -0
- package/src/server/lib/schedule/runtime.server.test.ts +191 -0
- package/src/server/lib/schedule/runtime.server.ts +252 -0
- package/src/server/lib/schedule/schema.server.ts +60 -0
- package/src/server/lib/schedule/store.server.test.ts +231 -0
- package/src/server/lib/schedule/store.server.ts +254 -0
- package/src/server/lib/sse.ts +248 -0
- package/src/server/lib/terminal/foreground.test.ts +163 -0
- package/src/server/lib/terminal/foreground.ts +122 -0
- package/src/server/lib/terminal/history.test.ts +118 -0
- package/src/server/lib/terminal/history.ts +206 -0
- package/src/server/lib/terminal/liveness.server.ts +99 -0
- package/src/server/lib/terminal/runtime.server.ts +294 -0
- package/src/server/lib/terminal/session.server.ts +256 -0
- package/src/server/lib/terminal/shell.test.ts +129 -0
- package/src/server/lib/terminal/shell.ts +146 -0
- package/src/server/lib/terminal/spawn.test.ts +50 -0
- package/src/server/lib/terminal/spawn.ts +51 -0
- package/src/server/lib/terminal/store-liveness.test.ts +324 -0
- package/src/server/lib/terminal/store.ts +72 -0
- package/src/server/lib/tray/autostart.ts +238 -0
- package/src/server/lib/tray/config.ts +141 -0
- package/src/server/lib/tray/credential.test.ts +74 -0
- package/src/server/lib/tray/credential.ts +81 -0
- package/src/server/lib/tray/entry.ts +89 -0
- package/src/server/lib/tray/host/darwin.js +180 -0
- package/src/server/lib/tray/host/linux.js +187 -0
- package/src/server/lib/tray/host/win32.ps1 +109 -0
- package/src/server/lib/tray/hosts.ts +115 -0
- package/src/server/lib/tray/runtime.server.ts +132 -0
- package/src/server/lib/tray/tray.test.ts +225 -0
- package/src/server/lib/updates/apply.ts +93 -0
- package/src/server/lib/updates/changelog-file.ts +122 -0
- package/src/server/lib/updates/changelog.test.ts +213 -0
- package/src/server/lib/updates/changelog.ts +163 -0
- package/src/server/lib/updates/check.ts +71 -0
- package/src/server/lib/updates/install-method.ts +86 -0
- package/src/server/lib/updates/install-steps.ts +81 -0
- package/src/server/lib/updates/install.test.ts +135 -0
- package/src/server/lib/updates/install.ts +302 -0
- package/src/server/lib/updates/installed-cli.test.ts +222 -0
- package/src/server/lib/updates/installed-cli.ts +139 -0
- package/src/server/lib/updates/npm.test.ts +137 -0
- package/src/server/lib/updates/npm.ts +113 -0
- package/src/server/lib/updates/omp.test.ts +116 -0
- package/src/server/lib/updates/omp.ts +139 -0
- package/src/server/lib/updates/release-url.ts +25 -0
- package/src/server/lib/updates/single-flight.test.ts +61 -0
- package/src/server/lib/updates/single-flight.ts +68 -0
- package/src/server/lib/usage/deepseek.ts +58 -0
- package/src/server/lib/usage/kenari-accounts.test.ts +162 -0
- package/src/server/lib/usage/kenari.test.ts +258 -0
- package/src/server/lib/usage/kenari.ts +255 -0
- package/src/server/lib/usage/omp-usage.server.test.ts +126 -0
- package/src/server/lib/usage/omp-usage.server.ts +203 -0
- package/src/server/lib/usage/provider-key.test.ts +325 -0
- package/src/server/lib/usage/provider-key.ts +194 -0
- package/src/server/lib/usage/providers.server.test.ts +47 -0
- package/src/server/lib/usage/providers.server.ts +214 -0
- package/src/server/lib/usage/report.server.ts +156 -0
- package/src/server/lib/usage/reset.server.test.ts +175 -0
- package/src/server/lib/usage/reset.server.ts +206 -0
- package/src/server/lib/usage/vendor-balance.server.test.ts +104 -0
- package/src/server/lib/usage/vendor-balance.server.ts +284 -0
- package/src/server/lib/wiki/git.test.ts +240 -0
- package/src/server/lib/wiki/git.ts +79 -0
- package/src/server/lib/wiki/mirror-reads.test.ts +78 -0
- package/src/server/lib/wiki/mirror.server.ts +251 -0
- package/src/server/lib/wiki/payload.server.ts +141 -0
- package/src/server/lib/wiki/provider.server.ts +84 -0
- package/src/server/lib/wiki/remote.test.ts +84 -0
- package/src/server/lib/wiki/remote.ts +104 -0
- package/src/server/lib/workspace/register-folder.server.ts +78 -0
- package/src/server/mock.server.ts +27 -0
- package/src/server/plugins/compress.ts +79 -0
- package/src/server/plugins/shell.server.test.ts +98 -0
- package/src/server/plugins/shell.server.ts +168 -0
- package/src/server/plugins/ssr.ts +199 -0
- package/src/server/plugins/static.test.ts +60 -0
- package/src/server/plugins/static.ts +164 -0
- package/src/server/routes/agent/command.test.ts +87 -0
- package/src/server/routes/agent/command.ts +247 -0
- package/src/server/routes/agent/index.ts +10 -0
- package/src/server/routes/agent/new.ts +114 -0
- package/src/server/routes/agent/prewarm.ts +27 -0
- package/src/server/routes/auth/index.ts +14 -0
- package/src/server/routes/auth/login.ts +94 -0
- package/src/server/routes/auth/logout.ts +36 -0
- package/src/server/routes/auth/password.ts +102 -0
- package/src/server/routes/auth/revoke.test.ts +115 -0
- package/src/server/routes/auth/revoke.ts +73 -0
- package/src/server/routes/auth/routes.test.ts +322 -0
- package/src/server/routes/auth/state.ts +34 -0
- package/src/server/routes/browser/index.ts +6 -0
- package/src/server/routes/browser/stream.test.ts +107 -0
- package/src/server/routes/browser/stream.ts +217 -0
- package/src/server/routes/btw/index.ts +6 -0
- package/src/server/routes/btw/topics.ts +117 -0
- package/src/server/routes/chamber/index.ts +15 -0
- package/src/server/routes/chat/index.ts +14 -0
- package/src/server/routes/chat/rewind.ts +116 -0
- package/src/server/routes/chat/root.ts +78 -0
- package/src/server/routes/chat/session.ts +235 -0
- package/src/server/routes/chat/stream.test.ts +102 -0
- package/src/server/routes/chat/stream.ts +111 -0
- package/src/server/routes/chat/turns.ts +87 -0
- package/src/server/routes/console/index.ts +18 -0
- package/src/server/routes/console/restart.test.ts +98 -0
- package/src/server/routes/console/restart.ts +44 -0
- package/src/server/routes/dictation/ws.ts +116 -0
- package/src/server/routes/files/index.ts +10 -0
- package/src/server/routes/files/root.ts +29 -0
- package/src/server/routes/files/toggle.ts +20 -0
- package/src/server/routes/folders/batch-delete.ts +68 -0
- package/src/server/routes/folders/clone.test.ts +167 -0
- package/src/server/routes/folders/clone.ts +132 -0
- package/src/server/routes/folders/create.ts +84 -0
- package/src/server/routes/folders/folder.ts +124 -0
- package/src/server/routes/folders/index.ts +26 -0
- package/src/server/routes/folders/mkdir.ts +97 -0
- package/src/server/routes/folders/routes.test.ts +185 -0
- package/src/server/routes/fs/action-create.test.ts +90 -0
- package/src/server/routes/fs/action-transfer.test.ts +159 -0
- package/src/server/routes/fs/action.test.ts +64 -0
- package/src/server/routes/fs/action.ts +175 -0
- package/src/server/routes/fs/exists.test.ts +76 -0
- package/src/server/routes/fs/exists.ts +53 -0
- package/src/server/routes/fs/git-action.test.ts +334 -0
- package/src/server/routes/fs/git-branch.test.ts +287 -0
- package/src/server/routes/fs/git-loader.test.ts +105 -0
- package/src/server/routes/fs/git-merge.test.ts +325 -0
- package/src/server/routes/fs/git-repo-details.test.ts +152 -0
- package/src/server/routes/fs/git-stash.test.ts +202 -0
- package/src/server/routes/fs/git.ts +188 -0
- package/src/server/routes/fs/index.ts +26 -0
- package/src/server/routes/fs/raw.test.ts +124 -0
- package/src/server/routes/fs/raw.ts +115 -0
- package/src/server/routes/fs/read.test.ts +146 -0
- package/src/server/routes/fs/read.ts +324 -0
- package/src/server/routes/fs/replace.ts +69 -0
- package/src/server/routes/fs/scope.test.ts +171 -0
- package/src/server/routes/fs/scope.ts +106 -0
- package/src/server/routes/fs/search.test.ts +210 -0
- package/src/server/routes/fs/search.ts +205 -0
- package/src/server/routes/fs/validate.ts +62 -0
- package/src/server/routes/health/index.ts +6 -0
- package/src/server/routes/health/probe.ts +59 -0
- package/src/server/routes/index.ts +60 -0
- package/src/server/routes/models/index.ts +8 -0
- package/src/server/routes/models/roles.ts +31 -0
- package/src/server/routes/models/root.ts +205 -0
- package/src/server/routes/omp/artifact.ts +42 -0
- package/src/server/routes/omp/blob.ts +54 -0
- package/src/server/routes/omp/extensions.ts +34 -0
- package/src/server/routes/omp/index.ts +27 -0
- package/src/server/routes/omp/login.ts +112 -0
- package/src/server/routes/omp/reload-engine.ts +39 -0
- package/src/server/routes/omp/routes.test.ts +133 -0
- package/src/server/routes/omp/state.ts +22 -0
- package/src/server/routes/panels/bindings.ts +23 -0
- package/src/server/routes/panels/build.ts +72 -0
- package/src/server/routes/panels/bundle.ts +71 -0
- package/src/server/routes/panels/css.test.ts +141 -0
- package/src/server/routes/panels/css.ts +89 -0
- package/src/server/routes/panels/icon.ts +64 -0
- package/src/server/routes/panels/install.ts +240 -0
- package/src/server/routes/panels/panel-routes.test-util.ts +126 -0
- package/src/server/routes/panels/readme.ts +69 -0
- package/src/server/routes/panels/registry.ts +27 -0
- package/src/server/routes/panels/routes.test.ts +290 -0
- package/src/server/routes/panels/server-half.test.ts +95 -0
- package/src/server/routes/plugins/bindings.ts +16 -0
- package/src/server/routes/plugins/http.ts +56 -0
- package/src/server/routes/plugins/routes.test.ts +254 -0
- package/src/server/routes/plugins/rpc.ts +65 -0
- package/src/server/routes/plugins/state.ts +36 -0
- package/src/server/routes/realtime/ws.ts +114 -0
- package/src/server/routes/schedule/bindings.ts +8 -0
- package/src/server/routes/schedule/body.ts +110 -0
- package/src/server/routes/schedule/index.ts +155 -0
- package/src/server/routes/schedule/runs.ts +23 -0
- package/src/server/routes/sessions/batch-delete.test.ts +139 -0
- package/src/server/routes/sessions/batch-delete.ts +60 -0
- package/src/server/routes/sessions/delete.test.ts +84 -0
- package/src/server/routes/sessions/delete.ts +45 -0
- package/src/server/routes/sessions/folder.ts +16 -0
- package/src/server/routes/sessions/index.ts +52 -0
- package/src/server/routes/sessions/list.ts +23 -0
- package/src/server/routes/sessions/queue.ts +134 -0
- package/src/server/routes/sessions/routes-queue.test.ts +237 -0
- package/src/server/routes/sessions/routes-read.test.ts +165 -0
- package/src/server/routes/sessions/routes.test.ts +316 -0
- package/src/server/routes/sessions/session.ts +291 -0
- package/src/server/routes/sessions/subagent-control.ts +75 -0
- package/src/server/routes/sessions/subagents.ts +82 -0
- package/src/server/routes/settings/agents.ts +128 -0
- package/src/server/routes/settings/behavior.ts +125 -0
- package/src/server/routes/settings/commands.ts +217 -0
- package/src/server/routes/settings/index.ts +39 -0
- package/src/server/routes/settings/mcp-test.ts +71 -0
- package/src/server/routes/settings/mcp.ts +261 -0
- package/src/server/routes/settings/model-override.ts +69 -0
- package/src/server/routes/settings/omp-config.ts +50 -0
- package/src/server/routes/settings/plugins.ts +218 -0
- package/src/server/routes/settings/projects.ts +89 -0
- package/src/server/routes/settings/provider-logout.test.ts +38 -0
- package/src/server/routes/settings/provider-logout.ts +104 -0
- package/src/server/routes/settings/provider-model.ts +107 -0
- package/src/server/routes/settings/provider-models.ts +190 -0
- package/src/server/routes/settings/providers.ts +182 -0
- package/src/server/routes/settings/root.ts +45 -0
- package/src/server/routes/settings/settings-config-routes.test.ts +271 -0
- package/src/server/routes/settings/settings-store-routes.test.ts +334 -0
- package/src/server/routes/settings/skills.ts +227 -0
- package/src/server/routes/settings/usage-reset.ts +60 -0
- package/src/server/routes/settings/usage.ts +36 -0
- package/src/server/routes/telemetry/context.ts +59 -0
- package/src/server/routes/telemetry/index.ts +10 -0
- package/src/server/routes/telemetry/raw-messages.ts +80 -0
- package/src/server/routes/telemetry/tokens.ts +166 -0
- package/src/server/routes/terminal/index.ts +6 -0
- package/src/server/routes/terminal/sessions.ts +24 -0
- package/src/server/routes/terminal/ws.ts +155 -0
- package/src/server/routes/updates/apply.ts +140 -0
- package/src/server/routes/updates/changelog.ts +32 -0
- package/src/server/routes/updates/check.ts +27 -0
- package/src/server/routes/updates/index.ts +10 -0
- package/src/server/routes/updates/routes.test.ts +269 -0
- package/src/server/routes/well-known/devtools.ts +9 -0
- package/src/server/routes/well-known/index.ts +6 -0
- package/src/server/routes/wiki/asset.ts +69 -0
- package/src/server/routes/wiki/index.ts +15 -0
- package/src/server/routes/wiki/page.ts +88 -0
- package/src/server/routes/wiki/repo.ts +30 -0
- package/src/shared/lib/auth/handover.test.ts +153 -0
- package/src/shared/lib/auth/handover.ts +102 -0
- package/src/shared/lib/auth/password.ts +72 -0
- package/src/shared/lib/browser/activity.ts +115 -0
- package/src/shared/lib/browser/browser-cdp.test.ts +350 -0
- package/src/shared/lib/browser/browser-helpers.test.ts +218 -0
- package/src/shared/lib/browser/browser-viewer.test.ts +312 -0
- package/src/shared/lib/browser/browser-watcher.test.ts +202 -0
- package/src/shared/lib/browser/cdp.ts +201 -0
- package/src/shared/lib/browser/connection.ts +81 -0
- package/src/shared/lib/browser/observer.ts +129 -0
- package/src/shared/lib/browser/page-context.ts +20 -0
- package/src/shared/lib/browser/targets.test.ts +45 -0
- package/src/shared/lib/browser/targets.ts +74 -0
- package/src/shared/lib/browser/url.ts +21 -0
- package/src/shared/lib/browser/util.ts +20 -0
- package/src/shared/lib/browser/viewer.ts +303 -0
- package/src/shared/lib/browser/watcher.ts +75 -0
- package/src/shared/lib/chat/ask-questions.test.ts +169 -0
- package/src/shared/lib/chat/ask-questions.ts +284 -0
- package/src/shared/lib/chat/attachments.test.ts +240 -0
- package/src/shared/lib/chat/attachments.ts +299 -0
- package/src/shared/lib/chat/btw/client.ts +83 -0
- package/src/shared/lib/chat/capitalize.ts +9 -0
- package/src/shared/lib/chat/chat-display.test.ts +284 -0
- package/src/shared/lib/chat/composer/client.test.ts +48 -0
- package/src/shared/lib/chat/composer/client.ts +233 -0
- package/src/shared/lib/chat/composer/commands.test.ts +307 -0
- package/src/shared/lib/chat/composer/commands.ts +290 -0
- package/src/shared/lib/chat/composer/composer.test.ts +195 -0
- package/src/shared/lib/chat/composer/draft.ts +39 -0
- package/src/shared/lib/chat/composer/filter.test.ts +178 -0
- package/src/shared/lib/chat/composer/filter.ts +76 -0
- package/src/shared/lib/chat/composer/keybindings.test.ts +74 -0
- package/src/shared/lib/chat/composer/keybindings.ts +55 -0
- package/src/shared/lib/chat/composer/owned-commands.test.ts +53 -0
- package/src/shared/lib/chat/composer/scope.test.ts +93 -0
- package/src/shared/lib/chat/composer/translate.test.ts +199 -0
- package/src/shared/lib/chat/composer/translate.ts +149 -0
- package/src/shared/lib/chat/composer/trigger.test.ts +276 -0
- package/src/shared/lib/chat/composer/trigger.ts +207 -0
- package/src/shared/lib/chat/composer/tui-only.test.ts +104 -0
- package/src/shared/lib/chat/composer/tui-only.ts +144 -0
- package/src/shared/lib/chat/context/usage.test.ts +73 -0
- package/src/shared/lib/chat/context/usage.ts +77 -0
- package/src/shared/lib/chat/detect-format.ts +38 -0
- package/src/shared/lib/chat/duration.ts +82 -0
- package/src/shared/lib/chat/excerpt.ts +115 -0
- package/src/shared/lib/chat/new-chat-seed.test.ts +51 -0
- package/src/shared/lib/chat/new-chat-seed.ts +36 -0
- package/src/shared/lib/chat/notice-row.test.ts +116 -0
- package/src/shared/lib/chat/notice-row.ts +79 -0
- package/src/shared/lib/chat/notice-text.ts +35 -0
- package/src/shared/lib/chat/omp/abort.ts +41 -0
- package/src/shared/lib/chat/omp/agent-events.test.ts +307 -0
- package/src/shared/lib/chat/omp/agent-events.ts +302 -0
- package/src/shared/lib/chat/omp/available-commands-cache.test.ts +67 -0
- package/src/shared/lib/chat/omp/command-output-ansi.test.ts +84 -0
- package/src/shared/lib/chat/omp/fold-deps.ts +70 -0
- package/src/shared/lib/chat/omp/fold.test.ts +245 -0
- package/src/shared/lib/chat/omp/mode-marker.test.ts +116 -0
- package/src/shared/lib/chat/omp/status.ts +42 -0
- package/src/shared/lib/chat/omp/subagent-frames.ts +51 -0
- package/src/shared/lib/chat/omp/terminal-messages.ts +47 -0
- package/src/shared/lib/chat/omp/tool-details.test.ts +134 -0
- package/src/shared/lib/chat/omp/tool-frames.test.ts +140 -0
- package/src/shared/lib/chat/omp/tool-frames.ts +107 -0
- package/src/shared/lib/chat/omp/tool-results.ts +180 -0
- package/src/shared/lib/chat/omp/transport-frames.test.ts +70 -0
- package/src/shared/lib/chat/omp/transport-frames.ts +95 -0
- package/src/shared/lib/chat/read-sse.ts +99 -0
- package/src/shared/lib/chat/stream-service.ts +197 -0
- package/src/shared/lib/chat/task-result-parser.ts +166 -0
- package/src/shared/lib/chat/text-file.ts +148 -0
- package/src/shared/lib/chat/timeline/command-output.ts +78 -0
- package/src/shared/lib/chat/timeline/omp-callbacks.test.ts +314 -0
- package/src/shared/lib/chat/timeline/omp-callbacks.ts +314 -0
- package/src/shared/lib/chat/timeline/provider-retry.test.ts +120 -0
- package/src/shared/lib/chat/timeline/provider-retry.ts +103 -0
- package/src/shared/lib/chat/timeline/run-footer.test.ts +158 -0
- package/src/shared/lib/chat/timeline/run-footer.ts +146 -0
- package/src/shared/lib/chat/timeline/run-signals.test.ts +87 -0
- package/src/shared/lib/chat/timeline/run-signals.ts +73 -0
- package/src/shared/lib/chat/timeline/steer-report.ts +35 -0
- package/src/shared/lib/chat/timeline/stream-callbacks.ts +202 -0
- package/src/shared/lib/chat/timeline/stream-coalescer.ts +66 -0
- package/src/shared/lib/chat/timeline/stream-raf.test.ts +104 -0
- package/src/shared/lib/chat/timeline/stream-raf.ts +59 -0
- package/src/shared/lib/chat/timeline/stream.test.ts +282 -0
- package/src/shared/lib/chat/timeline/tool-phrases.test.ts +185 -0
- package/src/shared/lib/chat/timeline/tool-phrases.ts +235 -0
- package/src/shared/lib/chat/timeline/tool-verbs.test.ts +229 -0
- package/src/shared/lib/chat/timeline/tool-verbs.ts +180 -0
- package/src/shared/lib/chat/timeline/turns.ts +37 -0
- package/src/shared/lib/chat/title-case.ts +293 -0
- package/src/shared/lib/chat/todo/nested-phase.ts +64 -0
- package/src/shared/lib/chat/todo/parser.test.ts +165 -0
- package/src/shared/lib/chat/todo/parser.ts +262 -0
- package/src/shared/lib/chat/todo/progress.test.ts +265 -0
- package/src/shared/lib/chat/todo/progress.ts +97 -0
- package/src/shared/lib/chat/todo/snapshot.test.ts +156 -0
- package/src/shared/lib/chat/todo/snapshot.ts +215 -0
- package/src/shared/lib/chat/tool/artifact-view.test.ts +66 -0
- package/src/shared/lib/chat/tool/artifact-view.ts +80 -0
- package/src/shared/lib/chat/tool/artifact.test.ts +74 -0
- package/src/shared/lib/chat/tool/artifact.ts +66 -0
- package/src/shared/lib/chat/tool/labels.ts +55 -0
- package/src/shared/lib/chat/tool/output-window.test.ts +69 -0
- package/src/shared/lib/chat/tool/output-window.ts +73 -0
- package/src/shared/lib/chat/tool/proc-facts.ts +93 -0
- package/src/shared/lib/chat/tool/summary-proc.test.ts +118 -0
- package/src/shared/lib/chat/tool/summary-wait.test.ts +92 -0
- package/src/shared/lib/chat/tool/summary.test.ts +329 -0
- package/src/shared/lib/chat/tool/summary.ts +349 -0
- package/src/shared/lib/chat/tool/wait-facts.ts +50 -0
- package/src/shared/lib/chat/tool-output.test.ts +206 -0
- package/src/shared/lib/chat/tool-output.ts +68 -0
- package/src/shared/lib/chat/tool-status.ts +20 -0
- package/src/shared/lib/chat/xml-envelope.test.ts +208 -0
- package/src/shared/lib/chat/xml-envelope.ts +151 -0
- package/src/shared/lib/chat/xml-tag.test.ts +257 -0
- package/src/shared/lib/chat/xml-tag.ts +221 -0
- package/src/shared/lib/code/ansi.ts +24 -0
- package/src/shared/lib/code/editor/commands.test.ts +155 -0
- package/src/shared/lib/code/editor/commands.ts +260 -0
- package/src/shared/lib/code/editor/edits.test.ts +100 -0
- package/src/shared/lib/code/editor/edits.ts +122 -0
- package/src/shared/lib/code/editor/find-status.test.ts +50 -0
- package/src/shared/lib/code/editor/find-status.ts +36 -0
- package/src/shared/lib/code/editor/find.test.ts +203 -0
- package/src/shared/lib/code/editor/find.ts +236 -0
- package/src/shared/lib/code/editor/history.test.ts +118 -0
- package/src/shared/lib/code/editor/history.ts +101 -0
- package/src/shared/lib/code/editor/keymap.test.ts +109 -0
- package/src/shared/lib/code/editor/keymap.ts +151 -0
- package/src/shared/lib/code/editor/layers.test.ts +77 -0
- package/src/shared/lib/code/editor/layers.ts +67 -0
- package/src/shared/lib/code/editor/line-edits.test.ts +131 -0
- package/src/shared/lib/code/editor/line-edits.ts +159 -0
- package/src/shared/lib/code/editor/lines.test.ts +81 -0
- package/src/shared/lib/code/editor/lines.ts +83 -0
- package/src/shared/lib/code/editor/marks.test.ts +86 -0
- package/src/shared/lib/code/editor/marks.ts +106 -0
- package/src/shared/lib/code/editor/occurrences.test.ts +117 -0
- package/src/shared/lib/code/editor/occurrences.ts +111 -0
- package/src/shared/lib/code/editor/palette.test.ts +91 -0
- package/src/shared/lib/code/editor/palette.ts +92 -0
- package/src/shared/lib/code/editor/reset-css.test.ts +35 -0
- package/src/shared/lib/code/editor/reset-css.ts +32 -0
- package/src/shared/lib/code/editor/text-commands.test.ts +178 -0
- package/src/shared/lib/code/editor/text-commands.ts +154 -0
- package/src/shared/lib/code/editor/typography.test.ts +93 -0
- package/src/shared/lib/code/editor/typography.ts +86 -0
- package/src/shared/lib/code/format.ts +17 -0
- package/src/shared/lib/code/highlight-cache.test.ts +121 -0
- package/src/shared/lib/code/highlight-cache.ts +99 -0
- package/src/shared/lib/code/highlighter-lazy.ts +106 -0
- package/src/shared/lib/code/highlighter.ts +132 -0
- package/src/shared/lib/code/language.ts +165 -0
- package/src/shared/lib/code/lazy-window.test.ts +161 -0
- package/src/shared/lib/code/lazy-window.ts +156 -0
- package/src/shared/lib/code/line-endings.test.ts +38 -0
- package/src/shared/lib/code/line-endings.ts +56 -0
- package/src/shared/lib/code/outline/document.ts +56 -0
- package/src/shared/lib/code/outline/extract.test.ts +246 -0
- package/src/shared/lib/code/outline/extract.ts +57 -0
- package/src/shared/lib/code/outline/languages.test.ts +246 -0
- package/src/shared/lib/code/outline/languages.ts +266 -0
- package/src/shared/lib/code/outline/rules.ts +285 -0
- package/src/shared/lib/code/outline/scan.ts +184 -0
- package/src/shared/lib/code/outline/spec.ts +24 -0
- package/src/shared/lib/code/outline/types.ts +87 -0
- package/src/shared/lib/code/outline/walk.ts +231 -0
- package/src/shared/lib/code/parser.ts +237 -0
- package/src/shared/lib/code/shiki-langs.ts +93 -0
- package/src/shared/lib/code/shiki-themes.ts +18 -0
- package/src/shared/lib/code/syntax-highlight.test.ts +340 -0
- package/src/shared/lib/code/syntax-highlight.ts +207 -0
- package/src/shared/lib/code/windowed-highlight.ts +114 -0
- package/src/shared/lib/db/transaction.server.ts +20 -0
- package/src/shared/lib/dictation/audio.ts +75 -0
- package/src/shared/lib/dictation/models.test.ts +95 -0
- package/src/shared/lib/dictation/models.ts +139 -0
- package/src/shared/lib/dictation/protocol.ts +110 -0
- package/src/shared/lib/fonts/NOTICE.md +44 -0
- package/src/shared/lib/fonts/nerd-symbols.css +55 -0
- package/src/shared/lib/fonts/nerd-symbols.test.ts +176 -0
- package/src/shared/lib/fonts/symbols-nerd-font-mono.woff2 +0 -0
- package/src/shared/lib/format/number.test.ts +127 -0
- package/src/shared/lib/format/number.ts +69 -0
- package/src/shared/lib/format/time.test.ts +113 -0
- package/src/shared/lib/format/time.ts +58 -0
- package/src/shared/lib/fs/browse.ts +45 -0
- package/src/shared/lib/fs/clipboard.test.ts +182 -0
- package/src/shared/lib/fs/clipboard.ts +182 -0
- package/src/shared/lib/fs/commit-count.test.ts +50 -0
- package/src/shared/lib/fs/commit-count.ts +34 -0
- package/src/shared/lib/fs/commit-page.ts +10 -0
- package/src/shared/lib/fs/commit-row.ts +65 -0
- package/src/shared/lib/fs/csv.ts +159 -0
- package/src/shared/lib/fs/diff-parser.test.ts +116 -0
- package/src/shared/lib/fs/diff-parser.ts +213 -0
- package/src/shared/lib/fs/document-kind.test.ts +189 -0
- package/src/shared/lib/fs/document-kind.ts +136 -0
- package/src/shared/lib/fs/excerpt-diff.test.ts +130 -0
- package/src/shared/lib/fs/excerpt-diff.ts +127 -0
- package/src/shared/lib/fs/file-kind-classify.test.ts +143 -0
- package/src/shared/lib/fs/file-kind.test.ts +256 -0
- package/src/shared/lib/fs/file-kind.ts +283 -0
- package/src/shared/lib/fs/file-tree.ts +31 -0
- package/src/shared/lib/fs/fs-helpers.test.ts +318 -0
- package/src/shared/lib/fs/git-graph.test.ts +211 -0
- package/src/shared/lib/fs/git-graph.ts +184 -0
- package/src/shared/lib/fs/git-status.test.ts +245 -0
- package/src/shared/lib/fs/git-status.ts +196 -0
- package/src/shared/lib/fs/git-unmerged.test.ts +123 -0
- package/src/shared/lib/fs/git-unmerged.ts +100 -0
- package/src/shared/lib/fs/paths.test.ts +90 -0
- package/src/shared/lib/fs/paths.ts +109 -0
- package/src/shared/lib/fs/repo-groups.ts +85 -0
- package/src/shared/lib/fs/repo-label.test.ts +118 -0
- package/src/shared/lib/fs/repo-label.ts +55 -0
- package/src/shared/lib/fs/search-list.test.ts +139 -0
- package/src/shared/lib/fs/search-list.ts +187 -0
- package/src/shared/lib/fs/search-row.test.ts +66 -0
- package/src/shared/lib/fs/search-row.ts +55 -0
- package/src/shared/lib/git/url.test.ts +69 -0
- package/src/shared/lib/git/url.ts +76 -0
- package/src/shared/lib/markdown/autolink.test.ts +32 -0
- package/src/shared/lib/markdown/autolink.ts +50 -0
- package/src/shared/lib/markdown/directives.ts +96 -0
- package/src/shared/lib/markdown/document-urls.test.ts +68 -0
- package/src/shared/lib/markdown/document-urls.ts +118 -0
- package/src/shared/lib/markdown/fira-code-fonts.css +51 -0
- package/src/shared/lib/markdown/katex-fonts.css +20 -0
- package/src/shared/lib/markdown/katex.ts +111 -0
- package/src/shared/lib/markdown/marked.ts +336 -0
- package/src/shared/lib/markdown/math.test.ts +178 -0
- package/src/shared/lib/markdown/mermaid.ts +169 -0
- package/src/shared/lib/markdown/sanitize.ts +191 -0
- package/src/shared/lib/markdown/table.test.ts +136 -0
- package/src/shared/lib/models/catalog.ts +255 -0
- package/src/shared/lib/models/client.ts +62 -0
- package/src/shared/lib/models/identity.ts +21 -0
- package/src/shared/lib/models/models-shared.test.ts +338 -0
- package/src/shared/lib/models/preferences.test.ts +131 -0
- package/src/shared/lib/models/preferences.ts +88 -0
- package/src/shared/lib/models/provider/cleanup.ts +20 -0
- package/src/shared/lib/models/provider/connection.ts +78 -0
- package/src/shared/lib/models/provider/dialect.test.ts +258 -0
- package/src/shared/lib/models/provider/dialect.ts +208 -0
- package/src/shared/lib/models/provider/glyph.test.ts +116 -0
- package/src/shared/lib/models/provider/glyph.ts +213 -0
- package/src/shared/lib/models/provider/label.ts +40 -0
- package/src/shared/lib/models/provider/models.test.ts +306 -0
- package/src/shared/lib/models/provider/models.ts +227 -0
- package/src/shared/lib/models/provider/presets.test.ts +198 -0
- package/src/shared/lib/models/provider/presets.ts +83 -0
- package/src/shared/lib/models/provider/provider-ui.test.ts +316 -0
- package/src/shared/lib/models/remote-list.ts +125 -0
- package/src/shared/lib/models/server-cache.ts +37 -0
- package/src/shared/lib/models/thinking-levels.test.ts +102 -0
- package/src/shared/lib/models/thinking-levels.ts +68 -0
- package/src/shared/lib/omp/config/access-mode.server.ts +27 -0
- package/src/shared/lib/omp/config/access-mode.ts +31 -0
- package/src/shared/lib/omp/config/schema-extras.ts +252 -0
- package/src/shared/lib/omp/config/schema-types.ts +49 -0
- package/src/shared/lib/omp/config/schema.test.ts +214 -0
- package/src/shared/lib/omp/config/schema.ts +81 -0
- package/src/shared/lib/omp/dialog-methods.ts +57 -0
- package/src/shared/lib/omp/mode/budget.ts +21 -0
- package/src/shared/lib/omp/mode/client-signal.ts +35 -0
- package/src/shared/lib/omp/mode/constants.ts +91 -0
- package/src/shared/lib/omp/mode/format.ts +36 -0
- package/src/shared/lib/omp/mode/markers.test.ts +111 -0
- package/src/shared/lib/omp/mode/markers.ts +105 -0
- package/src/shared/lib/omp/mode/notice.test.ts +107 -0
- package/src/shared/lib/omp/mode/notice.ts +135 -0
- package/src/shared/lib/omp/mode/status.ts +39 -0
- package/src/shared/lib/omp/mode/tables.test.ts +217 -0
- package/src/shared/lib/omp/mode/types.ts +190 -0
- package/src/shared/lib/omp/rpc/frame.test.ts +241 -0
- package/src/shared/lib/omp/rpc/frame.ts +151 -0
- package/src/shared/lib/omp/session/default-title.test.ts +79 -0
- package/src/shared/lib/omp/session/default-title.ts +83 -0
- package/src/shared/lib/omp/session/hashline-patch.test.ts +89 -0
- package/src/shared/lib/omp/session/hashline-patch.ts +134 -0
- package/src/shared/lib/omp/session/inlined-attachments.test.ts +82 -0
- package/src/shared/lib/omp/session/jsonl.test.ts +178 -0
- package/src/shared/lib/omp/session/jsonl.ts +182 -0
- package/src/shared/lib/omp/session/mapper.test.ts +299 -0
- package/src/shared/lib/omp/session/mapper.ts +175 -0
- package/src/shared/lib/omp/session/messages-map.test.ts +340 -0
- package/src/shared/lib/omp/session/messages-map.ts +259 -0
- package/src/shared/lib/omp/session/messages-parse.ts +73 -0
- package/src/shared/lib/omp/session/narration.test.ts +113 -0
- package/src/shared/lib/omp/session/operator-title.test.ts +99 -0
- package/src/shared/lib/omp/session/operator-title.ts +136 -0
- package/src/shared/lib/omp/session/parse-message-blocks-attachments.test.ts +156 -0
- package/src/shared/lib/omp/session/parse-message-blocks-toolcall.test.ts +106 -0
- package/src/shared/lib/omp/session/parse-message-blocks.test.ts +322 -0
- package/src/shared/lib/omp/session/parse-message-blocks.ts +328 -0
- package/src/shared/lib/omp/session/prewarm-misc.test.ts +326 -0
- package/src/shared/lib/omp/session/prewarm.ts +41 -0
- package/src/shared/lib/omp/session/proc.test.ts +256 -0
- package/src/shared/lib/omp/session/proc.ts +322 -0
- package/src/shared/lib/omp/session/schema-migrations.ts +35 -0
- package/src/shared/lib/omp/session/sidebar.test.ts +180 -0
- package/src/shared/lib/omp/session/sidebar.ts +77 -0
- package/src/shared/lib/omp/session/skill-bubble.test.ts +94 -0
- package/src/shared/lib/omp/session/stream-heal.server.test.ts +123 -0
- package/src/shared/lib/omp/session/stream-heal.server.ts +175 -0
- package/src/shared/lib/omp/session/stream-state.server.test.ts +106 -0
- package/src/shared/lib/omp/session/stream-state.server.ts +199 -0
- package/src/shared/lib/omp/session/telemetry-blocks.ts +60 -0
- package/src/shared/lib/omp/session/timestamps.ts +20 -0
- package/src/shared/lib/omp/session/tool-duration.test.ts +61 -0
- package/src/shared/lib/omp/session/tool-images.test.ts +95 -0
- package/src/shared/lib/omp/session/tool-images.ts +98 -0
- package/src/shared/lib/omp/session/turn-error.ts +40 -0
- package/src/shared/lib/omp/session/wait.test.ts +167 -0
- package/src/shared/lib/omp/session/wait.ts +267 -0
- package/src/shared/lib/omp/subagent/control.ts +46 -0
- package/src/shared/lib/omp/subagent/history/client.ts +76 -0
- package/src/shared/lib/omp/subagent/history/settlement.test.ts +344 -0
- package/src/shared/lib/omp/subagent/history/settlement.ts +113 -0
- package/src/shared/lib/omp/subagent/history/status.ts +40 -0
- package/src/shared/lib/omp/subagent/label.test.ts +94 -0
- package/src/shared/lib/omp/subagent/label.ts +84 -0
- package/src/shared/lib/omp/subagent/parse.test.ts +88 -0
- package/src/shared/lib/omp/subagent/parse.ts +301 -0
- package/src/shared/lib/omp/subagent/result-details.ts +53 -0
- package/src/shared/lib/omp/subagent/transcript-client.test.ts +100 -0
- package/src/shared/lib/omp/subagent/transcript-client.ts +194 -0
- package/src/shared/lib/panels/capabilities.test.ts +78 -0
- package/src/shared/lib/panels/capabilities.ts +40 -0
- package/src/shared/lib/panels/css-scope.test.ts +98 -0
- package/src/shared/lib/panels/css-scope.ts +171 -0
- package/src/shared/lib/panels/resolve-asset.test.ts +74 -0
- package/src/shared/lib/panels/resolve-asset.ts +45 -0
- package/src/shared/lib/plugins/protocol.ts +70 -0
- package/src/shared/lib/realtime/client.ts +328 -0
- package/src/shared/lib/realtime/connection.test.ts +301 -0
- package/src/shared/lib/realtime/connection.ts +314 -0
- package/src/shared/lib/realtime/protocol.ts +297 -0
- package/src/shared/lib/realtime/state.ts +174 -0
- package/src/shared/lib/schedule/parse.test.ts +187 -0
- package/src/shared/lib/schedule/parse.ts +303 -0
- package/src/shared/lib/settings/client.test.ts +72 -0
- package/src/shared/lib/settings/client.ts +129 -0
- package/src/shared/lib/settings/diff.test.ts +31 -0
- package/src/shared/lib/settings/diff.ts +37 -0
- package/src/shared/lib/settings/keys.ts +51 -0
- package/src/shared/lib/theme/catalog.test.ts +168 -0
- package/src/shared/lib/theme/catalog.ts +98 -0
- package/src/shared/lib/theme/chrome.test.ts +53 -0
- package/src/shared/lib/theme/chrome.ts +41 -0
- package/src/shared/lib/theme/color.test.ts +102 -0
- package/src/shared/lib/theme/color.ts +88 -0
- package/src/shared/lib/theme/css.ts +70 -0
- package/src/shared/lib/theme/palettes/dark.ts +313 -0
- package/src/shared/lib/theme/palettes/kabmo.ts +61 -0
- package/src/shared/lib/theme/palettes/light.ts +313 -0
- package/src/shared/lib/theme/theme.test.ts +199 -0
- package/src/shared/lib/ui/key-binding.test.ts +134 -0
- package/src/shared/lib/ui/key-binding.ts +143 -0
- package/src/shared/lib/updates/popup-state.test.ts +98 -0
- package/src/shared/lib/updates/popup-state.ts +67 -0
- package/src/shared/lib/updates/popup.test.ts +30 -0
- package/src/shared/lib/updates/progress.test.ts +54 -0
- package/src/shared/lib/updates/progress.ts +50 -0
- package/src/shared/lib/updates/semver.test.ts +147 -0
- package/src/shared/lib/updates/semver.ts +109 -0
- package/src/shared/lib/util/guards.test.ts +48 -0
- package/src/shared/lib/util/guards.ts +14 -0
- package/src/shared/lib/util/platform.test.ts +87 -0
- package/src/shared/lib/util/platform.ts +30 -0
- package/src/shared/lib/wiki/document-urls.test.ts +85 -0
- package/src/shared/lib/wiki/document-urls.ts +109 -0
- package/src/shared/lib/wiki/pages.test.ts +265 -0
- package/src/shared/lib/wiki/pages.ts +242 -0
- package/src/shared/lib/wiki/sidebar.test.ts +265 -0
- package/src/shared/lib/wiki/sidebar.ts +170 -0
- package/src/shared/lib/workspace/active-project.ts +42 -0
- package/src/shared/lib/workspace/batch-select.test.ts +92 -0
- package/src/shared/lib/workspace/batch-select.ts +86 -0
- package/src/shared/lib/workspace/file-tab-id.ts +29 -0
- package/src/shared/lib/workspace/keymap.test.ts +82 -0
- package/src/shared/lib/workspace/keymap.ts +30 -0
- package/src/shared/lib/workspace/panel-ids.test.ts +66 -0
- package/src/shared/lib/workspace/panel-ids.ts +59 -0
- package/src/shared/lib/workspace/panel-order.test.ts +133 -0
- package/src/shared/lib/workspace/panel-order.ts +127 -0
- package/src/shared/lib/workspace/panel-widths.test.ts +276 -0
- package/src/shared/lib/workspace/panel-widths.ts +329 -0
- package/src/shared/lib/workspace/project-icon.ts +29 -0
- package/src/shared/lib/workspace/project-settings-migration.ts +62 -0
- package/src/shared/lib/workspace/project-settings.test.ts +350 -0
- package/src/shared/lib/workspace/project-settings.ts +139 -0
- package/src/shared/lib/workspace/refresh-cadence.test.ts +117 -0
- package/src/shared/lib/workspace/refresh-cadence.ts +58 -0
- package/src/shared/lib/workspace/relative-time.ts +25 -0
- package/src/shared/lib/workspace/right-panels.ts +110 -0
- package/src/shared/lib/workspace/schema-migrations.ts +19 -0
- package/src/shared/lib/workspace/scroll-positions.test.ts +82 -0
- package/src/shared/lib/workspace/scroll-positions.ts +101 -0
- package/src/shared/lib/workspace/session-state/listeners.ts +70 -0
- package/src/shared/lib/workspace/session-state/store.test.ts +328 -0
- package/src/shared/lib/workspace/session-state/store.ts +330 -0
- package/src/shared/lib/workspace/session-visibility.test.ts +117 -0
- package/src/shared/lib/workspace/session-visibility.ts +76 -0
- package/src/shared/lib/workspace/sidebar-expanded.ts +23 -0
- package/src/shared/lib/workspace/sidebar-sort.test.ts +210 -0
- package/src/shared/lib/workspace/sidebar-sort.ts +140 -0
- package/src/shared/lib/workspace/sidebar-toolbar.test.ts +77 -0
- package/src/shared/lib/workspace/sidebar-toolbar.ts +106 -0
- package/src/shared/lib/workspace/sidebar-width.test.ts +111 -0
- package/src/shared/lib/workspace/sidebar-width.ts +106 -0
- package/src/shared/lib/workspace/terminal/keys.test.ts +189 -0
- package/src/shared/lib/workspace/terminal/keys.ts +225 -0
- package/src/shared/lib/workspace/terminal/protocol.test.ts +242 -0
- package/src/shared/lib/workspace/terminal/protocol.ts +222 -0
- package/src/shared/lib/workspace/workspace-modules.test.ts +300 -0
- package/src/shared/types/browser.ts +58 -0
- package/src/shared/types/btw.ts +123 -0
- package/src/shared/types/chat.ts +330 -0
- package/src/shared/types/context.ts +87 -0
- package/src/shared/types/fs.ts +77 -0
- package/src/shared/types/git.ts +169 -0
- package/src/shared/types/index.ts +31 -0
- package/src/shared/types/models.ts +101 -0
- package/src/shared/types/omp/agent.ts +223 -0
- package/src/shared/types/omp/instructions.ts +38 -0
- package/src/shared/types/omp/session.ts +156 -0
- package/src/shared/types/omp/subagent.ts +186 -0
- package/src/shared/types/panels.ts +334 -0
- package/src/shared/types/plan.ts +42 -0
- package/src/shared/types/realtime.ts +34 -0
- package/src/shared/types/schedule.ts +67 -0
- package/src/shared/types/settings/agent.ts +16 -0
- package/src/shared/types/settings/command.ts +38 -0
- package/src/shared/types/settings/mcp.ts +22 -0
- package/src/shared/types/settings/plugin.ts +107 -0
- package/src/shared/types/settings/project.ts +18 -0
- package/src/shared/types/settings/provider.ts +135 -0
- package/src/shared/types/settings/skill.ts +48 -0
- package/src/shared/types/settings/state.ts +81 -0
- package/src/shared/types/settings/usage.ts +237 -0
- package/src/shared/types/terminal.ts +12 -0
- package/src/shared/types/theme.ts +48 -0
- package/src/shared/types/todo.ts +108 -0
- package/src/shared/types/tokenUsage.ts +44 -0
- package/src/shared/types/updates.ts +99 -0
- package/src/shared/types/wiki.ts +132 -0
- package/src/shared/types/workspace.ts +69 -0
- package/src/test-support/executable-stub.ts +107 -0
- package/src/test-support/fake-git.ts +121 -0
- package/src/test-support/fake-omp-fork.ts +146 -0
- package/src/test-support/file-actions.test-util.ts +206 -0
- package/src/test-support/file-clipboard.test-util.ts +52 -0
- package/src/test-support/file-editor.test-util.ts +182 -0
- package/src/test-support/file-explorer.test-util.ts +317 -0
- package/src/test-support/isolated-db.ts +51 -0
- package/src/test-support/peer-harness.ts +205 -0
- package/src/test-support/platform.test.ts +48 -0
- package/src/test-support/platform.ts +51 -0
- package/src/test-support/pristine-globals.ts +124 -0
- package/src/test-support/realtime-server.ts +154 -0
- package/src/test-support/remove-dir.ts +78 -0
- package/tsconfig.json +67 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WHY: everything the composer sends is rewritten before it reaches omp, so a
|
|
8
|
+
* translation bug silently corrupts the user's prompt. `@file:` tokens are
|
|
9
|
+
* rewritten to omp's native file-mention syntax, and `@agent` tokens are
|
|
10
|
+
* stripped from the body and replaced by a delegation header. The edge cases
|
|
11
|
+
* that matter are the ones that decide whether a token is a mention at all:
|
|
12
|
+
* quoted paths with spaces, trailing prose punctuation, a bare path that must
|
|
13
|
+
* NOT be swallowed as an agent name, and a draft that is nothing but mentions.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { describe, expect, test } from 'bun:test';
|
|
17
|
+
|
|
18
|
+
import { extractAgentMentions, translateAgentMentions, translateFileMentions } from '@/shared/lib/chat/composer/translate';
|
|
19
|
+
|
|
20
|
+
const AGENTS = ['architect', 'sonic', 'Archivist'];
|
|
21
|
+
|
|
22
|
+
describe('translateFileMentions', () => {
|
|
23
|
+
test('rewrites a bare @file: token to a native @path mention', () => {
|
|
24
|
+
expect(translateFileMentions('@file:src/a.ts')).toBe('@src/a.ts');
|
|
25
|
+
expect(translateFileMentions('read @file:src/lib/x.ts now')).toBe('read @src/lib/x.ts now');
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('rewrites a quoted @file: token, keeping the quotes', () => {
|
|
29
|
+
expect(translateFileMentions('@"file:my docs/a.ts"')).toBe('@"my docs/a.ts"');
|
|
30
|
+
expect(translateFileMentions('see @"file:a b.txt" end')).toBe('see @"a b.txt" end');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('the quoted form is rewritten before the bare form can see it', () => {
|
|
34
|
+
// The bare regex needs `@file:` immediately; after the quoted pass the
|
|
35
|
+
// token is `@"..."`, so the two rules cannot fight over one mention.
|
|
36
|
+
expect(translateFileMentions('@"file:one two" @file:three')).toBe('@"one two" @three');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('every opening delimiter qualifies, and all occurrences are rewritten', () => {
|
|
40
|
+
expect(translateFileMentions('(@file:a.ts)')).toBe('(@a.ts)');
|
|
41
|
+
expect(translateFileMentions('[@file:a.ts]')).toBe('[@a.ts]');
|
|
42
|
+
expect(translateFileMentions('{@file:a.ts}')).toBe('{@a.ts}');
|
|
43
|
+
expect(translateFileMentions('@file:a.ts and @file:b.ts')).toBe('@a.ts and @b.ts');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('a mid-token @file: is left alone', () => {
|
|
47
|
+
expect(translateFileMentions('foo@file:a.ts')).toBe('foo@file:a.ts');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('text with no file mentions is untouched', () => {
|
|
51
|
+
expect(translateFileMentions('plain text')).toBe('plain text');
|
|
52
|
+
expect(translateFileMentions('@sonic do it')).toBe('@sonic do it');
|
|
53
|
+
expect(translateFileMentions('')).toBe('');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test('a trailing period in the path is preserved', () => {
|
|
57
|
+
// A path can legitimately end in `.`, and the picker inserts a space, so
|
|
58
|
+
// no trailing-punctuation stripping happens here.
|
|
59
|
+
expect(translateFileMentions('@file:foo.test.ts')).toBe('@foo.test.ts');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe('extractAgentMentions', () => {
|
|
64
|
+
test('a bare known name is matched with its span over @token', () => {
|
|
65
|
+
expect(extractAgentMentions('@architect do it', AGENTS)).toEqual([{ name: 'architect', start: 0, end: 10 }]);
|
|
66
|
+
expect(extractAgentMentions('see @sonic', AGENTS)).toEqual([{ name: 'sonic', start: 4, end: 10 }]);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test('name matching is case-insensitive but the original casing is kept', () => {
|
|
70
|
+
expect(extractAgentMentions('@Architect hi', AGENTS)).toEqual([{ name: 'Architect', start: 0, end: 10 }]);
|
|
71
|
+
expect(extractAgentMentions('@SONIC hi', AGENTS)).toEqual([{ name: 'SONIC', start: 0, end: 6 }]);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test('quoted tokens are matched verbatim, with the span covering the quotes', () => {
|
|
75
|
+
expect(extractAgentMentions('@"architect" hi', AGENTS)).toEqual([{ name: 'architect', start: 0, end: 12 }]);
|
|
76
|
+
expect(extractAgentMentions("@'sonic' hi", AGENTS)).toEqual([{ name: 'sonic', start: 0, end: 8 }]);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('trailing prose punctuation is stripped before matching a bare token', () => {
|
|
80
|
+
// Span ends at the name, leaving the `.` in the draft.
|
|
81
|
+
expect(extractAgentMentions('ping @architect.', AGENTS)).toEqual([{ name: 'architect', start: 5, end: 15 }]);
|
|
82
|
+
expect(extractAgentMentions('@sonic, go', AGENTS)).toEqual([{ name: 'sonic', start: 0, end: 6 }]);
|
|
83
|
+
expect(extractAgentMentions('(@sonic)', AGENTS)).toEqual([{ name: 'sonic', start: 1, end: 7 }]);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test('a bare path is never swallowed as an agent name', () => {
|
|
87
|
+
// `build` is not in this pool, but even a known name must not match when
|
|
88
|
+
// the whole token is `build/x.ts`.
|
|
89
|
+
expect(extractAgentMentions('@build/x.ts', ['build'])).toEqual([]);
|
|
90
|
+
expect(extractAgentMentions('@sonic/x.ts', AGENTS)).toEqual([]);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test('a mid-token or unknown mention yields nothing', () => {
|
|
94
|
+
expect(extractAgentMentions('foo@architect', AGENTS)).toEqual([]);
|
|
95
|
+
expect(extractAgentMentions('@nobody hi', AGENTS)).toEqual([]);
|
|
96
|
+
expect(extractAgentMentions('no mentions here', AGENTS)).toEqual([]);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('an empty agent pool matches nothing', () => {
|
|
100
|
+
expect(extractAgentMentions('@architect', [])).toEqual([]);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('every occurrence is returned, duplicates included', () => {
|
|
104
|
+
expect(extractAgentMentions('@sonic and @sonic', AGENTS)).toEqual([
|
|
105
|
+
{ name: 'sonic', start: 0, end: 6 },
|
|
106
|
+
{ name: 'sonic', start: 11, end: 17 },
|
|
107
|
+
]);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test('a quoted unknown name is rejected like a bare one', () => {
|
|
111
|
+
expect(extractAgentMentions('@"nobody" hi', AGENTS)).toEqual([]);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe('translateAgentMentions', () => {
|
|
116
|
+
const header = (ids: string, quoted: string): string =>
|
|
117
|
+
`Use the task tool to delegate this request to the following oh-my-pi subagent(s): ${quoted} (agent id: ${ids}).\n\n`;
|
|
118
|
+
|
|
119
|
+
test('no mentions leaves the text untouched and the list empty', () => {
|
|
120
|
+
expect(translateAgentMentions('just a prompt', AGENTS)).toEqual({ text: 'just a prompt', agents: [] });
|
|
121
|
+
expect(translateAgentMentions('@nobody', AGENTS)).toEqual({ text: '@nobody', agents: [] });
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test('a mention is removed from the body and named in the header', () => {
|
|
125
|
+
expect(translateAgentMentions('@architect fix the bug', AGENTS)).toEqual({
|
|
126
|
+
text: `${header('architect', '`architect`')}fix the bug`,
|
|
127
|
+
agents: ['architect'],
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test('several agents are listed in encounter order', () => {
|
|
132
|
+
expect(translateAgentMentions('@sonic then @architect go', AGENTS)).toEqual({
|
|
133
|
+
text: `${header('sonic, architect', '`sonic`, `architect`')}then go`,
|
|
134
|
+
agents: ['sonic', 'architect'],
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test('duplicate mentions collapse to one agent but are all removed from the body', () => {
|
|
139
|
+
expect(translateAgentMentions('@sonic and @sonic again', AGENTS)).toEqual({
|
|
140
|
+
text: `${header('sonic', '`sonic`')}and again`,
|
|
141
|
+
agents: ['sonic'],
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test('a draft that is only mentions keeps the original text', () => {
|
|
146
|
+
// There is no request body to delegate, so rewriting it would lose the
|
|
147
|
+
// user's input; the agents list is still reported.
|
|
148
|
+
expect(translateAgentMentions('@sonic @architect', AGENTS)).toEqual({
|
|
149
|
+
text: '@sonic @architect',
|
|
150
|
+
agents: ['sonic', 'architect'],
|
|
151
|
+
});
|
|
152
|
+
expect(translateAgentMentions(' @sonic ', AGENTS)).toEqual({ text: ' @sonic ', agents: ['sonic'] });
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
test('the gap a removed mention leaves is closed, without reflowing the body', () => {
|
|
156
|
+
expect(translateAgentMentions('@sonic do it', AGENTS)).toEqual({
|
|
157
|
+
// The mention's OWN separator and its gap are collapsed…
|
|
158
|
+
text: `${header('sonic', '`sonic`')}do it`,
|
|
159
|
+
agents: ['sonic'],
|
|
160
|
+
});
|
|
161
|
+
// …while the body's OWN spacing between other words is left alone. The old
|
|
162
|
+
// rule reflowed the whole body here (`do it` → `do it`) and, on the same
|
|
163
|
+
// pass, dropped every blank line — `@architect\n\nx\n\n---\n\ny` came back
|
|
164
|
+
// with the divider directly under `x`, a setext H2 underline rather than a
|
|
165
|
+
// thematic break.
|
|
166
|
+
expect(translateAgentMentions('@sonic\n\nline\n\n---\n\ntail', AGENTS)).toEqual({
|
|
167
|
+
text: `${header('sonic', '`sonic`')}line\n\n---\n\ntail`,
|
|
168
|
+
agents: ['sonic'],
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test('trailing punctuation stays in the body', () => {
|
|
173
|
+
expect(translateAgentMentions('@architect, please plan', AGENTS)).toEqual({
|
|
174
|
+
text: `${header('architect', '`architect`')}please plan`,
|
|
175
|
+
agents: ['architect'],
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test('a quoted mention is translated like a bare one', () => {
|
|
180
|
+
expect(translateAgentMentions('@"architect" plan it', AGENTS)).toEqual({
|
|
181
|
+
text: `${header('architect', '`architect`')}plan it`,
|
|
182
|
+
agents: ['architect'],
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test('the name casing the user typed is preserved in the header', () => {
|
|
187
|
+
expect(translateAgentMentions('@Archivist sort this', AGENTS)).toEqual({
|
|
188
|
+
text: `${header('Archivist', '`Archivist`')}sort this`,
|
|
189
|
+
agents: ['Archivist'],
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('a mid-token mention is not translated', () => {
|
|
194
|
+
expect(translateAgentMentions('email foo@architect now', AGENTS)).toEqual({
|
|
195
|
+
text: 'email foo@architect now',
|
|
196
|
+
agents: [],
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export interface AgentMentionMatch {
|
|
2
|
+
name: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** Picker-inserted `@file:` mentions (quoted form when the path has spaces). */
|
|
8
|
+
const FILE_MENTION_QUOTED_RE = /(^|[\s([{])@"file:([^"]+)"/g;
|
|
9
|
+
const FILE_MENTION_BARE_RE = /(^|[\s([{])@file:(\S+)/g;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Rewrite picker-inserted `@file:<path>` / `@"file:<path with spaces>"`
|
|
13
|
+
* into oh-my-pi's native file-mention syntax `@<path>` / `@"<path>"`,
|
|
14
|
+
* which the omp runtime expands into attached file contents. The `file:`
|
|
15
|
+
* namespace means a file token can never collide with a bare `@agent`.
|
|
16
|
+
*
|
|
17
|
+
* NOTE: no trailing-punctuation stripping here — a path can legitimately end
|
|
18
|
+
* in `.`/`)` etc. (e.g. `foo.test.ts`), and the picker always inserts a
|
|
19
|
+
* trailing space anyway.
|
|
20
|
+
*/
|
|
21
|
+
export function translateFileMentions(text: string): string {
|
|
22
|
+
return text
|
|
23
|
+
.replace(FILE_MENTION_QUOTED_RE, '$1@"$2"')
|
|
24
|
+
.replace(FILE_MENTION_BARE_RE, '$1@$2');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* `@` at string start or preceded by whitespace/`(`/`[`/`{`, followed by a
|
|
29
|
+
* quoted (`@"a b"` / `@'a b'`) or bare (`\S+`) token. A mention is only
|
|
30
|
+
* treated as an agent when the WHOLE token equals a known agent name, so a
|
|
31
|
+
* bare file path like `@build/x.ts` is never swallowed as agent `build`.
|
|
32
|
+
*/
|
|
33
|
+
const MENTION_RE = /(^|[\s([{])@("([^"]+)"|'([^']+)'|(\S+))/g;
|
|
34
|
+
|
|
35
|
+
/** Trailing prose punctuation stripped from a bare token before name matching. */
|
|
36
|
+
const TRAILING_PUNCT_RE = /[.,;:!?)\]}]+$/;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Find every `@token` whose name matches a known agent. Returns each
|
|
40
|
+
* occurrence (duplicates included) with the span covering `@token`, so the
|
|
41
|
+
* caller can remove all of them; `translateAgentMentions` dedupes the names.
|
|
42
|
+
*/
|
|
43
|
+
export function extractAgentMentions(text: string, agentNames: readonly string[]): AgentMentionMatch[] {
|
|
44
|
+
const known = new Set(agentNames.map((name) => name.toLowerCase()));
|
|
45
|
+
const matches: AgentMentionMatch[] = [];
|
|
46
|
+
|
|
47
|
+
for (const m of text.matchAll(MENTION_RE)) {
|
|
48
|
+
const start = m.index + m[1].length;
|
|
49
|
+
const quoted = m[3] ?? m[4];
|
|
50
|
+
|
|
51
|
+
// Quoted tokens: name is the inner text verbatim; span covers `@` + quotes.
|
|
52
|
+
if (quoted !== undefined) {
|
|
53
|
+
if (!known.has(quoted.toLowerCase())) continue;
|
|
54
|
+
matches.push({ name: quoted, start, end: start + 1 + (m[2] ?? '').length });
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Bare tokens: strip trailing punctuation before comparing (e.g. `@architect.`).
|
|
59
|
+
const cleaned = (m[5] ?? '').replace(TRAILING_PUNCT_RE, '');
|
|
60
|
+
if (!known.has(cleaned.toLowerCase())) continue;
|
|
61
|
+
matches.push({ name: cleaned, start, end: start + 1 + cleaned.length });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return matches;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Close the gaps left by removed mentions without touching the body's own
|
|
69
|
+
* whitespace.
|
|
70
|
+
*
|
|
71
|
+
* The rule this replaced ran `[ \t]+ → ' '` and `\n{2,} → '\n'` over the WHOLE
|
|
72
|
+
* body, which is a markdown reflow: for `@architect\n\nDescribe it\n\n---\n\nDo
|
|
73
|
+
* X` the blank line before `---` disappeared, so the divider landed under the
|
|
74
|
+
* paragraph as a setext H2 underline instead of a thematic break, and the
|
|
75
|
+
* user's own paragraphs merged into one.
|
|
76
|
+
*
|
|
77
|
+
* A removal gap is the token, plus the run of spaces or tabs that followed it
|
|
78
|
+
* (the span already excludes the separator before it). Only the mention's OWN
|
|
79
|
+
* line is at stake: a mention that occupied its line takes that line's newline
|
|
80
|
+
* with it, while the whitespace the USER wrote between the body's own words is
|
|
81
|
+
* never touched — the old rule reflowed all of it, and dropped every blank line
|
|
82
|
+
* on the way.
|
|
83
|
+
*/
|
|
84
|
+
function collapseRemovedMentions(text: string, matches: readonly AgentMentionMatch[]): string {
|
|
85
|
+
let body = text;
|
|
86
|
+
let offset = 0;
|
|
87
|
+
for (const match of matches) {
|
|
88
|
+
const at = match.start - offset;
|
|
89
|
+
let end = at + 1;
|
|
90
|
+
while (end < body.length && !/\s/.test(body[end]!)) end += 1;
|
|
91
|
+
|
|
92
|
+
let lineStart = at;
|
|
93
|
+
while (lineStart > 0 && body[lineStart - 1] !== '\n') lineStart -= 1;
|
|
94
|
+
const onlyMentionOnLine =
|
|
95
|
+
body[lineStart] === '@'
|
|
96
|
+
&& (end >= body.length || body[end] === '\n');
|
|
97
|
+
|
|
98
|
+
if (onlyMentionOnLine) {
|
|
99
|
+
// `^…@mention\n` — drop the line and the newline that terminated it.
|
|
100
|
+
const cutEnd = end < body.length ? end + 1 : end;
|
|
101
|
+
offset += cutEnd - lineStart;
|
|
102
|
+
body = body.slice(0, lineStart) + body.slice(cutEnd);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Inline (or a mention followed by the user's own text on its line): the gap
|
|
107
|
+
// is the token plus the run of spaces after it. Collapsing exactly that much
|
|
108
|
+
// keeps `@a then @b go` from leaving a double space while stopping well
|
|
109
|
+
// short of the old whole-body reflow (the body's own `do it` stays).
|
|
110
|
+
let gapEnd = end;
|
|
111
|
+
while (gapEnd < body.length && (body[gapEnd] === ' ' || body[gapEnd] === '\t')) gapEnd += 1;
|
|
112
|
+
offset += gapEnd - at;
|
|
113
|
+
body = body.slice(0, at) + body.slice(gapEnd);
|
|
114
|
+
}
|
|
115
|
+
return body.trim();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Rewrite `@agent` mentions into an explicit delegation directive the omp
|
|
120
|
+
* model acts on (oh-my-pi has no native `@agent` syntax). Pure and
|
|
121
|
+
* deterministic: no mentions leave the text untouched.
|
|
122
|
+
*/
|
|
123
|
+
export function translateAgentMentions(
|
|
124
|
+
text: string,
|
|
125
|
+
agentNames: readonly string[],
|
|
126
|
+
): { text: string; agents: string[] } {
|
|
127
|
+
const matches = extractAgentMentions(text, agentNames);
|
|
128
|
+
if (matches.length === 0) return { text, agents: [] };
|
|
129
|
+
|
|
130
|
+
const names: string[] = [];
|
|
131
|
+
const seen = new Set<string>();
|
|
132
|
+
for (const match of matches) {
|
|
133
|
+
const key = match.name.toLowerCase();
|
|
134
|
+
if (seen.has(key)) continue;
|
|
135
|
+
seen.add(key);
|
|
136
|
+
names.push(match.name);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const body = collapseRemovedMentions(text, matches);
|
|
140
|
+
|
|
141
|
+
if (body === '') return { text, agents: names };
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
text: `Use the task tool to delegate this request to the following oh-my-pi subagent(s): ${names
|
|
145
|
+
.map((n) => `\`${n}\``)
|
|
146
|
+
.join(', ')} (agent id: ${names.join(', ')}).\n\n${body}`,
|
|
147
|
+
agents: names,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WHY: `detectComposerTrigger` decides when the popup opens and which span an
|
|
8
|
+
* accept overwrites; `insertToken` performs that overwrite. A wrong caret or
|
|
9
|
+
* `replaceFrom` mangles the user's draft — silently deleting prose or leaving
|
|
10
|
+
* half a command behind — so every case here pins the exact span, not just the
|
|
11
|
+
* kind. The mid-prompt rule matters too: a `/word` inside running prose must
|
|
12
|
+
* only ever surface skills, never the full command list.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { describe, expect, test } from 'bun:test';
|
|
16
|
+
|
|
17
|
+
import type { ComposerMatchItem, ComposerPickItem, ComposerTrigger } from '@/shared/types';
|
|
18
|
+
import {
|
|
19
|
+
KABMO_COMMANDS,
|
|
20
|
+
detectComposerTrigger,
|
|
21
|
+
insertToken,
|
|
22
|
+
sendInsteadOfAccept,
|
|
23
|
+
tokenForItem,
|
|
24
|
+
} from '@/shared/lib/chat/composer/trigger';
|
|
25
|
+
|
|
26
|
+
function cmd(name: string): ComposerMatchItem {
|
|
27
|
+
return { id: `c-${name}`, name, description: '', kind: 'command', source: 'command', token: `/${name}`, match: null };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe('detectComposerTrigger — command name phase', () => {
|
|
31
|
+
test('a leading slash at the caret opens the name phase', () => {
|
|
32
|
+
expect(detectComposerTrigger('/', 1)).toEqual({
|
|
33
|
+
kind: 'command',
|
|
34
|
+
query: '',
|
|
35
|
+
start: 0,
|
|
36
|
+
end: 1,
|
|
37
|
+
phase: 'name',
|
|
38
|
+
replaceFrom: 0,
|
|
39
|
+
});
|
|
40
|
+
expect(detectComposerTrigger('/fast', 5)).toEqual({
|
|
41
|
+
kind: 'command',
|
|
42
|
+
query: 'fast',
|
|
43
|
+
start: 0,
|
|
44
|
+
end: 5,
|
|
45
|
+
phase: 'name',
|
|
46
|
+
replaceFrom: 0,
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('the query is only what precedes the caret', () => {
|
|
51
|
+
const trigger = detectComposerTrigger('/fast', 3);
|
|
52
|
+
expect(trigger).toMatchObject({ query: 'fa', start: 0, end: 3, replaceFrom: 0 });
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('leading whitespace is skipped but the reported span stays absolute', () => {
|
|
56
|
+
expect(detectComposerTrigger(' /fa', 6)).toMatchObject({ query: 'fa', start: 3, replaceFrom: 3, end: 6 });
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('a slash inside a token never triggers', () => {
|
|
60
|
+
// `/tmp/fo` is a path, but it still starts with a slash, so the trigger
|
|
61
|
+
// fires and the popup simply filters to nothing.
|
|
62
|
+
expect(detectComposerTrigger('/tmp/fo', 7)).toMatchObject({ kind: 'command', query: 'tmp/fo' });
|
|
63
|
+
expect(detectComposerTrigger('a/b', 3)).toBeNull();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test('plain prose with no slash or at-sign triggers nothing', () => {
|
|
67
|
+
expect(detectComposerTrigger('hello world', 11)).toBeNull();
|
|
68
|
+
expect(detectComposerTrigger('', 0)).toBeNull();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('a caret in the middle of the draft scopes detection to its own line', () => {
|
|
72
|
+
expect(detectComposerTrigger('one\ntwo', 7)).toBeNull();
|
|
73
|
+
expect(detectComposerTrigger('one\n/tw', 7)).toMatchObject({ query: 'tw', start: 4, end: 7 });
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe('detectComposerTrigger — args phase', () => {
|
|
78
|
+
test('a space after the command switches to args', () => {
|
|
79
|
+
expect(detectComposerTrigger('/fast ', 6)).toEqual({
|
|
80
|
+
kind: 'command',
|
|
81
|
+
query: '',
|
|
82
|
+
start: 0,
|
|
83
|
+
end: 6,
|
|
84
|
+
phase: 'args',
|
|
85
|
+
replaceFrom: 6,
|
|
86
|
+
command: 'fast',
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('the replacement is anchored on the argument text, keeping earlier arguments', () => {
|
|
91
|
+
const trigger = detectComposerTrigger('/security plan s', 16);
|
|
92
|
+
expect(trigger).toMatchObject({
|
|
93
|
+
kind: 'command',
|
|
94
|
+
phase: 'args',
|
|
95
|
+
command: 'security',
|
|
96
|
+
query: 'plan s',
|
|
97
|
+
start: 0,
|
|
98
|
+
end: 16,
|
|
99
|
+
replaceFrom: 10,
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('an argument typed before the caret is included in the query', () => {
|
|
104
|
+
expect(detectComposerTrigger('/fast on x', 10)).toMatchObject({ phase: 'args', query: 'on x', command: 'fast' });
|
|
105
|
+
expect(detectComposerTrigger('/fast on x', 8)).toMatchObject({ phase: 'args', query: 'on', command: 'fast' });
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test('the command name is reported as typed', () => {
|
|
109
|
+
expect(detectComposerTrigger('/MODEL ', 7)).toMatchObject({ command: 'MODEL', phase: 'args' });
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('a leading-slash command with trailing prose is still args on its line', () => {
|
|
113
|
+
expect(detectComposerTrigger('/a b\n', 4)).toMatchObject({ phase: 'args', command: 'a', query: 'b' });
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe('detectComposerTrigger — mid-prompt', () => {
|
|
118
|
+
test('prose before the token on the same line marks it mid-prompt', () => {
|
|
119
|
+
expect(detectComposerTrigger('fix bug /han', 12)).toMatchObject({
|
|
120
|
+
kind: 'command',
|
|
121
|
+
phase: 'name',
|
|
122
|
+
query: 'han',
|
|
123
|
+
start: 8,
|
|
124
|
+
replaceFrom: 8,
|
|
125
|
+
midPrompt: true,
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('an earlier non-blank line marks a later line-start token mid-prompt', () => {
|
|
130
|
+
expect(detectComposerTrigger('prose\n/retry', 12)).toMatchObject({ midPrompt: true, query: 'retry', start: 6 });
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('a blank earlier line does not', () => {
|
|
134
|
+
expect(detectComposerTrigger('\n\n/retry', 8)).toMatchObject({ query: 'retry', start: 2 });
|
|
135
|
+
expect(detectComposerTrigger('\n\n/retry', 8)?.midPrompt).toBeUndefined();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test('indentation alone is not prose', () => {
|
|
139
|
+
expect(detectComposerTrigger(' /fa', 6)?.midPrompt).toBeUndefined();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('a mid-prompt token never enters the args phase', () => {
|
|
143
|
+
// The trailing-slash rule only matches a slash token with no space after
|
|
144
|
+
// it, so once prose precedes `/fast o` there is no trigger at all: the
|
|
145
|
+
// popup closes rather than completing `fast`'s subcommands mid-prose.
|
|
146
|
+
expect(detectComposerTrigger('prose /fast o', 13)).toBeNull();
|
|
147
|
+
expect(detectComposerTrigger('prose /fast', 11)).toMatchObject({ phase: 'name', query: 'fast', midPrompt: true });
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
describe('detectComposerTrigger — @ mentions', () => {
|
|
152
|
+
test('an at-sign at index 0 opens a mention', () => {
|
|
153
|
+
expect(detectComposerTrigger('@sonic', 6)).toEqual({
|
|
154
|
+
kind: 'mention',
|
|
155
|
+
query: 'sonic',
|
|
156
|
+
start: 0,
|
|
157
|
+
end: 6,
|
|
158
|
+
phase: 'name',
|
|
159
|
+
replaceFrom: 0,
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
test('a preceding whitespace or opener bracket is allowed', () => {
|
|
164
|
+
expect(detectComposerTrigger('see @sonic', 10)).toMatchObject({ kind: 'mention', query: 'sonic', start: 4 });
|
|
165
|
+
expect(detectComposerTrigger('(@sonic', 7)).toMatchObject({ kind: 'mention', query: 'sonic', start: 1 });
|
|
166
|
+
expect(detectComposerTrigger('[@sonic', 7)).toMatchObject({ kind: 'mention', query: 'sonic', start: 1 });
|
|
167
|
+
expect(detectComposerTrigger('{@sonic', 7)).toMatchObject({ kind: 'mention', query: 'sonic', start: 1 });
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test('a preceding ordinary character aborts the scan', () => {
|
|
171
|
+
expect(detectComposerTrigger('foo@bar', 7)).toBeNull();
|
|
172
|
+
expect(detectComposerTrigger('a@b', 3)).toBeNull();
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test('the scan stops at whitespace between the at-sign and the caret', () => {
|
|
176
|
+
expect(detectComposerTrigger('@sonic x', 8)).toBeNull();
|
|
177
|
+
expect(detectComposerTrigger('@ sonic', 7)).toBeNull();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
test('the mention query runs to the caret, not the end of the draft', () => {
|
|
181
|
+
expect(detectComposerTrigger('@son', 4)).toMatchObject({ query: 'son', start: 0, end: 4 });
|
|
182
|
+
expect(detectComposerTrigger('@file:src/a', 11)).toMatchObject({ query: 'file:src/a', start: 0, end: 11 });
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
test('the at-sign scan is scoped to the caret line', () => {
|
|
186
|
+
expect(detectComposerTrigger('x\n@son', 6)).toMatchObject({ kind: 'mention', query: 'son', start: 2 });
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test('a caret clamped past the end uses the whole text', () => {
|
|
190
|
+
expect(detectComposerTrigger('@son', 99)).toMatchObject({ kind: 'mention', query: 'son', end: 4 });
|
|
191
|
+
expect(detectComposerTrigger('/fa', 99)).toMatchObject({ kind: 'command', query: 'fa', end: 3 });
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
describe('tokenForItem', () => {
|
|
196
|
+
const base: ComposerPickItem = {
|
|
197
|
+
id: 'x',
|
|
198
|
+
name: 'x',
|
|
199
|
+
description: '',
|
|
200
|
+
kind: 'command',
|
|
201
|
+
source: 'command',
|
|
202
|
+
token: '/x',
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
test('appends a trailing space by default', () => {
|
|
206
|
+
expect(tokenForItem(base)).toBe('/x ');
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test('suppresses the space when the item asks to', () => {
|
|
210
|
+
expect(tokenForItem({ ...base, insertWithoutSpace: true })).toBe('/x');
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
describe('sendInsteadOfAccept', () => {
|
|
215
|
+
const trigger = (over: Partial<ComposerTrigger>): ComposerTrigger => ({
|
|
216
|
+
kind: 'command',
|
|
217
|
+
query: '',
|
|
218
|
+
start: 0,
|
|
219
|
+
end: 0,
|
|
220
|
+
phase: 'name',
|
|
221
|
+
replaceFrom: 0,
|
|
222
|
+
...over,
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
test('a complete chamber-owned command lets Enter send', () => {
|
|
226
|
+
for (const command of KABMO_COMMANDS) {
|
|
227
|
+
const t = trigger({ query: command.name, phase: 'name' });
|
|
228
|
+
expect(sendInsteadOfAccept(t, cmd(command.name))).toBe(true);
|
|
229
|
+
expect(sendInsteadOfAccept(trigger({ query: command.name.toUpperCase() }), cmd(command.name))).toBe(true);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test('an incomplete Kabmo command still accepts', () => {
|
|
234
|
+
expect(sendInsteadOfAccept(trigger({ query: 'bt' }), cmd('btw'))).toBe(false);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
test('a command omp owns always accepts, however complete', () => {
|
|
238
|
+
expect(sendInsteadOfAccept(trigger({ query: 'model' }), cmd('model'))).toBe(false);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test('nothing highlighted, args phase, or mention never sends', () => {
|
|
242
|
+
expect(sendInsteadOfAccept(trigger({ query: 'btw' }), undefined)).toBe(false);
|
|
243
|
+
expect(sendInsteadOfAccept(trigger({ query: 'btw', phase: 'args', command: 'btw' }), cmd('btw'))).toBe(false);
|
|
244
|
+
expect(sendInsteadOfAccept(trigger({ kind: 'mention', query: 'btw' }), cmd('btw'))).toBe(false);
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
describe('insertToken', () => {
|
|
249
|
+
test('splices the token over the name-phase span and lands the caret after it', () => {
|
|
250
|
+
const trigger = detectComposerTrigger('/fa', 3);
|
|
251
|
+
if (!trigger) throw new Error('expected a trigger');
|
|
252
|
+
|
|
253
|
+
expect(insertToken('/fa', trigger, '/fast ')).toEqual({ value: '/fast ', caret: 6 });
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
test('only the argument text is replaced in the args phase', () => {
|
|
257
|
+
const trigger = detectComposerTrigger('/security plan s', 16);
|
|
258
|
+
if (!trigger) throw new Error('expected a trigger');
|
|
259
|
+
|
|
260
|
+
expect(insertToken('/security plan s', trigger, 'scan')).toEqual({ value: '/security scan', caret: 14 });
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
test('text after the caret survives the splice', () => {
|
|
264
|
+
const trigger = detectComposerTrigger('/fa', 3);
|
|
265
|
+
if (!trigger) throw new Error('expected a trigger');
|
|
266
|
+
|
|
267
|
+
expect(insertToken('/fa rest', trigger, '/fast')).toEqual({ value: '/fast rest', caret: 5 });
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test('a mention span is replaced exactly', () => {
|
|
271
|
+
const trigger = detectComposerTrigger('see @son', 8);
|
|
272
|
+
if (!trigger) throw new Error('expected a trigger');
|
|
273
|
+
|
|
274
|
+
expect(insertToken('see @son', trigger, '@sonic ')).toEqual({ value: 'see @sonic ', caret: 11 });
|
|
275
|
+
});
|
|
276
|
+
});
|