progmune-runtime 2.1.6 → 3.2.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 (356) hide show
  1. package/README.md +119 -461
  2. package/dist/ablation-study.js +144 -0
  3. package/dist/ablation-study.test.js +18 -0
  4. package/dist/action-runtime.js +3 -1
  5. package/dist/active-learning.js +211 -0
  6. package/dist/analytics.js +139 -0
  7. package/dist/asset-factory.js +309 -0
  8. package/dist/asset-growth.js +244 -0
  9. package/dist/asset-promotion.js +382 -0
  10. package/dist/asset-quality.js +550 -0
  11. package/dist/audit/business-translator.js +285 -0
  12. package/dist/audit/cli.js +66 -0
  13. package/dist/audit/formatters/html.js +379 -0
  14. package/dist/audit/formatters/json.js +11 -0
  15. package/dist/audit/formatters/markdown.js +192 -0
  16. package/dist/audit/formatters/terminal.js +189 -0
  17. package/dist/audit/index.js +25 -0
  18. package/dist/audit/report-builder.js +318 -0
  19. package/dist/audit/types.js +8 -0
  20. package/dist/audit.js +3 -3
  21. package/dist/auto-benchmark-generator.js +137 -0
  22. package/dist/auto-benchmark-generator.test.js +45 -0
  23. package/dist/auto-protocol-synthesizer.js +362 -0
  24. package/dist/auto-protocol-synthesizer.test.js +82 -0
  25. package/dist/autonomous-patch.js +175 -0
  26. package/dist/autonomous-patch.test.js +128 -0
  27. package/dist/badge/badge-server.js +98 -0
  28. package/dist/behavior-miner.js +442 -0
  29. package/dist/belief-layer.js +475 -0
  30. package/dist/benchmark-count.js +5 -0
  31. package/dist/benchmark-generator.js +211 -0
  32. package/dist/benchmark-harness.js +201 -0
  33. package/dist/benchmark-pass-rate.js +7 -0
  34. package/dist/benchmark-report.js +8 -3
  35. package/dist/benchmark-save.js +14 -1
  36. package/dist/bootstrap-validation.js +197 -0
  37. package/dist/bootstrap-validation.test.js +51 -0
  38. package/dist/branch-ledger.js +1 -1
  39. package/dist/capability-gap.js +130 -0
  40. package/dist/certify-html.js +351 -0
  41. package/dist/certify.js +326 -0
  42. package/dist/check.js +4 -4
  43. package/dist/compliance-miner.js +447 -0
  44. package/dist/continuous-benchmark.js +194 -0
  45. package/dist/continuous-benchmark.test.js +116 -0
  46. package/dist/corpus-stats.js +173 -0
  47. package/dist/counterfactual-engine.js +288 -0
  48. package/dist/coverage-dashboard.js +109 -0
  49. package/dist/coverage-system.test.js +205 -0
  50. package/dist/cross-repo-precision.js +352 -0
  51. package/dist/cve-benchmark.js +180 -0
  52. package/dist/cve-benchmark.test.js +28 -0
  53. package/dist/cve-collector.js +73 -0
  54. package/dist/data-quality.js +141 -0
  55. package/dist/decision-engine.js +388 -0
  56. package/dist/derive-metadata.js +250 -0
  57. package/dist/difficulty-active.test.js +198 -0
  58. package/dist/difficulty-map.js +244 -0
  59. package/dist/discovery-analytics.js +125 -0
  60. package/dist/discovery-model.js +149 -0
  61. package/dist/discovery-optimize.test.js +199 -0
  62. package/dist/discovery-trace.js +276 -0
  63. package/dist/discovery-trace.test.js +97 -0
  64. package/dist/emitter.js +83 -1
  65. package/dist/enterprise-dashboard.js +405 -0
  66. package/dist/eval-hardening.js +297 -0
  67. package/dist/eval-hardening.test.js +85 -0
  68. package/dist/evaluation-campaign.js +359 -0
  69. package/dist/evaluation-campaign.test.js +181 -0
  70. package/dist/evidence-growth.js +143 -0
  71. package/dist/evidence-repository.js +209 -0
  72. package/dist/evidence-system.js +441 -0
  73. package/dist/execute.js +15 -7
  74. package/dist/experimental/software-physics.js +291 -0
  75. package/dist/experimental/state-inference.js +516 -0
  76. package/dist/experimental/unsupervised-physics.js +230 -0
  77. package/dist/extract-ir-python.js +54 -7
  78. package/dist/extract-ir.js +376 -12
  79. package/dist/failure-collector.js +2 -2
  80. package/dist/failure-corpus.js +322 -9
  81. package/dist/feedback.js +16 -5
  82. package/dist/feedback.test.js +49 -0
  83. package/dist/file-lock.js +1 -1
  84. package/dist/flywheel-batch.js +292 -0
  85. package/dist/frameworks/express-cli.js +237 -0
  86. package/dist/frameworks/express-detector.js +445 -0
  87. package/dist/frameworks/express-detector.test.js +206 -0
  88. package/dist/frameworks/index.js +30 -0
  89. package/dist/frameworks/nestjs-detector.js +302 -0
  90. package/dist/frameworks/trpc-detector.js +161 -0
  91. package/dist/frameworks/version-awareness.js +179 -0
  92. package/dist/function-synonyms.js +164 -0
  93. package/dist/function-synonyms.test.js +68 -0
  94. package/dist/generalization.test.js +352 -0
  95. package/dist/goal-annotator.js +113 -0
  96. package/dist/goal-planner.js +563 -0
  97. package/dist/gold-cve.js +164 -0
  98. package/dist/gold-cve.test.js +104 -0
  99. package/dist/gold-quality.js +206 -0
  100. package/dist/gold-tiers.js +241 -0
  101. package/dist/governance-dashboard.js +327 -0
  102. package/dist/graph-viz.js +240 -0
  103. package/dist/guided-frontier.js +195 -0
  104. package/dist/hierarchical-planner.js +148 -0
  105. package/dist/identifier-parser.js +260 -0
  106. package/dist/immune-metrics.js +93 -0
  107. package/dist/immune-receiver.js +158 -0
  108. package/dist/immune-reporter.js +1 -1
  109. package/dist/improvement-orchestrator.js +206 -0
  110. package/dist/inject-p0-vocabulary.js +300 -0
  111. package/dist/intent-parser.js +218 -0
  112. package/dist/invariant-algebra.js +476 -0
  113. package/dist/invariant-calculus.js +533 -0
  114. package/dist/ir-utils.js +70 -0
  115. package/dist/ir-utils.test.js +50 -0
  116. package/dist/knowledge-api.js +312 -0
  117. package/dist/knowledge-evolution.js +452 -0
  118. package/dist/knowledge-explorer.js +506 -0
  119. package/dist/knowledge-flywheel.js +274 -0
  120. package/dist/knowledge-governance.js +338 -0
  121. package/dist/knowledge-governance.test.js +150 -0
  122. package/dist/knowledge-graph.js +181 -0
  123. package/dist/knowledge-guided-synth.js +246 -0
  124. package/dist/knowledge-loop.test.js +77 -0
  125. package/dist/knowledge-object.js +316 -0
  126. package/dist/knowledge-package.js +98 -0
  127. package/dist/kpi-dashboard.js +561 -0
  128. package/dist/l3-cross-function.js +280 -0
  129. package/dist/learning-ranker.js +148 -0
  130. package/dist/learning-ranker.test.js +291 -0
  131. package/dist/ledger/accountability.js +322 -0
  132. package/dist/ledger/chain-builder.js +185 -0
  133. package/dist/ledger/cli.js +222 -0
  134. package/dist/ledger/index.js +13 -0
  135. package/dist/ledger/signatures.js +193 -0
  136. package/dist/ledger/types.js +9 -0
  137. package/dist/llm.js +74 -3
  138. package/dist/load-benchmarks.js +8 -3
  139. package/dist/logger.js +66 -0
  140. package/dist/logger.test.js +37 -0
  141. package/dist/logistic-reward.js +339 -0
  142. package/dist/logistic-reward.test.js +180 -0
  143. package/dist/macro-graph.js +193 -0
  144. package/dist/macro-repair.js +183 -0
  145. package/dist/mcp-server.mjs +1202 -483
  146. package/dist/memory-layer.js +42 -5
  147. package/dist/multi-repo-precision.js +422 -0
  148. package/dist/name-free-protocol.js +425 -0
  149. package/dist/name-free-protocol.test.js +170 -0
  150. package/dist/name-scrambling.js +138 -0
  151. package/dist/name-scrambling.test.js +16 -0
  152. package/dist/p3-observability.test.js +281 -0
  153. package/dist/p5-orchestrator.test.js +225 -0
  154. package/dist/pairwise-preference.js +294 -0
  155. package/dist/pairwise-preference.test.js +140 -0
  156. package/dist/planner-constraints.js +104 -0
  157. package/dist/planner-prompts.js +155 -0
  158. package/dist/planner-telemetry.js +415 -0
  159. package/dist/planner-trace.js +214 -0
  160. package/dist/planner.js +162 -167
  161. package/dist/plsb/artifact.js +116 -0
  162. package/dist/plsb/cli.js +71 -0
  163. package/dist/plsb/index.js +19 -0
  164. package/dist/plsb/leaderboard.js +249 -0
  165. package/dist/plsb/report-md.js +156 -0
  166. package/dist/plsb/schema.js +179 -0
  167. package/dist/plsb-benchmark.js +284 -0
  168. package/dist/plsb-benchmark.test.js +119 -0
  169. package/dist/policy/cli.js +134 -0
  170. package/dist/policy/engine.js +333 -0
  171. package/dist/policy/index.js +12 -0
  172. package/dist/policy/types.js +59 -0
  173. package/dist/policy-miner.js +505 -0
  174. package/dist/precision-analyze.js +229 -0
  175. package/dist/precision-benchmark.js +147 -0
  176. package/dist/precision-label-c.js +134 -0
  177. package/dist/precision-label.js +193 -0
  178. package/dist/precision-report-c.js +149 -0
  179. package/dist/precision-report.js +246 -0
  180. package/dist/progmune-status.js +108 -0
  181. package/dist/proof-engine.js +479 -0
  182. package/dist/proof-provenance.js +315 -0
  183. package/dist/protocol-coverage.js +294 -0
  184. package/dist/protocol-detector.js +1189 -0
  185. package/dist/protocol-embedding-expanded.js +297 -0
  186. package/dist/protocol-embedding-expanded.test.js +97 -0
  187. package/dist/protocol-embedding.js +195 -0
  188. package/dist/protocol-embedding.test.js +82 -0
  189. package/dist/protocol-extractor-v2.js +354 -0
  190. package/dist/protocol-extractor-v2.test.js +140 -0
  191. package/dist/protocol-extractor.js +310 -0
  192. package/dist/protocol-extractor.test.js +113 -0
  193. package/dist/protocol-foundation.js +322 -0
  194. package/dist/protocol-foundation.test.js +163 -0
  195. package/dist/protocol-frontier.js +243 -0
  196. package/dist/protocol-frontier.test.js +92 -0
  197. package/dist/protocol-gap-analyzer.js +228 -0
  198. package/dist/protocol-gap-analyzer.test.js +49 -0
  199. package/dist/protocol-invariants.js +276 -0
  200. package/dist/protocol-invariants.test.js +111 -0
  201. package/dist/protocol-knowledge.js +464 -0
  202. package/dist/protocol-miner.js +343 -0
  203. package/dist/protocol-mining.js +207 -0
  204. package/dist/protocol-mining.test.js +37 -0
  205. package/dist/protocol-registry.js +1 -1
  206. package/dist/protocol-security-benchmark.js +222 -0
  207. package/dist/protocol-vulnerability.js +257 -0
  208. package/dist/protocol-vulnerability.test.js +60 -0
  209. package/dist/python-benchmark.js +120 -0
  210. package/dist/python-emitter.js +163 -45
  211. package/dist/python-protocol-extractor.js +187 -0
  212. package/dist/python-protocol-extractor.test.js +116 -0
  213. package/dist/realworld-benchmark.js +646 -0
  214. package/dist/realworld-benchmark.test.js +36 -0
  215. package/dist/repair-arch.test.js +411 -0
  216. package/dist/repair-evolution.test.js +454 -0
  217. package/dist/repair-executor.js +719 -0
  218. package/dist/repair-proposal.js +4 -4
  219. package/dist/repair-ranker.js +141 -0
  220. package/dist/repair-strategies.js +419 -0
  221. package/dist/repair-taxonomy.js +234 -0
  222. package/dist/repair-types.js +12 -0
  223. package/dist/repo-evaluator.js +250 -0
  224. package/dist/repo-evaluator.test.js +128 -0
  225. package/dist/resource-abstraction.js +242 -0
  226. package/dist/resource-detector.js +211 -0
  227. package/dist/result.test.js +43 -0
  228. package/dist/reward-system.js +411 -0
  229. package/dist/reward-system.test.js +175 -0
  230. package/dist/risk-model.js +215 -0
  231. package/dist/rule-miner.js +234 -7
  232. package/dist/rule-specificity.js +254 -0
  233. package/dist/runtime-types.js +27 -0
  234. package/dist/scaffold.js +208 -0
  235. package/dist/scale-collector.test.js +101 -0
  236. package/dist/scale-trajectory-collector.js +128 -0
  237. package/dist/sdk.js +250 -0
  238. package/dist/search-planner.js +4 -41
  239. package/dist/semantic-snapshot.js +1 -1
  240. package/dist/semantic-topology.js +121 -0
  241. package/dist/semantic-trace.js +310 -317
  242. package/dist/sequence-extractor.js +343 -0
  243. package/dist/skill-library.js +245 -0
  244. package/dist/skill-planner.test.js +189 -0
  245. package/dist/software-physics.js +291 -0
  246. package/dist/software-physics.test.js +81 -0
  247. package/dist/ssg-precision.js +478 -0
  248. package/dist/ssg-validator.js +71 -21
  249. package/dist/state-inference-doubleblind.test.js +160 -0
  250. package/dist/state-inference.js +516 -0
  251. package/dist/state-inference.test.js +115 -0
  252. package/dist/state-machine-fingerprint.js +345 -0
  253. package/dist/state-machine-fingerprint.test.js +120 -0
  254. package/dist/state-miner.js +386 -0
  255. package/dist/state-name-inference.js +213 -0
  256. package/dist/state-name-inference.test.js +69 -0
  257. package/dist/strategy-planner.js +262 -96
  258. package/dist/strategy-planner.test.js +135 -0
  259. package/dist/telemetry-analytics.test.js +402 -0
  260. package/dist/terminal-format.js +68 -0
  261. package/dist/terminal-format.test.js +83 -0
  262. package/dist/topology-factory.js +196 -0
  263. package/dist/topology-representation.js +242 -0
  264. package/dist/topology-representation.test.js +27 -0
  265. package/dist/trajectory-augmentation.js +254 -0
  266. package/dist/trajectory-augmentation.test.js +63 -0
  267. package/dist/trajectory-corpus.js +440 -0
  268. package/dist/trajectory-corpus.test.js +32 -0
  269. package/dist/trajectory-feedback.test.js +116 -0
  270. package/dist/transition-synthesizer.js +286 -0
  271. package/dist/transition-synthesizer.test.js +123 -0
  272. package/dist/trust/api-semantic-mapper.js +809 -0
  273. package/dist/trust/call-graph-propagator.js +225 -0
  274. package/dist/trust/cli.js +122 -0
  275. package/dist/trust/compliance-scorer.js +283 -0
  276. package/dist/trust/confidence-calculator.js +261 -0
  277. package/dist/trust/engine.js +1145 -0
  278. package/dist/trust/explainability.js +85 -0
  279. package/dist/trust/formatters/ci.js +42 -0
  280. package/dist/trust/formatters/json.js +11 -0
  281. package/dist/trust/formatters/terminal.js +152 -0
  282. package/dist/trust/index.js +39 -0
  283. package/dist/trust/phase1-verify.js +171 -0
  284. package/dist/trust/protocol-domain-validator.js +697 -0
  285. package/dist/trust/score-calculator.js +282 -0
  286. package/dist/trust/ssg-bridge.js +641 -0
  287. package/dist/trust/ssg-bridge.test.js +269 -0
  288. package/dist/trust/types.js +67 -0
  289. package/dist/trust/violation-trace.js +335 -0
  290. package/dist/trust-api.js +179 -0
  291. package/dist/trust-calibration.js +279 -0
  292. package/dist/unknown-protocol-discovery.js +339 -0
  293. package/dist/unknown-protocol-discovery.test.js +102 -0
  294. package/dist/unsupervised-physics.js +230 -0
  295. package/dist/unsupervised-physics.test.js +95 -0
  296. package/dist/utils.test.js +37 -0
  297. package/dist/validator.js +187 -10
  298. package/dist/verification-intelligence.js +475 -0
  299. package/dist/verify-api.js +432 -0
  300. package/dist/vi-impact-report.js +293 -0
  301. package/dist/wl-fingerprint.js +162 -0
  302. package/dist/wl-fingerprint.test.js +130 -0
  303. package/dist/zeroshot-strategy.js +139 -0
  304. package/docs/Progmune_/346/212/225/350/265/204/344/272/272/347/231/275/347/232/256/344/271/246_v2.0.html +576 -0
  305. package/docs/Progmune_/351/241/271/347/233/256/345/205/250/350/247/243.html +721 -0
  306. package/package.json +73 -6
  307. package/protocols.json +1956 -50
  308. package/.dockerignore +0 -14
  309. package/.mcp.json +0 -11
  310. package/.progmune_allowlist +0 -50
  311. package/.test_report/test_report.md +0 -87
  312. package/Dockerfile +0 -9
  313. package/FAQ.md +0 -167
  314. package/WHITEPAPER.md +0 -540
  315. package/demo-project/auth.ts +0 -55
  316. package/demo-project/tsconfig.json +0 -8
  317. package/dist/acl-breakdown.js +0 -13
  318. package/dist/all-sessions.js +0 -11
  319. package/dist/antibody-stats.js +0 -11
  320. package/dist/branch-tree-count.js +0 -14
  321. package/dist/common-fixpath.js +0 -12
  322. package/dist/constraint-types.js +0 -12
  323. package/dist/exec-metrics.js +0 -11
  324. package/dist/failure-report.js +0 -11
  325. package/dist/fast-path-hits.js +0 -13
  326. package/dist/fingerprint-list.js +0 -15
  327. package/dist/gen-history-log.js +0 -13
  328. package/dist/heatmap-data.js +0 -11
  329. package/dist/recent-session.js +0 -12
  330. package/dist/svl-distribution.js +0 -11
  331. package/dist/terminal-status.js +0 -11
  332. package/dist/token-savings.js +0 -11
  333. package/dist/total-repairs.js +0 -12
  334. package/dist/unresolved-count.js +0 -12
  335. package/dist/valid-fingerprints.js +0 -13
  336. package/dist/verify-ledgers.js +0 -11
  337. package/docs/whitepaper-style.css +0 -77
  338. package/docs/whitepaper-v2.1.md +0 -609
  339. package/docs/whitepaper-v2.2.md +0 -1064
  340. package/docs/whitepaper-v2.2.pdf +0 -0
  341. package/fly.toml +0 -31
  342. package/public/dashboard.html +0 -119
  343. package/server/hub.js +0 -116
  344. package/test/replay-golden/sess_1780063202050_mgeld.json +0 -9
  345. package/test/replay-golden/sess_1780064032560_gocld.json +0 -354
  346. package/test/replay-golden/sess_1780064413331_s2709.json +0 -606
  347. package/test/replay-golden/sess_1780064792710_y3avo.json +0 -614
  348. package/test/replay-golden.ts +0 -84
  349. package/test_benchmark.js +0 -165
  350. package/test_comprehensive.mjs +0 -638
  351. package/test_concurrency.js +0 -129
  352. package/test_ir_robustness.js +0 -85
  353. package/test_semantic_contracts.js +0 -269
  354. package/test_ssg_stress.js +0 -156
  355. package/test_svl3.js +0 -58
  356. package/tsconfig.json +0 -17
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ /**
3
+ * Progmune V9 — Knowledge Object System
4
+ * ======================================
5
+ * 将整个 Pipeline 的输出统一为一种对象:Knowledge Object。
6
+ *
7
+ * 一个 Knowledge Object 包含:
8
+ * - Claim: 我们相信什么
9
+ * - Status: Supported / Refuted / Undecided / Conflicting
10
+ * - Proof: 形式推导链
11
+ * - Counterexample: 反例(如果有)
12
+ * - Evidence: 所有独立证据源
13
+ * - Belief: 综合可信度
14
+ * - Dependencies: 依赖的其他 Claim
15
+ * - History: 这个 Claim 的形成历史
16
+ *
17
+ * 核心理念:
18
+ * Pipeline 输出不再是分散的 JSON 文件。
19
+ * 所有层(Recovery、Reasoning、Belief)写同一个 Knowledge Object。
20
+ * 每个 Claim 知道自己来自哪里、为什么被相信、谁在反对它。
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || (function () {
39
+ var ownKeys = function(o) {
40
+ ownKeys = Object.getOwnPropertyNames || function (o) {
41
+ var ar = [];
42
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
+ return ar;
44
+ };
45
+ return ownKeys(o);
46
+ };
47
+ return function (mod) {
48
+ if (mod && mod.__esModule) return mod;
49
+ var result = {};
50
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
+ __setModuleDefault(result, mod);
52
+ return result;
53
+ };
54
+ })();
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.buildKnowledgeBase = buildKnowledgeBase;
57
+ const fs = __importStar(require("fs"));
58
+ const path = __importStar(require("path"));
59
+ // ══════════════════════════════════════════════
60
+ // V9: KNOWLEDGE OBJECT ASSEMBLY
61
+ // ══════════════════════════════════════════════
62
+ /**
63
+ * Assemble all pipeline outputs into a unified Knowledge Base.
64
+ * Instead of N separate JSON files, every piece of knowledge
65
+ * goes into one Knowledge Object per claim.
66
+ *
67
+ * V7 provides: proof + provenance + refutation
68
+ * V8 provides: belief + evidence sources
69
+ */
70
+ function assembleKnowledgeBase(provenanceReport, beliefReport) {
71
+ const claims = [];
72
+ const claimIds = new Set();
73
+ // Index belief assessments by predicate+domain
74
+ const beliefIndex = new Map();
75
+ for (const ba of beliefReport.assessments || []) {
76
+ const key = `${ba.predicate}::${ba.domain}`;
77
+ beliefIndex.set(key, ba);
78
+ }
79
+ for (const inv of provenanceReport.invariants || []) {
80
+ const id = inv.id;
81
+ // Ensure uniqueness: append domain if ID collides
82
+ const uniqueId = claimIds.has(id) ? `${id}@${inv.domain}` : id;
83
+ claimIds.add(uniqueId);
84
+ const key = `${inv.predicate}::${inv.domain}`;
85
+ const belief = beliefIndex.get(key);
86
+ // ── Determine status ──
87
+ let status;
88
+ if (inv.isRefuted) {
89
+ // Check if there's also supporting evidence (conflict)
90
+ const supportingEvidence = (belief?.sources || []).filter((s) => s.massFor > 0.5);
91
+ if (supportingEvidence.length >= 2) {
92
+ status = "CONFLICTING"; // Both support and refutation exist
93
+ }
94
+ else {
95
+ status = "REFUTED";
96
+ }
97
+ }
98
+ else if (belief && belief.combinedBelief >= 75) {
99
+ status = "SUPPORTED";
100
+ }
101
+ else if (belief && belief.combinedBelief < 50) {
102
+ status = "UNDECIDED";
103
+ }
104
+ else {
105
+ status = "SUPPORTED"; // Default: survived refutation with reasonable belief
106
+ }
107
+ // ── Build proof steps ──
108
+ const proofSteps = [];
109
+ const derivation = inv.derivation || {};
110
+ // Add OBSERVATION step
111
+ const obsNode = derivation._obsNode || {};
112
+ if (obsNode.conclusion) {
113
+ proofSteps.push({
114
+ rule: "OBSERVATION",
115
+ from: [],
116
+ description: obsNode.conclusion,
117
+ });
118
+ }
119
+ // Add STATE_MACHINE step
120
+ const smNode = derivation._smNode || {};
121
+ if (smNode.conclusion) {
122
+ proofSteps.push({
123
+ rule: "STATE_MACHINE",
124
+ from: proofSteps.length > 0 ? [`OBSERVATION`] : [],
125
+ description: smNode.conclusion,
126
+ });
127
+ }
128
+ // Add the top-level derivation step
129
+ if (derivation.rule && derivation.rule !== "OBSERVATION" && derivation.rule !== "STATE_MACHINE") {
130
+ proofSteps.push({
131
+ rule: derivation.rule,
132
+ from: proofSteps.length > 0 ? [`STATE_MACHINE`] : [],
133
+ description: derivation.conclusion || inv.predicate,
134
+ });
135
+ }
136
+ // ── Collect evidence sources ──
137
+ const evidenceSources = (belief?.sources || []).map((s) => ({
138
+ name: s.name,
139
+ direction: s.massAgainst > s.massFor ? "OPPOSING" : s.massFor > 0.5 ? "SUPPORTING" : "NEUTRAL",
140
+ massFor: s.massFor,
141
+ massAgainst: s.massAgainst,
142
+ massUncertain: s.massUncertain,
143
+ reasoning: s.reasoning,
144
+ }));
145
+ // ── Build knowledge object ──
146
+ const ko = {
147
+ id: uniqueId,
148
+ domain: inv.domain || "unknown",
149
+ claim: inv.predicate,
150
+ logicType: inv.logicType || "REQUIRES",
151
+ status,
152
+ proof: {
153
+ isAxiom: proofSteps.length <= 1,
154
+ derivationDepth: inv.derivationDepth || 1,
155
+ steps: proofSteps,
156
+ origin: {
157
+ sourceFile: derivation.provenance?.sourceFile || "unknown",
158
+ sourceLine: derivation.provenance?.sourceLine || 0,
159
+ extractionMethod: derivation.provenance?.extractionMethod || "unknown",
160
+ transformationChain: derivation.provenance?.transformationChain || [],
161
+ },
162
+ },
163
+ counterexamples: inv.isRefuted ? [{
164
+ path: inv.counterexamplePath || [],
165
+ explanation: inv.counterexampleExplanation || "",
166
+ method: "BFS",
167
+ timestamp: provenanceReport.timestamp,
168
+ }] : [],
169
+ evidence: evidenceSources,
170
+ belief: {
171
+ score: belief?.combinedBelief || 0,
172
+ disbelief: belief?.combinedDisbelief || 0,
173
+ uncertainty: belief?.combinedUncertainty || 0,
174
+ level: inv.isRefuted ? "REFUTED" : belief?.beliefLevel || "HIGH",
175
+ },
176
+ dependencies: [],
177
+ dependents: [],
178
+ history: {
179
+ discovered: provenanceReport.timestamp,
180
+ lastVerified: new Date().toISOString(),
181
+ statusChanges: [],
182
+ },
183
+ };
184
+ claims.push(ko);
185
+ }
186
+ // ── Build argument graph edges ──
187
+ const edges = [];
188
+ // Dependencies: claims that share atoms in an implication chain
189
+ for (const c1 of claims) {
190
+ for (const c2 of claims) {
191
+ if (c1.id === c2.id)
192
+ continue;
193
+ const m1 = c1.claim.match(/(\w+)\s*⇒\s*(\w+)/);
194
+ const m2 = c2.claim.match(/(\w+)\s*⇒\s*(\w+)/);
195
+ // DEPENDS_ON: c1.claim = "A⇒B", c2.claim = "B⇒C" → c1 depends on c2
196
+ if (m1 && m2 && m1[2].toLowerCase() === m2[1].toLowerCase()) {
197
+ edges.push({ from: c1.id, to: c2.id, relation: "DEPENDS_ON" });
198
+ if (!c1.dependencies.includes(c2.id))
199
+ c1.dependencies.push(c2.id);
200
+ if (!c2.dependents.includes(c1.id))
201
+ c2.dependents.push(c1.id);
202
+ }
203
+ // CONFLICTS: same atoms, opposite directions
204
+ if (m1 && m2 &&
205
+ m1[1].toLowerCase() === m2[2].toLowerCase() &&
206
+ m1[2].toLowerCase() === m2[1].toLowerCase()) {
207
+ edges.push({ from: c1.id, to: c2.id, relation: "CONFLICTS" });
208
+ }
209
+ }
210
+ // SUPPORTS: evidence direction
211
+ for (const ev of c1.evidence) {
212
+ if (ev.direction === "SUPPORTING") {
213
+ // Self-supporting — already captured
214
+ }
215
+ if (ev.direction === "OPPOSING") {
216
+ // OPPOSES: evidence against this claim
217
+ edges.push({ from: `EVIDENCE:${ev.name}`, to: c1.id, relation: "OPPOSES" });
218
+ }
219
+ }
220
+ }
221
+ // Compute summary
222
+ const supported = claims.filter(c => c.status === "SUPPORTED").length;
223
+ const refuted = claims.filter(c => c.status === "REFUTED").length;
224
+ const undecided = claims.filter(c => c.status === "UNDECIDED").length;
225
+ const conflicting = claims.filter(c => c.status === "CONFLICTING").length;
226
+ const avgBelief = Math.round(claims.reduce((s, c) => s + c.belief.score, 0) / claims.length);
227
+ const depths = claims.map(c => c.proof.derivationDepth);
228
+ const kb = {
229
+ timestamp: new Date().toISOString(),
230
+ projectPath: provenanceReport.projectPath || "",
231
+ summary: {
232
+ totalClaims: claims.length,
233
+ supported,
234
+ refuted,
235
+ undecided,
236
+ conflicting,
237
+ averageBelief: avgBelief,
238
+ proofDepthRange: {
239
+ min: depths.length > 0 ? Math.min(...depths) : 0,
240
+ max: depths.length > 0 ? Math.max(...depths) : 0,
241
+ avg: depths.length > 0 ? Math.round(depths.reduce((a, b) => a + b, 0) / depths.length) : 0,
242
+ },
243
+ },
244
+ claims,
245
+ argumentGraph: {
246
+ nodes: claims.map(c => c.id),
247
+ edges,
248
+ },
249
+ };
250
+ return kb;
251
+ }
252
+ // ══════════════════════════════════════════════
253
+ // MAIN
254
+ // ══════════════════════════════════════════════
255
+ function buildKnowledgeBase(projectPath) {
256
+ console.log("🔬 Progmune Knowledge Object System — V9");
257
+ console.log(" Project:", projectPath);
258
+ const provenancePath = path.join(projectPath, ".progmune_provenance.json");
259
+ const beliefPath = path.join(projectPath, ".progmune_belief.json");
260
+ if (!fs.existsSync(provenancePath) || !fs.existsSync(beliefPath)) {
261
+ console.log(" Run V7 and V8 first.");
262
+ return { timestamp: new Date().toISOString(), projectPath, summary: { totalClaims: 0, supported: 0, refuted: 0, undecided: 0, conflicting: 0, averageBelief: 0, proofDepthRange: { min: 0, max: 0, avg: 0 } }, claims: [], argumentGraph: { nodes: [], edges: [] } };
263
+ }
264
+ const provenance = JSON.parse(fs.readFileSync(provenancePath, "utf-8"));
265
+ const belief = JSON.parse(fs.readFileSync(beliefPath, "utf-8"));
266
+ const kb = assembleKnowledgeBase(provenance, belief);
267
+ // Print summary
268
+ console.log(`\n ${kb.summary.totalClaims} claims in Knowledge Base`);
269
+ console.log(` SUPPORTED: ${kb.summary.supported} ← all evidence supports`);
270
+ console.log(` REFUTED: ${kb.summary.refuted} ← counterexample found`);
271
+ console.log(` CONFLICTING: ${kb.summary.conflicting} ← both support & refutation exist`);
272
+ console.log(` UNDECIDED: ${kb.summary.undecided} ← insufficient evidence`);
273
+ // Show the argument graph
274
+ console.log(`\n Argument Graph: ${kb.argumentGraph.nodes.length} nodes, ${kb.argumentGraph.edges.length} edges`);
275
+ const depEdges = kb.argumentGraph.edges.filter(e => e.relation === "DEPENDS_ON");
276
+ const conflictEdges = kb.argumentGraph.edges.filter(e => e.relation === "CONFLICTS");
277
+ console.log(` DEPENDS_ON: ${depEdges.length} | CONFLICTS: ${conflictEdges.length}`);
278
+ // Show example knowledge objects
279
+ console.log("\n ── REFUTED Claim ──");
280
+ const refutedClaim = kb.claims.find(c => c.status === "REFUTED");
281
+ if (refutedClaim) {
282
+ console.log(` ❌ ${refutedClaim.claim}`);
283
+ console.log(` Status: ${refutedClaim.status} | Belief: ${refutedClaim.belief.score}%`);
284
+ console.log(` Counterexamples: ${refutedClaim.counterexamples.length}`);
285
+ console.log(` Evidence sources:`);
286
+ for (const ev of refutedClaim.evidence) {
287
+ const icon = ev.direction === "OPPOSING" ? "↓" : ev.direction === "SUPPORTING" ? "↑" : "→";
288
+ console.log(` ${icon} ${ev.name}: ${ev.reasoning.slice(0, 80)}`);
289
+ }
290
+ }
291
+ console.log("\n ── SUPPORTED Claim ──");
292
+ const supportedClaim = kb.claims.find(c => c.status === "SUPPORTED" && c.logicType === "FORBIDS");
293
+ if (supportedClaim) {
294
+ console.log(` ✅ ${supportedClaim.claim}`);
295
+ console.log(` Status: ${supportedClaim.status} | Belief: ${supportedClaim.belief.score}%`);
296
+ console.log(` Proof depth: ${supportedClaim.proof.derivationDepth}`);
297
+ console.log(` Origin: ${supportedClaim.proof.origin.sourceFile}`);
298
+ }
299
+ return kb;
300
+ }
301
+ // ══════════════════════════════════════════════
302
+ // CLI
303
+ // ══════════════════════════════════════════════
304
+ if (require.main === module) {
305
+ const targetProject = process.argv[2];
306
+ if (!targetProject) {
307
+ console.error("Usage: npx ts-node src/knowledge-object.ts <project-path>");
308
+ process.exit(1);
309
+ }
310
+ const kb = buildKnowledgeBase(targetProject);
311
+ const outputPath = path.join(targetProject, ".progmune_knowledge.json");
312
+ fs.writeFileSync(outputPath, JSON.stringify(kb, null, 2));
313
+ console.log(`\n✅ Knowledge Base saved to: ${outputPath}`);
314
+ console.log(` This single file replaces all previous .progmune_*.json outputs.`);
315
+ console.log(` Every claim is a Knowledge Object: Claim + Proof + Evidence + Belief + History.`);
316
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Knowledge Package — Standalone exportable protocol domain package
4
+ *
5
+ * Each domain (TLS, SSH, HTTP) can be exported as a self-contained
6
+ * JSON package with all units, evidence, concepts, and version history.
7
+ *
8
+ * Usage:
9
+ * npx ts-node src/knowledge-package.ts TLS
10
+ * npx ts-node src/knowledge-package.ts --all
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.packageDomain = packageDomain;
47
+ exports.packageAll = packageAll;
48
+ const fs = __importStar(require("fs"));
49
+ const protocol_knowledge_1 = require("./protocol-knowledge");
50
+ function packageDomain(domain) {
51
+ const kb = (0, protocol_knowledge_1.buildKnowledgeBase)();
52
+ const units = kb.units.filter(u => u.domain === domain);
53
+ if (units.length === 0)
54
+ throw new Error(`Domain not found: ${domain}`);
55
+ const stable = units.filter(u => u.maturity === "stable");
56
+ const allConcepts = units.flatMap(u => u.concepts || []);
57
+ const allEvidence = units.flatMap(u => u.evidence || []);
58
+ const allRepos = [...new Set(units.flatMap(u => u.validatedRepos))];
59
+ const allRFCs = [...new Set(units.map(u => u.rfcReference).filter(Boolean))];
60
+ return {
61
+ name: `${domain} Protocol Domain`,
62
+ domain,
63
+ version: kb.version,
64
+ exported: new Date().toISOString(),
65
+ units,
66
+ summary: {
67
+ totalUnits: units.length,
68
+ stableUnits: stable.length,
69
+ totalConcepts: allConcepts.length,
70
+ totalEvidence: allEvidence.length,
71
+ validatedRepos: allRepos,
72
+ rfcReferences: allRFCs,
73
+ },
74
+ };
75
+ }
76
+ function packageAll() {
77
+ const kb = (0, protocol_knowledge_1.buildKnowledgeBase)();
78
+ const domains = [...new Set(kb.units.map(u => u.domain))];
79
+ return domains.map(packageDomain);
80
+ }
81
+ if (require.main === module) {
82
+ const args = process.argv.slice(2);
83
+ if (args.includes("--all")) {
84
+ const pkgs = packageAll();
85
+ for (const pkg of pkgs) {
86
+ const path = `benchmarks/kb-package-${pkg.domain.toLowerCase()}.json`;
87
+ if (!fs.existsSync("benchmarks"))
88
+ fs.mkdirSync("benchmarks");
89
+ fs.writeFileSync(path, JSON.stringify(pkg, null, 2));
90
+ console.log(`✅ ${pkg.domain}: ${pkg.summary.totalUnits} units, ${pkg.summary.stableUnits} stable → ${path}`);
91
+ }
92
+ }
93
+ else {
94
+ const domain = args[0] || "TLS";
95
+ const pkg = packageDomain(domain);
96
+ console.log(JSON.stringify(pkg, null, 2));
97
+ }
98
+ }