progmune-runtime 2.0.4 → 2.1.1

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.
Files changed (110) hide show
  1. package/.mcp.json +11 -0
  2. package/.progmune_allowlist +50 -0
  3. package/.test_report/test_report.md +87 -0
  4. package/Dockerfile +2 -10
  5. package/FAQ.md +167 -0
  6. package/README.md +108 -54
  7. package/demo-project/auth.ts +55 -0
  8. package/demo-project/tsconfig.json +8 -0
  9. package/dist/ab-stats.js +11 -0
  10. package/dist/acl-breakdown.js +13 -0
  11. package/dist/action-runtime.js +1 -0
  12. package/dist/all-sessions.js +11 -0
  13. package/dist/antibody-stats.js +11 -0
  14. package/dist/audit.js +222 -0
  15. package/dist/benchmark-count.js +7 -0
  16. package/dist/benchmark-full.js +17 -0
  17. package/dist/benchmark-pass-rate.js +54 -0
  18. package/dist/benchmark-report.js +67 -0
  19. package/dist/benchmark-save.js +62 -0
  20. package/dist/benchmark-status.js +15 -0
  21. package/dist/branch-ledger.js +393 -0
  22. package/dist/branch-tree-count.js +14 -0
  23. package/dist/check.js +506 -0
  24. package/dist/common-fixpath.js +12 -0
  25. package/dist/constraint-types.js +12 -0
  26. package/dist/deterministic-replay.js +283 -0
  27. package/dist/emitter.js +143 -12
  28. package/dist/exec-metrics.js +11 -0
  29. package/dist/execute.js +251 -0
  30. package/dist/extract-ir.js +592 -5
  31. package/dist/failure-collector.js +163 -0
  32. package/dist/failure-corpus.js +507 -35
  33. package/dist/failure-report.js +11 -0
  34. package/dist/failures.js +11 -0
  35. package/dist/fast-path-hits.js +13 -0
  36. package/dist/feedback.js +10 -3
  37. package/dist/file-lock.js +82 -0
  38. package/dist/find-session.js +10 -0
  39. package/dist/fingerprint-list.js +15 -0
  40. package/dist/gen-history-log.js +13 -0
  41. package/dist/generate.js +2 -1
  42. package/dist/generate_500.js +4 -2
  43. package/dist/genome.js +11 -0
  44. package/dist/heatmap-data.js +11 -0
  45. package/dist/heatmap.js +11 -0
  46. package/dist/immune-reporter.js +34 -22
  47. package/dist/ir-utils.js +18 -0
  48. package/dist/learned.js +11 -0
  49. package/dist/ledger-registry.js +252 -0
  50. package/dist/llm.js +46 -2
  51. package/dist/load-benchmarks.js +47 -0
  52. package/dist/main.js +2 -1
  53. package/dist/mcp-server.mjs +445 -43
  54. package/dist/memory-layer.js +54 -13
  55. package/dist/metrics.js +11 -0
  56. package/dist/obs-web.js +561 -0
  57. package/dist/p0_ssg_demo.js +255 -40
  58. package/dist/planner.js +996 -80
  59. package/dist/protocol-registry.js +112 -0
  60. package/dist/recent-session.js +12 -0
  61. package/dist/repair-proposal.js +363 -0
  62. package/dist/runtime-invariants.js +170 -0
  63. package/dist/runtime-types.js +117 -0
  64. package/dist/runtime.js +1 -0
  65. package/dist/search-planner.js +39 -9
  66. package/dist/semantic-snapshot.js +157 -0
  67. package/dist/semantic-trace.js +1497 -0
  68. package/dist/semantic-validator.js +3 -2
  69. package/dist/semantic_guard_test.js +2 -1
  70. package/dist/session-utils.js +19 -0
  71. package/dist/sessions.js +11 -0
  72. package/dist/ssg-validator.js +666 -20
  73. package/dist/svl-distribution.js +11 -0
  74. package/dist/terminal-status.js +11 -0
  75. package/dist/test_failure_corpus.js +3 -1
  76. package/dist/token-savings.js +11 -0
  77. package/dist/total-repairs.js +12 -0
  78. package/dist/unresolved-count.js +12 -0
  79. package/dist/utils.js +2 -0
  80. package/dist/valid-fingerprints.js +13 -0
  81. package/dist/validator.js +118 -60
  82. package/dist/verify-fps.js +11 -0
  83. package/dist/verify-ledgers.js +11 -0
  84. package/docs/whitepaper-style.css +77 -0
  85. package/docs/whitepaper-v2.1.md +609 -0
  86. package/docs/whitepaper-v2.2.md +1064 -0
  87. package/docs/whitepaper-v2.2.pdf +0 -0
  88. package/fly.toml +1 -1
  89. package/package.json +13 -4
  90. package/protocols.json +131 -11
  91. package/public/dashboard.html +119 -0
  92. package/server/hub.js +84 -12
  93. package/test/replay-golden/sess_1780063202050_mgeld.json +9 -0
  94. package/test/replay-golden/sess_1780064032560_gocld.json +354 -0
  95. package/test/replay-golden/sess_1780064413331_s2709.json +606 -0
  96. package/test/replay-golden/sess_1780064792710_y3avo.json +614 -0
  97. package/test/replay-golden.ts +84 -0
  98. package/test_benchmark.js +165 -0
  99. package/test_comprehensive.mjs +638 -0
  100. package/test_concurrency.js +129 -0
  101. package/test_ir_robustness.js +85 -0
  102. package/test_semantic_contracts.js +269 -0
  103. package/test_ssg_stress.js +156 -0
  104. package/test_svl3.js +58 -0
  105. package/tsconfig.json +1 -1
  106. package/.env.example +0 -3
  107. package/.progmune_memory/episodic.json +0 -186
  108. package/.progmune_memory/fingerprints.json +0 -7
  109. package/.progmune_memory/opt_in.json +0 -4
  110. package/immune_hub_data/2026-05-14.json +0 -50
package/.mcp.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "progmune": {
4
+ "type": "stdio",
5
+ "command": "node",
6
+ "args": [
7
+ "dist/mcp-server.mjs"
8
+ ]
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,50 @@
1
+ # Progmune Allowlist — files exempt from @progmune-generated requirement
2
+ # Add patterns (one per line) for files that don't need the marker.
3
+ # Lines starting with # are comments.
4
+
5
+ # Configuration files
6
+ \\.json$
7
+ \\.md$
8
+ \\.sh$
9
+ \\.css$
10
+ \\.html$
11
+
12
+ # Test files
13
+ test-.*
14
+ .*\\.test\\.ts$
15
+ .*\\.spec\\.ts$
16
+ test_.*\\.ts$
17
+ test_.*\\.mjs$
18
+ test_.*\\.js$
19
+
20
+ # Build artifacts
21
+ dist/
22
+ node_modules/
23
+
24
+ # Progmune's own infrastructure (core files that predate Phase 4.5)
25
+ src/runtime-types\\.ts$
26
+ src/runtime-invariants\\.ts$
27
+ src/ssg-validator\\.ts$
28
+ src/failure-corpus\\.ts$
29
+ src/memory-layer\\.ts$
30
+ src/planner\\.ts$
31
+ src/emitter\\.ts$
32
+ src/extract-ir.*\\.ts$
33
+ src/validator\\.ts$
34
+ src/semantic-validator\\.ts$
35
+ src/action-runtime\\.ts$
36
+ src/actions\\.ts$
37
+ src/llm\\.ts$
38
+ src/utils\\.ts$
39
+ src/feedback\\.ts$
40
+ src/immune-reporter\\.ts$
41
+ src/report\\.ts$
42
+ src/file-lock\\.ts$
43
+ src/consolidate\\.ts$
44
+ src/mcp-server\\.ts$
45
+ src/check\\.ts$
46
+ src/semantic-trace\\.ts$
47
+ src/semantic-snapshot\\.ts$
48
+ src/obs-web\\.ts$
49
+ src/p0_ssg_demo\\.ts$
50
+ src/main\\.ts$
@@ -0,0 +1,87 @@
1
+ # Progmune Runtime 综合测试报告
2
+
3
+ **测试时间**: 2026-05-23 14:15:09
4
+ **运行时长**: 3171ms
5
+ **测试版本**: 2.0.5
6
+ **LLM 后端**: DeepSeek Chat (deepseek-chat)
7
+ **Node 版本**: v20.11.1
8
+
9
+ ---
10
+
11
+ ## 测试结果摘要
12
+
13
+ | 指标 | 数值 |
14
+ |------|------|
15
+ | 总用例 | 29 |
16
+ | 通过 | 29 |
17
+ | 失败 | 0 |
18
+ | 通过率 | 100.0% |
19
+
20
+ ## 逐项测试详情
21
+
22
+ | # | 测试项 | 状态 | 说明 |
23
+ |---|--------|------|------|
24
+ | 1 | MCP tools/list 返回工具列表 | ✅ PASS | 返回 2 个工具 |
25
+ | 2 | MCP 暴露 progmune_generate 工具 | ✅ PASS | 工具名: progmune_generate |
26
+ | 3 | 工具包含 intent 参数 | ✅ PASS | |
27
+ | 4 | 工具包含 projectPath 参数 | ✅ PASS | |
28
+ | 5 | SVL-1: 调用存在的函数通过 | ✅ PASS | |
29
+ | 6 | SVL-1: 拦截不存在的函数 | ✅ PASS | 错误: 函数 'nonexistent_func' 不存在 |
30
+ | 7 | SVL-1: 错误消息包含"不存在" | ✅ PASS | 函数 'nonexistent_func' 不存在 |
31
+ | 8 | SVL-2: 参数数量匹配通过 | ✅ PASS | |
32
+ | 9 | SVL-2: 拦截参数数量不匹配 | ✅ PASS | 错误: 参数数量不匹配: 期望 2, 实际 1 |
33
+ | 10 | SVL-2: 错误消息包含"参数数量" | ✅ PASS | 参数数量不匹配: 期望 2, 实际 1 |
34
+ | 11 | SVL-3: 变量先声明后使用通过 | ✅ PASS | |
35
+ | 12 | SVL-3: 拦截未声明变量 | ✅ PASS | 错误: 变量 'undeclaredVar' 在赋值前未声明 |
36
+ | 13 | SVL-3: 拦截条件中未声明变量 | ✅ PASS | 错误: 条件中引用了未声明的变量 'undefinedVar' |
37
+ | 14 | SVL-3: 复杂嵌套变量流通过 | ✅ PASS | |
38
+ | 15 | SVL-4: 认证动作合法 | ✅ PASS | 状态: UNAUTHENTICATED -> AUTHENTICATED |
39
+ | 16 | SVL-4: 认证后签发令牌合法 | ✅ PASS | 状态: AUTHENTICATED -> TOKEN_ISSUED |
40
+ | 17 | SVL-4: 拦截未认证直接签发令牌 | ✅ PASS | 错误: [PROGMUNE] L4 协议违规:issue_token
41
+ 当前状态:UNAUTHENTICATED
42
+ 期望前置状态:AUTHENTICATED
43
+ 缺失步骤:authenticate → AUTHENTICATED |
44
+ | 18 | Failure Corpus: 记录失败案例 | ✅ PASS | 共 17 条 |
45
+ | 19 | Failure Corpus: 按 SVL-1 过滤 | ✅ PASS | 找到 2 条 |
46
+ | 20 | Failure Corpus: 生成失败模式统计 | ✅ PASS | [{"pattern":"SVL-4:protocol","count":11},{"pattern":"SVL-1:symbol_existence","count":2},{"pattern":"SVL-2:type_mismatch","count":2}] |
47
+ | 21 | 记忆系统: 记录情景记忆 | ✅ PASS | 共 5 条 |
48
+ | 22 | 记忆系统: 过滤成功情景 | ✅ PASS | 共 5 条 |
49
+ | 23 | 记忆系统: 语义模板巩固与匹配 | ✅ PASS | 模板: tmpl_1779545707638, 成功率: 1 |
50
+ | 24 | 边界: 空动作序列通过 | ✅ PASS | |
51
+ | 25 | 边界: 拦截未知动作类型 | ✅ PASS | 无效动作类型: 'invalid_kind' |
52
+ | 26 | 边界: 多层嵌套通过 | ✅ PASS | |
53
+ | 27 | 白名单: 内置函数通过校验 | ✅ PASS | console.log, JSON.stringify |
54
+ | 28 | 端到端: 生成动作序列 | ✅ PASS | 共 2 个动作 |
55
+ | 29 | 端到端: 生成 Python 代码 | ✅ PASS | 代码长度: 144 字符 |
56
+
57
+ ---
58
+
59
+ ## SVL 层级覆盖矩阵
60
+
61
+ | SVL 级别 | 名称 | 测试覆盖 | 状态 |
62
+ |:---------:|:----|:---------|:----:|
63
+ | SVL-1 | 符号存在性 | 调用存在/不存在函数校验 | ✅ |
64
+ | SVL-2 | 类型有效性 | 参数数量匹配校验 | ✅ |
65
+ | SVL-3 | 数据流正确性 | 变量声明/使用、嵌套作用域 | ✅ |
66
+ | SVL-4 | 协议合法性 | SSG 状态机、非法跃迁拦截 | ✅ |
67
+
68
+ ## 系统组件覆盖
69
+
70
+ | 组件 | 测试覆盖 | 状态 |
71
+ |:-----|:---------|:----:|
72
+ | MCP 协议层 | tools/list、tools/call | ✅ |
73
+ | 校验引擎 (Validator) | SVL-1~3 校验 | ✅ |
74
+ | SSG 状态机 | 协议跃迁校验 | ✅ |
75
+ | Failure Corpus | 记录/查询/模式统计 | ✅ |
76
+ | 三层记忆系统 | 情景记忆/语义模板 | ✅ |
77
+ | 代码生成器 | 动作序列 → Python | ✅ |
78
+ | 内置白名单 | console.log / fetch 等 | ✅ |
79
+ | 边界情况 | 空序列/嵌套/非法类型 | ✅ |
80
+
81
+ ## 结论
82
+
83
+ **全部测试通过。** Progmune Runtime 各核心组件运行正常,约束引擎、SSG 协议校验、记忆系统和 Failure Corpus 均按预期工作。
84
+
85
+ ---
86
+
87
+ *报告由 Progmune Runtime 综合测试套件自动生成*
package/Dockerfile CHANGED
@@ -1,17 +1,9 @@
1
1
  FROM node:18-alpine
2
-
3
2
  WORKDIR /app
4
-
5
- # 只复制运行时需要的文件
6
3
  COPY server/ ./server/
7
4
  COPY dist/ ./dist/
5
+ COPY public/ ./public/
8
6
  COPY package.json package-lock.json* ./
9
-
10
- # 安装生产依赖
11
7
  RUN npm install --production
12
-
13
- # 暴露端口
14
- EXPOSE 3000
15
-
16
- # 启动中央免疫服务器
8
+ EXPOSE 8080
17
9
  CMD ["node", "server/hub.js"]
package/FAQ.md ADDED
@@ -0,0 +1,167 @@
1
+ # Progmune Runtime 常见问题 (FAQ)
2
+
3
+ ## 安装与配置
4
+
5
+ ### 如何获取 LLM API 密钥?
6
+
7
+ Progmune 需要 LLM API 密钥来生成代码。目前支持 DeepSeek 和 OpenAI 兼容接口。
8
+
9
+ **DeepSeek:**
10
+ 1. 访问 https://platform.deepseek.com/api_keys
11
+ 2. 注册账号并创建 API 密钥
12
+ 3. 密钥格式:`sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
13
+
14
+ **OpenAI:**
15
+ 1. 访问 https://platform.openai.com/api-keys
16
+ 2. 创建 API 密钥
17
+ 3. 设置环境变量 `LLM_BASE_URL=https://api.openai.com/v1` 和 `LLM_MODEL=gpt-4`
18
+
19
+ ### 如何配置 API 密钥?
20
+
21
+ **方式一:MCP 客户端配置(推荐)**
22
+ 在 `~/.claude/settings.json` 中:
23
+ ```json
24
+ {
25
+ "mcpServers": {
26
+ "progmune": {
27
+ "command": "npx",
28
+ "args": ["progmune-runtime"],
29
+ "env": {
30
+ "LLM_API_KEY": "你的密钥",
31
+ "LLM_BASE_URL": "https://api.deepseek.com/v1"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ **方式二:环境变量**
39
+ ```bash
40
+ export LLM_API_KEY="你的密钥"
41
+ npx progmune-runtime
42
+ ```
43
+
44
+ **方式三:快速配置命令**
45
+ ```bash
46
+ npx progmune-runtime setup 你的密钥
47
+ ```
48
+
49
+ ### 如何验证安装是否成功?
50
+
51
+ ```bash
52
+ # 检查版本
53
+ npx progmune-runtime --version
54
+
55
+ # 检查 MCP 工具列表(需在 MCP 客户端中)
56
+ # 应看到 progmune_generate 和 progmune_status 两个工具
57
+
58
+ # 运行内置测试
59
+ npx progmune-runtime test
60
+ ```
61
+
62
+ ### 为什么浏览器打不开仪表板?
63
+
64
+ 如果运行 `open http://localhost:8080/` 无效:
65
+
66
+ 1. **确认 Hub 服务器正在运行:**
67
+ ```bash
68
+ curl http://localhost:8080/api/dashboard
69
+ ```
70
+ 如果返回 JSON 数据,说明服务器运行正常。
71
+
72
+ 2. **手动在浏览器打开:**
73
+ - 在地址栏输入 `http://localhost:8080/`
74
+ - 注意使用 `http://` 而非 `https://`(本地服务器不支持 HTTPS)
75
+
76
+ 3. **端口冲突:**
77
+ - 默认端口 8080,可通过 `PORT` 环境变量修改
78
+ - 检查是否有其他程序占用:`lsof -i :8080`
79
+
80
+ ## 使用问题
81
+
82
+ ### MCP 配置失败怎么办?
83
+
84
+ **症状:** Claude Code 提示 "MCP server progmune not found"
85
+
86
+ **排查步骤:**
87
+ 1. 确认 `~/.claude/settings.json` 中配置格式正确
88
+ 2. 确认 Node.js >= 18 已安装:`node --version`
89
+ 3. 尝试手动启动验证:`npx progmune-runtime`
90
+ 4. 检查 Claude Code 日志中是否有错误信息
91
+
92
+ **症状:** 调用 `progmune_generate` 返回 "未设置 LLM_API_KEY"
93
+
94
+ 即使已在终端 `export` 了密钥,MCP 子进程也可能无法继承。必须在 `settings.json` 的 `env` 字段中显式配置。
95
+
96
+ ### 如何开启免疫网络上报?
97
+
98
+ ```bash
99
+ # 开启(推荐)
100
+ npx progmune-runtime opt-in enable
101
+
102
+ # 关闭
103
+ npx progmune-runtime opt-in disable
104
+
105
+ # 查看状态
106
+ npx progmune-runtime opt-in status
107
+ ```
108
+
109
+ 开启后,每次代码生成的脱敏错误指纹会自动上报到中央免疫服务器。
110
+
111
+ ### 如何部署中央免疫服务器?
112
+
113
+ ```bash
114
+ # 启动本地 Hub
115
+ cd progmune-runtime
116
+ node server/hub.js
117
+
118
+ # 设置环境变量让 MCP 服务器自动上报
119
+ export PROGMUNE_HUB=http://localhost:8080/report
120
+ ```
121
+
122
+ 仪表板访问:`http://localhost:8080/`
123
+
124
+ ## 错误与调试
125
+
126
+ ### "无法生成满足约束的代码"
127
+
128
+ 这意味着 LLM 生成的代码未能通过 Progmune 的约束校验(SVL-1~4)。常见原因:
129
+
130
+ 1. **IR 为空:** 项目目录中没有提取到函数定义。确认 `projectPath` 指向包含 `.py` 文件的目录。
131
+ 2. **LLM 输出不符合格式:** DeepSeek/OpenAI 返回了非预期的格式。重试通常可以解决。
132
+ 3. **SSG 协议违规:** 生成的代码跳过了必要的业务步骤。错误信息会提示缺失的步骤。
133
+
134
+ ### "函数 'xxx' 不存在"
135
+
136
+ 这是 SVL-1 符号存在性校验的拦截。说明 LLM 幻觉调用了一个项目中不存在的函数。这是 Progmune 的正常保护行为。
137
+
138
+ ### 如何查看运行状态?
139
+
140
+ 通过 MCP 调用 `progmune_status` 工具,返回 JSON 格式的运行状态,包括:
141
+ - LLM 模型和调用次数
142
+ - 免疫网络状态
143
+ - Failure Corpus 统计
144
+ - 记忆系统状态
145
+
146
+ ## 技术细节
147
+
148
+ ### Progmune 支持哪些语言?
149
+
150
+ 目前代码生成支持 **Python**。IR 提取支持 Python 项目(通过 `extract-ir-python.ts`)。
151
+
152
+ ### 数据隐私如何保障?
153
+
154
+ 上报到中央免疫服务器的数据**只包含**:
155
+ - 函数名序列(如 `verify_password → generate_jwt`)
156
+ - SVL 违规级别
157
+ - 约束类型
158
+
159
+ **绝不包含**:
160
+ - 代码片段
161
+ - 变量值
162
+ - 文件内容
163
+ - 用户数据
164
+
165
+ ### 如何贡献?
166
+
167
+ 欢迎通过 GitHub Issues 提交"看似合法但实际危险"的生成案例,帮助我们完善语义状态图(SSG)协议。
package/README.md CHANGED
@@ -1,12 +1,27 @@
1
1
  # Progmune Runtime(免序)
2
2
 
3
- **程序免疫学:为生成式程序建立免疫系统**
3
+ **程序免疫学:约束引导的程序合成运行时**
4
4
 
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
  [![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io)
7
7
  [![Stage: Technical Preview](https://img.shields.io/badge/Stage-Technical_Preview-orange)]()
8
8
 
9
- **Progmune(免序)不是一个 AI 编程助手,而是一个面向生成式程序的免疫系统。** 它将大语言模型(LLM)从开放世界的代码生成器,降级为在程序真相层(IR)严格约束下的启发式搜索器,确保生成的代码不仅在符号和类型上正确,更在行为协议上合法。
9
+ Progmune(免序)不是一个 AI 编程助手,而是一个面向生成式程序的免疫系统。它将大语言模型(LLM)从开放世界的代码生成器,降级为在程序真相层(IR)严格约束下的启发式搜索器,确保生成的代码不仅在符号和类型上正确,更在行为协议上合法。
10
+
11
+ ---
12
+
13
+ ## 目录
14
+
15
+ - [核心命题](#核心命题ai-生成的程序必须具备免疫系统)
16
+ - [架构概览](#架构概览一个会学习会记忆会防御的运行时)
17
+ - [语义有效性级别 (SVL)](#语义有效性级别-svl)
18
+ - [v2.1.0 新特性:抗体与快照](#v210-新特性抗体与快照)
19
+ - [Semantic Observatory](#semantic-observatory语义观测台)
20
+ - [快速开始](#快速开始)
21
+ - [CLI 命令](#cli-命令)
22
+ - [MCP 工具](#mcp-工具)
23
+ - [全球免疫网络](#全球免疫网络-global-immune-network)
24
+ - [许可证](#许可证)
10
25
 
11
26
  ---
12
27
 
@@ -14,7 +29,7 @@
14
29
 
15
30
  LLM 在生成代码时会产生“幻觉”——调用不存在的函数、违反类型约束、跳过关键的业务步骤。传统的提示工程和事后校验无法根除这些问题,因为它们将 LLM 置于系统的中心,缺乏第一性原理的约束。
16
31
 
17
- Progmune 提出**程序免疫学(Program Immunology)**范式,为生成式程序建立一套可识别、可记忆、可进化的防御体系。我们证明了,通过将程序的真实结构(IR)确立为唯一真相源,可以使 AI 生成的代码具备:
32
+ Progmune 提出**程序免疫学(Program Immunology)**范式,为生成式程序建立一套可识别、可记忆、可进化的防御体系:
18
33
 
19
34
  1. **天然免疫**:快速识别并拒绝违反符号存在性、类型兼容性和数据流规则的代码。
20
35
  2. **获得性免疫**:从过去的失败案例中学习,生成特异性的防御规则,主动预防未来同类错误。
@@ -26,22 +41,47 @@ Progmune 提出**程序免疫学(Program Immunology)**范式,为生成式
26
41
 
27
42
  ## 架构概览:一个会学习、会记忆、会防御的运行时
28
43
 
29
- Progmune 的架构受生物免疫系统启发,分为六个核心层:
44
+ Progmune 的架构受生物免疫系统启发,分为核心防御层:
30
45
 
31
46
  | 生物免疫系统 | 程序免疫 (Progmune) | 核心职责 |
32
- |-------------|---------------------|----------|
47
+ |:-------------|:--------------------|:---------|
33
48
  | **天然免疫** | **约束引擎** (IR + SVL-1~SVL-3) | 快速、自动地拒绝调用不存在的函数、类型错误和数据流问题。 |
34
49
  | **获得性免疫** | **语义状态图 (SSG)** | 通过可编程的状态机,精确拦截非法业务逻辑跃迁(如“未认证即签发令牌”)。 |
35
- | **免疫记忆** | **三层记忆架构** | 工作记忆、情景记忆和语义记忆协同,让系统越用越聪明,相似意图可跳过LLM直接复用验证过的路径。 |
36
- | **抗原呈递** | **Failure Corpus** | 结构化的失败案例库,每一次拦截都转化为可分析的“错误指纹”,为系统进化提供数据基础。 |
50
+ | **免疫记忆** | **三层记忆 + Failure Corpus** | 工作记忆、情景记忆和语义记忆协同;失败基因组记录每次语义异常、修复路径和适应轨迹。 |
51
+ | **抗体生成** | **Antibody Registry** | **v2.1.0 新增**:从失败中自动挖掘修复模式,生成 ACL-1~4 置信度分级的免疫规则。 |
52
+ | **免疫观测** | **Semantic Observatory** | 终端原生语义观测工具——时间线、认知回放、状态机追踪、基因组热力图。 |
53
+
54
+ ---
55
+
56
+ ## v2.1.0 新特性:抗体与快照
57
+
58
+ 在 v2.1.0 版本中,Progmune 实现了从“被动拦截”到“主动防御”的跨越:
59
+
60
+ * **抗体注册表 (Antibody Registry)**:系统自动从 `Failure Corpus` 中提取修复模式。高置信度(ACL-4)的抗体可触发“免疫快跑”,绕过 LLM 直接应用验证过的修复路径。
61
+ * **语义快照引擎 (Snapshot Engine)**:在规划时自动捕获 IR 状态。支持通过 `diff` 命令对比不同时间点的 IR 差异,解决因环境漂移导致的生成失败。
62
+ * **BFS 协议修复**:SSG 验证器现在使用广度优先搜索寻找多步修复路径,能够自动补全复杂的协议缺失(如 `INIT` -> `EMAIL_OK` -> `PWD_HASHED`)。
63
+
64
+ ---
65
+
66
+ ## 语义有效性级别 (SVL)
67
+
68
+ Progmune 定义了 AI 生成代码正确性的分层标准:
69
+
70
+ | 级别 | 名称 | 保证 |
71
+ |:-----|:-----|:-----|
72
+ | SVL-1 | 符号存在性 | 绝不调用项目中不存在的函数 |
73
+ | SVL-2 | 类型有效性 | 参数数量和类型严格匹配 |
74
+ | SVL-3 | 数据流正确性 | 变量先声明后使用,无循环引用 |
75
+ | SVL-4 | 协议合法性 | 业务步骤顺序必须遵守状态迁移规则 |
37
76
 
38
77
  ---
39
78
 
40
79
  ## 快速开始
41
80
 
42
81
  ### 前置条件
43
- - [Node.js](https://nodejs.org/) >= 18
44
- - 一个有效的 LLM API 密钥(DeepSeek 或 OpenAI 兼容接口)
82
+
83
+ * [Node.js](https://nodejs.org/) >= 18
84
+ * 一个有效的 LLM API 密钥(DeepSeek 或 OpenAI 兼容接口)
45
85
 
46
86
  ### 1. 安装
47
87
 
@@ -49,70 +89,84 @@ Progmune 的架构受生物免疫系统启发,分为六个核心层:
49
89
  npm install -g progmune-runtime
50
90
  ```
51
91
 
52
- ### 2. 配置 LLM API 密钥
92
+ ### 2. 配置
93
+
53
94
  ```bash
54
- export LLM_API_KEY="你的DeepSeek或OpenAI密钥"
95
+ npx progmune-runtime setup "你的API密钥"
55
96
  ```
56
97
 
57
- ### 3. 在 MCP 客户端中配置
58
- **Claude Code**: 编辑 `~/.claude/settings.json` 并添加:
59
-
60
- ```json
61
- {
62
- "mcpServers": {
63
- "progmune": {
64
- "command": "npx",
65
- "args": ["progmune-runtime"]
66
- }
67
- }
68
- }
98
+ ### 3. 验证
99
+
100
+ ```bash
101
+ npx progmune-runtime test
69
102
  ```
70
103
 
71
- **Manus / 其他客户端**: Command: `npx`, Args: `progmune-runtime`。
104
+ ---
105
+
106
+ ## 许可证
107
+
108
+ MIT License。
72
109
 
73
- 配置完成后,在对话中直接描述编程需求,AI 代理会自动调用 Progmune 生成安全代码。
110
+ Progmune 正在重新定义 AI 辅助编程——不是“让模型更聪明”,而是“让程序真相主导生成”。
74
111
 
75
112
  ---
76
113
 
77
- ## 全球免疫网络 (Global Immune Network)
78
- Progmune 支持将本地脱敏后的错误指纹安全上报至中央免疫服务器,实现“群体免疫”。
114
+ # Progmune Runtime
79
115
 
80
- **设置中央服务器地址**:
81
- ```bash
82
- export PROGMUNE_HUB="https://progmune-runtime.fly.dev/report"
83
- ```
116
+ **Program Immunology: Constraint-Guided Program Synthesis Runtime**
84
117
 
85
- **预览待上报的脱敏数据**:
86
- ```bash
87
- npx ts-node src/report.ts preview
88
- ```
118
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
119
+ [![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io)
120
+ [![Stage: Technical Preview](https://img.shields.io/badge/Stage-Technical_Preview-orange)]()
89
121
 
90
- **执行安全上报**:
91
- ```bash
92
- npx ts-node src/report.ts report
93
- ```
122
+ Progmune is not an AI programming assistant, but an immune system for generative programs. It demotes LLMs from open-world code generators to heuristic searchers strictly constrained by the Program Truth Layer (IR).
123
+
124
+ ---
125
+
126
+ ## v2.1.0 New Features: Antibodies & Snapshots
94
127
 
95
- **隐私保护**: 只上传函数名序列、SVL级别、状态迁移,绝不包含任何代码片段、变量值或用户数据。
128
+ v2.1.0 marks a major leap from "passive interception" to "active defense":
129
+
130
+ * **Antibody Registry**: Automatically extracts repair patterns from the `Failure Corpus`. High-confidence (ACL-4) antibodies trigger "Immune Fast-Path," bypassing the LLM to apply validated fixes directly.
131
+ * **Semantic Snapshot Engine**: Captures the exact IR state during planning. Supports `diff` commands to track IR evolution and debug environment drift.
132
+ * **BFS Protocol Repair**: The SSG validator now uses Breadth-First Search to find multi-hop repair paths, automatically filling complex protocol gaps.
96
133
 
97
134
  ---
98
135
 
99
- ## 语义有效性级别 (SVL)
100
- Progmune 定义了 AI 生成代码正确性的分层标准:
136
+ ## Architecture Overview
101
137
 
102
- | 级别 | 名称 | 保证 |
103
- |---|---|---|
104
- | SVL-1 | 符号存在性 | 绝不调用项目中不存在的函数 |
105
- | SVL-2 | 类型有效性 | 参数数量和类型严格匹配 |
106
- | SVL-3 | 数据流正确性 | 变量先声明后使用,无循环引用 |
107
- | SVL-4 | 协议合法性 | 业务步骤顺序必须遵守状态迁移规则 |
138
+ | Biological Immune System | Program Immunology (Progmune) | Core Responsibility |
139
+ |:-------------------------|:------------------------------|:--------------------|
140
+ | **Innate Immunity** | **Constraint Engine** (IR + SVL-1~3) | Rejects non-existent functions, type errors, and dataflow issues. |
141
+ | **Adaptive Immunity** | **Semantic State Graph (SSG)** | Intercepts illegal business logic transitions (e.g., "issue token before auth"). |
142
+ | **Immune Memory** | **Three-Layer Memory** | Working, episodic, and semantic memory collaborate to make the system smarter with use. |
143
+ | **Antibody Generation** | **Antibody Registry** | **New in v2.1.0**: Mines repair patterns and generates ACL-1~4 graded immune rules. |
108
144
 
109
145
  ---
110
146
 
111
- ## 如何贡献
112
- Progmune 的核心护城河在于不断积累的语义失败语料库。欢迎通过 GitHub Issues 提交您在使用过程中遇到的“看似合法但实际危险”的生成案例(请务必脱敏),帮助我们完善语义状态图(SSG)协议。
147
+ ## Semantic Validity Levels (SVL)
113
148
 
114
- ## 许可证
115
- MIT License。
149
+ | Level | Name | Guarantee |
150
+ |:------|:---------------------|:-----------------------------------------------|
151
+ | SVL-1 | Symbolic Existence | Never calls functions that do not exist in the project |
152
+ | SVL-2 | Type Validity | Parameter count and types strictly match |
153
+ | SVL-3 | Dataflow Correctness | Variables are declared before use, no circular references |
154
+ | SVL-4 | Protocol Legality | Business step order must adhere to state transition rules |
116
155
 
117
- Progmune 正在重新定义 AI 辅助编程——不是“让模型更聪明”,而是“让程序真相主导生成”。
118
- 加入我们的技术预览,一起构建可验证的 AI 编码未来。
156
+ ---
157
+
158
+ ## Quick Start
159
+
160
+ ```bash
161
+ npm install -g progmune-runtime
162
+ npx progmune-runtime setup "YOUR_API_KEY"
163
+ npx progmune-runtime test
164
+ ```
165
+
166
+ ---
167
+
168
+ ## License
169
+
170
+ MIT License.
171
+
172
+ Progmune is redefining AI-assisted programming—not by "making models smarter," but by "letting program truth govern generation."
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Demo 项目: 用户认证系统
3
+ * 用于展示 SSG (Semantic State Graph) 协议验证
4
+ *
5
+ * 每个函数通过 JSDoc @protocol 注解声明其状态转换规则。
6
+ * 这些注解在 IR 提取时被解析,驱动 SSG 状态机。
7
+ */
8
+
9
+ /**
10
+ * 验证用户密码
11
+ * @protocol pre_states=["UNAUTHENTICATED"] post_states=["PASSWORD_VERIFIED"]
12
+ */
13
+ export function verify_password(username: string, password: string): boolean {
14
+ return password === "correct";
15
+ }
16
+
17
+ /**
18
+ * 签发 JWT 令牌
19
+ * @protocol pre_states=["PASSWORD_VERIFIED"] post_states=["TOKEN_ISSUED"] invalidate=["PASSWORD_VERIFIED"]
20
+ */
21
+ export function generate_jwt(userId: string, expiresIn: number): string {
22
+ return "eyJhbGciOi...";
23
+ }
24
+
25
+ /**
26
+ * 创建用户会话
27
+ * @protocol pre_states=["TOKEN_ISSUED"] post_states=["SESSION_ACTIVE"] invalidate=["TOKEN_ISSUED"]
28
+ */
29
+ export function create_session(token: string): { sessionId: string } {
30
+ return { sessionId: "sess_abc123" };
31
+ }
32
+
33
+ /**
34
+ * 撤销令牌
35
+ * @protocol pre_states=["TOKEN_ISSUED"] post_states=["UNAUTHENTICATED"] invalidate=["TOKEN_ISSUED"]
36
+ */
37
+ export function revoke_token(token: string): void {
38
+ // 将 token 加入黑名单
39
+ }
40
+
41
+ /**
42
+ * 登出
43
+ * @protocol pre_states=["SESSION_ACTIVE"] post_states=["UNAUTHENTICATED"] invalidate=["SESSION_ACTIVE"]
44
+ */
45
+ export function logout(sessionId: string): void {
46
+ // 销毁会话
47
+ }
48
+
49
+ /**
50
+ * 获取用户资料(无协议约束)
51
+ * @protocol pre_states=[] post_states=[]
52
+ */
53
+ export function get_user_profile(userId: string): { name: string; email: string } {
54
+ return { name: "Alice", email: "alice@example.com" };
55
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "commonjs",
5
+ "strict": true
6
+ },
7
+ "include": ["*.ts"]
8
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.main = main;
4
+ // @progmune-generated session=sess_1780345600422_aexmh timestamp=2026-06-01T20:26:42.334Z ruleHash=9dec68bc2995e92a
5
+ // Generated with IR constraint: 384 functions, 17 protocol rules
6
+ const failure_corpus_1 = require("./failure-corpus");
7
+ function main() {
8
+ const stats = (0, failure_corpus_1.getAntibodyStats)();
9
+ return stats;
10
+ }
11
+ main();
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.main = main;
4
+ // @progmune-generated session=sess_1780343994721_xgc40 timestamp=2026-06-01T19:59:59.184Z ruleHash=9dec68bc2995e92a
5
+ // Generated with IR constraint: 400 functions, 17 protocol rules
6
+ const failure_corpus_1 = require("./failure-corpus");
7
+ const semantic_trace_1 = require("./semantic-trace");
8
+ function main() {
9
+ const stats = (0, failure_corpus_1.getAntibodyStats)();
10
+ const formatted = (0, semantic_trace_1.formatAntibodyStats)();
11
+ return formatted;
12
+ }
13
+ main();
@@ -51,6 +51,7 @@ class ActionBuilder {
51
51
  }
52
52
  }
53
53
  let currentVars = {};
54
+ /** @requires ACTION_CODE @produces ACTION_RESULT */
54
55
  function executeActionCode(code) {
55
56
  const root = new ActionBuilder();
56
57
  currentVars = {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.main = main;
4
+ // @progmune-generated session=sess_1780343397192_jd8hw timestamp=2026-06-01T19:49:58.982Z ruleHash=9dec68bc2995e92a
5
+ // Generated with IR constraint: 383 functions, 17 protocol rules
6
+ const failure_corpus_1 = require("./failure-corpus");
7
+ function main() {
8
+ const sessions = (0, failure_corpus_1.getAllSessions)();
9
+ return sessions;
10
+ }
11
+ main();