agentworkshop 0.7.61 → 0.7.63

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 (40) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +2488 -2526
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +2488 -2526
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/{DKHA3XxF.js → B5RD2ZST.js} +1 -1
  5. package/.output/public/_nuxt/{CeEzUIvN.js → DAfWhONg.js} +2 -2
  6. package/.output/public/_nuxt/{analysis.DfMg76el.css → analysis.BwhKdel9.css} +1 -1
  7. package/.output/public/_nuxt/builds/latest.json +1 -1
  8. package/.output/public/_nuxt/builds/meta/3097fe87-dd0d-4037-b7bb-ead0620af56b.json +1 -0
  9. package/.output/server/chunks/_/nitro.mjs +2186 -2281
  10. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  11. package/.output/server/chunks/build/{analysis-MVEnlO7A.mjs → analysis-CPIxT0FP.mjs} +5 -5
  12. package/.output/server/chunks/build/{analysis-MVEnlO7A.mjs.map → analysis-CPIxT0FP.mjs.map} +1 -1
  13. package/.output/server/chunks/routes/renderer.mjs +1 -1
  14. package/.output/server/chunks/virtual/entry.mjs +1 -1
  15. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  16. package/.output/server/package.json +1 -1
  17. package/README-zh.md +946 -945
  18. package/README.md +970 -969
  19. package/app/components/analysis/AnalysisEditModal.vue +192 -192
  20. package/config.yml +180 -180
  21. package/docs/cli.en.md +447 -447
  22. package/docs/cli.md +412 -412
  23. package/docs/full-test-plan.md +1 -1
  24. package/docs/plugins.en.md +1 -1
  25. package/docs/plugins.md +1 -1
  26. package/docs/sdk.en.md +1 -1
  27. package/docs/sdk.md +1 -1
  28. package/package.json +181 -181
  29. package/scripts/e2e-plc-plugin-closedloop.mjs +1 -1
  30. package/server/api/workshop/analysis/[id].patch.ts +100 -100
  31. package/server/plugins-builtin/diag-bridge/host/diagnosis.mjs +4 -2
  32. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +2 -0
  33. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +241 -243
  34. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +96 -98
  35. package/server/services/workshop/agents/industrial/daq-tools.ts +16 -7
  36. package/server/services/workshop/agents/industrial/dcw-tools.ts +210 -255
  37. package/server/services/workshop/agents/industrial/index.ts +32 -32
  38. package/server/services/workshop/agents/industrial/param-tools.ts +0 -40
  39. package/server/services/workshop/prompts/loader.ts +15 -2
  40. package/.output/public/_nuxt/builds/meta/eba8574d-1991-47df-944c-18608bb58181.json +0 -1
package/docs/cli.md CHANGED
@@ -1,412 +1,412 @@
1
- # aw —— AgentWorkShop 指令行工具
2
-
3
- > 类似 Claude Code 的体验:`npm i -g agentworkshop` 后,在**任意目录**输入 `aw start` 一键启动;
4
- > 全部配置、数据、自定义指令收敛在配置根 `~/.AgentWorkShop`(可用 `AW_HOME` 重定向),
5
- > 与当前工作目录和环境路径无关。
6
-
7
- ```
8
- __ __ __ __
9
- \ \ / /__ _ _| \/ |___ _ _ ___
10
- \ \ / / _ \| '_| |\/| / _ \ ' _(_-<
11
- \_/\_\___/|_| |_| |_\___/_| |/__/
12
- ```
13
-
14
- ## 一、安装
15
-
16
- ### 1. 从 npm registry 安装(发布后的标准路径)
17
-
18
- ```bash
19
- npm install -g agentworkshop
20
- # 或免安装一次性执行(npx 会自动拉包)
21
- npx agentworkshop start
22
- ```
23
-
24
- `package.json` 的 `bin` 只有两个条目、都指向 `bin/aw.mjs`:`aw` 与 `agentworkshop`
25
- (npm 安装时自动生成 `aw` / `aw.cmd` / `aw.ps1` 三种 shim)。二者完全等价,
26
- 所有子命令都必须经由它们调用:
27
-
28
- ```bash
29
- aw --help # 或 agentworkshop --help(同义)
30
- aw --version # agentworkshop --version
31
- npx agentworkshop doctor # 没有独立的 doctor / tui 可执行文件
32
- npx -p agentworkshop aw doctor # -p 指定包后执行包内 bin,等效写法
33
- ```
34
-
35
- ### 2. 从本仓库安装(开发/内测)
36
-
37
- ```bash
38
- # 在仓库根目录执行
39
- npm install -g . # npm 11 对本地目录 = Junction 链接(改代码即时生效,适合本机开发)
40
- npm uninstall -g agentworkshop
41
-
42
- # 或打包安装(与发布后用户体验一致;tarball 已含生产构建 .output)
43
- npm pack
44
- npm install -g ./agentworkshop-<version>.tgz
45
- ```
46
-
47
- > `--ignore-scripts` 跳过 `postinstall`(`node scripts/home-bootstrap.mjs`,AW Home 引导)
48
- > 与 `prepare`(husky 初始化),使安装轻量快速;`prepare` 只跑 husky,包内不存在 Nuxt 侧的
49
- > prepare 脚本,安装期也不涉及任何构建——发布的 tarball 已自带 `.output` 生产构建。
50
- > 首次 `aw start` / `aw home` 会自动补做 AW Home 引导,无需担心。
51
-
52
- 仓库内开发走 pnpm(`packageManager: pnpm@11.9.0`):
53
-
54
- ```bash
55
- pnpm install
56
- pnpm cli --help # 仓库内的 CLI 入口(没有名为 aw 的 package script)
57
- pnpm tui # 终端工作台
58
- ```
59
-
60
- ### 3. npx 快速使用(免全局安装)
61
-
62
- ```bash
63
- npx agentworkshop start # 拉取并启动(可锁定版本: npx agentworkshop@0.7.58 start)
64
- npx agentworkshop doctor # 子命令照常可用
65
- npx -p agentworkshop aw doctor # 需要 aw 这个名字时用 -p 指定包
66
- ```
67
-
68
- > 「免全局安装」不等于「不落盘」:`postinstall` 或首次 `aw start` 仍会在
69
- > `~/.AgentWorkShop` 创建配置根并写入种子文件(见第二节)。要彻底隔离可设 `AW_HOME`。
70
-
71
- ### 4. 运行时要求
72
-
73
- | 项 | 值 |
74
- |---|---|
75
- | Node.js | `>= 23.4.0`(`engines.node`) |
76
- | 包管理器 | `pnpm@11.9.0`(`packageManager`,仅源码开发需要) |
77
- | 模块形态 | ESM(`type: module`) |
78
- | 许可证 | `Apache-2.0` |
79
- | 当前版本 | `0.7.58`(`package.json`) |
80
-
81
- ## 二、首次启动(Claude Code 式)
82
-
83
- ```bash
84
- # A. npm 安装(tarball 已含 .output 生产构建):直接启动,不重新构建
85
- $ aw start
86
- › 生产服务(home 模式) -> http://0.0.0.0:3001 (端口来源: config.yml)
87
- › 配置: C:\Users\you\.AgentWorkShop\config.yml · 数据: C:\Users\you\.AgentWorkShop\data
88
- › 停止: Ctrl+C
89
-
90
- # B. 源码检出首启(尚无 .output):先构建一次
91
- $ aw start
92
- › 首次启动:正在构建生产产物(约 2-5 分钟,仅一次) ...
93
- › 生产服务(repo 模式) -> http://0.0.0.0:3001 (端口来源: config.yml)
94
- › 配置: D:\codes\ABO\AgentWorkShop\config.yml · 数据: D:\codes\ABO\AgentWorkShop\.AgentWorkShop\data
95
- › 停止: Ctrl+C
96
- ```
97
-
98
- - 浏览器打开输出的地址即用;`Ctrl+C` 停止;再次 `aw start` 直接复用已有产物。
99
- - 端口取自有效配置(默认 `server.prod.port` = 3001),`--port` 优先级最高;
100
- 输出里的 `(端口来源: config.yml|runtime|env|CLI)` 指出这次用的是哪一层。
101
- - `aw stop` 依单实例锁 `<配置根>/.runtime/aw.lock` 终止运行中的实例。
102
-
103
- **AW Home**(用户级配置根,默认 `~/.AgentWorkShop`)由 `postinstall`
104
- (`scripts/home-bootstrap.mjs`)或首次 `aw start` / `aw home` 幂等创建,绝不覆盖已有文件:
105
-
106
- ```
107
- ~/.AgentWorkShop/
108
- ├── config.yml # 主配置(工厂默认种子;改这里改全局行为)
109
- ├── runtime-settings.json # 运行时覆盖(aw config set 写入)
110
- ├── .env # 密钥(引导时生成 24 字节随机 NUXT_SESSION_PASSWORD)
111
- ├── .env.example # 密钥键位示例(随包分发)
112
- ├── docker-compose.yml # 数采基础设施(MQTT/Timescale)自拉起定义
113
- ├── plugins-state.json # 插件启停状态(sdk/examples 种子默认记为停用)
114
- ├── data/ # sqlite/JSON 仓库/备份(全部运行数据落这里)
115
- ├── logs/
116
- ├── commands/ # 用户级自定义指令(放入即注册)
117
- ├── plugins/ # 用户级插件目录(种子来自 sdk/examples/*,只补缺失)
118
- └── prompts/ # Agent 提示词(首启从包内资产播种,只补缺失不覆盖)
119
- ```
120
-
121
- > **repo 模式(源码检出)**:配置根 = `<repo>/.AgentWorkShop`(runtime-settings.json/
122
- > data/commands/plugins 同上),工厂默认 config.yml/.env 留在检出根随 git 版本化;
123
- > prompts 按 `<project>/.AgentWorkShop/prompts` → `~/.AgentWorkShop/prompts` 顺序解析
124
- > (两种模式同构,首启自动从包内资产播种;`AW_PROMPTS_DIR` 可显式覆盖)。
125
- > 旧位置(`data/`、`server/data/`)的运行时文件会在首次启动时自动迁入配置根——
126
- > 只复制不删除,sqlite/JSON 仓库与运行时覆盖按「最新者胜」(比较 mtime)收敛。
127
-
128
- ## 三、双模式路径模型(与环境和路径无关)
129
-
130
- | | repo 模式 | home 模式(默认安装形态) |
131
- |---|---|---|
132
- | 触发条件 | cwd 在项目检出内(有 config.yml + nuxt.config.ts) | 任意其他目录 |
133
- | 应用代码 | 检出内源码(缺 `.output` 时首启构建一次) | npm 包内载荷(tarball 已含 `.output` 生产构建,直接可跑) |
134
- | 配置根 | `<repo>/.AgentWorkShop` | `~/.AgentWorkShop` |
135
- | 工厂默认 config.yml/.env | `<repo>/config.yml`(git 版本化) | `~/.AgentWorkShop/config.yml` |
136
- | 运行时覆盖 | `<repo>/.AgentWorkShop/runtime-settings.json` | `~/.AgentWorkShop/runtime-settings.json` |
137
- | 运行数据 | `<repo>/.AgentWorkShop/data/` | `~/.AgentWorkShop/data/` |
138
- | prompts | `<project>/.AgentWorkShop/prompts` → 回退 `~/.AgentWorkShop/prompts` | 同左(首启从包内资产播种) |
139
-
140
- ### 配置根解析(三条规则)
141
-
142
- `shared/config/home.mjs` 的 `resolveRunMode()` 按顺序判定,**先命中先返回**:
143
-
144
- | # | 条件 | 生效配置根 | 生效 config.yml |
145
- |---|---|---|---|
146
- | 1 | cwd 向上能找到真实存在的 `./.AgentWorkShop` 目录 | 该目录(repo 模式;纯工作区亦可) | 检出根 `config.yml`;非检出则配置根内 `config.yml`,缺失回退包内 |
147
- | 2 | cwd 向上是源码检出(config.yml + nuxt.config.ts)但**没有** `./.AgentWorkShop` | `~/.AgentWorkShop`(repo 模式) | `<检出根>/config.yml`(工厂默认仍读检出) |
148
- | 3 | 其余任意目录 | `~/.AgentWorkShop`(home 模式) | 配置根 `config.yml`,缺失回退包内 |
149
-
150
- - `AW_HOME=D:\aw-home` 覆盖用户级根(三条规则里的 `~/.AgentWorkShop` 全部改指此处)。
151
- - `AW_MODE=home` 强制 home 形态(跳过规则 1、2;启动器对全局安装的应用载荷注入,
152
- 防止包目录自身含 config.yml + nuxt.config.ts 被误判为检出)。
153
- - `AW_DATA_DIR` 可单独指定运行数据目录(默认取配置根 `data/`)。
154
-
155
- ### 设置与环境变量模型
156
-
157
- - 优先级(CLI 与网页设置页、dev/prod 启动脚本共用同一引擎 `shared/config/engine.mjs`):
158
- `config.yml 默认 < runtime-settings.json 运行时覆盖 < 环境变量 / CLI 显式参数`。
159
- - 设置描述符共 **118 项、18 组**(`aw config list` 即打印 118 行):
160
-
161
- | 组 | 项数 | 组 | 项数 | 组 | 项数 | 组 | 项数 |
162
- |---|---|---|---|---|---|---|---|
163
- | `server` | 3 | `app` | 2 | `api` | 4 | `theme` | 2 |
164
- | `i18n` | 1 | `time` | 1 | `security` | 2 | `daq` | 27 |
165
- | `memory` | 10 | `omp` | 4 | `harness` | 12 | `dcw` | 4 |
166
- | `workshop` | 15 | `backup` | 3 | `retention` | 5 | `log` | 1 |
167
- | `aml` | 16 | `mcp` | 1 | | | | |
168
-
169
- 其中 `live`(保存即生效)39 项、`restart`(重启对应模式后生效)78 项,
170
- `aw config list` 每行末尾会标注 `live` 或 `restart`。
171
- - 环境变量映射:`AW_<KEY 大写、点转下划线>`(如 `AW_SERVER_DEV_PORT`),
172
- 另加描述符显式声明的历史 `aliases`(优先级:`AW_<KEY>` 高于 `aliases` 声明顺序)。
173
- - 惯例变量 `PORT`/`NITRO_PORT`/`NUXT_PORT` 与 `HOST`/`NITRO_HOST` **仅在传入 mode 时**生效
174
- (只有启动器链路才知道该映射到 dev 还是 prod 端口)。
175
- - `aw config set` 写入**配置根**的 `runtime-settings.json`(源码检出内配置根可能与
176
- `~/.AgentWorkShop` 不同,成功行会打印实际 `settingsPath`)。
177
-
178
- ## 四、指令总览
179
-
180
- 内建指令共 **15** 条(`cli/commands/*.mjs`,一文件一指令):
181
-
182
- | 指令 | 别名 | 参数 | 说明 |
183
- |---|---|---|---|
184
- | `aw start` | `s`, `prod`, `preview` | `--port <n>` `--host <h>` `--skip-infra` | 生产服务(检出内外皆可;缺产物自动构建一次) |
185
- | `aw dev` | `d` | `--port <n>` `--host <h>` | 开发服务器(需项目检出;断连守卫 + .env 预载) |
186
- | `aw build` | `b`, `compile` | — | 生产构建 → `.output/`(需项目检出) |
187
- | `aw stop` | — | `--home` | 依单实例锁终止运行中的实例(`--home` 强制以 home 配置根为目标) |
188
- | `aw config` | `cfg`, `c` | 子命令 `list`(`ls`) / `get` / `set` / `unset` / `reset`(`--yes`/`-y`/`--force`) / `validate`(`check`) | 读取 / 写入 / 校验运行配置 |
189
- | `aw plugin` | `plugins`, `plug` | 子命令 `list`(`ls`) / `create`(`new`/`add`) / `enable` / `disable`;`create` 另接 `--global`/`-g`、`--project`、`--force`/`-f` | 插件管理(三作用域查看 / 脚手架 / 启停,热重载) |
190
- | `aw mcp` | `mcps` | `--doctor` `--print-config` `--base <url>` `--port <n>` | 工业 MCP stdio 服务(38 工具;自动发现运行实例端口;受系统设置 `mcp.enabled` 门控,env `AW_MCP_ENABLED` 可覆盖) |
191
- | `aw home` | `hw` | — | 查看 / 初始化配置根(幂等) |
192
- | `aw init` | `create`, `new` | `--force` `--no-install` `--silent` | 脚手架一个新项目检出 |
193
- | `aw register` | `reg`, `install-cmd` | `--name <n>` `--global`/`-g` `--force`/`-f` | 注册指令模块(本地文件 / 目录 / URL / npm 包) |
194
- | `aw doctor` | `dsk`, `check-env` | — | 环境 / 配置 / 服务健康检查(`--json` 输出 `{ ok, checks }`) |
195
- | `aw status` | `st`, `info` | — | 运行态总览(模式 / 配置源 / 服务 / 构建 / 指令数 / 关键有效配置) |
196
- | `aw update` | `upgrade` | `--check` `--registry <url>` `--yes` | 对比 npm 远端最新版本,有新版就地更新全局安装 |
197
- | `aw tui` | `tui` | `--url <baseUrl>` `--token <ut-*>` `--channel <名>` | 终端工作台 |
198
- | `aw version` | `v` | — | 版本信息 |
199
-
200
- > `aw status` 报告模式、配置路径、构建产物是否存在、运行时覆盖键、指令条数与关键有效配置;
201
- > **不含 uptime**,版本号只在 `aw status --json` 的 `package.version` 字段里出现。
202
-
203
- ### 全局参数
204
-
205
- 全局项只有 `cli/core/args.mjs` 的 `GLOBAL_OPTS` 这 5 条:
206
-
207
- | 参数 | 说明 |
208
- |---|---|
209
- | `--json` | 机器可读输出(成功 / 失败信封见下) |
210
- | `--debug` | 调试日志(未预期异常额外打印堆栈) |
211
- | `--help`, `-h` | 总帮助,或指定指令帮助(`aw help <cmd>` 同义) |
212
- | `--version`, `-v` | 打印 `agentworkshop <version>` |
213
- | `--root <dir>` | 显式指定项目根(该目录须含 `config.yml`) |
214
-
215
- `--port` / `--host` 是 `start` / `dev` 的**指令级**参数,不是全局参数;
216
- `AW_HOME` / `AW_MODE=home` / `AW_DATA_DIR` 是**环境变量**,不是命令行参数。
217
-
218
- ### 退出码与 `--json` 契约
219
-
220
- | 退出码 | 含义 |
221
- |---|---|
222
- | `0` | 成功 |
223
- | `1` | 运行错误(`CliError` 且 `code !== 'USAGE'`、`needsProject` 未满足、未预期异常) |
224
- | `2` | 用法错误(未知指令、未给出指令、`CliError` 且 `code === 'USAGE'`) |
225
-
226
- `--json` 下失败统一输出 `{ ok: false, error: <code> }` 信封(不打印堆栈):
227
-
228
- | `error` | 触发条件 | 退出码 |
229
- |---|---|---|
230
- | `unknown-command` | 指令名不在注册表内(含 `aw --help <未知指令>`),另带 `name` | 2 |
231
- | `usage` | 未给出任何指令,另带 `hint: 'no command'` | 2 |
232
- | `cli-error` / 具体 `CliError.code` | 指令内部用法或运行错误,另带 `message` | 2(USAGE)/ 1(其他) |
233
- | `no-project` | 标记 `needsProject` 的指令在非检出目录执行 | 1 |
234
- | `internal` | 未预期异常,另带 `message` | 1 |
235
-
236
- 成功侧由各指令自带 `{ ok: true, ... }` 载荷(`config list/get/set/unset/reset/validate`、
237
- `status`、`home`、`version`、`doctor`)。注意服务端 REST 响应(如
238
- `GET /api/workshop/plugins`)不套 `{ code, data }` 信封,与 CLI 的 `--json` 无关。
239
-
240
- ### 常用示例
241
-
242
- ```bash
243
- aw config set server.prod.port 8080 # 改生产端口(重启生效)
244
- aw config set theme.primaryColor '#41c8f4'
245
- aw config get server.dev.port # 值 + 来源
246
- aw config list # 118 个设置项(18 组) + 来源 + 生效方式
247
- aw config validate # 校验 config.yml 与运行时覆盖合法性
248
- aw start --port 3002 # CLI 参数最高优先(输出标注 端口来源: CLI)
249
- aw doctor # 体检:Node/pnpm/AW Home/Docker/MQTT/端口/密钥/产物
250
- aw status --json # 机器可读运行态(含 package.version)
251
- aw plugin list # 三作用域插件清单(含启停态)
252
- aw plugin create my-plugin # 默认脚手架到 <检出>/.AgentWorkShop/plugins/(无检出自取 cwd)
253
- aw plugin create my-plugin --global # 或脚手架到 ~/.AgentWorkShop/plugins/(用户级)
254
- aw plugin disable my-plugin # 停用(写 plugins-state.json,运行中服务约 1s 热重载)
255
- aw stop # 依单实例锁停掉正在跑的 aw 服务
256
- ```
257
-
258
- ### 插件管理(`aw plugin` 的三作用域)
259
-
260
- 宿主按**先扫先占**发现插件,同名优先级 **`builtin` > `project` > `user`**:
261
-
262
- ```
263
- 1. builtin <packageRoot>/server/plugins-builtin/<name>/index.mjs (随包发布,永远存在)
264
- 2. project <检出>/.AgentWorkShop/plugins/<name>/index.mjs (aw plugin create 默认落点)
265
- 3. user ~/.AgentWorkShop/plugins/<name>/index.mjs (aw plugin create --global)
266
- ```
267
-
268
- > 方向提醒:指令注册表是「后扫覆盖 → 项目级 > 用户级 > 内建」,
269
- > 插件发现是「先扫先占 → 内建 > 项目级 > 用户级」,两者相反,不要互相类推。
270
-
271
- - `aw plugin create <name>`:默认落 project 级;`--global`/`-g` 落 user 级;
272
- `--project` 是显式写法、与默认等价;`--force`/`-f` 覆盖已存在插件。
273
- 名字须匹配 `^[a-z][a-z0-9-]{1,31}$`(小写字母开头、2–32 位 a-z0-9-)。
274
- 脚手架生成 `index.mjs`、`client.mjs`、`README.md`。
275
- - `aw plugin list`:列出三个作用域的启停态(`已启用` / `已停用`,带 `+client` 表示有浏览器增强)。
276
- - `aw plugin enable|disable <name>`:按同一顺序(builtin → project → user)查找首个同名插件并切换。
277
- - 启停写入 `<home>/plugins-state.json`,其中 `home = $AW_HOME || ~/.AgentWorkShop`——
278
- **不是配置根**(源码检出内两者不同,配置根是 `<repo>/.AgentWorkShop`)。
279
- - 运行中的服务监听该文件(`fs.watch` + 400ms debounce + 10s 轮询兜底),约 1s 内热重载。
280
- 触发源只有这个状态文件(或一次 enable/disable 往返)——**改插件代码本身不会触发重载**:
281
- 宿主没有插件目录 watcher,但热重载时入口以 `?t=<timestamp>` 破缓存重新 import,
282
- 所以改完代码后**触碰 `plugins-state.json`(或 enable/disable 一次)**即可让宿主装载新模块,
283
- 不需要重启进程;只有 `server/`、`shared/` 核心改动需要重启。
284
- - `aw plugin list` 不显示装载失败;失败清单只在 `GET /api/workshop/plugins` 返回的
285
- `{ plugins, failures }`(另带 `initedAt`)里,该响应不带 `{ code, data }` 信封。
286
- - 插件契约与生命周期钩子(`daq:sample` / `daq:frame` / `dcw:write` / `line:start|stop` /
287
- `config:changed` / `plugins:reloaded` / `event:*` / `server:close`)见 `docs/plugins.md`。
288
-
289
- ### 相关模块
290
-
291
- - **TUI 终端工作台**:`aw tui`(频道 / 成员管理、任务下发、实时监控、HITL 作答),
292
- 手册见 `docs/tui.md` 与 `tui/README.md`。
293
- - **AML 自动建模**:网页 `/aml` 页(`aml` 组 16 项设置)、
294
- `server/api/workshop/aml/**` 下 32 个路由模块、14 个 `aml_*` Agent 工具、
295
- 内置团队 `team-aml-shadow`,手册见 `docs/aml.md`。
296
-
297
- ## 五、指令注册系统(可扩展机制)
298
-
299
- ### 注册模型(约定优于配置)
300
-
301
- 三层扫描、同名后者覆盖(**项目级 > 用户级 > 内建**),放入即注册、无集中清单:
302
-
303
- ```
304
- 1. 内建 <packageRoot>/cli/commands/*.mjs (随包发布,永远存在)
305
- 2. 用户级 ~/.AgentWorkShop/commands/*.mjs (aw register --global)
306
- 3. 项目级 <检出>/.AgentWorkShop/commands/*.mjs (aw register)
307
- ```
308
-
309
- - 只扫描 `*.mjs` / `*.js` / `*.cjs` 文件,忽略以 `_` 开头的文件;
310
- 单个模块加载失败只记入 `registry.failures`(`aw doctor` 会列出),不阻断其他指令。
311
- - 目录名是 **`.AgentWorkShop`**(大写 A / W / S)。Linux、macOS 的文件系统区分大小写,
312
- 目录名大小写写错的指令目录永远扫不到。
313
-
314
- ### 一条指令 = 一个文件
315
-
316
- ```js
317
- // ~/.AgentWorkShop/commands/hello.mjs
318
- export const meta = {
319
- name: 'hello',
320
- group: '自定义',
321
- summary: '问好',
322
- usage: 'aw hello [--name <n>]',
323
- aliases: ['hi'], // 可选
324
- // needsProject: true // 强制要求项目检出上下文
325
- }
326
- export async function run(argv, ctx) {
327
- // argv = { flags, positionals, unknown }
328
- // ctx = { root, mode: 'repo'|'home', home, config, resolveNuxtBin(), bypassEnv(),
329
- // json, debug, commandsDir, configRoot, configPath, settingsPath, dataDir,
330
- // registry, EXIT }
331
- console.log(`你好, ${argv.flags.name ?? 'AW'}! (模式: ${ctx.mode})`)
332
- return 0 // 返回数字 → 即进程退出码
333
- }
334
- ```
335
-
336
- ```bash
337
- aw hello --name 世界 # 放入文件即注册,立即可用
338
- aw hello --help # 帮助由 meta 自动生成
339
- ```
340
-
341
- ### 从外部注册
342
-
343
- ```bash
344
- aw register ./my-tool.mjs # → 项目级(复制 <name>.mjs 进扫描目录)
345
- aw register ./my-tool.mjs --global # → 用户级(所有项目可用)
346
- aw register ./tools-dir/ # 目录内全部 .mjs/.js/.cjs
347
- aw register https://example.com/x.mjs # URL 下载注册
348
- aw register npm:some-cmd-pkg # 生成包装模块(dynamic import 包内 { meta, run })
349
- aw register ./x.mjs --name better-name --force
350
- ```
351
-
352
- `aw register` 只把模块写进扫描目录,没有登记清单;项目级注册需要项目上下文
353
- (非检出且未加 `--global` 时报 `NO_PROJECT`,退出码 1)。
354
-
355
- ## 六、发布到 npm(维护者指南)
356
-
357
- 仓库已配置就绪:`bin`(`aw` / `agentworkshop` 双注册,均指向 `bin/aw.mjs`)、
358
- `files` 白名单(`.output`、`bin`、`cli`、`sdk`、`app`、`server`、`shared`、`i18n`、`public`、
359
- `scripts`、`server/plugins-builtin`、`.AgentWorkShop/prompts`、`tui` 与各配置文件)、
360
- `prepublishOnly`(打包前强制 `node bin/aw.mjs build`)、`postinstall`(AW Home 引导)。
361
-
362
- ```bash
363
- # 1. 发布前自检
364
- npm pack --dry-run # 检查载荷与体积(应含 .output/)
365
- node bin/aw.mjs build # prepublishOnly 已自动执行;本地确认可手动跑
366
-
367
- # 2. 版本与可见性
368
- npm version patch|minor|major
369
- # private 标志已移除;若恢复过可再删: npm pkg delete private
370
- # (可选)改名/加 scope: npm pkg set name=@yourorg/agentworkshop
371
-
372
- # 3. 发布(需 npm 账号;本机默认 registry 是 npmmirror 只读镜像,发布必须指定官方源)
373
- npm login --registry=https://registry.npmjs.org
374
- npm publish --access public --registry=https://registry.npmjs.org
375
-
376
- # 4. 用户侧
377
- npm i -g agentworkshop && aw start
378
- npx agentworkshop start
379
- aw update # 或让用户用内置指令自更新(--check 只查不装)
380
- ```
381
-
382
- **发布模型**:`files` 白名单包含 `.output`(连同 `.output/server/node_modules` 里的运行期依赖),
383
- `prepublishOnly` 会在打包前跑一次 `node bin/aw.mjs build`,因此**发布的 tarball 自带生产构建与依赖**:
384
- npm 安装的用户 `aw start` 直接启动,不会重新构建,也不需要 `pnpm install`;
385
- 只有**源码检出**在缺 `.output` 时会首启构建一次。
386
-
387
- **版本号事实源**:`npm version` 只改 `package.json`;`config.yml` 里的 `app.version`
388
- 只是**回退值**,不是权威——`nuxt.config.ts` 以 `package.json` 版本优先,所以构建期注入的
389
- 版本与 `/api/health` 回显都跟包版本走;该字段历史上的字面量长期与包版本不同步,
390
- 需要版本号时请读 `package.json`(或 `aw status --json` 的 `package.version`),不要依赖它。
391
-
392
- **仓库脚本清单**(`package.json`):`dev` / `build` / `start` 经 `node bin/aw.mjs <cmd>`,
393
- `preview` 等同 `start`,`generate` 是 `nuxt generate`,另有 `cli`、`tui`、`postinstall`、
394
- `prepublishOnly`、`lint`、`lint:fix`、`typecheck`、`prepare`(husky)、`game:*`、`test:api-live`。
395
- **没有名为 `aw` 的 script**——仓库内的 CLI 入口是 `pnpm cli`,TUI 是 `pnpm tui`。
396
-
397
- ## 七、设计要点(工程说明)
398
-
399
- - **薄壳启动器**:全局包只带指令系统与应用载荷;配置引擎
400
- (`shared/config/engine.mjs`)从运行根动态加载,CLI 与网页设置页、dev/prod
401
- 启动脚本三层共享同一事实源。
402
- - **启动链路复用**:`aw dev` 走 `scripts/dev-guard.mjs`(ECONNRESET 守卫 +
403
- .env 预载)、`aw start` 走 `scripts/start.mjs`,与 `pnpm dev` / `pnpm start` 完全同链。
404
- - **代理免疫**:aw 启动的全部子进程自动注入 `NO_PROXY=localhost,127.0.0.1,::1`
405
- (本机系统代理不再劫持回环请求)。
406
- - **安全默认**:AW Home `.env` 引导时生成 24 字节随机 `NUXT_SESSION_PASSWORD`;
407
- prompts(agent 系统提示词)随包分发,首次启动按
408
- `<project>/.AgentWorkShop/prompts` → `~/.AgentWorkShop/prompts` 播种(只补缺失、不覆盖用户定制),
409
- `AW_PROMPTS_DIR` 可显式覆盖,但不再被钉死在包内。
410
- - **单实例**:运行实例在配置根写 `.runtime/aw.lock`(`{ pid, startedAt, mode, port }`),
411
- `aw stop` 据此终止进程树(Windows `taskkill /PID <pid> /T /F`,POSIX 先 SIGTERM 宽限 5s 再 SIGKILL)。
412
- - **窗口/Ctrl+C**:子进程 stdio inherit,SIGINT/SIGTERM 转发,Windows Git Bash / CMD / PS 均可。
1
+ # aw —— AgentWorkShop 指令行工具
2
+
3
+ > 类似 Claude Code 的体验:`npm i -g agentworkshop` 后,在**任意目录**输入 `aw start` 一键启动;
4
+ > 全部配置、数据、自定义指令收敛在配置根 `~/.AgentWorkShop`(可用 `AW_HOME` 重定向),
5
+ > 与当前工作目录和环境路径无关。
6
+
7
+ ```
8
+ __ __ __ __
9
+ \ \ / /__ _ _| \/ |___ _ _ ___
10
+ \ \ / / _ \| '_| |\/| / _ \ ' _(_-<
11
+ \_/\_\___/|_| |_| |_\___/_| |/__/
12
+ ```
13
+
14
+ ## 一、安装
15
+
16
+ ### 1. 从 npm registry 安装(发布后的标准路径)
17
+
18
+ ```bash
19
+ npm install -g agentworkshop
20
+ # 或免安装一次性执行(npx 会自动拉包)
21
+ npx agentworkshop start
22
+ ```
23
+
24
+ `package.json` 的 `bin` 只有两个条目、都指向 `bin/aw.mjs`:`aw` 与 `agentworkshop`
25
+ (npm 安装时自动生成 `aw` / `aw.cmd` / `aw.ps1` 三种 shim)。二者完全等价,
26
+ 所有子命令都必须经由它们调用:
27
+
28
+ ```bash
29
+ aw --help # 或 agentworkshop --help(同义)
30
+ aw --version # agentworkshop --version
31
+ npx agentworkshop doctor # 没有独立的 doctor / tui 可执行文件
32
+ npx -p agentworkshop aw doctor # -p 指定包后执行包内 bin,等效写法
33
+ ```
34
+
35
+ ### 2. 从本仓库安装(开发/内测)
36
+
37
+ ```bash
38
+ # 在仓库根目录执行
39
+ npm install -g . # npm 11 对本地目录 = Junction 链接(改代码即时生效,适合本机开发)
40
+ npm uninstall -g agentworkshop
41
+
42
+ # 或打包安装(与发布后用户体验一致;tarball 已含生产构建 .output)
43
+ npm pack
44
+ npm install -g ./agentworkshop-<version>.tgz
45
+ ```
46
+
47
+ > `--ignore-scripts` 跳过 `postinstall`(`node scripts/home-bootstrap.mjs`,AW Home 引导)
48
+ > 与 `prepare`(husky 初始化),使安装轻量快速;`prepare` 只跑 husky,包内不存在 Nuxt 侧的
49
+ > prepare 脚本,安装期也不涉及任何构建——发布的 tarball 已自带 `.output` 生产构建。
50
+ > 首次 `aw start` / `aw home` 会自动补做 AW Home 引导,无需担心。
51
+
52
+ 仓库内开发走 pnpm(`packageManager: pnpm@11.9.0`):
53
+
54
+ ```bash
55
+ pnpm install
56
+ pnpm cli --help # 仓库内的 CLI 入口(没有名为 aw 的 package script)
57
+ pnpm tui # 终端工作台
58
+ ```
59
+
60
+ ### 3. npx 快速使用(免全局安装)
61
+
62
+ ```bash
63
+ npx agentworkshop start # 拉取并启动(可锁定版本: npx agentworkshop@0.7.63 start)
64
+ npx agentworkshop doctor # 子命令照常可用
65
+ npx -p agentworkshop aw doctor # 需要 aw 这个名字时用 -p 指定包
66
+ ```
67
+
68
+ > 「免全局安装」不等于「不落盘」:`postinstall` 或首次 `aw start` 仍会在
69
+ > `~/.AgentWorkShop` 创建配置根并写入种子文件(见第二节)。要彻底隔离可设 `AW_HOME`。
70
+
71
+ ### 4. 运行时要求
72
+
73
+ | 项 | 值 |
74
+ |---|---|
75
+ | Node.js | `>= 23.4.0`(`engines.node`) |
76
+ | 包管理器 | `pnpm@11.9.0`(`packageManager`,仅源码开发需要) |
77
+ | 模块形态 | ESM(`type: module`) |
78
+ | 许可证 | `Apache-2.0` |
79
+ | 当前版本 | `0.7.63`(`package.json`) |
80
+
81
+ ## 二、首次启动(Claude Code 式)
82
+
83
+ ```bash
84
+ # A. npm 安装(tarball 已含 .output 生产构建):直接启动,不重新构建
85
+ $ aw start
86
+ › 生产服务(home 模式) -> http://0.0.0.0:3001 (端口来源: config.yml)
87
+ › 配置: C:\Users\you\.AgentWorkShop\config.yml · 数据: C:\Users\you\.AgentWorkShop\data
88
+ › 停止: Ctrl+C
89
+
90
+ # B. 源码检出首启(尚无 .output):先构建一次
91
+ $ aw start
92
+ › 首次启动:正在构建生产产物(约 2-5 分钟,仅一次) ...
93
+ › 生产服务(repo 模式) -> http://0.0.0.0:3001 (端口来源: config.yml)
94
+ › 配置: D:\codes\ABO\AgentWorkShop\config.yml · 数据: D:\codes\ABO\AgentWorkShop\.AgentWorkShop\data
95
+ › 停止: Ctrl+C
96
+ ```
97
+
98
+ - 浏览器打开输出的地址即用;`Ctrl+C` 停止;再次 `aw start` 直接复用已有产物。
99
+ - 端口取自有效配置(默认 `server.prod.port` = 3001),`--port` 优先级最高;
100
+ 输出里的 `(端口来源: config.yml|runtime|env|CLI)` 指出这次用的是哪一层。
101
+ - `aw stop` 依单实例锁 `<配置根>/.runtime/aw.lock` 终止运行中的实例。
102
+
103
+ **AW Home**(用户级配置根,默认 `~/.AgentWorkShop`)由 `postinstall`
104
+ (`scripts/home-bootstrap.mjs`)或首次 `aw start` / `aw home` 幂等创建,绝不覆盖已有文件:
105
+
106
+ ```
107
+ ~/.AgentWorkShop/
108
+ ├── config.yml # 主配置(工厂默认种子;改这里改全局行为)
109
+ ├── runtime-settings.json # 运行时覆盖(aw config set 写入)
110
+ ├── .env # 密钥(引导时生成 24 字节随机 NUXT_SESSION_PASSWORD)
111
+ ├── .env.example # 密钥键位示例(随包分发)
112
+ ├── docker-compose.yml # 数采基础设施(MQTT/Timescale)自拉起定义
113
+ ├── plugins-state.json # 插件启停状态(sdk/examples 种子默认记为停用)
114
+ ├── data/ # sqlite/JSON 仓库/备份(全部运行数据落这里)
115
+ ├── logs/
116
+ ├── commands/ # 用户级自定义指令(放入即注册)
117
+ ├── plugins/ # 用户级插件目录(种子来自 sdk/examples/*,只补缺失)
118
+ └── prompts/ # Agent 提示词(首启从包内资产播种,只补缺失不覆盖)
119
+ ```
120
+
121
+ > **repo 模式(源码检出)**:配置根 = `<repo>/.AgentWorkShop`(runtime-settings.json/
122
+ > data/commands/plugins 同上),工厂默认 config.yml/.env 留在检出根随 git 版本化;
123
+ > prompts 按 `<project>/.AgentWorkShop/prompts` → `~/.AgentWorkShop/prompts` 顺序解析
124
+ > (两种模式同构,首启自动从包内资产播种;`AW_PROMPTS_DIR` 可显式覆盖)。
125
+ > 旧位置(`data/`、`server/data/`)的运行时文件会在首次启动时自动迁入配置根——
126
+ > 只复制不删除,sqlite/JSON 仓库与运行时覆盖按「最新者胜」(比较 mtime)收敛。
127
+
128
+ ## 三、双模式路径模型(与环境和路径无关)
129
+
130
+ | | repo 模式 | home 模式(默认安装形态) |
131
+ |---|---|---|
132
+ | 触发条件 | cwd 在项目检出内(有 config.yml + nuxt.config.ts) | 任意其他目录 |
133
+ | 应用代码 | 检出内源码(缺 `.output` 时首启构建一次) | npm 包内载荷(tarball 已含 `.output` 生产构建,直接可跑) |
134
+ | 配置根 | `<repo>/.AgentWorkShop` | `~/.AgentWorkShop` |
135
+ | 工厂默认 config.yml/.env | `<repo>/config.yml`(git 版本化) | `~/.AgentWorkShop/config.yml` |
136
+ | 运行时覆盖 | `<repo>/.AgentWorkShop/runtime-settings.json` | `~/.AgentWorkShop/runtime-settings.json` |
137
+ | 运行数据 | `<repo>/.AgentWorkShop/data/` | `~/.AgentWorkShop/data/` |
138
+ | prompts | `<project>/.AgentWorkShop/prompts` → 回退 `~/.AgentWorkShop/prompts` | 同左(首启从包内资产播种) |
139
+
140
+ ### 配置根解析(三条规则)
141
+
142
+ `shared/config/home.mjs` 的 `resolveRunMode()` 按顺序判定,**先命中先返回**:
143
+
144
+ | # | 条件 | 生效配置根 | 生效 config.yml |
145
+ |---|---|---|---|
146
+ | 1 | cwd 向上能找到真实存在的 `./.AgentWorkShop` 目录 | 该目录(repo 模式;纯工作区亦可) | 检出根 `config.yml`;非检出则配置根内 `config.yml`,缺失回退包内 |
147
+ | 2 | cwd 向上是源码检出(config.yml + nuxt.config.ts)但**没有** `./.AgentWorkShop` | `~/.AgentWorkShop`(repo 模式) | `<检出根>/config.yml`(工厂默认仍读检出) |
148
+ | 3 | 其余任意目录 | `~/.AgentWorkShop`(home 模式) | 配置根 `config.yml`,缺失回退包内 |
149
+
150
+ - `AW_HOME=D:\aw-home` 覆盖用户级根(三条规则里的 `~/.AgentWorkShop` 全部改指此处)。
151
+ - `AW_MODE=home` 强制 home 形态(跳过规则 1、2;启动器对全局安装的应用载荷注入,
152
+ 防止包目录自身含 config.yml + nuxt.config.ts 被误判为检出)。
153
+ - `AW_DATA_DIR` 可单独指定运行数据目录(默认取配置根 `data/`)。
154
+
155
+ ### 设置与环境变量模型
156
+
157
+ - 优先级(CLI 与网页设置页、dev/prod 启动脚本共用同一引擎 `shared/config/engine.mjs`):
158
+ `config.yml 默认 < runtime-settings.json 运行时覆盖 < 环境变量 / CLI 显式参数`。
159
+ - 设置描述符共 **118 项、18 组**(`aw config list` 即打印 118 行):
160
+
161
+ | 组 | 项数 | 组 | 项数 | 组 | 项数 | 组 | 项数 |
162
+ |---|---|---|---|---|---|---|---|
163
+ | `server` | 3 | `app` | 2 | `api` | 4 | `theme` | 2 |
164
+ | `i18n` | 1 | `time` | 1 | `security` | 2 | `daq` | 27 |
165
+ | `memory` | 10 | `omp` | 4 | `harness` | 12 | `dcw` | 4 |
166
+ | `workshop` | 15 | `backup` | 3 | `retention` | 5 | `log` | 1 |
167
+ | `aml` | 16 | `mcp` | 1 | | | | |
168
+
169
+ 其中 `live`(保存即生效)39 项、`restart`(重启对应模式后生效)78 项,
170
+ `aw config list` 每行末尾会标注 `live` 或 `restart`。
171
+ - 环境变量映射:`AW_<KEY 大写、点转下划线>`(如 `AW_SERVER_DEV_PORT`),
172
+ 另加描述符显式声明的历史 `aliases`(优先级:`AW_<KEY>` 高于 `aliases` 声明顺序)。
173
+ - 惯例变量 `PORT`/`NITRO_PORT`/`NUXT_PORT` 与 `HOST`/`NITRO_HOST` **仅在传入 mode 时**生效
174
+ (只有启动器链路才知道该映射到 dev 还是 prod 端口)。
175
+ - `aw config set` 写入**配置根**的 `runtime-settings.json`(源码检出内配置根可能与
176
+ `~/.AgentWorkShop` 不同,成功行会打印实际 `settingsPath`)。
177
+
178
+ ## 四、指令总览
179
+
180
+ 内建指令共 **15** 条(`cli/commands/*.mjs`,一文件一指令):
181
+
182
+ | 指令 | 别名 | 参数 | 说明 |
183
+ |---|---|---|---|
184
+ | `aw start` | `s`, `prod`, `preview` | `--port <n>` `--host <h>` `--skip-infra` | 生产服务(检出内外皆可;缺产物自动构建一次) |
185
+ | `aw dev` | `d` | `--port <n>` `--host <h>` | 开发服务器(需项目检出;断连守卫 + .env 预载) |
186
+ | `aw build` | `b`, `compile` | — | 生产构建 → `.output/`(需项目检出) |
187
+ | `aw stop` | — | `--home` | 依单实例锁终止运行中的实例(`--home` 强制以 home 配置根为目标) |
188
+ | `aw config` | `cfg`, `c` | 子命令 `list`(`ls`) / `get` / `set` / `unset` / `reset`(`--yes`/`-y`/`--force`) / `validate`(`check`) | 读取 / 写入 / 校验运行配置 |
189
+ | `aw plugin` | `plugins`, `plug` | 子命令 `list`(`ls`) / `create`(`new`/`add`) / `enable` / `disable`;`create` 另接 `--global`/`-g`、`--project`、`--force`/`-f` | 插件管理(三作用域查看 / 脚手架 / 启停,热重载) |
190
+ | `aw mcp` | `mcps` | `--doctor` `--print-config` `--base <url>` `--port <n>` | 工业 MCP stdio 服务(38 工具;自动发现运行实例端口;受系统设置 `mcp.enabled` 门控,env `AW_MCP_ENABLED` 可覆盖) |
191
+ | `aw home` | `hw` | — | 查看 / 初始化配置根(幂等) |
192
+ | `aw init` | `create`, `new` | `--force` `--no-install` `--silent` | 脚手架一个新项目检出 |
193
+ | `aw register` | `reg`, `install-cmd` | `--name <n>` `--global`/`-g` `--force`/`-f` | 注册指令模块(本地文件 / 目录 / URL / npm 包) |
194
+ | `aw doctor` | `dsk`, `check-env` | — | 环境 / 配置 / 服务健康检查(`--json` 输出 `{ ok, checks }`) |
195
+ | `aw status` | `st`, `info` | — | 运行态总览(模式 / 配置源 / 服务 / 构建 / 指令数 / 关键有效配置) |
196
+ | `aw update` | `upgrade` | `--check` `--registry <url>` `--yes` | 对比 npm 远端最新版本,有新版就地更新全局安装 |
197
+ | `aw tui` | `tui` | `--url <baseUrl>` `--token <ut-*>` `--channel <名>` | 终端工作台 |
198
+ | `aw version` | `v` | — | 版本信息 |
199
+
200
+ > `aw status` 报告模式、配置路径、构建产物是否存在、运行时覆盖键、指令条数与关键有效配置;
201
+ > **不含 uptime**,版本号只在 `aw status --json` 的 `package.version` 字段里出现。
202
+
203
+ ### 全局参数
204
+
205
+ 全局项只有 `cli/core/args.mjs` 的 `GLOBAL_OPTS` 这 5 条:
206
+
207
+ | 参数 | 说明 |
208
+ |---|---|
209
+ | `--json` | 机器可读输出(成功 / 失败信封见下) |
210
+ | `--debug` | 调试日志(未预期异常额外打印堆栈) |
211
+ | `--help`, `-h` | 总帮助,或指定指令帮助(`aw help <cmd>` 同义) |
212
+ | `--version`, `-v` | 打印 `agentworkshop <version>` |
213
+ | `--root <dir>` | 显式指定项目根(该目录须含 `config.yml`) |
214
+
215
+ `--port` / `--host` 是 `start` / `dev` 的**指令级**参数,不是全局参数;
216
+ `AW_HOME` / `AW_MODE=home` / `AW_DATA_DIR` 是**环境变量**,不是命令行参数。
217
+
218
+ ### 退出码与 `--json` 契约
219
+
220
+ | 退出码 | 含义 |
221
+ |---|---|
222
+ | `0` | 成功 |
223
+ | `1` | 运行错误(`CliError` 且 `code !== 'USAGE'`、`needsProject` 未满足、未预期异常) |
224
+ | `2` | 用法错误(未知指令、未给出指令、`CliError` 且 `code === 'USAGE'`) |
225
+
226
+ `--json` 下失败统一输出 `{ ok: false, error: <code> }` 信封(不打印堆栈):
227
+
228
+ | `error` | 触发条件 | 退出码 |
229
+ |---|---|---|
230
+ | `unknown-command` | 指令名不在注册表内(含 `aw --help <未知指令>`),另带 `name` | 2 |
231
+ | `usage` | 未给出任何指令,另带 `hint: 'no command'` | 2 |
232
+ | `cli-error` / 具体 `CliError.code` | 指令内部用法或运行错误,另带 `message` | 2(USAGE)/ 1(其他) |
233
+ | `no-project` | 标记 `needsProject` 的指令在非检出目录执行 | 1 |
234
+ | `internal` | 未预期异常,另带 `message` | 1 |
235
+
236
+ 成功侧由各指令自带 `{ ok: true, ... }` 载荷(`config list/get/set/unset/reset/validate`、
237
+ `status`、`home`、`version`、`doctor`)。注意服务端 REST 响应(如
238
+ `GET /api/workshop/plugins`)不套 `{ code, data }` 信封,与 CLI 的 `--json` 无关。
239
+
240
+ ### 常用示例
241
+
242
+ ```bash
243
+ aw config set server.prod.port 8080 # 改生产端口(重启生效)
244
+ aw config set theme.primaryColor '#41c8f4'
245
+ aw config get server.dev.port # 值 + 来源
246
+ aw config list # 119 个设置项(18 组) + 来源 + 生效方式
247
+ aw config validate # 校验 config.yml 与运行时覆盖合法性
248
+ aw start --port 3002 # CLI 参数最高优先(输出标注 端口来源: CLI)
249
+ aw doctor # 体检:Node/pnpm/AW Home/Docker/MQTT/端口/密钥/产物
250
+ aw status --json # 机器可读运行态(含 package.version)
251
+ aw plugin list # 三作用域插件清单(含启停态)
252
+ aw plugin create my-plugin # 默认脚手架到 <检出>/.AgentWorkShop/plugins/(无检出自取 cwd)
253
+ aw plugin create my-plugin --global # 或脚手架到 ~/.AgentWorkShop/plugins/(用户级)
254
+ aw plugin disable my-plugin # 停用(写 plugins-state.json,运行中服务约 1s 热重载)
255
+ aw stop # 依单实例锁停掉正在跑的 aw 服务
256
+ ```
257
+
258
+ ### 插件管理(`aw plugin` 的三作用域)
259
+
260
+ 宿主按**先扫先占**发现插件,同名优先级 **`builtin` > `project` > `user`**:
261
+
262
+ ```
263
+ 1. builtin <packageRoot>/server/plugins-builtin/<name>/index.mjs (随包发布,永远存在)
264
+ 2. project <检出>/.AgentWorkShop/plugins/<name>/index.mjs (aw plugin create 默认落点)
265
+ 3. user ~/.AgentWorkShop/plugins/<name>/index.mjs (aw plugin create --global)
266
+ ```
267
+
268
+ > 方向提醒:指令注册表是「后扫覆盖 → 项目级 > 用户级 > 内建」,
269
+ > 插件发现是「先扫先占 → 内建 > 项目级 > 用户级」,两者相反,不要互相类推。
270
+
271
+ - `aw plugin create <name>`:默认落 project 级;`--global`/`-g` 落 user 级;
272
+ `--project` 是显式写法、与默认等价;`--force`/`-f` 覆盖已存在插件。
273
+ 名字须匹配 `^[a-z][a-z0-9-]{1,31}$`(小写字母开头、2–32 位 a-z0-9-)。
274
+ 脚手架生成 `index.mjs`、`client.mjs`、`README.md`。
275
+ - `aw plugin list`:列出三个作用域的启停态(`已启用` / `已停用`,带 `+client` 表示有浏览器增强)。
276
+ - `aw plugin enable|disable <name>`:按同一顺序(builtin → project → user)查找首个同名插件并切换。
277
+ - 启停写入 `<home>/plugins-state.json`,其中 `home = $AW_HOME || ~/.AgentWorkShop`——
278
+ **不是配置根**(源码检出内两者不同,配置根是 `<repo>/.AgentWorkShop`)。
279
+ - 运行中的服务监听该文件(`fs.watch` + 400ms debounce + 10s 轮询兜底),约 1s 内热重载。
280
+ 触发源只有这个状态文件(或一次 enable/disable 往返)——**改插件代码本身不会触发重载**:
281
+ 宿主没有插件目录 watcher,但热重载时入口以 `?t=<timestamp>` 破缓存重新 import,
282
+ 所以改完代码后**触碰 `plugins-state.json`(或 enable/disable 一次)**即可让宿主装载新模块,
283
+ 不需要重启进程;只有 `server/`、`shared/` 核心改动需要重启。
284
+ - `aw plugin list` 不显示装载失败;失败清单只在 `GET /api/workshop/plugins` 返回的
285
+ `{ plugins, failures }`(另带 `initedAt`)里,该响应不带 `{ code, data }` 信封。
286
+ - 插件契约与生命周期钩子(`daq:sample` / `daq:frame` / `dcw:write` / `line:start|stop` /
287
+ `config:changed` / `plugins:reloaded` / `event:*` / `server:close`)见 `docs/plugins.md`。
288
+
289
+ ### 相关模块
290
+
291
+ - **TUI 终端工作台**:`aw tui`(频道 / 成员管理、任务下发、实时监控、HITL 作答),
292
+ 手册见 `docs/tui.md` 与 `tui/README.md`。
293
+ - **AML 自动建模**:网页 `/aml` 页(`aml` 组 16 项设置)、
294
+ `server/api/workshop/aml/**` 下 32 个路由模块、14 个 `aml_*` Agent 工具、
295
+ 内置团队 `team-aml-shadow`,手册见 `docs/aml.md`。
296
+
297
+ ## 五、指令注册系统(可扩展机制)
298
+
299
+ ### 注册模型(约定优于配置)
300
+
301
+ 三层扫描、同名后者覆盖(**项目级 > 用户级 > 内建**),放入即注册、无集中清单:
302
+
303
+ ```
304
+ 1. 内建 <packageRoot>/cli/commands/*.mjs (随包发布,永远存在)
305
+ 2. 用户级 ~/.AgentWorkShop/commands/*.mjs (aw register --global)
306
+ 3. 项目级 <检出>/.AgentWorkShop/commands/*.mjs (aw register)
307
+ ```
308
+
309
+ - 只扫描 `*.mjs` / `*.js` / `*.cjs` 文件,忽略以 `_` 开头的文件;
310
+ 单个模块加载失败只记入 `registry.failures`(`aw doctor` 会列出),不阻断其他指令。
311
+ - 目录名是 **`.AgentWorkShop`**(大写 A / W / S)。Linux、macOS 的文件系统区分大小写,
312
+ 目录名大小写写错的指令目录永远扫不到。
313
+
314
+ ### 一条指令 = 一个文件
315
+
316
+ ```js
317
+ // ~/.AgentWorkShop/commands/hello.mjs
318
+ export const meta = {
319
+ name: 'hello',
320
+ group: '自定义',
321
+ summary: '问好',
322
+ usage: 'aw hello [--name <n>]',
323
+ aliases: ['hi'], // 可选
324
+ // needsProject: true // 强制要求项目检出上下文
325
+ }
326
+ export async function run(argv, ctx) {
327
+ // argv = { flags, positionals, unknown }
328
+ // ctx = { root, mode: 'repo'|'home', home, config, resolveNuxtBin(), bypassEnv(),
329
+ // json, debug, commandsDir, configRoot, configPath, settingsPath, dataDir,
330
+ // registry, EXIT }
331
+ console.log(`你好, ${argv.flags.name ?? 'AW'}! (模式: ${ctx.mode})`)
332
+ return 0 // 返回数字 → 即进程退出码
333
+ }
334
+ ```
335
+
336
+ ```bash
337
+ aw hello --name 世界 # 放入文件即注册,立即可用
338
+ aw hello --help # 帮助由 meta 自动生成
339
+ ```
340
+
341
+ ### 从外部注册
342
+
343
+ ```bash
344
+ aw register ./my-tool.mjs # → 项目级(复制 <name>.mjs 进扫描目录)
345
+ aw register ./my-tool.mjs --global # → 用户级(所有项目可用)
346
+ aw register ./tools-dir/ # 目录内全部 .mjs/.js/.cjs
347
+ aw register https://example.com/x.mjs # URL 下载注册
348
+ aw register npm:some-cmd-pkg # 生成包装模块(dynamic import 包内 { meta, run })
349
+ aw register ./x.mjs --name better-name --force
350
+ ```
351
+
352
+ `aw register` 只把模块写进扫描目录,没有登记清单;项目级注册需要项目上下文
353
+ (非检出且未加 `--global` 时报 `NO_PROJECT`,退出码 1)。
354
+
355
+ ## 六、发布到 npm(维护者指南)
356
+
357
+ 仓库已配置就绪:`bin`(`aw` / `agentworkshop` 双注册,均指向 `bin/aw.mjs`)、
358
+ `files` 白名单(`.output`、`bin`、`cli`、`sdk`、`app`、`server`、`shared`、`i18n`、`public`、
359
+ `scripts`、`server/plugins-builtin`、`.AgentWorkShop/prompts`、`tui` 与各配置文件)、
360
+ `prepublishOnly`(打包前强制 `node bin/aw.mjs build`)、`postinstall`(AW Home 引导)。
361
+
362
+ ```bash
363
+ # 1. 发布前自检
364
+ npm pack --dry-run # 检查载荷与体积(应含 .output/)
365
+ node bin/aw.mjs build # prepublishOnly 已自动执行;本地确认可手动跑
366
+
367
+ # 2. 版本与可见性
368
+ npm version patch|minor|major
369
+ # private 标志已移除;若恢复过可再删: npm pkg delete private
370
+ # (可选)改名/加 scope: npm pkg set name=@yourorg/agentworkshop
371
+
372
+ # 3. 发布(需 npm 账号;本机默认 registry 是 npmmirror 只读镜像,发布必须指定官方源)
373
+ npm login --registry=https://registry.npmjs.org
374
+ npm publish --access public --registry=https://registry.npmjs.org
375
+
376
+ # 4. 用户侧
377
+ npm i -g agentworkshop && aw start
378
+ npx agentworkshop start
379
+ aw update # 或让用户用内置指令自更新(--check 只查不装)
380
+ ```
381
+
382
+ **发布模型**:`files` 白名单包含 `.output`(连同 `.output/server/node_modules` 里的运行期依赖),
383
+ `prepublishOnly` 会在打包前跑一次 `node bin/aw.mjs build`,因此**发布的 tarball 自带生产构建与依赖**:
384
+ npm 安装的用户 `aw start` 直接启动,不会重新构建,也不需要 `pnpm install`;
385
+ 只有**源码检出**在缺 `.output` 时会首启构建一次。
386
+
387
+ **版本号事实源**:`npm version` 只改 `package.json`;`config.yml` 里的 `app.version`
388
+ 只是**回退值**,不是权威——`nuxt.config.ts` 以 `package.json` 版本优先,所以构建期注入的
389
+ 版本与 `/api/health` 回显都跟包版本走;该字段历史上的字面量长期与包版本不同步,
390
+ 需要版本号时请读 `package.json`(或 `aw status --json` 的 `package.version`),不要依赖它。
391
+
392
+ **仓库脚本清单**(`package.json`):`dev` / `build` / `start` 经 `node bin/aw.mjs <cmd>`,
393
+ `preview` 等同 `start`,`generate` 是 `nuxt generate`,另有 `cli`、`tui`、`postinstall`、
394
+ `prepublishOnly`、`lint`、`lint:fix`、`typecheck`、`prepare`(husky)、`game:*`、`test:api-live`。
395
+ **没有名为 `aw` 的 script**——仓库内的 CLI 入口是 `pnpm cli`,TUI 是 `pnpm tui`。
396
+
397
+ ## 七、设计要点(工程说明)
398
+
399
+ - **薄壳启动器**:全局包只带指令系统与应用载荷;配置引擎
400
+ (`shared/config/engine.mjs`)从运行根动态加载,CLI 与网页设置页、dev/prod
401
+ 启动脚本三层共享同一事实源。
402
+ - **启动链路复用**:`aw dev` 走 `scripts/dev-guard.mjs`(ECONNRESET 守卫 +
403
+ .env 预载)、`aw start` 走 `scripts/start.mjs`,与 `pnpm dev` / `pnpm start` 完全同链。
404
+ - **代理免疫**:aw 启动的全部子进程自动注入 `NO_PROXY=localhost,127.0.0.1,::1`
405
+ (本机系统代理不再劫持回环请求)。
406
+ - **安全默认**:AW Home `.env` 引导时生成 24 字节随机 `NUXT_SESSION_PASSWORD`;
407
+ prompts(agent 系统提示词)随包分发,首次启动按
408
+ `<project>/.AgentWorkShop/prompts` → `~/.AgentWorkShop/prompts` 播种(只补缺失、不覆盖用户定制),
409
+ `AW_PROMPTS_DIR` 可显式覆盖,但不再被钉死在包内。
410
+ - **单实例**:运行实例在配置根写 `.runtime/aw.lock`(`{ pid, startedAt, mode, port }`),
411
+ `aw stop` 据此终止进程树(Windows `taskkill /PID <pid> /T /F`,POSIX 先 SIGTERM 宽限 5s 再 SIGKILL)。
412
+ - **窗口/Ctrl+C**:子进程 stdio inherit,SIGINT/SIGTERM 转发,Windows Git Bash / CMD / PS 均可。