@celljs/ta-web 4.6.1 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +90 -0
- package/README.md +13 -7
- package/esm/browser/chat/chat-protocol.d.ts +4 -0
- package/esm/browser/chat/chat-view.js +4 -1
- package/esm/browser/chat/chat-view.js.map +1 -1
- package/esm/browser/chat/chat.d.ts +8 -1
- package/esm/browser/chat/chat.js +34 -15
- package/esm/browser/chat/chat.js.map +1 -1
- package/esm/browser/chat/draft-model.d.ts +15 -0
- package/esm/browser/chat/draft-model.js +53 -0
- package/esm/browser/chat/draft-model.js.map +1 -0
- package/esm/browser/components/account-menu.d.ts +3 -2
- package/esm/browser/components/account-menu.js +21 -16
- package/esm/browser/components/account-menu.js.map +1 -1
- package/esm/browser/components/app-view.js +13 -4
- package/esm/browser/components/app-view.js.map +1 -1
- package/esm/browser/components/chat-list.d.ts +3 -1
- package/esm/browser/components/chat-list.js +6 -1
- package/esm/browser/components/chat-list.js.map +1 -1
- package/esm/browser/components/composer-box.d.ts +6 -0
- package/esm/browser/components/composer-box.js +50 -13
- package/esm/browser/components/composer-box.js.map +1 -1
- package/esm/browser/components/composer.js +1 -1
- package/esm/browser/components/composer.js.map +1 -1
- package/esm/browser/components/dialog-view.d.ts +4 -1
- package/esm/browser/components/dialog-view.js +11 -7
- package/esm/browser/components/dialog-view.js.map +1 -1
- package/esm/browser/components/folder-picker.d.ts +37 -6
- package/esm/browser/components/folder-picker.js +155 -33
- package/esm/browser/components/folder-picker.js.map +1 -1
- package/esm/browser/components/notice-center.js +3 -1
- package/esm/browser/components/notice-center.js.map +1 -1
- package/esm/browser/components/remote-hosts.d.ts +7 -0
- package/esm/browser/components/remote-hosts.js +94 -0
- package/esm/browser/components/remote-hosts.js.map +1 -0
- package/esm/browser/components/remote-prompts.d.ts +7 -0
- package/esm/browser/components/remote-prompts.js +72 -0
- package/esm/browser/components/remote-prompts.js.map +1 -0
- package/esm/browser/components/session-view.js +48 -4
- package/esm/browser/components/session-view.js.map +1 -1
- package/esm/browser/components/settings-view.js +8 -1
- package/esm/browser/components/settings-view.js.map +1 -1
- package/esm/browser/components/terminal-art.d.ts +7 -0
- package/esm/browser/components/terminal-art.js +12 -0
- package/esm/browser/components/terminal-art.js.map +1 -0
- package/esm/browser/components/tool-view.js +1 -1
- package/esm/browser/components/tool-view.js.map +1 -1
- package/esm/browser/components/web-composer.d.ts +4 -1
- package/esm/browser/components/web-composer.js +2 -2
- package/esm/browser/components/web-composer.js.map +1 -1
- package/esm/browser/components/working-directory.js +1 -1
- package/esm/browser/components/working-directory.js.map +1 -1
- package/esm/browser/extension/icons.js +6 -1
- package/esm/browser/extension/icons.js.map +1 -1
- package/esm/browser/extension/web-extension-api.d.ts +120 -2
- package/esm/browser/extension/web-extensions.d.ts +3 -0
- package/esm/browser/extension/web-extensions.js +33 -1
- package/esm/browser/extension/web-extensions.js.map +1 -1
- package/esm/browser/i18n/locales.d.ts +44 -1
- package/esm/browser/i18n/messages.d.ts +43 -0
- package/esm/browser/i18n/messages.js +99 -13
- package/esm/browser/i18n/messages.js.map +1 -1
- package/esm/browser/notices/notices-protocol.d.ts +3 -0
- package/esm/browser/notices/notices.d.ts +3 -0
- package/esm/browser/notices/notices.js +15 -0
- package/esm/browser/notices/notices.js.map +1 -1
- package/esm/browser/style/base.d.ts +1 -1
- package/esm/browser/style/base.js +6 -1
- package/esm/browser/style/base.js.map +1 -1
- package/esm/browser/style/conversation.d.ts +1 -1
- package/esm/browser/style/conversation.js +16 -1
- package/esm/browser/style/conversation.js.map +1 -1
- package/esm/browser/style/layout.d.ts +1 -1
- package/esm/browser/style/layout.js +53 -15
- package/esm/browser/style/layout.js.map +1 -1
- package/esm/browser/style/shell.d.ts +1 -1
- package/esm/browser/style/shell.js +1 -0
- package/esm/browser/style/shell.js.map +1 -1
- package/esm/browser/terminal/canvas-font.d.ts +10 -0
- package/esm/browser/terminal/canvas-font.js +34 -0
- package/esm/browser/terminal/canvas-font.js.map +1 -0
- package/esm/browser/terminal/terminal-links.d.ts +18 -0
- package/esm/browser/terminal/terminal-links.js +72 -0
- package/esm/browser/terminal/terminal-links.js.map +1 -0
- package/esm/browser/terminal/terminal-theme.d.ts +8 -0
- package/esm/browser/terminal/terminal-theme.js +65 -0
- package/esm/browser/terminal/terminal-theme.js.map +1 -0
- package/esm/browser/terminal/web-terminal.d.ts +74 -0
- package/esm/browser/terminal/web-terminal.js +300 -0
- package/esm/browser/terminal/web-terminal.js.map +1 -0
- package/esm/browser/terminal/xterm.d.ts +5 -0
- package/esm/browser/terminal/xterm.js +9 -0
- package/esm/browser/terminal/xterm.js.map +1 -0
- package/esm/browser/util/desktop.d.ts +43 -0
- package/esm/browser/util/desktop.js +55 -0
- package/esm/browser/util/desktop.js.map +1 -0
- package/esm/browser/util/file-drag.d.ts +26 -0
- package/esm/browser/util/file-drag.js +73 -0
- package/esm/browser/util/file-drag.js.map +1 -0
- package/esm/browser/util/message.d.ts +1 -0
- package/esm/browser/util/message.js +7 -5
- package/esm/browser/util/message.js.map +1 -1
- package/esm/browser/util/terminal-text.d.ts +33 -0
- package/esm/browser/util/terminal-text.js +209 -0
- package/esm/browser/util/terminal-text.js.map +1 -0
- package/esm/browser/util/tool.js +16 -0
- package/esm/browser/util/tool.js.map +1 -1
- package/esm/browser/workbench-protocol.d.ts +7 -1
- package/esm/browser/workbench-protocol.js.map +1 -1
- package/esm/browser/workbench.d.ts +7 -1
- package/esm/browser/workbench.js +23 -0
- package/esm/browser/workbench.js.map +1 -1
- package/lib/browser/chat/chat-protocol.d.ts +4 -0
- package/lib/browser/chat/chat-protocol.d.ts.map +1 -1
- package/lib/browser/chat/chat-view.d.ts.map +1 -1
- package/lib/browser/chat/chat-view.js +4 -1
- package/lib/browser/chat/chat-view.js.map +1 -1
- package/lib/browser/chat/chat.d.ts +8 -1
- package/lib/browser/chat/chat.d.ts.map +1 -1
- package/lib/browser/chat/chat.js +34 -15
- package/lib/browser/chat/chat.js.map +1 -1
- package/lib/browser/chat/chat.spec.js +30 -0
- package/lib/browser/chat/chat.spec.js.map +1 -1
- package/lib/browser/chat/draft-model.d.ts +16 -0
- package/lib/browser/chat/draft-model.d.ts.map +1 -0
- package/lib/browser/chat/draft-model.js +90 -0
- package/lib/browser/chat/draft-model.js.map +1 -0
- package/lib/browser/chat/draft-model.spec.d.ts +2 -0
- package/lib/browser/chat/draft-model.spec.d.ts.map +1 -0
- package/lib/browser/chat/draft-model.spec.js +31 -0
- package/lib/browser/chat/draft-model.spec.js.map +1 -0
- package/lib/browser/components/account-menu.d.ts +3 -2
- package/lib/browser/components/account-menu.d.ts.map +1 -1
- package/lib/browser/components/account-menu.js +21 -16
- package/lib/browser/components/account-menu.js.map +1 -1
- package/lib/browser/components/app-view.d.ts.map +1 -1
- package/lib/browser/components/app-view.js +13 -4
- package/lib/browser/components/app-view.js.map +1 -1
- package/lib/browser/components/chat-list.d.ts +3 -1
- package/lib/browser/components/chat-list.d.ts.map +1 -1
- package/lib/browser/components/chat-list.js +6 -1
- package/lib/browser/components/chat-list.js.map +1 -1
- package/lib/browser/components/composer-box.d.ts +6 -0
- package/lib/browser/components/composer-box.d.ts.map +1 -1
- package/lib/browser/components/composer-box.js +51 -14
- package/lib/browser/components/composer-box.js.map +1 -1
- package/lib/browser/components/composer.d.ts.map +1 -1
- package/lib/browser/components/composer.js +1 -1
- package/lib/browser/components/composer.js.map +1 -1
- package/lib/browser/components/dialog-view.d.ts +4 -1
- package/lib/browser/components/dialog-view.d.ts.map +1 -1
- package/lib/browser/components/dialog-view.js +11 -7
- package/lib/browser/components/dialog-view.js.map +1 -1
- package/lib/browser/components/folder-picker.d.ts +37 -6
- package/lib/browser/components/folder-picker.d.ts.map +1 -1
- package/lib/browser/components/folder-picker.js +156 -33
- package/lib/browser/components/folder-picker.js.map +1 -1
- package/lib/browser/components/folder-picker.spec.js +15 -0
- package/lib/browser/components/folder-picker.spec.js.map +1 -1
- package/lib/browser/components/notice-center.d.ts.map +1 -1
- package/lib/browser/components/notice-center.js +3 -1
- package/lib/browser/components/notice-center.js.map +1 -1
- package/lib/browser/components/plus-menu.spec.d.ts +2 -0
- package/lib/browser/components/plus-menu.spec.d.ts.map +1 -0
- package/lib/browser/components/plus-menu.spec.js +18 -0
- package/lib/browser/components/plus-menu.spec.js.map +1 -0
- package/lib/browser/components/remote-hosts.d.ts +8 -0
- package/lib/browser/components/remote-hosts.d.ts.map +1 -0
- package/lib/browser/components/remote-hosts.js +130 -0
- package/lib/browser/components/remote-hosts.js.map +1 -0
- package/lib/browser/components/remote-prompts.d.ts +8 -0
- package/lib/browser/components/remote-prompts.d.ts.map +1 -0
- package/lib/browser/components/remote-prompts.js +108 -0
- package/lib/browser/components/remote-prompts.js.map +1 -0
- package/lib/browser/components/session-view.d.ts.map +1 -1
- package/lib/browser/components/session-view.js +48 -4
- package/lib/browser/components/session-view.js.map +1 -1
- package/lib/browser/components/settings-view.d.ts.map +1 -1
- package/lib/browser/components/settings-view.js +7 -0
- package/lib/browser/components/settings-view.js.map +1 -1
- package/lib/browser/components/terminal-art.d.ts +8 -0
- package/lib/browser/components/terminal-art.d.ts.map +1 -0
- package/lib/browser/components/terminal-art.js +48 -0
- package/lib/browser/components/terminal-art.js.map +1 -0
- package/lib/browser/components/tool-view.js +1 -1
- package/lib/browser/components/tool-view.js.map +1 -1
- package/lib/browser/components/web-composer.d.ts +4 -1
- package/lib/browser/components/web-composer.d.ts.map +1 -1
- package/lib/browser/components/web-composer.js +2 -2
- package/lib/browser/components/web-composer.js.map +1 -1
- package/lib/browser/components/working-directory.js +1 -1
- package/lib/browser/components/working-directory.js.map +1 -1
- package/lib/browser/extension/icons.d.ts.map +1 -1
- package/lib/browser/extension/icons.js +5 -0
- package/lib/browser/extension/icons.js.map +1 -1
- package/lib/browser/extension/web-extension-api.d.ts +120 -2
- package/lib/browser/extension/web-extension-api.d.ts.map +1 -1
- package/lib/browser/extension/web-extensions.d.ts +3 -0
- package/lib/browser/extension/web-extensions.d.ts.map +1 -1
- package/lib/browser/extension/web-extensions.js +33 -1
- package/lib/browser/extension/web-extensions.js.map +1 -1
- package/lib/browser/i18n/locales.d.ts +44 -1
- package/lib/browser/i18n/locales.d.ts.map +1 -1
- package/lib/browser/i18n/messages.d.ts +43 -0
- package/lib/browser/i18n/messages.d.ts.map +1 -1
- package/lib/browser/i18n/messages.js +99 -13
- package/lib/browser/i18n/messages.js.map +1 -1
- package/lib/browser/notices/notices-protocol.d.ts +3 -0
- package/lib/browser/notices/notices-protocol.d.ts.map +1 -1
- package/lib/browser/notices/notices.d.ts +3 -0
- package/lib/browser/notices/notices.d.ts.map +1 -1
- package/lib/browser/notices/notices.js +15 -0
- package/lib/browser/notices/notices.js.map +1 -1
- package/lib/browser/notices/notices.spec.js +8 -3
- package/lib/browser/notices/notices.spec.js.map +1 -1
- package/lib/browser/style/base.d.ts +1 -1
- package/lib/browser/style/base.d.ts.map +1 -1
- package/lib/browser/style/base.js +6 -1
- package/lib/browser/style/base.js.map +1 -1
- package/lib/browser/style/conversation.d.ts +1 -1
- package/lib/browser/style/conversation.d.ts.map +1 -1
- package/lib/browser/style/conversation.js +16 -1
- package/lib/browser/style/conversation.js.map +1 -1
- package/lib/browser/style/layout.d.ts +1 -1
- package/lib/browser/style/layout.d.ts.map +1 -1
- package/lib/browser/style/layout.js +53 -15
- package/lib/browser/style/layout.js.map +1 -1
- package/lib/browser/style/shell.d.ts +1 -1
- package/lib/browser/style/shell.d.ts.map +1 -1
- package/lib/browser/style/shell.js +1 -0
- package/lib/browser/style/shell.js.map +1 -1
- package/lib/browser/terminal/canvas-font.d.ts +11 -0
- package/lib/browser/terminal/canvas-font.d.ts.map +1 -0
- package/lib/browser/terminal/canvas-font.js +37 -0
- package/lib/browser/terminal/canvas-font.js.map +1 -0
- package/lib/browser/terminal/canvas-font.spec.d.ts +2 -0
- package/lib/browser/terminal/canvas-font.spec.d.ts.map +1 -0
- package/lib/browser/terminal/canvas-font.spec.js +32 -0
- package/lib/browser/terminal/canvas-font.spec.js.map +1 -0
- package/lib/browser/terminal/terminal-links.d.ts +19 -0
- package/lib/browser/terminal/terminal-links.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-links.js +75 -0
- package/lib/browser/terminal/terminal-links.js.map +1 -0
- package/lib/browser/terminal/terminal-links.spec.d.ts +2 -0
- package/lib/browser/terminal/terminal-links.spec.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-links.spec.js +30 -0
- package/lib/browser/terminal/terminal-links.spec.js.map +1 -0
- package/lib/browser/terminal/terminal-theme.d.ts +9 -0
- package/lib/browser/terminal/terminal-theme.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-theme.js +68 -0
- package/lib/browser/terminal/terminal-theme.js.map +1 -0
- package/lib/browser/terminal/terminal-theme.spec.d.ts +2 -0
- package/lib/browser/terminal/terminal-theme.spec.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-theme.spec.js +24 -0
- package/lib/browser/terminal/terminal-theme.spec.js.map +1 -0
- package/lib/browser/terminal/web-terminal.d.ts +75 -0
- package/lib/browser/terminal/web-terminal.d.ts.map +1 -0
- package/lib/browser/terminal/web-terminal.js +304 -0
- package/lib/browser/terminal/web-terminal.js.map +1 -0
- package/lib/browser/terminal/xterm.d.ts +6 -0
- package/lib/browser/terminal/xterm.d.ts.map +1 -0
- package/lib/browser/terminal/xterm.js +16 -0
- package/lib/browser/terminal/xterm.js.map +1 -0
- package/lib/browser/util/desktop.d.ts +44 -0
- package/lib/browser/util/desktop.d.ts.map +1 -0
- package/lib/browser/util/desktop.js +58 -0
- package/lib/browser/util/desktop.js.map +1 -0
- package/lib/browser/util/desktop.spec.d.ts +2 -0
- package/lib/browser/util/desktop.spec.d.ts.map +1 -0
- package/lib/browser/util/desktop.spec.js +67 -0
- package/lib/browser/util/desktop.spec.js.map +1 -0
- package/lib/browser/util/file-drag.d.ts +27 -0
- package/lib/browser/util/file-drag.d.ts.map +1 -0
- package/lib/browser/util/file-drag.js +76 -0
- package/lib/browser/util/file-drag.js.map +1 -0
- package/lib/browser/util/file-drag.spec.d.ts +2 -0
- package/lib/browser/util/file-drag.spec.d.ts.map +1 -0
- package/lib/browser/util/file-drag.spec.js +46 -0
- package/lib/browser/util/file-drag.spec.js.map +1 -0
- package/lib/browser/util/message.d.ts +1 -0
- package/lib/browser/util/message.d.ts.map +1 -1
- package/lib/browser/util/message.js +7 -5
- package/lib/browser/util/message.js.map +1 -1
- package/lib/browser/util/message.spec.js +2 -0
- package/lib/browser/util/message.spec.js.map +1 -1
- package/lib/browser/util/terminal-text.d.ts +34 -0
- package/lib/browser/util/terminal-text.d.ts.map +1 -0
- package/lib/browser/util/terminal-text.js +212 -0
- package/lib/browser/util/terminal-text.js.map +1 -0
- package/lib/browser/util/terminal-text.spec.d.ts +2 -0
- package/lib/browser/util/terminal-text.spec.d.ts.map +1 -0
- package/lib/browser/util/terminal-text.spec.js +54 -0
- package/lib/browser/util/terminal-text.spec.js.map +1 -0
- package/lib/browser/util/tool.d.ts.map +1 -1
- package/lib/browser/util/tool.js +16 -0
- package/lib/browser/util/tool.js.map +1 -1
- package/lib/browser/util/tool.spec.js +12 -0
- package/lib/browser/util/tool.spec.js.map +1 -1
- package/lib/browser/workbench-protocol.d.ts +7 -1
- package/lib/browser/workbench-protocol.d.ts.map +1 -1
- package/lib/browser/workbench-protocol.js.map +1 -1
- package/lib/browser/workbench.d.ts +7 -1
- package/lib/browser/workbench.d.ts.map +1 -1
- package/lib/browser/workbench.js +23 -0
- package/lib/browser/workbench.js.map +1 -1
- package/package.json +11 -7
- package/src/browser/chat/chat-protocol.ts +4 -0
- package/src/browser/chat/chat-view.tsx +5 -1
- package/src/browser/chat/chat.spec.ts +31 -0
- package/src/browser/chat/chat.ts +36 -14
- package/src/browser/chat/draft-model.spec.tsx +31 -0
- package/src/browser/chat/draft-model.tsx +63 -0
- package/src/browser/components/account-menu.tsx +23 -20
- package/src/browser/components/app-view.tsx +12 -3
- package/src/browser/components/chat-list.tsx +9 -2
- package/src/browser/components/composer-box.tsx +52 -6
- package/src/browser/components/composer.tsx +1 -0
- package/src/browser/components/dialog-view.tsx +16 -7
- package/src/browser/components/folder-picker.spec.ts +17 -0
- package/src/browser/components/folder-picker.tsx +221 -39
- package/src/browser/components/notice-center.tsx +7 -1
- package/src/browser/components/plus-menu.spec.ts +16 -0
- package/src/browser/components/remote-hosts.tsx +149 -0
- package/src/browser/components/remote-prompts.tsx +111 -0
- package/src/browser/components/session-view.tsx +65 -4
- package/src/browser/components/settings-view.tsx +8 -0
- package/src/browser/components/terminal-art.tsx +21 -0
- package/src/browser/components/tool-view.tsx +1 -1
- package/src/browser/components/web-composer.tsx +18 -3
- package/src/browser/components/working-directory.tsx +1 -1
- package/src/browser/extension/icons.ts +10 -0
- package/src/browser/extension/web-extension-api.ts +134 -2
- package/src/browser/extension/web-extensions.ts +47 -2
- package/src/browser/i18n/messages.ts +99 -13
- package/src/browser/notices/notices-protocol.ts +3 -0
- package/src/browser/notices/notices.spec.ts +9 -3
- package/src/browser/notices/notices.ts +17 -1
- package/src/browser/style/base.ts +6 -1
- package/src/browser/style/conversation.ts +16 -1
- package/src/browser/style/layout.ts +53 -15
- package/src/browser/style/shell.ts +1 -0
- package/src/browser/terminal/canvas-font.spec.ts +29 -0
- package/src/browser/terminal/canvas-font.ts +32 -0
- package/src/browser/terminal/terminal-links.spec.ts +32 -0
- package/src/browser/terminal/terminal-links.ts +75 -0
- package/src/browser/terminal/terminal-theme.spec.ts +23 -0
- package/src/browser/terminal/terminal-theme.ts +66 -0
- package/src/browser/terminal/web-terminal.ts +330 -0
- package/src/browser/terminal/xterm.ts +10 -0
- package/src/browser/util/desktop.spec.ts +68 -0
- package/src/browser/util/desktop.ts +96 -0
- package/src/browser/util/file-drag.spec.ts +48 -0
- package/src/browser/util/file-drag.ts +78 -0
- package/src/browser/util/message.spec.ts +2 -0
- package/src/browser/util/message.ts +7 -4
- package/src/browser/util/terminal-text.spec.ts +60 -0
- package/src/browser/util/terminal-text.ts +223 -0
- package/src/browser/util/tool.spec.ts +12 -0
- package/src/browser/util/tool.ts +17 -0
- package/src/browser/workbench-protocol.ts +8 -0
- package/src/browser/workbench.ts +29 -0
package/README.en.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Cell - Ta Web
|
|
2
|
+
|
|
3
|
+
The Web client included with `ta serve`: a Cell frontend component ([@celljs/react](../../ui-packages/react/README.md)) whose state comes entirely from [@celljs/ta-client](../ta-client/README.md), so it shares the same session state machine as the desktop and mobile clients.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
ta serve --web # Start and open in browser, token already included
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Install as Application (PWA)
|
|
10
|
+
|
|
11
|
+
The Web client can be installed as an application on desktop or mobile: use the install icon in the Chrome or Edge address bar, or "Install as app" from the account menu, or "Add to Home Screen" in iOS Safari. After installation, it opens in a separate window with the Cell dinosaur icon.
|
|
12
|
+
|
|
13
|
+
- Files are in `src/browser/public/` (`manifest.webmanifest`, `sw.js`, `icons/`) and placed at the site root during build; the manifest and Service Worker only work in secure contexts: localhost (127.0.0.1 or localhost) or HTTPS. Accessing via HTTP from another machine using `--host` displays only as a web page.
|
|
14
|
+
- The app remembers the address (including port) and token, so `ta serve` reuses the last port and token by default (see [@celljs/ta](../../apps/ta/README.md)).
|
|
15
|
+
- The Service Worker caches nothing under `/api`: pages come from the network and fall back to the last page on failure; hashed scripts under `/assets/` come from the cache first, and old scripts are cleared once the page has a new build. While ta serve is not running the app still opens, says "The Ta service is not running" and connects once it starts. The interface calls ta serve "the Ta service" and names the command only where the user has to run it in a terminal.
|
|
16
|
+
|
|
17
|
+
## Interface
|
|
18
|
+
|
|
19
|
+
The main layout is IDE-style: the navigation bar on the far left (with logo doubling as a sidebar toggle, pages for web extensions, and settings and account menu at the bottom), the sidebar next to it (resizable and collapsible; a row of icon tabs at the top switches between web extension sidebar views and the conversation list, with a search box and + button to the right of the tabs) containing all open sessions on the server (which can be created, created in a specified directory, or closed), the current conversation in the middle, and a collapsible panel on the right for web extension cards. On narrow screens, the navigation bar and conversation list become drawers, and the panel floats above the conversation.
|
|
20
|
+
|
|
21
|
+
Initially, the interface shows only conversations. You tell Ta what you want this page to do and display, and Ta builds it as a pi package—cards beside the conversation, a standalone page, or a new Ta command—which appears on the page immediately.
|
|
22
|
+
|
|
23
|
+
Everything new in the interface comes from **web extensions** within packages, using the same mechanism and terminology as pi extensions:
|
|
24
|
+
|
|
25
|
+
- **Packages** are pi packages. In the `pi` field of `package.json`, `extensions` are extensions for Ta (terminal and server), and `web` are extensions for this page; when not declared, modules in the `web/` directory are used. Packages can be placed in `~/.ta/agent/extensions/<name>/` or the project's `.ta/extensions/` to take effect, or installed with `ta install`.
|
|
26
|
+
- **Web extensions** are ES modules without import statements, with a default export of a function that the page calls with `pi`; the returned function is called on unload. The `pi` interface follows pi's ExtensionAPI naming: `ui.setWidget` (default above the input box, same as pi; `placement: 'panel'` puts it in the right workbench's card tabs), `registerView` (pages in the navigation bar, or a tab at the top of the sidebar; `location: 'panel'` is a tool in the right workbench), `registerMessageRenderer` (displays custom messages sent by pi extensions with `sendMessage`), `registerTool` (tools executed by the browser in conversations opened on the page), `registerOpener` (opens links in replies: files and their lines, directories, web pages, asked in registration order, returns true if opened), `on` (events of the current conversation), `sendUserMessage` (sends to current conversation; `/commands` execute pi extension commands), `switchSession` (displays another open session in ta serve as the current conversation), `callHost` (calls methods of this package's `pi.host`, via `callPackageHost`), `reloadExtensions` (after the extension itself installs, imports or removes packages, reload web extensions and pi extensions of the current conversation like at the end of a reply), `ui.showView` / `ui.useView` (show, view any extension's view), `ui.Composer` / `ui.Markdown` (input box and Markdown same as conversation), `ui.Dialog` (full-page modal), `ui.openEditor`'s `preview` (preview tab that opens on click, title in italics, next preview replaces it, double-click or `ui.pinEditor` pins it), `ui.setEditorDirty` (tab shows unsaved dot, confirm before close), `ui.useActiveEditor` (current tab in workbench), `ui.DiffEditor` (Monaco diff editor, side-by-side or inline, right side editable), `ui.confirm`'s `confirmLabel` / `danger`, view's `head` (its own title bar), `ui.input` / `ui.editor` (ask user for one or multiple lines of text, returns `undefined` if canceled), page's `menu` (floating … menu when the page is listed in sidebar) and `pages` (pages listed in sidebar, navigation bar no longer lists them separately), `ui.notify` (notifications in bottom right of page), `ui.confirm` (confirm before continuing, returns whether user agreed), `ui.theme`, `ui.language`, `ui.supportsWebview` (whether a view can show a site in a `<webview>`, as in Ta Desktop, rather than an iframe), `ui.debugWebview` (Ta Desktop: a command of the Chrome DevTools Protocol to the page of such a webview, limited to the page itself), `ui.desktop.browserData` (Ta Desktop on macOS and Windows: the cookies of a profile of the user's browser taken into the browser of Ta once the user says yes in a dialog of the app, and clearing that browser's data), and page services: `server` (session, pi's RPC commands), `workspace` (files and commands in directory), `terminals` (terminals), `packages` (packages) (types see `WebExtensionAPI`).
|
|
27
|
+
- **Make packages with natural language**: the built-in extension [@celljs/ta-extensions](../ta-extensions/README.md) includes the skill `ta-package` (also available in the Ta terminal) and adds an "Extensions" page in the navigation bar (create an extension in one sentence, export or import). It documents package format, the web extension interface, and validation steps. At the end of each reply in the current conversation, the page reloads web extensions: new ones load, changed ones reload, and deleted ones unload; when tools change, the conversation reopens that part in the same session file (only for conversations opened on this page); when packages change, the session reloads pi extensions. The page checks again when redisplayed (packages might change in the terminal too).
|
|
28
|
+
- **Stable**: each extension owns what it registers and removes it all on unload; if one extension fails to load or render, only that extension's area shows an error, without affecting the page or other extensions.
|
|
29
|
+
|
|
30
|
+
**Settings → More → Extensions** (the "Extensions" in the gear menu) lists installed extensions (each is a package with web extensions that can be removed or reloaded); **Built-in Extensions** lists packages and web extensions provided with Ta and can be toggled here:
|
|
31
|
+
|
|
32
|
+
- **My Double**: a double that can be given tasks by voice or text. The main conversation is a regular Ta session with role instructions (`appendSystemPrompt`) and five client tools (such as `start_task`); each task runs as a new session in the background and ends with a `<task_update>` report. The appearance is the dinosaur from the Cell logo (`DinoAvatar`, using the same path as `assets/logo.svg`), conveying states such as standby, listening, thinking, working, speaking, needing confirmation, done, and asleep using only eye expressions and small markers.
|
|
33
|
+
|
|
34
|
+
### Conversation and Input Box
|
|
35
|
+
|
|
36
|
+
- **Conversation flow**: continuous thinking, tool calls, and interim explanations in a turn are folded into a single line "Executed N steps": this expands while in progress, shows only recent steps, and collapses after completion (remaining expanded and marking failed steps if any); the final text is the reply. Layout is a pure function `ProcessUtil` (`util/process.ts`); each message uses a stable key and memos per message, so streaming output only redraws changed messages.
|
|
37
|
+
- **Input box**: Enter sends, Shift+Enter inserts a newline; during IME composition, Enter does not send. While Ta works, Enter suggests, Alt+Enter queues, Esc stops, and send and stop use the same button. `/` lists commands, `@` finds and inserts `@path` by filename (using the server's `findFiles`; the menu explains if unsupported); images can be pasted, dragged, or selected (PNG, JPEG, GIF, WebP; max 5 MB per image, max 8 per message); queued messages show above the input box and can be undone back to the box (`clearQueue`). Logic is in `ComposerUtil` (`util/composer.ts`).
|
|
38
|
+
- **Avatar**: `TaAvatar` is the Cell logo, and `mark` is a 1–2 character badge to distinguish agents (in web extensions it's `pi.ui.Avatar`); each reply starts with a small avatar (once per turn): during work, eye expression shows thinking, execution, or output; on the last turn when done, eyes squint with a checkmark; on error, it shows an alert badge; an empty conversation page displays a large avatar that blinks and occasionally looks at the input box. With reduced motion, everything is static.
|
|
39
|
+
- **Status and hints**: four levels (info, success, warning, and error), each with a fixed icon and color, with the body always in body color. By ownership, there are three types: global **connection status bar** (a capsule at the top of the main area that appears after 1 second of disconnect, showing reason, countdown, and "Retry now"; shows "Reconnected" for 2 seconds after recovery); **notices** (`TaNotices`, bottom right, top on phone; success 3s, info 4s, warning 6s, error 8s; add 4s for buttons; pause on hover or focus; merge same messages with count; max 4 notices); **inline hints** (`Callout`, staying at the place of issue, such as when a turn reply fails, an extension view errors, or a token is rejected). Operation failures (send, switch model, open conversation, etc.) uniformly use `notices.error`: server errors with `hint` put the suggestion on the second line; failures from disconnect merge into one "Did not complete: ta serve not connected" message. Operations needing user confirmation use `notices.confirm`; irreversible operations have red buttons with default focus on "Cancel".
|
|
40
|
+
- **Links**: all links in replies are clickable (`TaLinks`, parsed in `LinkUtil`). Web links, bare URLs in text, and `<URL>` open by default in the browser on the right workbench; Cmd/Ctrl+click (or middle button) opens in the system browser. File paths (`[text](src/a.ts#L10-L20)`, `src/a.ts:10:5`, `file://` address, and inline code like `src/a.ts:12` and `package.json`) are parsed relative to the conversation directory, open and locate in the workbench, and select corresponding lines and columns (syntax like VS Code: `#L10`, `#L10C5-L12C3`, `:10:5`, `:10-20`); directories (`docs/`) open in the explorer at that directory. Open actions are provided by web extensions (`registerOpener`; the built-in @celljs/ta-workspace handles files, directories, and the built-in browser). For security, following VS Code: only http(s), mailto, and paths are recognized; `javascript:`, `data:`, `command:`, etc. are plain text; rendering results are React elements, not HTML; paths are confirmed to exist on the server first, though read/write are still subject to execution environment constraints. Before opening in the system browser, a popup shows the full address with the domain highlighted (domains with similar appearance are shown in browser's punycode format); you can copy, open, or trust the domain. Localhost addresses (localhost, 127.0.0.1, and the host where ta serve runs) and **Settings → Links → Trusted Domains** (`github.com`, `*.github.com`, `localhost:3000`, `*`) skip confirmation; new windows always have `noopener,noreferrer`. In the built-in browser, URLs same-origin with the Ta page do not get `allow-same-origin` and cannot reach the page or token.
|
|
41
|
+
- **Account menu**: the round avatar at the foot of the navigation bar (`AccountMenu`) shows the initial of the user name on the computer of ta serve (`TaServerInfo.user`), with a yellow dot at its corner while disconnected. The menu shows the user and computer name (`host`), the connection state and version of the Ta service, "Install as app" (when the browser supports it) and sign out.
|
|
42
|
+
|
|
43
|
+
### Settings
|
|
44
|
+
|
|
45
|
+
The gear above the avatar (`ManageMenu`) is a two-level menu: Settings (⌘/Ctrl+,), Extensions, Keyboard shortcuts; Model accounts…, Open working directory…, Use on your phone…; Theme and Language expand on the right as a second level, with About Ta last. Settings is a view in the main area (`SettingsView`; it occupies the conversation and workbench when open; Esc or × closes it). The left side is a two-level directory (Interface, Ta, and More, then groups below; it follows highlight when scrolling); the right side shows group cards. The search bar at the top filters by name and description of each line:
|
|
46
|
+
|
|
47
|
+
- **Interface**: theme, reduce motion, interface language, and read aloud replies; stored in server user data (`TaSettings`), consistent across browsers and devices.
|
|
48
|
+
- **Ta**: Ta's own settings; reads and writes pi's `settings.json` (via the server's `getSettings` and `updateSettings`; editable keys are listed in ta-protocol's `TA_SETTINGS`): default model, thinking strength, transport, guide and queue message delivery, auto-compress and retry, code mode, skill commands, shell and command prefix, and images. At the top, switch between **User** (agent directory; affects all projects) and **Project** (`.ta/settings.json` in the current conversation directory; overrides user settings). Unset items show inherited values ("Default (…)" or "Use user setting (…)"); items set in the current level have a blue bar on the left; hover to reset. A project that is untrusted is read-only with the reason shown.
|
|
49
|
+
- **More**: Extensions, Built-in extensions, Keyboard shortcuts, and About (version, working directory, model accounts, phone access, and log out).
|
|
50
|
+
|
|
51
|
+
### Sign In to Model Service, Working Directory and Phone
|
|
52
|
+
|
|
53
|
+
- **Model accounts**: similar to pi's `/login` in the terminal, you can sign in with an account (OAuth, Claude, ChatGPT subscriptions) or API Key. Sign-in occurs on ta serve (`TaAuthServer`): the login page to open, device code, and key to fill are sent only to the requesting page; credentials are stored in `auth.json` on the ta serve machine, not in the browser. When no model is available (`CELL_TA_NOT_SIGNED_IN`), the page opens the login page directly instead of pi's `/login` prompt; the same applies to the desktop app on first launch.
|
|
54
|
+
- **Working directory**: when no directory is specified, new conversations and doubles open in ta serve's working directory. "Open working directory…" (`TaServer.setWorkingDirectory`) affects all clients and persists across restarts; already open conversations are not changed.
|
|
55
|
+
- **Use on your phone**: pair a device via Relay ([@celljs/ta-relay](../ta-relay/README.md)); the pairing link is displayed as a QR code (`util/qr-code.ts` draws it itself with no dependencies) and shown only once. Below, it lists paired devices and whether ta serve is connected to Relay. The default Relay is `https://relay.cellbang.com`.
|
|
56
|
+
|
|
57
|
+
## Structure
|
|
58
|
+
|
|
59
|
+
| | |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `TaWorkbench` (`TaWorkbenchImpl`) | One connection and open sessions on the server; token from URL fragment or localStorage; if unreachable, probe the server first: a response means the token is wrong (back to login page); no response means ta serve is not running (keep token, show hint, and auto-retry) |
|
|
62
|
+
| `TaPwa` (`TaPwaImpl`) | Make the page an installable app: link the manifest and icons, register Service Worker, and provide "Install as app" in the account menu (when the browser offers an install prompt) |
|
|
63
|
+
| `TaWebExtensions` (`TaWebExtensionsImpl`) | Load, reload, and unload web extensions; aggregate pages, cards, message renderers, and tools they register |
|
|
64
|
+
| `BuiltinWebExtension` | Extension point for built-in web extensions: `AssistantWebExtension` (the double) |
|
|
65
|
+
| `TaChat` (`TaChatImpl`) | Current conversation: create, switch, or close; open a session with web extension tools; reload extensions after a reply; remember the last session file and new conversation directory (user level) |
|
|
66
|
+
| `TaAssistant` (`TaAssistantImpl`) | The double: main conversation, tasks, and client tools for task dispatch; session file and task list are user-level state, with the same double across browsers |
|
|
67
|
+
| `TaState` (`TaStateImpl`) | Interface state saved by level; see below "Interface State" |
|
|
68
|
+
| `TaSettings` (`TaSettingsImpl`) | Theme, language, read aloud, reduce motion, and toggled built-in extensions; language is switched via @celljs/widget's `LocaleManager` |
|
|
69
|
+
| `TaNotices` (`TaNoticesImpl`) | Page's notices and confirmations; shared by Ta and web extensions |
|
|
70
|
+
| `TaAppPage` | Home page registered with `@View` (`AppView`) |
|
|
71
|
+
|
|
72
|
+
The server ([@celljs/ta-host](../ta-host/README.md)) adds `getSettings` and `updateSettings` (Ta's settings) and three methods: `listWebExtensions`, `readWebExtension`, and `removeWebExtension`, which find web extensions the same way pi loads packages (`packages` setting and `extensions/` directory; project's only when trusted); and `reload`, which is the same as pi's `/reload`.
|
|
73
|
+
|
|
74
|
+
## Interface State
|
|
75
|
+
|
|
76
|
+
Things on the interface that should persist after refresh, grouped by "who should see it again", are saved uniformly by `TaState` (in components use `usePersisted(spec)`; `spec` specifies the key, level, initial value, and validation on read):
|
|
77
|
+
|
|
78
|
+
| Level | Where | For |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| `tab` | This page's sessionStorage | Current page and sidebar tabs: two pages can each see their own |
|
|
81
|
+
| `device` | This browser's localStorage | Panel widths, collapse state, and whether the right workbench is open: follows the screen |
|
|
82
|
+
| `user` | Server's data for `@celljs/ta-web` package (`getExtensionData`); browser keeps a copy | Settings, last conversation, new conversation directory, the double's session and tasks, and workbench open tools: consistent across browsers and devices |
|
|
83
|
+
|
|
84
|
+
`user` level first uses the browser copy (no flash on first screen), then reads from the server and updates if the server value differs; changes merge and write after ~300 ms, write immediately when the page is hidden or closed, changes during disconnect are sent after reconnect, and changes from other browsers are pushed via `onExtensionData`. On read, values already changed on this page are not overwritten; between browsers, the last write wins. Old values existing only in the browser are moved to the server on first read.
|
|
85
|
+
|
|
86
|
+
State for a specific directory (expanded folders in the explorer) is saved by the web extension displaying it with `pi.storage.directory(cwd)`; the server stores it by directory (plus execution environment; with `ta serve --exec`, same-named directories on remote machines are separate) in separate files. Open files are recorded by @celljs/ta-workspace itself in `pi.storage`; loading reopens them in the background with `openEditor(editor, { preserveFocus: true })` and does not pop out the workbench.
|
|
87
|
+
|
|
88
|
+
The token is a login credential, not interface state, and is still stored by `TaWorkbench` in localStorage (after being installed as an app, you can sign in in its own window).
|
|
89
|
+
|
|
90
|
+
To add a built-in web extension, write a `@Component(BuiltinWebExtension)`. To replace the whole interface, rebind the home page with `@View({ index: true, component: MyView }, true)`.
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Web 客户端可以装成桌面或手机上的应用:Chrome / Edge 地址栏
|
|
|
12
12
|
|
|
13
13
|
- 文件在 `src/browser/public/`(`manifest.webmanifest`、`sw.js`、`icons/`),构建时放在站点根路径;清单与 Service Worker 只在安全上下文生效:本机(127.0.0.1、localhost)或 HTTPS,用 `--host` 经普通 HTTP 从别的机器访问时只是网页。
|
|
14
14
|
- 应用记住的是地址(含端口)和 token,所以 ta serve 默认沿用上次的端口和 token(见 [@celljs/ta](../../apps/ta/README.md))。
|
|
15
|
-
- Service Worker 不缓存 `/api` 下的任何东西:页面走网络,失败时用上次的页面;`/assets/` 下带哈希的脚本先读缓存,页面换了新构建就清掉旧脚本。ta serve 没在运行时应用照样打开,提示"ta serve
|
|
15
|
+
- Service Worker 不缓存 `/api` 下的任何东西:页面走网络,失败时用上次的页面;`/assets/` 下带哈希的脚本先读缓存,页面换了新构建就清掉旧脚本。ta serve 没在运行时应用照样打开,提示"Ta 服务没有在运行",启动后自动连上。界面文案把 ta serve 称为"Ta 服务",只在需要用户去终端执行时写出命令。
|
|
16
16
|
|
|
17
17
|
## 界面
|
|
18
18
|
|
|
@@ -23,11 +23,11 @@ Web 客户端可以装成桌面或手机上的应用:Chrome / Edge 地址栏
|
|
|
23
23
|
界面上新增的一切都来自包里的 **Web 扩展**,和 pi 的扩展同一套机制、同一套叫法:
|
|
24
24
|
|
|
25
25
|
- **包**就是 pi 的包。`package.json` 的 `pi` 里,`extensions` 是给 Ta(终端和服务端)的扩展,`web` 是给这个页面的扩展;没有声明时取 `web/` 目录下的模块。包放在 `~/.ta/agent/extensions/<名字>/`(项目的 `.ta/extensions/`)即可生效,也可以用 `ta install` 安装。
|
|
26
|
-
- **Web 扩展**是一个不带 import 的 ES 模块,默认导出一个函数,页面用 `pi` 调用它;返回的函数在卸载时调用。`pi` 的接口照 pi 的 ExtensionAPI 命名:`ui.setWidget`(默认在输入框上方,和 pi 一样;`placement: 'panel'` 放进右侧工作台的卡片标签)、`registerView`(导航栏里的页面,或侧栏顶部的一个标签;`location: 'panel'` 是右侧工作台的工具)、`registerMessageRenderer`(显示 pi 扩展用 `sendMessage` 发出的自定义消息)、`registerTool`(页面打开的对话里由浏览器执行的工具)、`registerOpener`(打开回复里的链接:文件及其行、目录、网页,按注册顺序询问,返回 true 表示已打开)、`on`(当前对话的事件)、`sendUserMessage`(发到当前对话;`/命令` 会执行 pi 扩展的命令)、`switchSession`(把 ta serve 里另一个打开的会话显示为当前对话)、`callHost`(调用本包 `pi.host` 的方法,经 `callPackageHost`)、`reloadExtensions`(扩展自己安装、导入或移除了包之后,像回复结束时一样重新加载 Web 扩展和当前对话的 pi 扩展)、`ui.showView` / `ui.useView`(显示、查看任意扩展的视图)、`ui.Composer` / `ui.Markdown`(和对话一样的输入框与 Markdown)、`ui.Dialog`(盖住整页的弹窗)、`ui.openEditor` 的 `preview`(单击打开的预览标签,标题斜体,下一个预览会替换它,双击或 `ui.pinEditor` 固定)、`ui.setEditorDirty`(标签显示未保存圆点,关闭前确认)、`ui.useActiveEditor`(工作台当前标签)、`ui.DiffEditor`(Monaco 差异编辑器,并排或内联,可编辑右侧)、`ui.confirm` 的 `confirmLabel` / `danger`、视图的 `head`(自己的顶栏)、`ui.input` / `ui.editor`(向用户要一行或多行文字,取消时为 `undefined`)、页面的 `menu`(侧栏列出该页面时悬浮显示的 … 菜单)与 `pages`(侧栏列出的页面,导航栏不再单列)、`ui.notify`(页面右下角的通知)、`ui.confirm`(继续前先确认,返回用户是否同意)、`ui.theme`、`ui.language
|
|
26
|
+
- **Web 扩展**是一个不带 import 的 ES 模块,默认导出一个函数,页面用 `pi` 调用它;返回的函数在卸载时调用。`pi` 的接口照 pi 的 ExtensionAPI 命名:`ui.setWidget`(默认在输入框上方,和 pi 一样;`placement: 'panel'` 放进右侧工作台的卡片标签)、`registerView`(导航栏里的页面,或侧栏顶部的一个标签;`location: 'panel'` 是右侧工作台的工具)、`registerMessageRenderer`(显示 pi 扩展用 `sendMessage` 发出的自定义消息)、`registerTool`(页面打开的对话里由浏览器执行的工具)、`registerOpener`(打开回复里的链接:文件及其行、目录、网页,按注册顺序询问,返回 true 表示已打开)、`on`(当前对话的事件)、`sendUserMessage`(发到当前对话;`/命令` 会执行 pi 扩展的命令)、`switchSession`(把 ta serve 里另一个打开的会话显示为当前对话)、`callHost`(调用本包 `pi.host` 的方法,经 `callPackageHost`)、`reloadExtensions`(扩展自己安装、导入或移除了包之后,像回复结束时一样重新加载 Web 扩展和当前对话的 pi 扩展)、`ui.showView` / `ui.useView`(显示、查看任意扩展的视图)、`ui.Composer` / `ui.Markdown`(和对话一样的输入框与 Markdown)、`ui.Dialog`(盖住整页的弹窗)、`ui.openEditor` 的 `preview`(单击打开的预览标签,标题斜体,下一个预览会替换它,双击或 `ui.pinEditor` 固定)、`ui.setEditorDirty`(标签显示未保存圆点,关闭前确认)、`ui.useActiveEditor`(工作台当前标签)、`ui.DiffEditor`(Monaco 差异编辑器,并排或内联,可编辑右侧)、`ui.confirm` 的 `confirmLabel` / `danger`、视图的 `head`(自己的顶栏)、`ui.input` / `ui.editor`(向用户要一行或多行文字,取消时为 `undefined`)、页面的 `menu`(侧栏列出该页面时悬浮显示的 … 菜单)与 `pages`(侧栏列出的页面,导航栏不再单列)、`ui.notify`(页面右下角的通知)、`ui.confirm`(继续前先确认,返回用户是否同意)、`ui.theme`、`ui.language`、`ui.supportsWebview`(能否用 `<webview>` 显示网站,Ta 桌面版里可以,其他地方用 iframe)、`ui.debugWebview`(Ta 桌面版:向这种 webview 里的网页发 Chrome DevTools Protocol 命令,只限网页本身)、`ui.desktop.browserData`(Ta 桌面版,macOS 和 Windows:用户在应用的原生对话框里同意后,把其浏览器某个个人资料的 Cookie 导入内置浏览器;也可清除内置浏览器数据),以及页面的 `React` 和 ta serve 的服务:`server`(会话,pi 的 RPC 命令)、`workspace`(目录里的文件与命令)、`terminals`(终端)、`packages`(包)(类型见 `WebExtensionAPI`)。
|
|
27
27
|
- **用自然语言做包**:内置扩展 [@celljs/ta-extensions](../ta-extensions/README.md) 带技能 `ta-package`(终端里的 Ta 也有),并在导航栏加了"扩展"页(一句话做扩展、导出导入),写明了包的格式、Web 扩展接口和验证步骤。当前对话每次回复结束,页面重新读取 Web 扩展:新的加载、改过的重新加载、删掉的卸载;工具有变化时,用同一个会话文件重新打开这段对话(只限本页打开的对话),包有改动时让会话重新加载 pi 扩展。页面重新显示时也会检查一次(包也可能在终端里改)。
|
|
28
28
|
- **稳定**:每个扩展注册的东西归它自己,卸载时一并撤掉;一个扩展加载失败或渲染出错,只在它自己的位置显示错误,不影响页面和其他扩展。
|
|
29
29
|
|
|
30
|
-
**设置 → 更多 →
|
|
30
|
+
**设置 → 更多 → 扩展**(齿轮菜单的"扩展")列出安装的扩展(每个是一个带 Web 扩展的包,可移除、重新加载);**内置扩展**列出随 Ta 提供的包和 Web 扩展,可以在这里开关:
|
|
31
31
|
|
|
32
32
|
- **我的分身**:一个可以用语音或文字交代事情的分身。主对话是一个普通的 Ta 会话,加了角色说明(`appendSystemPrompt`)和五个客户端工具(`start_task` 等);每件事作为一个新会话在后台执行,结束后以 `<task_update>` 回报。形象就是 Cell logo 里的恐龙(`DinoAvatar`,与 `assets/logo.svg` 同一路径),只用眼神和小标记表示待命、在听、思考、干活、说话、需要你确认、完成、睡着。
|
|
33
33
|
|
|
@@ -38,15 +38,21 @@ Web 客户端可以装成桌面或手机上的应用:Chrome / Edge 地址栏
|
|
|
38
38
|
- **头像**:`TaAvatar` 就是 Cell logo,`mark` 是 1~2 个字符的角标,用来区分智能体(Web 扩展里是 `pi.ui.Avatar`);每轮回复开头放一个小头像(一轮一次):工作中用眼神表示思考、执行或输出,最后一轮完成时眯眼带勾,出错时带提醒角标;空对话页是大号头像,会眨眼、不时看向输入框。减少动效时全部静止。
|
|
39
39
|
- **状态与提示**:分四级(info / success / warning / error),每级有固定的图标和颜色,正文始终用正文色。按归属分三种:全局的**连接状态条**(主区顶部的胶囊,断线超过 1 秒才出现,显示原因、倒计时和“立即重试”,恢复后显示“已重新连接”2 秒);**通知**(`TaNotices`,右下角、手机在顶部,success 3 秒、info 4 秒、warning 6 秒、error 8 秒,有按钮的多留 4 秒,悬停或聚焦时暂停计时,同一条重复出现时合并计数,最多 4 条);**就地提示**(`Callout`,留在出事的位置,如一轮回复失败、扩展视图出错、token 被拒绝)。操作失败(发送、切换模型、打开对话等)统一用 `notices.error`:服务端带 `hint` 的错误把建议放第二行,断线导致的失败合并成一条“没有完成:ta serve 未连接”。需要用户确认的操作用 `notices.confirm`,不可撤销的操作按钮为红色、默认焦点在“取消”。
|
|
40
40
|
- **链接**:回复里的链接都可以点(`TaLinks`,解析在 `LinkUtil`)。网页链接、正文里的裸 URL 和 `<URL>` 默认在右侧工作台的浏览器里打开,Cmd/Ctrl + 点击(或中键)在系统浏览器里打开;文件路径(`[说明](src/a.ts#L10-L20)`、`src/a.ts:10:5`、`file://` 地址,以及写成行内代码的 `src/a.ts:12`、`package.json`)按对话目录解析,在工作台打开并定位、选中对应行列(写法同 VS Code:`#L10`、`#L10C5-L12C3`、`:10:5`、`:10-20`);目录(`docs/`)在资源管理器里切到该目录。打开动作由 Web 扩展提供(`registerOpener`,内置的 @celljs/ta-workspace 负责文件、目录和内置浏览器)。安全上照 VS Code 的做法:只认 http(s)、mailto 和路径,`javascript:`、`data:`、`command:` 等其他协议一律当普通文本;渲染结果是 React 元素而不是 HTML;路径先经服务端确认存在,读写仍受执行环境约束;在系统浏览器打开前会弹窗显示完整地址并突出域名(外观相近的域名按浏览器的 punycode 显示),可复制、打开或信任该域名,本机地址(localhost、127.0.0.1、ta serve 所在主机)和 **设置 → 链接 → 受信任的域名**(`github.com`、`*.github.com`、`localhost:3000`、`*`)里的不再询问;新窗口一律 `noopener,noreferrer`。内置浏览器里,与 Ta 页面同源的地址不给 `allow-same-origin`,碰不到页面和 token。
|
|
41
|
-
- **账号菜单**:导航栏底部的圆形头像(`AccountMenu
|
|
41
|
+
- **账号菜单**:导航栏底部的圆形头像(`AccountMenu`),是 ta serve 所在电脑的用户名首字母(`TaServerInfo.user`),断开时右下角出现黄点;菜单里是用户名与电脑名(`host`)、Ta 服务的连接状态与版本、安装为应用(浏览器支持时)和退出登录。
|
|
42
42
|
|
|
43
43
|
### 设置
|
|
44
44
|
|
|
45
|
-
头像上方的齿轮(`ManageMenu`)是两层菜单:设置(⌘/Ctrl
|
|
45
|
+
头像上方的齿轮(`ManageMenu`)是两层菜单:设置(⌘/Ctrl+,)、扩展、键盘快捷方式;模型账号…、打开工作目录…、在手机上使用…;主题和语言在右侧展开第二层,最后是关于 Ta。设置是主区域的一个视图(`SettingsView`,打开时占用对话和工作台的位置,Esc 或 × 关闭),左侧是两层目录(界面 / Ta / 更多,下面是各分组,滚动时跟随高亮),右侧是分组卡片,顶部搜索按每一行的名称和说明过滤:
|
|
46
46
|
|
|
47
47
|
- **界面**:主题、减少动效、界面语言、朗读回复;存在服务器上的用户数据里(`TaSettings`),换浏览器、换设备都一样。
|
|
48
|
-
- **
|
|
49
|
-
-
|
|
48
|
+
- **Ta**:Ta 本身的设置,读写 pi 的 `settings.json`(服务端 `getSettings` / `updateSettings`,可改的键见 ta-protocol 的 `TA_SETTINGS`):默认模型、思考强度、传输方式、引导与排队消息的送达方式、自动压缩与重试、代码模式、技能命令、Shell 与命令前缀、图片。顶部切换**用户**(agent 目录,对所有项目生效)和**项目**(当前对话目录下的 `.ta/settings.json`,覆盖用户设置);没设置的项显示继承来的值("默认(…)"或"沿用用户设置(…)"),在当前层设置过的项左侧有蓝条,悬停出现重置。项目未被信任时只读并说明原因。
|
|
49
|
+
- **更多**:扩展、内置扩展、键盘快捷方式、关于(版本、工作目录、模型账号、手机访问、退出登录)。
|
|
50
|
+
|
|
51
|
+
### 登录模型服务、工作目录与手机
|
|
52
|
+
|
|
53
|
+
- **模型账号**:和终端里 pi 的 `/login` 一样,可以用账号(OAuth,Claude、ChatGPT 这类订阅)或 API Key 登录模型服务。登录在 ta serve 上进行(`TaAuthServer`):要打开的登录页、设备码、要填的 Key 只发给发起登录的页面;凭据存在 ta serve 所在电脑的 `auth.json`,不回到浏览器。没有可用的模型时(`CELL_TA_NOT_SIGNED_IN`),页面直接打开登录页,而不是显示 pi 关于 `/login` 的提示;桌面应用第一次启动时也一样。
|
|
54
|
+
- **工作目录**:没指定目录时,新对话和分身在 ta serve 的工作目录里打开。"打开工作目录…"(`TaServer.setWorkingDirectory`)对所有客户端生效,跨重启保留;已经打开的对话不动。
|
|
55
|
+
- **在手机上使用**:经 Relay 配对一台设备([@celljs/ta-relay](../ta-relay/README.md)),配对链接显示成二维码(`util/qr-code.ts` 自己画,没有依赖),只显示一次;下面列出已配对的设备和 ta serve 是否连着 Relay,可以取消配对。默认 Relay 是 `https://relay.cellbang.com`。
|
|
50
56
|
|
|
51
57
|
## 结构
|
|
52
58
|
|
|
@@ -5,6 +5,8 @@ export declare const TaChat: unique symbol;
|
|
|
5
5
|
export interface ChatDraft {
|
|
6
6
|
/** Where it will work. */
|
|
7
7
|
cwd: string;
|
|
8
|
+
/** `<provider>/<model id>` it will start on; none: the default model of the settings. */
|
|
9
|
+
model?: string;
|
|
8
10
|
}
|
|
9
11
|
export interface ChatState {
|
|
10
12
|
/** The conversation shown, once there is one. */
|
|
@@ -30,6 +32,8 @@ export interface TaChat {
|
|
|
30
32
|
draft(): Promise<void>;
|
|
31
33
|
/** Moves the new conversation to another directory; the next new ones start there too. */
|
|
32
34
|
setDraftCwd(cwd: string): void;
|
|
35
|
+
/** The model the new conversation starts on; none: the default one. */
|
|
36
|
+
setDraftModel(model: string | undefined): void;
|
|
33
37
|
/** Opens the session of the new conversation and sends its first message; fails as the opening fails. */
|
|
34
38
|
submit(message: string, images?: ImageContent[]): Promise<void>;
|
|
35
39
|
show(sessionId: string): Promise<void>;
|
|
@@ -14,6 +14,7 @@ import { useNotices, useWorkbench } from '../hooks.js';
|
|
|
14
14
|
import { useT } from '../i18n/use-t.js';
|
|
15
15
|
import { MessageUtil } from '../util/message.js';
|
|
16
16
|
import { TaChat } from './chat-protocol.js';
|
|
17
|
+
import { useDraftModel } from './draft-model.js';
|
|
17
18
|
const SUGGESTIONS = [
|
|
18
19
|
{ picture: 'card', label: 'ta.chat.suggest.1.label', text: 'ta.chat.suggest.1' },
|
|
19
20
|
{ picture: 'page', label: 'ta.chat.suggest.2.label', text: 'ta.chat.suggest.2' },
|
|
@@ -47,6 +48,8 @@ function DraftView({ draft, menu, aboveComposer, belowComposer }) {
|
|
|
47
48
|
const fail = (cause) => notices.error(cause);
|
|
48
49
|
const submit = (message, images) => chat.submit(message, images);
|
|
49
50
|
const list = React.useCallback((directory) => workbench.workspace.listDirectory('.', directory), [workbench]);
|
|
51
|
+
const pickModel = React.useCallback((model) => chat.setDraftModel(model), [chat]);
|
|
52
|
+
const model = useDraftModel(workbench.settings, draft, pickModel, t);
|
|
50
53
|
return (React.createElement("section", { className: "ta-session" },
|
|
51
54
|
React.createElement("header", { className: "ta-session-header" },
|
|
52
55
|
menu,
|
|
@@ -58,7 +61,7 @@ function DraftView({ draft, menu, aboveComposer, belowComposer }) {
|
|
|
58
61
|
React.createElement(Hero, { cwd: draft.cwd, onPick: text => void submit(text).catch(fail) }))),
|
|
59
62
|
React.createElement("div", { className: "ta-bottom" },
|
|
60
63
|
aboveComposer,
|
|
61
|
-
React.createElement(Composer, { server: workbench.server, workspace: workbench.workspace, working: false, commands: [], cwd: draft.cwd || undefined, onSubmit: submit, onError: fail, beside: React.createElement(DirectoryButton, { cwd: draft.cwd, list: list, onPick: cwd => chat.setDraftCwd(cwd) }) }),
|
|
64
|
+
React.createElement(Composer, { server: workbench.server, workspace: workbench.workspace, working: false, commands: [], cwd: draft.cwd || undefined, onSubmit: submit, onError: fail, actions: model ? [[model]] : undefined, beside: React.createElement(DirectoryButton, { cwd: draft.cwd, list: list, remote: workbench, onPick: cwd => chat.setDraftCwd(cwd) }) }),
|
|
62
65
|
belowComposer)));
|
|
63
66
|
}
|
|
64
67
|
/** The conversation shown, with the widgets of web extensions around its message box. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-view.js","sourceRoot":"","sources":["../../../src/browser/chat/chat-view.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAuB,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAuB,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAkC,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-view.js","sourceRoot":"","sources":["../../../src/browser/chat/chat-view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -28,11 +28,14 @@ export declare class TaChatImpl implements TaChat {
|
|
|
28
28
|
protected watching: boolean;
|
|
29
29
|
/** A web extension changed packages during a run: its end loads them again. */
|
|
30
30
|
protected reloadPending: boolean;
|
|
31
|
+
/** The conversation asked for last: of quick switches, only the last is shown. */
|
|
32
|
+
protected wanted?: string;
|
|
31
33
|
get state(): ChatState;
|
|
32
34
|
subscribe(listener: (state: ChatState) => void): () => void;
|
|
33
35
|
start(): Promise<void>;
|
|
34
36
|
draft(): Promise<void>;
|
|
35
37
|
setDraftCwd(cwd: string): void;
|
|
38
|
+
setDraftModel(model: string | undefined): void;
|
|
36
39
|
submit(message: string, images?: ImageContent[]): Promise<void>;
|
|
37
40
|
show(sessionId: string): Promise<void>;
|
|
38
41
|
openBeside(options: {
|
|
@@ -44,6 +47,7 @@ export declare class TaChatImpl implements TaChat {
|
|
|
44
47
|
/** Opens a session with the tools of the web extensions of now. */
|
|
45
48
|
protected open(options: Partial<TaOpenSessionOptions>): Promise<string>;
|
|
46
49
|
/** Follows a session, running the web tools it asks for. */
|
|
50
|
+
/** The conversation shown stays until the next one is loaded, so that switching does not flash an empty page. */
|
|
47
51
|
protected attach(sessionId: string): Promise<void>;
|
|
48
52
|
/** The newest other open session, or a new conversation. */
|
|
49
53
|
protected replace(): Promise<void>;
|
|
@@ -64,6 +68,9 @@ export declare class TaChatImpl implements TaChat {
|
|
|
64
68
|
protected loadPackages(store: SessionStore, changed: boolean): Promise<void>;
|
|
65
69
|
/** The same conversation, from its file, with the tools of now. */
|
|
66
70
|
protected reopen(store: SessionStore): Promise<void>;
|
|
67
|
-
protected remember(
|
|
71
|
+
protected remember(info: {
|
|
72
|
+
sessionFile?: string;
|
|
73
|
+
group?: string;
|
|
74
|
+
} | undefined): void;
|
|
68
75
|
protected update(change: Partial<ChatState>): void;
|
|
69
76
|
}
|
package/esm/browser/chat/chat.js
CHANGED
|
@@ -15,8 +15,12 @@ import { TaWorkbench } from '../workbench-protocol.js';
|
|
|
15
15
|
import { TaChat } from './chat-protocol.js';
|
|
16
16
|
/** The file of the conversation shown last, in any browser: the page opens it again. */
|
|
17
17
|
const FILE = { key: 'chat.file', tier: 'user', initial: '', parse: StateUtil.string };
|
|
18
|
+
/** That conversation is of a package's group: the page shows it again only while it is open, as its package opens it with a role of its own. */
|
|
19
|
+
const GROUPED = { key: 'chat.grouped', tier: 'user', initial: false, parse: StateUtil.boolean };
|
|
18
20
|
/** The directory of the last new conversation. */
|
|
19
21
|
const CWD = { key: 'chat.cwd', tier: 'user', initial: '', parse: StateUtil.string };
|
|
22
|
+
/** The model the user picked for the last new conversation. */
|
|
23
|
+
const MODEL = { key: 'chat.model', tier: 'user', initial: '', parse: StateUtil.string };
|
|
20
24
|
/** A file in a directory of packages: `extensions/<name>/...`, of the user or a project. */
|
|
21
25
|
const PACKAGE_FILE = /(^|[\\/])extensions[\\/][^\\/]+[\\/]/;
|
|
22
26
|
export var ChatUtil;
|
|
@@ -79,7 +83,8 @@ let TaChatImpl = class TaChatImpl {
|
|
|
79
83
|
await this.workbench.refresh();
|
|
80
84
|
const file = (await this.persisted.load(FILE)) || undefined;
|
|
81
85
|
const open = file && this.workbench.state.sessions.find(session => session.sessionFile === file);
|
|
82
|
-
const
|
|
86
|
+
const reopen = file && !(await this.persisted.load(GROUPED));
|
|
87
|
+
const sessionId = open ? open.sessionId : reopen ? await this.open({ sessionFile: file }).catch(() => undefined) : undefined;
|
|
83
88
|
if (sessionId) {
|
|
84
89
|
await this.attach(sessionId);
|
|
85
90
|
}
|
|
@@ -99,10 +104,16 @@ let TaChatImpl = class TaChatImpl {
|
|
|
99
104
|
setDraftCwd(cwd) {
|
|
100
105
|
if (this.current.draft) {
|
|
101
106
|
this.persisted.set(CWD, cwd);
|
|
102
|
-
this.update({ draft: { cwd } });
|
|
107
|
+
this.update({ draft: { ...this.current.draft, cwd } });
|
|
103
108
|
this.extensions.connect({ cwd });
|
|
104
109
|
}
|
|
105
110
|
}
|
|
111
|
+
setDraftModel(model) {
|
|
112
|
+
if (this.current.draft && this.current.draft.model !== model) {
|
|
113
|
+
this.persisted.set(MODEL, model !== null && model !== void 0 ? model : '');
|
|
114
|
+
this.update({ draft: { ...this.current.draft, model } });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
106
117
|
submit(message, images) {
|
|
107
118
|
const next = this.queue.then(async () => {
|
|
108
119
|
var _a;
|
|
@@ -110,7 +121,7 @@ let TaChatImpl = class TaChatImpl {
|
|
|
110
121
|
if (!draft) {
|
|
111
122
|
return;
|
|
112
123
|
}
|
|
113
|
-
const sessionId = await this.open({ cwd: draft.cwd });
|
|
124
|
+
const sessionId = await this.open({ cwd: draft.cwd, model: draft.model });
|
|
114
125
|
if (draft.cwd) {
|
|
115
126
|
this.persisted.set(CWD, draft.cwd);
|
|
116
127
|
}
|
|
@@ -121,9 +132,10 @@ let TaChatImpl = class TaChatImpl {
|
|
|
121
132
|
return next;
|
|
122
133
|
}
|
|
123
134
|
show(sessionId) {
|
|
135
|
+
this.wanted = sessionId;
|
|
124
136
|
return this.enqueue(async () => {
|
|
125
137
|
var _a;
|
|
126
|
-
if (((_a = this.current.store) === null || _a === void 0 ? void 0 : _a.sessionId) !== sessionId) {
|
|
138
|
+
if (this.wanted === sessionId && ((_a = this.current.store) === null || _a === void 0 ? void 0 : _a.sessionId) !== sessionId) {
|
|
127
139
|
await this.attach(sessionId);
|
|
128
140
|
}
|
|
129
141
|
});
|
|
@@ -169,19 +181,25 @@ let TaChatImpl = class TaChatImpl {
|
|
|
169
181
|
return sessionId;
|
|
170
182
|
}
|
|
171
183
|
/** Follows a session, running the web tools it asks for. */
|
|
184
|
+
/** The conversation shown stays until the next one is loaded, so that switching does not flash an empty page. */
|
|
172
185
|
async attach(sessionId) {
|
|
173
|
-
var _a;
|
|
174
|
-
this.leave();
|
|
175
186
|
const store = this.workbench.createStore(sessionId, { clientTools: this.extensions.state.tools.map(tool => this.clientTool(tool.name)) });
|
|
176
|
-
|
|
187
|
+
try {
|
|
188
|
+
await store.attach();
|
|
189
|
+
// The list has the sessions opened since, as those of agents: web extensions get the directory of this one.
|
|
190
|
+
await this.workbench.refresh();
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
store.detach().catch(() => undefined);
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
this.leave();
|
|
177
197
|
this.seenEdits.clear();
|
|
178
198
|
for (const id of Object.keys(store.state.tools)) {
|
|
179
199
|
this.seenEdits.add(id);
|
|
180
200
|
}
|
|
181
|
-
// The list has the sessions opened since, as those of agents: web extensions get the directory of this one.
|
|
182
|
-
await this.workbench.refresh();
|
|
183
201
|
this.follow(store);
|
|
184
|
-
this.remember(
|
|
202
|
+
this.remember(this.workbench.state.sessions.find(session => session.sessionId === sessionId));
|
|
185
203
|
}
|
|
186
204
|
/** The newest other open session, or a new conversation. */
|
|
187
205
|
async replace() {
|
|
@@ -198,7 +216,7 @@ let TaChatImpl = class TaChatImpl {
|
|
|
198
216
|
showDraft() {
|
|
199
217
|
var _a;
|
|
200
218
|
const cwd = this.persisted.get(CWD) || ((_a = this.workbench.state.server) === null || _a === void 0 ? void 0 : _a.cwd) || '';
|
|
201
|
-
this.update({ draft: { cwd }, error: undefined });
|
|
219
|
+
this.update({ draft: { cwd, model: this.persisted.get(MODEL) || undefined }, error: undefined });
|
|
202
220
|
this.extensions.connect(cwd ? { cwd } : undefined);
|
|
203
221
|
}
|
|
204
222
|
/** Runs the web tool of the name that is loaded when the model calls it: a changed one runs as it is now. */
|
|
@@ -252,7 +270,7 @@ let TaChatImpl = class TaChatImpl {
|
|
|
252
270
|
}
|
|
253
271
|
onEvent(event) {
|
|
254
272
|
if (event.type === 'session_replaced') {
|
|
255
|
-
this.remember(event.info
|
|
273
|
+
this.remember(event.info);
|
|
256
274
|
}
|
|
257
275
|
this.extensions.emit(event);
|
|
258
276
|
}
|
|
@@ -308,9 +326,10 @@ let TaChatImpl = class TaChatImpl {
|
|
|
308
326
|
this.opened.delete(store.sessionId);
|
|
309
327
|
await this.attach(await this.open({ sessionFile, cwd }));
|
|
310
328
|
}
|
|
311
|
-
remember(
|
|
312
|
-
if (sessionFile) {
|
|
313
|
-
this.persisted.set(FILE, sessionFile);
|
|
329
|
+
remember(info) {
|
|
330
|
+
if (info === null || info === void 0 ? void 0 : info.sessionFile) {
|
|
331
|
+
this.persisted.set(FILE, info.sessionFile);
|
|
332
|
+
this.persisted.set(GROUPED, !!info.group);
|
|
314
333
|
}
|
|
315
334
|
}
|
|
316
335
|
update(change) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/browser/chat/chat.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/browser/chat/chat.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAkB,SAAS,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAkB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzD,wFAAwF;AACxF,MAAM,IAAI,GAAsB,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;AACzG,gJAAgJ;AAChJ,MAAM,OAAO,GAAuB,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;AACpH,kDAAkD;AAClD,MAAM,GAAG,GAAsB,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;AACvG,+DAA+D;AAC/D,MAAM,KAAK,GAAsB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;AAC3G,4FAA4F;AAC5F,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAE5D,MAAM,KAAW,QAAQ,CAqBxB;AArBD,WAAiB,QAAQ;IACrB,SAAgB,SAAS,CAAC,KAAgB;QACtC,OAAO,KAAK;aACP,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;aACtB,IAAI,EAAE;aACN,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IALe,SAAA,SAAS,YAKxB,CAAA;IAED,+FAA+F;IAC/F,SAAgB,YAAY,CAAC,KAAmB,EAAE,IAAiB;QAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;;YAClB,MAAM,IAAI,GAAG,MAAC,GAAG,CAAC,IAAuC,0CAAE,IAAI,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzI,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAPe,SAAA,YAAY,eAO3B,CAAA;IAED,SAAgB,OAAO,CAAC,KAAc;QAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAFe,SAAA,OAAO,UAEtB,CAAA;AACL,CAAC,EArBgB,QAAQ,KAAR,QAAQ,QAqBxB;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAU;IAAhB;QAYO,YAAO,GAAc,EAAE,CAAC;QACf,cAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;QACrE,sDAAsD;QAC5C,UAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QACnD,sHAAsH;QACnG,WAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACnC,cAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,aAAQ,GAAmB,EAAE,CAAC;QAC9B,aAAQ,GAAG,KAAK,CAAC;QAC3B,+EAA+E;QACrE,kBAAa,GAAG,KAAK,CAAC;IAiSpC,CAAC;IA7RG,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,QAAoC;QAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,yDAAyD;gBACzD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3G,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3C,OAAO;YACX,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;YAC5D,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;YACjG,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7H,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,GAAW;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,KAAyB;QACnC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,MAAuB;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;;YACpC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,OAAO;YACX,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1E,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,OAAM,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,0CAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,SAAiB;QAClB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;;YAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,0CAAE,SAAS,MAAK,SAAS,EAAE,CAAC;gBAC3E,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAA8C;QAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1I,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,0CAAE,SAAS,MAAK,SAAS,EAAE,CAAC;gBAC9C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACnC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAES,OAAO,CAAC,MAA2B;QACzC,8FAA8F;QAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;aAClB,IAAI,CAAC,MAAM,CAAC;aACZ,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mEAAmE;IACzD,KAAK,CAAC,IAAI,CAAC,OAAsC;;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;YAC1D,GAAG,OAAO;YACV,GAAG,EAAE,CAAA,MAAA,OAAO,CAAC,GAAG,0CAAE,IAAI,EAAE,MAAI,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,0CAAE,GAAG,CAAA,IAAI,GAAG;YACnE,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;SACrG,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,4DAA4D;IAC5D,iHAAiH;IACvG,KAAK,CAAC,MAAM,CAAC,SAAiB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1I,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,4GAA4G;YAC5G,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,4DAA4D;IAClD,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7C,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAES,SAAS;;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAI,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,0CAAE,GAAG,CAAA,IAAI,EAAE,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,6GAA6G;IACnG,UAAU,CAAC,IAAY;;QAC7B,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1F,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,SAAG,IAAI,EAAE,mCAAI,EAAE,CAAC;QAC3D,OAAO;YACH,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE;YAC7C,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC1B,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,uBAAuB,CAAC,CAAC;gBAClF,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAA4B,CAAC,CAAC;YACjF,CAAC;SACJ,CAAC;IACN,CAAC;IAES,MAAM,CAAC,KAAmB;;QAChC,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG;YACZ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBACpB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACf,4BAA4B;oBAC5B,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACjG,CAAC;qBAAM,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC;YACF,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC9C,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACzF,GAAG,EAAE,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,0CAAE,GAAG;YAC9F,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAES,KAAK;;QACX,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,IAAI,EAAE,CAAC;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,0CAAE,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC;IAES,OAAO,CAAC,KAAc;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACO,OAAO,CAAC,KAAmB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACjE,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtD,OAAO;YACX,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;YACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uHAAuH;IAC7G,cAAc,CAAC,KAAmB;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC/B,OAAO;YACX,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,OAAO;YACX,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,KAAmB,EAAE,OAAgB;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAED,mEAAmE;IACzD,KAAK,CAAC,MAAM,CAAC,KAAmB;;QACtC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,GAAG,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,0CAAE,GAAG,CAAC;QACtG,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAES,QAAQ,CAAC,IAA0D;QACzE,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAES,MAAM,CAAC,MAA0B;QACvC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;QAC9C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;CACJ,CAAA;AArTsB;IADlB,SAAS,CAAC,WAAW,CAAC;;6CACmB;AAGvB;IADlB,SAAS,CAAC,eAAe,CAAC;;8CACoB;AAG5B;IADlB,SAAS,CAAC,SAAS,CAAC;;2CACiB;AAEnB;IADlB,SAAS,CAAC,OAAO,CAAC;;6CACmB;AAV7B,UAAU;IADtB,SAAS,CAAC,MAAM,CAAC;GACL,UAAU,CAuTtB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TaSettingsServer, TaSettingsSnapshot } from '@celljs/ta-protocol';
|
|
2
|
+
import type { ComposerAction } from '../components/composer-box.js';
|
|
3
|
+
import type { Translate } from '../i18n/use-t.js';
|
|
4
|
+
import type { ChatDraft } from './chat-protocol.js';
|
|
5
|
+
export declare namespace DraftModelUtil {
|
|
6
|
+
/** The model the settings start a conversation in `snapshot`'s directory on: the project's, else the user's. */
|
|
7
|
+
function settingsModel(snapshot: TaSettingsSnapshot): string | undefined;
|
|
8
|
+
/** The model entry of the + of a new conversation: the models with credentials, the picked one checked. */
|
|
9
|
+
function action(snapshot: TaSettingsSnapshot, picked: string | undefined, pick: (model: string) => void, t: Translate): ComposerAction;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The model of a new conversation in its + menu: the models of the settings of its directory, those
|
|
13
|
+
* of pi packages included. A model picked before that is gone is forgotten.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useDraftModel(settings: TaSettingsServer, draft: ChatDraft, pick: (model: string | undefined) => void, t: Translate): ComposerAction | undefined;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Box } from 'lucide-react';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Icon } from '../components/icon.js';
|
|
4
|
+
export var DraftModelUtil;
|
|
5
|
+
(function (DraftModelUtil) {
|
|
6
|
+
/** The model the settings start a conversation in `snapshot`'s directory on: the project's, else the user's. */
|
|
7
|
+
function settingsModel(snapshot) {
|
|
8
|
+
var _a;
|
|
9
|
+
const model = (_a = snapshot.project.model) !== null && _a !== void 0 ? _a : snapshot.user.model;
|
|
10
|
+
return typeof model === 'string' && model ? model : undefined;
|
|
11
|
+
}
|
|
12
|
+
DraftModelUtil.settingsModel = settingsModel;
|
|
13
|
+
/** The model entry of the + of a new conversation: the models with credentials, the picked one checked. */
|
|
14
|
+
function action(snapshot, picked, pick, t) {
|
|
15
|
+
const current = picked !== null && picked !== void 0 ? picked : settingsModel(snapshot);
|
|
16
|
+
const name = (ref) => { var _a; var _b; return (_b = (_a = snapshot.modelNames) === null || _a === void 0 ? void 0 : _a[ref]) !== null && _b !== void 0 ? _b : ref.slice(ref.indexOf('/') + 1); };
|
|
17
|
+
return {
|
|
18
|
+
key: 'model',
|
|
19
|
+
label: t('ta.session.model'),
|
|
20
|
+
icon: React.createElement(Icon, { icon: Box, size: 16 }),
|
|
21
|
+
detail: current ? name(current) : t('ta.session.noModel'),
|
|
22
|
+
items: snapshot.models.map(ref => ({
|
|
23
|
+
key: ref,
|
|
24
|
+
label: name(ref),
|
|
25
|
+
detail: ref.slice(0, ref.indexOf('/')),
|
|
26
|
+
checked: ref === current,
|
|
27
|
+
run: () => pick(ref),
|
|
28
|
+
})),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
DraftModelUtil.action = action;
|
|
32
|
+
})(DraftModelUtil || (DraftModelUtil = {}));
|
|
33
|
+
/**
|
|
34
|
+
* The model of a new conversation in its + menu: the models of the settings of its directory, those
|
|
35
|
+
* of pi packages included. A model picked before that is gone is forgotten.
|
|
36
|
+
*/
|
|
37
|
+
export function useDraftModel(settings, draft, pick, t) {
|
|
38
|
+
const [snapshot, setSnapshot] = React.useState();
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
let live = true;
|
|
41
|
+
settings.getSettings(draft.cwd || undefined).then(next => live && setSnapshot(next), () => undefined);
|
|
42
|
+
return () => {
|
|
43
|
+
live = false;
|
|
44
|
+
};
|
|
45
|
+
}, [settings, draft.cwd]);
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
if (snapshot && draft.model && !snapshot.models.includes(draft.model)) {
|
|
48
|
+
pick(undefined);
|
|
49
|
+
}
|
|
50
|
+
}, [snapshot, draft.model, pick]);
|
|
51
|
+
return (snapshot === null || snapshot === void 0 ? void 0 : snapshot.models.length) ? DraftModelUtil.action(snapshot, draft.model, pick, t) : undefined;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=draft-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-model.js","sourceRoot":"","sources":["../../../src/browser/chat/draft-model.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@ import * as React from 'react';
|
|
|
2
2
|
/** Closes on Escape and on a click outside; the focus goes back to the button. */
|
|
3
3
|
export declare function useDismiss(open: boolean, close: () => void, root: React.RefObject<HTMLElement | null>, button: React.RefObject<HTMLElement | null>): void;
|
|
4
4
|
/**
|
|
5
|
-
* The account at the foot of the navigation:
|
|
6
|
-
*
|
|
5
|
+
* The account at the foot of the navigation: the user and the machine whose Ta this page is signed in
|
|
6
|
+
* to, and whether the page is connected to it (a dot on the figure while it is not). How the page looks
|
|
7
|
+
* is under the gear above it.
|
|
7
8
|
*/
|
|
8
9
|
export declare function AccountMenu(): React.JSX.Element;
|