@furongjun1999/dsh-memory 0.7.2 → 0.7.4
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 +57 -47
- package/codebuddy/CODEBUDDY.md +6 -6
- package/docs/README.md +148 -144
- package/docs/discipline/harnesses.yaml +16 -8
- package/docs/discipline/templates/zcode-user.md.tmpl +49 -0
- package/docs/eval/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_/345/205/255/345/256/266/350/256/260/345/277/206/347/263/273/347/273/237/345/220/214/345/260/272/345/256/236/346/265/213_v3.1.md +340 -0
- package/docs/eval/N225_/347/264/242/345/274/225/346/227/245/345/277/227/351/235/236/345/257/271/350/261/241/350/243/205/350/275/275/351/235/242/347/261/273/345/236/213/351/227/270_v1.0.md +2 -2
- package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +1 -1
- package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.1.md +1 -1
- package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/344/270/216/351/224/256/347/261/273/345/236/213/351/227/270_v1.1.md +1 -1
- package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/345/212/240/350/275/275/344/270/216/345/207/255/346/215/256/346/230/216/346/226/207/351/230/237/345/210/227_v1.0.md +2 -2
- package/docs/eval/issue50_/345/205/203/346/225/260/346/215/256/351/200/217/344/274/240/344/270/216/345/205/234/345/272/225_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +5 -5
- package/docs/eval/issue50_/345/215/212/351/207/215/345/244/215/345/276/205/345/256/232/345/244/215/346/240/270_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +9 -9
- package/docs/eval/issue50_/345/276/205/345/256/232/345/244/215/346/240/270/345/205/245/351/230/237_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +4 -4
- package/docs/eval/issue50_/351/207/215/350/246/201/345/272/246/345/220/214/346/272/220/344/270/216/344/277/235/346/212/244/350/257/255/344/271/211_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +1 -1
- package/docs/eval/issue51_/344/270/200/351/224/256/345/256/211/350/243/205/345/244/261/350/264/245_/345/275/222/345/261/236/345/210/244/345/256/232_v1.0.md +1 -1
- package/docs/eval/issue52_/346/235/241/344/273/266/345/205/210/350/241/214/344/270/216/346/210/252/346/226/255/345/217/257/350/247/202/346/265/213_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +3 -3
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/242/345/217/230/346/233/264/345/215/225/344/270/216/345/233/236/346/273/232/345/216/237/350/257/255_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +3 -3
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/243/345/207/206/345/205/245/350/257/273/346/225/260_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +7 -7
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/200/346/211/271_/346/216/245/347/272/277/344/270/216/347/255/211/344/273/267/345/217/230/346/215/242_v1.0.md +2 -2
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/211/346/211/271_/351/227/250/347/246/201/350/275/254/346/255/243/344/270/216/350/260/203/345/272/246/346/255/242/350/241/200/344/270/216/351/227/250/346/216/247/346/224/266/345/217/243_v1.0.md +1 -1
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/272/214/346/211/271_/344/276/235/350/265/226/351/200/217/344/274/240/344/270/216/345/257/271/346/213/215/345/217/243/345/276/204/344/270/216/350/264/237/347/274/223/345/255/230_v1.0.md +7 -7
- package/docs/eval//345/207/272/350/264/247/351/235/242/345/206/222/347/203/237_/350/277/233/350/264/247/351/227/250/347/246/201_v1.0.md +10 -10
- package/docs/eval//345/217/221/345/270/20307_/345/244/226/351/203/250/346/212/245/345/221/212/345/233/233/346/211/271/344/277/256/345/244/215/344/270/216/346/217/222/344/273/266/351/235/242/345/212/240/345/233/272_v1.0.md +4 -0
- package/docs/eval//345/217/221/345/270/20308_/350/207/252/350/277/255/344/273/243/344/270/216/347/235/241/347/234/240_/345/233/276/346/243/200/347/264/242/350/267/257/344/270/216/346/235/203/351/207/215_v1.0.md +1 -1
- package/docs/eval//345/217/221/345/270/20311_/345/244/226/346/212/245/345/205/255/350/277/236/344/277/256/344/270/216/344/270/226/347/225/214/346/250/241/345/236/213/345/272/225/345/272/247_v1.0.md +91 -0
- package/docs/eval//345/217/221/345/270/20312_/344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_v1.0.md +108 -0
- package/docs/eval//345/275/222/344/270/200/345/261/202/347/274/272/347/234/201/347/277/273/345/205/263_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +2 -2
- package/docs/eval//347/224/250/346/210/267/350/243/201/345/206/263/345/244/204/347/275/256_/347/254/254/344/270/200/346/211/271_v1.0.md +195 -0
- package/docs/eval//347/224/250/346/210/267/350/243/201/345/206/263/345/244/204/347/275/256_/347/254/254/344/272/214/346/211/271B6_/346/234/254/346/234/272/350/267/257/345/276/204/347/233/270/345/257/271/345/214/226_v1.0.md +78 -0
- package/docs/eval//347/253/257/345/210/260/347/253/257LoCoMoQA/345/220/214/345/217/243/345/276/204/345/257/271/347/205/247_v1.0.md +1 -1
- package/docs/eval//347/253/257/345/210/260/347/253/257/345/271/262/346/211/260/346/261/240/350/257/204/346/265/213_/347/241/256/345/256/232/346/200/247/350/243/201/345/206/263vsLLM_judge_v1.1.md +3 -3
- package/docs/eval//347/254/2543/345/261/202stg/347/273/223/346/236/204/347/264/242/345/274/225_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +1 -1
- package/docs/eval//347/274/226/347/240/201/351/235/242/345/211/215/347/275/256_/345/205/245/345/217/243/350/207/252/344/277/235/350/257/201UTF8/344/270/216/346/226/207/346/234/254open/345/256/210/345/215/253_v1.0.md +1 -1
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v26.md +196 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v27.md +259 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v28.md +217 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v29.md +270 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v30.md +231 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v31.md +281 -0
- package/docs/eval//350/257/255/344/271/211/346/227/266/347/251/272/345/233/276/350/241/245/345/205/250_P1_/346/212/275/345/217/226/345/231/250v4_/344/270/211/347/216/207/350/257/273/346/225/260_v1.0.md +231 -0
- package/docs/hive//345/256/211/345/205/250/345/256/241/350/256/241/345/256/236/351/224/232_v0.1.md +1 -1
- package/docs/hive//350/234/202/345/267/242M6_ingest/345/256/236/346/226/275/350/256/241/345/210/222_v0.1.md +1 -1
- package/docs/hive//350/234/202/345/267/242/345/217/214/345/256/236/344/276/213/344/272/222/351/252/214_/350/256/276/350/256/241/345/256/232/347/250/277.md +1 -1
- package/docs/hive//350/234/202/345/267/242/350/256/276/350/256/241_/347/220/206/350/256/272/345/257/271/351/275/220_v0.1.md +17 -17
- package/docs/hive//350/234/202/345/267/242/350/277/255/344/273/243_/345/256/217/350/247/202/344/270/216/347/276/244/344/275/223/350/260/203/345/272/246_v0.1.md +1 -1
- package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.10.md +2 -2
- package/docs/mdcg//344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_/344/275/277/347/224/250/344/270/216/350/277/220/347/273/264_v1.0.md +305 -0
- package/docs/mdcg//345/212/237/350/203/275/350/260/203/347/224/250/346/230/240/345/260/204/350/241/250_v0.1.md +45 -42
- package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +29 -8
- package/docs/mdcg//347/235/241/347/234/240/345/221/250/346/234/237_/350/277/220/347/273/264/345/211/215/346/217/220/344/270/216/347/273/264/346/212/244/346/214/207/345/215/227_v1.0.md +71 -1
- package/docs/plans//345/205/250/344/270/255/346/226/207/347/274/226/347/240/201/344/270/216/350/234/202/345/267/242/344/273/273/345/212/241/346/240/207/350/257/206/345/245/221/347/272/246_v2.0.md +1 -1
- package/docs/plans//345/244/232/344/270/273/344/275/223/344/270/226/347/225/214/346/250/241/345/236/213_/345/257/271/351/275/220/350/257/204/344/274/260/344/270/216/350/220/275/345/234/260/350/256/276/350/256/241_v0.1.md +141 -0
- package/docs/plans//347/235/241/347/234/240/344/270/216/350/207/252/350/277/255/344/273/243_/345/212/237/350/203/275/344/274/230/345/214/226/350/256/276/350/256/241_v0.4.md +2 -2
- package/docs/plans//350/257/255/344/271/211/346/227/266/347/251/272/345/233/276/350/241/245/345/205/250_/344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_/350/256/276/350/256/241_v0.1.md +107 -0
- package/docs//345/267/245/344/275/234/347/272/252/345/276/213_/350/256/244/347/237/245/345/233/276/346/235/241/347/233/256_v1.1.json +6 -5
- package/docs//347/247/244_/350/256/260/345/277/206/347/263/273/347/273/237/350/257/204/346/265/213/350/247/204/350/214/203_v2.1.md +225 -0
- package/dsh/cordis-patch-profile-web.example.yml +2 -2
- package/lib/bridge.js +9 -0
- package/lib/hooks.d.ts +8 -1
- package/lib/hooks.js +134 -50
- package/lib/lib/hook_audit.d.ts +55 -0
- package/lib/lib/hook_audit.js +208 -0
- package/lib/lib/mutual.js +5 -1
- package/lib/lib/roleplay_web.js +17 -2
- package/lib/lib/session_state.d.ts +56 -0
- package/lib/lib/session_state.js +124 -0
- package/lib/tools.js +12 -1
- package/md_cg/auditview.py +248 -0
- package/md_cg/bench_e2e_judge.py +4 -2
- package/md_cg/branches.py +29 -3
- package/md_cg/consistency.py +38 -13
- package/md_cg/datapath.py +38 -11
- package/md_cg/forgetting.py +15 -2
- package/md_cg/freshness.py +32 -11
- package/md_cg/ghostref.py +130 -0
- package/md_cg/judgment_manifest.py +7 -0
- package/md_cg/lifecycle.py +38 -0
- package/md_cg/mcp_server.py +122 -12
- package/md_cg/mdcg.py +4923 -4822
- package/md_cg/mdcos.py +109 -21
- package/md_cg/nodefile.py +77 -13
- package/md_cg/readcache.py +29 -4
- package/md_cg/selfreport.py +12 -3
- package/md_cg/sleep.py +129 -13
- package/md_cg/sources.py +1 -1
- package/md_cg/state_events.py +131 -0
- package/md_cg/state_slots.py +221 -0
- package/md_cg/stg.py +68 -3
- package/md_cg/sustain.py +1436 -1436
- package/md_cg/test_auditview.py +277 -0
- package/md_cg/test_autonomy_modes.py +2 -1
- package/md_cg/test_boot_openblas_guard.py +197 -0
- package/md_cg/test_ccg_form_parity.py +95 -4
- package/md_cg/test_cons200_scan_selection.py +4 -2
- package/md_cg/test_datapath_device_name.py +62 -3
- package/md_cg/test_generation_guard.py +5 -2
- package/md_cg/test_ghostref.py +182 -0
- package/md_cg/test_interop.py +1 -1
- package/md_cg/test_issue52_scan_condition_first.py +1 -1
- package/md_cg/test_lifecycle_retire_leak.py +408 -0
- package/md_cg/test_lock.py +16 -7
- package/md_cg/test_m3_h9_semantic_guard.py +1 -1
- package/md_cg/test_n230_dirty_replay.py +375 -375
- package/md_cg/test_n238_body_text_parity.py +156 -0
- package/md_cg/test_n276_probe_hoist.py +199 -0
- package/md_cg/test_p4_freshness.py +95 -1
- package/md_cg/test_policy_required_ccg.py +3 -1
- package/md_cg/test_read_face_semantics.py +6 -3
- package/md_cg/test_readcache_prodpath.py +66 -0
- package/md_cg/test_sleep.py +58 -1
- package/md_cg/test_sleep_p1.py +218 -2
- package/md_cg/test_state_event_op.py +514 -0
- package/md_cg/test_state_events.py +178 -0
- package/md_cg/test_state_slots.py +691 -0
- package/md_cg/test_time_core_lint.py +8 -1
- package/md_cg/test_writepipe.py +8 -5
- package/md_cg/tokens.py +18 -2
- package/md_cg/writepipe.py +76 -0
- package/package.json +2 -2
- package/skills/plugin.json +1 -1
- package/src/bridge.ts +9 -0
- package/src/hooks.ts +599 -517
- package/src/lib/hook_audit.ts +243 -0
- package/src/lib/mutual.ts +5 -1
- package/src/lib/roleplay_web.ts +17 -2
- package/src/lib/session_state.ts +127 -0
- package/src/tools.ts +12 -1
- package/zcode/AGENTS.md +6 -6
package/md_cg/mcp_server.py
CHANGED
|
@@ -59,6 +59,26 @@ from utf8_boot import ensure_utf8 # noqa: E402
|
|
|
59
59
|
ensure_utf8(__file__)
|
|
60
60
|
|
|
61
61
|
|
|
62
|
+
# ------------------------------------------- 入口自保证 OpenBLAS 线程数(2026-10-05)
|
|
63
|
+
# 根因(返修取证):numpy(md_cg 可选依赖,经 whitebox_kb 系列模块加载)在**导入期**
|
|
64
|
+
# 由 OpenBLAS 按线程数(默认 = 核数)申请每线程缓冲——本机 32 核实测单进程
|
|
65
|
+
# `import numpy` 的**全机提交内存**增量 0.73 GiB。启动链上的代校验
|
|
66
|
+
# (verify_delegations → 导入含 numpy 的目标模块,见 main)把这笔分配带到
|
|
67
|
+
# **服务应答之前**:机器提交内存吃紧、或**多进程同启**(并行测试套件 / 多会话
|
|
68
|
+
# 并存 / 常驻扫描)时,OpenBLAS 重试 10 次后放弃并 exit(1)——进程在 initialize
|
|
69
|
+
# 应答前死亡,桥侧只见「握手失败 / 插件激活失败」,子进程 stderr 里的
|
|
70
|
+
# `OpenBLAS error: Memory allocation still failed after 10 retries` 是唯一线索。
|
|
71
|
+
# 实测(本机,2026-10-05;随提交内存压力波动):12 个并发 `import numpy` 默认
|
|
72
|
+
# 4~9/12 失败(两轮独立读数,stderr 同上),置本值后 0/12(两轮);单进程提交
|
|
73
|
+
# 增量 0.73 → 0.013 GiB(4 线程 0.100 GiB)。md_cg 现有数值面是向量点积/范数/
|
|
74
|
+
# 小矩阵,单线程对其**无已观测的性能意义**(⚠ 未做基准实测,出现 BLAS 密集路径
|
|
75
|
+
# 须在性能轮复测)。显式设值优先,只填空缺/空白(仓库口径:空白视为未设置)。
|
|
76
|
+
# 位置钉死:必须在 numpy 可被导入之前——模块级,早于 main() 的代校验;
|
|
77
|
+
# 且晚于 ensure_utf8(其重启形态经 env 继承本值,两条保证互不干扰)。
|
|
78
|
+
if not (os.environ.get("OPENBLAS_NUM_THREADS") or "").strip():
|
|
79
|
+
os.environ["OPENBLAS_NUM_THREADS"] = "1"
|
|
80
|
+
|
|
81
|
+
|
|
62
82
|
# SERVER_VERSION 从包根 package.json 动态读取(issue #42:硬编码 0.1.0 与发布
|
|
63
83
|
# 版本脱节,握手自报假版本);读不到(文件缺失/损坏/裁剪)回落保底值不阻塞启动。
|
|
64
84
|
# v21-R1(2026-09-28):**回落必须覆盖全形态**——修前只捉 (OSError, ValueError)
|
|
@@ -593,6 +613,8 @@ KERNEL_TOOLS = [
|
|
|
593
613
|
"建议能力名(不执行,由调用方决定);op=read:召回/检索/按 id 取"
|
|
594
614
|
"(长内容自动截断 2000 行 / 50KB,返回 truncated+next_offset,"
|
|
595
615
|
"续读传 offset=next_offset,不静默丢内容);"
|
|
616
|
+
"op=audit:证据审计视图(只读组装,需 node_id;返回"
|
|
617
|
+
"现值/出处链/两存备择/盲区/退役史五面;路线 C);"
|
|
596
618
|
"op=write:写入前按 content_kind 审核(ACCEPT 落盘 / REJECT 进负记忆 / "
|
|
597
619
|
"DEFER 进审核队列)+ 节点间冲突检测(三级决策:情绪→反思→递归反思;"
|
|
598
620
|
"consistency=false 可关,on_conflict=reject|defer|record);"
|
|
@@ -705,14 +727,18 @@ KERNEL_TOOLS = [
|
|
|
705
727
|
"(offset/limit)、**分页前全集**聚合(aggregation=by_relation|"
|
|
706
728
|
"by_parent|by_child)、端点索引摘要(expand_nodes=true)。"
|
|
707
729
|
"时间条件缺省走**观察轴**(派生边只有写入时刻 t,无效力声明)"
|
|
708
|
-
"——与 op=read 缺省效力轴**有意不同**,由库层单点校验。"
|
|
730
|
+
"——与 op=read 缺省效力轴**有意不同**,由库层单点校验。"
|
|
731
|
+
"op=state_event:状态事件记账(追加一条五元事件"
|
|
732
|
+
"subject/slot/old/new/kind;actor 恒取令牌;"
|
|
733
|
+
"查询走 stg(op=state_chain))。",
|
|
709
734
|
"inputSchema": _s("",
|
|
710
735
|
op=_p("string", "route|read|write|verify|review|protect|identity|"
|
|
711
736
|
"consistency|metacognition|self_state|evolution|sustain|"
|
|
712
737
|
"scrub|predict|causal|"
|
|
713
|
-
"forget|goal|task|recent|info|index_code|
|
|
738
|
+
"forget|goal|task|recent|state_event|info|index_code|"
|
|
739
|
+
"index_doc|ref|whitebox|"
|
|
714
740
|
"theory|link|session|ingest|export|maintain|consolidate|"
|
|
715
|
-
"insight|ccg|status|edges|help", True),
|
|
741
|
+
"insight|ccg|status|edges|audit|help", True),
|
|
716
742
|
ccg=_p("object", "CCG 六要素编译器入参:{action, node_id, dialog, marks, "
|
|
717
743
|
"slots, strict_spans, role, verdict, verifier, compiled_by, "
|
|
718
744
|
"evidence, slot_corrections, model, jobs, blocking, wait_s, "
|
|
@@ -730,6 +756,10 @@ KERNEL_TOOLS = [
|
|
|
730
756
|
"write 时作为来源证据(user=外部惊奇)"),
|
|
731
757
|
meta=_p("object", "recent op:附加元数据"),
|
|
732
758
|
window=_p("integer", "recent op:滚动窗口大小(默认 200)"),
|
|
759
|
+
slot=_p("string", "state_event:事件槽位(五元之一——哪项状态)"),
|
|
760
|
+
old=_p("string", "state_event:变更前值(撤回时留空、new 必填;"
|
|
761
|
+
"old/new 双空非法)"),
|
|
762
|
+
new=_p("string", "state_event:变更后值(撤回=留空;空值即值作废)"),
|
|
733
763
|
include_recent=_p("boolean", "read:是否附近期事件窗口(默认否)"),
|
|
734
764
|
limit=_p("integer", "goal/recent 的返回条数;read 的近期事件条数;"
|
|
735
765
|
"edges 分页条数(缺省 50、上限 500,0/负数报错不当「全部」)"),
|
|
@@ -782,6 +812,13 @@ KERNEL_TOOLS = [
|
|
|
782
812
|
depth=_p("integer", "consistency:递归反思深度上限"),
|
|
783
813
|
condition_space=_p("object", "条件空间"),
|
|
784
814
|
verification_basis=_p("string", "验证基底"),
|
|
815
|
+
# A1 补接(2026-10-05,路线 C 动工时经 audit 现值面发现写链漏传后
|
|
816
|
+
# 一并补齐的三处接线之一):检验强度(与验证基底正交的裁决力分级)。
|
|
817
|
+
check_strength=_p("string", "检验强度:hoop|smoking_gun|doubly_decisive"
|
|
818
|
+
"(与 verification_basis 正交的裁决力分级;"
|
|
819
|
+
"覆写既有节点时默认继承)"),
|
|
820
|
+
# 路线 C(2026-10-05):audit 的截断上限。
|
|
821
|
+
cap=_p("integer", "audit:各面截断上限(1–64,缺省 8)"),
|
|
785
822
|
non_applicable_conditions=_p("array", "不适用条件"),
|
|
786
823
|
context=_p("object", "当前情境"),
|
|
787
824
|
k=_p("integer", "返回条数(sustain pool_bench 亦用)"),
|
|
@@ -791,7 +828,8 @@ KERNEL_TOOLS = [
|
|
|
791
828
|
"receipt(回执审计:命令与预期输出);"
|
|
792
829
|
"非法值库层报错(fail-closed)"),
|
|
793
830
|
budget_tokens=_p("integer", "read 的 token 预算"),
|
|
794
|
-
evidence=_p("string", "verify
|
|
831
|
+
evidence=_p("string", "verify 的证据;state_event:出处(五元之一,"
|
|
832
|
+
"回指原文/轮次)"),
|
|
795
833
|
verdict=_p("string", "verify 裁决:confirmed|weakened|falsified;"
|
|
796
834
|
"insight verify:verified|falsified"),
|
|
797
835
|
question=_p("string", "whitebox:ask/verify 的问题"),
|
|
@@ -884,7 +922,8 @@ KERNEL_TOOLS = [
|
|
|
884
922
|
"节点;**未生效(valid_from 未到)保留**"
|
|
885
923
|
"(两者语义相反,预约/计划类记忆生效前仍可召回)"),
|
|
886
924
|
ts=_p("number", "sustain note:事件时间戳"),
|
|
887
|
-
seq=_p("integer", "sustain note:事件序号"
|
|
925
|
+
seq=_p("integer", "sustain note:事件序号;state_event:事件序号"
|
|
926
|
+
"(五元之一——轮或序号)"),
|
|
888
927
|
task_running=_p("boolean", "sustain:任务执行中(心跳阈值放宽)"),
|
|
889
928
|
beat_interval=_p("number", "sustain start:心跳间隔秒(默认 600)"),
|
|
890
929
|
heal_interval=_p("number", "sustain start:巡检间隔秒(默认 300)"),
|
|
@@ -939,7 +978,8 @@ KERNEL_TOOLS = [
|
|
|
939
978
|
set=_p("object", "link policy:设置子系统签名策略"),
|
|
940
979
|
signers_file=_p("string", "link:签名策略文件(缺省 ~/.mdcg/_signers.json)"),
|
|
941
980
|
swarm=_p("string", "link:跨节点共享目录(缺省 ~/.mdcg/swarm)"),
|
|
942
|
-
subject=_p("string", "link evidence:按主体过滤(如 agent:node-x
|
|
981
|
+
subject=_p("string", "link evidence:按主体过滤(如 agent:node-x);"
|
|
982
|
+
"state_event:事件主体(五元之一——谁的状态)"),
|
|
943
983
|
subjects=_p("array", "link export:限定导出的主体列表"),
|
|
944
984
|
out=_p("string", "link export:证据包输出路径;export/maintain 输出路径"),
|
|
945
985
|
pack=_p("object", "link import:内联证据包(与 path 二选一)"),
|
|
@@ -1034,10 +1074,12 @@ KERNEL_TOOLS = [
|
|
|
1034
1074
|
"op=timeline:按时间排序(可用 session 切本会话/跨会话视图,"
|
|
1035
1075
|
"看「所有会话做了什么」传 session=\"*\",返回项带会话归属);"
|
|
1036
1076
|
"op=anchors:落在时间窗/空间范围的节点;"
|
|
1037
|
-
"op=consistency
|
|
1077
|
+
"op=consistency:时空字段自洽性检查;"
|
|
1078
|
+
"op=state_chain:状态槽位投影(现值/区间/变迁史;"
|
|
1079
|
+
"flag MDCG_STG_STATE 默认关)。"
|
|
1038
1080
|
"四个 op 均可用 time_axis 切换时间轴(缺省 observed)。",
|
|
1039
1081
|
"inputSchema": _s("",
|
|
1040
|
-
op=_p("string", "relation|timeline|anchors|consistency", True),
|
|
1082
|
+
op=_p("string", "relation|timeline|anchors|consistency|state_chain", True),
|
|
1041
1083
|
a=_p("string", "relation 的节点 a"), b=_p("string", "relation 的节点 b"),
|
|
1042
1084
|
time_window=_p("array", "anchors 的时间窗 [t1,t2]"),
|
|
1043
1085
|
bbox=_p("array", "anchors 的包围盒 [x1,y1,x2,y2]"),
|
|
@@ -1048,7 +1090,12 @@ KERNEL_TOOLS = [
|
|
|
1048
1090
|
"(frontmatter.session 精确相等)"),
|
|
1049
1091
|
desc=_p("boolean", "timeline 是否倒序(默认是)"),
|
|
1050
1092
|
time_axis=_p("string", "时间轴:observed(观察轴 temporal/time_window,"
|
|
1051
|
-
"缺省)| effective(效力轴 effective_from/until)")
|
|
1093
|
+
"缺省)| effective(效力轴 effective_from/until)"),
|
|
1094
|
+
subject=_p("string", "state_chain 的主体(省略=不过滤)"),
|
|
1095
|
+
slot=_p("string", "state_chain 的槽位(省略=不过滤)"),
|
|
1096
|
+
include_retired=_p("boolean", "state_chain 是否含退役槽位(默认 false;"
|
|
1097
|
+
"退役不删除,只是默认不列)"),
|
|
1098
|
+
history=_p("boolean", "state_chain 是否带变迁史(默认 true)")),
|
|
1052
1099
|
},
|
|
1053
1100
|
]
|
|
1054
1101
|
|
|
@@ -2079,7 +2126,10 @@ def _cg_dispatch(cg, a):
|
|
|
2079
2126
|
return _help_call(cg, a)
|
|
2080
2127
|
_p = getattr(cg, "principal", None)
|
|
2081
2128
|
if _p is not None and hasattr(_p, "require_op"):
|
|
2082
|
-
|
|
2129
|
+
# P3 写口(state_event)映射到既有 "write" op 词——不给令牌 face 引入新
|
|
2130
|
+
# op 词(角色白名单/派生收窄面零改动):凡 ops 白名单含 write 的角色可
|
|
2131
|
+
# 记账,guest/只读令牌照拒。其余 op 逐位不变。
|
|
2132
|
+
_p.require_op("write" if op == "state_event" else op)
|
|
2083
2133
|
|
|
2084
2134
|
if op == "status":
|
|
2085
2135
|
return _status_call(cg, a)
|
|
@@ -2337,6 +2387,26 @@ def _cg_dispatch(cg, a):
|
|
|
2337
2387
|
"reason": q2.get("reason"), **refindex.ref_fields(n)}
|
|
2338
2388
|
for n, s, q2 in res]}
|
|
2339
2389
|
|
|
2390
|
+
if op == "audit":
|
|
2391
|
+
# 路线 C(2026-10-05,多主体世界模型对齐 v0.1 §4):证据审计面——
|
|
2392
|
+
# 只读组装器(md_cg/auditview.py),零写路径改动。node_id 类型闸与
|
|
2393
|
+
# read 面同口径(类型错 ⇒ 结构化 error,不静默降级);截断参数用
|
|
2394
|
+
# `cap`(**故意不用 view/limit 等既有名**——view 已被 roleviews 占用,
|
|
2395
|
+
# 设计稿复核修订的命名约束)。
|
|
2396
|
+
_nid = a.get("node_id")
|
|
2397
|
+
if not isinstance(_nid, str) or not _nid.strip():
|
|
2398
|
+
return {"ok": False, "error": "node_id_not_str",
|
|
2399
|
+
"node_id": _nid, "got_type": type(_nid).__name__,
|
|
2400
|
+
"hint": "audit 需字符串 node_id(证据审计视图按节点组装);"
|
|
2401
|
+
"要按关键词检索请改用 query(read)"}
|
|
2402
|
+
from . import auditview
|
|
2403
|
+
_cap = a.get("cap")
|
|
2404
|
+
try:
|
|
2405
|
+
_cap = int(_cap) if _cap is not None else auditview.DEFAULT_CAP
|
|
2406
|
+
except (TypeError, ValueError):
|
|
2407
|
+
_cap = auditview.DEFAULT_CAP
|
|
2408
|
+
return auditview.build(cg, _nid, cap=max(1, min(64, _cap)))
|
|
2409
|
+
|
|
2340
2410
|
if op == "write":
|
|
2341
2411
|
# 写入路径拦截器链(Pi 钩子化移植,writepipe.py):六道闸以扩展
|
|
2342
2412
|
# 形态注册于 writepipe.default_pipeline(),次序/启停不再硬编码于
|
|
@@ -2379,6 +2449,26 @@ def _cg_dispatch(cg, a):
|
|
|
2379
2449
|
return {"events": cg.recent_events(limit=int(a.get("limit") or 20),
|
|
2380
2450
|
roles=a.get("roles"))}
|
|
2381
2451
|
|
|
2452
|
+
if op == "state_event":
|
|
2453
|
+
# L2 状态事件记账(P3 写口;设计稿 §2「事件是源、槽位是投影、查询走 stg」)。
|
|
2454
|
+
# actor **恒取令牌**(不接受请求参数——沿本文件既有防伪造口径:客户端
|
|
2455
|
+
# 不得改写归属);台账是直写盘面的 append-only 文件、**绕过库层节点写闸**,
|
|
2456
|
+
# 故在此显式补齐 require_write(缺了它:ops 白名单放行但 can_write=False
|
|
2457
|
+
# 的令牌也能落盘)。kind 归一:空串归 None——「未分类」是合法记账,
|
|
2458
|
+
# 而 append 对空串抛 ValueError。append 的 ValueError(缺 subject/slot、
|
|
2459
|
+
# old/new 双空、非法 kind)原样上抛(fail-closed,不吞)。
|
|
2460
|
+
from . import state_events as _se
|
|
2461
|
+
_actor = _p.actor if _p is not None else "system"
|
|
2462
|
+
if _p is not None:
|
|
2463
|
+
_p.require_write("internal")
|
|
2464
|
+
rec = _se.append(cg, a.get("subject"), a.get("slot"),
|
|
2465
|
+
old=a.get("old"), new=a.get("new"),
|
|
2466
|
+
kind=(a.get("kind") or "").strip() or None,
|
|
2467
|
+
seq=a.get("seq"),
|
|
2468
|
+
evidence=a.get("evidence") or "",
|
|
2469
|
+
actor=_actor)
|
|
2470
|
+
return {"ok": True, "event": rec}
|
|
2471
|
+
|
|
2382
2472
|
if op == "verify":
|
|
2383
2473
|
return cg.verify(a.get("node_id", ""), a.get("evidence", ""),
|
|
2384
2474
|
a.get("verdict", ""),
|
|
@@ -3163,13 +3253,25 @@ def _stg_call(cg, a):
|
|
|
3163
3253
|
if op == "consistency":
|
|
3164
3254
|
return stg.consistency(cg, layer=a.get("layer"),
|
|
3165
3255
|
limit=int(a.get("limit") or 50), time_axis=axis)
|
|
3256
|
+
if op == "state_chain":
|
|
3257
|
+
# 第 5 op:状态槽位投影(flag MDCG_STG_STATE **默认关**)。关臂由 stg 侧
|
|
3258
|
+
# 返回 disabled 返回体(**不抛**——「没开」不是错误,是与「没命中」可分辨的
|
|
3259
|
+
# 如实答复);开臂委托 md_cg/state_slots.py 现算(本层不复制投影逻辑)。
|
|
3260
|
+
# time_axis 与本 op 无关:台账事件行只有落账时间戳 t,无第二轴(不伪造)。
|
|
3261
|
+
return stg.state_chain(
|
|
3262
|
+
cg, subject=a.get("subject"), slot=a.get("slot"),
|
|
3263
|
+
include_retired=bool(a.get("include_retired", False)),
|
|
3264
|
+
history=bool(a.get("history", True)),
|
|
3265
|
+
limit=int(a.get("limit") or 50))
|
|
3166
3266
|
if not op:
|
|
3167
3267
|
# fail-closed 且给出可操作提示:stg 的 op 四值签名区分度低于 cg(relation 需
|
|
3168
3268
|
# a+b、timeline/anchors/consistency 皆以 layer+limit 为主),**不做签名推导**
|
|
3169
3269
|
# ——猜错会静默返回错误视图,比报错更贵。
|
|
3170
3270
|
raise ValueError("stg 的 op 为必填参数(缺失即报错,不静默降级);"
|
|
3171
|
-
"允许 op:relation | timeline | anchors | consistency"
|
|
3172
|
-
|
|
3271
|
+
"允许 op:relation | timeline | anchors | consistency | "
|
|
3272
|
+
"state_chain")
|
|
3273
|
+
raise ValueError(f"stg 未知 op:{op}(允许 relation | timeline | anchors | "
|
|
3274
|
+
f"consistency | state_chain)")
|
|
3173
3275
|
|
|
3174
3276
|
|
|
3175
3277
|
# --------------------------------------------------------------------------
|
|
@@ -3341,6 +3443,9 @@ def _dispatch(cg, name, args):
|
|
|
3341
3443
|
role=a.get("role"), tags=a.get("tags"),
|
|
3342
3444
|
condition_space=a.get("condition_space"),
|
|
3343
3445
|
verification_basis=a.get("verification_basis"),
|
|
3446
|
+
# A1 补接(2026-10-05):检验强度同族透传(remember_gated 内部
|
|
3447
|
+
# add(**kw) 直达;此前声明在 gated 分支静默丢弃)。
|
|
3448
|
+
check_strength=a.get("check_strength"),
|
|
3344
3449
|
non_applicable_conditions=a.get("non_applicable_conditions"),
|
|
3345
3450
|
importance_hint=hint, override=bool(a.get("override")),
|
|
3346
3451
|
consistency=bool(a.get("consistency", True)),
|
|
@@ -3390,6 +3495,9 @@ def _dispatch(cg, name, args):
|
|
|
3390
3495
|
_meta = {k: a[k] for k in
|
|
3391
3496
|
("tags", "condition_space", "verification_basis",
|
|
3392
3497
|
"non_applicable_conditions", "derived_from", "relation",
|
|
3498
|
+
# A1 补接(2026-10-05):检验强度入复现 meta——与
|
|
3499
|
+
# writepipe._AUTONOMY_META_KEYS 同款(两条路径元数据等价)。
|
|
3500
|
+
"check_strength",
|
|
3393
3501
|
"role", "importance") if a.get(k) is not None}
|
|
3394
3502
|
# 直写面的裁决参数(本分支的 add 会自己跑冲突闸):随单落进复现 meta,
|
|
3395
3503
|
# 否则「确认后落盘」与「直接落盘」两条路径的判据不等价。
|
|
@@ -3416,6 +3524,8 @@ def _dispatch(cg, name, args):
|
|
|
3416
3524
|
condition_space=a.get("condition_space"),
|
|
3417
3525
|
importance=float(a.get("importance", 0.5)),
|
|
3418
3526
|
verification_basis=a.get("verification_basis"),
|
|
3527
|
+
# A1 补接(2026-10-05):检验强度透传(同 B2)。
|
|
3528
|
+
check_strength=a.get("check_strength"),
|
|
3419
3529
|
non_applicable_conditions=a.get("non_applicable_conditions"),
|
|
3420
3530
|
override=bool(a.get("override")),
|
|
3421
3531
|
consistency=bool(a.get("consistency", True)),
|