@leeoohoo/ui-apps-devkit 0.1.1 → 0.1.3

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.
Files changed (62) hide show
  1. package/README.md +84 -76
  2. package/bin/chatos-uiapp.js +3 -4
  3. package/package.json +28 -25
  4. package/src/cli.js +53 -53
  5. package/src/commands/dev.js +14 -14
  6. package/src/commands/init.js +143 -142
  7. package/src/commands/install.js +56 -55
  8. package/src/commands/pack.js +72 -72
  9. package/src/commands/validate.js +113 -113
  10. package/src/lib/args.js +49 -49
  11. package/src/lib/config.js +29 -29
  12. package/src/lib/fs.js +78 -78
  13. package/src/lib/path-boundary.js +16 -16
  14. package/src/lib/plugin.js +45 -45
  15. package/src/lib/state-constants.js +2 -0
  16. package/src/lib/template.js +172 -172
  17. package/src/sandbox/server.js +2302 -1200
  18. package/templates/basic/README.md +80 -77
  19. package/templates/basic/chatos.config.json +5 -5
  20. package/templates/basic/docs/CHATOS_UI_APPS_AI_CONTRIBUTIONS.md +178 -178
  21. package/templates/basic/docs/CHATOS_UI_APPS_BACKEND_PROTOCOL.md +75 -74
  22. package/templates/basic/docs/CHATOS_UI_APPS_HOST_API.md +136 -136
  23. package/templates/basic/docs/CHATOS_UI_APPS_OVERVIEW.md +115 -113
  24. package/templates/basic/docs/CHATOS_UI_APPS_PLUGIN_MANIFEST.md +225 -224
  25. package/templates/basic/docs/CHATOS_UI_APPS_STYLE_GUIDE.md +95 -95
  26. package/templates/basic/docs/CHATOS_UI_APPS_TROUBLESHOOTING.md +45 -45
  27. package/templates/basic/docs/CHATOS_UI_PROMPTS_PROTOCOL.md +392 -392
  28. package/templates/basic/plugin/apps/app/compact.mjs +41 -41
  29. package/templates/basic/plugin/apps/app/index.mjs +287 -287
  30. package/templates/basic/plugin/apps/app/mcp-prompt.en.md +7 -7
  31. package/templates/basic/plugin/apps/app/mcp-prompt.zh.md +7 -7
  32. package/templates/basic/plugin/apps/app/mcp-server.mjs +15 -15
  33. package/templates/basic/plugin/backend/index.mjs +37 -37
  34. package/templates/basic/template.json +7 -7
  35. package/templates/notepad/README.md +61 -58
  36. package/templates/notepad/chatos.config.json +4 -4
  37. package/templates/notepad/docs/CHATOS_UI_APPS_AI_CONTRIBUTIONS.md +178 -178
  38. package/templates/notepad/docs/CHATOS_UI_APPS_BACKEND_PROTOCOL.md +75 -74
  39. package/templates/notepad/docs/CHATOS_UI_APPS_HOST_API.md +136 -136
  40. package/templates/notepad/docs/CHATOS_UI_APPS_OVERVIEW.md +115 -113
  41. package/templates/notepad/docs/CHATOS_UI_APPS_PLUGIN_MANIFEST.md +225 -224
  42. package/templates/notepad/docs/CHATOS_UI_APPS_STYLE_GUIDE.md +95 -95
  43. package/templates/notepad/docs/CHATOS_UI_APPS_TROUBLESHOOTING.md +45 -45
  44. package/templates/notepad/docs/CHATOS_UI_PROMPTS_PROTOCOL.md +392 -392
  45. package/templates/notepad/plugin/apps/app/api.mjs +30 -30
  46. package/templates/notepad/plugin/apps/app/compact.mjs +41 -41
  47. package/templates/notepad/plugin/apps/app/dom.mjs +14 -14
  48. package/templates/notepad/plugin/apps/app/ds-tree.mjs +35 -35
  49. package/templates/notepad/plugin/apps/app/index.mjs +1056 -1056
  50. package/templates/notepad/plugin/apps/app/layers.mjs +338 -338
  51. package/templates/notepad/plugin/apps/app/markdown.mjs +120 -120
  52. package/templates/notepad/plugin/apps/app/mcp-prompt.en.md +22 -22
  53. package/templates/notepad/plugin/apps/app/mcp-prompt.zh.md +22 -22
  54. package/templates/notepad/plugin/apps/app/mcp-server.mjs +207 -200
  55. package/templates/notepad/plugin/apps/app/styles.mjs +355 -355
  56. package/templates/notepad/plugin/apps/app/tags.mjs +21 -21
  57. package/templates/notepad/plugin/apps/app/ui.mjs +280 -280
  58. package/templates/notepad/plugin/backend/index.mjs +99 -99
  59. package/templates/notepad/plugin/plugin.json +23 -23
  60. package/templates/notepad/plugin/shared/notepad-paths.mjs +80 -62
  61. package/templates/notepad/plugin/shared/notepad-store.mjs +765 -765
  62. package/templates/notepad/template.json +8 -8
@@ -1,113 +1,115 @@
1
- # ChatOS UI Apps(嵌入应用)概览
2
-
3
- 本文把散落在仓库各处的“ChatOS 嵌入应用(UI Apps 插件)框架/协议”说明提取到仓库根目录,并补齐了若干关键约束(路径边界、打包导入、schema 字段等)。
4
-
5
- 配套文档(按从概览 → 细节的阅读顺序):
6
-
7
- - [`CHATOS_UI_APPS_PLUGIN_MANIFEST.md`](./CHATOS_UI_APPS_PLUGIN_MANIFEST.md):`plugin.json` / `apps[i].ai` 的清单与字段规范(含完整字段、示例与约束)。
8
- - [`CHATOS_UI_APPS_HOST_API.md`](./CHATOS_UI_APPS_HOST_API.md):`module` 应用入口与 `host.*` 交互协议(前端侧)。
9
- - [`CHATOS_UI_APPS_STYLE_GUIDE.md`](./CHATOS_UI_APPS_STYLE_GUIDE.md):主题与样式约定(CSS Tokens / 主题切换)。
10
- - [`CHATOS_UI_APPS_TROUBLESHOOTING.md`](./CHATOS_UI_APPS_TROUBLESHOOTING.md):常见问题与排查清单。
11
- - [`CHATOS_UI_PROMPTS_PROTOCOL.md`](./CHATOS_UI_PROMPTS_PROTOCOL.md):右下角笑脸「交互待办(UI Prompts)」协议(表单/单选/多选/复杂确认)。
12
- - [`CHATOS_UI_APPS_BACKEND_PROTOCOL.md`](./CHATOS_UI_APPS_BACKEND_PROTOCOL.md):插件后端(Electron main 进程)协议与 `ctx` 运行时上下文。
13
- - [`CHATOS_UI_APPS_AI_CONTRIBUTIONS.md`](./CHATOS_UI_APPS_AI_CONTRIBUTIONS.md):应用如何对 Chat Agent 暴露 MCP/Prompt(含命名规则、合并规则、内置清单机制)。
14
-
15
- ## 术语与角色
16
-
17
- - **ChatOS(宿主)**:桌面端 Electron 应用(本仓库的 `deepseek_cli`)。
18
- - **AIDE(引擎)**:模型调用/工具/MCP/子代理等核心能力(本仓库的 `aide`)。
19
- - **UI Apps(嵌入应用/小应用)**:以插件形式注入到桌面端「应用」中心的应用。
20
- - **MCP**:Model Context Protocol;通过 MCP Server 暴露 tools,最终工具名通常为 `mcp_<serverName>_<toolName>`。
21
- - **Prompt**:system prompt 模板;可被 Agent 勾选并注入运行时 system prompt。
22
-
23
- ## 目录与状态(sessionRoot / stateDir)
24
-
25
- - `sessionRoot`:会话根目录
26
- - 默认:用户主目录(Home)
27
- - 可通过环境变量覆盖:`MODEL_CLI_SESSION_ROOT=/path/to/root`
28
- - 桌面端/CLI 会把“上次使用的 sessionRoot”记录到 `<home>/.deepseek_cli/last-session-root.txt`(未设置 env 时会优先读取)
29
- - `stateDir`:`<home>/.deepseek_cli/<hostApp>`(ChatOS `hostApp=chatos`)
30
-
31
- 全局配置(由宿主维护;应用侧只读/复用):
32
-
33
- - `stateDir/chatos.db.sqlite`:Admin DB(Models / Secrets / MCP Servers / Prompts / Settings…)
34
- - 文件镜像(从 Admin DB 同步出来,便于运行时读取):
35
- - `stateDir/auth/models.yaml`
36
- - `stateDir/auth/mcp.config.json`
37
- - `stateDir/auth/system-prompt.yaml`
38
- - `stateDir/auth/*prompt*.yaml`
39
-
40
- 原则:
41
-
42
- - **Secrets(API Keys)只存 DB**,不会明文同步到 yaml。
43
- - 运行前宿主会把 Secrets 写入 `process.env`(受 `override` 控制),Provider 通过 `apiKeyEnv` 取值。
44
-
45
- ## UI Apps 插件目录(宿主扫描)
46
-
47
- 宿主会扫描两个目录(并在 UI「应用」页展示实际路径):
48
-
49
- - **内置/开发目录**:`deepseek_cli/ui_apps/plugins`
50
- - **用户插件目录**:`<stateDir>/ui_apps/plugins`(即 `~/.deepseek_cli/chatos/ui_apps/plugins`)
51
-
52
- 同名 `plugin.id` 的覆盖规则:
53
-
54
- - 用户目录的插件会覆盖内置目录的同 `plugin.id` 插件(便于开发调试/热替换)。
55
-
56
- 插件数据目录(供插件后端存放自己的持久化数据):
57
-
58
- - `dataDir`:`<stateDir>/ui_apps/data/<pluginId>`
59
- - 插件后端的持久化数据写入目录为 `dataDir`;插件安装目录用于读取插件资源。
60
-
61
- ## 插件包导入(目录或 .zip)
62
-
63
- 桌面端 UI 支持:`应用` → `导入应用包` → 选择插件目录或 `.zip`。
64
-
65
- 包结构要求:
66
-
67
- - `plugin.json` 在包根目录;或
68
- - 包根目录下一层目录中包含一个或多个插件目录(每个目录内有 `plugin.json`)。
69
-
70
- 导入时的复制规则(重要):
71
-
72
- - 会拷贝到用户插件目录 `~/.deepseek_cli/chatos/ui_apps/plugins/<sanitized(plugin.id)>/`;
73
- - 默认会排除:`node_modules/`、`.git/`、`.DS_Store`、`*.map`;
74
- - 因此若插件需要依赖,请在构建时做 bundle(不要指望随包携带 `node_modules` 生效)。
75
-
76
- ## 安全边界与硬约束(协议的一部分)
77
-
78
- 为避免插件越权读取宿主文件系统,宿主对“路径型字段”做了强约束:
79
-
80
- - `apps[i].entry.path` 必须位于插件目录内,且必须是文件(`module` 入口)。
81
- - `apps[i].entry.compact.path`(可选)同样必须位于插件目录内,且必须是文件。
82
- - `backend.entry` 必须位于插件目录内,且必须是文件。
83
- - `apps[i].ai.config`、`ai.mcp.entry`、`ai.mcpPrompt.*.path` 等所有 path 都必须位于插件目录内。
84
-
85
- 尺寸限制(默认值,防止误导入超大文件):
86
-
87
- - `plugin.json` 最大 `256 KiB`
88
- - `mcpPrompt` 内容最大 `128 KiB`(读取 path 或 inline content 都受限)
89
-
90
- ## 最短接入路径(TL;DR)
91
-
92
- 1) 从模板复制:`deepseek_cli/ui_apps/template/basic-plugin` → 放进任一插件目录
93
- 2) 修改 `plugin.json`:只支持 `apps[i].entry.type="module"`(可选增加 `entry.compact` 作为紧凑 UI 入口)
94
- 3) 桌面端打开「应用」页点“刷新” → 进入你的应用
95
- 4) (可选)需要 Node 能力:加 `backend.entry`,前端用 `host.backend.invoke()`
96
- 5) (可选)需要给 Agent 暴露工具/说明:配置 `apps[i].ai`(见 [`CHATOS_UI_APPS_AI_CONTRIBUTIONS.md`](./CHATOS_UI_APPS_AI_CONTRIBUTIONS.md))
97
-
98
- 提示:`ai.mcp` / `ai.mcpPrompt` 是否持久化写入 Admin DB,取决于宿主是否启用 `syncAiContributes`;即使不持久化,Agent 运行时也可以按 `apps[i].ai` 声明进行“临时注入”。
99
-
100
- ## 实现位置(便于对照代码)
101
-
102
- - schema(`plugin.json` / `apps[i].ai`):`deepseek_cli/electron/ui-apps/schemas.js`
103
- - 插件扫描/入口校验/AI 同步:`deepseek_cli/electron/ui-apps/index.js`
104
- - 应用包导入(目录/zip):`deepseek_cli/electron/ui-apps/plugin-installer.js`
105
- - module 运行时 Host API 注入:`deepseek_cli/apps/ui/src/features/apps/AppsPluginView.jsx`
106
-
107
- ## 原始文档来源(本次提取/整合)
108
-
109
- - `deepseek_cli/doc/app-dev-handbook.md`
110
- - `deepseek_cli/doc/app-integration.md`
111
- - `deepseek_cli/doc/ui-apps-plugins.md`
112
- - `deepseek_cli/doc/ui-apps-dev-guide.md`
113
- - `aide/shared/defaults/ui-apps-expose/README.md`
1
+ # ChatOS UI Apps(嵌入应用)概览
2
+
3
+ 本文把散落在仓库各处的“ChatOS 嵌入应用(UI Apps 插件)框架/协议”说明提取到仓库根目录,并补齐了若干关键约束(路径边界、打包导入、schema 字段等)。
4
+
5
+ 配套文档(按从概览 → 细节的阅读顺序):
6
+
7
+ - [`CHATOS_UI_APPS_PLUGIN_MANIFEST.md`](./CHATOS_UI_APPS_PLUGIN_MANIFEST.md):`plugin.json` / `apps[i].ai` 的清单与字段规范(含完整字段、示例与约束)。
8
+ - [`CHATOS_UI_APPS_HOST_API.md`](./CHATOS_UI_APPS_HOST_API.md):`module` 应用入口与 `host.*` 交互协议(前端侧)。
9
+ - [`CHATOS_UI_APPS_STYLE_GUIDE.md`](./CHATOS_UI_APPS_STYLE_GUIDE.md):主题与样式约定(CSS Tokens / 主题切换)。
10
+ - [`CHATOS_UI_APPS_TROUBLESHOOTING.md`](./CHATOS_UI_APPS_TROUBLESHOOTING.md):常见问题与排查清单。
11
+ - [`CHATOS_UI_PROMPTS_PROTOCOL.md`](./CHATOS_UI_PROMPTS_PROTOCOL.md):右下角笑脸「交互待办(UI Prompts)」协议(表单/单选/多选/复杂确认)。
12
+ - [`CHATOS_UI_APPS_BACKEND_PROTOCOL.md`](./CHATOS_UI_APPS_BACKEND_PROTOCOL.md):插件后端(Electron main 进程)协议与 `ctx` 运行时上下文。
13
+ - [`CHATOS_UI_APPS_AI_CONTRIBUTIONS.md`](./CHATOS_UI_APPS_AI_CONTRIBUTIONS.md):应用如何对 Chat Agent 暴露 MCP/Prompt(含命名规则、合并规则、内置清单机制)。
14
+
15
+ ## 术语与角色
16
+
17
+ - **ChatOS(宿主)**:桌面端 Electron 应用(本仓库的 `chatos`)。
18
+ - **AIDE(引擎)**:模型调用/工具/MCP/子代理等核心能力(本仓库的 `aide`)。
19
+ - **UI Apps(嵌入应用/小应用)**:以插件形式注入到桌面端「应用」中心的应用。
20
+ - **MCP**:Model Context Protocol;通过 MCP Server 暴露 tools,最终工具名通常为 `mcp_<serverName>_<toolName>`。
21
+ - **Prompt**:system prompt 模板;可被 Agent 勾选并注入运行时 system prompt。
22
+
23
+ ## 目录与状态(sessionRoot / stateDir)
24
+
25
+ - `sessionRoot`:会话根目录
26
+ - 默认:用户主目录(Home)
27
+ - 可通过环境变量覆盖:`MODEL_CLI_SESSION_ROOT=/path/to/root`
28
+ - `stateRoot`:用户状态根目录
29
+ - 桌面端/CLI 会把“上次使用的 sessionRoot”记录到 `<stateRoot>/last-session-root.txt`(未设置 env 时会优先读取)
30
+ - `stateDir`:`<stateRoot>/<hostApp>`(ChatOS 的 `hostApp=chatos`)
31
+ - 兼容旧路径:若存在 `legacyStateRoot/<hostApp>`,启动时会自动迁移到 `stateDir`
32
+
33
+ 全局配置(由宿主维护;应用侧只读/复用):
34
+
35
+ - `stateDir/chatos.db.sqlite`:Admin DB(Models / Secrets / MCP Servers / Prompts / Settings…)
36
+ - 文件镜像(从 Admin DB 同步出来,便于运行时读取):
37
+ - `stateDir/auth/models.yaml`
38
+ - `stateDir/auth/mcp.config.json`
39
+ - `stateDir/auth/system-prompt.yaml`
40
+ - `stateDir/auth/*prompt*.yaml`
41
+
42
+ 原则:
43
+
44
+ - **Secrets(API Keys)只存 DB**,不会明文同步到 yaml。
45
+ - 运行前宿主会把 Secrets 写入 `process.env`(受 `override` 控制),Provider 通过 `apiKeyEnv` 取值。
46
+
47
+ ## UI Apps 插件目录(宿主扫描)
48
+
49
+ 宿主会扫描两个目录(并在 UI「应用」页展示实际路径):
50
+
51
+ - **内置/开发目录**:`chatos/ui_apps/plugins`
52
+ - **用户插件目录**:`<stateDir>/ui_apps/plugins`(`stateDir = <stateRoot>/<hostApp>`)
53
+
54
+ 同名 `plugin.id` 的覆盖规则:
55
+
56
+ - 用户目录的插件会覆盖内置目录的同 `plugin.id` 插件(便于开发调试/热替换)。
57
+
58
+ 插件数据目录(供插件后端存放自己的持久化数据):
59
+
60
+ - `dataDir`:`<stateDir>/ui_apps/data/<pluginId>`
61
+ - 插件后端的持久化数据写入目录为 `dataDir`;插件安装目录用于读取插件资源。
62
+
63
+ ## 插件包导入(目录或 .zip
64
+
65
+ 桌面端 UI 支持:`应用` → `导入应用包` → 选择插件目录或 `.zip`。
66
+
67
+ 包结构要求:
68
+
69
+ - `plugin.json` 在包根目录;或
70
+ - 包根目录下一层目录中包含一个或多个插件目录(每个目录内有 `plugin.json`)。
71
+
72
+ 导入时的复制规则(重要):
73
+
74
+ - 会拷贝到用户插件目录 `<stateDir>/ui_apps/plugins/<sanitized(plugin.id)>/`;
75
+ - 默认会排除:`node_modules/`、`.git/`、`.DS_Store`、`*.map`;
76
+ - 因此若插件需要依赖,请在构建时做 bundle(不要指望随包携带 `node_modules` 生效)。
77
+
78
+ ## 安全边界与硬约束(协议的一部分)
79
+
80
+ 为避免插件越权读取宿主文件系统,宿主对“路径型字段”做了强约束:
81
+
82
+ - `apps[i].entry.path` 必须位于插件目录内,且必须是文件(`module` 入口)。
83
+ - `apps[i].entry.compact.path`(可选)同样必须位于插件目录内,且必须是文件。
84
+ - `backend.entry` 必须位于插件目录内,且必须是文件。
85
+ - `apps[i].ai.config`、`ai.mcp.entry`、`ai.mcpPrompt.*.path` 等所有 path 都必须位于插件目录内。
86
+
87
+ 尺寸限制(默认值,防止误导入超大文件):
88
+
89
+ - `plugin.json` 最大 `256 KiB`
90
+ - `mcpPrompt` 内容最大 `128 KiB`(读取 path 或 inline content 都受限)
91
+
92
+ ## 最短接入路径(TL;DR)
93
+
94
+ 1) 从模板复制:`chatos/ui_apps/template/basic-plugin`放进任一插件目录
95
+ 2) 修改 `plugin.json`:只支持 `apps[i].entry.type="module"`(可选增加 `entry.compact` 作为紧凑 UI 入口)
96
+ 3) 桌面端打开「应用」页 点“刷新” 进入你的应用
97
+ 4) (可选)需要 Node 能力:加 `backend.entry`,前端用 `host.backend.invoke()`
98
+ 5) (可选)需要给 Agent 暴露工具/说明:配置 `apps[i].ai`(见 [`CHATOS_UI_APPS_AI_CONTRIBUTIONS.md`](./CHATOS_UI_APPS_AI_CONTRIBUTIONS.md))
99
+
100
+ 提示:`ai.mcp` / `ai.mcpPrompt` 是否持久化写入 Admin DB,取决于宿主是否启用 `syncAiContributes`;即使不持久化,Agent 运行时也可以按 `apps[i].ai` 声明进行“临时注入”。
101
+
102
+ ## 实现位置(便于对照代码)
103
+
104
+ - schema(`plugin.json` / `apps[i].ai`):`chatos/electron/ui-apps/schemas.js`
105
+ - 插件扫描/入口校验/AI 同步:`chatos/electron/ui-apps/index.js`
106
+ - 应用包导入(目录/zip):`chatos/electron/ui-apps/plugin-installer.js`
107
+ - module 运行时 Host API 注入:`chatos/apps/ui/src/features/apps/AppsPluginView.jsx`
108
+
109
+ ## 原始文档来源(本次提取/整合)
110
+
111
+ - `chatos/doc/app-dev-handbook.md`
112
+ - `chatos/doc/app-integration.md`
113
+ - `chatos/doc/ui-apps-plugins.md`
114
+ - `chatos/doc/ui-apps-dev-guide.md`
115
+ - `aide/shared/defaults/ui-apps-expose/README.md`