@jjh32456/dsh-longlive 1.6.7 → 1.8.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/CHANGELOG.md +70 -1508
- package/LICENSE +1 -1
- package/QUICKSTART.md +34 -13
- package/README.en.md +18 -7
- package/README.md +34 -9
- package/SPEC.md +5 -5
- package/cordis.patch.yml +23 -9
- package/docs/ANSWER-GUARD.md +92 -0
- package/docs/ARCHITECTURE.md +4 -3
- package/docs/AUTO-RECALL-WIRING.md +1 -1
- package/docs/AUTO-RECALL.md +15 -9
- package/docs/CONFIG.md +168 -35
- package/docs/ERRORS.md +17 -5
- package/docs/FAQ.md +7 -7
- package/docs/FEATURES.md +96 -28
- package/docs/MIGRATION-1.6.0.md +2 -2
- package/docs/OPERATIONS.md +6 -6
- package/docs/PANEL-INTEGRATION.md +6 -0
- package/docs/PRIVACY.md +88 -0
- package/docs/QUICKSTART.md +5 -5
- package/docs/README.en.md +4 -2
- package/docs/RESIDENT-WATCHER.md +1 -1
- package/docs/SESSION-WATCH.md +6 -6
- package/docs/TROUBLESHOOTING.md +4 -4
- package/package.json +47 -117
- package/runbook.md +2 -2
- package/scripts/backfill-auto-cards.mjs +98 -0
- package/scripts/install-surgery-task.ps1 +5 -2
- package/scripts/lib/session-watch-fixture.mjs +1 -1
- package/scripts/longlive-doctor.mjs +6 -0
- package/scripts/migrate-180.mjs +163 -0
- package/scripts/recall-index-build.mjs +128 -0
- package/scripts/session-watch-drill.mjs +1 -1
- package/scripts/surgery-run.cmd +1 -1
- package/scripts/unattended-surgery.ps1 +5 -2
- package/scripts/verify-card-anchors.mjs +138 -0
- package/src/actions/audit.js +125 -0
- package/src/actions/evidence.js +122 -0
- package/src/actions/fs.js +162 -0
- package/src/activity/index.js +760 -0
- package/src/activity/model.js +351 -0
- package/src/activity/store.js +644 -0
- package/src/activity/thinking.js +176 -0
- package/src/adapters/constants.js +11 -0
- package/src/adapters/engram/data/aliases.json +51 -0
- package/src/adapters/engram/data/policy.json +8 -0
- package/src/adapters/engram/data/routing-rules.json +546 -0
- package/src/adapters/engram/index.js +235 -0
- package/src/adapters/registry.js +315 -0
- package/src/answer/audit.js +193 -0
- package/src/answer/evidence.js +30 -0
- package/src/answer/guard.js +1370 -0
- package/src/answer/index.js +1067 -0
- package/src/answer/query.js +111 -0
- package/src/answer/second-hop.mjs +101 -0
- package/src/auto-truncate.js +1 -1
- package/src/config.js +171 -47
- package/src/deps.js +6 -4
- package/src/features.js +182 -6
- package/src/heartbeat.js +156 -23
- package/src/identity/handover.js +52 -1
- package/src/identity/index.js +13 -5
- package/src/identity/inject-position.js +2 -2
- package/src/index.js +97 -7
- package/src/lifecycle/gap-clocks.js +328 -0
- package/src/lifecycle/index.js +269 -0
- package/src/live.js +22 -2
- package/src/memory/activity-capture.js +229 -0
- package/src/memory/anchors.js +194 -0
- package/src/memory/audit-records.js +222 -0
- package/src/memory/auto-cards.js +401 -0
- package/src/memory/capture.js +442 -0
- package/src/memory/card-anchors.js +203 -0
- package/src/memory/conflicts.js +106 -0
- package/src/memory/decay.js +311 -0
- package/src/memory/distill.js +471 -0
- package/src/memory/event-index.js +917 -0
- package/src/memory/evidence-chain.js +295 -0
- package/src/memory/evidence.js +145 -0
- package/src/memory/filter-runner.js +1 -1
- package/src/memory/filter.js +5 -1
- package/src/memory/forget-v2.js +410 -0
- package/src/memory/forget.js +71 -0
- package/src/memory/frames-activation.js +247 -0
- package/src/memory/fts-query.js +174 -0
- package/src/memory/governance.js +604 -0
- package/src/memory/index.js +1 -0
- package/src/memory/l2-gate.js +169 -0
- package/src/memory/lock.js +121 -0
- package/src/memory/migrate.js +139 -0
- package/src/memory/recall-v2.js +223 -0
- package/src/memory/recall.js +65 -2
- package/src/memory/records.js +425 -0
- package/src/memory/retention.js +128 -0
- package/src/memory/review.js +124 -0
- package/src/memory/trust.js +88 -0
- package/src/memory/version-chain.js +264 -0
- package/src/memory/wal.js +137 -0
- package/src/memory/working-frame.js +516 -0
- package/src/metrics/classify.mjs +5 -3
- package/src/metrics/index.mjs +21 -1
- package/src/metrics/prestep-latency.mjs +300 -0
- package/src/metrics/store.mjs +25 -0
- package/src/policy-profile.js +18 -3
- package/src/recall/anaphora.mjs +87 -0
- package/src/recall/cards.mjs +7 -0
- package/src/recall/embedding.mjs +8 -8
- package/src/recall/entities.mjs +112 -0
- package/src/recall/index.js +235 -19
- package/src/recall/inject-order.mjs +10 -8
- package/src/recall/privacy.mjs +105 -16
- package/src/recall/recall-core.mjs +116 -10
- package/src/recall/shared-visibility.js +302 -0
- package/src/recall/time-normalizer.mjs +196 -0
- package/src/role/activation.js +191 -0
- package/src/role/attention.js +318 -0
- package/src/role/base.js +36 -0
- package/src/role/channels.js +423 -0
- package/src/role/index.js +425 -0
- package/src/role/interfaces.js +115 -0
- package/src/role/personality.js +370 -0
- package/src/role/readers.js +151 -0
- package/src/role/relationships.js +477 -0
- package/src/role/store.js +202 -0
- package/src/role/writeprotect.js +373 -0
- package/src/router/aliases.json +176 -25
- package/src/router/background/agent-runner.mjs +1 -1
- package/src/router/background/anchor.mjs +1 -1
- package/src/router/background/audit.mjs +2 -2
- package/src/router/background/budget-ledger.mjs +2 -2
- package/src/router/background/host-sim.mjs +1 -1
- package/src/router/background/memory.mjs +4 -4
- package/src/router/background/queue.mjs +1 -1
- package/src/router/background/retry.mjs +1 -1
- package/src/router/background/router.mjs +1 -1
- package/src/router/background/stream.mjs +1 -1
- package/src/router/background/tool-policy.mjs +1 -1
- package/src/router/design-headings.json +5 -5
- package/src/router/face/config.mjs +1 -1
- package/src/router/face/identity.mjs +3 -3
- package/src/router/judge.mjs +8 -7
- package/src/router/policies/generic.json +21 -4
- package/src/router/route.js +109 -22
- package/src/router/router.mjs +10 -6
- package/src/router/routing-rules.json +260 -445
- package/src/router/run-sim.mjs +8 -8
- package/src/router/runtime.js +23 -12
- package/src/router/service/board.mjs +95 -15
- package/src/router/service/config.mjs +5 -5
- package/src/router/service/context.mjs +1 -1
- package/src/router/service/hint.mjs +14 -0
- package/src/router/service/queue.mjs +1 -1
- package/src/router/service/service.mjs +27 -11
- package/src/router/shadow.mjs +4 -3
- package/src/surgery-recovery.js +2 -2
- package/src/tool-output.js +2 -2
- package/src/tools.js +39 -7
- package/src/truncate-visible.js +2 -2
- package/src/ui/actions.js +1312 -0
- package/src/ui/panel-api.js +367 -0
- package/src/ui/panel-auth.js +251 -0
- package/src/ui/panel-integrity.js +243 -0
- package/src/ui/routes-readonly.js +695 -0
- package/src/ui/routes.js +3 -0
- package/docs/DEV.md +0 -279
- package/docs/PRESENCE-BUS-WIRING.md +0 -491
- package/docs/PRESENCE-BUS.md +0 -694
- package/docs/SURGERY.md +0 -186
- package/scripts/mark-core-cards.mjs +0 -289
- package/scripts/pack.mjs +0 -392
- package/scripts/router-proposals.mjs +0 -386
- package/src/router/fixtures/M1.json +0 -16
- package/src/router/fixtures/M2.json +0 -16
- package/src/router/fixtures/M3.json +0 -20
- package/src/router/fixtures/M4.json +0 -20
- package/src/router/fixtures/M5.json +0 -45
- package/src/router/fixtures/M6.json +0 -53
- package/src/router/fixtures/M7.json +0 -46
- package/src/router/fixtures/S1.json +0 -20
- package/src/router/fixtures/S2.json +0 -23
- package/src/router/fixtures/S3.json +0 -20
- package/src/router/fixtures/S4.json +0 -34
- package/src/router/fixtures/S5.json +0 -43
- package/src/router/fixtures/S6.json +0 -47
- package/src/router/fixtures/T1.json +0 -23
- package/src/router/fixtures/T2.json +0 -16
- package/src/router/fixtures/T3.json +0 -19
- package/src/router/fixtures/T4.json +0 -16
- package/src/router/fixtures/X1.json +0 -17
- package/src/router/fixtures/X2.json +0 -20
- package/src/router/gen-design-headings.mjs +0 -107
- package/src/router/policies/owner-rulings-2026-11-03.json +0 -62
- package/test/auto-recall.test.mjs +0 -474
- package/test/auto-truncate.test.mjs +0 -931
- package/test/autobind.test.mjs +0 -385
- package/test/bus.test.mjs +0 -1572
- package/test/cli-guard.test.mjs +0 -198
- package/test/conclusion.test.mjs +0 -408
- package/test/config-schema.test.mjs +0 -204
- package/test/d6-output.test.mjs +0 -194
- package/test/d6.test.mjs +0 -395
- package/test/deps.test.mjs +0 -342
- package/test/doctor-setup.test.mjs +0 -297
- package/test/embedding-recall.test.mjs +0 -347
- package/test/feature-flags.test.mjs +0 -568
- package/test/filter-shadow.test.mjs +0 -170
- package/test/fixtures/baseline-0.8.0-registration.json +0 -556
- package/test/fixtures/d6-header-tools.json +0 -1
- package/test/fixtures/lock-child.mjs +0 -67
- package/test/fixtures/pre-step-container.mjs +0 -100
- package/test/fixtures/privacy-memory/topics/pii-unmarked.md +0 -9
- package/test/fixtures/privacy-memory/topics/secret-local-only.md +0 -11
- package/test/fixtures/profile-session-longlive-config.json +0 -20
- package/test/fixtures/proposal-cas-child.mjs +0 -66
- package/test/host-engine-status.test.mjs +0 -307
- package/test/hot-truncate.test.mjs +0 -1349
- package/test/identity-card-marker.test.mjs +0 -307
- package/test/identity-router/run.mjs +0 -721
- package/test/integration-pre-step.test.mjs +0 -553
- package/test/live.test.mjs +0 -1020
- package/test/maintenance-schedule.test.mjs +0 -538
- package/test/memory.test.mjs +0 -2828
- package/test/metrics.test.mjs +0 -478
- package/test/orchestrator.test.mjs +0 -266
- package/test/p1_probe.mjs +0 -97
- package/test/packaging.test.mjs +0 -182
- package/test/portability.test.mjs +0 -343
- package/test/rc4-regressions.test.mjs +0 -562
- package/test/rc5-regressions.test.mjs +0 -197
- package/test/rc6-chinese.test.mjs +0 -394
- package/test/router-1100/apply-off.test.mjs +0 -175
- package/test/router-1100/budget-reconcile.test.mjs +0 -215
- package/test/router-1100/config-context.test.mjs +0 -211
- package/test/router-1100/helpers.mjs +0 -129
- package/test/router-1100/hint-envelope.test.mjs +0 -150
- package/test/router-1100/lock-crossproc.test.mjs +0 -206
- package/test/router-1100/proposal-cas-crossproc.test.mjs +0 -184
- package/test/router-1100/router-apply.test.mjs +0 -372
- package/test/router-1100/router-fixb.test.mjs +0 -602
- package/test/router-1100/router-proposals.test.mjs +0 -405
- package/test/router-1100/router-queue-lease-wal.test.mjs +0 -355
- package/test/router-1100/router-security-cr.test.mjs +0 -333
- package/test/router-1100/service-lifecycle.test.mjs +0 -220
- package/test/router-1100/tools-contract.test.mjs +0 -164
- package/test/router-1100/turn-reflect-tick.test.mjs +0 -89
- package/test/router-1100/v6-contract.test.mjs +0 -158
- package/test/router-1100/v6b-contract.test.mjs +0 -293
- package/test/router-1100/v6c-contract.test.mjs +0 -249
- package/test/router-1100/wal-rotation.test.mjs +0 -375
- package/test/router-1100/wp1-config.test.mjs +0 -170
- package/test/router-1100/wp1-default-off.test.mjs +0 -77
- package/test/router-1100/wp1-model-status.test.mjs +0 -90
- package/test/router-1100/wp1-status.test.mjs +0 -220
- package/test/router-1100/wp1-tools.test.mjs +0 -146
- package/test/router-1100/wp5-cli.test.mjs +0 -240
- package/test/router-1100/wp5-model-auto.test.mjs +0 -418
- package/test/router-1100/wp6-merge.test.mjs +0 -386
- package/test/router-1100/wp6-wake.test.mjs +0 -502
- package/test/router-background/audit.test.mjs +0 -37
- package/test/router-background/budget-ledger.test.mjs +0 -330
- package/test/router-background/cross-process.test.mjs +0 -222
- package/test/router-background/fixtures/cross-child.mjs +0 -85
- package/test/router-background/fixtures/real-shapes.mjs +0 -239
- package/test/router-background/router.test.mjs +0 -1044
- package/test/router-background/stream-retry.test.mjs +0 -358
- package/test/router-background/tool-agent.test.mjs +0 -384
- package/test/router-face/bridge.test.mjs +0 -169
- package/test/router-face/face.test.mjs +0 -316
- package/test/router-failclosed.test.mjs +0 -466
- package/test/router-identity.test.mjs +0 -384
- package/test/router-l1-l2.contract.test.mjs +0 -1075
- package/test/router-memory-tools.test.mjs +0 -262
- package/test/router-policy.test.mjs +0 -225
- package/test/router-runtime.test.mjs +0 -438
- package/test/router-shadow.test.mjs +0 -287
- package/test/router.test.mjs +0 -903
- package/test/run-rc.mjs +0 -299
- package/test/run.mjs +0 -2469
- package/test/safety-defaults.test.mjs +0 -179
- package/test/seeded-load.test.mjs +0 -436
- package/test/session-original.test.mjs +0 -338
- package/test/surgery-recovery.test.mjs +0 -936
- package/test/t7_drive.mjs +0 -151
- package/test/tool-output.test.mjs +0 -393
- package/test/tool-schema.test.mjs +0 -177
- package/test/tools_contract.test.mjs +0 -716
- package/test/truncate-visible.test.mjs +0 -1150
- package/test/ui-flags.test.mjs +0 -477
- package/test/v4-hardening.test.mjs +0 -427
package/docs/FEATURES.md
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
# 1.
|
|
1
|
+
# 1.8.0 可选能力与开关
|
|
2
2
|
|
|
3
|
-
1.6.
|
|
4
|
-
|
|
3
|
+
1.8.0 在 1.6.8 之上新增/变更:**有据才答的注入修复 + 来源闸**(信心闸默认关)、**插件功能默认开启**
|
|
4
|
+
(未显式给则 true,仅字面 `false` 关闭;含 autoRecall / identityCard / presenceBus / sharedBrain.activity /
|
|
5
|
+
sharedBrain.thinkingInjection / autoMaintenance / D2 / D6 / routerEnabled / routerFace / workers / embedding / autoTruncate)、
|
|
6
|
+
**身份默认中性**(由 `IDENTITY.md` 配置)、**可移植加固**。安全/灰度项仍默认关(`answerGuard.gate`、`routerApplyEnabled`、
|
|
7
|
+
`strictMemoryRoot`、`routerRuntime: off`、`d6.dryRun` 等);热截断行为不变。
|
|
8
|
+
|
|
9
|
+
1.6.8 在 1.6.7 之上并入**共享大脑活动流**(`sharedBrain.activity`,默认关闭,与
|
|
10
|
+
`presenceBus` 解耦)与**共享板状态诚实性修复**(board/status/live 的 running 计数、焦点
|
|
11
|
+
新鲜度、turn 状态、开机卡时效)。热截断行为与 1.6.7 相同。
|
|
12
|
+
|
|
13
|
+
1.6.7 是热截断加固版:turn===0 / 无 turn 记录的组不再永久屏障(含 system/developer 指令的
|
|
14
|
+
原地保留,只含普通消息的随旧前缀整组归档);中段缺 turn/end 的轮只有最后启动的当前轮不可切;
|
|
15
|
+
新增 onNoPlan 拒绝原因通道,切不了会写 `hot-truncate: 未切(reason)`,不再静默零进展。
|
|
16
|
+
1.6.5 / 1.6.6 的热截断热修复(被宿主重启中断的会话不再永久失去自动切刀)继续生效;其余行为与 1.6.4 相同。
|
|
17
|
+
|
|
18
|
+
1.6.8 的活动流在该版本默认关闭、**1.8.0 起默认开启**(opt-out:`sharedBrain.activity.enabled: false`)、失败静默,与 `presenceBus` 完全独立;开关、预算与回退见下文
|
|
19
|
+
「`sharedBrain.activity`」与 [CONFIG.md](CONFIG.md) §1.5b。
|
|
5
20
|
|
|
6
21
|
1.6.4 在 1.6.0 改名基座之上加入**热截断**(cut-only `CompactionEngine`:只切已完成且早于
|
|
7
22
|
保留窗口的整轮,不调 LLM,原始事件不动,只追加一条覆盖率指针;默认 `mode=cut`,自动切达到
|
|
@@ -11,12 +26,13 @@
|
|
|
11
26
|
|
|
12
27
|
1.6.0 是**改名 + 普适化 + 设置页 + 安全默认**版:包名 `dsh-session-longlive` →
|
|
13
28
|
`@jjh32456/dsh-longlive`,显示名「久视」(英文 Longlive)。在这条改名基座上并入可移植记忆根、
|
|
14
|
-
Config schema(1.6.0 为 80 节点,1.6.4 增加 `hotTruncate` 块后为 85
|
|
29
|
+
Config schema(1.6.0 为 80 节点,1.6.4 增加 `hotTruncate` 块后为 85,本次活动流
|
|
30
|
+
`sharedBrain.activity` 再 +5 为 90)与设置页客户端,并把 `autoTruncate` / `routerRuntime` / `worker_*`
|
|
15
31
|
三个默认值收到发布口径(见下文与 [CONFIG.md](CONFIG.md))。迁移步骤见
|
|
16
|
-
[MIGRATION-1.6.0.md](MIGRATION-1.6.0.md)。22 个工具的默认表面不变;D2/D6
|
|
32
|
+
[MIGRATION-1.6.0.md](MIGRATION-1.6.0.md)。22 个工具的默认表面不变;D2/D6 在 1.8.0 起默认开启(显式 `false` 关闭)。
|
|
17
33
|
全量测试 **1063 passed / 0 failed / 9 skipped**。
|
|
18
34
|
|
|
19
|
-
1.5.0 在 1.4.0
|
|
35
|
+
1.5.0 在 1.4.0 正式版之上并入两件当时**默认关闭**的裁剪能力(1.8.0 起默认开启):**D2 工具输出裁剪**
|
|
20
36
|
(`d2.enabled`,超过 `maxInlineChars` 的工具结果只留头尾,全文归档)与 **D6 工具面裁剪 v1**
|
|
21
37
|
(`d6.enabled`,按任务类型冻结 allowlist,其余工具经 `tool_search` 追加)。
|
|
22
38
|
两者关闭时与 1.4.0 行为完全一致:不注册 listener、不注册 `tool_search`、22 个工具不变。
|
|
@@ -63,21 +79,22 @@ fail-closed 到「不重复注入」并只 warn 一次;30 天以上的 marker
|
|
|
63
79
|
|
|
64
80
|
| 配置键 | 默认值 | 打开后注册 | 作用 |
|
|
65
81
|
| --- | --- | --- | --- |
|
|
66
|
-
| `autoRecall.enabled` | `
|
|
67
|
-
| `identityCard.enabled` | `
|
|
68
|
-
| `presenceBus.enabled` | `
|
|
69
|
-
| `
|
|
82
|
+
| `autoRecall.enabled` | `true` | `agent/pre-step` + `session/event` + `session/disposed` | 从 memoryRoot 的卡片里挑相关段落,作为一条不可见上下文注入本轮 |
|
|
83
|
+
| `identityCard.enabled` | `true` | `agent/pre-step` | 把 `<memoryRoot>/STATE.md` 的开机卡插到第一条真人消息之后 |
|
|
84
|
+
| `presenceBus.enabled` | `true` | `session/event` | 在 turn/end(completed)时消费本会话的 bus 收件箱并落 spool |
|
|
85
|
+
| `sharedBrain.activity.enabled` | `true` | `session/event` + `agent/pre-step` | turn/end 写一条本回合活动到 `.longlive/board/activity.jsonl`;pre-step 只把其他会话新增的活动注入本轮(≤5 条 / 整条 ≤300 字,无新增零 token) |
|
|
86
|
+
| `autoMaintenance.enabled` | `true` | 一条 unref 定时器(无 turn hook) | 每日本地日期变化时跑 consolidate 报告 + forget dry-run 待确认清单 |
|
|
70
87
|
| `metrics.enabled` | `true` | `session/event` | 每轮 turn/end 写一行四层账到 `.longlive/metrics/turns.jsonl`;只度量,不裁剪 |
|
|
71
|
-
| `routerEnabled` | `
|
|
72
|
-
| `routerFace.enabled` | `
|
|
88
|
+
| `routerEnabled` | `true` | RouterService + 4 个 `router_*` 工具(`routerProposalEnabled` 时再 +3) | 进程内后台服务:tick、预算账本、提案闸门、L1/L2 活体板、L4 归并、可选唤醒 |
|
|
89
|
+
| `routerFace.enabled` | `true` | 无新工具;只起后台 tick 定时器 | v1 后台面:组装 ≤30K 上下文 → 一次 LLM → journal + outbox;不执行工具 |
|
|
73
90
|
| `routerRuntime` | `off` | 沿用 0.8.0 的 `src/router/runtime.js` | `off \| shadow \| on`;shadow 只记录不执行,on 仅拒绝高风险写;1.6.0 起默认 off |
|
|
74
91
|
| `filterEnabled` | `true` | 启动后异步跑一次过滤器 | 读 `journal/*.md` 打分,写 `.longlive/filter/`,不调 LLM |
|
|
75
92
|
| `shadowEnabled` | `true` | 无(旧配置兼容位) | 1.6.0 起不再决定默认值;要记录判定必须显式设 `routerRuntime: shadow` / `on` |
|
|
76
|
-
|
|
77
|
-
| `d2.enabled` | `
|
|
78
|
-
| `d6.enabled` | `
|
|
93
|
+
''unavailable'`;显式 true 才可派子会话 |
|
|
94
|
+
| `d2.enabled` | `true` | `tools/post-execute` | 工具结果超 `maxInlineChars` 时只放头尾,全文写 `.longlive/tool-output/`,可用 `session_original` 读回 |
|
|
95
|
+
| `d6.enabled` | `true` | `agent/inbox/claimed` + `system-prompt/assemble` + `tool_search` 工具 | 首条真实用户消息按任务类型冻结工具 allowlist(重启恢复的 turn>1 会话也冻结一次);`tool_search` 可追加被裁掉的工具;`dryRun` 只记日志 |
|
|
79
96
|
|
|
80
|
-
`routerRuntime`、`keepEvents`、`recentWriteWindowMs`、`routerPolicyProfile` 的语义
|
|
97
|
+
默认值列按 1.8.0 口径:`true` = 默认开启(未显式给则开,仅字面 `false` 关闭);`routerRuntime` 等安全/灰度项仍默认关。`routerRuntime`、`keepEvents`、`recentWriteWindowMs`、`routerPolicyProfile` 的语义
|
|
81
98
|
没有变化。注意 `routerRuntime` 是旧的「工具执行前 R1 判定」接缝,`routerEnabled`
|
|
82
99
|
是 1.1.0 新增的后台 RouterService,两者独立,可以只开其中一个。
|
|
83
100
|
|
|
@@ -103,6 +120,11 @@ config:
|
|
|
103
120
|
presenceBus:
|
|
104
121
|
enabled: false
|
|
105
122
|
pollMs: 3000
|
|
123
|
+
sharedBrain:
|
|
124
|
+
activity:
|
|
125
|
+
enabled: false
|
|
126
|
+
injectMaxChars: 300
|
|
127
|
+
maxItems: 5
|
|
106
128
|
autoMaintenance:
|
|
107
129
|
enabled: false
|
|
108
130
|
consolidate: true
|
|
@@ -154,7 +176,24 @@ config:
|
|
|
154
176
|
对每条消息 ack。写 spool 失败就不 ack,宁可重放也不丢消息。
|
|
155
177
|
- 可用 `presenceBus.root` 显式指定 bus 根目录(测试用)。
|
|
156
178
|
|
|
157
|
-
### `
|
|
179
|
+
### `sharedBrain.activity`(共享大脑活动流,1.8.0 起默认开启)
|
|
180
|
+
|
|
181
|
+
- **默认开启(1.8.0 起)**:写侧 + 实时注入;数据只在本机 `memoryRoot`、不上传;不想要就设 `enabled: false` 后重启(回到 1.6.8 默认行为)。
|
|
182
|
+
|
|
183
|
+
- 工具/轮次事件到达时用本地规则(不调 LLM)从「本轮用户实质消息 + 助手结论 + 最近工具动作」
|
|
184
|
+
生成一条 ≤140 字的活动,写进 `<memoryRoot>/.longlive/board/activity.jsonl`;同 key ≤1 条/10s;
|
|
185
|
+
- 同会话最近 10 条内 `key` 相同或文本相似度 ≥0.8 时只 `count+1` / 更新 `last_at`;
|
|
186
|
+
同 key 连续 3 次或累计 10 次压成一条「阶段:…(N 次,最近 …)」;
|
|
187
|
+
- 每个会话在 `.longlive/bridge/<sessionId>.activity.json` 记 `lastSeenSeq`,每次
|
|
188
|
+
`agent/pre-step` 只注入 `seq > lastSeenSeq` 的**其他会话**活动,最多 5 条、总长
|
|
189
|
+
≤300 字(含固定头尾);没有新增就**零 token、零写盘**;blocked 优先;
|
|
190
|
+
- 失败静默,不影响 turn;隐私门复用 `src/recall/privacy.mjs`;写盘用跨进程锁 +
|
|
191
|
+
tmp/fsync/rename,两个会话并发写不会丢行或撞 seq;
|
|
192
|
+
- 与 `presenceBus` 完全独立,关掉一个不影响另一个;回退:`enabled: false` 后重启;
|
|
193
|
+
- 面板:活动流的「谁在干什么」页不在面板 0.2.6 内(由面板侧后续版本提供);
|
|
194
|
+
longlive 包只负责写盘与增量注入。
|
|
195
|
+
|
|
196
|
+
### `autoMaintenance`(B1/B2,1.8.0 起默认开启)
|
|
158
197
|
|
|
159
198
|
- 打开后只注册一条 `unref` 的单次 `setTimeout`,指向下一个**本地**午夜(+1s);
|
|
160
199
|
每次跑完再挂下一天,没有轮询,也不挂 `agent/pre-step`,所以失败影响不到 turn。
|
|
@@ -182,7 +221,7 @@ config:
|
|
|
182
221
|
`node scripts/metrics-read.mjs --memory-root <root>`;`router_status.ledger` 是同一份汇总。
|
|
183
222
|
- `metrics: false` 或 `metrics.enabled: false` 关闭;度量失败永远静默,不拖垮对话。
|
|
184
223
|
|
|
185
|
-
### `routerEnabled`(Router 1.1.0
|
|
224
|
+
### `routerEnabled`(Router 1.1.0,1.8.0 起默认开启)
|
|
186
225
|
|
|
187
226
|
`routerEnabled` 只认字面 `true`。`false` 时 RouterService 不创建、`router_*` 不注册、
|
|
188
227
|
`.longlive/router/` 不落盘,注册表仍是 22 个工具。打开后:
|
|
@@ -209,14 +248,14 @@ config:
|
|
|
209
248
|
≤8KB;hint 只在 boardHash 变化或每 10 轮注入,日上限 24 次/12,000 token,空轮不注。
|
|
210
249
|
- **L4**:同 target+op+mergeKey 的相邻小写合并(单段 ≤2KB、合并后 ≤4KB),被并者
|
|
211
250
|
`superseded`;每会话每日 1 次、全局每日 5 次。
|
|
212
|
-
- **唤醒**:`routerWakeEnabled`
|
|
251
|
+
- **唤醒**:`routerWakeEnabled` 1.8.0 起默认 true(显式 false 关);只对 idle/waiting 根会话,600s 冷却、每日
|
|
213
252
|
20 次、`recentWakeIds` 去重,写 `wake-ready.jsonl` 交给外部消费。
|
|
214
|
-
- **面板只读**:`@jjh32456/dsh-longlive-panel@
|
|
253
|
+
- **面板只读**:`@jjh32456/dsh-longlive-panel@1.8.0` 只读 status/board,不做 approve/apply/propose。
|
|
215
254
|
|
|
216
255
|
Router 的 50 个配置键见 [CONFIG.md](CONFIG.md);契约测试在 `test/router-1100/` 与
|
|
217
256
|
`test/router-l1-l2.contract.test.mjs`。
|
|
218
257
|
|
|
219
|
-
### `routerFace`(v1
|
|
258
|
+
### `routerFace`(v1 后台面,1.8.0 起默认开启)
|
|
220
259
|
|
|
221
260
|
一个**不属于任何会话**的后台 tick:每 `tickMs`(默认 60s)在 `maxContextTokens`
|
|
222
261
|
(默认 30K)内组装身份 + 状态卡 + 心流 + 共享板 + 最近 5 条 face journal + 最多
|
|
@@ -228,7 +267,7 @@ Router 的 50 个配置键见 [CONFIG.md](CONFIG.md);契约测试在 `test/rou
|
|
|
228
267
|
- **跨会话通道**:`bridge/router-outbox.jsonl` 每行
|
|
229
268
|
`{at, sessionHint, text, kind, readAt}`;前台注入 hint 时只渲染最近 1 条未读
|
|
230
269
|
(≤300 字),读到后回写 `readAt`。触发优先于 board-hash 变化,但一次只带 1 条。
|
|
231
|
-
- **刹车**:`routerFace.enabled`
|
|
270
|
+
- **刹车**:`routerFace.enabled` 1.8.0 起默认 true(显式 false 关);`dryRun` 默认 true(只写 journal,
|
|
232
271
|
不调 LLM);日预算 `dailyTokenBudget` 默认 50000(input+output 计),超了停;
|
|
233
272
|
连续 3 次失败自动停并写 `face/status.json`。任何 tick 失败只记 status,
|
|
234
273
|
不抛、不影响 turn。
|
|
@@ -239,7 +278,7 @@ Router 的 50 个配置键见 [CONFIG.md](CONFIG.md);契约测试在 `test/rou
|
|
|
239
278
|
退出时 `ctx.effect` 调 `dispose()` 清定时器,幂等。
|
|
240
279
|
- **测试**:`test/router-face/`(12 个用例,注入假 LLM + 假 memoryRoot)。
|
|
241
280
|
|
|
242
|
-
### `d2`(D2
|
|
281
|
+
### `d2`(D2 工具输出裁剪,1.8.0 起默认开启)
|
|
243
282
|
|
|
244
283
|
- **打开**:写 `d2: { enabled: true }`(`maxInlineChars` 默认 4096),改完重启宿主。
|
|
245
284
|
- **观察**:超限结果里出现一行提示,给出 `<memoryRoot>/.longlive/tool-output/<turn>/<callId>.txt`
|
|
@@ -249,7 +288,7 @@ Router 的 50 个配置键见 [CONFIG.md](CONFIG.md);契约测试在 `test/rou
|
|
|
249
288
|
- **边界**:`read` 默认在 `skipTools` 里,不做二次裁剪;错误结果默认不裁
|
|
250
289
|
(`trimErrors: false`);隐私命中不落盘;扫描、写盘或裁剪任一步失败都 fail-open 用原文。
|
|
251
290
|
|
|
252
|
-
### `d6`(D6 工具面裁剪 v1
|
|
291
|
+
### `d6`(D6 工具面裁剪 v1,1.8.0 起默认开启)
|
|
253
292
|
|
|
254
293
|
- **打开**:写 `d6: { enabled: true }`;建议先 `dryRun: true` 只记日志,确认分类与保留名单
|
|
255
294
|
后再正式打开。改完重启宿主。
|
|
@@ -282,12 +321,41 @@ Router 的 50 个配置键见 [CONFIG.md](CONFIG.md);契约测试在 `test/rou
|
|
|
282
321
|
重算。默认阈值从 1.6.3 的 30k 提到 300k、保留从 6 轮收到 4 轮后,切刀间隔从「每轮一刀」
|
|
283
322
|
拉长到「十几轮一刀」,缓存命中率上去、账单下来。
|
|
284
323
|
|
|
324
|
+
### 身份默认中性(1.8.0)
|
|
325
|
+
|
|
326
|
+
- **默认行为**:内置身份默认中性——不内置任何人名、角色、称呼;身份来自用户
|
|
327
|
+
`<memoryRoot>/IDENTITY.md`(只读;文件不存在时用中性默认,不自动创建/改写)。
|
|
328
|
+
- **蒸馏 who**:`memory_*` 写入与蒸馏的 who 字段默认为空,由用户显式配置注入;不再把内置称呼
|
|
329
|
+
当默认值。
|
|
330
|
+
- **配置**:`identityCard.path` 支持 `<memoryRoot>` 占位;`maxChars` 默认 800(120–4000)。
|
|
331
|
+
只做开机卡注入,不启用 identity-router 的草稿回写,不创建 outbox、不改 STATE.md。
|
|
332
|
+
- **隐私门**:发布包不含个人姓名/本机路径;打包隐私扫描 0 blocker 为发版门。详见
|
|
333
|
+
[PRIVACY.md](PRIVACY.md)。
|
|
334
|
+
|
|
335
|
+
### `sharedBrain.thinkingInjection`(1.8.0,摘要级默认开启)
|
|
336
|
+
|
|
337
|
+
- 默认 **`true`**(未显式给则 true,仅字面 `false` 关闭):只做摘要注入;与 `sharedBrain.activity` 相互独立,关闭后零副作用。
|
|
338
|
+
- 开启后:pre-step 只注入其他会话的**摘要**(不注入原文);失败静默,不影响 turn。
|
|
339
|
+
- **隐私边界**:写入/注入前复用 `src/recall/privacy.mjs` 隐私门,`local_only` 不写不注入;
|
|
340
|
+
摘要不进错误日志,错误只记状态。
|
|
341
|
+
- 配置键与开关取值以 [CONFIG.md](CONFIG.md) 的 `sharedBrain.thinkingInjection` 段为唯一权威;关闭后零副作用。
|
|
342
|
+
|
|
343
|
+
### 来源闸与证据投递(1.8.0,默认关闭)
|
|
344
|
+
|
|
345
|
+
- `answerGuard.gate.enabled=false`(默认):不改变现网行为;`true` 时启用三态判定
|
|
346
|
+
`decideAnswerMode` 与 M1.5 文本层硬规则(每个事实句需「第 N 轮」引用、数字可回读、
|
|
347
|
+
未标注推断视为幻觉、不得声称未发生的工具调用)。
|
|
348
|
+
- 证据投递修复(默认生效,属注入层):`evidenceMaxChars` 1200→4000、助手 excerpt 300→800、
|
|
349
|
+
`HISTORY_CUE_RE` 增加「当时/那时/那次/当天」——修复「证据已注入但答案被截在 300 字外 →
|
|
350
|
+
误判零证据而弃答」。
|
|
351
|
+
- 审计字段:`gate {mode, reasons, signals, assertions, citations}`;详见
|
|
352
|
+
[ANSWER-GUARD.md](ANSWER-GUARD.md)。
|
|
353
|
+
|
|
285
354
|
## 关闭时的零副作用
|
|
286
355
|
|
|
287
|
-
`src/features.js` 在模块顶层没有 I/O。`registerFeatures()`
|
|
288
|
-
`enabled
|
|
289
|
-
|
|
290
|
-
0.8.0 的冻结注册快照逐项比对工具、钩子、返回值与磁盘访问。
|
|
356
|
+
`src/features.js` 在模块顶层没有 I/O。`registerFeatures()` 先归一化配置:未显式给视为 `true`,只有字面 `false` 才关闭;
|
|
357
|
+
某项 `enabled === false` 时该块直接返回 `{enabled: [], config}`,不调用 `ctx.on`、不读 STATE.md、不创建 bus 目录、不打日志。
|
|
358
|
+
`test/feature-flags.test.mjs` 用冻结注册快照逐项比对工具、钩子、返回值与磁盘访问。
|
|
291
359
|
|
|
292
360
|
Router 还多一道 `routerEnabled`:`false` 时 `src/index.js` 连 `createRouterService`
|
|
293
361
|
都不调用,没有定时器、监听器、board/live/inject-state 写盘,也不注册 `router_*`
|
package/docs/MIGRATION-1.6.0.md
CHANGED
|
@@ -134,7 +134,7 @@ $NODE = '<DSH 安装目录>\resources\runtime\primary-runtime\dependencies\node\
|
|
|
134
134
|
|
|
135
135
|
## 4. 脚本迁移(可选;脚本在源码仓,不随 npm 包发布)
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
脚本:1.6.0 历史迁移脚本 `tools/migrate.ps1`(已移除;发布包内不含;装包后想稳一点就按 §3 手工走)。1.8.0 迁移请用 `scripts/migrate-180.mjs`。
|
|
138
138
|
|
|
139
139
|
```powershell
|
|
140
140
|
$MIGRATE = '<源码仓>\tools\migrate.ps1'
|
|
@@ -177,7 +177,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File $MIGRATE `
|
|
|
177
177
|
### 5.1 脚本回滚
|
|
178
178
|
|
|
179
179
|
```powershell
|
|
180
|
-
|
|
180
|
+
# 历史示例(1.6.0 脚本已移除)\nmigrate.ps1 -Rollback -BackupDir <备份目录>
|
|
181
181
|
```
|
|
182
182
|
|
|
183
183
|
恢复 `package.json` / `cordis.patch.yml` / `pnpm-lock.yaml`,把
|
package/docs/OPERATIONS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# OPERATIONS.md — 日常运维手册(1.
|
|
1
|
+
# OPERATIONS.md — 日常运维手册(1.8.0)
|
|
2
2
|
|
|
3
|
-
对象:愿意动手、会看日志,但没参与开发的人。所有结论都能在 1.
|
|
3
|
+
对象:愿意动手、会看日志,但没参与开发的人。所有结论都能在 1.8.0 源码里指到位置;
|
|
4
4
|
标「待核实」的是我在本机没有证据的推断。
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -204,7 +204,7 @@ shape: visible (ledger:truncate-visible.json)
|
|
|
204
204
|
- 回滚(应用必须已退出):
|
|
205
205
|
|
|
206
206
|
```powershell
|
|
207
|
-
$S = "
|
|
207
|
+
$S = "<sessions-dir>\session.v4.jsonl.zstd"
|
|
208
208
|
$BAK = "$S.bak-20261103"
|
|
209
209
|
Copy-Item -LiteralPath $S -Destination "$S.broken-$(Get-Date -Format yyyyMMdd-HHmmss)" -Force # 先留现场
|
|
210
210
|
Copy-Item -LiteralPath $BAK -Destination $S -Force
|
|
@@ -238,7 +238,7 @@ Copy-Item -LiteralPath $BAK -Destination $S -Force
|
|
|
238
238
|
|
|
239
239
|
### 6.1 升级
|
|
240
240
|
|
|
241
|
-
1. 校验 tgz:大小、sha256、`package.json` 里的版本号(本版 = `1.
|
|
241
|
+
1. 校验 tgz:大小、sha256、`package.json` 里的版本号(本版 = `1.8.0`)。
|
|
242
242
|
2. 停应用(不是"关窗口",确认进程没了)。
|
|
243
243
|
3. `dsh plugin --profile desktop add "file:<tgz 绝对路径>"`;不要同时跑第二条安装命令。
|
|
244
244
|
4. 启动**两次**;第二次仍无 `1 entry did not activate` 才算激活。
|
|
@@ -273,7 +273,7 @@ Copy-Item -LiteralPath $BAK -Destination $S -Force
|
|
|
273
273
|
| 应用 exe | 不要假设应用装在固定目录 | `autoTruncate.appExe` 写本机实际路径;runner 也会用 `request.app.exe` |
|
|
274
274
|
| node | 本机 `node` 可能不在 PATH | runner 依次找 `DSH_NODE`、应用运行时目录、PATH;手工调 CLI 时用应用自带 node |
|
|
275
275
|
| sessions 根 | runner 默认 `$DSH_HOME/sessions`,否则 `%USERPROFILE%\.dsh\sessions` | 自定义过就用 `-SessionsRoot`;越界会 `SESSION_PATH_OUTSIDE_ROOT`(exit 2) |
|
|
276
|
-
| 面板(@jjh32456/dsh-longlive-panel@
|
|
276
|
+
| 面板(@jjh32456/dsh-longlive-panel@1.8.0) | 插件配了 `memoryRoot` ≠ 面板读同一个根 | 面板单独配 `memoryRoot`/`sessionsRoot`,或用 `DSH_LONGLIVE_MEMORY_ROOT` |
|
|
277
277
|
| 路径分隔符 | YAML 双引号里的 `\` 是转义 | 用 `/` 或单引号 |
|
|
278
278
|
|
|
279
279
|
跨机器复制记忆库时:先停两边应用,复制后跑 `memory_index`(dry-run)+ `memory_recall` 冒烟;
|
|
@@ -423,7 +423,7 @@ node scripts\surgery-inspect.mjs --recover-report --memory-root "<memory-root>"
|
|
|
423
423
|
|
|
424
424
|
```powershell
|
|
425
425
|
# 先停宿主,确认没有进程
|
|
426
|
-
$S = "
|
|
426
|
+
$S = "<sessions-dir>\session.v4.jsonl.zstd"
|
|
427
427
|
$BAK = "$S.pre-surgery-20261104-141422" # 或 .bak-YYYYMMDD
|
|
428
428
|
Copy-Item -LiteralPath $S -Destination "$S.broken-$(Get-Date -Format yyyyMMdd-HHmmss)" -Force
|
|
429
429
|
Copy-Item -LiteralPath $BAK -Destination $S -Force
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# 面板接入约定:上次手术回执(rc.2)
|
|
2
2
|
|
|
3
|
+
## 0. 1.8.0 面板路由与审计入口(实测口径)
|
|
4
|
+
|
|
5
|
+
- `GET /api/longlive-panel/v2/state` 返回 **27 条路由 / 18 个动作**(1.8.0 验收口径,见 `RELEASE-1.8.0-CHECKLIST.md` §5)。
|
|
6
|
+
- 「本轮想起」审计入口 = `<memoryRoot>/.longlive/recall-log.jsonl`(行格式见 `AUTO-RECALL.md`「recall-log」)。
|
|
7
|
+
- 本文件只定义手术回执等接口约定,不重复面板其余路由。
|
|
8
|
+
|
|
3
9
|
本文只定义**接口约定与数据形状**,不要求改面板仓库。潜望镜面板(@jjh32456/dsh-longlive-panel)
|
|
4
10
|
如果已有「会话 / 截断」页签,加一个小字段即可;没有就按下面的形状做一个只读卡片。
|
|
5
11
|
|
package/docs/PRIVACY.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# PRIVACY · 久视 1.8.0 身份与隐私
|
|
2
|
+
|
|
3
|
+
本文件说明 1.8.0 的身份默认值、用户身份配置方式、共享大脑 thinking 的隐私边界,以及发布包的隐私扫描门。
|
|
4
|
+
|
|
5
|
+
## 1. 默认中性身份
|
|
6
|
+
|
|
7
|
+
- **1.8.0 起,内置身份默认中性**:发布包与内置提示里不含具体人名、角色名或称呼(不再内置「你是谁」「叫我什么」这类个人设定)。
|
|
8
|
+
- 身份由用户自己的 `<memoryRoot>/IDENTITY.md` 定义;文件不存在时使用**中性默认文本**,不自动创建、不自动改写。
|
|
9
|
+
- 记忆内容里的「who」由用户自己决定:`memory_*` 写入与蒸馏时,who 字段**默认为空**,由用户显式配置注入;插件不把任何个人称呼当成默认值。
|
|
10
|
+
- 升级注意:从 1.6.x 升到 1.8.0 时,旧机器上已有的 `IDENTITY.md` 不会被删除或改写;没有该文件的机器会显示中性身份,需要的话按第 2 节新建。
|
|
11
|
+
|
|
12
|
+
## 2. 怎么配置自己的身份
|
|
13
|
+
|
|
14
|
+
1. 在记忆根下新建 `IDENTITY.md`(默认 `<DSH home>/longlive-memory/IDENTITY.md`,Windows 下通常是 `%USERPROFILE%\.dsh\longlive-memory\IDENTITY.md`;记忆根被 `memoryRoot` 覆盖时跟着走)。
|
|
15
|
+
2. 写你希望前台 hint / 后台 Router 使用的身份说明;建议短、稳定、不要写敏感信息。
|
|
16
|
+
3. 改完重启宿主生效。`identityCard` 只做开机卡注入,默认不创建 outbox、不改 `STATE.md`。
|
|
17
|
+
|
|
18
|
+
示例(按你自己的设定替换):
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
# 我
|
|
22
|
+
- 称呼:<你希望被怎么称呼>
|
|
23
|
+
- 身份:<你自己定义的身份/角色>
|
|
24
|
+
- 说话风格:<可选>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 3. 发布包隐私扫描(发版门)
|
|
28
|
+
|
|
29
|
+
- 发布包只包含 `package.json.files` 白名单内的内容(源码/文档/测试,`scripts/answer-eval/` 与 `eval/` 等 dev-only 不进包)。
|
|
30
|
+
- 打包前跑仓库内发版门脚本(**npm 包不含**)`scripts/scan-abs-paths.mjs`(经 `scripts/pack-gate.mjs` 串联)扫描发布物:**绝对路径、个人目录名等 blocker 计数必须为 0**,否则阻止发版。这是 1.8.0 的发版门之一。
|
|
31
|
+
- 发布包不包含任何用户的记忆库、`IDENTITY.md`、会话日志或本机路径;本机路径只在运行时由 `process.execPath` / `DSH_HOME` 解析。
|
|
32
|
+
|
|
33
|
+
## 4. 共享大脑隐私边界(活动流 + thinking 摘要级 1.8.0 起默认开启)
|
|
34
|
+
|
|
35
|
+
- **共享大脑活动流(1.8.0 起默认开启)**:写侧 + 实时注入;数据只在本地 `memoryRoot`,不上传、不联网;关闭方法:`sharedBrain.activity.enabled: false` 后重启宿主(回到 1.6.8 默认)。
|
|
36
|
+
- **thinking(摘要级,1.8.0 起默认开启)**:只注入摘要;设 `sharedBrain.thinkingInjection.enabled: false` 可关,关闭后零注入、零写盘;数据只在本地 memoryRoot。
|
|
37
|
+
- 打开后只做两件事:在 pre-step 注入其他会话的**摘要**;以及把摘要写进共享板/活动文件(按现有共享大脑文件布局)。
|
|
38
|
+
- **只摘要、不写原文**:thinking 不落原文、不保存用户消息/助手回答的完整文本;摘要受共享大脑已有的长度上限约束。
|
|
39
|
+
- **不进日志**:不把 thinking 内容写进错误日志/审计日志;失败只记状态,不记内容。
|
|
40
|
+
- 写入/注入前复用 `src/recall/privacy.mjs` 的隐私门(`privacyScan`):本地私密(`local_only`)内容不写、不注入。
|
|
41
|
+
- 关闭方式:把 thinking 开关设为关闭(配置键见 [CONFIG.md](CONFIG.md) 的 thinking 段)后重启宿主;关闭后已写盘的历史摘要可手动删除对应 `.longlive` 文件。
|
|
42
|
+
- **卡片三套机制的隐私边界(1.8.0)**:AutoCard 是每轮派生索引(.longlive/index/cards.jsonl,可重建、不含原文正文);精卡 sidecar(.longlive/index/card-anchors.jsonl)只存源文件路径/行号/哈希与锚点状态,不复制卡正文;legacy:true 的卡无可用锚点、不计入「已链接」。三者都只在本机 <memoryRoot>,不上传。
|
|
43
|
+
|
|
44
|
+
## 5. 本地优先、无遥测
|
|
45
|
+
|
|
46
|
+
- 默认配置本身不发网络请求、无遥测;embedding 默认开启但只加载**本地**模型(模型缺失静默退关键词),Router / RouterFace 只有在你配置了 provider 后才会通过宿主调用你配置的模型——这是 1.8.0 默认开启后的行为,不是插件自行联网。
|
|
47
|
+
- `@kenz1117/dsh-engram` 是可选增强:装了会多 `engram_*` / `memory_save` 工具,不装不影响 22 个工具;engram 的数据由其自身策略管理。
|
|
48
|
+
- 插件不收集、不上传记忆库、身份、会话日志。
|
|
49
|
+
|
|
50
|
+
## 6. 你需要知道的风险
|
|
51
|
+
|
|
52
|
+
- `memoryRoot` 下的记忆、`journal/`、`.longlive/` 审计与共享文件都是**本地明文**;请靠操作系统账号权限与磁盘加密保护。
|
|
53
|
+
- 共享大脑的共享板/活动流是给「同一个人的多个会话」用的,不要在没有隔离的共享机器上开启。
|
|
54
|
+
- 发布包隐私扫描只覆盖**包内容**,不覆盖你运行时写下的记忆/日志;发 issue 或分享日志前请自行脱敏。
|
|
55
|
+
|
|
56
|
+
## 7. 相关文档
|
|
57
|
+
|
|
58
|
+
- 身份卡与开关:[FEATURES.md](FEATURES.md)、[CONFIG.md](CONFIG.md)
|
|
59
|
+
- 有据才答与来源闸:[ANSWER-GUARD.md](ANSWER-GUARD.md)
|
|
60
|
+
- 共享大脑活动流:[FEATURES.md](FEATURES.md) §`sharedBrain.activity`
|
|
61
|
+
|
|
62
|
+
## 8. 1.8.0 发布包隐私清理(做了什么、怎么验证)
|
|
63
|
+
|
|
64
|
+
1.8.0 把「发布包不携带内部/个人信息」当成硬门,清理内容:
|
|
65
|
+
|
|
66
|
+
- **内部开发日志**:`CHANGELOG.md` 拆为发布版(本包内,用户可读的功能/修复摘要)与内部版
|
|
67
|
+
(不随包,含验收过程与任务编号)。
|
|
68
|
+
- **身份默认中性**:内置默认身份不含人名/角色/称呼;`IDENTITY.md` 由用户自建,缺失时用中性默认。
|
|
69
|
+
- **文档中性化**:作者个人叙事、合作者原话、内部文件名/编号、内部报告路径等从发布文档移除或改写;
|
|
70
|
+
配置示例统一用占位符(`<profile-name>`、`<你的名字>` 等)。
|
|
71
|
+
- **内部报告不随包**:含姓名清单的内部隐私报告、发布清单等仅留内部,不进 `files` 白名单。
|
|
72
|
+
|
|
73
|
+
**怎么验证**(发版前 + 打包后各跑一次):
|
|
74
|
+
|
|
75
|
+
- 对**发布包内容**(`package.json.files` 白名单)跑隐私 token 扫描:人名/内部项目名/内部路径/
|
|
76
|
+
任务编号/评审称呼等命中数必须为 0;源码树扫描不算,按打包后的文件清单扫。
|
|
77
|
+
- 对**打包后的 tgz 解包目录**再跑一遍同样的扫描;同时跑绝对路径扫描(`scripts/scan-abs-paths.mjs`,
|
|
78
|
+
blocker=0)。
|
|
79
|
+
- 检查 `package.json.files` 白名单:内部文件(内部变更日志、内部隐私报告、发布清单)不在其中;
|
|
80
|
+
`docs/PRIVACY.md` 在包内。
|
|
81
|
+
- 以上结果写入发布证据(扫描命令、0 命中输出、白名单 diff),作为 1.8.0 发版门的一部分。
|
|
82
|
+
|
|
83
|
+
> 说明:隐私扫描只覆盖发布包内容;用户运行时的记忆库/日志仍需用户自行保护(见第 6 节)。
|
|
84
|
+
|
|
85
|
+
## 9. 质量门与 after2 双口径(1.8.0)
|
|
86
|
+
|
|
87
|
+
- after2 双口径(raw 冻结 + delivery 契约)均会公布;口径差异见 `GATE3-CRITERIA-V2.md`(判据文件随发布证据归档,不随发布包)。
|
|
88
|
+
- delivery 契约只统计行为指标,不改变 raw 判分冻结口径;live 用户可见正文的强制替换依赖宿主 `message transform` 钩子(1.9 计划)。
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
# 从零到第一次截断(QUICKSTART)
|
|
2
2
|
|
|
3
3
|
**读完你会得到什么**:从一台已经装好 DSH 的 Windows 机器出发,装好 longlive,用 `dryrun` 看它「打算怎么剪」,再切到 `request`,最后安全地完成第一次真截断,并且知道怎么退回去。
|
|
4
4
|
|
|
5
|
-
> 适合谁:第一次拿到 `jjh32456-dsh-longlive-1.
|
|
5
|
+
> 适合谁:第一次拿到 `jjh32456-dsh-longlive-1.8.0.tgz` 的人。全程约 20 分钟,其中真截断那一步应用会自己关闭再打开(VM 实测约 31.5 秒),请挑你不用电脑的时候做。
|
|
6
6
|
>
|
|
7
7
|
> 本文默认 DSH home 是 `%USERPROFILE%\.dsh`;如果你设过 `DSH_HOME`,把命令里的这段整体换掉。
|
|
8
8
|
|
|
@@ -25,18 +25,18 @@ $NODE = '<DSH 安装目录>\resources\runtime\primary-runtime\dependencies\node\
|
|
|
25
25
|
## 1. 装插件:三条命令
|
|
26
26
|
|
|
27
27
|
```powershell
|
|
28
|
-
$TGZ = '
|
|
28
|
+
$TGZ = '<path-to-tgz>' # 换成真实绝对路径
|
|
29
29
|
|
|
30
30
|
& $DSH plugin --profile desktop add "file:$TGZ"
|
|
31
31
|
& $DSH plugin --profile desktop list --depth 0
|
|
32
32
|
& $NODE "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\@jjh32456\dsh-longlive\scripts\longlive-doctor.mjs" --profile desktop
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
**你应该看到**:`list` 里出现 `@jjh32456/dsh-longlive@1.
|
|
35
|
+
**你应该看到**:`list` 里出现 `@jjh32456/dsh-longlive@1.8.0`;doctor 打印一张表,最后是「全部可选依赖已启用。」或只有 engram 缺失的提示。
|
|
36
36
|
|
|
37
37
|
**报错了怎么办**:
|
|
38
38
|
- `ENOENT` → `file:` 后面必须是**真实存在的绝对路径**,用正斜杠;不要把 `~` 写进去。
|
|
39
|
-
- 提示版本冲突或 `1 entry did not activate` → 先确认装的是 1.
|
|
39
|
+
- 提示版本冲突或 `1 entry did not activate` → 先确认装的是 1.8.0;仍报错就把完整 stderr 发出来,别反复重装。
|
|
40
40
|
- 装完没变化 → CLI 安装**不会**影响正在运行的进程,必须完全退出宿主再启动;新 profile 第一次可能只是准备性加载,要再启动一次。
|
|
41
41
|
- 缺 `@kenz1117/dsh-engram` → 只是少 `engram_*` / `memory_save`,22 个工具和截断照常,可以先不装。
|
|
42
42
|
|
package/docs/README.en.md
CHANGED
|
@@ -6,7 +6,8 @@ A DeepSeek Harness plugin that keeps a long session healthy: **inspect it, back
|
|
|
6
6
|
- **22 tools** for session health/backup/compaction/truncation, on-demand original-text fetch, memory cards, workers (fan-out is unavailable until `workers.enabled: true`), and the live-session registry.
|
|
7
7
|
- A built-in settings-page companion: `plugins.row.config` under `@jjh32456/dsh-longlive#session-longlive` with seven feature switches (D2/D6/auto-recall/presence bus/background face/daily maintenance/Router). Profiles without a Web server simply get no route.
|
|
8
8
|
- A memory store at `<DSH home>/longlive-memory` (on Windows: `%USERPROFILE%\.dsh\longlive-memory`), created on first start.
|
|
9
|
-
- Optional: the separate read-only panel `@jjh32456/dsh-longlive-panel@
|
|
9
|
+
- Optional: the separate read-only panel `@jjh32456/dsh-longlive-panel@1.8.0` adds a sidebar named **潜望镜 (Periscope)**. The plugin itself ships no UI.
|
|
10
|
+
- Optional and **off by default**: `sharedBrain.activity` writes one local-rule activity row per turn and injects only unseen rows from other sessions (max 5 rows / 300 chars; zero tokens when nothing is new). Independent of `presenceBus`.
|
|
10
11
|
- Optional and **off by default**: `d2.enabled` trims oversized tool output (the full text is archived), `d6.enabled` freezes a per-task tool allowlist and registers `tool_search`. See [FEATURES.md](FEATURES.md) and [CONFIG.md](CONFIG.md) for enabling, budget and rollback.
|
|
11
12
|
|
|
12
13
|
## Install (3 commands)
|
|
@@ -14,7 +15,8 @@ A DeepSeek Harness plugin that keeps a long session healthy: **inspect it, back
|
|
|
14
15
|
```powershell
|
|
15
16
|
$DSH = '<DSH install>\resources\runtime\cli\bin\dsh.cmd'
|
|
16
17
|
$NODE = '<DSH install>\resources\runtime\primary-runtime\dependencies\node\bin\node.exe'
|
|
17
|
-
& $DSH plugin --profile desktop add "file
|
|
18
|
+
& $DSH plugin --profile desktop add "file:<path-to-tgz>"
|
|
19
|
+
# e.g. `dist/jjh32456-dsh-longlive-1.8.0.tgz` (built by `npm pack`; version pinned to package.json)
|
|
18
20
|
& $DSH plugin --profile desktop list --depth 0
|
|
19
21
|
& $NODE "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\@jjh32456\dsh-longlive\scripts\longlive-doctor.mjs" --profile desktop
|
|
20
22
|
```
|
package/docs/RESIDENT-WATCHER.md
CHANGED
|
@@ -37,7 +37,7 @@ npm 安装或升级这个包不会改变系统启动项、计划任务或注册
|
|
|
37
37
|
```powershell
|
|
38
38
|
powershell -NoProfile -ExecutionPolicy Bypass `
|
|
39
39
|
-File "$env:LOCALAPPDATA\dsh-resident-watcher\install-resident-watcher.ps1" `
|
|
40
|
-
--memory-root "
|
|
40
|
+
--memory-root "<memory-root>" `
|
|
41
41
|
--app-exe "<DeepSeek Harness 安装目录>\DeepSeek Harness.exe" `
|
|
42
42
|
--profile default
|
|
43
43
|
```
|
package/docs/SESSION-WATCH.md
CHANGED
|
@@ -74,7 +74,7 @@ memoryRoot 和 sessions 根目录。任务命令里出现的路径必须是**纯
|
|
|
74
74
|
|
|
75
75
|
```powershell
|
|
76
76
|
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-session-watch.ps1 `
|
|
77
|
-
-InstallDir "
|
|
77
|
+
-InstallDir "<install-dir>" `
|
|
78
78
|
-SessionsRoot "$env:USERPROFILE\.dsh\sessions" `
|
|
79
79
|
-MemoryRoot "$env:USERPROFILE\.dsh\longlive-memory" `
|
|
80
80
|
-ProfileConfig "$env:USERPROFILE\.dsh\profiles\desktop\cordis.patch.yml" `
|
|
@@ -85,7 +85,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\install-session-watch.ps1
|
|
|
85
85
|
|
|
86
86
|
```powershell
|
|
87
87
|
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-session-watch.ps1 `
|
|
88
|
-
-InstallDir "
|
|
88
|
+
-InstallDir "<install-dir>" `
|
|
89
89
|
-SessionsRoot "<existing sessions dir>" -MemoryRoot "<existing memoryRoot>" `
|
|
90
90
|
-DryRun
|
|
91
91
|
```
|
|
@@ -123,7 +123,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\session-watch-status.ps1
|
|
|
123
123
|
日志尾部。看门本身也可以单独跑一次(不经过计划任务):
|
|
124
124
|
|
|
125
125
|
```powershell
|
|
126
|
-
& "
|
|
126
|
+
& "<node-exe>" .\session-watch.mjs --config .\session-watch.config.json --once
|
|
127
127
|
```
|
|
128
128
|
|
|
129
129
|
`--once` 输出整轮 JSON 到 stdout(同时写日志);`--check` 只打印配置摘要;
|
|
@@ -176,12 +176,12 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\session-watch-status.ps1
|
|
|
176
176
|
健康门、损坏会话 fail-soft、循环模式。
|
|
177
177
|
|
|
178
178
|
```powershell
|
|
179
|
-
& "
|
|
179
|
+
& "<node-exe>" .\session-watch-drill.mjs --clean
|
|
180
180
|
```
|
|
181
181
|
|
|
182
182
|
成功时输出 `"ok": true`、60 条检查;证据留在 `drill-result.json` 指向的临时
|
|
183
183
|
workdir,或加 `--workdir` 指定目录。它使用假 `DSH_HOME` / `DSH_MEM`,不会读写
|
|
184
|
-
|
|
184
|
+
`<user-home>\.dsh\sessions`。**不要**在演练里传入真实 SessionsRoot。
|
|
185
185
|
|
|
186
186
|
## 卸载
|
|
187
187
|
|
|
@@ -189,7 +189,7 @@ workdir,或加 `--workdir` 指定目录。它使用假 `DSH_HOME` / `DSH_MEM`
|
|
|
189
189
|
|
|
190
190
|
```powershell
|
|
191
191
|
powershell -NoProfile -ExecutionPolicy Bypass -File .\uninstall-session-watch.ps1 `
|
|
192
|
-
-InstallDir "
|
|
192
|
+
-InstallDir "<install-dir>" -DryRun
|
|
193
193
|
```
|
|
194
194
|
|
|
195
195
|
确认后去掉 `-DryRun`。它会写 stop.flag、停止/删除计划任务、最多等 15 秒让循环
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# TROUBLESHOOTING.md — 按症状查(1.8.0)
|
|
2
2
|
|
|
3
3
|
用法:先看「症状」,对不上再看「最可能原因」。每条只给**一条**验证命令——先确认判断,再动手。
|
|
4
4
|
「什么时候该停手」比「怎么修」更重要:结构一旦不对,继续重试只会扩大损失。
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
|
|
42
42
|
## 2. 侧栏没有「潜望镜」
|
|
43
43
|
|
|
44
|
-
**症状**:Web GUI 左侧看不到面板入口。
|
|
44
|
+
**症状**:Web GUI 左侧看不到面板入口。1.8.0 面板侧 `GET /api/longlive-panel/v2/state` 返回 27 条路由 / 18 个动作;「本轮想起」审计入口读 `.longlive/recall-log.jsonl`。
|
|
45
45
|
|
|
46
|
-
**最可能原因**:面板是**独立可选包** `@jjh32456/dsh-longlive-panel@
|
|
46
|
+
**最可能原因**:面板是**独立可选包** `@jjh32456/dsh-longlive-panel@1.8.0`,这一轮根本没装;
|
|
47
47
|
或者只 `plugin add` 了、没加进 profile 的 `dsh.profile.bundles`,bundle patch 不生效;
|
|
48
48
|
或者当前 profile 不是 `desktop`、宿主没重启。
|
|
49
49
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
**修法**:
|
|
57
|
-
1. 安装独立可选包 `@jjh32456/dsh-longlive-panel@
|
|
57
|
+
1. 安装独立可选包 `@jjh32456/dsh-longlive-panel@1.8.0`(装法见该包的 `INSTALL.md`);
|
|
58
58
|
2. 在 `$P\package.json` 的 `dsh.profile.bundles` 里加入 `@jjh32456/dsh-longlive-panel`;
|
|
59
59
|
3. 重启宿主,刷新页面。
|
|
60
60
|
(两步缺一不可;只装不加 bundles,patch 不会应用。)
|