@tianshu-ai/tianshu 0.43.6 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -1
- package/node_modules/@tianshu-ai/plugin-sdk/dist/manifest.d.ts +43 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/manifest.d.ts.map +1 -1
- package/node_modules/@tianshu-ai/plugin-sdk/package.json +1 -1
- package/node_modules/@tianshu-ai/plugin-sdk/src/manifest.ts +44 -0
- package/package.json +4 -4
- package/packages/plugin-sdk/dist/manifest.d.ts +43 -0
- package/packages/plugin-sdk/dist/manifest.d.ts.map +1 -1
- package/packages/plugin-sdk/package.json +1 -1
- package/packages/server/builtinConfig/plugins/custom-ui/dist/client.js +310 -0
- package/packages/server/builtinConfig/plugins/custom-ui/dist/index.html +54 -0
- package/packages/server/builtinConfig/plugins/custom-ui/dist/server.js +176 -0
- package/packages/server/builtinConfig/plugins/custom-ui/locales/en.json +30 -0
- package/packages/server/builtinConfig/plugins/custom-ui/locales/zh.json +30 -0
- package/packages/server/builtinConfig/plugins/custom-ui/manifest.json +93 -0
- package/packages/server/builtinConfig/plugins/custom-ui/skills/api-reference.md +441 -0
- package/packages/server/builtinConfig/plugins/custom-ui/skills/shell-dev.md +243 -0
- package/packages/server/builtinConfig/plugins/custom-ui/skills/ws-protocol.md +244 -0
- package/packages/server/builtinConfig/plugins/datasource/locales/en.json +6 -0
- package/packages/server/builtinConfig/plugins/datasource/locales/zh.json +6 -0
- package/packages/server/dist/boot/asr-admin.d.ts +9 -0
- package/packages/server/dist/boot/asr-admin.d.ts.map +1 -0
- package/packages/server/dist/boot/asr-admin.js +207 -0
- package/packages/server/dist/boot/asr-admin.js.map +1 -0
- package/packages/server/dist/boot/asr.d.ts +13 -0
- package/packages/server/dist/boot/asr.d.ts.map +1 -0
- package/packages/server/dist/boot/asr.js +198 -0
- package/packages/server/dist/boot/asr.js.map +1 -0
- package/packages/server/dist/boot/routes-core.d.ts.map +1 -1
- package/packages/server/dist/boot/routes-core.js.map +1 -1
- package/packages/server/dist/boot/shell-spa.d.ts +12 -0
- package/packages/server/dist/boot/shell-spa.d.ts.map +1 -0
- package/packages/server/dist/boot/shell-spa.js +164 -0
- package/packages/server/dist/boot/shell-spa.js.map +1 -0
- package/packages/server/dist/chat/handler.d.ts.map +1 -1
- package/packages/server/dist/chat/handler.js +7 -1
- package/packages/server/dist/chat/handler.js.map +1 -1
- package/packages/server/dist/chat/messages.d.ts +5 -0
- package/packages/server/dist/chat/messages.d.ts.map +1 -1
- package/packages/server/dist/chat/messages.js +11 -0
- package/packages/server/dist/chat/messages.js.map +1 -1
- package/packages/server/dist/chat/ws-protocol.d.ts +6 -0
- package/packages/server/dist/chat/ws-protocol.d.ts.map +1 -1
- package/packages/server/dist/chat/ws-protocol.js.map +1 -1
- package/packages/server/dist/core/plugins/manifest.d.ts.map +1 -1
- package/packages/server/dist/core/plugins/manifest.js +30 -0
- package/packages/server/dist/core/plugins/manifest.js.map +1 -1
- package/packages/server/dist/core/plugins/registry.d.ts +6 -0
- package/packages/server/dist/core/plugins/registry.d.ts.map +1 -1
- package/packages/server/dist/core/plugins/registry.js +13 -0
- package/packages/server/dist/core/plugins/registry.js.map +1 -1
- package/packages/server/dist/index.js +50 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/setup/checks/providers.d.ts.map +1 -1
- package/packages/server/dist/setup/checks/providers.js +28 -0
- package/packages/server/dist/setup/checks/providers.js.map +1 -1
- package/packages/server/dist/setup/checks/runtime.d.ts.map +1 -1
- package/packages/server/dist/setup/checks/runtime.js +18 -0
- package/packages/server/dist/setup/checks/runtime.js.map +1 -1
- package/packages/server/dist/setup/cli-agent.d.ts.map +1 -1
- package/packages/server/dist/setup/cli-agent.js +105 -0
- package/packages/server/dist/setup/cli-agent.js.map +1 -1
- package/packages/server/dist/setup/doctor.d.ts.map +1 -1
- package/packages/server/dist/setup/doctor.js +40 -5
- package/packages/server/dist/setup/doctor.js.map +1 -1
- package/packages/server/package.json +5 -4
- package/packages/web/dist/assets/{DataSourceConfigForm-CnZzI0HE.js → DataSourceConfigForm-C-lie1Ai.js} +1 -1
- package/packages/web/dist/assets/{bundle-web-DJLM-BCY.js → bundle-web-BRIxvUoT.js} +1 -1
- package/packages/web/dist/assets/index-COZHSDNW.css +2 -0
- package/packages/web/dist/assets/index-DpyTrcwj.js +165 -0
- package/packages/web/dist/assets/{react-force-graph-2d-IeiQuRd-.js → react-force-graph-2d-DRTEio1a.js} +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/package.json +2 -2
- package/plugins/board/dist/client.d.ts.map +1 -1
- package/plugins/board/dist/client.js +15 -3
- package/plugins/board/dist/client.js.map +1 -1
- package/plugins/board/package.json +1 -1
- package/plugins/cron/package.json +1 -1
- package/plugins/custom-ui/dist/client.js +310 -0
- package/plugins/custom-ui/dist/index.html +54 -0
- package/plugins/custom-ui/dist/server.js +176 -0
- package/plugins/custom-ui/manifest.json +93 -0
- package/plugins/custom-ui/skills/api-reference.md +441 -0
- package/plugins/custom-ui/skills/shell-dev.md +243 -0
- package/plugins/custom-ui/skills/ws-protocol.md +244 -0
- package/plugins/files/package.json +1 -1
- package/plugins/microsandbox/dist/server.js +7 -2
- package/plugins/microsandbox/dist/server.js.map +1 -1
- package/plugins/microsandbox/package.json +1 -1
- package/plugins/openshell/package.json +1 -1
- package/plugins/reverse-mcp/package.json +1 -1
- package/plugins/web-search/package.json +1 -1
- package/plugins/wechat/package.json +1 -1
- package/plugins/wiki/package.json +1 -1
- package/plugins/workboard/package.json +1 -1
- package/plugins/workforce-studio/package.json +1 -1
- package/packages/web/dist/assets/index-BLKQnm43.css +0 -2
- package/packages/web/dist/assets/index-izYY6ern.js +0 -114
package/README.md
CHANGED
|
@@ -271,6 +271,11 @@ channels. Tianshu ships these built-in:
|
|
|
271
271
|
| **Workboard** | The Kanban task board + worker pool. The orchestrator drops tasks onto Ready; workers pick them up, run them (with a live transcript), and report back through In-progress → Done. Supports task dependency graphs and per-worker config. |
|
|
272
272
|
| **Workforce Studio** | Inspect, edit, diff, export/import, and **activate** your whole agent configuration (main agent + every worker + the enabled plugin set + prompt blocks) as a single versionable **Solution**, in a three-pane IDE. |
|
|
273
273
|
| **Web Search** | Key-free `web_search` (hosted Exa / Parallel endpoint, no API key) plus a `web_fetch` tool that reads any page to markdown. |
|
|
274
|
+
| **Data Sources** | Connect agents to databases — Neo4j graph, MySQL, and more. Agent tools (`ds_query`, `ds_schema`, `ds_panel`) plus a side-panel query explorer with resizable columns, sort, and filter. Board apps get `board.ds()` / `board.dsList()` for live database queries inside dashboards. |
|
|
275
|
+
| **Boards** | Interactive HTML dashboards the agent builds and drops into chat or the side panel. Built-in `board.llm()` for LLM calls and `board.ds()` for database queries — no API keys needed inside board code. Fullscreen mode for data-heavy dashboards. |
|
|
276
|
+
| **Scheduler (Cron)** | Scheduled and recurring jobs with a calendar panel. Fire a message into a session or drop a task on the workboard at a set time or on a cron schedule. Timezone-aware. |
|
|
277
|
+
| **Wiki** | LLM-powered knowledge vault that distils conversations into an Obsidian-style wiki. Auto-files entities, concepts, and topics. Side-panel browse + semantic search. |
|
|
278
|
+
| **Local Bridge** | Connect tools on your own machine (browser, files, shell) into tianshu over WebSocket. No VM needed — runs on your actual machine. Scoped to your sessions. |
|
|
274
279
|
| **WeChat (微信)** | A chat channel backed by Tencent's iLink bot API — scan a QR code to authorise, then inbound DMs route to the agent through the channel system. |
|
|
275
280
|
|
|
276
281
|
Manage them under **Settings → Plugins** (enable/disable + per-plugin
|
|
@@ -473,13 +478,23 @@ the full picture.
|
|
|
473
478
|
- [x] Rate-limit-aware model retries + client auto-reconnect / resume
|
|
474
479
|
- [x] Key-free `web_search` + `web_fetch`
|
|
475
480
|
- [x] Worker task dependency graphs in one batch
|
|
481
|
+
- [x] **Data Sources plugin** — unified multi-database connector
|
|
482
|
+
(Neo4j + MySQL), query panel with sort/filter/resize,
|
|
483
|
+
`board.ds()` API for dashboard apps
|
|
484
|
+
- [x] **Board enhancements** — `board.llm()` + `board.ds()` APIs,
|
|
485
|
+
fullscreen mode, chat-embedded boards with API access
|
|
486
|
+
- [x] **Setup agent improvements** — full plugin catalog knowledge,
|
|
487
|
+
runtime mutual-exclusivity enforcement, `compat` field
|
|
488
|
+
guidance, cross-arch deployment flow, China network hints
|
|
489
|
+
- [x] **Doctor improvements** — `supportsDeveloperRole` compat check,
|
|
490
|
+
HOME env check, only checks enabled plugins' prerequisites
|
|
476
491
|
|
|
477
492
|
**Next (0.5.x → 0.6)**
|
|
478
493
|
|
|
479
494
|
- [ ] **Auth + roles** — login, and an authorization gate on the
|
|
480
495
|
admin/Settings surface (see the security note above)
|
|
481
496
|
- [ ] Docker image with sandbox layer baked in
|
|
482
|
-
- [
|
|
497
|
+
- [x] Linux systemd service (`tianshu-prod.service` for npm global installs)
|
|
483
498
|
- [ ] Skills marketplace (registry + install command)
|
|
484
499
|
- [ ] **Orchestrator analytics**: `worker_analytics` /
|
|
485
500
|
`worker_task_timeline` /
|
|
@@ -60,6 +60,23 @@ export interface PluginManifest {
|
|
|
60
60
|
client?: PluginEntryRef;
|
|
61
61
|
server?: PluginEntryRef;
|
|
62
62
|
contributes?: ContributesV1;
|
|
63
|
+
/**
|
|
64
|
+
* UI Shell override (ADR-0005). When present, this plugin replaces
|
|
65
|
+
* the **entire frontend** for any tenant that enables it. The
|
|
66
|
+
* server serves the plugin's built SPA instead of the default
|
|
67
|
+
* `@tianshu/web` bundle.
|
|
68
|
+
*
|
|
69
|
+
* Constraints:
|
|
70
|
+
* - At most ONE uiShell plugin may be active per tenant. Enabling
|
|
71
|
+
* a second one fails activation with a conflict error.
|
|
72
|
+
* - The shell SPA talks to the same `/api/*` and `/ws` endpoints;
|
|
73
|
+
* backend behaviour is unchanged.
|
|
74
|
+
* - `contributes` (API routes, tools, etc.) still works — a shell
|
|
75
|
+
* plugin can contribute server-side logic alongside its UI.
|
|
76
|
+
* - In dev mode, set `devServer.target` to proxy to an external
|
|
77
|
+
* vite/webpack dev server for HMR.
|
|
78
|
+
*/
|
|
79
|
+
uiShell?: PluginUiShell;
|
|
63
80
|
/**
|
|
64
81
|
* Optional declarative schema for the plugin's own config
|
|
65
82
|
* (`tenant config.plugins.<id>.config`). When present the host
|
|
@@ -110,6 +127,32 @@ export interface PluginManifest {
|
|
|
110
127
|
* it shows them to the user and waits for confirmation. The
|
|
111
128
|
* read-only `verify` commands can run silently.
|
|
112
129
|
*/
|
|
130
|
+
export interface PluginUiShell {
|
|
131
|
+
/**
|
|
132
|
+
* Directory containing the built SPA (index.html + assets),
|
|
133
|
+
* relative to the plugin directory. The server serves these
|
|
134
|
+
* files for the tenant instead of the default web dist.
|
|
135
|
+
*/
|
|
136
|
+
dist: string;
|
|
137
|
+
/**
|
|
138
|
+
* When true (default), any non-API GET request that doesn't
|
|
139
|
+
* match a static file returns index.html (standard SPA
|
|
140
|
+
* fallback). Set to false for multi-page or SSR setups where
|
|
141
|
+
* only exact file matches should be served.
|
|
142
|
+
*/
|
|
143
|
+
fallbackSpa?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Dev-mode proxy target. When set AND the plugin directory
|
|
146
|
+
* does not contain a built `dist/index.html`, the server
|
|
147
|
+
* proxies non-API requests to this URL instead of serving
|
|
148
|
+
* static files. Enables HMR with an external dev server.
|
|
149
|
+
*
|
|
150
|
+
* Only used when `process.env.NODE_ENV !== "production"`.
|
|
151
|
+
*/
|
|
152
|
+
devServer?: {
|
|
153
|
+
target: string;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
113
156
|
export interface PluginSetupSpec {
|
|
114
157
|
/**
|
|
115
158
|
* One-paragraph summary the setup agent shows before listing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,23 @@ export interface PluginManifest {
|
|
|
66
66
|
client?: PluginEntryRef;
|
|
67
67
|
server?: PluginEntryRef;
|
|
68
68
|
contributes?: ContributesV1;
|
|
69
|
+
/**
|
|
70
|
+
* UI Shell override (ADR-0005). When present, this plugin replaces
|
|
71
|
+
* the **entire frontend** for any tenant that enables it. The
|
|
72
|
+
* server serves the plugin's built SPA instead of the default
|
|
73
|
+
* `@tianshu/web` bundle.
|
|
74
|
+
*
|
|
75
|
+
* Constraints:
|
|
76
|
+
* - At most ONE uiShell plugin may be active per tenant. Enabling
|
|
77
|
+
* a second one fails activation with a conflict error.
|
|
78
|
+
* - The shell SPA talks to the same `/api/*` and `/ws` endpoints;
|
|
79
|
+
* backend behaviour is unchanged.
|
|
80
|
+
* - `contributes` (API routes, tools, etc.) still works — a shell
|
|
81
|
+
* plugin can contribute server-side logic alongside its UI.
|
|
82
|
+
* - In dev mode, set `devServer.target` to proxy to an external
|
|
83
|
+
* vite/webpack dev server for HMR.
|
|
84
|
+
*/
|
|
85
|
+
uiShell?: PluginUiShell;
|
|
69
86
|
/**
|
|
70
87
|
* Optional declarative schema for the plugin's own config
|
|
71
88
|
* (`tenant config.plugins.<id>.config`). When present the host
|
|
@@ -117,6 +134,33 @@ export interface PluginManifest {
|
|
|
117
134
|
* it shows them to the user and waits for confirmation. The
|
|
118
135
|
* read-only `verify` commands can run silently.
|
|
119
136
|
*/
|
|
137
|
+
export interface PluginUiShell {
|
|
138
|
+
/**
|
|
139
|
+
* Directory containing the built SPA (index.html + assets),
|
|
140
|
+
* relative to the plugin directory. The server serves these
|
|
141
|
+
* files for the tenant instead of the default web dist.
|
|
142
|
+
*/
|
|
143
|
+
dist: string;
|
|
144
|
+
/**
|
|
145
|
+
* When true (default), any non-API GET request that doesn't
|
|
146
|
+
* match a static file returns index.html (standard SPA
|
|
147
|
+
* fallback). Set to false for multi-page or SSR setups where
|
|
148
|
+
* only exact file matches should be served.
|
|
149
|
+
*/
|
|
150
|
+
fallbackSpa?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Dev-mode proxy target. When set AND the plugin directory
|
|
153
|
+
* does not contain a built `dist/index.html`, the server
|
|
154
|
+
* proxies non-API requests to this URL instead of serving
|
|
155
|
+
* static files. Enables HMR with an external dev server.
|
|
156
|
+
*
|
|
157
|
+
* Only used when `process.env.NODE_ENV !== "production"`.
|
|
158
|
+
*/
|
|
159
|
+
devServer?: {
|
|
160
|
+
target: string;
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
120
164
|
export interface PluginSetupSpec {
|
|
121
165
|
/**
|
|
122
166
|
* One-paragraph summary the setup agent shows before listing
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tianshu-ai/tianshu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.0",
|
|
4
4
|
"description": "An open AI agent platform with a sidecar browser. Built in public.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/tianshu-ai/tianshu",
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@clack/prompts": "^1.5.1",
|
|
69
|
-
"@earendil-works/pi-agent-core": "
|
|
70
|
-
"@earendil-works/pi-ai": "
|
|
69
|
+
"@earendil-works/pi-agent-core": "0.82.1",
|
|
70
|
+
"@earendil-works/pi-ai": "0.82.1",
|
|
71
71
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
72
72
|
"@tianshu-ai/plugin-sdk": "*",
|
|
73
|
-
"better-sqlite3": "^
|
|
73
|
+
"better-sqlite3": "^13.0.3",
|
|
74
74
|
"cors": "^2.8.5",
|
|
75
75
|
"dotenv": "^17.4.2",
|
|
76
76
|
"express": "^5.1.0",
|
|
@@ -60,6 +60,23 @@ export interface PluginManifest {
|
|
|
60
60
|
client?: PluginEntryRef;
|
|
61
61
|
server?: PluginEntryRef;
|
|
62
62
|
contributes?: ContributesV1;
|
|
63
|
+
/**
|
|
64
|
+
* UI Shell override (ADR-0005). When present, this plugin replaces
|
|
65
|
+
* the **entire frontend** for any tenant that enables it. The
|
|
66
|
+
* server serves the plugin's built SPA instead of the default
|
|
67
|
+
* `@tianshu/web` bundle.
|
|
68
|
+
*
|
|
69
|
+
* Constraints:
|
|
70
|
+
* - At most ONE uiShell plugin may be active per tenant. Enabling
|
|
71
|
+
* a second one fails activation with a conflict error.
|
|
72
|
+
* - The shell SPA talks to the same `/api/*` and `/ws` endpoints;
|
|
73
|
+
* backend behaviour is unchanged.
|
|
74
|
+
* - `contributes` (API routes, tools, etc.) still works — a shell
|
|
75
|
+
* plugin can contribute server-side logic alongside its UI.
|
|
76
|
+
* - In dev mode, set `devServer.target` to proxy to an external
|
|
77
|
+
* vite/webpack dev server for HMR.
|
|
78
|
+
*/
|
|
79
|
+
uiShell?: PluginUiShell;
|
|
63
80
|
/**
|
|
64
81
|
* Optional declarative schema for the plugin's own config
|
|
65
82
|
* (`tenant config.plugins.<id>.config`). When present the host
|
|
@@ -110,6 +127,32 @@ export interface PluginManifest {
|
|
|
110
127
|
* it shows them to the user and waits for confirmation. The
|
|
111
128
|
* read-only `verify` commands can run silently.
|
|
112
129
|
*/
|
|
130
|
+
export interface PluginUiShell {
|
|
131
|
+
/**
|
|
132
|
+
* Directory containing the built SPA (index.html + assets),
|
|
133
|
+
* relative to the plugin directory. The server serves these
|
|
134
|
+
* files for the tenant instead of the default web dist.
|
|
135
|
+
*/
|
|
136
|
+
dist: string;
|
|
137
|
+
/**
|
|
138
|
+
* When true (default), any non-API GET request that doesn't
|
|
139
|
+
* match a static file returns index.html (standard SPA
|
|
140
|
+
* fallback). Set to false for multi-page or SSR setups where
|
|
141
|
+
* only exact file matches should be served.
|
|
142
|
+
*/
|
|
143
|
+
fallbackSpa?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Dev-mode proxy target. When set AND the plugin directory
|
|
146
|
+
* does not contain a built `dist/index.html`, the server
|
|
147
|
+
* proxies non-API requests to this URL instead of serving
|
|
148
|
+
* static files. Enables HMR with an external dev server.
|
|
149
|
+
*
|
|
150
|
+
* Only used when `process.env.NODE_ENV !== "production"`.
|
|
151
|
+
*/
|
|
152
|
+
devServer?: {
|
|
153
|
+
target: string;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
113
156
|
export interface PluginSetupSpec {
|
|
114
157
|
/**
|
|
115
158
|
* One-paragraph summary the setup agent shows before listing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useCallback } from "react";
|
|
3
|
+
import { Eye, EyeOff, ExternalLink, Paintbrush, Upload, RefreshCw, FileCode, CheckCircle } from "lucide-react";
|
|
4
|
+
|
|
5
|
+
import { useChatNav, subscribeToWsEvent } from "@tianshu-ai/plugin-sdk/client";
|
|
6
|
+
|
|
7
|
+
const PLUGIN_ID = "custom-ui";
|
|
8
|
+
const API = "/api";
|
|
9
|
+
const SHELL_API = `${API}/p/${PLUGIN_ID}`;
|
|
10
|
+
|
|
11
|
+
function ShellPreviewPanel(_props) {
|
|
12
|
+
const [plugins, setPlugins] = useState(null);
|
|
13
|
+
const [shellActive, setShellActive] = useState(false);
|
|
14
|
+
const [status, setStatus] = useState(null);
|
|
15
|
+
const [loading, setLoading] = useState(true);
|
|
16
|
+
const [toggling, setToggling] = useState(false);
|
|
17
|
+
const [publishing, setPublishing] = useState(false);
|
|
18
|
+
const [publishResult, setPublishResult] = useState(null);
|
|
19
|
+
const [previewKey, setPreviewKey] = useState(0);
|
|
20
|
+
|
|
21
|
+
const loadStatus = useCallback(async () => {
|
|
22
|
+
try {
|
|
23
|
+
const [pluginsRes, statusRes] = await Promise.all([
|
|
24
|
+
fetch(`${API}/plugins`, { credentials: "include" }).then(r => r.json()),
|
|
25
|
+
fetch(`${SHELL_API}/status`, { credentials: "include" }).then(r => r.ok ? r.json() : null),
|
|
26
|
+
]);
|
|
27
|
+
const list = pluginsRes.plugins || pluginsRes;
|
|
28
|
+
setPlugins(list);
|
|
29
|
+
const shell = list.find((p) => p.id === PLUGIN_ID);
|
|
30
|
+
setShellActive(shell?.state === "active");
|
|
31
|
+
setStatus(statusRes);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
console.error("ShellPreviewPanel:", e);
|
|
34
|
+
} finally {
|
|
35
|
+
setLoading(false);
|
|
36
|
+
}
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
useEffect(() => { loadStatus(); }, [loadStatus]);
|
|
40
|
+
|
|
41
|
+
async function toggleShell() {
|
|
42
|
+
setToggling(true);
|
|
43
|
+
try {
|
|
44
|
+
await fetch(`${API}/plugins/${PLUGIN_ID}`, {
|
|
45
|
+
method: "PATCH", credentials: "include",
|
|
46
|
+
headers: { "Content-Type": "application/json" },
|
|
47
|
+
body: JSON.stringify({ enabled: !shellActive }),
|
|
48
|
+
});
|
|
49
|
+
await loadStatus();
|
|
50
|
+
} finally { setToggling(false); }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function publishShell() {
|
|
54
|
+
setPublishing(true);
|
|
55
|
+
setPublishResult(null);
|
|
56
|
+
try {
|
|
57
|
+
const res = await fetch(`${SHELL_API}/publish`, {
|
|
58
|
+
method: "POST", credentials: "include",
|
|
59
|
+
});
|
|
60
|
+
const data = await res.json();
|
|
61
|
+
if (data.ok) {
|
|
62
|
+
setPublishResult({ ok: true, files: data.files });
|
|
63
|
+
await loadStatus();
|
|
64
|
+
} else {
|
|
65
|
+
setPublishResult({ ok: false, error: data.message || data.error });
|
|
66
|
+
}
|
|
67
|
+
} catch (e) {
|
|
68
|
+
setPublishResult({ ok: false, error: String(e) });
|
|
69
|
+
} finally { setPublishing(false); }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (loading) {
|
|
73
|
+
return _jsx("div", {
|
|
74
|
+
className: "flex h-full items-center justify-center text-fg-fainter text-xs",
|
|
75
|
+
children: "Loading...",
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const activePlugins = (plugins || []).filter((p) => p.state === "active");
|
|
80
|
+
const hasDraft = status?.draft?.exists;
|
|
81
|
+
const hasPublished = status?.published?.exists;
|
|
82
|
+
|
|
83
|
+
return _jsxs("div", {
|
|
84
|
+
className: "flex flex-col h-full overflow-y-auto text-sm",
|
|
85
|
+
children: [
|
|
86
|
+
// Header
|
|
87
|
+
_jsxs("div", {
|
|
88
|
+
className: "border-b border-border-subtle px-3 py-2 flex items-center gap-2",
|
|
89
|
+
children: [
|
|
90
|
+
_jsx(Paintbrush, { size: 14, className: "text-fg-muted" }),
|
|
91
|
+
_jsx("span", { className: "text-xs font-medium text-fg-default", children: "Custom UI Shell" }),
|
|
92
|
+
_jsx("div", { className: "ml-auto" }),
|
|
93
|
+
_jsx("button", {
|
|
94
|
+
onClick: () => { loadStatus(); setPreviewKey(k => k + 1); },
|
|
95
|
+
className: "rounded p-1 text-fg-faint hover:text-fg-default hover:bg-bg-hover transition-colors",
|
|
96
|
+
title: "Refresh",
|
|
97
|
+
children: _jsx(RefreshCw, { size: 12 }),
|
|
98
|
+
}),
|
|
99
|
+
],
|
|
100
|
+
}),
|
|
101
|
+
|
|
102
|
+
// Status cards
|
|
103
|
+
_jsxs("div", {
|
|
104
|
+
className: "mx-3 mt-3 space-y-2",
|
|
105
|
+
children: [
|
|
106
|
+
// Draft status
|
|
107
|
+
_jsxs("div", {
|
|
108
|
+
className: `rounded-lg border p-3 ${hasDraft ? "border-blue-500/30 bg-blue-500/5" : "border-border-subtle bg-bg-surface"}`,
|
|
109
|
+
children: [
|
|
110
|
+
_jsxs("div", {
|
|
111
|
+
className: "flex items-center gap-2 mb-1",
|
|
112
|
+
children: [
|
|
113
|
+
_jsx(FileCode, { size: 13, className: hasDraft ? "text-blue-400" : "text-fg-faint" }),
|
|
114
|
+
_jsx("span", { className: "text-xs font-medium", children: "Draft" }),
|
|
115
|
+
hasDraft && _jsx("span", {
|
|
116
|
+
className: "ml-auto text-[10px] text-blue-400",
|
|
117
|
+
children: `${status.draft.files.length} file${status.draft.files.length > 1 ? "s" : ""}`,
|
|
118
|
+
}),
|
|
119
|
+
],
|
|
120
|
+
}),
|
|
121
|
+
_jsx("p", {
|
|
122
|
+
className: "text-[11px] text-fg-muted leading-relaxed",
|
|
123
|
+
children: hasDraft
|
|
124
|
+
? "Agent has written a shell draft. Preview it below, then publish to go live."
|
|
125
|
+
: "No draft yet. Ask the agent to build a custom UI — it will write to _tenant/shell/.",
|
|
126
|
+
}),
|
|
127
|
+
hasDraft && _jsx("div", {
|
|
128
|
+
className: "mt-2 space-y-0.5",
|
|
129
|
+
children: status.draft.files.map(f =>
|
|
130
|
+
_jsxs("div", {
|
|
131
|
+
className: "flex items-center text-[10px] text-fg-faint font-mono",
|
|
132
|
+
children: [
|
|
133
|
+
_jsx("span", { children: f.path }),
|
|
134
|
+
_jsx("span", { className: "ml-auto", children: formatSize(f.size) }),
|
|
135
|
+
],
|
|
136
|
+
}, f.path)
|
|
137
|
+
),
|
|
138
|
+
}),
|
|
139
|
+
],
|
|
140
|
+
}),
|
|
141
|
+
|
|
142
|
+
// Published status
|
|
143
|
+
_jsxs("div", {
|
|
144
|
+
className: `rounded-lg border p-3 ${hasPublished ? "border-green-500/30 bg-green-500/5" : "border-border-subtle bg-bg-surface"}`,
|
|
145
|
+
children: [
|
|
146
|
+
_jsxs("div", {
|
|
147
|
+
className: "flex items-center gap-2 mb-1",
|
|
148
|
+
children: [
|
|
149
|
+
_jsx(CheckCircle, { size: 13, className: hasPublished ? "text-green-400" : "text-fg-faint" }),
|
|
150
|
+
_jsx("span", { className: "text-xs font-medium", children: "Published" }),
|
|
151
|
+
hasPublished && _jsx("span", {
|
|
152
|
+
className: "ml-auto text-[10px] text-green-400",
|
|
153
|
+
children: `${status.published.files.length} file${status.published.files.length > 1 ? "s" : ""}`,
|
|
154
|
+
}),
|
|
155
|
+
],
|
|
156
|
+
}),
|
|
157
|
+
_jsx("p", {
|
|
158
|
+
className: "text-[11px] text-fg-muted leading-relaxed",
|
|
159
|
+
children: hasPublished
|
|
160
|
+
? "Custom shell is live for all users of this tenant."
|
|
161
|
+
: "No published shell yet. Publish a draft to replace the default UI.",
|
|
162
|
+
}),
|
|
163
|
+
],
|
|
164
|
+
}),
|
|
165
|
+
],
|
|
166
|
+
}),
|
|
167
|
+
|
|
168
|
+
// Preview iframe (draft)
|
|
169
|
+
hasDraft && _jsxs("div", {
|
|
170
|
+
className: "mx-3 mt-3",
|
|
171
|
+
children: [
|
|
172
|
+
_jsx("div", {
|
|
173
|
+
className: "text-[11px] font-medium text-fg-muted mb-1.5",
|
|
174
|
+
children: "Draft Preview",
|
|
175
|
+
}),
|
|
176
|
+
_jsx("div", {
|
|
177
|
+
className: "rounded-lg border border-border-subtle overflow-hidden bg-white",
|
|
178
|
+
style: { height: "240px" },
|
|
179
|
+
children: _jsx("iframe", {
|
|
180
|
+
src: `${SHELL_API}/preview`,
|
|
181
|
+
title: "Shell Preview",
|
|
182
|
+
sandbox: "allow-scripts allow-forms allow-same-origin",
|
|
183
|
+
className: "w-full h-full border-0",
|
|
184
|
+
style: { transform: "scale(0.5)", transformOrigin: "top left", width: "200%", height: "200%" },
|
|
185
|
+
}, previewKey),
|
|
186
|
+
}),
|
|
187
|
+
],
|
|
188
|
+
}),
|
|
189
|
+
|
|
190
|
+
// Actions
|
|
191
|
+
_jsxs("div", {
|
|
192
|
+
className: "mx-3 mt-3 space-y-2",
|
|
193
|
+
children: [
|
|
194
|
+
// Publish button
|
|
195
|
+
hasDraft && _jsxs("button", {
|
|
196
|
+
onClick: publishShell,
|
|
197
|
+
disabled: publishing,
|
|
198
|
+
className: "w-full flex items-center justify-center gap-2 rounded-lg px-3 py-2 text-xs font-medium bg-blue-500/10 text-blue-400 hover:bg-blue-500/20 border border-blue-500/20 transition-colors disabled:opacity-50",
|
|
199
|
+
children: [
|
|
200
|
+
_jsx(Upload, { size: 13 }),
|
|
201
|
+
publishing ? "Publishing..." : "Publish Draft → Go Live",
|
|
202
|
+
],
|
|
203
|
+
}),
|
|
204
|
+
|
|
205
|
+
// Publish result
|
|
206
|
+
publishResult && _jsx("div", {
|
|
207
|
+
className: `rounded-lg px-3 py-2 text-[11px] ${publishResult.ok ? "bg-green-500/10 text-green-400" : "bg-red-500/10 text-red-400"}`,
|
|
208
|
+
children: publishResult.ok
|
|
209
|
+
? `✓ Published ${publishResult.files.length} files. Refresh the shell URL to see changes.`
|
|
210
|
+
: `✗ ${publishResult.error}`,
|
|
211
|
+
}),
|
|
212
|
+
|
|
213
|
+
// Toggle button
|
|
214
|
+
_jsxs("button", {
|
|
215
|
+
onClick: toggleShell,
|
|
216
|
+
disabled: toggling,
|
|
217
|
+
className: `w-full flex items-center justify-center gap-2 rounded-lg px-3 py-2 text-xs font-medium transition-colors ${
|
|
218
|
+
shellActive
|
|
219
|
+
? "bg-red-500/10 text-red-400 hover:bg-red-500/20 border border-red-500/20"
|
|
220
|
+
: "bg-green-500/10 text-green-400 hover:bg-green-500/20 border border-green-500/20"
|
|
221
|
+
} disabled:opacity-50`,
|
|
222
|
+
children: [
|
|
223
|
+
shellActive ? _jsx(EyeOff, { size: 13 }) : _jsx(Eye, { size: 13 }),
|
|
224
|
+
toggling ? "Updating..." : shellActive ? "Disable Shell" : "Enable Shell",
|
|
225
|
+
],
|
|
226
|
+
}),
|
|
227
|
+
],
|
|
228
|
+
}),
|
|
229
|
+
|
|
230
|
+
// Available APIs
|
|
231
|
+
_jsxs("div", {
|
|
232
|
+
className: "mx-3 mt-3 rounded-lg border border-border-subtle bg-bg-surface p-3",
|
|
233
|
+
children: [
|
|
234
|
+
_jsx("div", {
|
|
235
|
+
className: "text-[11px] font-medium text-fg-muted mb-2",
|
|
236
|
+
children: "Available APIs for custom UI",
|
|
237
|
+
}),
|
|
238
|
+
_jsx("div", { className: "flex flex-wrap gap-1", children:
|
|
239
|
+
["chat/ws", "auth", ...activePlugins.map(p => p.id).filter(id => id !== PLUGIN_ID)].map((id) =>
|
|
240
|
+
_jsx("span", {
|
|
241
|
+
className: "inline-block rounded-md bg-bg-raised px-1.5 py-0.5 text-[10px] text-fg-muted",
|
|
242
|
+
children: id,
|
|
243
|
+
}, id)
|
|
244
|
+
),
|
|
245
|
+
}),
|
|
246
|
+
],
|
|
247
|
+
}),
|
|
248
|
+
|
|
249
|
+
// Help text
|
|
250
|
+
_jsx("div", {
|
|
251
|
+
className: "mx-3 mt-3 mb-3 text-[10px] text-fg-fainter leading-relaxed",
|
|
252
|
+
children: "Workflow: Agent writes draft → preview here → publish to go live. Each tenant has its own shell.",
|
|
253
|
+
}),
|
|
254
|
+
],
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function formatSize(bytes) {
|
|
259
|
+
if (bytes < 1024) return bytes + " B";
|
|
260
|
+
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
|
|
261
|
+
return (bytes / (1024 * 1024)).toFixed(1) + " MB";
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Sidebar section: shows the shell session when it has messages.
|
|
266
|
+
* Clicking it switches the chat view to the shell session transcript.
|
|
267
|
+
*/
|
|
268
|
+
function ShellSidebarSection() {
|
|
269
|
+
const [session, setSession] = useState(null);
|
|
270
|
+
const { viewingSessionId, setViewingSession } = useChatNav();
|
|
271
|
+
|
|
272
|
+
const refresh = useCallback(async () => {
|
|
273
|
+
try {
|
|
274
|
+
const res = await fetch(`/api/channel-sessions`, { credentials: "include" });
|
|
275
|
+
const data = await res.json();
|
|
276
|
+
const shell = (data.sessions || []).find(s => s.channelId === "custom-ui");
|
|
277
|
+
setSession(shell || null);
|
|
278
|
+
} catch { /* best-effort */ }
|
|
279
|
+
}, []);
|
|
280
|
+
|
|
281
|
+
useEffect(() => {
|
|
282
|
+
refresh();
|
|
283
|
+
const off = subscribeToWsEvent("channel_session_changed", (ev) => {
|
|
284
|
+
if (ev.channelId === "custom-ui") refresh();
|
|
285
|
+
});
|
|
286
|
+
return off;
|
|
287
|
+
}, [refresh]);
|
|
288
|
+
|
|
289
|
+
if (!session) return null;
|
|
290
|
+
|
|
291
|
+
const active = viewingSessionId === session.id;
|
|
292
|
+
|
|
293
|
+
return _jsx("button", {
|
|
294
|
+
onClick: () => setViewingSession(active ? null : session.id),
|
|
295
|
+
className: `w-full flex items-center gap-2 rounded-md px-2 py-1.5 text-xs transition-colors ${
|
|
296
|
+
active
|
|
297
|
+
? "bg-bg-selected text-fg-default border-l-2 border-accent"
|
|
298
|
+
: "text-fg-muted hover:bg-bg-hover hover:text-fg-default"
|
|
299
|
+
}`,
|
|
300
|
+
children: [
|
|
301
|
+
_jsx(Paintbrush, { key: "icon", size: 13, className: active ? "text-accent" : "text-fg-faint" }),
|
|
302
|
+
_jsx("span", { key: "label", className: "truncate", children: session.title || "Custom Shell" }),
|
|
303
|
+
],
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const exports = {
|
|
308
|
+
components: { ShellPreviewPanel, ShellSidebarSection },
|
|
309
|
+
};
|
|
310
|
+
export default exports;
|