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.
- package/README.md +108 -468
- package/dist/ablation-study.js +144 -0
- package/dist/ablation-study.test.js +18 -0
- package/dist/action-runtime.js +3 -1
- package/dist/active-learning.js +211 -0
- package/dist/analytics.js +139 -0
- package/dist/asset-factory.js +309 -0
- package/dist/asset-growth.js +244 -0
- package/dist/asset-promotion.js +382 -0
- package/dist/asset-quality.js +550 -0
- package/dist/audit/business-translator.js +285 -0
- package/dist/audit/cli.js +66 -0
- package/dist/audit/formatters/html.js +379 -0
- package/dist/audit/formatters/json.js +11 -0
- package/dist/audit/formatters/markdown.js +192 -0
- package/dist/audit/formatters/terminal.js +189 -0
- package/dist/audit/index.js +25 -0
- package/dist/audit/report-builder.js +318 -0
- package/dist/audit/types.js +8 -0
- package/dist/audit.js +3 -3
- package/dist/auto-benchmark-generator.js +137 -0
- package/dist/auto-benchmark-generator.test.js +45 -0
- package/dist/auto-protocol-synthesizer.js +362 -0
- package/dist/auto-protocol-synthesizer.test.js +82 -0
- package/dist/autonomous-patch.js +175 -0
- package/dist/autonomous-patch.test.js +128 -0
- package/dist/badge/badge-server.js +98 -0
- package/dist/behavior-miner.js +442 -0
- package/dist/belief-layer.js +475 -0
- package/dist/benchmark-count.js +5 -0
- package/dist/benchmark-generator.js +211 -0
- package/dist/benchmark-harness.js +201 -0
- package/dist/benchmark-pass-rate.js +7 -0
- package/dist/benchmark-report.js +8 -3
- package/dist/benchmark-save.js +14 -1
- package/dist/bootstrap-validation.js +197 -0
- package/dist/bootstrap-validation.test.js +51 -0
- package/dist/branch-ledger.js +1 -1
- package/dist/capability-gap.js +130 -0
- package/dist/certify-html.js +351 -0
- package/dist/certify.js +326 -0
- package/dist/check.js +4 -4
- package/dist/compliance-miner.js +447 -0
- package/dist/continuous-benchmark.js +194 -0
- package/dist/continuous-benchmark.test.js +116 -0
- package/dist/corpus-stats.js +173 -0
- package/dist/counterfactual-engine.js +288 -0
- package/dist/coverage-dashboard.js +109 -0
- package/dist/coverage-system.test.js +205 -0
- package/dist/cross-repo-precision.js +352 -0
- package/dist/cve-benchmark.js +180 -0
- package/dist/cve-benchmark.test.js +28 -0
- package/dist/cve-collector.js +73 -0
- package/dist/data-quality.js +141 -0
- package/dist/decision-engine.js +388 -0
- package/dist/derive-metadata.js +250 -0
- package/dist/difficulty-active.test.js +198 -0
- package/dist/difficulty-map.js +244 -0
- package/dist/discovery-analytics.js +125 -0
- package/dist/discovery-model.js +149 -0
- package/dist/discovery-optimize.test.js +199 -0
- package/dist/discovery-trace.js +276 -0
- package/dist/discovery-trace.test.js +97 -0
- package/dist/emitter.js +83 -1
- package/dist/enterprise-dashboard.js +405 -0
- package/dist/eval-hardening.js +297 -0
- package/dist/eval-hardening.test.js +85 -0
- package/dist/evaluation-campaign.js +359 -0
- package/dist/evaluation-campaign.test.js +181 -0
- package/dist/evidence-growth.js +143 -0
- package/dist/evidence-repository.js +209 -0
- package/dist/evidence-system.js +441 -0
- package/dist/execute.js +15 -7
- package/dist/experimental/software-physics.js +291 -0
- package/dist/experimental/state-inference.js +516 -0
- package/dist/experimental/unsupervised-physics.js +230 -0
- package/dist/extract-ir-python.js +54 -7
- package/dist/extract-ir.js +376 -12
- package/dist/failure-collector.js +2 -2
- package/dist/failure-corpus.js +322 -9
- package/dist/feedback.js +16 -5
- package/dist/feedback.test.js +49 -0
- package/dist/file-lock.js +1 -1
- package/dist/flywheel-batch.js +292 -0
- package/dist/frameworks/express-cli.js +237 -0
- package/dist/frameworks/express-detector.js +445 -0
- package/dist/frameworks/express-detector.test.js +206 -0
- package/dist/frameworks/index.js +30 -0
- package/dist/frameworks/nestjs-detector.js +302 -0
- package/dist/frameworks/trpc-detector.js +161 -0
- package/dist/frameworks/version-awareness.js +179 -0
- package/dist/function-synonyms.js +164 -0
- package/dist/function-synonyms.test.js +68 -0
- package/dist/generalization.test.js +352 -0
- package/dist/goal-annotator.js +113 -0
- package/dist/goal-planner.js +563 -0
- package/dist/gold-cve.js +164 -0
- package/dist/gold-cve.test.js +104 -0
- package/dist/gold-quality.js +206 -0
- package/dist/gold-tiers.js +241 -0
- package/dist/governance-dashboard.js +327 -0
- package/dist/graph-viz.js +240 -0
- package/dist/guided-frontier.js +195 -0
- package/dist/hierarchical-planner.js +148 -0
- package/dist/identifier-parser.js +260 -0
- package/dist/immune-metrics.js +93 -0
- package/dist/immune-receiver.js +158 -0
- package/dist/immune-reporter.js +1 -1
- package/dist/improvement-orchestrator.js +206 -0
- package/dist/inject-p0-vocabulary.js +300 -0
- package/dist/intent-parser.js +218 -0
- package/dist/invariant-algebra.js +476 -0
- package/dist/invariant-calculus.js +533 -0
- package/dist/ir-utils.js +70 -0
- package/dist/ir-utils.test.js +50 -0
- package/dist/knowledge-api.js +312 -0
- package/dist/knowledge-evolution.js +452 -0
- package/dist/knowledge-explorer.js +506 -0
- package/dist/knowledge-flywheel.js +274 -0
- package/dist/knowledge-governance.js +338 -0
- package/dist/knowledge-governance.test.js +150 -0
- package/dist/knowledge-graph.js +181 -0
- package/dist/knowledge-guided-synth.js +246 -0
- package/dist/knowledge-loop.test.js +77 -0
- package/dist/knowledge-object.js +316 -0
- package/dist/knowledge-package.js +98 -0
- package/dist/kpi-dashboard.js +561 -0
- package/dist/l3-cross-function.js +280 -0
- package/dist/learning-ranker.js +148 -0
- package/dist/learning-ranker.test.js +291 -0
- package/dist/ledger/accountability.js +322 -0
- package/dist/ledger/chain-builder.js +185 -0
- package/dist/ledger/cli.js +222 -0
- package/dist/ledger/index.js +13 -0
- package/dist/ledger/signatures.js +193 -0
- package/dist/ledger/types.js +9 -0
- package/dist/llm.js +74 -3
- package/dist/load-benchmarks.js +8 -3
- package/dist/logger.js +66 -0
- package/dist/logger.test.js +37 -0
- package/dist/logistic-reward.js +339 -0
- package/dist/logistic-reward.test.js +180 -0
- package/dist/macro-graph.js +193 -0
- package/dist/macro-repair.js +183 -0
- package/dist/mcp-server.mjs +1202 -483
- package/dist/memory-layer.js +42 -5
- package/dist/multi-repo-precision.js +422 -0
- package/dist/name-free-protocol.js +425 -0
- package/dist/name-free-protocol.test.js +170 -0
- package/dist/name-scrambling.js +138 -0
- package/dist/name-scrambling.test.js +16 -0
- package/dist/p3-observability.test.js +281 -0
- package/dist/p5-orchestrator.test.js +225 -0
- package/dist/pairwise-preference.js +294 -0
- package/dist/pairwise-preference.test.js +140 -0
- package/dist/planner-constraints.js +104 -0
- package/dist/planner-prompts.js +155 -0
- package/dist/planner-telemetry.js +415 -0
- package/dist/planner-trace.js +214 -0
- package/dist/planner.js +162 -167
- package/dist/plsb/artifact.js +116 -0
- package/dist/plsb/cli.js +71 -0
- package/dist/plsb/index.js +19 -0
- package/dist/plsb/leaderboard.js +249 -0
- package/dist/plsb/report-md.js +156 -0
- package/dist/plsb/schema.js +179 -0
- package/dist/plsb-benchmark.js +284 -0
- package/dist/plsb-benchmark.test.js +119 -0
- package/dist/policy/cli.js +134 -0
- package/dist/policy/engine.js +333 -0
- package/dist/policy/index.js +12 -0
- package/dist/policy/types.js +59 -0
- package/dist/policy-miner.js +505 -0
- package/dist/precision-analyze.js +229 -0
- package/dist/precision-benchmark.js +147 -0
- package/dist/precision-label-c.js +134 -0
- package/dist/precision-label.js +193 -0
- package/dist/precision-report-c.js +149 -0
- package/dist/precision-report.js +246 -0
- package/dist/progmune-status.js +108 -0
- package/dist/proof-engine.js +479 -0
- package/dist/proof-provenance.js +315 -0
- package/dist/protocol-coverage.js +294 -0
- package/dist/protocol-detector.js +1189 -0
- package/dist/protocol-embedding-expanded.js +297 -0
- package/dist/protocol-embedding-expanded.test.js +97 -0
- package/dist/protocol-embedding.js +195 -0
- package/dist/protocol-embedding.test.js +82 -0
- package/dist/protocol-extractor-v2.js +354 -0
- package/dist/protocol-extractor-v2.test.js +140 -0
- package/dist/protocol-extractor.js +310 -0
- package/dist/protocol-extractor.test.js +113 -0
- package/dist/protocol-foundation.js +322 -0
- package/dist/protocol-foundation.test.js +163 -0
- package/dist/protocol-frontier.js +243 -0
- package/dist/protocol-frontier.test.js +92 -0
- package/dist/protocol-gap-analyzer.js +228 -0
- package/dist/protocol-gap-analyzer.test.js +49 -0
- package/dist/protocol-invariants.js +276 -0
- package/dist/protocol-invariants.test.js +111 -0
- package/dist/protocol-knowledge.js +464 -0
- package/dist/protocol-miner.js +343 -0
- package/dist/protocol-mining.js +207 -0
- package/dist/protocol-mining.test.js +37 -0
- package/dist/protocol-registry.js +1 -1
- package/dist/protocol-security-benchmark.js +222 -0
- package/dist/protocol-vulnerability.js +257 -0
- package/dist/protocol-vulnerability.test.js +60 -0
- package/dist/python-benchmark.js +120 -0
- package/dist/python-emitter.js +163 -45
- package/dist/python-protocol-extractor.js +187 -0
- package/dist/python-protocol-extractor.test.js +116 -0
- package/dist/realworld-benchmark.js +646 -0
- package/dist/realworld-benchmark.test.js +36 -0
- package/dist/repair-arch.test.js +411 -0
- package/dist/repair-evolution.test.js +454 -0
- package/dist/repair-executor.js +719 -0
- package/dist/repair-proposal.js +4 -4
- package/dist/repair-ranker.js +141 -0
- package/dist/repair-strategies.js +419 -0
- package/dist/repair-taxonomy.js +234 -0
- package/dist/repair-types.js +12 -0
- package/dist/repo-evaluator.js +250 -0
- package/dist/repo-evaluator.test.js +128 -0
- package/dist/resource-abstraction.js +242 -0
- package/dist/resource-detector.js +211 -0
- package/dist/result.test.js +43 -0
- package/dist/reward-system.js +411 -0
- package/dist/reward-system.test.js +175 -0
- package/dist/risk-model.js +215 -0
- package/dist/rule-miner.js +234 -7
- package/dist/rule-specificity.js +254 -0
- package/dist/runtime-types.js +27 -0
- package/dist/scaffold.js +208 -0
- package/dist/scale-collector.test.js +101 -0
- package/dist/scale-trajectory-collector.js +128 -0
- package/dist/sdk.js +250 -0
- package/dist/search-planner.js +4 -41
- package/dist/semantic-snapshot.js +1 -1
- package/dist/semantic-topology.js +121 -0
- package/dist/semantic-trace.js +310 -317
- package/dist/sequence-extractor.js +343 -0
- package/dist/skill-library.js +245 -0
- package/dist/skill-planner.test.js +189 -0
- package/dist/software-physics.js +291 -0
- package/dist/software-physics.test.js +81 -0
- package/dist/ssg-precision.js +478 -0
- package/dist/ssg-validator.js +71 -21
- package/dist/state-inference-doubleblind.test.js +160 -0
- package/dist/state-inference.js +516 -0
- package/dist/state-inference.test.js +115 -0
- package/dist/state-machine-fingerprint.js +345 -0
- package/dist/state-machine-fingerprint.test.js +120 -0
- package/dist/state-miner.js +386 -0
- package/dist/state-name-inference.js +213 -0
- package/dist/state-name-inference.test.js +69 -0
- package/dist/strategy-planner.js +262 -96
- package/dist/strategy-planner.test.js +135 -0
- package/dist/telemetry-analytics.test.js +402 -0
- package/dist/terminal-format.js +68 -0
- package/dist/terminal-format.test.js +83 -0
- package/dist/topology-factory.js +196 -0
- package/dist/topology-representation.js +242 -0
- package/dist/topology-representation.test.js +27 -0
- package/dist/trajectory-augmentation.js +254 -0
- package/dist/trajectory-augmentation.test.js +63 -0
- package/dist/trajectory-corpus.js +440 -0
- package/dist/trajectory-corpus.test.js +32 -0
- package/dist/trajectory-feedback.test.js +116 -0
- package/dist/transition-synthesizer.js +286 -0
- package/dist/transition-synthesizer.test.js +123 -0
- package/dist/trust/api-semantic-mapper.js +809 -0
- package/dist/trust/call-graph-propagator.js +225 -0
- package/dist/trust/cli.js +122 -0
- package/dist/trust/compliance-scorer.js +283 -0
- package/dist/trust/confidence-calculator.js +261 -0
- package/dist/trust/engine.js +1145 -0
- package/dist/trust/explainability.js +85 -0
- package/dist/trust/formatters/ci.js +42 -0
- package/dist/trust/formatters/json.js +11 -0
- package/dist/trust/formatters/terminal.js +152 -0
- package/dist/trust/index.js +39 -0
- package/dist/trust/phase1-verify.js +171 -0
- package/dist/trust/protocol-domain-validator.js +697 -0
- package/dist/trust/score-calculator.js +282 -0
- package/dist/trust/ssg-bridge.js +641 -0
- package/dist/trust/ssg-bridge.test.js +269 -0
- package/dist/trust/types.js +67 -0
- package/dist/trust/violation-trace.js +335 -0
- package/dist/trust-api.js +179 -0
- package/dist/trust-calibration.js +279 -0
- package/dist/unknown-protocol-discovery.js +339 -0
- package/dist/unknown-protocol-discovery.test.js +102 -0
- package/dist/unsupervised-physics.js +230 -0
- package/dist/unsupervised-physics.test.js +95 -0
- package/dist/utils.test.js +37 -0
- package/dist/validator.js +187 -10
- package/dist/verification-intelligence.js +475 -0
- package/dist/verify-api.js +432 -0
- package/dist/vi-impact-report.js +293 -0
- package/dist/wl-fingerprint.js +162 -0
- package/dist/wl-fingerprint.test.js +130 -0
- package/dist/zeroshot-strategy.js +139 -0
- 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
- package/docs/Progmune_/351/241/271/347/233/256/345/205/250/350/247/243.html +710 -0
- package/package.json +74 -7
- package/protocols.json +1956 -50
- package/.dockerignore +0 -14
- package/.mcp.json +0 -11
- package/.progmune_allowlist +0 -50
- package/.test_report/test_report.md +0 -87
- package/Dockerfile +0 -9
- package/FAQ.md +0 -167
- package/WHITEPAPER.md +0 -540
- package/demo-project/auth.ts +0 -55
- package/demo-project/tsconfig.json +0 -8
- package/dist/acl-breakdown.js +0 -13
- package/dist/all-sessions.js +0 -11
- package/dist/antibody-stats.js +0 -11
- package/dist/branch-tree-count.js +0 -14
- package/dist/common-fixpath.js +0 -12
- package/dist/constraint-types.js +0 -12
- package/dist/exec-metrics.js +0 -11
- package/dist/failure-report.js +0 -11
- package/dist/fast-path-hits.js +0 -13
- package/dist/fingerprint-list.js +0 -15
- package/dist/gen-history-log.js +0 -13
- package/dist/heatmap-data.js +0 -11
- package/dist/recent-session.js +0 -12
- package/dist/svl-distribution.js +0 -11
- package/dist/terminal-status.js +0 -11
- package/dist/token-savings.js +0 -11
- package/dist/total-repairs.js +0 -12
- package/dist/unresolved-count.js +0 -12
- package/dist/valid-fingerprints.js +0 -13
- package/dist/verify-ledgers.js +0 -11
- package/docs/whitepaper-style.css +0 -77
- package/docs/whitepaper-v2.1.md +0 -609
- package/docs/whitepaper-v2.2.md +0 -1064
- package/docs/whitepaper-v2.2.pdf +0 -0
- package/fly.toml +0 -31
- package/public/dashboard.html +0 -119
- package/server/hub.js +0 -116
- package/test/replay-golden/sess_1780063202050_mgeld.json +0 -9
- package/test/replay-golden/sess_1780064032560_gocld.json +0 -354
- package/test/replay-golden/sess_1780064413331_s2709.json +0 -606
- package/test/replay-golden/sess_1780064792710_y3avo.json +0 -614
- package/test/replay-golden.ts +0 -84
- package/test_benchmark.js +0 -165
- package/test_comprehensive.mjs +0 -638
- package/test_concurrency.js +0 -129
- package/test_ir_robustness.js +0 -85
- package/test_semantic_contracts.js +0 -269
- package/test_ssg_stress.js +0 -156
- package/test_svl3.js +0 -58
- 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><img src="http://localhost:${PORT}/badge/${b}"></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`));
|