agentworkshop 0.7.3 → 0.7.5

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 (130) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/B9Yie5HN.js +2 -0
  3. package/.output/public/_nuxt/CN7Zh8GQ.js +1 -0
  4. package/.output/public/_nuxt/CdSgfcYR.js +1 -0
  5. package/.output/public/_nuxt/CdfAP_IH2.js +1 -0
  6. package/.output/public/_nuxt/ChnfyQHz.js +1 -0
  7. package/.output/public/_nuxt/{BkKYf8xY.js → CyygA0q4.js} +4 -4
  8. package/.output/public/_nuxt/{Bz40vyZS.js → DFnGFEav.js} +7 -7
  9. package/.output/public/_nuxt/Xaf_HIR3.js +1 -0
  10. package/.output/public/_nuxt/ZugRk0CM2.js +4 -0
  11. package/.output/public/_nuxt/builds/latest.json +1 -1
  12. package/.output/public/_nuxt/builds/meta/55c10854-ee0e-4be4-924b-a1b0e100fe11.json +1 -0
  13. package/.output/public/_nuxt/{default.iGJy9dP-.css → default.D17kXlD6.css} +1 -1
  14. package/.output/public/_nuxt/monitor.CmwpEUCI.css +1 -0
  15. package/.output/public/_nuxt/yIKY_V1P.js +1 -0
  16. package/.output/server/chunks/_/nitro.mjs +1131 -920
  17. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  18. package/.output/server/chunks/build/{TownView-BkHxMiwZ.mjs → TownView-Bl8Gkcxi.mjs} +3 -3
  19. package/.output/server/chunks/build/{TownView-BkHxMiwZ.mjs.map → TownView-Bl8Gkcxi.mjs.map} +1 -1
  20. package/.output/server/chunks/build/{_id_-Bna1_JuB.mjs → _id_-CWLFGZjV.mjs} +2 -2
  21. package/.output/server/chunks/build/{_id_-Bna1_JuB.mjs.map → _id_-CWLFGZjV.mjs.map} +1 -1
  22. package/.output/server/chunks/build/_id_-GnRJPykX.mjs +1 -1
  23. package/.output/server/chunks/build/{_wsId_-CzLDGT_V.mjs → _wsId_-BhQMjyHG.mjs} +3 -4
  24. package/.output/server/chunks/build/{_wsId_-CzLDGT_V.mjs.map → _wsId_-BhQMjyHG.mjs.map} +1 -1
  25. package/.output/server/chunks/build/{daq-CmeM4u5u.mjs → daq-BOgpn9sl.mjs} +4 -5
  26. package/.output/server/chunks/build/daq-BOgpn9sl.mjs.map +1 -0
  27. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs +1 -1
  28. package/.output/server/chunks/build/{default-Dt6xLdpd.mjs → default-CKJWhkot.mjs} +60 -17
  29. package/.output/server/chunks/build/{default-Dt6xLdpd.mjs.map → default-CKJWhkot.mjs.map} +1 -1
  30. package/.output/server/chunks/build/{logs-CUQt1z7D.mjs → logs-Dyk0I2I9.mjs} +3 -4
  31. package/.output/server/chunks/build/logs-Dyk0I2I9.mjs.map +1 -0
  32. package/.output/server/chunks/build/{monitor-yNoV98rf.mjs → monitor-KW8WLOJd.mjs} +34 -33
  33. package/.output/server/chunks/build/{monitor-yNoV98rf.mjs.map → monitor-KW8WLOJd.mjs.map} +1 -1
  34. package/.output/server/chunks/build/{town-BN4vQPb8.mjs → town-_4tEEEVW.mjs} +3 -4
  35. package/.output/server/chunks/build/town-_4tEEEVW.mjs.map +1 -0
  36. package/.output/server/chunks/build/useDaqStream-hwkhJHFU.mjs +1 -1
  37. package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs +1 -1
  38. package/.output/server/chunks/build/{useWorkshopWs-xcdeiSmJ.mjs → useWorkshopWs-B3j5wIAK.mjs} +177 -3
  39. package/.output/server/chunks/build/useWorkshopWs-B3j5wIAK.mjs.map +1 -0
  40. package/.output/server/chunks/build/{workshop-CLhwe5eo.mjs → workshop-k0XZTFKg.mjs} +2 -3
  41. package/.output/server/chunks/build/workshop-k0XZTFKg.mjs.map +1 -0
  42. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  43. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -1
  44. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +32 -0
  45. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -0
  46. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +56 -0
  47. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -0
  48. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  49. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  50. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  51. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  52. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  53. package/.output/server/chunks/routes/renderer.mjs +2 -2
  54. package/.output/server/chunks/virtual/entry.mjs +17 -11
  55. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  56. package/.output/server/package.json +1 -1
  57. package/README.md +435 -434
  58. package/app/components/AppHeader.vue +138 -0
  59. package/app/composables/workshop/useWorkshopWs.ts +4 -0
  60. package/app/pages/monitor.vue +17 -1
  61. package/app/stores/workshop/hitl.ts +80 -0
  62. package/bin/aw.mjs +0 -0
  63. package/cli/commands/stop.mjs +108 -0
  64. package/cli/commands/tui.mjs +19 -0
  65. package/config.yml +134 -134
  66. package/docs/tui.md +43 -0
  67. package/i18n/locales/en.ts +3 -0
  68. package/i18n/locales/zh-CN.ts +3 -0
  69. package/package.json +140 -144
  70. package/scripts/_spike-pitui.mjs +116 -0
  71. package/scripts/e2e-aw-tui-global.mjs +277 -0
  72. package/scripts/e2e-hitl-live.mjs +323 -0
  73. package/scripts/e2e-line-live.mjs +144 -0
  74. package/scripts/test-hitl-registry.ts +112 -0
  75. package/scripts/test-tui-commands.mjs +148 -0
  76. package/scripts/test-tui-reducers.mjs +72 -0
  77. package/scripts/tsconfig.json +14 -0
  78. package/scripts/tui-smoke.mjs +100 -0
  79. package/server/api/workshop/hitl/pending.get.ts +28 -0
  80. package/server/api/workshop/hitl/respond.post.ts +67 -0
  81. package/server/api/workshop/ws.ts +30 -1
  82. package/server/data/daqs.json +39 -17
  83. package/server/data/dcw-lines.json +14 -0
  84. package/server/data/dcw-products.json +35 -0
  85. package/server/data/dcw-recipes.json +140 -0
  86. package/server/data/dcw-rollback.json +111 -1
  87. package/server/data/dcw-runs.json +135 -90
  88. package/server/data/dcw-writes.json +120 -0
  89. package/server/data/dcws.json +400 -275
  90. package/server/data/line-runs.json +11 -1
  91. package/server/plugins/workshop.ts +7 -0
  92. package/server/services/workshop/agents/harness-terminal.ts +92 -25
  93. package/server/services/workshop/agents/hitl-registry.ts +181 -0
  94. package/server/services/workshop/agents/tool-approvals.ts +15 -0
  95. package/server/services/workshop/scene-events.ts +19 -9
  96. package/shared/workshop-protocol.ts +37 -0
  97. package/tui/README.md +74 -0
  98. package/tui/aw-tui.mjs +406 -0
  99. package/tui/commands/index.mjs +287 -0
  100. package/tui/components/chat-log.mjs +42 -0
  101. package/tui/components/hitl-card.mjs +36 -0
  102. package/tui/components/monitor-pane.mjs +39 -0
  103. package/tui/components/root.mjs +53 -0
  104. package/tui/components/status-bar.mjs +33 -0
  105. package/tui/lib/api.mjs +82 -0
  106. package/tui/lib/config.mjs +58 -0
  107. package/tui/lib/pickers.mjs +102 -0
  108. package/tui/lib/reducers.mjs +218 -0
  109. package/tui/lib/state.mjs +86 -0
  110. package/tui/lib/virtual-terminal.mjs +48 -0
  111. package/tui/lib/ws.mjs +124 -0
  112. package/tui/theme.mjs +38 -0
  113. package/.output/public/_nuxt/B7V9IfTL.js +0 -1
  114. package/.output/public/_nuxt/BE5QyG5J2.js +0 -1
  115. package/.output/public/_nuxt/BuKI8z-5.js +0 -1
  116. package/.output/public/_nuxt/D0C5Q0di.js +0 -1
  117. package/.output/public/_nuxt/DC-QMEk1.js +0 -2
  118. package/.output/public/_nuxt/DEkQ0qQ02.js +0 -1
  119. package/.output/public/_nuxt/builds/meta/c6c01cdd-762e-4fb8-86e7-753c5185b856.json +0 -1
  120. package/.output/public/_nuxt/dt2tKE95.js +0 -4
  121. package/.output/public/_nuxt/i_MKObHo.js +0 -1
  122. package/.output/public/_nuxt/monitor.41fCD6TB.css +0 -1
  123. package/.output/public/_nuxt/tpDMVY5w.js +0 -1
  124. package/.output/server/chunks/build/connection-Dc0fn6yd.mjs +0 -120
  125. package/.output/server/chunks/build/connection-Dc0fn6yd.mjs.map +0 -1
  126. package/.output/server/chunks/build/daq-CmeM4u5u.mjs.map +0 -1
  127. package/.output/server/chunks/build/logs-CUQt1z7D.mjs.map +0 -1
  128. package/.output/server/chunks/build/town-BN4vQPb8.mjs.map +0 -1
  129. package/.output/server/chunks/build/useWorkshopWs-xcdeiSmJ.mjs.map +0 -1
  130. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +0 -1
package/config.yml CHANGED
@@ -1,134 +1,134 @@
1
- # ============================================================
2
- # AgentWorkShop 运行配置 —— 单一事实来源(Single Source of Truth)
3
- # ------------------------------------------------------------
4
- # 本文件由 nuxt.config.ts(构建/开发期)与 scripts/start.mjs(生产启动期)
5
- # 读取并解析,驱动整个运行时。修改后重启对应模式即可生效:
6
- # 开发:pnpm dev -> 读取 server.dev
7
- # 生产:pnpm start -> 读取 server.prod
8
- # ============================================================
9
-
10
- app:
11
- name: AgentWorkShop
12
- title: AgentWorkShop
13
- version: 0.7.3
14
- description: 基于 Nuxt 4 的配置驱动运行范式
15
-
16
- # 运行模式(dev/prod 实际由启动命令决定,此处仅作运行时展示)
17
- mode: dev
18
-
19
- # ------------------------------------------------------------
20
- # 服务端口:dev 与 prod 可分别自定义
21
- # ------------------------------------------------------------
22
- server:
23
- host: 0.0.0.0
24
- dev:
25
- port: 3000
26
- prod:
27
- port: 3001
28
-
29
- # 后端 API(前端 axios 基址 + 服务端行为均由本段驱动)
30
- api:
31
- baseURL: /api
32
- timeout: 15000
33
- pageSize: 20 # 服务端默认分页大小
34
- maxPageSize: 100 # 服务端分页大小上限
35
-
36
- # 国际化
37
- i18n:
38
- defaultLocale: zh-CN
39
- locales:
40
- - code: zh-CN
41
- name: 简体中文
42
- - code: en
43
- name: English
44
-
45
- # 主题
46
- theme:
47
- # Agent Harness · Digital Twin 控制室色板:品牌绿(交互/确认/DAQ)+ 数据青,见 TownView.vue --hud-*
48
- primaryColor: "#35e0a0"
49
- mode: light # light | dark
50
-
51
- # 安全配置
52
- # 数据采集基础设施(数采 DAQ;地址与 docker-compose.yml 默认一致)
53
- # startInfrastructure: never=启动探测,不通且有 Docker 则自动 docker compose 拉起;
54
- # always=仅 Docker 拉起;never=只直连。连接失败降级并警告,可前端一键重连。
55
- daq:
56
- startInfrastructure: auto
57
- mqtt:
58
- host: 127.0.0.1
59
- port: 1883
60
- timescale:
61
- host: 127.0.0.1
62
- port: 5432
63
- user: postgres
64
- password: awshop
65
- database: awshop
66
- # 对象存储(图像帧;MinIO,S3 兼容)。不可达时自动降级本地磁盘 data/daq-objects/,采集不中断。
67
- objectstore:
68
- host: 127.0.0.1
69
- port: 9000
70
- accessKey: awshop
71
- secretKey: awshop-secret
72
- bucket: daq
73
-
74
- security:
75
- # Session cookie 加密密钥(nuxt-auth-utils 使用)
76
- # 生产环境必须修改为强随机值;可用环境变量 NUXT_SESSION_PASSWORD 覆盖
77
- sessionPassword: awshop-dev-secret-change-me-0123456789
78
- # HITL 审批超时窗 ms(超时默认拒绝;env HITL_TIMEOUT_MS 兼容)
79
- # hitl_timeout_ms: 180000
80
-
81
- # ------------------------------------------------------------
82
- # 以下运行语义组:全部键均可被 env AW_<键>(点转下划线)或历史别名覆盖,
83
- # 优先级 config.yml < data/runtime-settings.json < 环境变量。缺省即用默认。
84
- # ------------------------------------------------------------
85
-
86
- # Agent 记忆系统(env AW_MEMORY_*)
87
- memory:
88
- primer_tokens: 300 # 记忆引子 token 预算(AW_MEMORY_PRIMER_TOKENS)
89
- inject_total: 500 # 单次注入总硬顶(AW_MEMORY_INJECT_TOTAL)
90
- maintenance_ms: 21600000 # 维护调度周期(AW_MEMORY_MAINTENANCE_MS)
91
- expire_days: 180 # 情景记忆保留天数(AW_MEMORY_EXPIRE_DAYS)
92
- expire_session_days: 14 # 会话记忆保留天数(AW_MEMORY_EXPIRE_SESSION_DAYS)
93
- cap: 500 # 条目驱逐上限(AW_MEMORY_CAP)
94
- reflect_trigger: 8 # 空闲反思触发阈值(AW_MEMORY_REFLECT_TRIGGER)
95
- embed_base_url: '' # OpenAI 兼容 /embeddings 基址(AW_MEMORY_EMBED_BASE_URL;空=纯 FTS)
96
- embed_model: '' # 向量模型名(AW_MEMORY_EMBED_MODEL)
97
- embed_api_key: '' # Bearer 密钥(AW_MEMORY_EMBED_API_KEY)
98
-
99
- # omp Agent Harness(env AW_OMP_COMPACT_*)
100
- omp:
101
- compact_enabled: true # 上下文自动压缩总开关(AW_OMP_COMPACT_ENABLED=0 可关)
102
- compact_threshold: 0.7 # 触发压缩的上下文占用比例(AW_OMP_COMPACT_THRESHOLD)
103
- compact_min_interval_ms: 300000 # 两次压缩最小间隔(AW_OMP_COMPACT_MIN_INTERVAL_MS)
104
- compact_wait_ms: 120000 # 等待压缩完成超时(AW_OMP_COMPACT_WAIT_MS)
105
-
106
- # 数控写控制(env DCW_ROLLBACK_*)
107
- dcw:
108
- rollback_cooldown_ms: 300000 # 回退后同向重写冷却(DCW_ROLLBACK_COOLDOWN_MS)
109
- rollback_min_window_ms: 120000 # 判定最小观察窗(DCW_ROLLBACK_MIN_WINDOW_MS)
110
- rollback_baseline_ms: 600000 # 基线回看窗(DCW_ROLLBACK_BASELINE_MS)
111
- rollback_stale_ms: 1800000 # open 记录接管阈值(DCW_ROLLBACK_STALE_MS)
112
-
113
- # 车间运行(env WORKSHOP_IDLE_*)
114
- workshop:
115
- idle_sweep_ms: 30000 # 空闲 agent 扫描周期(WORKSHOP_IDLE_SWEEP_MS)
116
- idle_grace_ms: 120000 # 空闲卸载宽限(WORKSHOP_IDLE_GRACE_MS)
117
-
118
- # 数据备份(env BACKUP_*)
119
- backup:
120
- disabled: false # BACKUP_DISABLED=1 关闭
121
- interval_hours: 24 # 备份间隔(BACKUP_INTERVAL_HOURS)
122
- keep: 7 # 保留份数(BACKUP_KEEP)
123
-
124
- # 数据保留清理(env RETENTION_DISABLED / AW_EVENTS_RETENTION_D 等)
125
- retention:
126
- disabled: false # RETENTION_DISABLED=1 / AW_RETENTION_DISABLED=1 关闭
127
- events_days: 7 # WS 事件流保留天数(AW_EVENTS_RETENTION_D)
128
- messages_days: 30 # Channel 消息(AW_MESSAGES_RETENTION_D)
129
- audit_days: 90 # 审计日志(AW_AUDIT_RETENTION_D)
130
- approval_days: 180 # 审批历史(AW_APPROVAL_RETENTION_D)
131
-
132
- # 服务端日志(env AWSHOP_LOG_LEVEL)
133
- log:
134
- level: info # debug | info | warn | error
1
+ # ============================================================
2
+ # AgentWorkShop 运行配置 —— 单一事实来源(Single Source of Truth)
3
+ # ------------------------------------------------------------
4
+ # 本文件由 nuxt.config.ts(构建/开发期)与 scripts/start.mjs(生产启动期)
5
+ # 读取并解析,驱动整个运行时。修改后重启对应模式即可生效:
6
+ # 开发:pnpm dev -> 读取 server.dev
7
+ # 生产:pnpm start -> 读取 server.prod
8
+ # ============================================================
9
+
10
+ app:
11
+ name: AgentWorkShop
12
+ title: AgentWorkShop
13
+ version: 0.7.5
14
+ description: 基于 Nuxt 4 的配置驱动运行范式
15
+
16
+ # 运行模式(dev/prod 实际由启动命令决定,此处仅作运行时展示)
17
+ mode: dev
18
+
19
+ # ------------------------------------------------------------
20
+ # 服务端口:dev 与 prod 可分别自定义
21
+ # ------------------------------------------------------------
22
+ server:
23
+ host: 0.0.0.0
24
+ dev:
25
+ port: 3000
26
+ prod:
27
+ port: 3001
28
+
29
+ # 后端 API(前端 axios 基址 + 服务端行为均由本段驱动)
30
+ api:
31
+ baseURL: /api
32
+ timeout: 15000
33
+ pageSize: 20 # 服务端默认分页大小
34
+ maxPageSize: 100 # 服务端分页大小上限
35
+
36
+ # 国际化
37
+ i18n:
38
+ defaultLocale: zh-CN
39
+ locales:
40
+ - code: zh-CN
41
+ name: 简体中文
42
+ - code: en
43
+ name: English
44
+
45
+ # 主题
46
+ theme:
47
+ # Agent Harness · Digital Twin 控制室色板:品牌绿(交互/确认/DAQ)+ 数据青,见 TownView.vue --hud-*
48
+ primaryColor: "#35e0a0"
49
+ mode: light # light | dark
50
+
51
+ # 安全配置
52
+ # 数据采集基础设施(数采 DAQ;地址与 docker-compose.yml 默认一致)
53
+ # startInfrastructure: never=启动探测,不通且有 Docker 则自动 docker compose 拉起;
54
+ # always=仅 Docker 拉起;never=只直连。连接失败降级并警告,可前端一键重连。
55
+ daq:
56
+ startInfrastructure: auto
57
+ mqtt:
58
+ host: 127.0.0.1
59
+ port: 1883
60
+ timescale:
61
+ host: 127.0.0.1
62
+ port: 5432
63
+ user: postgres
64
+ password: awshop
65
+ database: awshop
66
+ # 对象存储(图像帧;MinIO,S3 兼容)。不可达时自动降级本地磁盘 data/daq-objects/,采集不中断。
67
+ objectstore:
68
+ host: 127.0.0.1
69
+ port: 9000
70
+ accessKey: awshop
71
+ secretKey: awshop-secret
72
+ bucket: daq
73
+
74
+ security:
75
+ # Session cookie 加密密钥(nuxt-auth-utils 使用)
76
+ # 生产环境必须修改为强随机值;可用环境变量 NUXT_SESSION_PASSWORD 覆盖
77
+ sessionPassword: awshop-dev-secret-change-me-0123456789
78
+ # HITL 审批超时窗 ms(超时默认拒绝;env HITL_TIMEOUT_MS 兼容)
79
+ # hitl_timeout_ms: 180000
80
+
81
+ # ------------------------------------------------------------
82
+ # 以下运行语义组:全部键均可被 env AW_<键>(点转下划线)或历史别名覆盖,
83
+ # 优先级 config.yml < data/runtime-settings.json < 环境变量。缺省即用默认。
84
+ # ------------------------------------------------------------
85
+
86
+ # Agent 记忆系统(env AW_MEMORY_*)
87
+ memory:
88
+ primer_tokens: 300 # 记忆引子 token 预算(AW_MEMORY_PRIMER_TOKENS)
89
+ inject_total: 500 # 单次注入总硬顶(AW_MEMORY_INJECT_TOTAL)
90
+ maintenance_ms: 21600000 # 维护调度周期(AW_MEMORY_MAINTENANCE_MS)
91
+ expire_days: 180 # 情景记忆保留天数(AW_MEMORY_EXPIRE_DAYS)
92
+ expire_session_days: 14 # 会话记忆保留天数(AW_MEMORY_EXPIRE_SESSION_DAYS)
93
+ cap: 500 # 条目驱逐上限(AW_MEMORY_CAP)
94
+ reflect_trigger: 8 # 空闲反思触发阈值(AW_MEMORY_REFLECT_TRIGGER)
95
+ embed_base_url: '' # OpenAI 兼容 /embeddings 基址(AW_MEMORY_EMBED_BASE_URL;空=纯 FTS)
96
+ embed_model: '' # 向量模型名(AW_MEMORY_EMBED_MODEL)
97
+ embed_api_key: '' # Bearer 密钥(AW_MEMORY_EMBED_API_KEY)
98
+
99
+ # omp Agent Harness(env AW_OMP_COMPACT_*)
100
+ omp:
101
+ compact_enabled: true # 上下文自动压缩总开关(AW_OMP_COMPACT_ENABLED=0 可关)
102
+ compact_threshold: 0.7 # 触发压缩的上下文占用比例(AW_OMP_COMPACT_THRESHOLD)
103
+ compact_min_interval_ms: 300000 # 两次压缩最小间隔(AW_OMP_COMPACT_MIN_INTERVAL_MS)
104
+ compact_wait_ms: 120000 # 等待压缩完成超时(AW_OMP_COMPACT_WAIT_MS)
105
+
106
+ # 数控写控制(env DCW_ROLLBACK_*)
107
+ dcw:
108
+ rollback_cooldown_ms: 300000 # 回退后同向重写冷却(DCW_ROLLBACK_COOLDOWN_MS)
109
+ rollback_min_window_ms: 120000 # 判定最小观察窗(DCW_ROLLBACK_MIN_WINDOW_MS)
110
+ rollback_baseline_ms: 600000 # 基线回看窗(DCW_ROLLBACK_BASELINE_MS)
111
+ rollback_stale_ms: 1800000 # open 记录接管阈值(DCW_ROLLBACK_STALE_MS)
112
+
113
+ # 车间运行(env WORKSHOP_IDLE_*)
114
+ workshop:
115
+ idle_sweep_ms: 30000 # 空闲 agent 扫描周期(WORKSHOP_IDLE_SWEEP_MS)
116
+ idle_grace_ms: 120000 # 空闲卸载宽限(WORKSHOP_IDLE_GRACE_MS)
117
+
118
+ # 数据备份(env BACKUP_*)
119
+ backup:
120
+ disabled: false # BACKUP_DISABLED=1 关闭
121
+ interval_hours: 24 # 备份间隔(BACKUP_INTERVAL_HOURS)
122
+ keep: 7 # 保留份数(BACKUP_KEEP)
123
+
124
+ # 数据保留清理(env RETENTION_DISABLED / AW_EVENTS_RETENTION_D 等)
125
+ retention:
126
+ disabled: false # RETENTION_DISABLED=1 / AW_RETENTION_DISABLED=1 关闭
127
+ events_days: 7 # WS 事件流保留天数(AW_EVENTS_RETENTION_D)
128
+ messages_days: 30 # Channel 消息(AW_MESSAGES_RETENTION_D)
129
+ audit_days: 90 # 审计日志(AW_AUDIT_RETENTION_D)
130
+ approval_days: 180 # 审批历史(AW_APPROVAL_RETENTION_D)
131
+
132
+ # 服务端日志(env AWSHOP_LOG_LEVEL)
133
+ log:
134
+ level: info # debug | info | warn | error
package/docs/tui.md ADDED
@@ -0,0 +1,43 @@
1
+ # TUI 终端工作台(`aw tui`)
2
+
3
+ 与 AgentTeam 交互作业的终端客户端。渲染层基于 `@earendil-works/pi-tui`(openclaw
4
+ 同款组件化 TUI 框架),代码在仓库 `tui/` 目录(`.mjs` 直跑,零构建);与服务端
5
+ 的关系和 WebUI 平级 —— 同一套 REST + AEP WebSocket,不引入新的服务端形态。
6
+
7
+ > 完整用法/按键/命令表见 [`tui/README.md`](../tui/README.md);本文是架构与集成说明。
8
+
9
+ ## 能力总览
10
+
11
+ - **频道管理**:`/channel new|use|add` 创建频道(可内联建 lead)、切换订阅、
12
+ 放置 Agent 实例(模板克隆或内联定义)。
13
+ - **任务下发**:普通文本发 lead(`priority=task`);`/send` immediate 直发
14
+ (忙碌时 steer 注入 omp 当前回合);`/task` 正式任务(goal/loop/pipeline)。
15
+ - **实时观察**:AEP WS 订阅(断线 `lastSeq` 续传);`/monitor <agent>` 打开
16
+ 右侧终端镜像面板(omp `rpc-ui` 会话的净化帧流)。
17
+ - **HITL 统一作答**:omp ask 对话框与 dcw 下发审批的待办在 `/hitl` 聚合,
18
+ 作答经 `POST /api/workshop/hitl/respond` 路由回 omp stdin / 审批裁决。
19
+
20
+ ## HITL 集成(服务端增量)
21
+
22
+ 服务端新增 `server/services/workshop/agents/hitl-registry.ts`(进程内待办登记处):
23
+
24
+ - 两条既有 HITL 链路统一登记:`harness-terminal.ts`(omp `extension_ui_request`,
25
+ park 语义:零订阅倒计时 `security.hitl_timeout_ms`,订阅即暂停)与
26
+ `tool-approvals.ts`(dcw 审批,180s 超时同源)。
27
+ - AEP 新帧:`hitl.request` / `hitl.resolved`(频道流 publish + 全员直推各一路,
28
+ WebUI/TUI 不依赖频道订阅即达;快照恢复走 `GET /api/workshop/hitl/pending`)。
29
+ - 统一应答:`POST /api/workshop/hitl/respond`(幂等,已落定返回 409
30
+ `ALREADY_RESOLVED`;用户 token + channel 所有权校验 + audit 留痕)。
31
+
32
+ WebUI 侧:`app/stores/workshop/hitl.ts` 消费帧 → `AppHeader` 铃标 → 点击跳
33
+ `/monitor?agentId=&channelId=` 直达该 Agent 终端作答(OmpTerminalPanel 既有
34
+ 作答界面不变)。
35
+
36
+ ## 测试
37
+
38
+ | 命令 | 覆盖 |
39
+ |---|---|
40
+ | `npx tsx scripts/test-hitl-registry.ts` | registry 登记/落定/订阅/park 暂停与超时(22 断言) |
41
+ | `node scripts/test-tui-reducers.mjs` | AEP 帧 → 会话状态归约(15 断言) |
42
+ | `node scripts/test-tui-commands.mjs` | 命令解析/分发(21 断言) |
43
+ | `node scripts/tui-smoke.mjs` | 无头 e2e:虚拟终端驱动真实 TUI ↔ 真实 dev server(12 断言) |
@@ -1850,6 +1850,9 @@ export default {
1850
1850
  kwsdot0002: 'Syncing in real time…',
1851
1851
  kwsdot0003: 'Connecting…',
1852
1852
  kwsdot0004: 'Connection lost',
1853
+ hitlBadge: 'Needs human input',
1854
+ hitlKindOmp: 'omp dialog',
1855
+ hitlKindDcw: 'write approval',
1853
1856
  },
1854
1857
  ompTerminalPanel: {
1855
1858
  k14jk3nu001: ' {p0}· 对话框已撤销({p1}){p2}',
@@ -1849,6 +1849,9 @@ export default {
1849
1849
  kwsdot0002: '实时同步中…',
1850
1850
  kwsdot0003: '连接中…',
1851
1851
  kwsdot0004: '连接已断开',
1852
+ hitlBadge: '待人工处理',
1853
+ hitlKindOmp: 'omp 对话框',
1854
+ hitlKindDcw: '下发审批',
1852
1855
  },
1853
1856
  ompTerminalPanel: {
1854
1857
  k14jk3nu001: ' {p0}· 对话框已撤销({p1}){p2}',
package/package.json CHANGED
@@ -1,144 +1,140 @@
1
- {
2
- "name": "agentworkshop",
3
- "version": "0.7.3",
4
- "type": "module",
5
- "description": "AgentWorkShop 软件开发系统 - 基于 Nuxt 4 的配置驱动运行范式",
6
- "license": "PolyForm-Noncommercial-1.0.0",
7
- "exports": {
8
- ".": {
9
- "types": "./sdk/index.d.mts",
10
- "default": "./sdk/index.mjs"
11
- },
12
- "./sdk": {
13
- "types": "./sdk/index.d.mts",
14
- "default": "./sdk/index.mjs"
15
- },
16
- "./sdk/client": {
17
- "types": "./sdk/client.d.mts",
18
- "default": "./sdk/client.mjs"
19
- },
20
- "./package.json": "./package.json"
21
- },
22
- "bin": {
23
- "aw": "bin/aw.mjs",
24
- "agentworkshop": "bin/aw.mjs"
25
- },
26
- "files": [
27
- ".output",
28
- "bin",
29
- "cli",
30
- "sdk",
31
- "app",
32
- "server",
33
- "shared",
34
- "i18n",
35
- "public",
36
- "scripts",
37
- ".AgentWorkShop/prompts",
38
- "config.yml",
39
- "nuxt.config.ts",
40
- "tsconfig.json",
41
- "uno.config.ts",
42
- "docker-compose.yml",
43
- ".env.example",
44
- "README-zh.md",
45
- "docs/cli.md",
46
- "docs/plugins.md",
47
- "docs/sdk.md"
48
- ],
49
- "packageManager": "pnpm@11.9.0",
50
- "engines": {
51
- "node": ">=23.4.0"
52
- },
53
- "scripts": {
54
- "dev": "node bin/aw.mjs dev",
55
- "build": "node bin/aw.mjs build",
56
- "start": "node bin/aw.mjs start",
57
- "generate": "nuxt generate",
58
- "preview": "node bin/aw.mjs start",
59
- "cli": "node bin/aw.mjs",
60
- "postinstall": "node scripts/home-bootstrap.mjs",
61
- "prepublishOnly": "node bin/aw.mjs build",
62
- "lint": "eslint .",
63
- "lint:fix": "eslint . --fix",
64
- "typecheck": "nuxt typecheck",
65
- "prepare": "husky",
66
- "game:test": "tsx scripts/test-agent-brain.ts && tsx scripts/test-game-session.ts",
67
- "test:api-live": "node scripts/api-live-e2e.mjs",
68
- "game:verify": "node scripts/verify-game.mjs",
69
- "game:build-assets": "node scripts/build-player-sheet.mjs",
70
- "game:build-wuwa": "node scripts/build-wuwa-assets.mjs",
71
- "game:build-models": "node scripts/build-character-models.mjs",
72
- "game:build-world": "node scripts/build-world-map.mjs",
73
- "game:build-model3d": "node scripts/build-model-3d.mjs"
74
- },
75
- "lint-staged": {
76
- "*.{js,mjs,cjs,ts,vue}": "eslint --fix"
77
- },
78
- "dependencies": {
79
- "@ant-design-vue/nuxt": "^1.4.6",
80
- "@ant-design/icons-vue": "^7.0.1",
81
- "@fontsource-variable/fraunces": "^5.3.0",
82
- "@fontsource-variable/geist": "^5.3.0",
83
- "@fontsource-variable/geist-mono": "^5.3.0",
84
- "@fontsource-variable/inter": "^5.3.0",
85
- "@fontsource/eb-garamond": "^5.3.0",
86
- "@fontsource/ibm-plex-mono": "^5.3.0",
87
- "@iconify-json/tabler": "^1.2.0",
88
- "@modelcontextprotocol/sdk": "^1.30.0",
89
- "@nuxtjs/i18n": "^9.0.0",
90
- "@pinia/nuxt": "^0.11.0",
91
- "@unocss/nuxt": "^66.0.0",
92
- "@unocss/preset-attributify": "^66.0.0",
93
- "@unocss/preset-icons": "^66.7.5",
94
- "@unocss/preset-typography": "^66.0.0",
95
- "@vueuse/core": "^13.0.0",
96
- "@vueuse/nuxt": "^13.0.0",
97
- "@xterm/addon-fit": "^0.11.0",
98
- "@xterm/xterm": "^6.0.0",
99
- "ant-design-vue": "^4.2.6",
100
- "axios": "^1.7.9",
101
- "echarts": "^5.6.0",
102
- "h3": "2.0.1-rc.26",
103
- "js-yaml": "^4.1.0",
104
- "minio": "^8.0.7",
105
- "modbus-serial": "^8.0.25",
106
- "mqtt": "^5.15.2",
107
- "node-opcua": "^2.178.0",
108
- "nuxt": "^4.0.0",
109
- "nuxt-auth-utils": "^0.5.0",
110
- "pg": "^8.23.0",
111
- "phaser": "^4.0.0",
112
- "pinia": "^3.0.0",
113
- "pinia-plugin-persistedstate": "^4.2.0",
114
- "sqlite-vec": "^0.1.9",
115
- "three": "^0.185.1",
116
- "unocss": "^66.0.0",
117
- "unplugin-icons": "^22.0.0",
118
- "vue": "^3.5.13",
119
- "vue-echarts": "^7.0.3",
120
- "vue-router": "^4.5.0",
121
- "zod": "^3.24.1"
122
- },
123
- "devDependencies": {
124
- "@commitlint/cli": "^19.6.1",
125
- "@commitlint/config-conventional": "^19.6.0",
126
- "@nuxt/eslint": "^1.0.0",
127
- "@types/js-yaml": "^4.0.9",
128
- "@types/node": "^26.2.0",
129
- "@types/three": "^0.185.4",
130
- "eslint": "^9.17.0",
131
- "husky": "^9.1.7",
132
- "lint-staged": "^15.3.0",
133
- "pngjs": "^7.0.0",
134
- "puppeteer-core": "^25.5.0",
135
- "tsx": "^4.23.12",
136
- "typescript": "^5.7.3",
137
- "vue-tsc": "^3.3.10"
138
- },
139
- "pnpm": {
140
- "ignoredBuiltDependencies": [
141
- "@serialport/bindings-cpp"
142
- ]
143
- }
144
- }
1
+ {
2
+ "name": "agentworkshop",
3
+ "version": "0.7.5",
4
+ "type": "module",
5
+ "description": "AgentWorkShop 软件开发系统 - 基于 Nuxt 4 的配置驱动运行范式",
6
+ "license": "PolyForm-Noncommercial-1.0.0",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./sdk/index.d.mts",
10
+ "default": "./sdk/index.mjs"
11
+ },
12
+ "./sdk": {
13
+ "types": "./sdk/index.d.mts",
14
+ "default": "./sdk/index.mjs"
15
+ },
16
+ "./sdk/client": {
17
+ "types": "./sdk/client.d.mts",
18
+ "default": "./sdk/client.mjs"
19
+ },
20
+ "./package.json": "./package.json"
21
+ },
22
+ "bin": {
23
+ "aw": "bin/aw.mjs",
24
+ "agentworkshop": "bin/aw.mjs"
25
+ },
26
+ "files": [
27
+ ".output",
28
+ "bin",
29
+ "cli",
30
+ "sdk",
31
+ "app",
32
+ "server",
33
+ "shared",
34
+ "i18n",
35
+ "public",
36
+ "scripts",
37
+ ".AgentWorkShop/prompts",
38
+ "config.yml",
39
+ "nuxt.config.ts",
40
+ "tsconfig.json",
41
+ "uno.config.ts",
42
+ "docker-compose.yml",
43
+ ".env.example",
44
+ "README-zh.md",
45
+ "docs/cli.md",
46
+ "docs/plugins.md",
47
+ "docs/sdk.md",
48
+ "docs/tui.md",
49
+ "tui"
50
+ ],
51
+ "engines": {
52
+ "node": ">=23.4.0"
53
+ },
54
+ "lint-staged": {
55
+ "*.{js,mjs,cjs,ts,vue}": "eslint --fix"
56
+ },
57
+ "dependencies": {
58
+ "@ant-design-vue/nuxt": "^1.4.6",
59
+ "@ant-design/icons-vue": "^7.0.1",
60
+ "@earendil-works/pi-tui": "^0.84.4",
61
+ "@fontsource-variable/fraunces": "^5.3.0",
62
+ "@fontsource-variable/geist": "^5.3.0",
63
+ "@fontsource-variable/geist-mono": "^5.3.0",
64
+ "@fontsource-variable/inter": "^5.3.0",
65
+ "@fontsource/eb-garamond": "^5.3.0",
66
+ "@fontsource/ibm-plex-mono": "^5.3.0",
67
+ "@iconify-json/tabler": "^1.2.0",
68
+ "@modelcontextprotocol/sdk": "^1.30.0",
69
+ "@nuxtjs/i18n": "^9.0.0",
70
+ "@pinia/nuxt": "^0.11.0",
71
+ "@unocss/nuxt": "^66.0.0",
72
+ "@unocss/preset-attributify": "^66.0.0",
73
+ "@unocss/preset-icons": "^66.7.5",
74
+ "@unocss/preset-typography": "^66.0.0",
75
+ "@vueuse/core": "^13.0.0",
76
+ "@vueuse/nuxt": "^13.0.0",
77
+ "@xterm/addon-fit": "^0.11.0",
78
+ "@xterm/xterm": "^6.0.0",
79
+ "ant-design-vue": "^4.2.6",
80
+ "axios": "^1.7.9",
81
+ "echarts": "^5.6.0",
82
+ "h3": "2.0.1-rc.26",
83
+ "js-yaml": "^4.1.0",
84
+ "minio": "^8.0.7",
85
+ "modbus-serial": "^8.0.25",
86
+ "mqtt": "^5.15.2",
87
+ "node-opcua": "^2.178.0",
88
+ "nuxt": "^4.0.0",
89
+ "nuxt-auth-utils": "^0.5.0",
90
+ "pg": "^8.23.0",
91
+ "phaser": "^4.0.0",
92
+ "pinia": "^3.0.0",
93
+ "pinia-plugin-persistedstate": "^4.2.0",
94
+ "sqlite-vec": "^0.1.9",
95
+ "three": "^0.185.1",
96
+ "unocss": "^66.0.0",
97
+ "unplugin-icons": "^22.0.0",
98
+ "vue": "^3.5.13",
99
+ "vue-echarts": "^7.0.3",
100
+ "vue-router": "^4.5.0",
101
+ "zod": "^3.24.1"
102
+ },
103
+ "devDependencies": {
104
+ "@commitlint/cli": "^19.6.1",
105
+ "@commitlint/config-conventional": "^19.6.0",
106
+ "@nuxt/eslint": "^1.0.0",
107
+ "@types/js-yaml": "^4.0.9",
108
+ "@types/node": "^26.2.0",
109
+ "@types/three": "^0.185.4",
110
+ "eslint": "^9.17.0",
111
+ "husky": "^9.1.7",
112
+ "lint-staged": "^15.3.0",
113
+ "pngjs": "^7.0.0",
114
+ "puppeteer-core": "^25.5.0",
115
+ "tsx": "^4.23.12",
116
+ "typescript": "^5.7.3",
117
+ "vue-tsc": "^3.3.10"
118
+ },
119
+ "scripts": {
120
+ "dev": "node bin/aw.mjs dev",
121
+ "build": "node bin/aw.mjs build",
122
+ "start": "node bin/aw.mjs start",
123
+ "generate": "nuxt generate",
124
+ "preview": "node bin/aw.mjs start",
125
+ "cli": "node bin/aw.mjs",
126
+ "tui": "node tui/aw-tui.mjs",
127
+ "postinstall": "node scripts/home-bootstrap.mjs",
128
+ "lint": "eslint .",
129
+ "lint:fix": "eslint . --fix",
130
+ "typecheck": "nuxt typecheck",
131
+ "game:test": "tsx scripts/test-agent-brain.ts && tsx scripts/test-game-session.ts",
132
+ "test:api-live": "node scripts/api-live-e2e.mjs",
133
+ "game:verify": "node scripts/verify-game.mjs",
134
+ "game:build-assets": "node scripts/build-player-sheet.mjs",
135
+ "game:build-wuwa": "node scripts/build-wuwa-assets.mjs",
136
+ "game:build-models": "node scripts/build-character-models.mjs",
137
+ "game:build-world": "node scripts/build-world-map.mjs",
138
+ "game:build-model3d": "node scripts/build-model-3d.mjs"
139
+ }
140
+ }