@celljs/ta-web 0.0.0-stage → 4.6.1
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 +83 -2
- package/esm/browser/assistant/assistant-export.d.ts +13 -0
- package/esm/browser/assistant/assistant-export.js +33 -0
- package/esm/browser/assistant/assistant-export.js.map +1 -0
- package/esm/browser/assistant/assistant-extension.d.ts +20 -0
- package/esm/browser/assistant/assistant-extension.js +153 -0
- package/esm/browser/assistant/assistant-extension.js.map +1 -0
- package/esm/browser/assistant/assistant-hooks.d.ts +8 -0
- package/esm/browser/assistant/assistant-hooks.js +55 -0
- package/esm/browser/assistant/assistant-hooks.js.map +1 -0
- package/esm/browser/assistant/assistant-protocol.d.ts +51 -0
- package/esm/browser/assistant/assistant-protocol.js +2 -0
- package/esm/browser/assistant/assistant-protocol.js.map +1 -0
- package/esm/browser/assistant/assistant-tasks.d.ts +48 -0
- package/esm/browser/assistant/assistant-tasks.js +115 -0
- package/esm/browser/assistant/assistant-tasks.js.map +1 -0
- package/esm/browser/assistant/assistant-view.d.ts +21 -0
- package/esm/browser/assistant/assistant-view.js +324 -0
- package/esm/browser/assistant/assistant-view.js.map +1 -0
- package/esm/browser/assistant/assistant.d.ts +51 -0
- package/esm/browser/assistant/assistant.js +302 -0
- package/esm/browser/assistant/assistant.js.map +1 -0
- package/esm/browser/assistant/voice.d.ts +14 -0
- package/esm/browser/assistant/voice.js +72 -0
- package/esm/browser/assistant/voice.js.map +1 -0
- package/esm/browser/avatar/dino-avatar.d.ts +139 -0
- package/esm/browser/avatar/dino-avatar.js +420 -0
- package/esm/browser/avatar/dino-avatar.js.map +1 -0
- package/esm/browser/avatar/dino-motion.d.ts +24 -0
- package/esm/browser/avatar/dino-motion.js +295 -0
- package/esm/browser/avatar/dino-motion.js.map +1 -0
- package/esm/browser/chat/chat-protocol.d.ts +46 -0
- package/esm/browser/chat/chat-protocol.js +2 -0
- package/esm/browser/chat/chat-protocol.js.map +1 -0
- package/esm/browser/chat/chat-view.d.ts +15 -0
- package/esm/browser/chat/chat-view.js +87 -0
- package/esm/browser/chat/chat-view.js.map +1 -0
- package/esm/browser/chat/chat.d.ts +69 -0
- package/esm/browser/chat/chat.js +343 -0
- package/esm/browser/chat/chat.js.map +1 -0
- package/esm/browser/components/account-menu.d.ts +8 -0
- package/esm/browser/components/account-menu.js +82 -0
- package/esm/browser/components/account-menu.js.map +1 -0
- package/esm/browser/components/agent-settings-view.d.ts +23 -0
- package/esm/browser/components/agent-settings-view.js +105 -0
- package/esm/browser/components/agent-settings-view.js.map +1 -0
- package/esm/browser/components/app-view.d.ts +9 -0
- package/esm/browser/components/app-view.js +405 -0
- package/esm/browser/components/app-view.js.map +1 -0
- package/esm/browser/components/auth-pictures.d.ts +6 -0
- package/esm/browser/components/auth-pictures.js +37 -0
- package/esm/browser/components/auth-pictures.js.map +1 -0
- package/esm/browser/components/auth-view.d.ts +54 -0
- package/esm/browser/components/auth-view.js +300 -0
- package/esm/browser/components/auth-view.js.map +1 -0
- package/esm/browser/components/callout.d.ts +18 -0
- package/esm/browser/components/callout.js +17 -0
- package/esm/browser/components/callout.js.map +1 -0
- package/esm/browser/components/chat-list.d.ts +52 -0
- package/esm/browser/components/chat-list.js +189 -0
- package/esm/browser/components/chat-list.js.map +1 -0
- package/esm/browser/components/code-editor.d.ts +7 -0
- package/esm/browser/components/code-editor.js +85 -0
- package/esm/browser/components/code-editor.js.map +1 -0
- package/esm/browser/components/composer-box.d.ts +73 -0
- package/esm/browser/components/composer-box.js +297 -0
- package/esm/browser/components/composer-box.js.map +1 -0
- package/esm/browser/components/composer-menu.d.ts +17 -0
- package/esm/browser/components/composer-menu.js +18 -0
- package/esm/browser/components/composer-menu.js.map +1 -0
- package/esm/browser/components/composer.d.ts +37 -0
- package/esm/browser/components/composer.js +99 -0
- package/esm/browser/components/composer.js.map +1 -0
- package/esm/browser/components/connection-bar.d.ts +6 -0
- package/esm/browser/components/connection-bar.js +73 -0
- package/esm/browser/components/connection-bar.js.map +1 -0
- package/esm/browser/components/context-menu.d.ts +12 -0
- package/esm/browser/components/context-menu.js +68 -0
- package/esm/browser/components/context-menu.js.map +1 -0
- package/esm/browser/components/conversation-scroll.d.ts +13 -0
- package/esm/browser/components/conversation-scroll.js +121 -0
- package/esm/browser/components/conversation-scroll.js.map +1 -0
- package/esm/browser/components/dialog-view.d.ts +9 -0
- package/esm/browser/components/dialog-view.js +41 -0
- package/esm/browser/components/dialog-view.js.map +1 -0
- package/esm/browser/components/diff-editor.d.ts +10 -0
- package/esm/browser/components/diff-editor.js +101 -0
- package/esm/browser/components/diff-editor.js.map +1 -0
- package/esm/browser/components/diff-view.d.ts +4 -0
- package/esm/browser/components/diff-view.js +11 -0
- package/esm/browser/components/diff-view.js.map +1 -0
- package/esm/browser/components/dino.d.ts +8 -0
- package/esm/browser/components/dino.js +14 -0
- package/esm/browser/components/dino.js.map +1 -0
- package/esm/browser/components/editor-area.d.ts +28 -0
- package/esm/browser/components/editor-area.js +134 -0
- package/esm/browser/components/editor-area.js.map +1 -0
- package/esm/browser/components/folder-picker.d.ts +28 -0
- package/esm/browser/components/folder-picker.js +106 -0
- package/esm/browser/components/folder-picker.js.map +1 -0
- package/esm/browser/components/fork-view.d.ts +14 -0
- package/esm/browser/components/fork-view.js +43 -0
- package/esm/browser/components/fork-view.js.map +1 -0
- package/esm/browser/components/hero-cards.d.ts +20 -0
- package/esm/browser/components/hero-cards.js +109 -0
- package/esm/browser/components/hero-cards.js.map +1 -0
- package/esm/browser/components/icon.d.ts +29 -0
- package/esm/browser/components/icon.js +23 -0
- package/esm/browser/components/icon.js.map +1 -0
- package/esm/browser/components/link-dialog.d.ts +3 -0
- package/esm/browser/components/link-dialog.js +45 -0
- package/esm/browser/components/link-dialog.js.map +1 -0
- package/esm/browser/components/link.d.ts +19 -0
- package/esm/browser/components/link.js +56 -0
- package/esm/browser/components/link.js.map +1 -0
- package/esm/browser/components/manage-menu.d.ts +13 -0
- package/esm/browser/components/manage-menu.js +96 -0
- package/esm/browser/components/manage-menu.js.map +1 -0
- package/esm/browser/components/markdown.d.ts +9 -0
- package/esm/browser/components/markdown.js +98 -0
- package/esm/browser/components/markdown.js.map +1 -0
- package/esm/browser/components/math.d.ts +10 -0
- package/esm/browser/components/math.js +21 -0
- package/esm/browser/components/math.js.map +1 -0
- package/esm/browser/components/media.d.ts +11 -0
- package/esm/browser/components/media.js +76 -0
- package/esm/browser/components/media.js.map +1 -0
- package/esm/browser/components/mermaid-view.d.ts +10 -0
- package/esm/browser/components/mermaid-view.js +84 -0
- package/esm/browser/components/mermaid-view.js.map +1 -0
- package/esm/browser/components/message-actions.d.ts +12 -0
- package/esm/browser/components/message-actions.js +78 -0
- package/esm/browser/components/message-actions.js.map +1 -0
- package/esm/browser/components/message-footer.d.ts +29 -0
- package/esm/browser/components/message-footer.js +86 -0
- package/esm/browser/components/message-footer.js.map +1 -0
- package/esm/browser/components/message-list.d.ts +37 -0
- package/esm/browser/components/message-list.js +216 -0
- package/esm/browser/components/message-list.js.map +1 -0
- package/esm/browser/components/notice-center.d.ts +3 -0
- package/esm/browser/components/notice-center.js +114 -0
- package/esm/browser/components/notice-center.js.map +1 -0
- package/esm/browser/components/relay-view.d.ts +5 -0
- package/esm/browser/components/relay-view.js +114 -0
- package/esm/browser/components/relay-view.js.map +1 -0
- package/esm/browser/components/run-status.d.ts +9 -0
- package/esm/browser/components/run-status.js +54 -0
- package/esm/browser/components/run-status.js.map +1 -0
- package/esm/browser/components/session-settings.d.ts +37 -0
- package/esm/browser/components/session-settings.js +84 -0
- package/esm/browser/components/session-settings.js.map +1 -0
- package/esm/browser/components/session-view.d.ts +24 -0
- package/esm/browser/components/session-view.js +84 -0
- package/esm/browser/components/session-view.js.map +1 -0
- package/esm/browser/components/settings-controls.d.ts +40 -0
- package/esm/browser/components/settings-controls.js +28 -0
- package/esm/browser/components/settings-controls.js.map +1 -0
- package/esm/browser/components/settings-view.d.ts +22 -0
- package/esm/browser/components/settings-view.js +357 -0
- package/esm/browser/components/settings-view.js.map +1 -0
- package/esm/browser/components/split-pane.d.ts +24 -0
- package/esm/browser/components/split-pane.js +75 -0
- package/esm/browser/components/split-pane.js.map +1 -0
- package/esm/browser/components/ta-avatar.d.ts +13 -0
- package/esm/browser/components/ta-avatar.js +185 -0
- package/esm/browser/components/ta-avatar.js.map +1 -0
- package/esm/browser/components/tool-view.d.ts +18 -0
- package/esm/browser/components/tool-view.js +110 -0
- package/esm/browser/components/tool-view.js.map +1 -0
- package/esm/browser/components/trusted-domains.d.ts +3 -0
- package/esm/browser/components/trusted-domains.js +39 -0
- package/esm/browser/components/trusted-domains.js.map +1 -0
- package/esm/browser/components/web-composer.d.ts +14 -0
- package/esm/browser/components/web-composer.js +22 -0
- package/esm/browser/components/web-composer.js.map +1 -0
- package/esm/browser/components/web-dialog.d.ts +4 -0
- package/esm/browser/components/web-dialog.js +22 -0
- package/esm/browser/components/web-dialog.js.map +1 -0
- package/esm/browser/components/workbench-toggle.d.ts +12 -0
- package/esm/browser/components/workbench-toggle.js +17 -0
- package/esm/browser/components/workbench-toggle.js.map +1 -0
- package/esm/browser/components/workbench-view.d.ts +8 -0
- package/esm/browser/components/workbench-view.js +62 -0
- package/esm/browser/components/workbench-view.js.map +1 -0
- package/esm/browser/components/working-directory.d.ts +5 -0
- package/esm/browser/components/working-directory.js +25 -0
- package/esm/browser/components/working-directory.js.map +1 -0
- package/esm/browser/editor/monaco-loader.d.ts +60 -0
- package/esm/browser/editor/monaco-loader.js +135 -0
- package/esm/browser/editor/monaco-loader.js.map +1 -0
- package/esm/browser/editor/monaco.d.ts +45 -0
- package/esm/browser/editor/monaco.js +54 -0
- package/esm/browser/editor/monaco.js.map +1 -0
- package/esm/browser/extension/extension-view.d.ts +35 -0
- package/esm/browser/extension/extension-view.js +53 -0
- package/esm/browser/extension/extension-view.js.map +1 -0
- package/esm/browser/extension/icons.d.ts +3 -0
- package/esm/browser/extension/icons.js +82 -0
- package/esm/browser/extension/icons.js.map +1 -0
- package/esm/browser/extension/web-extension-api.d.ts +362 -0
- package/esm/browser/extension/web-extension-api.js +2 -0
- package/esm/browser/extension/web-extension-api.js.map +1 -0
- package/esm/browser/extension/web-extension-protocol.d.ts +132 -0
- package/esm/browser/extension/web-extension-protocol.js +10 -0
- package/esm/browser/extension/web-extension-protocol.js.map +1 -0
- package/esm/browser/extension/web-extensions.d.ts +118 -0
- package/esm/browser/extension/web-extensions.js +654 -0
- package/esm/browser/extension/web-extensions.js.map +1 -0
- package/esm/browser/hooks.d.ts +21 -0
- package/esm/browser/hooks.js +65 -0
- package/esm/browser/hooks.js.map +1 -0
- package/esm/browser/i18n/locales.d.ts +435 -0
- package/esm/browser/i18n/locales.js +35 -0
- package/esm/browser/i18n/locales.js.map +1 -0
- package/esm/browser/i18n/messages.d.ts +427 -0
- package/esm/browser/i18n/messages.js +858 -0
- package/esm/browser/i18n/messages.js.map +1 -0
- package/esm/browser/i18n/use-t.d.ts +7 -0
- package/esm/browser/i18n/use-t.js +18 -0
- package/esm/browser/i18n/use-t.js.map +1 -0
- package/esm/browser/index.d.ts +52 -0
- package/esm/browser/index.js +53 -0
- package/esm/browser/index.js.map +1 -0
- package/esm/browser/links/links-protocol.d.ts +35 -0
- package/esm/browser/links/links-protocol.js +2 -0
- package/esm/browser/links/links-protocol.js.map +1 -0
- package/esm/browser/links/links.d.ts +32 -0
- package/esm/browser/links/links.js +141 -0
- package/esm/browser/links/links.js.map +1 -0
- package/esm/browser/markdown/hooks.d.ts +6 -0
- package/esm/browser/markdown/hooks.js +21 -0
- package/esm/browser/markdown/hooks.js.map +1 -0
- package/esm/browser/markdown/lazy.d.ts +21 -0
- package/esm/browser/markdown/lazy.js +39 -0
- package/esm/browser/markdown/lazy.js.map +1 -0
- package/esm/browser/markdown/math.d.ts +18 -0
- package/esm/browser/markdown/math.js +30 -0
- package/esm/browser/markdown/math.js.map +1 -0
- package/esm/browser/markdown/mermaid.d.ts +20 -0
- package/esm/browser/markdown/mermaid.js +84 -0
- package/esm/browser/markdown/mermaid.js.map +1 -0
- package/esm/browser/module.d.ts +4 -0
- package/esm/browser/module.js +6 -0
- package/esm/browser/module.js.map +1 -0
- package/esm/browser/notices/notices-protocol.d.ts +82 -0
- package/esm/browser/notices/notices-protocol.js +2 -0
- package/esm/browser/notices/notices-protocol.js.map +1 -0
- package/esm/browser/notices/notices.d.ts +47 -0
- package/esm/browser/notices/notices.js +162 -0
- package/esm/browser/notices/notices.js.map +1 -0
- package/esm/browser/pwa/pwa-protocol.d.ts +20 -0
- package/esm/browser/pwa/pwa-protocol.js +2 -0
- package/esm/browser/pwa/pwa-protocol.js.map +1 -0
- package/esm/browser/pwa/pwa.d.ts +39 -0
- package/esm/browser/pwa/pwa.js +120 -0
- package/esm/browser/pwa/pwa.js.map +1 -0
- package/esm/browser/settings/agent-settings.d.ts +33 -0
- package/esm/browser/settings/agent-settings.js +85 -0
- package/esm/browser/settings/agent-settings.js.map +1 -0
- package/esm/browser/settings/settings-protocol.d.ts +44 -0
- package/esm/browser/settings/settings-protocol.js +35 -0
- package/esm/browser/settings/settings-protocol.js.map +1 -0
- package/esm/browser/settings/settings.d.ts +31 -0
- package/esm/browser/settings/settings.js +102 -0
- package/esm/browser/settings/settings.js.map +1 -0
- package/esm/browser/state/state-protocol.d.ts +48 -0
- package/esm/browser/state/state-protocol.js +32 -0
- package/esm/browser/state/state-protocol.js.map +1 -0
- package/esm/browser/state/state.d.ts +39 -0
- package/esm/browser/state/state.js +210 -0
- package/esm/browser/state/state.js.map +1 -0
- package/esm/browser/style/base.d.ts +2 -0
- package/esm/browser/style/base.js +140 -0
- package/esm/browser/style/base.js.map +1 -0
- package/esm/browser/style/conversation.d.ts +2 -0
- package/esm/browser/style/conversation.js +201 -0
- package/esm/browser/style/conversation.js.map +1 -0
- package/esm/browser/style/layout.d.ts +2 -0
- package/esm/browser/style/layout.js +371 -0
- package/esm/browser/style/layout.js.map +1 -0
- package/esm/browser/style/pages.d.ts +2 -0
- package/esm/browser/style/pages.js +75 -0
- package/esm/browser/style/pages.js.map +1 -0
- package/esm/browser/style/shell.d.ts +2 -0
- package/esm/browser/style/shell.js +236 -0
- package/esm/browser/style/shell.js.map +1 -0
- package/esm/browser/style.d.ts +5 -0
- package/esm/browser/style.js +11 -0
- package/esm/browser/style.js.map +1 -0
- package/esm/browser/util/composer.d.ts +85 -0
- package/esm/browser/util/composer.js +121 -0
- package/esm/browser/util/composer.js.map +1 -0
- package/esm/browser/util/diff.d.ts +17 -0
- package/esm/browser/util/diff.js +29 -0
- package/esm/browser/util/diff.js.map +1 -0
- package/esm/browser/util/frame.d.ts +32 -0
- package/esm/browser/util/frame.js +47 -0
- package/esm/browser/util/frame.js.map +1 -0
- package/esm/browser/util/layout.d.ts +26 -0
- package/esm/browser/util/layout.js +54 -0
- package/esm/browser/util/layout.js.map +1 -0
- package/esm/browser/util/link.d.ts +53 -0
- package/esm/browser/util/link.js +229 -0
- package/esm/browser/util/link.js.map +1 -0
- package/esm/browser/util/markdown.d.ts +86 -0
- package/esm/browser/util/markdown.js +330 -0
- package/esm/browser/util/markdown.js.map +1 -0
- package/esm/browser/util/message.d.ts +74 -0
- package/esm/browser/util/message.js +143 -0
- package/esm/browser/util/message.js.map +1 -0
- package/esm/browser/util/process.d.ts +73 -0
- package/esm/browser/util/process.js +135 -0
- package/esm/browser/util/process.js.map +1 -0
- package/esm/browser/util/progress.d.ts +50 -0
- package/esm/browser/util/progress.js +143 -0
- package/esm/browser/util/progress.js.map +1 -0
- package/esm/browser/util/qr-code.d.ts +37 -0
- package/esm/browser/util/qr-code.js +349 -0
- package/esm/browser/util/qr-code.js.map +1 -0
- package/esm/browser/util/tool.d.ts +41 -0
- package/esm/browser/util/tool.js +151 -0
- package/esm/browser/util/tool.js.map +1 -0
- package/esm/browser/view.d.ts +3 -0
- package/esm/browser/view.js +16 -0
- package/esm/browser/view.js.map +1 -0
- package/esm/browser/workbench-protocol.d.ts +50 -0
- package/esm/browser/workbench-protocol.js +2 -0
- package/esm/browser/workbench-protocol.js.map +1 -0
- package/esm/browser/workbench.d.ts +63 -0
- package/esm/browser/workbench.js +278 -0
- package/esm/browser/workbench.js.map +1 -0
- package/esm/package.json +3 -0
- package/lib/browser/assistant/assistant-export.d.ts +14 -0
- package/lib/browser/assistant/assistant-export.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-export.js +36 -0
- package/lib/browser/assistant/assistant-export.js.map +1 -0
- package/lib/browser/assistant/assistant-export.spec.d.ts +2 -0
- package/lib/browser/assistant/assistant-export.spec.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-export.spec.js +27 -0
- package/lib/browser/assistant/assistant-export.spec.js.map +1 -0
- package/lib/browser/assistant/assistant-extension.d.ts +21 -0
- package/lib/browser/assistant/assistant-extension.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-extension.js +189 -0
- package/lib/browser/assistant/assistant-extension.js.map +1 -0
- package/lib/browser/assistant/assistant-extension.spec.d.ts +2 -0
- package/lib/browser/assistant/assistant-extension.spec.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-extension.spec.js +121 -0
- package/lib/browser/assistant/assistant-extension.spec.js.map +1 -0
- package/lib/browser/assistant/assistant-hooks.d.ts +9 -0
- package/lib/browser/assistant/assistant-hooks.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-hooks.js +94 -0
- package/lib/browser/assistant/assistant-hooks.js.map +1 -0
- package/lib/browser/assistant/assistant-protocol.d.ts +52 -0
- package/lib/browser/assistant/assistant-protocol.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-protocol.js +5 -0
- package/lib/browser/assistant/assistant-protocol.js.map +1 -0
- package/lib/browser/assistant/assistant-tasks.d.ts +49 -0
- package/lib/browser/assistant/assistant-tasks.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-tasks.js +158 -0
- package/lib/browser/assistant/assistant-tasks.js.map +1 -0
- package/lib/browser/assistant/assistant-view.d.ts +22 -0
- package/lib/browser/assistant/assistant-view.d.ts.map +1 -0
- package/lib/browser/assistant/assistant-view.js +365 -0
- package/lib/browser/assistant/assistant-view.js.map +1 -0
- package/lib/browser/assistant/assistant.d.ts +52 -0
- package/lib/browser/assistant/assistant.d.ts.map +1 -0
- package/lib/browser/assistant/assistant.js +305 -0
- package/lib/browser/assistant/assistant.js.map +1 -0
- package/lib/browser/assistant/assistant.spec.d.ts +2 -0
- package/lib/browser/assistant/assistant.spec.d.ts.map +1 -0
- package/lib/browser/assistant/assistant.spec.js +80 -0
- package/lib/browser/assistant/assistant.spec.js.map +1 -0
- package/lib/browser/assistant/voice.d.ts +15 -0
- package/lib/browser/assistant/voice.d.ts.map +1 -0
- package/lib/browser/assistant/voice.js +75 -0
- package/lib/browser/assistant/voice.js.map +1 -0
- package/lib/browser/assistant/voice.spec.d.ts +2 -0
- package/lib/browser/assistant/voice.spec.d.ts.map +1 -0
- package/lib/browser/assistant/voice.spec.js +10 -0
- package/lib/browser/assistant/voice.spec.js.map +1 -0
- package/lib/browser/avatar/dino-avatar.d.ts +140 -0
- package/lib/browser/avatar/dino-avatar.d.ts.map +1 -0
- package/lib/browser/avatar/dino-avatar.js +429 -0
- package/lib/browser/avatar/dino-avatar.js.map +1 -0
- package/lib/browser/avatar/dino-avatar.spec.d.ts +2 -0
- package/lib/browser/avatar/dino-avatar.spec.d.ts.map +1 -0
- package/lib/browser/avatar/dino-avatar.spec.js +143 -0
- package/lib/browser/avatar/dino-avatar.spec.js.map +1 -0
- package/lib/browser/avatar/dino-motion.d.ts +25 -0
- package/lib/browser/avatar/dino-motion.d.ts.map +1 -0
- package/lib/browser/avatar/dino-motion.js +298 -0
- package/lib/browser/avatar/dino-motion.js.map +1 -0
- package/lib/browser/chat/chat-protocol.d.ts +47 -0
- package/lib/browser/chat/chat-protocol.d.ts.map +1 -0
- package/lib/browser/chat/chat-protocol.js +5 -0
- package/lib/browser/chat/chat-protocol.js.map +1 -0
- package/lib/browser/chat/chat-view.d.ts +16 -0
- package/lib/browser/chat/chat-view.d.ts.map +1 -0
- package/lib/browser/chat/chat-view.js +125 -0
- package/lib/browser/chat/chat-view.js.map +1 -0
- package/lib/browser/chat/chat.d.ts +70 -0
- package/lib/browser/chat/chat.d.ts.map +1 -0
- package/lib/browser/chat/chat.js +346 -0
- package/lib/browser/chat/chat.js.map +1 -0
- package/lib/browser/chat/chat.spec.d.ts +2 -0
- package/lib/browser/chat/chat.spec.d.ts.map +1 -0
- package/lib/browser/chat/chat.spec.js +185 -0
- package/lib/browser/chat/chat.spec.js.map +1 -0
- package/lib/browser/components/account-menu.d.ts +9 -0
- package/lib/browser/components/account-menu.d.ts.map +1 -0
- package/lib/browser/components/account-menu.js +119 -0
- package/lib/browser/components/account-menu.js.map +1 -0
- package/lib/browser/components/agent-settings-view.d.ts +24 -0
- package/lib/browser/components/agent-settings-view.d.ts.map +1 -0
- package/lib/browser/components/agent-settings-view.js +143 -0
- package/lib/browser/components/agent-settings-view.js.map +1 -0
- package/lib/browser/components/app-view.d.ts +10 -0
- package/lib/browser/components/app-view.d.ts.map +1 -0
- package/lib/browser/components/app-view.js +441 -0
- package/lib/browser/components/app-view.js.map +1 -0
- package/lib/browser/components/auth-pictures.d.ts +7 -0
- package/lib/browser/components/auth-pictures.d.ts.map +1 -0
- package/lib/browser/components/auth-pictures.js +73 -0
- package/lib/browser/components/auth-pictures.js.map +1 -0
- package/lib/browser/components/auth-view.d.ts +55 -0
- package/lib/browser/components/auth-view.d.ts.map +1 -0
- package/lib/browser/components/auth-view.js +340 -0
- package/lib/browser/components/auth-view.js.map +1 -0
- package/lib/browser/components/callout.d.ts +19 -0
- package/lib/browser/components/callout.d.ts.map +1 -0
- package/lib/browser/components/callout.js +54 -0
- package/lib/browser/components/callout.js.map +1 -0
- package/lib/browser/components/chat-list.d.ts +53 -0
- package/lib/browser/components/chat-list.d.ts.map +1 -0
- package/lib/browser/components/chat-list.js +226 -0
- package/lib/browser/components/chat-list.js.map +1 -0
- package/lib/browser/components/chat-list.spec.d.ts +2 -0
- package/lib/browser/components/chat-list.spec.d.ts.map +1 -0
- package/lib/browser/components/chat-list.spec.js +61 -0
- package/lib/browser/components/chat-list.spec.js.map +1 -0
- package/lib/browser/components/code-editor.d.ts +8 -0
- package/lib/browser/components/code-editor.d.ts.map +1 -0
- package/lib/browser/components/code-editor.js +121 -0
- package/lib/browser/components/code-editor.js.map +1 -0
- package/lib/browser/components/composer-box.d.ts +74 -0
- package/lib/browser/components/composer-box.d.ts.map +1 -0
- package/lib/browser/components/composer-box.js +334 -0
- package/lib/browser/components/composer-box.js.map +1 -0
- package/lib/browser/components/composer-menu.d.ts +18 -0
- package/lib/browser/components/composer-menu.d.ts.map +1 -0
- package/lib/browser/components/composer-menu.js +54 -0
- package/lib/browser/components/composer-menu.js.map +1 -0
- package/lib/browser/components/composer.d.ts +38 -0
- package/lib/browser/components/composer.d.ts.map +1 -0
- package/lib/browser/components/composer.js +135 -0
- package/lib/browser/components/composer.js.map +1 -0
- package/lib/browser/components/composer.spec.d.ts +2 -0
- package/lib/browser/components/composer.spec.d.ts.map +1 -0
- package/lib/browser/components/composer.spec.js +129 -0
- package/lib/browser/components/composer.spec.js.map +1 -0
- package/lib/browser/components/connection-bar.d.ts +7 -0
- package/lib/browser/components/connection-bar.d.ts.map +1 -0
- package/lib/browser/components/connection-bar.js +109 -0
- package/lib/browser/components/connection-bar.js.map +1 -0
- package/lib/browser/components/context-menu.d.ts +13 -0
- package/lib/browser/components/context-menu.d.ts.map +1 -0
- package/lib/browser/components/context-menu.js +104 -0
- package/lib/browser/components/context-menu.js.map +1 -0
- package/lib/browser/components/conversation-scroll.d.ts +14 -0
- package/lib/browser/components/conversation-scroll.d.ts.map +1 -0
- package/lib/browser/components/conversation-scroll.js +158 -0
- package/lib/browser/components/conversation-scroll.js.map +1 -0
- package/lib/browser/components/dialog-view.d.ts +10 -0
- package/lib/browser/components/dialog-view.d.ts.map +1 -0
- package/lib/browser/components/dialog-view.js +77 -0
- package/lib/browser/components/dialog-view.js.map +1 -0
- package/lib/browser/components/diff-editor.d.ts +11 -0
- package/lib/browser/components/diff-editor.d.ts.map +1 -0
- package/lib/browser/components/diff-editor.js +137 -0
- package/lib/browser/components/diff-editor.js.map +1 -0
- package/lib/browser/components/diff-view.d.ts +5 -0
- package/lib/browser/components/diff-view.d.ts.map +1 -0
- package/lib/browser/components/diff-view.js +47 -0
- package/lib/browser/components/diff-view.js.map +1 -0
- package/lib/browser/components/dino.d.ts +9 -0
- package/lib/browser/components/dino.d.ts.map +1 -0
- package/lib/browser/components/dino.js +52 -0
- package/lib/browser/components/dino.js.map +1 -0
- package/lib/browser/components/editor-area.d.ts +29 -0
- package/lib/browser/components/editor-area.d.ts.map +1 -0
- package/lib/browser/components/editor-area.js +171 -0
- package/lib/browser/components/editor-area.js.map +1 -0
- package/lib/browser/components/folder-picker.d.ts +29 -0
- package/lib/browser/components/folder-picker.d.ts.map +1 -0
- package/lib/browser/components/folder-picker.js +144 -0
- package/lib/browser/components/folder-picker.js.map +1 -0
- package/lib/browser/components/folder-picker.spec.d.ts +2 -0
- package/lib/browser/components/folder-picker.spec.d.ts.map +1 -0
- package/lib/browser/components/folder-picker.spec.js +28 -0
- package/lib/browser/components/folder-picker.spec.js.map +1 -0
- package/lib/browser/components/fork-view.d.ts +15 -0
- package/lib/browser/components/fork-view.d.ts.map +1 -0
- package/lib/browser/components/fork-view.js +79 -0
- package/lib/browser/components/fork-view.js.map +1 -0
- package/lib/browser/components/hero-cards.d.ts +21 -0
- package/lib/browser/components/hero-cards.d.ts.map +1 -0
- package/lib/browser/components/hero-cards.js +146 -0
- package/lib/browser/components/hero-cards.js.map +1 -0
- package/lib/browser/components/icon.d.ts +30 -0
- package/lib/browser/components/icon.d.ts.map +1 -0
- package/lib/browser/components/icon.js +61 -0
- package/lib/browser/components/icon.js.map +1 -0
- package/lib/browser/components/link-dialog.d.ts +4 -0
- package/lib/browser/components/link-dialog.d.ts.map +1 -0
- package/lib/browser/components/link-dialog.js +81 -0
- package/lib/browser/components/link-dialog.js.map +1 -0
- package/lib/browser/components/link.d.ts +20 -0
- package/lib/browser/components/link.d.ts.map +1 -0
- package/lib/browser/components/link.js +94 -0
- package/lib/browser/components/link.js.map +1 -0
- package/lib/browser/components/manage-menu.d.ts +14 -0
- package/lib/browser/components/manage-menu.d.ts.map +1 -0
- package/lib/browser/components/manage-menu.js +132 -0
- package/lib/browser/components/manage-menu.js.map +1 -0
- package/lib/browser/components/markdown.d.ts +10 -0
- package/lib/browser/components/markdown.d.ts.map +1 -0
- package/lib/browser/components/markdown.js +135 -0
- package/lib/browser/components/markdown.js.map +1 -0
- package/lib/browser/components/markdown.spec.d.ts +2 -0
- package/lib/browser/components/markdown.spec.d.ts.map +1 -0
- package/lib/browser/components/markdown.spec.js +72 -0
- package/lib/browser/components/markdown.spec.js.map +1 -0
- package/lib/browser/components/math.d.ts +11 -0
- package/lib/browser/components/math.d.ts.map +1 -0
- package/lib/browser/components/math.js +57 -0
- package/lib/browser/components/math.js.map +1 -0
- package/lib/browser/components/media.d.ts +12 -0
- package/lib/browser/components/media.d.ts.map +1 -0
- package/lib/browser/components/media.js +113 -0
- package/lib/browser/components/media.js.map +1 -0
- package/lib/browser/components/mermaid-view.d.ts +11 -0
- package/lib/browser/components/mermaid-view.d.ts.map +1 -0
- package/lib/browser/components/mermaid-view.js +120 -0
- package/lib/browser/components/mermaid-view.js.map +1 -0
- package/lib/browser/components/message-actions.d.ts +13 -0
- package/lib/browser/components/message-actions.d.ts.map +1 -0
- package/lib/browser/components/message-actions.js +114 -0
- package/lib/browser/components/message-actions.js.map +1 -0
- package/lib/browser/components/message-footer.d.ts +30 -0
- package/lib/browser/components/message-footer.d.ts.map +1 -0
- package/lib/browser/components/message-footer.js +124 -0
- package/lib/browser/components/message-footer.js.map +1 -0
- package/lib/browser/components/message-list.d.ts +38 -0
- package/lib/browser/components/message-list.d.ts.map +1 -0
- package/lib/browser/components/message-list.js +257 -0
- package/lib/browser/components/message-list.js.map +1 -0
- package/lib/browser/components/message-list.spec.d.ts +2 -0
- package/lib/browser/components/message-list.spec.d.ts.map +1 -0
- package/lib/browser/components/message-list.spec.js +269 -0
- package/lib/browser/components/message-list.spec.js.map +1 -0
- package/lib/browser/components/notice-center.d.ts +4 -0
- package/lib/browser/components/notice-center.d.ts.map +1 -0
- package/lib/browser/components/notice-center.js +150 -0
- package/lib/browser/components/notice-center.js.map +1 -0
- package/lib/browser/components/relay-view.d.ts +6 -0
- package/lib/browser/components/relay-view.d.ts.map +1 -0
- package/lib/browser/components/relay-view.js +150 -0
- package/lib/browser/components/relay-view.js.map +1 -0
- package/lib/browser/components/run-status.d.ts +10 -0
- package/lib/browser/components/run-status.d.ts.map +1 -0
- package/lib/browser/components/run-status.js +90 -0
- package/lib/browser/components/run-status.js.map +1 -0
- package/lib/browser/components/session-settings.d.ts +38 -0
- package/lib/browser/components/session-settings.d.ts.map +1 -0
- package/lib/browser/components/session-settings.js +121 -0
- package/lib/browser/components/session-settings.js.map +1 -0
- package/lib/browser/components/session-settings.spec.d.ts +2 -0
- package/lib/browser/components/session-settings.spec.d.ts.map +1 -0
- package/lib/browser/components/session-settings.spec.js +47 -0
- package/lib/browser/components/session-settings.spec.js.map +1 -0
- package/lib/browser/components/session-view.d.ts +25 -0
- package/lib/browser/components/session-view.d.ts.map +1 -0
- package/lib/browser/components/session-view.js +120 -0
- package/lib/browser/components/session-view.js.map +1 -0
- package/lib/browser/components/settings-controls.d.ts +41 -0
- package/lib/browser/components/settings-controls.d.ts.map +1 -0
- package/lib/browser/components/settings-controls.js +68 -0
- package/lib/browser/components/settings-controls.js.map +1 -0
- package/lib/browser/components/settings-view.d.ts +23 -0
- package/lib/browser/components/settings-view.d.ts.map +1 -0
- package/lib/browser/components/settings-view.js +394 -0
- package/lib/browser/components/settings-view.js.map +1 -0
- package/lib/browser/components/split-pane.d.ts +25 -0
- package/lib/browser/components/split-pane.d.ts.map +1 -0
- package/lib/browser/components/split-pane.js +113 -0
- package/lib/browser/components/split-pane.js.map +1 -0
- package/lib/browser/components/ta-avatar.d.ts +14 -0
- package/lib/browser/components/ta-avatar.d.ts.map +1 -0
- package/lib/browser/components/ta-avatar.js +221 -0
- package/lib/browser/components/ta-avatar.js.map +1 -0
- package/lib/browser/components/ta-avatar.spec.d.ts +2 -0
- package/lib/browser/components/ta-avatar.spec.d.ts.map +1 -0
- package/lib/browser/components/ta-avatar.spec.js +60 -0
- package/lib/browser/components/ta-avatar.spec.js.map +1 -0
- package/lib/browser/components/tool-view.d.ts +19 -0
- package/lib/browser/components/tool-view.d.ts.map +1 -0
- package/lib/browser/components/tool-view.js +146 -0
- package/lib/browser/components/tool-view.js.map +1 -0
- package/lib/browser/components/trusted-domains.d.ts +4 -0
- package/lib/browser/components/trusted-domains.d.ts.map +1 -0
- package/lib/browser/components/trusted-domains.js +75 -0
- package/lib/browser/components/trusted-domains.js.map +1 -0
- package/lib/browser/components/web-composer.d.ts +15 -0
- package/lib/browser/components/web-composer.d.ts.map +1 -0
- package/lib/browser/components/web-composer.js +58 -0
- package/lib/browser/components/web-composer.js.map +1 -0
- package/lib/browser/components/web-dialog.d.ts +5 -0
- package/lib/browser/components/web-dialog.d.ts.map +1 -0
- package/lib/browser/components/web-dialog.js +58 -0
- package/lib/browser/components/web-dialog.js.map +1 -0
- package/lib/browser/components/workbench-toggle.d.ts +13 -0
- package/lib/browser/components/workbench-toggle.d.ts.map +1 -0
- package/lib/browser/components/workbench-toggle.js +54 -0
- package/lib/browser/components/workbench-toggle.js.map +1 -0
- package/lib/browser/components/workbench-toggle.spec.d.ts +2 -0
- package/lib/browser/components/workbench-toggle.spec.d.ts.map +1 -0
- package/lib/browser/components/workbench-toggle.spec.js +64 -0
- package/lib/browser/components/workbench-toggle.spec.js.map +1 -0
- package/lib/browser/components/workbench-view.d.ts +9 -0
- package/lib/browser/components/workbench-view.d.ts.map +1 -0
- package/lib/browser/components/workbench-view.js +99 -0
- package/lib/browser/components/workbench-view.js.map +1 -0
- package/lib/browser/components/working-directory.d.ts +6 -0
- package/lib/browser/components/working-directory.d.ts.map +1 -0
- package/lib/browser/components/working-directory.js +61 -0
- package/lib/browser/components/working-directory.js.map +1 -0
- package/lib/browser/editor/monaco-loader.d.ts +61 -0
- package/lib/browser/editor/monaco-loader.d.ts.map +1 -0
- package/lib/browser/editor/monaco-loader.js +138 -0
- package/lib/browser/editor/monaco-loader.js.map +1 -0
- package/lib/browser/editor/monaco-loader.spec.d.ts +2 -0
- package/lib/browser/editor/monaco-loader.spec.d.ts.map +1 -0
- package/lib/browser/editor/monaco-loader.spec.js +39 -0
- package/lib/browser/editor/monaco-loader.spec.js.map +1 -0
- package/lib/browser/editor/monaco.d.ts +46 -0
- package/lib/browser/editor/monaco.d.ts.map +1 -0
- package/lib/browser/editor/monaco.js +93 -0
- package/lib/browser/editor/monaco.js.map +1 -0
- package/lib/browser/extension/extension-view.d.ts +36 -0
- package/lib/browser/extension/extension-view.d.ts.map +1 -0
- package/lib/browser/extension/extension-view.js +91 -0
- package/lib/browser/extension/extension-view.js.map +1 -0
- package/lib/browser/extension/icons.d.ts +4 -0
- package/lib/browser/extension/icons.d.ts.map +1 -0
- package/lib/browser/extension/icons.js +85 -0
- package/lib/browser/extension/icons.js.map +1 -0
- package/lib/browser/extension/web-extension-api.d.ts +363 -0
- package/lib/browser/extension/web-extension-api.d.ts.map +1 -0
- package/lib/browser/extension/web-extension-api.js +3 -0
- package/lib/browser/extension/web-extension-api.js.map +1 -0
- package/lib/browser/extension/web-extension-protocol.d.ts +133 -0
- package/lib/browser/extension/web-extension-protocol.d.ts.map +1 -0
- package/lib/browser/extension/web-extension-protocol.js +13 -0
- package/lib/browser/extension/web-extension-protocol.js.map +1 -0
- package/lib/browser/extension/web-extensions.d.ts +119 -0
- package/lib/browser/extension/web-extensions.d.ts.map +1 -0
- package/lib/browser/extension/web-extensions.js +690 -0
- package/lib/browser/extension/web-extensions.js.map +1 -0
- package/lib/browser/extension/web-extensions.spec.d.ts +2 -0
- package/lib/browser/extension/web-extensions.spec.d.ts.map +1 -0
- package/lib/browser/extension/web-extensions.spec.js +617 -0
- package/lib/browser/extension/web-extensions.spec.js.map +1 -0
- package/lib/browser/hooks.d.ts +22 -0
- package/lib/browser/hooks.d.ts.map +1 -0
- package/lib/browser/hooks.js +109 -0
- package/lib/browser/hooks.js.map +1 -0
- package/lib/browser/i18n/locales.d.ts +436 -0
- package/lib/browser/i18n/locales.d.ts.map +1 -0
- package/lib/browser/i18n/locales.js +38 -0
- package/lib/browser/i18n/locales.js.map +1 -0
- package/lib/browser/i18n/messages.d.ts +428 -0
- package/lib/browser/i18n/messages.d.ts.map +1 -0
- package/lib/browser/i18n/messages.js +862 -0
- package/lib/browser/i18n/messages.js.map +1 -0
- package/lib/browser/i18n/use-t.d.ts +8 -0
- package/lib/browser/i18n/use-t.d.ts.map +1 -0
- package/lib/browser/i18n/use-t.js +54 -0
- package/lib/browser/i18n/use-t.js.map +1 -0
- package/lib/browser/index.d.ts +53 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +69 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/links/links-protocol.d.ts +36 -0
- package/lib/browser/links/links-protocol.d.ts.map +1 -0
- package/lib/browser/links/links-protocol.js +5 -0
- package/lib/browser/links/links-protocol.js.map +1 -0
- package/lib/browser/links/links.d.ts +33 -0
- package/lib/browser/links/links.d.ts.map +1 -0
- package/lib/browser/links/links.js +144 -0
- package/lib/browser/links/links.js.map +1 -0
- package/lib/browser/links/links.spec.d.ts +2 -0
- package/lib/browser/links/links.spec.d.ts.map +1 -0
- package/lib/browser/links/links.spec.js +123 -0
- package/lib/browser/links/links.spec.js.map +1 -0
- package/lib/browser/markdown/hooks.d.ts +7 -0
- package/lib/browser/markdown/hooks.d.ts.map +1 -0
- package/lib/browser/markdown/hooks.js +58 -0
- package/lib/browser/markdown/hooks.js.map +1 -0
- package/lib/browser/markdown/lazy.d.ts +22 -0
- package/lib/browser/markdown/lazy.d.ts.map +1 -0
- package/lib/browser/markdown/lazy.js +44 -0
- package/lib/browser/markdown/lazy.js.map +1 -0
- package/lib/browser/markdown/lazy.spec.d.ts +2 -0
- package/lib/browser/markdown/lazy.spec.d.ts.map +1 -0
- package/lib/browser/markdown/lazy.spec.js +35 -0
- package/lib/browser/markdown/lazy.spec.js.map +1 -0
- package/lib/browser/markdown/math.d.ts +19 -0
- package/lib/browser/markdown/math.d.ts.map +1 -0
- package/lib/browser/markdown/math.js +33 -0
- package/lib/browser/markdown/math.js.map +1 -0
- package/lib/browser/markdown/math.spec.d.ts +2 -0
- package/lib/browser/markdown/math.spec.d.ts.map +1 -0
- package/lib/browser/markdown/math.spec.js +24 -0
- package/lib/browser/markdown/math.spec.js.map +1 -0
- package/lib/browser/markdown/mermaid.d.ts +21 -0
- package/lib/browser/markdown/mermaid.d.ts.map +1 -0
- package/lib/browser/markdown/mermaid.js +87 -0
- package/lib/browser/markdown/mermaid.js.map +1 -0
- package/lib/browser/markdown/mermaid.spec.d.ts +2 -0
- package/lib/browser/markdown/mermaid.spec.d.ts.map +1 -0
- package/lib/browser/markdown/mermaid.spec.js +21 -0
- package/lib/browser/markdown/mermaid.spec.js.map +1 -0
- package/lib/browser/module.d.ts +5 -0
- package/lib/browser/module.d.ts.map +1 -0
- package/lib/browser/module.js +8 -0
- package/lib/browser/module.js.map +1 -0
- package/lib/browser/notices/notices-protocol.d.ts +83 -0
- package/lib/browser/notices/notices-protocol.d.ts.map +1 -0
- package/lib/browser/notices/notices-protocol.js +5 -0
- package/lib/browser/notices/notices-protocol.js.map +1 -0
- package/lib/browser/notices/notices.d.ts +48 -0
- package/lib/browser/notices/notices.d.ts.map +1 -0
- package/lib/browser/notices/notices.js +165 -0
- package/lib/browser/notices/notices.js.map +1 -0
- package/lib/browser/notices/notices.spec.d.ts +2 -0
- package/lib/browser/notices/notices.spec.d.ts.map +1 -0
- package/lib/browser/notices/notices.spec.js +96 -0
- package/lib/browser/notices/notices.spec.js.map +1 -0
- package/lib/browser/pwa/pwa-protocol.d.ts +21 -0
- package/lib/browser/pwa/pwa-protocol.d.ts.map +1 -0
- package/lib/browser/pwa/pwa-protocol.js +5 -0
- package/lib/browser/pwa/pwa-protocol.js.map +1 -0
- package/lib/browser/pwa/pwa.d.ts +40 -0
- package/lib/browser/pwa/pwa.d.ts.map +1 -0
- package/lib/browser/pwa/pwa.js +123 -0
- package/lib/browser/pwa/pwa.js.map +1 -0
- package/lib/browser/pwa/pwa.spec.d.ts +2 -0
- package/lib/browser/pwa/pwa.spec.d.ts.map +1 -0
- package/lib/browser/pwa/pwa.spec.js +134 -0
- package/lib/browser/pwa/pwa.spec.js.map +1 -0
- package/lib/browser/settings/agent-settings.d.ts +34 -0
- package/lib/browser/settings/agent-settings.d.ts.map +1 -0
- package/lib/browser/settings/agent-settings.js +88 -0
- package/lib/browser/settings/agent-settings.js.map +1 -0
- package/lib/browser/settings/agent-settings.spec.d.ts +2 -0
- package/lib/browser/settings/agent-settings.spec.d.ts.map +1 -0
- package/lib/browser/settings/agent-settings.spec.js +53 -0
- package/lib/browser/settings/agent-settings.spec.js.map +1 -0
- package/lib/browser/settings/settings-protocol.d.ts +45 -0
- package/lib/browser/settings/settings-protocol.d.ts.map +1 -0
- package/lib/browser/settings/settings-protocol.js +38 -0
- package/lib/browser/settings/settings-protocol.js.map +1 -0
- package/lib/browser/settings/settings.d.ts +32 -0
- package/lib/browser/settings/settings.d.ts.map +1 -0
- package/lib/browser/settings/settings.js +105 -0
- package/lib/browser/settings/settings.js.map +1 -0
- package/lib/browser/settings/settings.spec.d.ts +2 -0
- package/lib/browser/settings/settings.spec.d.ts.map +1 -0
- package/lib/browser/settings/settings.spec.js +32 -0
- package/lib/browser/settings/settings.spec.js.map +1 -0
- package/lib/browser/state/state-protocol.d.ts +49 -0
- package/lib/browser/state/state-protocol.d.ts.map +1 -0
- package/lib/browser/state/state-protocol.js +35 -0
- package/lib/browser/state/state-protocol.js.map +1 -0
- package/lib/browser/state/state.d.ts +40 -0
- package/lib/browser/state/state.d.ts.map +1 -0
- package/lib/browser/state/state.js +213 -0
- package/lib/browser/state/state.js.map +1 -0
- package/lib/browser/state/state.spec.d.ts +2 -0
- package/lib/browser/state/state.spec.d.ts.map +1 -0
- package/lib/browser/state/state.spec.js +201 -0
- package/lib/browser/state/state.spec.js.map +1 -0
- package/lib/browser/style/base.d.ts +3 -0
- package/lib/browser/style/base.d.ts.map +1 -0
- package/lib/browser/style/base.js +143 -0
- package/lib/browser/style/base.js.map +1 -0
- package/lib/browser/style/conversation.d.ts +3 -0
- package/lib/browser/style/conversation.d.ts.map +1 -0
- package/lib/browser/style/conversation.js +204 -0
- package/lib/browser/style/conversation.js.map +1 -0
- package/lib/browser/style/layout.d.ts +3 -0
- package/lib/browser/style/layout.d.ts.map +1 -0
- package/lib/browser/style/layout.js +374 -0
- package/lib/browser/style/layout.js.map +1 -0
- package/lib/browser/style/pages.d.ts +3 -0
- package/lib/browser/style/pages.d.ts.map +1 -0
- package/lib/browser/style/pages.js +78 -0
- package/lib/browser/style/pages.js.map +1 -0
- package/lib/browser/style/shell.d.ts +3 -0
- package/lib/browser/style/shell.d.ts.map +1 -0
- package/lib/browser/style/shell.js +239 -0
- package/lib/browser/style/shell.js.map +1 -0
- package/lib/browser/style.d.ts +6 -0
- package/lib/browser/style.d.ts.map +1 -0
- package/lib/browser/style.js +14 -0
- package/lib/browser/style.js.map +1 -0
- package/lib/browser/util/composer.d.ts +86 -0
- package/lib/browser/util/composer.d.ts.map +1 -0
- package/lib/browser/util/composer.js +124 -0
- package/lib/browser/util/composer.js.map +1 -0
- package/lib/browser/util/composer.spec.d.ts +2 -0
- package/lib/browser/util/composer.spec.d.ts.map +1 -0
- package/lib/browser/util/composer.spec.js +66 -0
- package/lib/browser/util/composer.spec.js.map +1 -0
- package/lib/browser/util/diff.d.ts +18 -0
- package/lib/browser/util/diff.d.ts.map +1 -0
- package/lib/browser/util/diff.js +32 -0
- package/lib/browser/util/diff.js.map +1 -0
- package/lib/browser/util/diff.spec.d.ts +2 -0
- package/lib/browser/util/diff.spec.d.ts.map +1 -0
- package/lib/browser/util/diff.spec.js +21 -0
- package/lib/browser/util/diff.spec.js.map +1 -0
- package/lib/browser/util/frame.d.ts +33 -0
- package/lib/browser/util/frame.d.ts.map +1 -0
- package/lib/browser/util/frame.js +50 -0
- package/lib/browser/util/frame.js.map +1 -0
- package/lib/browser/util/frame.spec.d.ts +2 -0
- package/lib/browser/util/frame.spec.d.ts.map +1 -0
- package/lib/browser/util/frame.spec.js +60 -0
- package/lib/browser/util/frame.spec.js.map +1 -0
- package/lib/browser/util/layout.d.ts +27 -0
- package/lib/browser/util/layout.d.ts.map +1 -0
- package/lib/browser/util/layout.js +57 -0
- package/lib/browser/util/layout.js.map +1 -0
- package/lib/browser/util/layout.spec.d.ts +2 -0
- package/lib/browser/util/layout.spec.d.ts.map +1 -0
- package/lib/browser/util/layout.spec.js +35 -0
- package/lib/browser/util/layout.spec.js.map +1 -0
- package/lib/browser/util/link.d.ts +54 -0
- package/lib/browser/util/link.d.ts.map +1 -0
- package/lib/browser/util/link.js +232 -0
- package/lib/browser/util/link.js.map +1 -0
- package/lib/browser/util/link.spec.d.ts +2 -0
- package/lib/browser/util/link.spec.d.ts.map +1 -0
- package/lib/browser/util/link.spec.js +101 -0
- package/lib/browser/util/link.spec.js.map +1 -0
- package/lib/browser/util/markdown.d.ts +87 -0
- package/lib/browser/util/markdown.d.ts.map +1 -0
- package/lib/browser/util/markdown.js +333 -0
- package/lib/browser/util/markdown.js.map +1 -0
- package/lib/browser/util/markdown.spec.d.ts +2 -0
- package/lib/browser/util/markdown.spec.d.ts.map +1 -0
- package/lib/browser/util/markdown.spec.js +124 -0
- package/lib/browser/util/markdown.spec.js.map +1 -0
- package/lib/browser/util/message.d.ts +75 -0
- package/lib/browser/util/message.d.ts.map +1 -0
- package/lib/browser/util/message.js +146 -0
- package/lib/browser/util/message.js.map +1 -0
- package/lib/browser/util/message.spec.d.ts +2 -0
- package/lib/browser/util/message.spec.d.ts.map +1 -0
- package/lib/browser/util/message.spec.js +59 -0
- package/lib/browser/util/message.spec.js.map +1 -0
- package/lib/browser/util/process.d.ts +74 -0
- package/lib/browser/util/process.d.ts.map +1 -0
- package/lib/browser/util/process.js +138 -0
- package/lib/browser/util/process.js.map +1 -0
- package/lib/browser/util/process.spec.d.ts +2 -0
- package/lib/browser/util/process.spec.d.ts.map +1 -0
- package/lib/browser/util/process.spec.js +106 -0
- package/lib/browser/util/process.spec.js.map +1 -0
- package/lib/browser/util/progress.d.ts +51 -0
- package/lib/browser/util/progress.d.ts.map +1 -0
- package/lib/browser/util/progress.js +146 -0
- package/lib/browser/util/progress.js.map +1 -0
- package/lib/browser/util/progress.spec.d.ts +2 -0
- package/lib/browser/util/progress.spec.d.ts.map +1 -0
- package/lib/browser/util/progress.spec.js +77 -0
- package/lib/browser/util/progress.spec.js.map +1 -0
- package/lib/browser/util/qr-code.d.ts +38 -0
- package/lib/browser/util/qr-code.d.ts.map +1 -0
- package/lib/browser/util/qr-code.js +353 -0
- package/lib/browser/util/qr-code.js.map +1 -0
- package/lib/browser/util/qr-code.spec.d.ts +2 -0
- package/lib/browser/util/qr-code.spec.d.ts.map +1 -0
- package/lib/browser/util/qr-code.spec.js +48 -0
- package/lib/browser/util/qr-code.spec.js.map +1 -0
- package/lib/browser/util/tool.d.ts +42 -0
- package/lib/browser/util/tool.d.ts.map +1 -0
- package/lib/browser/util/tool.js +154 -0
- package/lib/browser/util/tool.js.map +1 -0
- package/lib/browser/util/tool.spec.d.ts +2 -0
- package/lib/browser/util/tool.spec.d.ts.map +1 -0
- package/lib/browser/util/tool.spec.js +73 -0
- package/lib/browser/util/tool.spec.js.map +1 -0
- package/lib/browser/view.d.ts +4 -0
- package/lib/browser/view.d.ts.map +1 -0
- package/lib/browser/view.js +19 -0
- package/lib/browser/view.js.map +1 -0
- package/lib/browser/workbench-protocol.d.ts +51 -0
- package/lib/browser/workbench-protocol.d.ts.map +1 -0
- package/lib/browser/workbench-protocol.js +5 -0
- package/lib/browser/workbench-protocol.js.map +1 -0
- package/lib/browser/workbench.d.ts +64 -0
- package/lib/browser/workbench.d.ts.map +1 -0
- package/lib/browser/workbench.js +281 -0
- package/lib/browser/workbench.js.map +1 -0
- package/lib/browser/workbench.spec.d.ts +2 -0
- package/lib/browser/workbench.spec.d.ts.map +1 -0
- package/lib/browser/workbench.spec.js +34 -0
- package/lib/browser/workbench.spec.js.map +1 -0
- package/package.json +81 -4
- package/src/browser/assistant/assistant-export.spec.ts +30 -0
- package/src/browser/assistant/assistant-export.ts +41 -0
- package/src/browser/assistant/assistant-extension.spec.ts +122 -0
- package/src/browser/assistant/assistant-extension.ts +137 -0
- package/src/browser/assistant/assistant-hooks.ts +63 -0
- package/src/browser/assistant/assistant-protocol.ts +55 -0
- package/src/browser/assistant/assistant-tasks.tsx +194 -0
- package/src/browser/assistant/assistant-view.tsx +453 -0
- package/src/browser/assistant/assistant.spec.ts +80 -0
- package/src/browser/assistant/assistant.ts +315 -0
- package/src/browser/assistant/voice.spec.ts +8 -0
- package/src/browser/assistant/voice.ts +87 -0
- package/src/browser/avatar/dino-avatar.spec.ts +151 -0
- package/src/browser/avatar/dino-avatar.ts +541 -0
- package/src/browser/avatar/dino-motion.ts +313 -0
- package/src/browser/chat/chat-protocol.ts +47 -0
- package/src/browser/chat/chat-view.tsx +155 -0
- package/src/browser/chat/chat.spec.ts +194 -0
- package/src/browser/chat/chat.ts +335 -0
- package/src/browser/components/account-menu.tsx +114 -0
- package/src/browser/components/agent-settings-view.tsx +196 -0
- package/src/browser/components/app-view.tsx +553 -0
- package/src/browser/components/auth-pictures.tsx +55 -0
- package/src/browser/components/auth-view.tsx +421 -0
- package/src/browser/components/callout.tsx +33 -0
- package/src/browser/components/chat-list.spec.ts +66 -0
- package/src/browser/components/chat-list.tsx +276 -0
- package/src/browser/components/code-editor.tsx +114 -0
- package/src/browser/components/composer-box.tsx +475 -0
- package/src/browser/components/composer-menu.tsx +49 -0
- package/src/browser/components/composer.spec.tsx +130 -0
- package/src/browser/components/composer.tsx +170 -0
- package/src/browser/components/connection-bar.tsx +85 -0
- package/src/browser/components/context-menu.tsx +100 -0
- package/src/browser/components/conversation-scroll.ts +126 -0
- package/src/browser/components/dialog-view.tsx +82 -0
- package/src/browser/components/diff-editor.tsx +131 -0
- package/src/browser/components/diff-view.tsx +19 -0
- package/src/browser/components/dino.tsx +19 -0
- package/src/browser/components/editor-area.tsx +234 -0
- package/src/browser/components/folder-picker.spec.ts +30 -0
- package/src/browser/components/folder-picker.tsx +177 -0
- package/src/browser/components/fork-view.tsx +65 -0
- package/src/browser/components/hero-cards.tsx +189 -0
- package/src/browser/components/icon.tsx +62 -0
- package/src/browser/components/link-dialog.tsx +66 -0
- package/src/browser/components/link.tsx +77 -0
- package/src/browser/components/manage-menu.tsx +165 -0
- package/src/browser/components/markdown.spec.tsx +46 -0
- package/src/browser/components/markdown.tsx +155 -0
- package/src/browser/components/math.tsx +21 -0
- package/src/browser/components/media.tsx +91 -0
- package/src/browser/components/mermaid-view.tsx +105 -0
- package/src/browser/components/message-actions.tsx +89 -0
- package/src/browser/components/message-footer.tsx +128 -0
- package/src/browser/components/message-list.spec.tsx +321 -0
- package/src/browser/components/message-list.tsx +328 -0
- package/src/browser/components/notice-center.tsx +187 -0
- package/src/browser/components/relay-view.tsx +146 -0
- package/src/browser/components/run-status.tsx +70 -0
- package/src/browser/components/session-settings.spec.tsx +49 -0
- package/src/browser/components/session-settings.tsx +119 -0
- package/src/browser/components/session-view.tsx +153 -0
- package/src/browser/components/settings-controls.tsx +94 -0
- package/src/browser/components/settings-view.tsx +573 -0
- package/src/browser/components/split-pane.tsx +108 -0
- package/src/browser/components/ta-avatar.spec.tsx +27 -0
- package/src/browser/components/ta-avatar.tsx +251 -0
- package/src/browser/components/tool-view.tsx +186 -0
- package/src/browser/components/trusted-domains.tsx +60 -0
- package/src/browser/components/web-composer.tsx +47 -0
- package/src/browser/components/web-dialog.tsx +29 -0
- package/src/browser/components/workbench-toggle.spec.tsx +35 -0
- package/src/browser/components/workbench-toggle.tsx +24 -0
- package/src/browser/components/workbench-view.tsx +77 -0
- package/src/browser/components/working-directory.tsx +22 -0
- package/src/browser/editor/monaco-loader.spec.ts +39 -0
- package/src/browser/editor/monaco-loader.ts +139 -0
- package/src/browser/editor/monaco.ts +55 -0
- package/src/browser/editor/worker-modules.d.ts +5 -0
- package/src/browser/extension/extension-view.tsx +78 -0
- package/src/browser/extension/icons.ts +161 -0
- package/src/browser/extension/web-extension-api.ts +346 -0
- package/src/browser/extension/web-extension-protocol.ts +154 -0
- package/src/browser/extension/web-extensions.spec.ts +597 -0
- package/src/browser/extension/web-extensions.ts +717 -0
- package/src/browser/hooks.ts +102 -0
- package/src/browser/i18n/locales.ts +20 -0
- package/src/browser/i18n/messages.ts +864 -0
- package/src/browser/i18n/use-t.ts +21 -0
- package/src/browser/index.ts +52 -0
- package/src/browser/links/links-protocol.ts +41 -0
- package/src/browser/links/links.spec.ts +132 -0
- package/src/browser/links/links.ts +127 -0
- package/src/browser/markdown/hooks.ts +32 -0
- package/src/browser/markdown/lazy.spec.ts +34 -0
- package/src/browser/markdown/lazy.ts +46 -0
- package/src/browser/markdown/math.spec.ts +20 -0
- package/src/browser/markdown/math.ts +33 -0
- package/src/browser/markdown/mermaid.spec.ts +21 -0
- package/src/browser/markdown/mermaid.ts +89 -0
- package/src/browser/markdown/style-modules.d.ts +2 -0
- package/src/browser/module.ts +6 -0
- package/src/browser/notices/notices-protocol.ts +92 -0
- package/src/browser/notices/notices.spec.ts +99 -0
- package/src/browser/notices/notices.ts +173 -0
- package/src/browser/public/icons/apple-touch-icon.png +0 -0
- package/src/browser/public/icons/icon-192.png +0 -0
- package/src/browser/public/icons/icon-512.png +0 -0
- package/src/browser/public/icons/icon.svg +1 -0
- package/src/browser/public/icons/maskable-512.png +0 -0
- package/src/browser/public/manifest.webmanifest +40 -0
- package/src/browser/public/sw.js +78 -0
- package/src/browser/pwa/pwa-protocol.ts +22 -0
- package/src/browser/pwa/pwa.spec.ts +143 -0
- package/src/browser/pwa/pwa.ts +123 -0
- package/src/browser/settings/agent-settings.spec.ts +56 -0
- package/src/browser/settings/agent-settings.ts +96 -0
- package/src/browser/settings/settings-protocol.ts +75 -0
- package/src/browser/settings/settings.spec.ts +31 -0
- package/src/browser/settings/settings.ts +89 -0
- package/src/browser/state/state-protocol.ts +71 -0
- package/src/browser/state/state.spec.ts +214 -0
- package/src/browser/state/state.ts +217 -0
- package/src/browser/style/base.ts +139 -0
- package/src/browser/style/conversation.ts +200 -0
- package/src/browser/style/layout.ts +370 -0
- package/src/browser/style/pages.ts +74 -0
- package/src/browser/style/shell.ts +235 -0
- package/src/browser/style.ts +11 -0
- package/src/browser/util/composer.spec.ts +71 -0
- package/src/browser/util/composer.ts +157 -0
- package/src/browser/util/diff.spec.ts +20 -0
- package/src/browser/util/diff.ts +33 -0
- package/src/browser/util/frame.spec.ts +62 -0
- package/src/browser/util/frame.ts +54 -0
- package/src/browser/util/layout.spec.ts +37 -0
- package/src/browser/util/layout.ts +71 -0
- package/src/browser/util/link.spec.ts +104 -0
- package/src/browser/util/link.ts +237 -0
- package/src/browser/util/markdown.spec.ts +133 -0
- package/src/browser/util/markdown.ts +347 -0
- package/src/browser/util/message.spec.ts +63 -0
- package/src/browser/util/message.ts +188 -0
- package/src/browser/util/process.spec.ts +133 -0
- package/src/browser/util/process.ts +166 -0
- package/src/browser/util/progress.spec.ts +86 -0
- package/src/browser/util/progress.ts +170 -0
- package/src/browser/util/qr-code.spec.ts +49 -0
- package/src/browser/util/qr-code.ts +371 -0
- package/src/browser/util/tool.spec.ts +78 -0
- package/src/browser/util/tool.ts +190 -0
- package/src/browser/view.ts +6 -0
- package/src/browser/workbench-protocol.ts +66 -0
- package/src/browser/workbench.spec.ts +37 -0
- package/src/browser/workbench.ts +297 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test';
|
|
2
|
+
import { type FrameScheduler, FrameUtil } from './frame';
|
|
3
|
+
|
|
4
|
+
function frames(): FrameScheduler & { run(): void; pending(): number } {
|
|
5
|
+
const callbacks = new Map<number, () => void>();
|
|
6
|
+
let next = 1;
|
|
7
|
+
return {
|
|
8
|
+
request: callback => {
|
|
9
|
+
callbacks.set(next, callback);
|
|
10
|
+
return next++;
|
|
11
|
+
},
|
|
12
|
+
cancel: handle => void callbacks.delete(handle),
|
|
13
|
+
run: () => {
|
|
14
|
+
const due = [...callbacks.values()];
|
|
15
|
+
callbacks.clear();
|
|
16
|
+
for (const callback of due) {
|
|
17
|
+
callback();
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
pending: () => callbacks.size,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
describe('FrameUtil', () => {
|
|
25
|
+
it('calls the listener once a frame, however often it is asked to', () => {
|
|
26
|
+
const scheduler = frames();
|
|
27
|
+
let calls = 0;
|
|
28
|
+
const { call } = FrameUtil.coalesce(() => calls++, scheduler);
|
|
29
|
+
call();
|
|
30
|
+
call();
|
|
31
|
+
call();
|
|
32
|
+
expect(scheduler.pending()).toBe(1);
|
|
33
|
+
scheduler.run();
|
|
34
|
+
expect(calls).toBe(1);
|
|
35
|
+
call();
|
|
36
|
+
scheduler.run();
|
|
37
|
+
expect(calls).toBe(2);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('drops a call not made yet when cancelled', () => {
|
|
41
|
+
const scheduler = frames();
|
|
42
|
+
let calls = 0;
|
|
43
|
+
const { call, cancel } = FrameUtil.coalesce(() => calls++, scheduler);
|
|
44
|
+
call();
|
|
45
|
+
cancel();
|
|
46
|
+
scheduler.run();
|
|
47
|
+
expect(calls).toBe(0);
|
|
48
|
+
call();
|
|
49
|
+
scheduler.run();
|
|
50
|
+
expect(calls).toBe(1);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('tells whether a view is at its bottom', () => {
|
|
54
|
+
expect(FrameUtil.atBottom({ scrollHeight: 1000, scrollTop: 600, clientHeight: 380 })).toBe(true);
|
|
55
|
+
expect(FrameUtil.atBottom({ scrollHeight: 1000, scrollTop: 400, clientHeight: 380 })).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('brings a message to the top of the view, with the room below it that its answer will fill', () => {
|
|
59
|
+
expect(FrameUtil.anchor(500, 800)).toEqual({ top: 488, minHeight: 1288 });
|
|
60
|
+
expect(FrameUtil.anchor(4, 800)).toEqual({ top: 0, minHeight: 800 });
|
|
61
|
+
});
|
|
62
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** What schedules a callback for the next frame, and cancels it: requestAnimationFrame in a page. */
|
|
2
|
+
export interface FrameScheduler {
|
|
3
|
+
request(callback: () => void): number;
|
|
4
|
+
cancel(handle: number): void;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** requestAnimationFrame; a timer of one frame where there is none (tests, workers). */
|
|
8
|
+
const ANIMATION_FRAME: FrameScheduler =
|
|
9
|
+
typeof requestAnimationFrame === 'function'
|
|
10
|
+
? { request: callback => requestAnimationFrame(callback), cancel: handle => cancelAnimationFrame(handle) }
|
|
11
|
+
: { request: callback => setTimeout(callback, 16) as unknown as number, cancel: handle => clearTimeout(handle) };
|
|
12
|
+
|
|
13
|
+
export namespace FrameUtil {
|
|
14
|
+
/**
|
|
15
|
+
* The listener, called at most once a frame however often the returned function is: a store that
|
|
16
|
+
* changes many times between two frames costs one render. `cancel` drops a call not made yet.
|
|
17
|
+
*/
|
|
18
|
+
export function coalesce(listener: () => void, scheduler: FrameScheduler = ANIMATION_FRAME): { call(): void; cancel(): void } {
|
|
19
|
+
let handle: number | undefined;
|
|
20
|
+
return {
|
|
21
|
+
call: () => {
|
|
22
|
+
handle ??= scheduler.request(() => {
|
|
23
|
+
handle = undefined;
|
|
24
|
+
listener();
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
cancel: () => {
|
|
28
|
+
if (handle !== undefined) {
|
|
29
|
+
scheduler.cancel(handle);
|
|
30
|
+
handle = undefined;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Below this distance from the bottom, the view follows what comes in. */
|
|
37
|
+
export const STICK_PX = 80;
|
|
38
|
+
|
|
39
|
+
export function atBottom(element: { scrollHeight: number; scrollTop: number; clientHeight: number }): boolean {
|
|
40
|
+
return element.scrollHeight - element.scrollTop - element.clientHeight < STICK_PX;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The room left above a message brought to the top of the view. */
|
|
44
|
+
export const ANCHOR_GAP = 12;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Where the view scrolls to show a message at its top (`offset`: from the top of the thread), and how
|
|
48
|
+
* tall the thread must be at least for it to get there while what answers it is still short.
|
|
49
|
+
*/
|
|
50
|
+
export function anchor(offset: number, viewport: number, gap = ANCHOR_GAP): { top: number; minHeight: number } {
|
|
51
|
+
const top = Math.max(0, offset - gap);
|
|
52
|
+
return { top, minHeight: top + viewport };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test';
|
|
2
|
+
import { LayoutUtil, type PaneSpec } from './layout';
|
|
3
|
+
|
|
4
|
+
const SIDE: PaneSpec = { key: 'side', initial: 260, min: 200, max: 480 };
|
|
5
|
+
|
|
6
|
+
describe('LayoutUtil', () => {
|
|
7
|
+
it('follows the drag within the bounds, on either side of the sash', () => {
|
|
8
|
+
expect(LayoutUtil.drag(260, 40, 'start', SIDE)).toEqual({ size: 300, collapsed: false });
|
|
9
|
+
expect(LayoutUtil.drag(260, 40, 'end', SIDE)).toEqual({ size: 220, collapsed: false });
|
|
10
|
+
expect(LayoutUtil.drag(260, 900, 'start', SIDE)).toEqual({ size: 480, collapsed: false });
|
|
11
|
+
expect(LayoutUtil.drag(260, -100, 'start', SIDE)).toEqual({ size: 200, collapsed: false });
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('collapses a pane dragged far below its minimum, keeping its width for when it opens again', () => {
|
|
15
|
+
expect(LayoutUtil.drag(300, -250, 'start', SIDE)).toEqual({ size: 300, collapsed: true });
|
|
16
|
+
expect(LayoutUtil.drag(300, 250, 'end', SIDE)).toEqual({ size: 300, collapsed: true });
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('moves the sash with arrow keys, and to the bounds with Home and End', () => {
|
|
20
|
+
expect(LayoutUtil.key(260, 'ArrowRight', false, 'start', SIDE)).toBe(276);
|
|
21
|
+
expect(LayoutUtil.key(260, 'ArrowRight', true, 'start', SIDE)).toBe(324);
|
|
22
|
+
expect(LayoutUtil.key(260, 'ArrowRight', false, 'end', SIDE)).toBe(244);
|
|
23
|
+
expect(LayoutUtil.key(210, 'ArrowLeft', true, 'start', SIDE)).toBe(200);
|
|
24
|
+
expect(LayoutUtil.key(260, 'Home', false, 'start', SIDE)).toBe(200);
|
|
25
|
+
expect(LayoutUtil.key(260, 'End', false, 'end', SIDE)).toBe(480);
|
|
26
|
+
expect(LayoutUtil.key(260, 'Enter', false, 'start', SIDE)).toBeUndefined();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('keeps the width in this browser, and reads back only a width within the bounds', () => {
|
|
30
|
+
const spec = LayoutUtil.state(SIDE);
|
|
31
|
+
expect(spec).toMatchObject({ key: 'layout.side', tier: 'device', initial: { size: 260, collapsed: false } });
|
|
32
|
+
expect(spec.parse({ size: 333, collapsed: true })).toEqual({ size: 333, collapsed: true });
|
|
33
|
+
expect(spec.parse({ size: 9999 })).toEqual({ size: 480, collapsed: false });
|
|
34
|
+
expect(spec.parse('not json')).toBeUndefined();
|
|
35
|
+
expect(spec.parse(null)).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { StateSpec } from '../state/state-protocol';
|
|
2
|
+
|
|
3
|
+
/** A column of the page whose width the user drags. */
|
|
4
|
+
export interface PaneSpec {
|
|
5
|
+
/** Its width is kept in this browser as `layout.<key>` (TaState, `device`). */
|
|
6
|
+
key: string;
|
|
7
|
+
initial: number;
|
|
8
|
+
min: number;
|
|
9
|
+
max: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface PaneState {
|
|
13
|
+
size: number;
|
|
14
|
+
collapsed: boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** `start`: the pane is before its sash, so dragging towards the end widens it. `end`: after it. */
|
|
18
|
+
export type PaneSide = 'start' | 'end';
|
|
19
|
+
|
|
20
|
+
/** Dragged narrower than this share of its minimum, a pane collapses. */
|
|
21
|
+
const COLLAPSE_AT = 0.5;
|
|
22
|
+
/** Pixels an arrow key moves a sash; with Shift, four times as many. */
|
|
23
|
+
const STEP = 16;
|
|
24
|
+
|
|
25
|
+
export namespace LayoutUtil {
|
|
26
|
+
export function clamp(size: number, spec: PaneSpec): number {
|
|
27
|
+
return Math.round(Math.min(spec.max, Math.max(spec.min, size)));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The pane after dragging its sash by `delta` pixels from where its width was `start`. */
|
|
31
|
+
export function drag(start: number, delta: number, side: PaneSide, spec: PaneSpec): PaneState {
|
|
32
|
+
const size = start + (side === 'start' ? delta : -delta);
|
|
33
|
+
if (size < spec.min * COLLAPSE_AT) {
|
|
34
|
+
return { size: clamp(start, spec), collapsed: true };
|
|
35
|
+
}
|
|
36
|
+
return { size: clamp(size, spec), collapsed: false };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** The width after a key on the focused sash; undefined for a key that does not move it. */
|
|
40
|
+
export function key(size: number, key: string, shift: boolean, side: PaneSide, spec: PaneSpec): number | undefined {
|
|
41
|
+
const step = shift ? STEP * 4 : STEP;
|
|
42
|
+
const grow = side === 'start' ? 'ArrowRight' : 'ArrowLeft';
|
|
43
|
+
const shrink = side === 'start' ? 'ArrowLeft' : 'ArrowRight';
|
|
44
|
+
switch (key) {
|
|
45
|
+
case grow:
|
|
46
|
+
return clamp(size + step, spec);
|
|
47
|
+
case shrink:
|
|
48
|
+
return clamp(size - step, spec);
|
|
49
|
+
case 'Home':
|
|
50
|
+
return spec.min;
|
|
51
|
+
case 'End':
|
|
52
|
+
return spec.max;
|
|
53
|
+
default:
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** What was kept, within the bounds; undefined for what is not a width (not ours, or from an older version). */
|
|
59
|
+
export function parse(value: unknown, spec: PaneSpec): PaneState | undefined {
|
|
60
|
+
const stored = value as Partial<PaneState> | null | undefined;
|
|
61
|
+
if (stored && typeof stored === 'object' && typeof stored.size === 'number' && Number.isFinite(stored.size)) {
|
|
62
|
+
return { size: clamp(stored.size, spec), collapsed: stored.collapsed === true };
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Where the width of the pane is kept: in this browser, which has its own screen. */
|
|
68
|
+
export function state(spec: PaneSpec): StateSpec<PaneState> {
|
|
69
|
+
return { key: `layout.${spec.key}`, tier: 'device', initial: { size: spec.initial, collapsed: false }, parse: value => parse(value, spec) };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test';
|
|
2
|
+
import { LinkUtil } from './link';
|
|
3
|
+
|
|
4
|
+
describe('LinkUtil', () => {
|
|
5
|
+
it('reads pages of the web, and no other scheme', () => {
|
|
6
|
+
expect(LinkUtil.parse('https://x.dev/a?b=1#c')).toEqual({ type: 'url', url: 'https://x.dev/a?b=1#c' });
|
|
7
|
+
expect(LinkUtil.parse('mailto:a@b.dev')).toEqual({ type: 'mail', url: 'mailto:a@b.dev' });
|
|
8
|
+
for (const target of [
|
|
9
|
+
'javascript:alert(1)',
|
|
10
|
+
'JaVaScRiPt:x',
|
|
11
|
+
'data:text/html,hi',
|
|
12
|
+
'vbscript:x',
|
|
13
|
+
'command:workbench.action.reload',
|
|
14
|
+
'vscode://x',
|
|
15
|
+
'//evil.dev/a',
|
|
16
|
+
'file://host/etc/passwd',
|
|
17
|
+
'mailto:',
|
|
18
|
+
]) {
|
|
19
|
+
expect(LinkUtil.parse(target)).toBeUndefined();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('reads paths with the lines they point to, as VS Code does', () => {
|
|
24
|
+
expect(LinkUtil.parse('src/a.ts')).toEqual({ type: 'path', path: 'src/a.ts' });
|
|
25
|
+
expect(LinkUtil.parse('src/a.ts#L10')).toEqual({ type: 'path', path: 'src/a.ts', selection: { startLine: 10 } });
|
|
26
|
+
expect(LinkUtil.parse('src/a.ts#L10C5-L12C3')).toEqual({
|
|
27
|
+
type: 'path',
|
|
28
|
+
path: 'src/a.ts',
|
|
29
|
+
selection: { startLine: 10, startColumn: 5, endLine: 12, endColumn: 3 },
|
|
30
|
+
});
|
|
31
|
+
expect(LinkUtil.parse('src/a.ts#L10-L20')).toMatchObject({ selection: { startLine: 10, endLine: 20 } });
|
|
32
|
+
expect(LinkUtil.parse('src/a.ts#10,4')).toMatchObject({ selection: { startLine: 10, startColumn: 4 } });
|
|
33
|
+
expect(LinkUtil.parse('src/a.ts:42')).toEqual({ type: 'path', path: 'src/a.ts', selection: { startLine: 42 } });
|
|
34
|
+
expect(LinkUtil.parse('src/a.ts:42:7')).toMatchObject({ path: 'src/a.ts', selection: { startLine: 42, startColumn: 7 } });
|
|
35
|
+
expect(LinkUtil.parse('src/a.ts:10-20')).toMatchObject({ selection: { startLine: 10, endLine: 20 } });
|
|
36
|
+
// An end before the start is no range.
|
|
37
|
+
expect(LinkUtil.parse('a.ts:20-10')).toMatchObject({ selection: { startLine: 20 } });
|
|
38
|
+
expect(LinkUtil.parse('file:///Users/me/a%20b.ts#L3')).toEqual({ type: 'path', path: '/Users/me/a b.ts', selection: { startLine: 3 } });
|
|
39
|
+
expect(LinkUtil.parse('docs/')).toEqual({ type: 'path', path: 'docs', directory: true });
|
|
40
|
+
expect(LinkUtil.parse('C:/repo/a.ts')).toMatchObject({ type: 'path', path: 'C:/repo/a.ts' });
|
|
41
|
+
expect(LinkUtil.parse('README.md#usage')).toEqual({ type: 'path', path: 'README.md' });
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('takes code spans that name files, not code', () => {
|
|
45
|
+
expect(LinkUtil.codeReference('src/app.ts:12')).toMatchObject({ path: 'src/app.ts', selection: { startLine: 12 } });
|
|
46
|
+
expect(LinkUtil.codeReference('package.json')).toMatchObject({ path: 'package.json' });
|
|
47
|
+
expect(LinkUtil.codeReference('./lib/a.foo')).toMatchObject({ path: './lib/a.foo' });
|
|
48
|
+
expect(LinkUtil.codeReference('docs/')).toMatchObject({ path: 'docs', directory: true });
|
|
49
|
+
for (const code of [
|
|
50
|
+
'console.log',
|
|
51
|
+
'a.b.c',
|
|
52
|
+
'process.env',
|
|
53
|
+
'text/html',
|
|
54
|
+
'@celljs/core',
|
|
55
|
+
'npm test',
|
|
56
|
+
'foo',
|
|
57
|
+
'Node.js',
|
|
58
|
+
'https://x.dev',
|
|
59
|
+
'v1.2',
|
|
60
|
+
'/',
|
|
61
|
+
'a.ts && b',
|
|
62
|
+
]) {
|
|
63
|
+
expect(LinkUtil.codeReference(code)).toBeUndefined();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('finds URLs in text, without the punctuation that ends a sentence', () => {
|
|
68
|
+
expect(LinkUtil.bareUrl('https://x.dev/a.')).toBe('https://x.dev/a');
|
|
69
|
+
expect(LinkUtil.bareUrl('https://x.dev/a,然后')).toBe('https://x.dev/a');
|
|
70
|
+
expect(LinkUtil.bareUrl('https://x.dev/a) and')).toBe('https://x.dev/a');
|
|
71
|
+
expect(LinkUtil.bareUrl('https://en.wikipedia.org/wiki/A_(b) and')).toBe('https://en.wikipedia.org/wiki/A_(b)');
|
|
72
|
+
expect(LinkUtil.bareUrl('http://localhost:5173/')).toBe('http://localhost:5173/');
|
|
73
|
+
expect(LinkUtil.bareUrl('https://')).toBeUndefined();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('resolves paths against the directory of the conversation', () => {
|
|
77
|
+
expect(LinkUtil.resolve('/repo', 'src/a.ts')).toEqual({ cwd: '/repo', path: 'src/a.ts' });
|
|
78
|
+
expect(LinkUtil.resolve('/repo/', './src/../a.ts')).toEqual({ cwd: '/repo', path: 'a.ts' });
|
|
79
|
+
expect(LinkUtil.resolve('/repo', '/repo/src')).toEqual({ cwd: '/repo', path: 'src' });
|
|
80
|
+
expect(LinkUtil.resolve('/repo', '/repo')).toEqual({ cwd: '/repo', path: '' });
|
|
81
|
+
expect(LinkUtil.resolve('/repo', '../other/b.ts')).toEqual({ cwd: '/other', path: 'b.ts' });
|
|
82
|
+
expect(LinkUtil.resolve('/repo', '/etc/hosts')).toEqual({ cwd: '/etc', path: 'hosts' });
|
|
83
|
+
expect(LinkUtil.label({ type: 'path', path: 'a.ts', selection: { startLine: 3, startColumn: 2, endLine: 5 } })).toBe('a.ts:3:2-5');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('trusts this machine, and the domains the user trusted', () => {
|
|
87
|
+
expect(LinkUtil.trusted('http://localhost:5173', [])).toBe(true);
|
|
88
|
+
expect(LinkUtil.trusted('http://127.0.0.1:8080', [])).toBe(true);
|
|
89
|
+
expect(LinkUtil.trusted('http://app.localhost', [])).toBe(true);
|
|
90
|
+
expect(LinkUtil.trusted('http://devbox:3000', [], 'devbox')).toBe(true);
|
|
91
|
+
expect(LinkUtil.trusted('https://github.com/a', [])).toBe(false);
|
|
92
|
+
expect(LinkUtil.trusted('https://github.com/a', ['github.com'])).toBe(true);
|
|
93
|
+
expect(LinkUtil.trusted('https://gist.github.com', ['github.com'])).toBe(false);
|
|
94
|
+
expect(LinkUtil.trusted('https://gist.github.com', ['*.github.com'])).toBe(true);
|
|
95
|
+
expect(LinkUtil.trusted('https://github.com', ['*.github.com'])).toBe(true);
|
|
96
|
+
expect(LinkUtil.trusted('https://evilgithub.com', ['*.github.com'])).toBe(false);
|
|
97
|
+
expect(LinkUtil.trusted('https://github.com.evil.dev', ['github.com'])).toBe(false);
|
|
98
|
+
expect(LinkUtil.trusted('http://x.dev:3000', ['x.dev:3000'])).toBe(true);
|
|
99
|
+
expect(LinkUtil.trusted('http://x.dev:4000', ['x.dev:3000'])).toBe(false);
|
|
100
|
+
expect(LinkUtil.trusted('https://any.dev', ['*'])).toBe(true);
|
|
101
|
+
// A look-alike host is compared as the browser reads it, in punycode.
|
|
102
|
+
expect(LinkUtil.trusted('https://gіthub.com', ['github.com'])).toBe(false);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import type { TextSelection } from '../extension/web-extension-api';
|
|
2
|
+
|
|
3
|
+
/** What a link of a reply points to, as written: a page of the web, a mail, or a path on the machine of the conversation. */
|
|
4
|
+
export type LinkTarget =
|
|
5
|
+
| { type: 'url'; url: string }
|
|
6
|
+
/** `mailto:`, which the browser hands to the mail program. */
|
|
7
|
+
| { type: 'mail'; url: string }
|
|
8
|
+
/** `path` decoded, without what names the selection; `directory` when it ends with `/`. */
|
|
9
|
+
| { type: 'path'; path: string; selection?: TextSelection; directory?: boolean };
|
|
10
|
+
|
|
11
|
+
const WEB = /^https?:\/\//i;
|
|
12
|
+
const SCHEME = /^[a-z][a-z\d+.-]*:/i;
|
|
13
|
+
const WINDOWS_PATH = /^[a-z]:[\\/]/i;
|
|
14
|
+
/** After `#`, as VS Code reads it: `L10`, `L10C5`, `L10-L20`, `L10C5-L12C3`, `10`, `10,5`, `10-20`. */
|
|
15
|
+
const FRAGMENT = /^L?(\d+)(?:[C,](\d+))?(?:-L?(\d+)(?:[C,](\d+))?)?$/i;
|
|
16
|
+
/** After a path, as compilers and grep print it: `:10`, `:10:5`, `:10-20`, `:10:5-12:3`. */
|
|
17
|
+
const SUFFIX = /:(\d+)(?::(\d+))?(?:-(\d+)(?::(\d+))?)?$/;
|
|
18
|
+
/** A URL in running text: ASCII only, so that the Chinese punctuation right after one is not part of it. */
|
|
19
|
+
const BARE_URL = /^https?:\/\/[!#-&(-;=?-[\]_a-z~]+/i;
|
|
20
|
+
/**
|
|
21
|
+
* Names of files that a code span alone (`package.json`) may name; with a `/` or a line, any extension does.
|
|
22
|
+
* Not `env` or `c`: `process.env` and `a.b.c` are code.
|
|
23
|
+
*/
|
|
24
|
+
const COMMON_EXTENSIONS = new Set(
|
|
25
|
+
'ts tsx mts cts js jsx mjs cjs json jsonc md mdx yml yaml toml ini lock py rb go rs java kt kts swift cc cpp hpp cs php sh bash zsh css scss less html htm vue svelte sql xml gradle txt csv svg'.split(
|
|
26
|
+
' ',
|
|
27
|
+
),
|
|
28
|
+
);
|
|
29
|
+
const CODE_PATH = /^(?:\.{1,2}\/|\/)?(?:[\w@+-][\w@.+-]*\/)*[\w@+-][\w@.+-]*\/?$/;
|
|
30
|
+
const LOOPBACK = /^(localhost|.+\.localhost|127(\.\d{1,3}){3}|\[::1\]|0\.0\.0\.0)$/;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Links of replies, read as VS Code reads them in its chat: http(s) URLs, and paths of files and
|
|
34
|
+
* directories with the lines they point to. Every other scheme (`javascript:`, `data:`, `command:`…)
|
|
35
|
+
* is no link at all. Pure functions: what a click does is TaLinks's.
|
|
36
|
+
*/
|
|
37
|
+
export namespace LinkUtil {
|
|
38
|
+
/** The target of `[text](target)` or of a URL in the text; undefined for what is no link. */
|
|
39
|
+
export function parse(target: string): LinkTarget | undefined {
|
|
40
|
+
if (WEB.test(target)) {
|
|
41
|
+
try {
|
|
42
|
+
return { type: 'url', url: new URL(target).href };
|
|
43
|
+
} catch {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (/^mailto:[^\s]+@/i.test(target)) {
|
|
48
|
+
return { type: 'mail', url: target };
|
|
49
|
+
}
|
|
50
|
+
let rest = target;
|
|
51
|
+
if (/^file:/i.test(rest)) {
|
|
52
|
+
const url = /^file:\/\/(?:localhost)?(\/.*)$/i.exec(rest);
|
|
53
|
+
if (!url) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
rest = url[1];
|
|
57
|
+
} else if (rest.startsWith('//') || (SCHEME.test(rest.replace(SUFFIX, '')) && !WINDOWS_PATH.test(rest))) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const hash = rest.indexOf('#');
|
|
61
|
+
const fragment = hash < 0 ? '' : rest.slice(hash + 1);
|
|
62
|
+
let path = (hash < 0 ? rest : rest.slice(0, hash)).split('?')[0];
|
|
63
|
+
let selection = fragment ? fromFragment(fragment) : undefined;
|
|
64
|
+
if (!fragment) {
|
|
65
|
+
const suffix = SUFFIX.exec(path);
|
|
66
|
+
if (suffix) {
|
|
67
|
+
selection = fromNumbers(suffix);
|
|
68
|
+
path = path.slice(0, suffix.index);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
path = decodeURI(path);
|
|
73
|
+
} catch {
|
|
74
|
+
// Kept as written.
|
|
75
|
+
}
|
|
76
|
+
if (!path) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const directory = path.length > 1 && path.endsWith('/');
|
|
80
|
+
return { type: 'path', path: directory ? path.replace(/\/+$/, '') : path, ...(selection && { selection }), ...(directory && { directory }) };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* A code span that names a file or a directory, as models write them: `src/app.ts:12`, `package.json`,
|
|
85
|
+
* `docs/`. Not `console.log`, `text/html` or `@celljs/core`: a name needs an extension, and alone one
|
|
86
|
+
* that files have, or a `/` at its end.
|
|
87
|
+
*/
|
|
88
|
+
export function codeReference(text: string): LinkTarget | undefined {
|
|
89
|
+
if (/\s/.test(text) || text.includes('://') || text.startsWith('@')) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const suffix = SUFFIX.exec(text);
|
|
93
|
+
const path = suffix ? text.slice(0, suffix.index) : text;
|
|
94
|
+
if (!CODE_PATH.test(path) || path === '/') {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
if (!path.endsWith('/')) {
|
|
98
|
+
const extension = /[^/.]\.([a-z][a-z\d]{0,9})$/i.exec(path)?.[1].toLowerCase();
|
|
99
|
+
if (!extension || !(suffix || path.includes('/') || COMMON_EXTENSIONS.has(extension))) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
// Node.js, Vue.js: names of projects, not files.
|
|
103
|
+
if (!suffix && !path.includes('/') && extension === 'js' && /^[A-Z]/.test(path)) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return parse(text);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** A URL at the start of `text` (text runs on after it), without the punctuation that ends a sentence. */
|
|
111
|
+
export function bareUrl(text: string): string | undefined {
|
|
112
|
+
let url = BARE_URL.exec(text)?.[0];
|
|
113
|
+
if (!url) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
url = url.replace(/[.,;:!?'"*_~]+$/, '');
|
|
117
|
+
// A ) closes the text's ( rather than the URL's, unless the URL opened one.
|
|
118
|
+
while (url.endsWith(')') && count(url, '(') < count(url, ')')) {
|
|
119
|
+
url = url.slice(0, -1).replace(/[.,;:!?]+$/, '');
|
|
120
|
+
}
|
|
121
|
+
return /^https?:\/\/[^/?#]/i.test(url) ? url : undefined;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** `path` against the directory `cwd`: the directory to read it in, and the path inside it ('' for the directory itself). */
|
|
125
|
+
export function resolve(cwd: string, path: string): { cwd: string; path: string } {
|
|
126
|
+
if (cwd.includes('\\') || path.includes('\\')) {
|
|
127
|
+
// A Windows server resolves its own paths.
|
|
128
|
+
return { cwd, path };
|
|
129
|
+
}
|
|
130
|
+
const absolute = normalize(path.startsWith('/') ? path : `${cwd}/${path}`);
|
|
131
|
+
const base = normalize(cwd);
|
|
132
|
+
if (absolute === base) {
|
|
133
|
+
return { cwd: base, path: '' };
|
|
134
|
+
}
|
|
135
|
+
if (base === '/' || absolute.startsWith(`${base}/`)) {
|
|
136
|
+
return { cwd: base, path: absolute.slice(base === '/' ? 1 : base.length + 1) };
|
|
137
|
+
}
|
|
138
|
+
// Outside the directory of the conversation: read in its own directory.
|
|
139
|
+
const slash = absolute.lastIndexOf('/');
|
|
140
|
+
return { cwd: absolute.slice(0, slash) || '/', path: absolute.slice(slash + 1) };
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** `a/./b/../c/` as `a/c`; an absolute path stays absolute. */
|
|
144
|
+
export function normalize(path: string): string {
|
|
145
|
+
const parts: string[] = [];
|
|
146
|
+
for (const part of path.split('/')) {
|
|
147
|
+
if (part === '..') {
|
|
148
|
+
parts.pop();
|
|
149
|
+
} else if (part && part !== '.') {
|
|
150
|
+
parts.push(part);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const joined = parts.join('/');
|
|
154
|
+
return path.startsWith('/') ? `/${joined}` : joined;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function join(dir: string, path: string): string {
|
|
158
|
+
return path ? normalize(`${dir}/${path}`) : dir;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function dirname(path: string): string {
|
|
162
|
+
const slash = path.lastIndexOf('/');
|
|
163
|
+
return slash < 0 ? '' : path.slice(0, slash);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function basename(path: string): string {
|
|
167
|
+
return path.slice(path.lastIndexOf('/') + 1);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** The path with its lines, as the user reads it: `src/a.ts:10:5`. */
|
|
171
|
+
export function label(target: LinkTarget): string {
|
|
172
|
+
if (target.type !== 'path') {
|
|
173
|
+
return target.url;
|
|
174
|
+
}
|
|
175
|
+
const { selection } = target;
|
|
176
|
+
if (!selection) {
|
|
177
|
+
return target.directory ? `${target.path}/` : target.path;
|
|
178
|
+
}
|
|
179
|
+
const start = selection.startColumn ? `${selection.startLine}:${selection.startColumn}` : `${selection.startLine}`;
|
|
180
|
+
const end = selection.endLine ? `-${selection.endLine}${selection.endColumn ? `:${selection.endColumn}` : ''}` : '';
|
|
181
|
+
return `${target.path}:${start}${end}`;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Whether a page of `url` opens without asking, as VS Code's trusted domains: this machine (and the
|
|
186
|
+
* host of ta serve, `ownHost`) always; else a domain the user trusted: `github.com`, `*.github.com`
|
|
187
|
+
* (the domain and those under it), `localhost:3000` (that port only), or `*` for all.
|
|
188
|
+
*/
|
|
189
|
+
export function trusted(url: string, domains: readonly string[], ownHost?: string): boolean {
|
|
190
|
+
let parsed: URL;
|
|
191
|
+
try {
|
|
192
|
+
parsed = new URL(url);
|
|
193
|
+
} catch {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
const host = parsed.hostname.toLowerCase();
|
|
197
|
+
if (LOOPBACK.test(host) || (ownHost && host === ownHost.toLowerCase())) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
return domains.some(domain => {
|
|
201
|
+
const pattern = domain
|
|
202
|
+
.trim()
|
|
203
|
+
.toLowerCase()
|
|
204
|
+
.replace(/^[a-z]+:\/\//, '')
|
|
205
|
+
.replace(/\/.*$/, '');
|
|
206
|
+
if (pattern === '*') {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
if (pattern.startsWith('*.')) {
|
|
210
|
+
return host === pattern.slice(2) || host.endsWith(pattern.slice(1));
|
|
211
|
+
}
|
|
212
|
+
return pattern.includes(':') ? parsed.host.toLowerCase() === pattern : host === pattern;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function fromFragment(fragment: string): TextSelection | undefined {
|
|
217
|
+
const found = FRAGMENT.exec(fragment);
|
|
218
|
+
return found ? fromNumbers(found) : undefined;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function fromNumbers(found: RegExpExecArray): TextSelection | undefined {
|
|
222
|
+
const [startLine, startColumn, endLine, endColumn] = found.slice(1, 5).map(value => (value ? Number(value) : undefined));
|
|
223
|
+
if (!startLine) {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
startLine,
|
|
228
|
+
...(startColumn && { startColumn }),
|
|
229
|
+
...(endLine && endLine >= startLine && { endLine }),
|
|
230
|
+
...(endLine && endLine >= startLine && endColumn && { endColumn }),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function count(text: string, char: string): number {
|
|
235
|
+
return text.split(char).length - 1;
|
|
236
|
+
}
|
|
237
|
+
}
|