jfl 0.8.1 → 0.9.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 (247) hide show
  1. package/dist/commands/doctor.d.ts +1 -0
  2. package/dist/commands/doctor.d.ts.map +1 -1
  3. package/dist/commands/doctor.js +30 -1
  4. package/dist/commands/doctor.js.map +1 -1
  5. package/dist/commands/ide.d.ts +2 -1
  6. package/dist/commands/ide.d.ts.map +1 -1
  7. package/dist/commands/ide.js +60 -1
  8. package/dist/commands/ide.js.map +1 -1
  9. package/dist/commands/init-from-service.d.ts +15 -0
  10. package/dist/commands/init-from-service.d.ts.map +1 -0
  11. package/dist/commands/init-from-service.js +541 -0
  12. package/dist/commands/init-from-service.js.map +1 -0
  13. package/dist/commands/init.d.ts +1 -0
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +32 -1
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/kanban.d.ts.map +1 -1
  18. package/dist/commands/kanban.js +13 -4
  19. package/dist/commands/kanban.js.map +1 -1
  20. package/dist/commands/linear.d.ts +41 -0
  21. package/dist/commands/linear.d.ts.map +1 -0
  22. package/dist/commands/linear.js +715 -0
  23. package/dist/commands/linear.js.map +1 -0
  24. package/dist/commands/peter.d.ts.map +1 -1
  25. package/dist/commands/peter.js +232 -25
  26. package/dist/commands/peter.js.map +1 -1
  27. package/dist/commands/services.d.ts.map +1 -1
  28. package/dist/commands/services.js +146 -0
  29. package/dist/commands/services.js.map +1 -1
  30. package/dist/commands/setup.d.ts.map +1 -1
  31. package/dist/commands/setup.js +173 -13
  32. package/dist/commands/setup.js.map +1 -1
  33. package/dist/commands/telemetry-monitor.d.ts +11 -0
  34. package/dist/commands/telemetry-monitor.d.ts.map +1 -0
  35. package/dist/commands/telemetry-monitor.js +224 -0
  36. package/dist/commands/telemetry-monitor.js.map +1 -0
  37. package/dist/commands/telemetry-test.d.ts +11 -0
  38. package/dist/commands/telemetry-test.d.ts.map +1 -0
  39. package/dist/commands/telemetry-test.js +67 -0
  40. package/dist/commands/telemetry-test.js.map +1 -0
  41. package/dist/commands/tenet-agents.d.ts +13 -0
  42. package/dist/commands/tenet-agents.d.ts.map +1 -0
  43. package/dist/commands/tenet-agents.js +191 -0
  44. package/dist/commands/tenet-agents.js.map +1 -0
  45. package/dist/commands/tenet-setup.d.ts +19 -0
  46. package/dist/commands/tenet-setup.d.ts.map +1 -0
  47. package/dist/commands/tenet-setup.js +131 -0
  48. package/dist/commands/tenet-setup.js.map +1 -0
  49. package/dist/commands/train.d.ts +18 -0
  50. package/dist/commands/train.d.ts.map +1 -1
  51. package/dist/commands/train.js +182 -0
  52. package/dist/commands/train.js.map +1 -1
  53. package/dist/commands/whoami.d.ts +2 -0
  54. package/dist/commands/whoami.d.ts.map +1 -0
  55. package/dist/commands/whoami.js +24 -0
  56. package/dist/commands/whoami.js.map +1 -0
  57. package/dist/index.js +159 -10
  58. package/dist/index.js.map +1 -1
  59. package/dist/lib/advanced-setup.d.ts +78 -0
  60. package/dist/lib/advanced-setup.d.ts.map +1 -0
  61. package/dist/lib/advanced-setup.js +433 -0
  62. package/dist/lib/advanced-setup.js.map +1 -0
  63. package/dist/lib/agent-config.d.ts +33 -0
  64. package/dist/lib/agent-config.d.ts.map +1 -1
  65. package/dist/lib/agent-config.js +26 -0
  66. package/dist/lib/agent-config.js.map +1 -1
  67. package/dist/lib/counterfactual-training-bridge.d.ts +114 -0
  68. package/dist/lib/counterfactual-training-bridge.d.ts.map +1 -0
  69. package/dist/lib/counterfactual-training-bridge.js +322 -0
  70. package/dist/lib/counterfactual-training-bridge.js.map +1 -0
  71. package/dist/lib/discovery-agent.d.ts +48 -0
  72. package/dist/lib/discovery-agent.d.ts.map +1 -0
  73. package/dist/lib/discovery-agent.js +111 -0
  74. package/dist/lib/discovery-agent.js.map +1 -0
  75. package/dist/lib/flow-engine.d.ts.map +1 -1
  76. package/dist/lib/flow-engine.js +46 -8
  77. package/dist/lib/flow-engine.js.map +1 -1
  78. package/dist/lib/gtm-generator.d.ts +29 -0
  79. package/dist/lib/gtm-generator.d.ts.map +1 -0
  80. package/dist/lib/gtm-generator.js +252 -0
  81. package/dist/lib/gtm-generator.js.map +1 -0
  82. package/dist/lib/hub-health.d.ts +40 -0
  83. package/dist/lib/hub-health.d.ts.map +1 -0
  84. package/dist/lib/hub-health.js +89 -0
  85. package/dist/lib/hub-health.js.map +1 -0
  86. package/dist/lib/invariant-monitor.d.ts +6 -2
  87. package/dist/lib/invariant-monitor.d.ts.map +1 -1
  88. package/dist/lib/invariant-monitor.js +89 -2
  89. package/dist/lib/invariant-monitor.js.map +1 -1
  90. package/dist/lib/journal-analyzer.d.ts +71 -0
  91. package/dist/lib/journal-analyzer.d.ts.map +1 -0
  92. package/dist/lib/journal-analyzer.js +306 -0
  93. package/dist/lib/journal-analyzer.js.map +1 -0
  94. package/dist/lib/linear-client.d.ts +73 -0
  95. package/dist/lib/linear-client.d.ts.map +1 -0
  96. package/dist/lib/linear-client.js +112 -0
  97. package/dist/lib/linear-client.js.map +1 -0
  98. package/dist/lib/linear-id-map.d.ts +20 -0
  99. package/dist/lib/linear-id-map.d.ts.map +1 -0
  100. package/dist/lib/linear-id-map.js +57 -0
  101. package/dist/lib/linear-id-map.js.map +1 -0
  102. package/dist/lib/linear-kanban.d.ts +66 -0
  103. package/dist/lib/linear-kanban.d.ts.map +1 -0
  104. package/dist/lib/linear-kanban.js +175 -0
  105. package/dist/lib/linear-kanban.js.map +1 -0
  106. package/dist/lib/onboarding.d.ts +40 -0
  107. package/dist/lib/onboarding.d.ts.map +1 -0
  108. package/dist/lib/onboarding.js +213 -0
  109. package/dist/lib/onboarding.js.map +1 -0
  110. package/dist/lib/physical-world-model.d.ts +50 -0
  111. package/dist/lib/physical-world-model.d.ts.map +1 -0
  112. package/dist/lib/physical-world-model.js +251 -0
  113. package/dist/lib/physical-world-model.js.map +1 -0
  114. package/dist/lib/planning-loop.d.ts +157 -0
  115. package/dist/lib/planning-loop.d.ts.map +1 -0
  116. package/dist/lib/planning-loop.js +537 -0
  117. package/dist/lib/planning-loop.js.map +1 -0
  118. package/dist/lib/policy-head.d.ts +13 -0
  119. package/dist/lib/policy-head.d.ts.map +1 -1
  120. package/dist/lib/policy-head.js +168 -2
  121. package/dist/lib/policy-head.js.map +1 -1
  122. package/dist/lib/resource-optimizer-middleware.d.ts +39 -0
  123. package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -0
  124. package/dist/lib/resource-optimizer-middleware.js +222 -0
  125. package/dist/lib/resource-optimizer-middleware.js.map +1 -0
  126. package/dist/lib/resource-optimizer.d.ts +71 -0
  127. package/dist/lib/resource-optimizer.d.ts.map +1 -0
  128. package/dist/lib/resource-optimizer.js +228 -0
  129. package/dist/lib/resource-optimizer.js.map +1 -0
  130. package/dist/lib/rl-manager.d.ts +74 -0
  131. package/dist/lib/rl-manager.d.ts.map +1 -0
  132. package/dist/lib/rl-manager.js +244 -0
  133. package/dist/lib/rl-manager.js.map +1 -0
  134. package/dist/lib/service-analyzer.d.ts +76 -0
  135. package/dist/lib/service-analyzer.d.ts.map +1 -0
  136. package/dist/lib/service-analyzer.js +704 -0
  137. package/dist/lib/service-analyzer.js.map +1 -0
  138. package/dist/lib/service-gtm.js +2 -2
  139. package/dist/lib/service-gtm.js.map +1 -1
  140. package/dist/lib/service-questionnaire.d.ts +11 -0
  141. package/dist/lib/service-questionnaire.d.ts.map +1 -0
  142. package/dist/lib/service-questionnaire.js +89 -0
  143. package/dist/lib/service-questionnaire.js.map +1 -0
  144. package/dist/lib/setup/agent-generator.d.ts +2 -0
  145. package/dist/lib/setup/agent-generator.d.ts.map +1 -1
  146. package/dist/lib/setup/agent-generator.js +128 -4
  147. package/dist/lib/setup/agent-generator.js.map +1 -1
  148. package/dist/lib/setup/flow-generator.d.ts +10 -0
  149. package/dist/lib/setup/flow-generator.d.ts.map +1 -0
  150. package/dist/lib/setup/flow-generator.js +113 -0
  151. package/dist/lib/setup/flow-generator.js.map +1 -0
  152. package/dist/lib/setup/invariant-bridge.d.ts +91 -0
  153. package/dist/lib/setup/invariant-bridge.d.ts.map +1 -0
  154. package/dist/lib/setup/invariant-bridge.js +384 -0
  155. package/dist/lib/setup/invariant-bridge.js.map +1 -0
  156. package/dist/lib/setup/spec-generator.d.ts +41 -5
  157. package/dist/lib/setup/spec-generator.d.ts.map +1 -1
  158. package/dist/lib/setup/spec-generator.js +503 -29
  159. package/dist/lib/setup/spec-generator.js.map +1 -1
  160. package/dist/lib/stratus-client.js +1 -1
  161. package/dist/lib/stratus-client.js.map +1 -1
  162. package/dist/lib/surface-agent.d.ts +78 -0
  163. package/dist/lib/surface-agent.d.ts.map +1 -0
  164. package/dist/lib/surface-agent.js +105 -0
  165. package/dist/lib/surface-agent.js.map +1 -0
  166. package/dist/lib/surface-coordination-example.d.ts +30 -0
  167. package/dist/lib/surface-coordination-example.d.ts.map +1 -0
  168. package/dist/lib/surface-coordination-example.js +164 -0
  169. package/dist/lib/surface-coordination-example.js.map +1 -0
  170. package/dist/lib/telemetry/physical-world-collector.d.ts +15 -0
  171. package/dist/lib/telemetry/physical-world-collector.d.ts.map +1 -0
  172. package/dist/lib/telemetry/physical-world-collector.js +177 -0
  173. package/dist/lib/telemetry/physical-world-collector.js.map +1 -0
  174. package/dist/lib/telemetry/training-bridge.d.ts +51 -0
  175. package/dist/lib/telemetry/training-bridge.d.ts.map +1 -0
  176. package/dist/lib/telemetry/training-bridge.js +185 -0
  177. package/dist/lib/telemetry/training-bridge.js.map +1 -0
  178. package/dist/lib/telemetry.d.ts +2 -1
  179. package/dist/lib/telemetry.d.ts.map +1 -1
  180. package/dist/lib/telemetry.js +23 -2
  181. package/dist/lib/telemetry.js.map +1 -1
  182. package/dist/lib/tenet-board-agent.d.ts +52 -0
  183. package/dist/lib/tenet-board-agent.d.ts.map +1 -0
  184. package/dist/lib/tenet-board-agent.js +226 -0
  185. package/dist/lib/tenet-board-agent.js.map +1 -0
  186. package/dist/lib/tenet-ide-agent.d.ts +40 -0
  187. package/dist/lib/tenet-ide-agent.d.ts.map +1 -0
  188. package/dist/lib/tenet-ide-agent.js +199 -0
  189. package/dist/lib/tenet-ide-agent.js.map +1 -0
  190. package/dist/lib/workspace/data-pipeline.d.ts.map +1 -1
  191. package/dist/lib/workspace/data-pipeline.js +27 -5
  192. package/dist/lib/workspace/data-pipeline.js.map +1 -1
  193. package/dist/lib/workspace/sidebar-runner.d.ts +13 -0
  194. package/dist/lib/workspace/sidebar-runner.d.ts.map +1 -0
  195. package/dist/lib/workspace/sidebar-runner.js +419 -0
  196. package/dist/lib/workspace/sidebar-runner.js.map +1 -0
  197. package/dist/lib/workspace/surface-registry.d.ts.map +1 -1
  198. package/dist/lib/workspace/surface-registry.js +4 -1
  199. package/dist/lib/workspace/surface-registry.js.map +1 -1
  200. package/dist/lib/workspace/surfaces/agent-overview.d.ts +3 -3
  201. package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -1
  202. package/dist/lib/workspace/surfaces/agent-overview.js +3 -3
  203. package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -1
  204. package/dist/lib/workspace/surfaces/index.d.ts +3 -0
  205. package/dist/lib/workspace/surfaces/index.d.ts.map +1 -1
  206. package/dist/lib/workspace/surfaces/index.js +3 -0
  207. package/dist/lib/workspace/surfaces/index.js.map +1 -1
  208. package/dist/lib/workspace/surfaces/kanban.d.ts +15 -0
  209. package/dist/lib/workspace/surfaces/kanban.d.ts.map +1 -0
  210. package/dist/lib/workspace/surfaces/kanban.js +43 -0
  211. package/dist/lib/workspace/surfaces/kanban.js.map +1 -0
  212. package/dist/lib/workspace/surfaces/physical-world.d.ts +15 -0
  213. package/dist/lib/workspace/surfaces/physical-world.d.ts.map +1 -0
  214. package/dist/lib/workspace/surfaces/physical-world.js +37 -0
  215. package/dist/lib/workspace/surfaces/physical-world.js.map +1 -0
  216. package/dist/lib/workspace/surfaces/sidebar.d.ts +22 -0
  217. package/dist/lib/workspace/surfaces/sidebar.d.ts.map +1 -0
  218. package/dist/lib/workspace/surfaces/sidebar.js +90 -0
  219. package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
  220. package/dist/types/flows.d.ts +2 -1
  221. package/dist/types/flows.d.ts.map +1 -1
  222. package/dist/types/physical-world-model.d.ts +65 -0
  223. package/dist/types/physical-world-model.d.ts.map +1 -0
  224. package/dist/types/physical-world-model.js +43 -0
  225. package/dist/types/physical-world-model.js.map +1 -0
  226. package/dist/types/telemetry.d.ts +37 -0
  227. package/dist/types/telemetry.d.ts.map +1 -1
  228. package/dist/types/world-model.d.ts.map +1 -1
  229. package/dist/types/world-model.js +14 -7
  230. package/dist/types/world-model.js.map +1 -1
  231. package/dist/utils/context-hub-port.d.ts.map +1 -1
  232. package/dist/utils/context-hub-port.js +6 -1
  233. package/dist/utils/context-hub-port.js.map +1 -1
  234. package/package.json +3 -2
  235. package/packages/pi/extensions/index.ts +34 -6
  236. package/scripts/telemetry-dashboard.sh +44 -0
  237. package/scripts/test-planning-loop-e2e.ts +181 -0
  238. package/scripts/test-server-inference.ts +49 -0
  239. package/scripts/test-state-sensitivity.ts +32 -0
  240. package/scripts/train/v2/benchmark.py +661 -0
  241. package/scripts/train/v2/generate_balanced.py +439 -0
  242. package/scripts/train/v2/generate_hard_negatives.py +219 -0
  243. package/scripts/train/v2/infer.py +149 -36
  244. package/scripts/train/v2/infer_server.py +224 -0
  245. package/scripts/train/v2/online_train.py +576 -0
  246. package/scripts/train/v2/precompute.py +24 -6
  247. package/template/CLAUDE.md +74 -132
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @purpose Generate self-driving flow definitions for new projects
3
+ *
4
+ * Creates the autonomous improvement loop:
5
+ * Issue filed → PP picks up → PR → eval → auto-merge → issue closed → retrain
6
+ *
7
+ * Flows are YAML-safe (no embedded Python/complex bash — uses script files).
8
+ */
9
+ export function generateSelfDrivingFlows() {
10
+ return `# Self-driving loop flows
11
+ # Auto-generated by: jfl setup
12
+ # These flows close the autonomous improvement loop:
13
+ # Issue filed → PP picks up → PR → eval → auto-merge → issue closed
14
+ #
15
+ # Requires: Context Hub running (jfl context-hub start)
16
+ # For auto-merge: set GitHub secrets JFL_HUB_URL + JFL_HUB_TOKEN
17
+
18
+ flows:
19
+ # ── Issue Lifecycle ────────────────────────────────────────────────
20
+
21
+ - name: pick-up-backlog-issues
22
+ description: "PP picks up highest-priority jfl/backlog issue every 30 min"
23
+ enabled: true
24
+ trigger:
25
+ cron: "every-30-minutes"
26
+ gate:
27
+ requires_approval: false
28
+ cooldown_hours: 4
29
+ actions:
30
+ - type: log
31
+ message: "Checking for backlog issues to pick up..."
32
+ - type: command
33
+ command: |
34
+ ISSUE_JSON=$(gh issue list --label "jfl/backlog" --state open --limit 1 --json number,title,body,labels 2>/dev/null || echo "[]")
35
+ NUM=$(echo "$ISSUE_JSON" | python3 -c "import sys,json; i=json.load(sys.stdin); print(i[0]['number'] if i else '')" 2>/dev/null || echo "")
36
+ if [ -z "$NUM" ]; then echo "No backlog issues"; exit 0; fi
37
+ TITLE=$(echo "$ISSUE_JSON" | python3 -c "import sys,json; i=json.load(sys.stdin); print(i[0]['title'] if i else '')" 2>/dev/null || echo "")
38
+ BODY=$(echo "$ISSUE_JSON" | python3 -c "import sys,json; i=json.load(sys.stdin); print(i[0].get('body','') or '' if i else '')" 2>/dev/null || echo "")
39
+ echo "Picking up #$NUM: $TITLE"
40
+ gh issue edit "$NUM" --remove-label "jfl/backlog" --add-label "jfl/in-progress" 2>/dev/null || true
41
+ gh issue comment "$NUM" --body "🤖 PP picked this up. Working on a fix." 2>/dev/null || true
42
+ BRANCH="pp/issue-\${NUM}"
43
+ TASK="GitHub #\${NUM}: \${TITLE}\\n\\n\${BODY}\\n\\nIMPORTANT: Include 'Closes #\${NUM}' in the PR body."
44
+ jfl peter pr --task "$TASK" 2>&1 || true
45
+
46
+ - name: auto-merge-on-improvement
47
+ description: "Auto-merge PRs when eval score improves"
48
+ enabled: true
49
+ trigger:
50
+ pattern: "eval:scored"
51
+ condition: 'data.improved == "true"'
52
+ gate:
53
+ requires_approval: false
54
+ actions:
55
+ - type: log
56
+ message: "Eval passed: PR #{{data.pr_number}} delta={{data.delta}}"
57
+ - type: command
58
+ command: 'gh pr merge "{{data.pr_number}}" --merge --delete-branch --body "Auto-merged: score improved by {{data.delta}}" 2>/dev/null || true'
59
+
60
+ - name: flag-regression
61
+ description: "Request changes on PRs when eval regresses"
62
+ enabled: true
63
+ trigger:
64
+ pattern: "eval:scored"
65
+ condition: 'data.improved == "false" && data.pr_number'
66
+ actions:
67
+ - type: command
68
+ command: 'gh pr review "{{data.pr_number}}" --request-changes --body "❌ Eval regressed by {{data.delta}}" 2>/dev/null || true'
69
+
70
+ # ── Training Data ──────────────────────────────────────────────────
71
+
72
+ - name: log-training-tuple
73
+ description: "Log training tuple after every eval"
74
+ enabled: true
75
+ trigger:
76
+ pattern: "eval:scored"
77
+ actions:
78
+ - type: command
79
+ command: 'jfl eval log --agent "{{data.agent}}" --metrics "{\\"composite\\":{{data.composite}},\\"delta\\":{{data.delta}}}" 2>/dev/null || true'
80
+
81
+ - name: mine-on-session-end
82
+ description: "Mine training tuples from journal on session end"
83
+ enabled: true
84
+ trigger:
85
+ pattern: "session:ended"
86
+ actions:
87
+ - type: command
88
+ command: "jfl eval mine --all 2>/dev/null || true"
89
+
90
+ # ── Nightly ────────────────────────────────────────────────────────
91
+
92
+ - name: nightly-retrain
93
+ description: "Retrain PolicyHead nightly if enough new data"
94
+ enabled: true
95
+ trigger:
96
+ cron: "daily"
97
+ gate:
98
+ requires_approval: false
99
+ actions:
100
+ - type: command
101
+ command: |
102
+ BUFFER=$(wc -l < .jfl/training-buffer.jsonl 2>/dev/null || echo "0")
103
+ LAST=$(cat .jfl/checkpoints/policy-head-v2.json 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('trained_on',0))" 2>/dev/null || echo "0")
104
+ NEW=$((BUFFER - LAST))
105
+ if [ "$NEW" -ge 50 ]; then
106
+ echo "Retraining: $NEW new tuples"
107
+ jfl train transform && jfl train policy-head --force 2>&1 || true
108
+ else
109
+ echo "Skip retrain: only $NEW new tuples (need 50+)"
110
+ fi
111
+ `;
112
+ }
113
+ //# sourceMappingURL=flow-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-generator.js","sourceRoot":"","sources":["../../../src/lib/setup/flow-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGR,CAAA;AACD,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @purpose Bridge between TLA+ invariants and runtime InvariantMonitor
3
+ *
4
+ * Phase 2: Generate InvariantMonitor rules from:
5
+ * 1. TLA+ invariant definitions (spec-generator)
6
+ * 2. TLC violation counterexamples (jfl verify output)
7
+ * 3. PlanningLoop invariant gates
8
+ *
9
+ * Phase 3: Generate negative training tuples from TLC violations
10
+ * for PolicyHead training (the model learns to avoid unsafe actions).
11
+ */
12
+ import type { SystemModel } from "./spec-generator.js";
13
+ /** A runtime invariant rule generated from formal verification */
14
+ export interface RuntimeInvariantRule {
15
+ id: string;
16
+ name: string;
17
+ description: string;
18
+ severity: "critical" | "error" | "warning";
19
+ source: "tla+" | "tlc_violation" | "planning_gate" | "manual";
20
+ /** The condition that triggers this rule (TypeScript expression shape) */
21
+ condition: InvariantCondition;
22
+ /** What to do when triggered */
23
+ action: "VETO" | "THROTTLE" | "WARN";
24
+ /** Recovery suggestion */
25
+ recovery: string;
26
+ /** Original TLA+ formula if available */
27
+ tlaFormula?: string;
28
+ /** TLC counterexample trace if from a violation */
29
+ counterexample?: CounterexampleTrace;
30
+ }
31
+ export interface InvariantCondition {
32
+ /** Which state fields to check */
33
+ stateFields: string[];
34
+ /** Human-readable expression */
35
+ expression: string;
36
+ /** TypeScript predicate body */
37
+ predicate: string;
38
+ }
39
+ export interface CounterexampleTrace {
40
+ steps: CounterexampleStep[];
41
+ depth: number;
42
+ invariantViolated: string;
43
+ }
44
+ export interface CounterexampleStep {
45
+ step: number;
46
+ action: string;
47
+ state: Record<string, string>;
48
+ }
49
+ /** Training tuple generated from a TLC violation */
50
+ export interface ViolationTrainingTuple {
51
+ /** State text for PolicyHead embedding */
52
+ state_text: string;
53
+ /** Goal text that led to the violation */
54
+ goal_text: string;
55
+ /** The action that was taken (and violated the invariant) */
56
+ action_type: string;
57
+ /** Always "regressed" — these are negative examples */
58
+ outcome: "regressed";
59
+ /** The invariant that was violated */
60
+ invariant: string;
61
+ /** Source: "tlc_violation" */
62
+ source: string;
63
+ }
64
+ /**
65
+ * Generate InvariantMonitor rules from a SystemModel's planning loop gates
66
+ * and TLA+ invariant definitions.
67
+ */
68
+ export declare function generateRuntimeRules(model: SystemModel): RuntimeInvariantRule[];
69
+ /**
70
+ * Read TLC violation results and generate runtime rules from counterexamples.
71
+ * Each counterexample becomes a rule that prevents the specific state transition
72
+ * that led to the violation.
73
+ */
74
+ export declare function generateRulesFromViolations(projectRoot: string): RuntimeInvariantRule[];
75
+ /**
76
+ * Convert TLC violation counterexamples into negative training tuples
77
+ * for the PolicyHead. Each violation trace becomes a (state, action, negative_reward)
78
+ * tuple that teaches the model to avoid unsafe actions.
79
+ */
80
+ export declare function generateViolationTrainingTuples(projectRoot: string): ViolationTrainingTuple[];
81
+ /**
82
+ * Write generated runtime rules to .jfl/invariant-rules.json
83
+ * These are loaded by the InvariantMonitor at runtime.
84
+ */
85
+ export declare function writeRuntimeRules(projectRoot: string, rules: RuntimeInvariantRule[]): string;
86
+ /**
87
+ * Write violation training tuples to the training buffer
88
+ * (appended to existing training-buffer.jsonl)
89
+ */
90
+ export declare function writeViolationTuples(projectRoot: string, tuples: ViolationTrainingTuple[]): number;
91
+ //# sourceMappingURL=invariant-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant-bridge.d.ts","sourceRoot":"","sources":["../../../src/lib/setup/invariant-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAA;AAMrE,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAA;IAC1C,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAA;IAE7D,0EAA0E;IAC1E,SAAS,EAAE,kBAAkB,CAAA;IAE7B,gCAAgC;IAChC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;IAEpC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAEhB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,mDAAmD;IACnD,cAAc,CAAC,EAAE,mBAAmB,CAAA;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAED,oDAAoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,OAAO,EAAE,WAAW,CAAA;IACpB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,EAAE,CA8B/E;AAsGD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAwCvF;AAuDD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAyC7F;AAsED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAI5F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,CA0ClG"}
@@ -0,0 +1,384 @@
1
+ /**
2
+ * @purpose Bridge between TLA+ invariants and runtime InvariantMonitor
3
+ *
4
+ * Phase 2: Generate InvariantMonitor rules from:
5
+ * 1. TLA+ invariant definitions (spec-generator)
6
+ * 2. TLC violation counterexamples (jfl verify output)
7
+ * 3. PlanningLoop invariant gates
8
+ *
9
+ * Phase 3: Generate negative training tuples from TLC violations
10
+ * for PolicyHead training (the model learns to avoid unsafe actions).
11
+ */
12
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
13
+ import { join } from "path";
14
+ // ============================================================================
15
+ // Phase 2: Generate Runtime Rules from TLA+ Model
16
+ // ============================================================================
17
+ /**
18
+ * Generate InvariantMonitor rules from a SystemModel's planning loop gates
19
+ * and TLA+ invariant definitions.
20
+ */
21
+ export function generateRuntimeRules(model) {
22
+ const rules = [];
23
+ // From planning loop invariant gates
24
+ if (model.planningLoop) {
25
+ for (const gate of model.planningLoop.invariantGates) {
26
+ rules.push(gateToRule(gate));
27
+ }
28
+ }
29
+ // From TLA+ invariant definitions
30
+ for (const inv of model.invariants) {
31
+ rules.push({
32
+ id: `tla_${inv.name}`,
33
+ name: inv.name,
34
+ description: inv.description,
35
+ severity: inv.severity === "info" ? "warning" : inv.severity,
36
+ source: "tla+",
37
+ condition: {
38
+ stateFields: extractStateFields(inv.formula),
39
+ expression: inv.description,
40
+ predicate: tlaToTSPredicate(inv.name, inv.formula),
41
+ },
42
+ action: inv.severity === "critical" ? "VETO" : "WARN",
43
+ recovery: `Address ${inv.name} violation — ${inv.description}`,
44
+ tlaFormula: inv.formula,
45
+ });
46
+ }
47
+ return rules;
48
+ }
49
+ /**
50
+ * Convert a PlanningLoop InvariantGate to a RuntimeInvariantRule
51
+ */
52
+ function gateToRule(gate) {
53
+ return {
54
+ id: `gate_${gate.name}`,
55
+ name: gate.name,
56
+ description: gate.condition,
57
+ severity: gate.action === "VETO" ? "critical" : gate.action === "THROTTLE" ? "error" : "warning",
58
+ source: "planning_gate",
59
+ condition: {
60
+ stateFields: extractStateFields(gate.tlaFormula),
61
+ expression: gate.condition,
62
+ predicate: gateToPredicate(gate),
63
+ },
64
+ action: gate.action,
65
+ recovery: `Resolve ${gate.name}: ${gate.condition}`,
66
+ tlaFormula: gate.tlaFormula,
67
+ };
68
+ }
69
+ /**
70
+ * Extract state field names from a TLA+ formula
71
+ */
72
+ function extractStateFields(formula) {
73
+ const fields = [];
74
+ const patterns = {
75
+ hubStatus: "systemState.hubConnections",
76
+ serviceStatus: "systemState.hubConnections",
77
+ agentStatus: "systemState.activeAgents",
78
+ repoLocks: "systemState.fileLocks",
79
+ cpuTemp: "systemState.cpuTemp",
80
+ memoryPressure: "systemState.memoryPressure",
81
+ humanEditing: "contextState.humanActivity",
82
+ trainingBuffer: "systemState.pendingEvals",
83
+ planningPhase: "planningPhase",
84
+ selectedTool: "selectedTool",
85
+ rolloutCount: "rolloutCount",
86
+ };
87
+ for (const [tlaVar, stateField] of Object.entries(patterns)) {
88
+ if (formula.includes(tlaVar)) {
89
+ fields.push(stateField);
90
+ }
91
+ }
92
+ return [...new Set(fields)];
93
+ }
94
+ /**
95
+ * Convert a TLA+ invariant name to a TypeScript predicate
96
+ * Returns a function body string that takes (state: WorldState)
97
+ */
98
+ function tlaToTSPredicate(name, formula) {
99
+ const predicates = {
100
+ NoParallelEdits: `
101
+ const locks = state.systemState.fileLocks;
102
+ const uniqueLocks = new Set(locks);
103
+ return uniqueLocks.size < locks.length; // violation if duplicates`,
104
+ HubRequiredForScheduling: `
105
+ const hubDown = state.systemState.hubConnections === 0;
106
+ const hasActive = state.systemState.activeAgents.length > 0;
107
+ return hubDown && hasActive; // violation if hub down with active agents`,
108
+ LockIntegrity: `
109
+ const active = Object.entries(state.systemState.worktreeAllocation)
110
+ .filter(([, path]) => path !== "none");
111
+ return active.length > 0 && state.systemState.fileLocks.length === 0;
112
+ // violation if active agents without locks`,
113
+ };
114
+ return predicates[name] || `return false; // TODO: implement check for ${name}`;
115
+ }
116
+ /**
117
+ * Convert a PlanningLoop gate to a TypeScript predicate string
118
+ */
119
+ function gateToPredicate(gate) {
120
+ const predicates = {
121
+ NoAgentStranding: `return state.systemState.hubConnections === 0 && state.systemState.activeAgents.length > 0`,
122
+ HumanAgentIsolation: `return state.contextState.humanActivity === true`,
123
+ WorktreeExclusivity: `
124
+ const allocs = Object.values(state.systemState.worktreeAllocation).filter(p => p !== "none");
125
+ return allocs.length !== new Set(allocs).size`,
126
+ ProposalRequired: `return proposals.length === 0`,
127
+ InvariantCheckRequired: `return !allProposalsChecked`,
128
+ RolloutBeforeSelect: `return rolloutCount === 0`,
129
+ AuthorityRespected: `return false; // enforced by planning loop structure`,
130
+ ThermalSafety: `return (state.systemState as any).cpuTemp > 85`,
131
+ MemoryBound: `return (state.systemState as any).memoryPressure > 80`,
132
+ };
133
+ return predicates[gate.name] || `return false; // TODO: implement ${gate.name}`;
134
+ }
135
+ // ============================================================================
136
+ // Phase 2: Generate Rules from TLC Violations
137
+ // ============================================================================
138
+ /**
139
+ * Read TLC violation results and generate runtime rules from counterexamples.
140
+ * Each counterexample becomes a rule that prevents the specific state transition
141
+ * that led to the violation.
142
+ */
143
+ export function generateRulesFromViolations(projectRoot) {
144
+ const violationsPath = join(projectRoot, ".jfl", "specs", "violations.json");
145
+ if (!existsSync(violationsPath))
146
+ return [];
147
+ const data = JSON.parse(readFileSync(violationsPath, "utf-8"));
148
+ const rules = [];
149
+ for (const spec of data.specs || []) {
150
+ for (const violation of spec.violations || []) {
151
+ const trace = violation.trace || [];
152
+ if (trace.length === 0)
153
+ continue;
154
+ // The violation action is the last step that broke the invariant
155
+ const triggerStep = trace[trace.length - 1];
156
+ const prevStep = trace.length > 1 ? trace[trace.length - 2] : null;
157
+ rules.push({
158
+ id: `tlc_${violation.invariant}_${trace.length}`,
159
+ name: `TLC: ${violation.invariant}`,
160
+ description: `TLC found ${violation.invariant} violation via ${triggerStep?.action || "unknown"} at depth ${trace.length}`,
161
+ severity: "critical",
162
+ source: "tlc_violation",
163
+ condition: {
164
+ stateFields: Object.keys(triggerStep?.state || {}),
165
+ expression: `${triggerStep?.action || "Action"} while ${formatViolationCondition(prevStep, violation.invariant)}`,
166
+ predicate: generateViolationPredicate(violation.invariant, trace),
167
+ },
168
+ action: "VETO",
169
+ recovery: `Prevent ${triggerStep?.action} when ${formatViolationCondition(prevStep, violation.invariant)}`,
170
+ tlaFormula: violation.invariant,
171
+ counterexample: {
172
+ steps: trace,
173
+ depth: trace.length,
174
+ invariantViolated: violation.invariant,
175
+ },
176
+ });
177
+ }
178
+ }
179
+ return rules;
180
+ }
181
+ function formatViolationCondition(prevStep, invariant) {
182
+ if (!prevStep?.state)
183
+ return `${invariant} preconditions hold`;
184
+ const conditions = [];
185
+ for (const [key, val] of Object.entries(prevStep.state)) {
186
+ if (key === "serviceStatus" && val.includes("down")) {
187
+ conditions.push("service is down");
188
+ }
189
+ if (key === "agentStatus" && val.includes("running")) {
190
+ conditions.push("agents are running");
191
+ }
192
+ if (key === "repoLocks" && val.includes("{")) {
193
+ conditions.push("repo locks are held");
194
+ }
195
+ }
196
+ return conditions.length > 0 ? conditions.join(" and ") : `${invariant} preconditions`;
197
+ }
198
+ function generateViolationPredicate(invariant, trace) {
199
+ // Generate a predicate that detects the preconditions of the violation
200
+ const lastStep = trace[trace.length - 1];
201
+ const action = lastStep?.action || "";
202
+ if (invariant === "HubRequiredForScheduling") {
203
+ return `
204
+ // TLC violation: hub crashed while agent was scheduled/running
205
+ const hubDown = state.systemState.hubConnections === 0;
206
+ const hasActive = state.systemState.activeAgents.length > 0;
207
+ return hubDown && hasActive;`;
208
+ }
209
+ if (invariant === "NoParallelEdits") {
210
+ return `
211
+ // TLC violation: two agents editing same files
212
+ const locks = state.systemState.fileLocks;
213
+ return locks.length !== new Set(locks).size;`;
214
+ }
215
+ if (invariant === "LockIntegrity") {
216
+ return `
217
+ // TLC violation: agent running without proper lock
218
+ const active = state.systemState.activeAgents.filter(a =>
219
+ !state.systemState.fileLocks.some(l => l.includes(a)));
220
+ return active.length > 0;`;
221
+ }
222
+ return `return false; // TODO: implement check for ${invariant} (action: ${action})`;
223
+ }
224
+ // ============================================================================
225
+ // Phase 3: Generate Training Tuples from Violations
226
+ // ============================================================================
227
+ /**
228
+ * Convert TLC violation counterexamples into negative training tuples
229
+ * for the PolicyHead. Each violation trace becomes a (state, action, negative_reward)
230
+ * tuple that teaches the model to avoid unsafe actions.
231
+ */
232
+ export function generateViolationTrainingTuples(projectRoot) {
233
+ const violationsPath = join(projectRoot, ".jfl", "specs", "violations.json");
234
+ if (!existsSync(violationsPath))
235
+ return [];
236
+ const data = JSON.parse(readFileSync(violationsPath, "utf-8"));
237
+ const tuples = [];
238
+ for (const spec of data.specs || []) {
239
+ for (const violation of spec.violations || []) {
240
+ const trace = violation.trace || [];
241
+ if (trace.length < 2)
242
+ continue;
243
+ // Each step in the trace that leads toward the violation is a negative example
244
+ for (let i = 1; i < trace.length; i++) {
245
+ const step = trace[i];
246
+ const prevStep = trace[i - 1];
247
+ const action = step.action || "unknown";
248
+ // Map TLC action names to v2 tool names
249
+ const toolName = tlcActionToTool(action);
250
+ if (!toolName)
251
+ continue;
252
+ // Build state text from the TLC state
253
+ const stateText = buildStateTextFromTLC(prevStep.state, spec.specName);
254
+ // Build goal text from the invariant being violated
255
+ const goalText = `${invariantToGoal(violation.invariant)}. Context: ${action} was attempted.`;
256
+ tuples.push({
257
+ state_text: stateText,
258
+ goal_text: goalText,
259
+ action_type: toolName,
260
+ outcome: "regressed",
261
+ invariant: violation.invariant,
262
+ source: "tlc_violation",
263
+ });
264
+ }
265
+ }
266
+ }
267
+ return tuples;
268
+ }
269
+ /**
270
+ * Map TLC action names to v2 PolicyHead tool names
271
+ */
272
+ function tlcActionToTool(tlcAction) {
273
+ const mapping = {
274
+ ScheduleAgent: "run_experiment",
275
+ AgentStart: "run_experiment",
276
+ AgentEval: "run_experiment",
277
+ AgentComplete: "run_experiment",
278
+ AgentReset: "update_config",
279
+ AgentRecover: "fix_bug",
280
+ ServiceCrash: "add_monitoring",
281
+ ServiceRestart: "fix_bug",
282
+ PHPropose: "run_experiment",
283
+ DMSimulate: "run_experiment",
284
+ IMCheck: "add_monitoring",
285
+ SelectAction: "run_experiment",
286
+ Execute: "run_experiment",
287
+ };
288
+ return mapping[tlcAction] || null;
289
+ }
290
+ /**
291
+ * Build a PolicyHead-compatible state text from TLC state variables
292
+ */
293
+ function buildStateTextFromTLC(state, specName) {
294
+ // Extract meaningful signals from TLC state
295
+ const hubDown = state.serviceStatus?.includes('"down"') ?? false;
296
+ const activeAgents = (state.agentStatus?.match(/"running"|"eval"|"scheduled"/g) || []).length;
297
+ const totalAgents = (state.agentStatus?.match(/"/g) || []).length / 2;
298
+ const composite = hubDown ? 0.3 : (activeAgents > 0 ? 0.6 : 0.8);
299
+ const testRate = hubDown ? 0.5 : 0.9;
300
+ const buildHealth = hubDown ? 0.0 : 0.9;
301
+ return [
302
+ `Agent: ${specName}`,
303
+ `Composite: ${composite.toFixed(4)}`,
304
+ `Tests: ${Math.round(testRate * 20)}/${20}`,
305
+ `Trajectory: ${activeAgents}`,
306
+ `Dimensions: test_pass_rate=${testRate.toFixed(4)}, build_health=${buildHealth.toFixed(4)}, hub_health=${hubDown ? "0.0000" : "1.0000"}`,
307
+ `Recent deltas: ${hubDown ? "-0.5000" : "+0.0100"}`,
308
+ ].join("\n");
309
+ }
310
+ /**
311
+ * Convert an invariant name to a natural language goal
312
+ */
313
+ function invariantToGoal(invariant) {
314
+ const goals = {
315
+ HubRequiredForScheduling: "Ensure agents don't run when the hub is unavailable",
316
+ NoParallelEdits: "Prevent concurrent file edits that could cause merge conflicts",
317
+ LockIntegrity: "Maintain worktree lock consistency for running agents",
318
+ BoundedConcurrency: "Keep concurrent agent count within safe limits",
319
+ BufferBounded: "Prevent training buffer overflow",
320
+ NoExecutionWithoutIMApproval: "Ensure all actions pass invariant checks before execution",
321
+ VetoedNeverExecuted: "Never execute an action that was vetoed by safety checks",
322
+ HubRequiredForExecution: "Block action execution when hub is down",
323
+ SimulationBeforeSelection: "Require DM rollout before selecting an action",
324
+ AuthorityHierarchy: "Respect the IM > RO > WO > PH authority chain",
325
+ };
326
+ return goals[invariant] || `Maintain ${invariant} system invariant`;
327
+ }
328
+ // ============================================================================
329
+ // Write to Disk
330
+ // ============================================================================
331
+ /**
332
+ * Write generated runtime rules to .jfl/invariant-rules.json
333
+ * These are loaded by the InvariantMonitor at runtime.
334
+ */
335
+ export function writeRuntimeRules(projectRoot, rules) {
336
+ const rulesPath = join(projectRoot, ".jfl", "invariant-rules.json");
337
+ writeFileSync(rulesPath, JSON.stringify(rules, null, 2));
338
+ return rulesPath;
339
+ }
340
+ /**
341
+ * Write violation training tuples to the training buffer
342
+ * (appended to existing training-buffer.jsonl)
343
+ */
344
+ export function writeViolationTuples(projectRoot, tuples) {
345
+ if (tuples.length === 0)
346
+ return 0;
347
+ const bufferPath = join(projectRoot, ".jfl", "training-buffer.jsonl");
348
+ mkdirSync(join(projectRoot, ".jfl"), { recursive: true });
349
+ const lines = tuples.map(t => JSON.stringify({
350
+ v: 1,
351
+ ts: new Date().toISOString(),
352
+ session: "tlc-violation-mining",
353
+ state: {
354
+ composite_score: 0.3,
355
+ dimension_scores: { hub_health: 0, build_health: 0 },
356
+ tests_passing: 0,
357
+ tests_total: 1,
358
+ trajectory_length: 0,
359
+ recent_deltas: [-0.5],
360
+ agent: "system",
361
+ },
362
+ action: {
363
+ type: t.action_type,
364
+ description: t.goal_text,
365
+ files_affected: [],
366
+ scope: "medium",
367
+ },
368
+ outcome: {
369
+ improved: false,
370
+ delta: -0.1,
371
+ reward: -1.0,
372
+ },
373
+ meta: {
374
+ source: t.source,
375
+ invariant: t.invariant,
376
+ state_text: t.state_text,
377
+ goal_text: t.goal_text,
378
+ },
379
+ }));
380
+ const existing = existsSync(bufferPath) ? readFileSync(bufferPath, "utf-8") : "";
381
+ writeFileSync(bufferPath, existing + lines.join("\n") + "\n");
382
+ return tuples.length;
383
+ }
384
+ //# sourceMappingURL=invariant-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant-bridge.js","sourceRoot":"","sources":["../../../src/lib/setup/invariant-bridge.ts"],"names":[],"mappings":"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"}