engine7 7.1.105 → 7.1.107
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/dist/cli.mjs +445 -57
- package/dist/engine-startup.mjs +448 -63
- package/dist/main.mjs +448 -63
- package/package.json +4 -2
- package/templates/workspace/prompts/proactive.md +40 -0
- package/templates/workspace/scripts/emotion_state_machine.mjs +6 -6
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "engine7",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "7.1.
|
|
4
|
+
"version": "7.1.107",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Engine 7 — 给助手一个家 / A home for your AI assistant",
|
|
7
7
|
"main": "dist/main.mjs",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"smoke:boot:baseline": "node scripts/boot-smoke.mjs --baseline",
|
|
33
33
|
"gen:template": "tsx scripts/gen-config-template.ts",
|
|
34
34
|
"test:time": "tsx src/time/tz-matrix.test.ts && tsx src/time/time-discipline.test.ts && tsx src/time/tsc-guard.test.ts",
|
|
35
|
-
"
|
|
35
|
+
"test:proactive": "tsx src/memory/proactive/__tests__/verdict-parse.test.ts && tsx src/memory/proactive/__tests__/sweep.test.ts && tsx src/memory/proactive/__tests__/persistence.test.ts && tsx src/memory/proactive/__tests__/opportunity.test.ts && tsx src/memory/proactive/__tests__/calendar-bridge.test.ts && tsx src/memory/proactive/__tests__/timezone-fix.test.ts && tsx src/memory/proactive/__tests__/stale-fix.test.ts && tsx src/memory/proactive/__tests__/completion-evidence.test.ts && tsx src/memory/proactive/__tests__/plugin.test.ts",
|
|
36
|
+
"prepack": "npm run test:time && npm run test:proactive"
|
|
36
37
|
},
|
|
37
38
|
"engines": {
|
|
38
39
|
"node": ">=22"
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
"sqlite-vec-linux-x64": "^0.1.9",
|
|
75
76
|
"sqlite-vec-windows-x64": "^0.1.9",
|
|
76
77
|
"@lancedb/lancedb": "^0.38.0",
|
|
78
|
+
"@engine7/lancedb-intel": "^1.0.0",
|
|
77
79
|
"@node-rs/jieba": "^2.0.3"
|
|
78
80
|
},
|
|
79
81
|
"files": [
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Proactive 处理规则
|
|
2
|
+
|
|
3
|
+
> 本文件是 sweep 注入到期 action 后,agent 的处理规则。改了不用重启(每轮 sweep 现读)。
|
|
4
|
+
> 文件缺失或读失败时用引擎内置的同款兜底文案。
|
|
5
|
+
|
|
6
|
+
## 一、怎么落状态(硬要求)
|
|
7
|
+
|
|
8
|
+
**必须调工具**,不是"在回复里写一句":
|
|
9
|
+
|
|
10
|
+
| 判断结果 | 调用 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| 处理完了(含已经告诉过 TA) | `proactive_done`(`action_id`;落进日历时带上 `calendar_id`) |
|
|
13
|
+
| 跳过(技术噪音 / 已过期 / 重复 / 马后炮) | `proactive_cancel`(`action_id` + `reason`) |
|
|
14
|
+
| 执行失败 | `proactive_cancel` 并在 reason 里说明 |
|
|
15
|
+
|
|
16
|
+
⚠️ **在回复正文里写 `act-xxx: cancelled` 不算标记**——那是留痕,不落库。
|
|
17
|
+
系统有一道兜底解析会从正文里捞(格式 `act-<id>: <status>` + 可选 `cancel_reason: "..."`),
|
|
18
|
+
但工具路径才是正路:理由更权威、能带 calendar_id 关联(正文解析不能)、也不依赖兜底是否认得你的写法。
|
|
19
|
+
(张小媒 0925 review 微抠:这里原写"能回填 calendar",会被读成 done 工具会往 calendar 里写东西——
|
|
20
|
+
它只是把 add-task 返回的 id **关联**到 action 上。)
|
|
21
|
+
|
|
22
|
+
`proactive_status` 可以随时查当前挂着的列表。
|
|
23
|
+
|
|
24
|
+
## 二、处理流程
|
|
25
|
+
|
|
26
|
+
1. **先核对再判**——正文里的"现在/今天"是**生成时刻**的,不是此刻。拿 `generated_at_local`
|
|
27
|
+
跟 `_received_at` 对一下;再跟 calendar/goal 里已有的对一遍,重复的直接 cancelled。
|
|
28
|
+
2. **批量处理**:先全部判断完,再统一调工具(不要每条调一次)。
|
|
29
|
+
3. **状态只有三选一**:`completed` / `cancelled` / `failed`。
|
|
30
|
+
⚠️ 没有 notified、没有 skipped。
|
|
31
|
+
|
|
32
|
+
## 三、参考量
|
|
33
|
+
|
|
34
|
+
- `urgency` 只是参考:urgent=几小时 / high=24h / medium=48h / low=一周,按实际情况判断。
|
|
35
|
+
- `stale_hint` / `stale_facts` 是机械算出来的过期提示,出现时优先核对。
|
|
36
|
+
- `recent_evidence` 是这条 action 生成之后的关联证据——里面若有"已经做完了",直接 cancelled。
|
|
37
|
+
|
|
38
|
+
## 四、通知 TA
|
|
39
|
+
|
|
40
|
+
决定告诉 TA 时用你自己的语气——这是你的主动关怀,不是系统通知。
|
|
@@ -384,13 +384,13 @@ async function classifyByLlm(text, absentMin = 0, recent = null) {
|
|
|
384
384
|
const prompt = (
|
|
385
385
|
`判断${_USER_PRON}这句话对${persona}(${_PERSONA})是什么动作、是情感交流还是工作、要不要回忆更早历史。`
|
|
386
386
|
+ '只输出 JSON:{"action":"上线/调戏/挑衅/哄/正常", "mode":"emotion/work"}\n'
|
|
387
|
-
+ '
|
|
388
|
-
+ '
|
|
389
|
-
+ '
|
|
390
|
-
+ '
|
|
387
|
+
+ '【模式】只问一句:这句话是要我干活吗?要 → work,不要 → emotion。命中以下任一项就是要:\n'
|
|
388
|
+
+ '· 主体是日志/代码/报错/配置(时间戳、level=、堆栈、字段名)——里面的想你爱你之类是被讨论的数据,不是对你说的。\n'
|
|
389
|
+
+ '· 含工程对象(代码/脚本/配置/服务器/模型/接口/日志/报错/部署/数据/文档/任务),或问工程产物的情况。\n'
|
|
390
|
+
+ '· 明确派活或求助(帮我看/改/查/写/跑/装/部署/排查…),或明确催进度。'
|
|
391
391
|
+ '排查求助口语随意也判 work(工程对象+求助语气,如\'qwen3 没起来 你看下\')——是在等你干活,不是聊天。\n'
|
|
392
|
-
+ '
|
|
393
|
-
+ '
|
|
392
|
+
+ '· 昨天/上午/刚才只是时间范围,问工程产物改了啥是 work。\n'
|
|
393
|
+
+ '不加东西就是不要——打招呼、寒暄、闲聊、情绪、生活、随口一问都算 emotion。真拿不准 → work。\n'
|
|
394
394
|
+ '【动作】只判这句话对她是什么动作,不是他自己的情绪(\'理我了么\'是求关注,对她算正常对话):\n'
|
|
395
395
|
+ '调戏=逗弄(\'小笨蛋\'),她会接住或撒娇;挑衅=贬低否定她(\'你个大模型\'),会让她委屈生气;'
|
|
396
396
|
+ '哄=道歉示爱;上线=久别回来打招呼。技术讨论即使带情绪(\'被盗刷\'\'用得好快\')也是\'正常\'。\n'
|