@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,92 @@
|
|
|
1
|
+
export const TaNotices = Symbol('TaNotices');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How much a notice asks of the user: `info` and `success` tell, `warning` asks to look, `error` says an
|
|
5
|
+
* action failed. The level sets the icon, the colour and how long it stays.
|
|
6
|
+
*/
|
|
7
|
+
export type NoticeLevel = 'info' | 'success' | 'warning' | 'error';
|
|
8
|
+
|
|
9
|
+
export interface NoticeAction {
|
|
10
|
+
label: string;
|
|
11
|
+
run(): void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface NoticeOptions {
|
|
15
|
+
level?: NoticeLevel;
|
|
16
|
+
/** A second, quieter line: what to do about it. */
|
|
17
|
+
detail?: string;
|
|
18
|
+
action?: NoticeAction;
|
|
19
|
+
/** Notices of one key replace each other and count how often they came, instead of piling up. */
|
|
20
|
+
key?: string;
|
|
21
|
+
/** Stays until the user closes it. */
|
|
22
|
+
sticky?: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface Notice {
|
|
26
|
+
id: number;
|
|
27
|
+
level: NoticeLevel;
|
|
28
|
+
message: string;
|
|
29
|
+
detail?: string;
|
|
30
|
+
action?: NoticeAction;
|
|
31
|
+
key?: string;
|
|
32
|
+
sticky?: boolean;
|
|
33
|
+
/** How many times it came. */
|
|
34
|
+
count: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ConfirmOptions {
|
|
38
|
+
title: string;
|
|
39
|
+
message?: string;
|
|
40
|
+
/** The words of the button that goes ahead; default OK. */
|
|
41
|
+
confirmLabel?: string;
|
|
42
|
+
/** Goes ahead with something that cannot be undone: the button is red. */
|
|
43
|
+
danger?: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface ConfirmRequest extends ConfirmOptions {
|
|
47
|
+
id: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface InputOptions {
|
|
51
|
+
title: string;
|
|
52
|
+
/** The text in the box when it opens. */
|
|
53
|
+
value?: string;
|
|
54
|
+
placeholder?: string;
|
|
55
|
+
/** A box of several lines, as pi's `editor`: Enter starts a line, Cmd/Ctrl+Enter goes ahead. */
|
|
56
|
+
multiline?: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface InputRequest extends InputOptions {
|
|
60
|
+
id: number;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface NoticesState {
|
|
64
|
+
/** The newest last. */
|
|
65
|
+
notices: Notice[];
|
|
66
|
+
/** The question shown, one at a time; the others wait. */
|
|
67
|
+
confirm?: ConfirmRequest;
|
|
68
|
+
/** Or the text asked for, in the same line of questions. */
|
|
69
|
+
input?: InputRequest;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The notices of the page, from ta and its web extensions alike: short-lived messages in a corner, and
|
|
74
|
+
* questions that wait for an answer. What belongs to one place (a failed turn, a form) stays there.
|
|
75
|
+
*/
|
|
76
|
+
export interface TaNotices {
|
|
77
|
+
readonly state: NoticesState;
|
|
78
|
+
subscribe(listener: (state: NoticesState) => void): () => void;
|
|
79
|
+
/** Returns its id. */
|
|
80
|
+
notify(message: string, options?: NoticeOptions): number;
|
|
81
|
+
/** A failed action: the message of the error, and its hint for a failure ta serve names. */
|
|
82
|
+
error(cause: unknown, options?: Omit<NoticeOptions, 'level'>): number;
|
|
83
|
+
dismiss(id: number): void;
|
|
84
|
+
/** Resolves with whether the user went ahead. */
|
|
85
|
+
confirm(options: ConfirmOptions): Promise<boolean>;
|
|
86
|
+
/** The answer to the question shown. */
|
|
87
|
+
answer(id: number, confirmed: boolean): void;
|
|
88
|
+
/** Resolves with the text, or `undefined` when the user cancelled. */
|
|
89
|
+
input(options: InputOptions): Promise<string | undefined>;
|
|
90
|
+
/** The text given for the question shown; `undefined`, cancelled. */
|
|
91
|
+
answerInput(id: number, value: string | undefined): void;
|
|
92
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test';
|
|
2
|
+
import { TaRemoteError } from '@celljs/ta-client';
|
|
3
|
+
import { TaErrorCode } from '@celljs/ta-protocol';
|
|
4
|
+
import { NoticesUtil, TaNoticesImpl } from './notices';
|
|
5
|
+
|
|
6
|
+
function setup(language = 'en-US') {
|
|
7
|
+
const notices = new TaNoticesImpl();
|
|
8
|
+
Object.assign(notices, { settings: { state: { language } } });
|
|
9
|
+
return notices;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
describe('NoticesUtil', () => {
|
|
13
|
+
it('keeps a notice longer the more it asks of the user, and one with a button longer still', () => {
|
|
14
|
+
const [success, info, warning, error] = (['success', 'info', 'warning', 'error'] as const).map(level => NoticesUtil.duration({ level }));
|
|
15
|
+
expect(success).toBeLessThan(info!);
|
|
16
|
+
expect(info).toBeLessThan(warning!);
|
|
17
|
+
expect(warning).toBeLessThan(error!);
|
|
18
|
+
expect(NoticesUtil.duration({ level: 'info', action: { label: 'Undo', run: () => undefined } })).toBeGreaterThan(info!);
|
|
19
|
+
expect(NoticesUtil.duration({ level: 'error', sticky: true })).toBeUndefined();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('drops the oldest notices beyond four, a sticky one last', () => {
|
|
23
|
+
const notice = (id: number, sticky = false) => ({ id, level: 'info' as const, message: String(id), count: 1, sticky });
|
|
24
|
+
expect(NoticesUtil.keep([notice(1, true), notice(2), notice(3), notice(4), notice(5)]).map(kept => kept.id)).toEqual([1, 3, 4, 5]);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('tells the message and the hint of an error', () => {
|
|
28
|
+
expect(NoticesUtil.describe(new TaRemoteError('Locked.', TaErrorCode.SESSION_LOCKED, 'Close it there first.'))).toEqual({
|
|
29
|
+
message: 'Locked.',
|
|
30
|
+
detail: 'Close it there first.',
|
|
31
|
+
code: TaErrorCode.SESSION_LOCKED,
|
|
32
|
+
});
|
|
33
|
+
expect(NoticesUtil.describe('plain')).toEqual({ message: 'plain' });
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
describe('TaNoticesImpl', () => {
|
|
38
|
+
it('shows a notice once however often it comes, with how often', () => {
|
|
39
|
+
const notices = setup();
|
|
40
|
+
notices.notify('Saved', { level: 'success' });
|
|
41
|
+
notices.notify('Saved', { level: 'success' });
|
|
42
|
+
notices.notify('Saved');
|
|
43
|
+
expect(notices.state.notices.map(({ message, level, count }) => ({ message, level, count }))).toEqual([
|
|
44
|
+
{ message: 'Saved', level: 'success', count: 2 },
|
|
45
|
+
{ message: 'Saved', level: 'info', count: 1 },
|
|
46
|
+
]);
|
|
47
|
+
notices.dismiss(notices.state.notices[0].id);
|
|
48
|
+
expect(notices.state.notices).toHaveLength(1);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('says an error with its hint, and a lost connection once, whatever failed', () => {
|
|
52
|
+
const notices = setup('zh-CN');
|
|
53
|
+
notices.error(new TaRemoteError('Locked.', TaErrorCode.SESSION_LOCKED, 'Close it there first.'));
|
|
54
|
+
notices.error(new TaRemoteError('Not connected to ta serve.', TaErrorCode.CONNECTION_LOST));
|
|
55
|
+
notices.error(new TaRemoteError('The connection to ta serve was lost.', TaErrorCode.CONNECTION_LOST));
|
|
56
|
+
expect(notices.state.notices.map(({ message, detail, level, count }) => ({ message, detail, level, count }))).toEqual([
|
|
57
|
+
{ message: 'Locked.', detail: 'Close it there first.', level: 'error', count: 1 },
|
|
58
|
+
{ message: '没有完成:ta serve 未连接', detail: '连接恢复后再试一次。', level: 'error', count: 2 },
|
|
59
|
+
]);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('asks one question at a time, and answers each its own', async () => {
|
|
63
|
+
const notices = setup();
|
|
64
|
+
const first = notices.confirm({ title: 'Remove a?' });
|
|
65
|
+
const second = notices.confirm({ title: 'Remove b?', danger: true });
|
|
66
|
+
expect(notices.state.confirm?.title).toBe('Remove a?');
|
|
67
|
+
// An answer to a question not shown does nothing.
|
|
68
|
+
notices.answer(notices.state.confirm!.id + 1, true);
|
|
69
|
+
expect(notices.state.confirm?.title).toBe('Remove a?');
|
|
70
|
+
notices.answer(notices.state.confirm!.id, false);
|
|
71
|
+
expect(await first).toBe(false);
|
|
72
|
+
expect(notices.state.confirm).toMatchObject({ title: 'Remove b?', danger: true });
|
|
73
|
+
notices.answer(notices.state.confirm!.id, true);
|
|
74
|
+
expect(await second).toBe(true);
|
|
75
|
+
expect(notices.state.confirm).toBeUndefined();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('asks for text in the same line as the other questions, and cancelled is undefined', async () => {
|
|
79
|
+
const notices = setup();
|
|
80
|
+
const sure = notices.confirm({ title: 'Sure?' });
|
|
81
|
+
const name = notices.input({ title: 'Name', value: 'Ta' });
|
|
82
|
+
const role = notices.input({ title: 'Role', multiline: true });
|
|
83
|
+
expect(notices.state.input).toBeUndefined();
|
|
84
|
+
// The text of a question not shown does nothing.
|
|
85
|
+
notices.answerInput(notices.state.confirm!.id, 'x');
|
|
86
|
+
notices.answer(notices.state.confirm!.id, true);
|
|
87
|
+
expect(await sure).toBe(true);
|
|
88
|
+
expect(notices.state.confirm).toBeUndefined();
|
|
89
|
+
expect(notices.state.input).toMatchObject({ title: 'Name', value: 'Ta' });
|
|
90
|
+
notices.answer(notices.state.input!.id, true);
|
|
91
|
+
expect(notices.state.input?.title).toBe('Name');
|
|
92
|
+
notices.answerInput(notices.state.input!.id, 'Rex');
|
|
93
|
+
expect(await name).toBe('Rex');
|
|
94
|
+
expect(notices.state.input).toMatchObject({ title: 'Role', multiline: true });
|
|
95
|
+
notices.answerInput(notices.state.input!.id, undefined);
|
|
96
|
+
expect(await role).toBeUndefined();
|
|
97
|
+
expect(notices.state.input).toBeUndefined();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { Autowired, Component } from '@celljs/core';
|
|
2
|
+
import { TaErrorCode } from '@celljs/ta-protocol';
|
|
3
|
+
import { message } from '../i18n/messages';
|
|
4
|
+
import { TaSettings } from '../settings/settings-protocol';
|
|
5
|
+
import {
|
|
6
|
+
type ConfirmOptions,
|
|
7
|
+
type ConfirmRequest,
|
|
8
|
+
type InputOptions,
|
|
9
|
+
type InputRequest,
|
|
10
|
+
type Notice,
|
|
11
|
+
type NoticeLevel,
|
|
12
|
+
type NoticeOptions,
|
|
13
|
+
type NoticesState,
|
|
14
|
+
TaNotices,
|
|
15
|
+
} from './notices-protocol';
|
|
16
|
+
|
|
17
|
+
/** Asks the page to open its sign-in to a provider of models: a call failed for want of one. */
|
|
18
|
+
export const SIGN_IN_EVENT = 'ta:sign-in';
|
|
19
|
+
|
|
20
|
+
type Question =
|
|
21
|
+
| { kind: 'confirm'; request: ConfirmRequest; resolve(confirmed: boolean): void }
|
|
22
|
+
| { kind: 'input'; request: InputRequest; resolve(value: string | undefined): void };
|
|
23
|
+
|
|
24
|
+
/** More than this many notices at once crowd the corner: the oldest that would go anyway go first. */
|
|
25
|
+
const MAX_NOTICES = 4;
|
|
26
|
+
|
|
27
|
+
/** How long a notice stays, by level: what asks more of the user stays longer. */
|
|
28
|
+
const DURATIONS_MS: Record<NoticeLevel, number> = { success: 3000, info: 4000, warning: 6000, error: 8000 };
|
|
29
|
+
/** A notice with a button stays longer: the user has to get to it. */
|
|
30
|
+
const ACTION_MS = 4000;
|
|
31
|
+
|
|
32
|
+
export namespace NoticesUtil {
|
|
33
|
+
/** How long a notice stays, or `undefined` until it is closed. */
|
|
34
|
+
export function duration(notice: Pick<Notice, 'level' | 'sticky' | 'action'>): number | undefined {
|
|
35
|
+
return notice.sticky ? undefined : DURATIONS_MS[notice.level] + (notice.action ? ACTION_MS : 0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Notices of the same key are one, which came `count` times: the same failure ten times is one notice. */
|
|
39
|
+
export function key(level: NoticeLevel, text: string, options: NoticeOptions): string {
|
|
40
|
+
return options.key ?? `${level}:${text}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** At most MAX_NOTICES, the newest kept; a sticky one goes only when there is nothing else to drop. */
|
|
44
|
+
export function keep(notices: Notice[]): Notice[] {
|
|
45
|
+
const kept = [...notices];
|
|
46
|
+
while (kept.length > MAX_NOTICES) {
|
|
47
|
+
const index = kept.findIndex(notice => !notice.sticky);
|
|
48
|
+
kept.splice(index === -1 ? 0 : index, 1);
|
|
49
|
+
}
|
|
50
|
+
return kept;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** What an error says: its message, and for a failure ta serve names (TaRemoteError) its hint. */
|
|
54
|
+
export function describe(cause: unknown): { message: string; detail?: string; code?: string } {
|
|
55
|
+
if (cause instanceof Error) {
|
|
56
|
+
const { code, hint } = cause as Error & { code?: string; hint?: string };
|
|
57
|
+
return { message: cause.message, detail: hint || undefined, code };
|
|
58
|
+
}
|
|
59
|
+
return { message: String(cause) };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Component(TaNotices)
|
|
64
|
+
export class TaNoticesImpl implements TaNotices {
|
|
65
|
+
@Autowired(TaSettings)
|
|
66
|
+
protected readonly settings: TaSettings;
|
|
67
|
+
|
|
68
|
+
protected current: NoticesState = { notices: [] };
|
|
69
|
+
protected nextId = 0;
|
|
70
|
+
protected readonly questions: Question[] = [];
|
|
71
|
+
protected readonly listeners = new Set<(state: NoticesState) => void>();
|
|
72
|
+
|
|
73
|
+
get state(): NoticesState {
|
|
74
|
+
return this.current;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
subscribe(listener: (state: NoticesState) => void): () => void {
|
|
78
|
+
this.listeners.add(listener);
|
|
79
|
+
return () => this.listeners.delete(listener);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
notify(text: string, options: NoticeOptions = {}): number {
|
|
83
|
+
const level = options.level ?? 'info';
|
|
84
|
+
const key = NoticesUtil.key(level, text, options);
|
|
85
|
+
const same = this.current.notices.find(notice => notice.key === key);
|
|
86
|
+
const notice: Notice = {
|
|
87
|
+
id: ++this.nextId,
|
|
88
|
+
level,
|
|
89
|
+
message: text,
|
|
90
|
+
detail: options.detail,
|
|
91
|
+
action: options.action,
|
|
92
|
+
key,
|
|
93
|
+
sticky: options.sticky,
|
|
94
|
+
count: same && same.message === text ? same.count + 1 : 1,
|
|
95
|
+
};
|
|
96
|
+
this.update({ notices: NoticesUtil.keep([...this.current.notices.filter(other => other !== same), notice]) });
|
|
97
|
+
return notice.id;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
error(cause: unknown, options: Omit<NoticeOptions, 'level'> = {}): number {
|
|
101
|
+
const { message: text, detail, code } = NoticesUtil.describe(cause);
|
|
102
|
+
if (code === TaErrorCode.NOT_SIGNED_IN) {
|
|
103
|
+
// Nothing to read: the page of sign-in opens instead (AppView listens).
|
|
104
|
+
window.dispatchEvent(new Event(SIGN_IN_EVENT));
|
|
105
|
+
return 0;
|
|
106
|
+
}
|
|
107
|
+
if (code === TaErrorCode.CONNECTION_LOST) {
|
|
108
|
+
// The bar of the connection says why; this says what did not happen, once however many calls failed.
|
|
109
|
+
const language = this.settings.state.language;
|
|
110
|
+
return this.notify(message(language, 'ta.connection.notDone'), {
|
|
111
|
+
...options,
|
|
112
|
+
level: 'error',
|
|
113
|
+
key: 'connection-lost',
|
|
114
|
+
detail: message(language, 'ta.connection.notDoneHint'),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return this.notify(text, { detail, ...options, level: 'error' });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
dismiss(id: number): void {
|
|
121
|
+
if (this.current.notices.some(notice => notice.id === id)) {
|
|
122
|
+
this.update({ notices: this.current.notices.filter(notice => notice.id !== id) });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
confirm(options: ConfirmOptions): Promise<boolean> {
|
|
127
|
+
return new Promise(resolve => this.ask({ kind: 'confirm', request: { ...options, id: ++this.nextId }, resolve }));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
answer(id: number, confirmed: boolean): void {
|
|
131
|
+
const question = this.questions[0];
|
|
132
|
+
if (question?.kind === 'confirm' && question.request.id === id) {
|
|
133
|
+
this.questions.shift();
|
|
134
|
+
question.resolve(confirmed);
|
|
135
|
+
this.showQuestion();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
input(options: InputOptions): Promise<string | undefined> {
|
|
140
|
+
return new Promise(resolve => this.ask({ kind: 'input', request: { ...options, id: ++this.nextId }, resolve }));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
answerInput(id: number, value: string | undefined): void {
|
|
144
|
+
const question = this.questions[0];
|
|
145
|
+
if (question?.kind === 'input' && question.request.id === id) {
|
|
146
|
+
this.questions.shift();
|
|
147
|
+
question.resolve(value);
|
|
148
|
+
this.showQuestion();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
protected ask(question: Question): void {
|
|
153
|
+
this.questions.push(question);
|
|
154
|
+
if (this.questions.length === 1) {
|
|
155
|
+
this.showQuestion();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
protected showQuestion(): void {
|
|
160
|
+
const question = this.questions[0];
|
|
161
|
+
this.update({
|
|
162
|
+
confirm: question?.kind === 'confirm' ? question.request : undefined,
|
|
163
|
+
input: question?.kind === 'input' ? question.request : undefined,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
protected update(change: Partial<NoticesState>): void {
|
|
168
|
+
this.current = { ...this.current, ...change };
|
|
169
|
+
for (const listener of this.listeners) {
|
|
170
|
+
listener(this.current);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><rect width="256" height="256" rx="57.6" fill="#10B981"/><path transform="translate(42.35 42.32) scale(0.669)" fill="#ffffff" fill-rule="evenodd" d="M87.56 246.56C78.45 245.88 69.68 241.69 63.62 235.12C55.27 226.06 53.05 217.63 57.25 210.87C58.80 208.36 60.00 207.04 65.18 202.17C69.26 198.32 70.20 196.55 70.21 192.69C70.21 189.81 70.10 189.60 68.07 188.59C58.99 184.06 48.53 175.16 41.10 165.64C20.03 138.61 16.32 99.87 32.24 73.21C35.05 68.50 38.42 64.26 40.25 63.11C42.91 61.44 46.64 61.89 48.71 64.14C51.04 66.67 51.48 69.39 50.27 73.65C48.09 81.27 47.41 86.83 47.99 92.32C49.53 106.98 58.42 118.20 70.83 121.15C73.08 121.68 78.88 121.72 81.15 121.22C88.97 119.48 94.86 113.39 96.69 105.18C97.35 102.17 97.35 102.36 97.36 79.55C97.37 56.55 97.35 57.24 98.04 53.23C102.05 29.98 119.81 12.19 141.49 9.73C143.46 9.51 150.65 9.43 152.36 9.61C160.37 10.46 167.56 12.82 174.51 16.89C177.43 18.59 176.54 18.47 186.86 18.57C196.67 18.66 196.99 18.68 200.87 19.58C210.24 21.74 219.17 27.62 224.57 35.17C229.72 42.38 232.50 49.80 233.36 58.67C233.68 61.91 233.71 76.53 233.41 78.22C232.01 86.00 227.35 91.05 220.23 92.50C218.50 92.85 180.16 92.91 177.10 92.57C165.61 91.28 155.17 86.13 150.52 79.47C148.44 76.48 145.54 75.90 143.40 78.04C141.49 79.95 141.76 81.92 144.74 87.63C150.17 98.03 159.04 105.16 169.50 107.52C172.11 108.11 172.69 107.96 173.25 106.55C173.81 105.12 174.70 103.52 175.57 102.37C178.23 98.86 180.68 100.09 183.51 106.36C184.55 108.67 183.79 108.47 191.23 108.44C198.27 108.42 197.86 108.50 198.43 107.20C200.89 101.63 202.81 99.79 204.99 100.89C206.11 101.47 207.63 103.65 208.74 106.31C209.67 108.51 209.55 108.45 213.05 108.41C216.35 108.36 217.08 108.45 218.31 109.05C225.39 112.51 217.61 125.59 205.66 130.33C199.65 132.71 198.20 132.85 180.39 132.87C164.51 132.89 165.38 132.84 164.14 133.78C162.82 134.78 162.30 136.08 162.30 138.40C162.30 139.80 161.98 143.39 161.42 148.29C159.70 163.39 153.05 175.87 141.81 185.08C138.73 187.60 134.92 189.85 129.84 192.14C125.19 194.25 115.57 196.33 110.54 196.34C109.17 196.34 108.60 196.57 108.23 197.27C108.10 197.53 107.64 198.49 107.20 199.42C103.90 206.45 98.19 211.37 88.72 215.35C85.89 216.54 85.91 216.52 85.98 219.64C86.04 222.32 86.33 222.69 90.00 224.75C92.29 226.04 94.81 227.75 95.82 228.71C100.98 233.57 100.86 241.48 95.60 244.93C93.34 246.41 91.24 246.84 87.56 246.56ZM134.07 240.25C128.56 238.82 125.22 235.56 123.96 230.38C123.70 229.30 123.68 228.71 123.59 220.23C123.53 214.63 123.44 210.89 123.34 210.35C123.00 208.36 122.74 207.31 122.25 205.86C121.48 203.62 121.59 203.31 123.26 202.93C129.90 201.41 136.34 198.97 140.57 196.35C147.00 192.39 151.46 188.55 155.60 183.42C157.24 181.39 157.77 181.54 158.23 184.19C159.89 193.79 157.66 202.21 151.13 210.89C149.39 213.20 149.36 213.30 149.36 215.69C149.35 218.41 149.61 218.72 151.96 218.75C157.60 218.82 162.31 219.95 165.26 221.92C173.20 227.23 172.45 238.39 164.03 240.43C162.18 240.88 135.88 240.72 134.07 240.25ZM185.67 173.17C183.79 172.66 182.15 171.55 180.81 169.86C178.08 166.41 174.71 164.68 169.71 164.16C166.89 163.87 166.86 163.80 167.90 160.34C168.86 157.13 169.71 152.32 170.10 147.82C170.40 144.42 170.40 144.42 170.65 144.15C172.11 142.53 184.08 147.33 189.10 151.54C193.73 155.43 196.56 162.25 195.41 166.75C194.22 171.40 189.83 174.29 185.67 173.17ZM144.28 53.97C148.98 52.79 151.98 47.68 150.77 42.91C148.71 34.78 137.83 33.29 134.20 40.65C130.66 47.83 136.74 55.88 144.28 53.97Z"/></svg>
|
|
Binary file
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "./",
|
|
3
|
+
"name": "Ta",
|
|
4
|
+
"short_name": "Ta",
|
|
5
|
+
"description": "A coding agent on Cell and pi",
|
|
6
|
+
"start_url": "./",
|
|
7
|
+
"scope": "./",
|
|
8
|
+
"display_override": [
|
|
9
|
+
"window-controls-overlay"
|
|
10
|
+
],
|
|
11
|
+
"display": "standalone",
|
|
12
|
+
"background_color": "#141416",
|
|
13
|
+
"theme_color": "#141416",
|
|
14
|
+
"icons": [
|
|
15
|
+
{
|
|
16
|
+
"src": "icons/icon.svg",
|
|
17
|
+
"sizes": "any",
|
|
18
|
+
"type": "image/svg+xml",
|
|
19
|
+
"purpose": "any"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"src": "icons/icon-192.png",
|
|
23
|
+
"sizes": "192x192",
|
|
24
|
+
"type": "image/png",
|
|
25
|
+
"purpose": "any"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"src": "icons/icon-512.png",
|
|
29
|
+
"sizes": "512x512",
|
|
30
|
+
"type": "image/png",
|
|
31
|
+
"purpose": "any"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"src": "icons/maskable-512.png",
|
|
35
|
+
"sizes": "512x512",
|
|
36
|
+
"type": "image/png",
|
|
37
|
+
"purpose": "maskable"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// The service worker of the ta web client: it opens the installed app, and opens it when ta serve is not
|
|
2
|
+
// running yet, so that the page can say so and connect when it starts. Nothing of /api is kept: the data
|
|
3
|
+
// of ta serve never goes into a cache.
|
|
4
|
+
// - pages: from the network, else the copy of the page from the last visit;
|
|
5
|
+
// - /assets/: the bundles, whose names change with their contents, from the cache, else the network;
|
|
6
|
+
// when a new build of the page arrives, the bundles of the old one are dropped.
|
|
7
|
+
const PAGES = 'ta-pages-v1';
|
|
8
|
+
const ASSETS = 'ta-assets-v1';
|
|
9
|
+
const SCOPE = new URL(self.registration.scope);
|
|
10
|
+
const PAGE = SCOPE.href;
|
|
11
|
+
const API = new URL('api/', SCOPE).pathname;
|
|
12
|
+
const ASSET = new URL('assets/', SCOPE).pathname;
|
|
13
|
+
|
|
14
|
+
self.addEventListener('install', event => {
|
|
15
|
+
event.waitUntil(self.skipWaiting());
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
self.addEventListener('activate', event => {
|
|
19
|
+
event.waitUntil(
|
|
20
|
+
caches
|
|
21
|
+
.keys()
|
|
22
|
+
.then(keys => Promise.all(keys.filter(key => key !== PAGES && key !== ASSETS).map(key => caches.delete(key))))
|
|
23
|
+
.then(() => self.clients.claim()),
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
self.addEventListener('fetch', event => {
|
|
28
|
+
const request = event.request;
|
|
29
|
+
const url = new URL(request.url);
|
|
30
|
+
if (request.method !== 'GET' || url.origin !== SCOPE.origin || url.pathname.startsWith(API)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (request.mode === 'navigate') {
|
|
34
|
+
event.respondWith(page(request));
|
|
35
|
+
} else if (url.pathname.startsWith(ASSET)) {
|
|
36
|
+
event.respondWith(asset(request));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
async function page(request) {
|
|
41
|
+
try {
|
|
42
|
+
const response = await fetch(request);
|
|
43
|
+
if (response.ok && (response.headers.get('Content-Type') ?? '').startsWith('text/html')) {
|
|
44
|
+
await keepPage(response.clone());
|
|
45
|
+
}
|
|
46
|
+
return response;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
const kept = await (await caches.open(PAGES)).match(PAGE);
|
|
49
|
+
if (kept) {
|
|
50
|
+
return kept;
|
|
51
|
+
}
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** The page of every path (it is a single-page app); a new build of it drops the bundles of the old one. */
|
|
57
|
+
async function keepPage(response) {
|
|
58
|
+
const pages = await caches.open(PAGES);
|
|
59
|
+
const old = await pages.match(PAGE);
|
|
60
|
+
const html = await response.clone().text();
|
|
61
|
+
if (old && (await old.text()) !== html) {
|
|
62
|
+
await caches.delete(ASSETS);
|
|
63
|
+
}
|
|
64
|
+
await pages.put(PAGE, response);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function asset(request) {
|
|
68
|
+
const assets = await caches.open(ASSETS);
|
|
69
|
+
const kept = await assets.match(request);
|
|
70
|
+
if (kept) {
|
|
71
|
+
return kept;
|
|
72
|
+
}
|
|
73
|
+
const response = await fetch(request);
|
|
74
|
+
if (response.ok) {
|
|
75
|
+
await assets.put(request, response.clone());
|
|
76
|
+
}
|
|
77
|
+
return response;
|
|
78
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const TaPwa = Symbol('TaPwa');
|
|
2
|
+
|
|
3
|
+
export interface PwaState {
|
|
4
|
+
/** The browser offers to install the page as an app now (`beforeinstallprompt`). */
|
|
5
|
+
installable: boolean;
|
|
6
|
+
/** The page runs as an installed app, in its own window. */
|
|
7
|
+
standalone: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The web client as an app that can be installed (a PWA): the web app manifest, the icons, and the service
|
|
12
|
+
* worker that opens the app when ta serve is not running yet. The files are in `public/` of this package,
|
|
13
|
+
* which the build puts at the root of the site.
|
|
14
|
+
*/
|
|
15
|
+
export interface TaPwa {
|
|
16
|
+
readonly state: PwaState;
|
|
17
|
+
subscribe(listener: (state: PwaState) => void): () => void;
|
|
18
|
+
/** Links the manifest and the icons into the page and registers the service worker; once. */
|
|
19
|
+
start(): void;
|
|
20
|
+
/** Asks the browser to install the app; resolves with whether the user accepted. */
|
|
21
|
+
install(): Promise<boolean>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { PWA_FILES, PwaUtil } from './pwa';
|
|
5
|
+
|
|
6
|
+
/** The files of public/, from lib/browser/pwa where the compiled spec runs. */
|
|
7
|
+
const PUBLIC = join(__dirname, '../../../src/browser/public');
|
|
8
|
+
|
|
9
|
+
describe('PwaUtil', () => {
|
|
10
|
+
it('finds the files of the app next to the page, under any path of the server', () => {
|
|
11
|
+
expect(PwaUtil.urls('http://127.0.0.1:4100/')).toEqual({
|
|
12
|
+
manifest: 'http://127.0.0.1:4100/manifest.webmanifest',
|
|
13
|
+
serviceWorker: 'http://127.0.0.1:4100/sw.js',
|
|
14
|
+
appleTouchIcon: 'http://127.0.0.1:4100/icons/apple-touch-icon.png',
|
|
15
|
+
});
|
|
16
|
+
expect(PwaUtil.urls('https://box.example/ta/').serviceWorker).toBe('https://box.example/ta/sw.js');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('registers a service worker only in a secure context', () => {
|
|
20
|
+
expect(PwaUtil.canRegister(true, true)).toBe(true);
|
|
21
|
+
expect(PwaUtil.canRegister(false, true)).toBe(false);
|
|
22
|
+
expect(PwaUtil.canRegister(true, false)).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('knows when it runs as an installed app', () => {
|
|
26
|
+
expect(PwaUtil.standalone(query => query === '(display-mode: standalone)')).toBe(true);
|
|
27
|
+
expect(PwaUtil.standalone(() => false, true)).toBe(true);
|
|
28
|
+
expect(PwaUtil.standalone(() => false)).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe('the files of the app', () => {
|
|
33
|
+
it('are where the page looks for them', () => {
|
|
34
|
+
for (const file of Object.values(PWA_FILES)) {
|
|
35
|
+
expect(existsSync(join(PUBLIC, file))).toBe(true);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('describe an app that browsers install: a name, a start page in scope, standalone, icons of 192 and 512 pixels', () => {
|
|
40
|
+
const manifest = JSON.parse(readFileSync(join(PUBLIC, PWA_FILES.manifest), 'utf8'));
|
|
41
|
+
expect(manifest.name).toBe('Ta');
|
|
42
|
+
expect(manifest.start_url).toBe('./');
|
|
43
|
+
expect(manifest.scope).toBe('./');
|
|
44
|
+
expect(manifest.display).toBe('standalone');
|
|
45
|
+
// The page draws the title bar in the colours of its columns once the user hides the bar of the window.
|
|
46
|
+
expect(manifest.display_override).toEqual(['window-controls-overlay']);
|
|
47
|
+
const sizes = manifest.icons.map((icon: { sizes: string }) => icon.sizes);
|
|
48
|
+
expect(sizes).toContain('192x192');
|
|
49
|
+
expect(sizes).toContain('512x512');
|
|
50
|
+
expect(manifest.icons.some((icon: { purpose: string }) => icon.purpose === 'maskable')).toBe(true);
|
|
51
|
+
for (const icon of manifest.icons) {
|
|
52
|
+
expect(existsSync(join(PUBLIC, icon.src))).toBe(true);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
type Network = (request: { url: string }) => Promise<Response>;
|
|
57
|
+
|
|
58
|
+
/** sw.js run with a fake scope, Cache Storage and network; `get` dispatches a fetch event and says how it was answered. */
|
|
59
|
+
function serviceWorker(network: Network) {
|
|
60
|
+
const listeners: Record<string, (event: unknown) => void> = {};
|
|
61
|
+
const stores = new Map<string, Map<string, Response>>();
|
|
62
|
+
const key = (request: string | { url: string }) => (typeof request === 'string' ? request : request.url);
|
|
63
|
+
const caches = {
|
|
64
|
+
async open(name: string) {
|
|
65
|
+
const store = stores.get(name) ?? new Map<string, Response>();
|
|
66
|
+
stores.set(name, store);
|
|
67
|
+
return {
|
|
68
|
+
match: async (request: string | { url: string }) => store.get(key(request))?.clone(),
|
|
69
|
+
put: async (request: string | { url: string }, response: Response) => void store.set(key(request), response),
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
keys: async () => [...stores.keys()],
|
|
73
|
+
delete: async (name: string) => stores.delete(name),
|
|
74
|
+
};
|
|
75
|
+
const self = {
|
|
76
|
+
registration: { scope: 'http://127.0.0.1:4100/' },
|
|
77
|
+
addEventListener: (type: string, listener: (event: unknown) => void) => (listeners[type] = listener),
|
|
78
|
+
skipWaiting: async () => undefined,
|
|
79
|
+
clients: { claim: async () => undefined },
|
|
80
|
+
};
|
|
81
|
+
new Function('self', 'caches', 'fetch', readFileSync(join(PUBLIC, PWA_FILES.serviceWorker), 'utf8'))(self, caches, (request: { url: string }) =>
|
|
82
|
+
network(request),
|
|
83
|
+
);
|
|
84
|
+
return {
|
|
85
|
+
stores,
|
|
86
|
+
/** The answer of the worker, or undefined when it leaves the request to the browser. */
|
|
87
|
+
async get(url: string, init: { method?: string; mode?: string } = {}): Promise<Response | undefined> {
|
|
88
|
+
let answer: Promise<Response> | undefined;
|
|
89
|
+
listeners.fetch({
|
|
90
|
+
request: { url, method: init.method ?? 'GET', mode: init.mode ?? 'cors' },
|
|
91
|
+
respondWith: (response: Promise<Response>) => (answer = response),
|
|
92
|
+
});
|
|
93
|
+
return answer;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const html = (body: string) => new Response(body, { headers: { 'Content-Type': 'text/html; charset=UTF-8' } });
|
|
99
|
+
const offline: Network = () => Promise.reject(new TypeError('Failed to fetch'));
|
|
100
|
+
|
|
101
|
+
describe('the service worker', () => {
|
|
102
|
+
it('leaves calls of ta serve, other methods and other sites to the browser', async () => {
|
|
103
|
+
const worker = serviceWorker(offline);
|
|
104
|
+
expect(await worker.get('http://127.0.0.1:4100/api/ws?token=t')).toBeUndefined();
|
|
105
|
+
expect(await worker.get('http://127.0.0.1:4100/api/files/x/a.png')).toBeUndefined();
|
|
106
|
+
expect(await worker.get('http://127.0.0.1:4100/assets/a.js', { method: 'POST' })).toBeUndefined();
|
|
107
|
+
expect(await worker.get('https://cdn.example/assets/a.js')).toBeUndefined();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('opens the page from the network, and the copy of the last visit when ta serve is not running', async () => {
|
|
111
|
+
let network: Network = async () => html('<p>v1</p>');
|
|
112
|
+
const worker = serviceWorker(request => network(request));
|
|
113
|
+
expect(await (await worker.get('http://127.0.0.1:4100/', { mode: 'navigate' }))?.text()).toBe('<p>v1</p>');
|
|
114
|
+
network = offline;
|
|
115
|
+
// Any path is the page of the single-page app.
|
|
116
|
+
expect(await (await worker.get('http://127.0.0.1:4100/console', { mode: 'navigate' }))?.text()).toBe('<p>v1</p>');
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('fails a page it never saw, as the browser would', async () => {
|
|
120
|
+
const worker = serviceWorker(offline);
|
|
121
|
+
await expect(worker.get('http://127.0.0.1:4100/', { mode: 'navigate' }) as Promise<Response>).rejects.toThrow('Failed to fetch');
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it('keeps the bundles, and drops them when a new build of the page arrives', async () => {
|
|
125
|
+
let page = '<script src="assets/index-1.js">';
|
|
126
|
+
let calls = 0;
|
|
127
|
+
const worker = serviceWorker(async request => {
|
|
128
|
+
calls++;
|
|
129
|
+
return request.url.endsWith('/') ? html(page) : new Response(`code of ${request.url}`);
|
|
130
|
+
});
|
|
131
|
+
await worker.get('http://127.0.0.1:4100/', { mode: 'navigate' });
|
|
132
|
+
expect(await (await worker.get('http://127.0.0.1:4100/assets/index-1.js'))?.text()).toBe('code of http://127.0.0.1:4100/assets/index-1.js');
|
|
133
|
+
await worker.get('http://127.0.0.1:4100/assets/index-1.js');
|
|
134
|
+
expect(calls).toBe(2);
|
|
135
|
+
expect(worker.stores.get('ta-assets-v1')?.size).toBe(1);
|
|
136
|
+
|
|
137
|
+
await worker.get('http://127.0.0.1:4100/', { mode: 'navigate' });
|
|
138
|
+
expect(worker.stores.get('ta-assets-v1')?.size).toBe(1);
|
|
139
|
+
page = '<script src="assets/index-2.js">';
|
|
140
|
+
await worker.get('http://127.0.0.1:4100/', { mode: 'navigate' });
|
|
141
|
+
expect(worker.stores.has('ta-assets-v1')).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
});
|