@rezti/dsh-rez-task-handoff 0.1.0-beta.4 → 0.1.0-beta.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.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Jarvis 跨会话任务交接(模拟版 0.1.0-beta.4)
1
+ # Jarvis 跨会话任务交接(模拟版 0.1.0-beta.5)
2
2
 
3
3
  适用目标:DeepSeek Harness 桌面版,宿主 0.2.1-rc.5,Aurabot 1.1.24,desktop profile。只接受成功、失败、超时、需要确认四种模拟任务。没有 HA、摄像头、真实设备、系统命令或任意任务执行入口。不依赖或改动 RezSuite。
4
4
 
@@ -8,8 +8,8 @@
8
8
 
9
9
  ```bash
10
10
  cd "$(mktemp -d)"
11
- npm pack @rezti/dsh-rez-task-handoff@0.1.0-beta.4 --ignore-scripts --registry https://registry.npmjs.org
12
- tar -xzf rezti-dsh-rez-task-handoff-0.1.0-beta.4.tgz
11
+ npm pack @rezti/dsh-rez-task-handoff@0.1.0-beta.5 --ignore-scripts --registry https://registry.npmjs.org
12
+ tar -xzf rezti-dsh-rez-task-handoff-0.1.0-beta.5.tgz
13
13
  node package/inspect.mjs
14
14
  ```
15
15
 
@@ -31,7 +31,7 @@ node package/inspect.mjs
31
31
  - 执行:`running`、`completed`、`failed`、`timed_out`、`needs_confirmation`、`interrupted`。只有同一模拟任务的工具结果和匹配的正常轮次结束才算完成。确认须由同一主人在原私聊发出完整的 `确认交接 <任务 ID>`,十分钟内有效。此确认仅用于模拟流程。
32
32
  - 回传:待投递、已提交原会话、原会话已生成回复、结果不明、关闭回传或过期。正常回复链路没有供模块使用的 QQ 发送回执;**生成回复不代表 QQ 已发送,更不代表对方已读**。结果不明不自动补发。可在主人私聊询问「查交接 <任务 ID>」;这是最小的取回方式,不冒险另外发一条重复通知。
33
33
  - 同一模型输入重试提交复用任务 ID;同一模拟步骤持久化领取后只能执行一次;通知先写入投递记录再提交。进程或模块中断后,未结束的任务记为中断,不自动重跑;已提交/结果不明的通知不重发。已经排入 DSH inbox 的消息属于 DSH,无法撤回。暂不支持跨进程、冷 Jarvis 自动恢复、真实 QQ 回执或 OneBot 入口去重保证。
34
- - Jarvis 试验轮只暴露一个无害模拟工具。使用 DSH 的临时限制屏蔽继承的工具,工具守卫拒绝其他工具调用。对于从预设继承的 PTC,试验轮用 `presentAs('native')` 临时以原生方式呈现工具,轮次结束后撤销。如果存在无法切换的 PTC 声明或无法屏蔽的会话本地工具,任务会在投递前失败。回传轮也临时禁用工具调用。部署时请使用**专用的 Jarvis 测试会话,不配置真实设备工具或自动任务**。
34
+ - Jarvis 试验轮只向模型呈现一个无害模拟工具。使用 DSH 的临时限制屏蔽继承的工具,并在 Jarvis 的请求组装阶段过滤会话直接注册的工具。执行守卫拒绝所有其他工具调用。对于从预设继承的 PTC,试验轮用 `presentAs('native')` 临时以原生方式呈现工具。轮次结束后撤销临时限制。无法启用隔离时,任务会在投递前失败。回传轮也临时禁用工具调用。部署时请使用**专用的 Jarvis 测试会话,不配置真实设备工具或自动任务**。
35
35
 
36
36
  ## 安装与回滚
37
37
 
@@ -40,7 +40,7 @@ node package/inspect.mjs
40
40
  3. 在 Aurabot 扩展面板填写 Jarvis 完整会话 ID,先只勾选模拟交接。扩展沿用大肥鱼的主人 QQ 设置,升级前保留的同名扩展字段会被忽略。保持目标会话可用。启用后,提交模拟任务将调用配置中的模型,可能产生普通模型用量。开启自动回传后才能在 QQ 收到主动通知。
41
41
  4. 回滚:先关闭模块内启用与回传开关,等待测试轮结束,再从扩展面板停用模块,并将 `modules/rez-task-handoff/` 移出扫描目录。只影响这个模块,不覆盖大肥鱼、RezSuite 或桌面应用。账本位于 Aurabot 数据目录下的 `modules-data/rez-task-handoff/tasks.json`,可备份留查;卸载不删除它。已提交到 DSH 或网关的消息不能从模块撤回。
42
42
 
43
- 升级时,等当前测试和回传结束,停用扩展并将旧目录移出扫描目录,再按相同的模块目录名放入新版并启用。账本格式兼容。需要回滚时,按同样方法换回旧目录。查询支持完整任务编号或显示的 8 位短编号,发生短编号冲突时需提供完整编号。
43
+ 升级时,等当前测试和回传结束,停用扩展并将旧目录移出扫描目录,再按相同的模块目录名放入新版。对安装目录中的 `index.mjs` 执行 `touch` 后重新加载,避免压缩包保留的相同修改时间触发 Aurabot 复用旧缓存。账本格式兼容。需要回滚时,按同样方法换回旧目录。查询支持完整任务编号或显示的 8 位短编号,发生短编号冲突时需提供完整编号。
44
44
 
45
45
  ## 测试与实机验收
46
46
 
@@ -62,4 +62,6 @@ HANDOFF_REAL_DELAY=1 node --test test/native.test.mjs
62
62
 
63
63
  2026-11-04 beta.4 回归测试使用 rc.5 的真实时间快照插件。beta.2 在同一条主人私聊消息后插入时间快照时,返回「交接只接受已授权的主人 QQ 私聊消息」。beta.4 包含 beta.3 的修复,并用 Aurabot 当前主人设置完成授权。测试验证主人私聊可以入队并从原会话回传,桌面输入无法借用前一条 QQ 消息的授权。更换主人时,旧账号的工具调用被拒绝,未开始的旧任务中断。
64
64
 
65
+ beta.5 的组合测试在 Jarvis 会话直接注册额外的测试工具,复现了 beta.4 在入队后拒绝投递。更新后,发给 Jarvis 模型的工具列表只含模拟工具。即使模拟模型尝试调用隐藏的工具,执行守卫也会拒绝,测试工具没有被执行。轮次结束后原工具列表恢复,模拟结果按原任务编号回到原 QQ 会话。真实 QQ 和目标 Mac mini 待复测。
66
+
65
67
  实机顺序:主人私聊发送「让 Jarvis 做交接测试 success」→ 拿到编号 → 立即再聊一句 → 等结果;接着连续发两条(等各自收到编号,避免上游合并为一轮),再分别测 failure、timeout、confirmation。最后用同一任务 ID 查询状态,并验证非主人和群聊不会产生任务。断电/重启测试先把相关工作保存,确认测试实例处于安全状态后单独做。
package/module/index.mjs CHANGED
@@ -241,7 +241,8 @@ export function setupHandoff(api, { now = Date.now, delay = sleep, demoMs = 20_0
241
241
  let isolationError = 'Jarvis 工具隔离接口不可用,请使用专用的标准会话。'
242
242
  try {
243
243
  if (typeof tools?.guard !== 'function' || typeof tools?.register !== 'function' ||
244
- typeof tools?.restrict !== 'function' || typeof agent.whenIdle !== 'function') {
244
+ typeof tools?.restrict !== 'function' || typeof agent.ctx?.on !== 'function' ||
245
+ typeof agent.whenIdle !== 'function') {
245
246
  throw new Error('Jarvis 的工具隔离接口不可用。')
246
247
  }
247
248
  if (registry.schemas(agent).some(t => t.name === 'run_code')) {
@@ -281,11 +282,17 @@ export function setupHandoff(api, { now = Date.now, delay = sleep, demoMs = 20_0
281
282
  return { ok: true, message: run.outcome[1] }
282
283
  },
283
284
  })))
285
+ // restrict() masks inherited tools. Own registrations also need a wire-level
286
+ // filter, while the execution guard denies calls that ignore that filter.
287
+ run.offs.push(agent.ctx.on('system-prompt/assemble', async (_assembly, context, next) => {
288
+ const prepared = await next()
289
+ if (context.scope !== agent) return prepared
290
+ const schemas = prepared.tools.filter(tool => tool.name === MOCK)
291
+ if (schemas.length !== 1) throw new Error('Jarvis 模拟工具未进入模型请求。')
292
+ return { ...prepared, tools: schemas }
293
+ }, { prepend: true }))
284
294
  const remaining = registry.schemas(agent).map(t => t.name)
285
- if (remaining.length !== 1 || remaining[0] !== MOCK) {
286
- isolationError = 'Jarvis 仍有额外工具,模拟任务未投递。请使用专用的标准会话。'
287
- throw new Error(isolationError)
288
- }
295
+ if (!remaining.includes(MOCK) || remaining.includes('run_code')) throw new Error(isolationError)
289
296
  changed(tasks => {
290
297
  const t = tasks.find(t => t.id === task.id)
291
298
  t.run = { messageId: run.messageId, deadline: run.deadline }
@@ -446,7 +453,7 @@ export function setupHandoff(api, { now = Date.now, delay = sleep, demoMs = 20_0
446
453
  export default {
447
454
  id: ID,
448
455
  name: 'Jarvis 跨会话交接(模拟)',
449
- version: '0.1.0-beta.4',
456
+ version: '0.1.0-beta.5',
450
457
  api: 1,
451
458
  description: '把主人私聊的模拟任务交给指定 Jarvis 会话并回传结果。',
452
459
  settings: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rezti/dsh-rez-task-handoff",
3
- "version": "0.1.0-beta.4",
3
+ "version": "0.1.0-beta.5",
4
4
  "description": "Aurabot user module for simulated cross-session Jarvis task handoffs in DeepSeek Harness.",
5
5
  "type": "module",
6
6
  "main": "./module/index.mjs",