progmune-runtime 2.1.6 → 3.2.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.
Files changed (356) hide show
  1. package/README.md +108 -468
  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 +710 -0
  306. package/package.json +74 -7
  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,175 @@
1
+ "use strict";
2
+ /**
3
+ * P5.3: Autonomous Patch Generation
4
+ *
5
+ * Closes the self-improvement loop by auto-generating goal templates
6
+ * and knowledge patches from the Skill Library.
7
+ *
8
+ * Loop: Skill Library → Goal Templates → Knowledge Patches
9
+ * → Regression Test → Auto-Approve → Deploy
10
+ *
11
+ * This is the final piece of the autonomous Meta-Learning System.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generatePatchesFromSkills = generatePatchesFromSkills;
15
+ exports.generateTemplatesFromSkills = generateTemplatesFromSkills;
16
+ exports.runAutonomousPipeline = runAutonomousPipeline;
17
+ exports.printAutonomousReport = printAutonomousReport;
18
+ const knowledge_governance_1 = require("./knowledge-governance");
19
+ const knowledge_governance_2 = require("./knowledge-governance");
20
+ const protocol_coverage_1 = require("./protocol-coverage");
21
+ /**
22
+ * Generate knowledge patches from high-confidence skills.
23
+ *
24
+ * For each skill with success rate > threshold, creates:
25
+ * 1. A proposed KnowledgePatch
26
+ * 2. Runs regression test
27
+ * 3. Auto-approves if no regression
28
+ *
29
+ * @returns Results for each skill processed
30
+ */
31
+ function generatePatchesFromSkills(library, telemetry, patchStore, minSuccessRate = 0.85) {
32
+ const store = patchStore || new knowledge_governance_1.KnowledgePatchStore();
33
+ const results = [];
34
+ // Load protocol rules for regression testing
35
+ const defs = (0, protocol_coverage_1.loadDefaultProtocolDefinitions)();
36
+ const baseRules = new Map();
37
+ for (const p of defs)
38
+ for (const [fn, rule] of p.rules)
39
+ baseRules.set(fn, rule);
40
+ // Build test cases: for each skill, verify Frontier can find the skill's actions
41
+ const testCases = [];
42
+ for (const skill of library.all()) {
43
+ testCases.push({
44
+ currentState: skill.preconditions,
45
+ targetState: skill.effects.length > 0 ? [skill.effects[0]] : [],
46
+ });
47
+ }
48
+ for (const skill of library.all()) {
49
+ if (skill.successRate < minSuccessRate) {
50
+ results.push({
51
+ skillId: skill.id,
52
+ skillGoal: skill.goal,
53
+ status: "skipped",
54
+ reason: `Success rate ${(skill.successRate * 100).toFixed(0)}% < ${(minSuccessRate * 100).toFixed(0)}% threshold`,
55
+ });
56
+ continue;
57
+ }
58
+ // Check if already proposed
59
+ const existing = store.all.find(p => p.change === skill.macro.join(" → "));
60
+ if (existing) {
61
+ results.push({
62
+ skillId: skill.id, skillGoal: skill.goal, patchId: existing.id,
63
+ status: existing.status === "approved" ? "approved" : "skipped",
64
+ reason: `Already ${existing.status}`,
65
+ });
66
+ continue;
67
+ }
68
+ // Propose patch: this skill's macro as a virtual rule
69
+ const patch = store.propose({
70
+ from: skill.preconditions[0] || "INIT",
71
+ to: skill.effects[0] || "COMPLETED",
72
+ action: skill.macro.join(" → "),
73
+ protocol: skill.protocol,
74
+ confidence: skill.successRate,
75
+ evidenceCount: skill.frequency,
76
+ examples: [skill.goal],
77
+ validation: {
78
+ benchmarkSupport: skill.frequency,
79
+ trajectorySupport: skill.frequency,
80
+ contradictionCount: 0,
81
+ status: "verified",
82
+ },
83
+ });
84
+ results.push({
85
+ skillId: skill.id,
86
+ skillGoal: skill.goal,
87
+ patchId: patch.id,
88
+ status: "generated",
89
+ reason: `Proposed from skill (${(skill.successRate * 100).toFixed(0)}% success, ${skill.frequency} samples)`,
90
+ });
91
+ // Run regression test
92
+ const regResult = (0, knowledge_governance_2.regressionTestPatch)(patch, baseRules, testCases, store);
93
+ if (regResult.passed) {
94
+ store.approve(patch.id, {
95
+ top1Before: regResult.top1Before,
96
+ top1After: regResult.top1After,
97
+ top3Before: regResult.top3Before,
98
+ top3After: regResult.top3After,
99
+ });
100
+ results[results.length - 1].status = "approved";
101
+ }
102
+ else {
103
+ store.reject(patch.id);
104
+ results[results.length - 1].status = "rejected";
105
+ }
106
+ }
107
+ return results;
108
+ }
109
+ /**
110
+ * Auto-generate goal templates from skills.
111
+ *
112
+ * Converts each skill's action sequence into a regex pattern
113
+ * that matches related natural language goals.
114
+ */
115
+ function generateTemplatesFromSkills(library) {
116
+ return library.all().map(skill => {
117
+ // Generate a regex pattern from the action names
118
+ const keywords = skill.macro
119
+ .flatMap(fn => fn.split("_"))
120
+ .filter(w => w.length > 2)
121
+ .filter(w => !["then", "file", "the"].includes(w));
122
+ const pattern = keywords.join(".*");
123
+ return {
124
+ pattern,
125
+ protocol: skill.protocol,
126
+ actions: skill.macro,
127
+ skillId: skill.id,
128
+ successRate: skill.successRate,
129
+ };
130
+ });
131
+ }
132
+ /**
133
+ * Run the full autonomous patch generation pipeline.
134
+ *
135
+ * Skill Library → Templates + Patches → Regression → Approve
136
+ */
137
+ function runAutonomousPipeline(library, telemetry, patchStore) {
138
+ const store = patchStore || new knowledge_governance_1.KnowledgePatchStore();
139
+ const patchResults = generatePatchesFromSkills(library, telemetry, store);
140
+ const templates = generateTemplatesFromSkills(library);
141
+ const approved = patchResults.filter(r => r.status === "approved").length;
142
+ const rejected = patchResults.filter(r => r.status === "rejected").length;
143
+ return {
144
+ skills: library.size,
145
+ patchesGenerated: patchResults.length,
146
+ patchesApproved: approved,
147
+ patchesRejected: rejected,
148
+ templatesGenerated: templates.length,
149
+ summary: approved > 0
150
+ ? `${approved} patches auto-approved. ${templates.length} templates generated. System is self-extending.`
151
+ : `No patches met the approval threshold. ${templates.length} templates generated.`,
152
+ };
153
+ }
154
+ function printAutonomousReport(report, results) {
155
+ console.log("\n╔════════════════════════════════════════════════════╗");
156
+ console.log("║ P5.3 Autonomous Patch Generation ║");
157
+ console.log("╚════════════════════════════════════════════════════╝\n");
158
+ console.log(`Skills in Library: ${report.skills}`);
159
+ console.log(`Patches Generated: ${report.patchesGenerated}`);
160
+ console.log(`Patches Approved: ${report.patchesApproved}`);
161
+ console.log(`Patches Rejected: ${report.patchesRejected}`);
162
+ console.log(`Templates Generated: ${report.templatesGenerated}`);
163
+ console.log();
164
+ console.log(`Summary: ${report.summary}`);
165
+ console.log();
166
+ if (results && results.length > 0) {
167
+ console.log("─── Patch Details ───");
168
+ for (const r of results) {
169
+ const icon = r.status === "approved" ? "✅" : r.status === "rejected" ? "❌" : r.status === "skipped" ? "⏭️" : "📝";
170
+ console.log(` ${icon} ${r.skillGoal}`);
171
+ console.log(` ${r.reason}`);
172
+ }
173
+ console.log();
174
+ }
175
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * P5.3: Autonomous Patch Generation Tests
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const vitest_1 = require("vitest");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const skill_library_1 = require("./skill-library");
43
+ const autonomous_patch_1 = require("./autonomous-patch");
44
+ const knowledge_governance_1 = require("./knowledge-governance");
45
+ const planner_telemetry_1 = require("./planner-telemetry");
46
+ const AUTO_DIR = path.resolve(__dirname, "..", "test-autonomous-patch");
47
+ process.env.PROGMUNE_PROJECT_DIR = AUTO_DIR;
48
+ fs.mkdirSync(AUTO_DIR, { recursive: true });
49
+ fs.mkdirSync(path.join(AUTO_DIR, ".progmune_corpus", "telemetry"), { recursive: true });
50
+ fs.mkdirSync(path.join(AUTO_DIR, ".progmune_corpus", "knowledge"), { recursive: true });
51
+ function seedLibrary(telemetry, rules) {
52
+ // File skill: 90% acceptance
53
+ for (let i = 0; i < 30; i++) {
54
+ const a = ["open_file", "write_file", "close_file"];
55
+ const fp = (0, planner_telemetry_1.candidateFingerprint)("FileProtocol", a, "resource_leak");
56
+ const id = telemetry.recordDecision({
57
+ goal: "safely write config file", protocol: "FileProtocol", violationType: "resource_leak",
58
+ candidates: [{ candidateId: fp, source: "protocol", evidenceSources: ["protocol"], actions: a, explanation: "full" }],
59
+ selectedCandidateId: fp, cost: { latencyMs: 5 },
60
+ });
61
+ telemetry.recordFeedback(id, { decision: Math.random() < 0.92 ? "accepted" : "rejected", executionResult: { success: true, violations: [] }, timestamp: Date.now() });
62
+ }
63
+ // Auth skill: 88% acceptance
64
+ for (let i = 0; i < 30; i++) {
65
+ const a = ["verify_password", "generate_jwt", "create_session"];
66
+ const fp = (0, planner_telemetry_1.candidateFingerprint)("AuthProtocol", a, "missing_prerequisite");
67
+ const id = telemetry.recordDecision({
68
+ goal: "authenticate user", protocol: "AuthProtocol", violationType: "missing_prerequisite",
69
+ candidates: [{ candidateId: fp, source: "protocol", evidenceSources: ["protocol"], actions: a, explanation: "auth" }],
70
+ selectedCandidateId: fp,
71
+ });
72
+ telemetry.recordFeedback(id, { decision: Math.random() < 0.88 ? "accepted" : "rejected", executionResult: { success: true, violations: [] }, timestamp: Date.now() });
73
+ }
74
+ const r = rules;
75
+ const lib = new skill_library_1.SkillLibrary();
76
+ lib.learn(telemetry, r);
77
+ return lib;
78
+ }
79
+ (0, vitest_1.describe)("Autonomous Patch Generation", () => {
80
+ (0, vitest_1.it)("generates patches from high-confidence skills", () => {
81
+ const rules = new Map();
82
+ rules.set("open_file", { pre_states: [], post_states: ["FILE_OPEN"] });
83
+ rules.set("write_file", { pre_states: ["FILE_OPEN"], post_states: [] });
84
+ rules.set("close_file", { pre_states: ["FILE_OPEN"], post_states: [], invalidate: ["FILE_OPEN"] });
85
+ rules.set("verify_password", { pre_states: ["UNAUTHENTICATED"], post_states: ["PASSWORD_VERIFIED"] });
86
+ rules.set("generate_jwt", { pre_states: ["PASSWORD_VERIFIED"], post_states: ["TOKEN_ISSUED"], invalidate: ["PASSWORD_VERIFIED"] });
87
+ rules.set("create_session", { pre_states: ["TOKEN_ISSUED"], post_states: ["SESSION_ACTIVE"], invalidate: ["TOKEN_ISSUED"] });
88
+ const telemetry = new planner_telemetry_1.PlannerTelemetry(path.join(AUTO_DIR, ".progmune_corpus", "telemetry", `auto-${Date.now()}.jsonl`));
89
+ const lib = seedLibrary(telemetry, rules);
90
+ (0, vitest_1.expect)(lib.size).toBeGreaterThanOrEqual(2);
91
+ const store = new knowledge_governance_1.KnowledgePatchStore(path.join(AUTO_DIR, ".progmune_corpus", "knowledge", `auto-patches-${Date.now()}.json`));
92
+ const results = (0, autonomous_patch_1.generatePatchesFromSkills)(lib, telemetry, store, 0.85);
93
+ (0, vitest_1.expect)(results.length).toBeGreaterThanOrEqual(1);
94
+ // File skill (92%) should be approved; Auth skill (88%) also above threshold
95
+ const approved = results.filter(r => r.status === "approved");
96
+ (0, vitest_1.expect)(approved.length).toBeGreaterThanOrEqual(1);
97
+ (0, autonomous_patch_1.printAutonomousReport)({ skills: lib.size, patchesGenerated: results.length, patchesApproved: approved.length, patchesRejected: results.filter(r => r.status === "rejected").length, templatesGenerated: 0, summary: "" }, results);
98
+ });
99
+ (0, vitest_1.it)("generates templates from skills", () => {
100
+ const rules = new Map();
101
+ rules.set("open_file", { pre_states: [], post_states: ["FILE_OPEN"] });
102
+ rules.set("write_file", { pre_states: ["FILE_OPEN"], post_states: [] });
103
+ rules.set("close_file", { pre_states: ["FILE_OPEN"], post_states: [], invalidate: ["FILE_OPEN"] });
104
+ const telemetry = new planner_telemetry_1.PlannerTelemetry(path.join(AUTO_DIR, ".progmune_corpus", "telemetry", `tmpl-${Date.now()}.jsonl`));
105
+ const lib = seedLibrary(telemetry, rules);
106
+ const templates = (0, autonomous_patch_1.generateTemplatesFromSkills)(lib);
107
+ (0, vitest_1.expect)(templates.length).toBeGreaterThanOrEqual(1);
108
+ // Template pattern should contain file operation keywords
109
+ (0, vitest_1.expect)(templates.some(t => t.pattern.includes("open") && t.pattern.includes("write"))).toBe(true);
110
+ });
111
+ (0, vitest_1.it)("runs full autonomous pipeline", () => {
112
+ const rules = new Map();
113
+ rules.set("open_file", { pre_states: [], post_states: ["FILE_OPEN"] });
114
+ rules.set("write_file", { pre_states: ["FILE_OPEN"], post_states: [] });
115
+ rules.set("close_file", { pre_states: ["FILE_OPEN"], post_states: [], invalidate: ["FILE_OPEN"] });
116
+ rules.set("verify_password", { pre_states: ["UNAUTHENTICATED"], post_states: ["PASSWORD_VERIFIED"] });
117
+ rules.set("generate_jwt", { pre_states: ["PASSWORD_VERIFIED"], post_states: ["TOKEN_ISSUED"], invalidate: ["PASSWORD_VERIFIED"] });
118
+ rules.set("create_session", { pre_states: ["TOKEN_ISSUED"], post_states: ["SESSION_ACTIVE"], invalidate: ["TOKEN_ISSUED"] });
119
+ const telemetry = new planner_telemetry_1.PlannerTelemetry(path.join(AUTO_DIR, ".progmune_corpus", "telemetry", `full-${Date.now()}.jsonl`));
120
+ const lib = seedLibrary(telemetry, rules);
121
+ const store = new knowledge_governance_1.KnowledgePatchStore(path.join(AUTO_DIR, ".progmune_corpus", "knowledge", `full-patches-${Date.now()}.json`));
122
+ const report = (0, autonomous_patch_1.runAutonomousPipeline)(lib, telemetry, store);
123
+ (0, vitest_1.expect)(report.skills).toBeGreaterThanOrEqual(2);
124
+ (0, vitest_1.expect)(report.patchesApproved).toBeGreaterThanOrEqual(1);
125
+ (0, vitest_1.expect)(report.templatesGenerated).toBeGreaterThanOrEqual(2);
126
+ (0, autonomous_patch_1.printAutonomousReport)(report);
127
+ });
128
+ });
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Governance Badge Server — embeddable SVG badges for README
4
+ *
5
+ * Usage:
6
+ * npx ts-node src/badge/badge-server.ts
7
+ * PROGMUNE_BADGE_PORT=3500 npx ts-node src/badge/badge-server.ts
8
+ *
9
+ * Badge URLs:
10
+ * /badge/knowledge — Knowledge Base status
11
+ * /badge/protocols — Stable protocol count
12
+ * /badge/coverage — Repository coverage
13
+ * /badge/confidence — Average confidence
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ const http = __importStar(require("http"));
50
+ const protocol_knowledge_1 = require("../protocol-knowledge");
51
+ const evidence_repository_1 = require("../evidence-repository");
52
+ const PORT = parseInt(process.env.PROGMUNE_BADGE_PORT || "3500", 10);
53
+ function svgBadge(label, value, color) {
54
+ const lw = label.length * 7 + 12;
55
+ const vw = value.length * 7 + 12;
56
+ const tw = lw + vw;
57
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${tw}" height="20">
58
+ <linearGradient id="bg" x2="0" y2="100%"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#333"/></linearGradient>
59
+ <rect width="${tw}" height="20" rx="3" fill="url(#bg)"/>
60
+ <rect width="${lw}" height="20" rx="3" fill="#555"/>
61
+ <rect x="${lw}" width="${vw}" height="20" rx="3" fill="${color}"/>
62
+ <rect x="${lw}" width="12" height="20" fill="${color}"/>
63
+ <text x="${lw / 2}" y="14" fill="#ccc" font-family="sans-serif" font-size="10" text-anchor="middle">${label}</text>
64
+ <text x="${lw + vw / 2}" y="14" fill="#fff" font-family="sans-serif" font-size="10" text-anchor="middle" font-weight="bold">${value}</text>
65
+ </svg>`;
66
+ }
67
+ const server = http.createServer((req, res) => {
68
+ const url = req.url || "/";
69
+ const kb = (0, protocol_knowledge_1.buildKnowledgeBase)();
70
+ const er = (0, evidence_repository_1.buildEvidenceRepository)();
71
+ res.writeHead(200, { "Content-Type": "image/svg+xml", "Cache-Control": "max-age=300", "Access-Control-Allow-Origin": "*" });
72
+ if (url === "/badge/knowledge") {
73
+ res.end(svgBadge("Knowledge Base", `v${kb.version}`, "#0891b2"));
74
+ }
75
+ else if (url === "/badge/protocols") {
76
+ const n = kb.summary.byMaturity["stable"];
77
+ res.end(svgBadge("Protocols", `${n} stable`, n >= 3 ? "#22c55e" : "#f59e0b"));
78
+ }
79
+ else if (url === "/badge/coverage") {
80
+ res.end(svgBadge("Repos", `${er.summary.totalRepos} validated`, "#8b5cf6"));
81
+ }
82
+ else if (url === "/badge/confidence") {
83
+ res.end(svgBadge("Confidence", `${kb.summary.averageConfidence}%`, kb.summary.averageConfidence >= 70 ? "#22c55e" : "#f59e0b"));
84
+ }
85
+ else if (url === "/" || url === "") {
86
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
87
+ res.end(`<!DOCTYPE html><html><head><title>Progmune Badges</title><style>
88
+ body{font-family:sans-serif;max-width:600px;margin:40px auto;padding:20px;background:#0a0a0a;color:#d4d4d4}
89
+ h1{color:#fff}pre{background:#111;padding:16px;border-radius:8px;font-size:12px}</style></head><body>
90
+ <h1>Progmune Governance Badges</h1>
91
+ ${["knowledge", "protocols", "coverage", "confidence"].map(b => `<p><img src="/badge/${b}"><br><pre>&lt;img src="http://localhost:${PORT}/badge/${b}"&gt;</pre></p>`).join("")}
92
+ </body></html>`);
93
+ }
94
+ else {
95
+ res.end(svgBadge("Progmune", "Governance", "#0891b2"));
96
+ }
97
+ });
98
+ server.listen(PORT, () => console.error(`\n Badge Server: http://localhost:${PORT}\n`));