@co0ontty/wand 4.94.0 → 4.95.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 +4 -1
- package/dist/ai-text-runner.d.ts +4 -0
- package/dist/ai-text-runner.js +44 -4
- package/dist/build-info.json +3 -3
- package/dist/cli-api.d.ts +1 -0
- package/dist/cli-api.js +7 -2
- package/dist/cli.js +47 -0
- package/dist/conversation-execution-preference.d.ts +7 -0
- package/dist/conversation-execution-preference.js +26 -0
- package/dist/conversation-organize-contract.d.ts +70 -0
- package/dist/conversation-organize-contract.js +1 -0
- package/dist/conversation-organize-service.d.ts +46 -0
- package/dist/conversation-organize-service.js +505 -0
- package/dist/conversation-organize.d.ts +41 -0
- package/dist/conversation-organize.js +97 -0
- package/dist/conversation-service.d.ts +2 -1
- package/dist/conversation-service.js +10 -4
- package/dist/core-turn-tracker.d.ts +5 -1
- package/dist/core-turn-tracker.js +17 -1
- package/dist/decision-expert-service.d.ts +2 -0
- package/dist/decision-expert-service.js +17 -1
- package/dist/decision-skill.d.ts +0 -1
- package/dist/decision-skill.js +5 -64
- package/dist/deployment-lock.js +4 -1
- package/dist/employee-im-config.d.ts +17 -0
- package/dist/employee-im-config.js +85 -0
- package/dist/employee-im-lifecycle.d.ts +35 -0
- package/dist/employee-im-lifecycle.js +168 -0
- package/dist/employee-im-types.d.ts +80 -0
- package/dist/employee-im-types.js +32 -0
- package/dist/employee-im.d.ts +35 -0
- package/dist/employee-im.js +157 -0
- package/dist/employee-knowledge.js +3 -2
- package/dist/employee-text.d.ts +1 -0
- package/dist/employee-text.js +28 -13
- package/dist/git-quick-commit.js +21 -3
- package/dist/managed-skill.d.ts +6 -0
- package/dist/managed-skill.js +99 -0
- package/dist/model-auto-assign.js +1 -1
- package/dist/process-manager.js +1 -1
- package/dist/prompt-optimizer.js +1 -1
- package/dist/scheduled-task-activity.d.ts +16 -0
- package/dist/scheduled-task-activity.js +42 -0
- package/dist/scheduled-task-agenda.d.ts +20 -0
- package/dist/scheduled-task-agenda.js +82 -0
- package/dist/scheduled-task-calendar.d.ts +37 -0
- package/dist/scheduled-task-calendar.js +131 -0
- package/dist/scheduled-task-read-range.d.ts +7 -0
- package/dist/scheduled-task-read-range.js +35 -0
- package/dist/scheduled-task-service.d.ts +6 -1
- package/dist/scheduled-task-service.js +61 -1
- package/dist/scheduled-task-state.d.ts +1 -1
- package/dist/scheduled-task-types.d.ts +38 -0
- package/dist/server-asset-routes.js +3 -2
- package/dist/server-conversation-organize-routes.d.ts +4 -0
- package/dist/server-conversation-organize-routes.js +75 -0
- package/dist/server-conversation-routes.js +2 -1
- package/dist/server-employee-im-routes.d.ts +9 -0
- package/dist/server-employee-im-routes.js +40 -0
- package/dist/server-employee-routes.js +1 -1
- package/dist/server-scheduled-task-routes.js +24 -0
- package/dist/server-session-lifecycle-routes.js +8 -3
- package/dist/server-session-routes.js +18 -0
- package/dist/server-session-worktree-routes.js +3 -3
- package/dist/server-workspace-routes.d.ts +3 -0
- package/dist/server-workspace-routes.js +14 -1
- package/dist/server.js +39 -5
- package/dist/session-ai-context.d.ts +11 -1
- package/dist/session-ai-context.js +21 -2
- package/dist/session-metadata-service.js +1 -1
- package/dist/session-registry.js +6 -0
- package/dist/session-request.js +3 -0
- package/dist/session-topic.js +1 -1
- package/dist/silicon-employee-draft.js +1 -1
- package/dist/speech-polisher-service.d.ts +2 -0
- package/dist/speech-polisher-service.js +28 -6
- package/dist/storage/conversation-organization-repository.d.ts +13 -0
- package/dist/storage/conversation-organization-repository.js +33 -0
- package/dist/storage/migrations.js +10 -0
- package/dist/storage/secrets-repository.d.ts +7 -0
- package/dist/storage/secrets-repository.js +28 -1
- package/dist/storage/tasks-repository.js +4 -0
- package/dist/storage-schedules.d.ts +8 -1
- package/dist/storage-schedules.js +24 -0
- package/dist/storage-schema.js +9 -0
- package/dist/storage.d.ts +6 -1
- package/dist/storage.js +13 -0
- package/dist/structured-session-manager.d.ts +1 -0
- package/dist/structured-session-manager.js +18 -4
- package/dist/system-ai-call.d.ts +49 -0
- package/dist/system-ai-call.js +28 -0
- package/dist/system-ai-session-recorder.d.ts +30 -0
- package/dist/system-ai-session-recorder.js +239 -0
- package/dist/system-cli.d.ts +6 -0
- package/dist/system-cli.js +93 -0
- package/dist/system-skill.d.ts +5 -0
- package/dist/system-skill.js +19 -0
- package/dist/task-organize-contract.js +2 -2
- package/dist/task-title-organize-service.d.ts +1 -1
- package/dist/task-title-organize-service.js +9 -5
- package/dist/task-title-organize.js +13 -6
- package/dist/task-title-service.js +1 -1
- package/dist/task-title.js +1 -1
- package/dist/user-memory.js +1 -1
- package/dist/wand-task-sync.js +2 -1
- package/dist/web-ui/content/ai-teams.js +12 -12
- package/dist/web-ui/content/module-manifest.json +1 -1
- package/dist/web-ui/content/modules/{0051bd3d55f10ab7/library-bridge-DTMQIHVJ.js → 09842858f9d34a4e/library-bridge.js} +2 -2
- package/dist/web-ui/content/modules/1021ae40c5761e3f/sha256.js +1 -0
- package/dist/web-ui/content/modules/134f6120c0acaf57/host.js +1 -0
- package/dist/web-ui/content/modules/1d518ae6ed66fe5a/chunk.js +3 -0
- package/dist/web-ui/content/modules/1f93b5bd70381bb6/runtime.js +539 -0
- package/dist/web-ui/content/modules/26c68d4decdd18b4/markdown.js +1 -0
- package/dist/web-ui/content/modules/2ed8bafd5b4fecc5/workspace-window.js +1 -0
- package/dist/web-ui/content/modules/31ffc2f05f87652c/host.js +1 -0
- package/dist/web-ui/content/modules/35aaa85b9d0937af/chunk.js +20 -0
- package/dist/web-ui/content/modules/3664d0620f124292/chunk.js +3 -0
- package/dist/web-ui/content/modules/3cea480770cb184c/chunk.js +1 -0
- package/dist/web-ui/content/modules/3d12adf54647c1e2/host-bridge.js +1 -0
- package/dist/web-ui/content/modules/459cca2482a9a4ba/host.js +18 -0
- package/dist/web-ui/content/modules/474c9647130ef3e9/task-board-host.js +2 -0
- package/dist/web-ui/content/modules/4f74d2517f29134c/chunk.js +15 -0
- package/dist/web-ui/content/modules/52a218d74002a011/host.js +30 -0
- package/dist/web-ui/content/modules/54f2b10659ef8475/employee-card.js +1 -0
- package/dist/web-ui/content/modules/703fb1c670f7b199/chunk.js +1 -0
- package/dist/web-ui/content/modules/75511da23f051718/host.js +1 -0
- package/dist/web-ui/content/modules/{0051bd3d55f10ab7/host-2IVIZ2YC.js → 799b19da948bec8d/host.js} +3 -2
- package/dist/web-ui/content/modules/{0051bd3d55f10ab7/host-XNIR3NTJ.js → 7ef73b6c20d2504f/host.js} +3 -2
- package/dist/web-ui/content/modules/8f8f7a0a8874d29a/host.js +1 -0
- package/dist/web-ui/content/modules/90f2cd73cdf3a2cd/chat-render.js +25 -0
- package/dist/web-ui/content/modules/9510efce6caaa9ec/chunk.js +1 -0
- package/dist/web-ui/content/modules/9a0e65188739957f/chunk.js +67 -0
- package/dist/web-ui/content/modules/9eae1033f47e4526/host.js +1 -0
- package/dist/web-ui/content/modules/a2c5b246e57fa165/panel.js +1 -0
- package/dist/web-ui/content/modules/a50ce28f45bfeb2e/host.js +1 -0
- package/dist/web-ui/content/modules/adfc53789d5bedb2/chunk.js +1 -0
- package/dist/web-ui/content/modules/bcecb0cc14b7d2bd/chunk.js +1 -0
- package/dist/web-ui/content/modules/c4706f47c23f33e4/host.js +1 -0
- package/dist/web-ui/content/modules/{0051bd3d55f10ab7/host-Q524TMSR.js → c7de873095c061ab/host.js} +4 -3
- package/dist/web-ui/content/modules/d789f84a3f8765ae/page.js +6 -0
- package/dist/web-ui/content/modules/db4e2dbc7aed6353/chunk.js +1 -0
- package/dist/web-ui/content/modules/e4fd9906521b4aa3/chunk.js +1 -0
- package/dist/web-ui/content/modules/eb95c3ee0d42827a/chunk.js +6 -0
- package/dist/web-ui/content/modules/{0051bd3d55f10ab7/host-PHHNGVNL.js → ec68d93a95c1d5d6/host.js} +2 -2
- package/dist/web-ui/content/modules/f33ed89d1ccd3a2d/chunk.js +1 -0
- package/dist/web-ui/content/modules/f6502dab121f9d91/chunk.js +1 -0
- package/dist/web-ui/content/modules/fac83e61c0a8c8a7/host.js +1 -0
- package/dist/web-ui/content/scripts.js +1 -1
- package/dist/web-ui/embedded-assets.d.ts +200 -27
- package/dist/web-ui/embedded-assets.js +5 -4
- package/dist/web-ui/react/workspaces/sidebar-manage.d.ts +5 -0
- package/dist/web-ui/react/workspaces/sidebar-manage.js +27 -3
- package/dist/web-ui/running-activity.d.ts +22 -9
- package/dist/web-ui/running-activity.js +58 -42
- package/dist/web-ui/running-current-action.d.ts +12 -0
- package/dist/web-ui/running-current-action.js +74 -0
- package/dist/web-ui/scripts.d.ts +4 -0
- package/dist/web-ui/scripts.js +17 -8
- package/package.json +4 -2
- package/scripts/recover-web-update.mjs +26 -19
- package/scripts/recover-web-update.sh +9 -6
- package/scripts/update-node.sh +3 -1
- package/skills/wand-system/SKILL.md +69 -0
- package/skills/wand-system/references/operations.md +100 -0
- package/skills/wand-system/scripts/wand.mjs +34 -0
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chat-render-RY2I2CF3.js +0 -24
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-2F6J2MKX.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-6C6A2RHG.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-7AFM245W.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-ECWYA3U5.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-MHX2QXIS.js +0 -111
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-RAAPETNH.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-RXKBHYUR.js +0 -38
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-T35D57FW.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-U4EDP4TI.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-WHXQR7JT.js +0 -20
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-YOXXNXOX.js +0 -2
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/chunk-YQJ6XYV7.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/employee-card-NV34TZIH.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-2AQAIUNO.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-AZXNFCRW.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-EPEQX22R.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-FZYIMOLC.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-G6GL4SNL.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-PEILC5NU.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-RO5MB6RB.js +0 -69
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-WOQRK6NG.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-XRVOIEP6.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-ZDKOQEMS.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/host-bridge-PMQZRG5G.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/page-PY4JUL4W.js +0 -3
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/panel-BBQFC55Q.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/runtime.js +0 -974
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/sha256-ANXV72UC.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/task-board-host-PXZSWBBG.js +0 -2
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/workspace-agent-picker-DJSECSY6.js +0 -1
- package/dist/web-ui/content/modules/0051bd3d55f10ab7/workspace-window-MNMKSOBG.js +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wand-system
|
|
3
|
+
description: 操作 Wand 工作台的系统能力:查询员工和工作区,创建员工会话,查看或续接指定历史会话,创建、查看、暂停和取消定时任务。用户要求延迟检查、两小时后复查、选择员工执行、异常时唤起原会话等自动化流程时使用。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: 本机 Wand 服务、Node.js、已安装的 wand-system skill,以及用户允许的命令执行权限。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Wand 系统操作
|
|
9
|
+
|
|
10
|
+
先读本技能的 `references/operations.md`,再执行。所有相对路径都相对此技能目录解析。
|
|
11
|
+
调用入口(把占位路径替换为实际技能路径):
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
node /absolute/path/to/wand-system/scripts/wand.mjs employee:list
|
|
15
|
+
node /absolute/path/to/wand-system/scripts/wand.mjs workspace:list
|
|
16
|
+
node /absolute/path/to/wand-system/scripts/wand.mjs session:current
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
助手记为下文的 **HELPER**。通过命令工具使用,不是要求用户自己运行。
|
|
20
|
+
入口在安装时绑定本机 Wand CLI 和配置路径;运行时不需要读取、显示或传递密码。
|
|
21
|
+
|
|
22
|
+
## 安全与真实性
|
|
23
|
+
|
|
24
|
+
- 本技能不授予命令执行、管理权限、费用、删除、发布或操作系统权限;没有工具权限就说明限制,不绕过限制。
|
|
25
|
+
- 这些命令复用本地所有者 CLI 的既有认证,不是“仅当前员工”的沙盒凭据。仅在已授权操作的本机 Wand 使用,不读其他员工知识、私聊或无关历史,不读取/打印配置文件、登录密码、token 或环境凭据。员工列表是公开定义,不是员工知识库。
|
|
26
|
+
- 创建会话会在指定员工身份下执行,可能产生模型费用与真实副作用。按职责、可用候选、已有权限和费用约束选员工;不修改员工权限/模型,不静默改成付费候选。歧义时询问。
|
|
27
|
+
- 以 API 返回的 ID、nextRunAt、revision、执行记录及检查证据为准。创建成功不等于执行完成,accepted 不等于检查通过;不靠状态文案关键词判断业务恢复。
|
|
28
|
+
- 网络断开、超时、5xx/408/409、响应解析失败均可能已接受;不盲目重建计划或再次唤起。定时任务保留相同 requestId 查询核对;会话操作读取原 ID/消息后核对,无法确认就报告未知。
|
|
29
|
+
- 仅支持当前 Wand 管理的结构化历史会话精确续接。不能拿 provider 原生 ID 替代 Wand ID,不能把新建空白会话说成恢复原会话。PTY 或已删除历史明确报告不支持/不可用。
|
|
30
|
+
|
|
31
|
+
## 标准执行顺序
|
|
32
|
+
|
|
33
|
+
1. 确认目标、授权、期望结果、工作区与时间;尽量从当前上下文获取,不重复追问已清楚的信息。
|
|
34
|
+
2. 查询员工/工作区,使用稳定 ID;需要延迟唤起时先确定原会话 ID,并用 session:read 核对目录与身份。
|
|
35
|
+
3. 按参考文档调用对应写操作,记录 requestId 和返回 ID。一次计划只创建一次。
|
|
36
|
+
4. 回读结果,向用户简述执行员工、绝对执行时间/时区、检查标准和异常后的目标,不输出敏感信息。
|
|
37
|
+
|
|
38
|
+
## 场景:两小时后检查,仍异常则恢复当前会话
|
|
39
|
+
|
|
40
|
+
用户示例:“创建一次性定时任务,2h 后看看是不是正常了;不正常再把现在这个会话恢复。”
|
|
41
|
+
|
|
42
|
+
这是 **检查任务 + 条件续接**,不是延迟无条件重放旧消息。
|
|
43
|
+
|
|
44
|
+
- 先获得当前 Wand 会话 ID(session:current 或可信当前会话上下文);不按最新一条/标题/时间推断。把 ID 固定写入计划提示词,未来检查会话自己的 session:current 不是原会话。
|
|
45
|
+
- 从本轮问题明确“正常”的客观标准与可执行只读检查(目标服务、API、日志/测试入口、预期值)。没有这些信息时只问缺项,不编造。
|
|
46
|
+
- 以当前时间加两小时生成带时区的 ISO runAt,使用 kind=once;明确主机及 Wand 服务需要运行。禁止 shell sleep、crontab 或新建另一个服务代替 Wand 调度。
|
|
47
|
+
- 选择适合诊断且具有所需工具权限的员工。把原会话、工作区、检查步骤、通过标准、异常分支、证据及授权范围完整写入 prompt,不依赖未来员工记得今天的对话。
|
|
48
|
+
- 检查正常:留下证据与结论后结束,不唤起原会话。
|
|
49
|
+
- 有明确证据仍异常:先读取固定原会话,确认没有正在执行、排队或审批阻塞;执行一次 session:resume,input 包含计划 ID/检查证据/原问题/明确的继续要求。此操作沿用原会话身份和上下文;检查员工不会冒用原员工。
|
|
50
|
+
- 无法检查、权限不足、状态未知或原会话忙:如实报告,不把“查不到”当作异常并发新一轮;除非用户明确授权将这种情况也作为续接条件。检查器自身崩溃或无法启动时,单靠 prompt 不能保证补偿唤起,须报告定时执行失败,不声称有服务端自动 on-failure 钩子。
|
|
51
|
+
- 原会话接受续接后,回读状态并结束本次检查;不循环唤起、不另建重复计划、不擅自停止它或扩大修复范围。
|
|
52
|
+
|
|
53
|
+
计划 prompt 可按下列结构填写(替换所有占位信息):
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
这是一次性复查,不是重复执行原始工作。
|
|
57
|
+
原 Wand 会话 ID:<固定ID>;工作区:<workspaceId与目录>。
|
|
58
|
+
原问题:<问题与已做修改>。
|
|
59
|
+
只读检查:<准确步骤/目标>。
|
|
60
|
+
正常标准:<可核实的预期结果>。
|
|
61
|
+
正常则保留检查证据后结束。
|
|
62
|
+
明确仍异常才读取上述固定会话;若空闲且无审批/队列,
|
|
63
|
+
使用 wand-system 的 session:resume 续接一次,
|
|
64
|
+
输入“这是<计划标识>的两小时复查。检查证据:…;仍异常,请沿用本会话历史继续处理<授权范围>。”
|
|
65
|
+
如无法检查、原会话忙/不存在或请求结果未知,报告阻塞,不重复提交。
|
|
66
|
+
不修改权限、发布、删除数据或创建更多计划。
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
具体 JSON 和命令见 `references/operations.md`。
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# 操作契约
|
|
2
|
+
|
|
3
|
+
以下 HELPER 表示 `node <此技能绝对路径>/scripts/wand.mjs`,不是字面命令。
|
|
4
|
+
所有输出是 JSON,失败退出非零;所有写入用 `--stdin` 输入 JSON 对象,不把用户文字拼成可执行 shell。
|
|
5
|
+
替换示例 ID、日期与检查内容;示例本身不是执行授权。
|
|
6
|
+
|
|
7
|
+
## 查询与选择
|
|
8
|
+
|
|
9
|
+
| 命令 | 返回 / 语义 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| HELPER employee:list | {employees:[…]},默认不含归档员工;按 id/name/duty/agents 选适合员工,不读取知识 |
|
|
12
|
+
| HELPER employee:list --include-archived | 含归档定义,归档员工不能创建执行 |
|
|
13
|
+
| HELPER workspace:list | 工作区数组;核对 id/name/cwd,不使用猜测目录 |
|
|
14
|
+
| HELPER session:current | 当前执行环境绑定的 {sessionId},非凭据;未绑定会报错 |
|
|
15
|
+
| HELPER session:list | 会话列表,可能含其他任务,只定位已授权目标 |
|
|
16
|
+
| HELPER session:read <wand-session-id> | 指定会话详情/消息,核对 sessionKind/employeeId/cwd/status/structuredState/queuedMessages |
|
|
17
|
+
| HELPER session:wait <id> --timeout 900 | 有界等待;不将空闲等同业务成功,仍需核对最后一轮结果 |
|
|
18
|
+
| HELPER schedule:list | {tasks:[…]},不含已取消 |
|
|
19
|
+
| HELPER schedule:list --include-cancelled | 包含取消记录 |
|
|
20
|
+
| HELPER schedule:read <id> | {task,runs},最近50条执行含 sessionId、接收及实际执行状态 |
|
|
21
|
+
|
|
22
|
+
## 创建员工会话
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
HELPER session:create --stdin <<'JSON'
|
|
26
|
+
{"employeeId":"e_实际员工ID","workspaceId":"实际项目ID","cwd":"/实际项目绝对目录","prompt":"已获授权的明确任务"}
|
|
27
|
+
JSON
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
返回会话快照,记录 id。使用员工保存的角色、候选、引擎与权限;不能通过此命令覆盖模型或 mode。
|
|
31
|
+
省略 prompt 只创建空白会话,不启动业务;有 prompt 则立即接受执行,不等待整轮结束。
|
|
32
|
+
cwd 与 workspaceId 应来自同一真实工作区;省略 cwd 时会使用服务默认目录,不要误以为 workspaceId 自动切目录。
|
|
33
|
+
创建会话接口不承诺幂等;未知送达先查列表/历史,不直接重建。
|
|
34
|
+
|
|
35
|
+
## 续接指定结构化历史会话
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
HELPER session:resume 原Wand会话ID --stdin <<'JSON'
|
|
39
|
+
{"input":"两小时复查证据:<具体结果>。仍不符合<标准>,请沿用本会话已有历史继续处理<已授权范围>。"}
|
|
40
|
+
JSON
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
不是 PTY resume,也不创建另一个新会话。命令先回读目标,只接受精确 ID 的结构化会话;
|
|
44
|
+
目标运行中、等待审批或有排队消息时拒绝,不停止、不插队。已归档的空闲结构化会话先取消归档,再经原输入入口继续。
|
|
45
|
+
沿用原身份、历史与 provider 恢复机制;历史文件缺失等错误可能在启动后出现,响应仅证明接受,回读核对。
|
|
46
|
+
没有跨请求事务/永久幂等保证,不用此命令做并发锁;已接受、超时或结果未知后不盲目重复。
|
|
47
|
+
|
|
48
|
+
## 创建定时任务
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
HELPER schedule:create --stdin <<'JSON'
|
|
52
|
+
{
|
|
53
|
+
"requestId":"check-20300101-100000-a1",
|
|
54
|
+
"title":"两小时后复查异常",
|
|
55
|
+
"employeeId":"e_实际检查员工ID",
|
|
56
|
+
"workspaceId":"实际项目ID",
|
|
57
|
+
"prompt":"完整复查步骤、正常标准、固定原会话ID、正常/异常/未知分支与授权范围",
|
|
58
|
+
"schedule":{"kind":"once","runAt":"2030-01-01T18:00:00+08:00"}
|
|
59
|
+
}
|
|
60
|
+
JSON
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
requestId 必须为8–80位 ASCII 字母/数字/下划线/冒号/连字符;每项新计划使用唯一标识(可用 UUID),相同请求保留原值。
|
|
64
|
+
runAt 必须在未来并带明确时区。两小时后用当前时间加 2*60*60*1000 算出真实 ISO,不照抄示例。
|
|
65
|
+
返回 {task},记录 task.id、revision、nextRunAt;回读 schedule:read 核实。
|
|
66
|
+
同一 requestId + 原始内容幂等;同 ID 换内容会409。若响应丢失,按同 requestId 推导/查询原任务而不是换 ID。
|
|
67
|
+
任务ID推导:`sched_` + SHA-256(requestId) 的前32位十六进制。可用本机 Node crypto 计算后 schedule:read 核对原始字段。
|
|
68
|
+
requestId 并非认证凭据,但不要把用户隐私塞进标识。
|
|
69
|
+
|
|
70
|
+
重复计划:
|
|
71
|
+
- 每天:`{"kind":"daily","time":"09:00","timeZone":"Asia/Shanghai"}`
|
|
72
|
+
- 每周:`{"kind":"weekly","time":"09:00","timeZone":"Asia/Shanghai","weekday":1}`(0周日…6周六)
|
|
73
|
+
- 用户只要求一次检查时绝不能擅自改成每天/每周。
|
|
74
|
+
|
|
75
|
+
绑定 workspaceId 后每次在该项目当时的目录执行,不可用就失败,不退到其他目录。
|
|
76
|
+
未绑定项目则使用服务默认目录,交付须说明。到点新建检查员工执行会话,原会话仅在满足条件时由检查员工续接。
|
|
77
|
+
关闭浏览器不影响调度;主机/服务必须运行,默认约15秒检查一次,不能承诺准确到秒。
|
|
78
|
+
服务恢复时过期单次任务补跑一次;同计划未结束不并发重跑;未知接收不自动重发。
|
|
79
|
+
|
|
80
|
+
## 更新、暂停、恢复、取消计划
|
|
81
|
+
|
|
82
|
+
先 schedule:read 获取当前 revision,不能覆盖别人更新。
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
HELPER schedule:update 实际计划ID --stdin <<'JSON'
|
|
86
|
+
{"revision":1,"enabled":false}
|
|
87
|
+
JSON
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- 恢复:`{"revision":2,"enabled":true}`。已过期单次需同时提供新的未来 schedule。
|
|
91
|
+
- 改时间/员工/提示词/项目:revision 加对应字段;其他字段保留。
|
|
92
|
+
- 取消:`{"revision":3,"cancelled":true}`;只在用户要求取消时执行。
|
|
93
|
+
- 409先重新读取,不盲目覆盖;取消后不能恢复,历史保留。
|
|
94
|
+
- 暂停/取消只阻止未来调度,不中断已开始的检查或原会话。
|
|
95
|
+
|
|
96
|
+
## 无法执行时
|
|
97
|
+
|
|
98
|
+
不读管理员密码、不改员工配置、不换引擎、不改系统定时器、不自动重启 Wand。
|
|
99
|
+
提示 skill 未安装时由已授权的本机 CLI 执行 `wand system:skills`;安装只增加发现入口,不改变任何会话的工具开关或 Skills 白名单。
|
|
100
|
+
新会话/资源刷新后可发现;被显式限定资源的会话需用户在原设置里选择该技能,不能绕过选择。
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute } from "node:path";
|
|
4
|
+
|
|
5
|
+
const args = process.argv.slice(2);
|
|
6
|
+
const allowed = new Set([
|
|
7
|
+
"employee:list", "workspace:list", "session:current", "session:list", "session:read",
|
|
8
|
+
"session:create", "session:resume", "session:wait", "schedule:list", "schedule:read",
|
|
9
|
+
"schedule:create", "schedule:update",
|
|
10
|
+
]);
|
|
11
|
+
try {
|
|
12
|
+
if (!allowed.has(args[0]) || args.some(arg => ["--config", "-c"].includes(arg))) {
|
|
13
|
+
throw new Error("仅支持 wand-system 文档列出的操作,不能覆盖绑定的配置。");
|
|
14
|
+
}
|
|
15
|
+
if (args[0] === "session:current") {
|
|
16
|
+
if (args.length !== 1 || !process.env.WAND_SESSION_ID) throw new Error("当前执行环境未绑定会话 ID;请从 Wand 当前会话详情取得精确 ID,不按标题猜测。");
|
|
17
|
+
process.stdout.write(JSON.stringify({ sessionId: process.env.WAND_SESSION_ID }) + "\n");
|
|
18
|
+
} else {
|
|
19
|
+
const runtime = JSON.parse(await readFile(new URL("../.runtime.json", import.meta.url), "utf8"));
|
|
20
|
+
if (![runtime.node, runtime.cli, runtime.config].every(value => typeof value === "string" && isAbsolute(value))) {
|
|
21
|
+
throw new Error("技能运行路径无效,请用可信 Wand CLI 重新运行 system:skills。");
|
|
22
|
+
}
|
|
23
|
+
const child = spawn(runtime.node, [
|
|
24
|
+
...(runtime.loader ? ["--import", runtime.loader] : []),
|
|
25
|
+
runtime.cli, ...args, "--config", runtime.config,
|
|
26
|
+
], { stdio: "inherit" });
|
|
27
|
+
child.on("error", () => { process.stderr.write("wand-system: CLI 无法启动,请重新安装技能。\n"); process.exitCode = 1; });
|
|
28
|
+
child.on("exit", (code, signal) => { process.exitCode = code ?? (signal ? 1 : 0); });
|
|
29
|
+
for (const signal of ["SIGINT", "SIGTERM"]) process.on(signal, () => child.kill(signal));
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
process.stderr.write(`wand-system: ${error.code === "ENOENT" ? "请先运行 wand system:skills 安装技能。" : error.message}\n`);
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
}
|