loopforge 2.7.0 → 3.0.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 (173) hide show
  1. package/README.md +136 -182
  2. package/dist/canonical-event-writer.d.ts +20 -0
  3. package/dist/canonical-event-writer.d.ts.map +1 -0
  4. package/dist/canonical-event-writer.js +131 -0
  5. package/dist/canonical-event-writer.js.map +1 -0
  6. package/dist/canonical-state.d.ts +20 -16
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +211 -64
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +11 -10
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +48 -0
  14. package/dist/cognitive-governance.d.ts.map +1 -0
  15. package/dist/cognitive-governance.js +226 -0
  16. package/dist/cognitive-governance.js.map +1 -0
  17. package/dist/compiler-subgoals.d.ts +7 -0
  18. package/dist/compiler-subgoals.d.ts.map +1 -0
  19. package/dist/compiler-subgoals.js +93 -0
  20. package/dist/compiler-subgoals.js.map +1 -0
  21. package/dist/derive-id.d.ts +12 -0
  22. package/dist/derive-id.d.ts.map +1 -0
  23. package/dist/derive-id.js +31 -0
  24. package/dist/derive-id.js.map +1 -0
  25. package/dist/evidence-provider.d.ts +26 -26
  26. package/dist/evidence-provider.d.ts.map +1 -1
  27. package/dist/evidence-provider.js +45 -71
  28. package/dist/evidence-provider.js.map +1 -1
  29. package/dist/generate-schema.js +90 -2
  30. package/dist/generate-schema.js.map +1 -1
  31. package/dist/index.d.ts +23 -29
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +16 -26
  34. package/dist/index.js.map +1 -1
  35. package/dist/loop-compiler.d.ts +2 -2
  36. package/dist/loop-compiler.d.ts.map +1 -1
  37. package/dist/loop-compiler.js +321 -315
  38. package/dist/loop-compiler.js.map +1 -1
  39. package/dist/loop-extras-parser.d.ts +2 -2
  40. package/dist/loop-extras-parser.d.ts.map +1 -1
  41. package/dist/loop-extras-parser.js +2 -2
  42. package/dist/loop-extras-parser.js.map +1 -1
  43. package/dist/loop-store.d.ts +20 -58
  44. package/dist/loop-store.d.ts.map +1 -1
  45. package/dist/loop-store.js +232 -311
  46. package/dist/loop-store.js.map +1 -1
  47. package/dist/mcp/server.d.ts +3 -3
  48. package/dist/mcp/server.d.ts.map +1 -1
  49. package/dist/mcp/server.js +123 -19
  50. package/dist/mcp/server.js.map +1 -1
  51. package/dist/mcp/session-projection.d.ts +5 -0
  52. package/dist/mcp/session-projection.d.ts.map +1 -0
  53. package/dist/mcp/session-projection.js +18 -0
  54. package/dist/mcp/session-projection.js.map +1 -0
  55. package/dist/mcp/session-queue.d.ts +3 -0
  56. package/dist/mcp/session-queue.d.ts.map +1 -0
  57. package/dist/mcp/session-queue.js +18 -0
  58. package/dist/mcp/session-queue.js.map +1 -0
  59. package/dist/mcp/session-types.d.ts +72 -0
  60. package/dist/mcp/session-types.d.ts.map +1 -0
  61. package/dist/mcp/session-types.js +2 -0
  62. package/dist/mcp/session-types.js.map +1 -0
  63. package/dist/mcp/session.d.ts +65 -84
  64. package/dist/mcp/session.d.ts.map +1 -1
  65. package/dist/mcp/session.js +667 -224
  66. package/dist/mcp/session.js.map +1 -1
  67. package/dist/mcp/tools.d.ts +26 -1
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +401 -254
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/policy-metrics.d.ts +24 -0
  72. package/dist/policy-metrics.d.ts.map +1 -1
  73. package/dist/policy-metrics.js +174 -0
  74. package/dist/policy-metrics.js.map +1 -1
  75. package/dist/policy.d.ts +74 -12
  76. package/dist/policy.d.ts.map +1 -1
  77. package/dist/policy.js +124 -19
  78. package/dist/policy.js.map +1 -1
  79. package/dist/prompt-assembler.d.ts +8 -4
  80. package/dist/prompt-assembler.d.ts.map +1 -1
  81. package/dist/prompt-assembler.js +533 -86
  82. package/dist/prompt-assembler.js.map +1 -1
  83. package/dist/prompt-policy.d.ts +8 -1
  84. package/dist/prompt-policy.d.ts.map +1 -1
  85. package/dist/prompt-policy.js +26 -8
  86. package/dist/prompt-policy.js.map +1 -1
  87. package/dist/protocol.d.ts +259 -173
  88. package/dist/protocol.d.ts.map +1 -1
  89. package/dist/protocol.js +17 -96
  90. package/dist/protocol.js.map +1 -1
  91. package/dist/replay.d.ts +11 -3
  92. package/dist/replay.d.ts.map +1 -1
  93. package/dist/replay.js +51 -14
  94. package/dist/replay.js.map +1 -1
  95. package/dist/round-commit-store.d.ts +12 -0
  96. package/dist/round-commit-store.d.ts.map +1 -0
  97. package/dist/round-commit-store.js +13 -0
  98. package/dist/round-commit-store.js.map +1 -0
  99. package/dist/round-coordinator.d.ts +53 -22
  100. package/dist/round-coordinator.d.ts.map +1 -1
  101. package/dist/round-coordinator.js +140 -44
  102. package/dist/round-coordinator.js.map +1 -1
  103. package/dist/round-driver.d.ts +18 -10
  104. package/dist/round-driver.d.ts.map +1 -1
  105. package/dist/round-driver.js +11 -13
  106. package/dist/round-driver.js.map +1 -1
  107. package/dist/round-gate.d.ts +31 -0
  108. package/dist/round-gate.d.ts.map +1 -0
  109. package/dist/round-gate.js +259 -0
  110. package/dist/round-gate.js.map +1 -0
  111. package/dist/round-recovery.d.ts +17 -0
  112. package/dist/round-recovery.d.ts.map +1 -0
  113. package/dist/round-recovery.js +117 -0
  114. package/dist/round-recovery.js.map +1 -0
  115. package/dist/round-report.d.ts +16 -0
  116. package/dist/round-report.d.ts.map +1 -0
  117. package/dist/round-report.js +401 -0
  118. package/dist/round-report.js.map +1 -0
  119. package/dist/round-transaction.d.ts +23 -12
  120. package/dist/round-transaction.d.ts.map +1 -1
  121. package/dist/round-transaction.js +104 -91
  122. package/dist/round-transaction.js.map +1 -1
  123. package/dist/runtime-services.d.ts +59 -0
  124. package/dist/runtime-services.d.ts.map +1 -0
  125. package/dist/{engine.js → runtime-services.js} +157 -275
  126. package/dist/runtime-services.js.map +1 -0
  127. package/dist/storage.d.ts +3 -9
  128. package/dist/storage.d.ts.map +1 -1
  129. package/dist/storage.js +6 -17
  130. package/dist/storage.js.map +1 -1
  131. package/dist/token-utils.d.ts +12 -8
  132. package/dist/token-utils.d.ts.map +1 -1
  133. package/dist/token-utils.js +56 -10
  134. package/dist/token-utils.js.map +1 -1
  135. package/dist/vault-format.d.ts +4 -0
  136. package/dist/vault-format.d.ts.map +1 -0
  137. package/dist/vault-format.js +4 -0
  138. package/dist/vault-format.js.map +1 -0
  139. package/dist/vault-types.d.ts +24 -0
  140. package/dist/vault-types.d.ts.map +1 -0
  141. package/dist/vault-types.js +2 -0
  142. package/dist/vault-types.js.map +1 -0
  143. package/loop_policy.json +10 -12
  144. package/loopforge-policy.json +340 -0
  145. package/package.json +13 -7
  146. package/skills/perception/SKILL.md +200 -90
  147. package/dist/backends/interface.d.ts +0 -39
  148. package/dist/backends/interface.d.ts.map +0 -1
  149. package/dist/backends/interface.js +0 -6
  150. package/dist/backends/interface.js.map +0 -1
  151. package/dist/enforcement-gate.d.ts +0 -50
  152. package/dist/enforcement-gate.d.ts.map +0 -1
  153. package/dist/enforcement-gate.js +0 -501
  154. package/dist/enforcement-gate.js.map +0 -1
  155. package/dist/engine.d.ts +0 -59
  156. package/dist/engine.d.ts.map +0 -1
  157. package/dist/engine.js.map +0 -1
  158. package/dist/interop.d.ts +0 -35
  159. package/dist/interop.d.ts.map +0 -1
  160. package/dist/interop.js +0 -34
  161. package/dist/interop.js.map +0 -1
  162. package/dist/run.d.ts +0 -51
  163. package/dist/run.d.ts.map +0 -1
  164. package/dist/run.js +0 -200
  165. package/dist/run.js.map +0 -1
  166. package/dist/self-eval.d.ts +0 -23
  167. package/dist/self-eval.d.ts.map +0 -1
  168. package/dist/self-eval.js +0 -151
  169. package/dist/self-eval.js.map +0 -1
  170. package/dist/verification-gate.d.ts +0 -52
  171. package/dist/verification-gate.d.ts.map +0 -1
  172. package/dist/verification-gate.js +0 -527
  173. package/dist/verification-gate.js.map +0 -1
@@ -0,0 +1,340 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://loopforge.dev/loopforge-policy.json",
4
+ "title": "LoopForge Policy",
5
+ "description": "Stable configuration contract for loop_policy.json.",
6
+ "type": "object",
7
+ "properties": {
8
+ "version": {
9
+ "type": "string"
10
+ },
11
+ "constraints": {
12
+ "type": "object",
13
+ "properties": {},
14
+ "required": [],
15
+ "additionalProperties": false
16
+ },
17
+ "summary": {
18
+ "type": "object",
19
+ "properties": {
20
+ "window": {
21
+ "type": "number"
22
+ },
23
+ "health_check_interval": {
24
+ "type": "number"
25
+ },
26
+ "milestone_interval": {
27
+ "type": "number"
28
+ },
29
+ "max_milestones": {
30
+ "type": "number"
31
+ },
32
+ "enable_loop_synthesis": {
33
+ "type": "boolean"
34
+ }
35
+ },
36
+ "required": [
37
+ "window",
38
+ "health_check_interval",
39
+ "milestone_interval",
40
+ "max_milestones",
41
+ "enable_loop_synthesis"
42
+ ],
43
+ "additionalProperties": false
44
+ },
45
+ "engine": {
46
+ "type": "object",
47
+ "properties": {
48
+ "max_circuit_breaker": {
49
+ "type": "number"
50
+ },
51
+ "max_rounds": {
52
+ "type": "number"
53
+ },
54
+ "enforcement_escalation_enabled": {
55
+ "type": "boolean"
56
+ },
57
+ "backtrack_enabled": {
58
+ "type": "boolean"
59
+ },
60
+ "backtrack_max_depth": {
61
+ "type": "number"
62
+ },
63
+ "backtrack_preserve_discoveries": {
64
+ "type": "boolean"
65
+ },
66
+ "drift_clarification_max_streak": {
67
+ "type": "number"
68
+ },
69
+ "max_rejections": {
70
+ "type": "number"
71
+ }
72
+ },
73
+ "required": [
74
+ "max_circuit_breaker",
75
+ "max_rounds",
76
+ "enforcement_escalation_enabled",
77
+ "backtrack_enabled",
78
+ "backtrack_max_depth",
79
+ "backtrack_preserve_discoveries",
80
+ "drift_clarification_max_streak",
81
+ "max_rejections"
82
+ ],
83
+ "additionalProperties": false
84
+ },
85
+ "prompt": {
86
+ "type": "object",
87
+ "properties": {
88
+ "injection_mode": {
89
+ "type": "string"
90
+ },
91
+ "full_refresh_interval": {
92
+ "type": "number"
93
+ },
94
+ "adaptive_refresh": {
95
+ "type": "boolean"
96
+ },
97
+ "max_l1_streak": {
98
+ "type": "number"
99
+ },
100
+ "stale_round_threshold": {
101
+ "type": "number"
102
+ },
103
+ "min_meaningful_sections": {
104
+ "type": "number"
105
+ },
106
+ "l0_max_chars": {
107
+ "type": "number"
108
+ },
109
+ "l1_max_chars": {
110
+ "type": "number"
111
+ },
112
+ "l2_max_chars": {
113
+ "type": "number"
114
+ },
115
+ "l2_adaptive_enabled": {
116
+ "type": "boolean"
117
+ },
118
+ "l2_adaptive_round_factor": {
119
+ "type": "number"
120
+ },
121
+ "l2_adaptive_milestone_factor": {
122
+ "type": "number"
123
+ },
124
+ "l2_adaptive_max_chars": {
125
+ "type": "number"
126
+ },
127
+ "l2_adaptive_subgoal_factor": {
128
+ "type": "number"
129
+ },
130
+ "l2_pointer_enabled": {
131
+ "type": "boolean"
132
+ },
133
+ "max_emphasize_l2": {
134
+ "type": "number"
135
+ },
136
+ "max_emphasize_l1": {
137
+ "type": "number"
138
+ },
139
+ "max_expand_l1": {
140
+ "type": "number"
141
+ },
142
+ "max_confusion_points": {
143
+ "type": "number"
144
+ },
145
+ "base_prompt_version": {
146
+ "type": "string"
147
+ }
148
+ },
149
+ "required": [
150
+ "injection_mode",
151
+ "full_refresh_interval",
152
+ "adaptive_refresh",
153
+ "max_l1_streak",
154
+ "stale_round_threshold",
155
+ "min_meaningful_sections",
156
+ "l0_max_chars",
157
+ "l1_max_chars",
158
+ "l2_max_chars",
159
+ "l2_adaptive_enabled",
160
+ "l2_adaptive_round_factor",
161
+ "l2_adaptive_milestone_factor",
162
+ "l2_adaptive_max_chars",
163
+ "l2_adaptive_subgoal_factor",
164
+ "l2_pointer_enabled",
165
+ "max_emphasize_l2",
166
+ "max_emphasize_l1",
167
+ "max_expand_l1",
168
+ "max_confusion_points",
169
+ "base_prompt_version"
170
+ ],
171
+ "additionalProperties": false
172
+ },
173
+ "backend": {
174
+ "type": "object",
175
+ "properties": {
176
+ "root_dir": {
177
+ "type": "string"
178
+ }
179
+ },
180
+ "required": [
181
+ "root_dir"
182
+ ],
183
+ "additionalProperties": false
184
+ },
185
+ "evolution": {
186
+ "type": "object",
187
+ "properties": {
188
+ "max_discovered_constraints_per_round": {
189
+ "type": "number"
190
+ },
191
+ "max_active_constraints": {
192
+ "type": "number"
193
+ },
194
+ "max_objective_versions": {
195
+ "type": "number"
196
+ },
197
+ "failed_pattern_match_threshold": {
198
+ "type": "number"
199
+ },
200
+ "intent_drift_threshold": {
201
+ "type": "number"
202
+ },
203
+ "criteria_dedup_threshold": {
204
+ "type": "number"
205
+ },
206
+ "subgoal_dedup_threshold": {
207
+ "type": "number"
208
+ },
209
+ "subgoal_match_threshold": {
210
+ "type": "number"
211
+ },
212
+ "subgoal_auto_complete_threshold": {
213
+ "type": "number"
214
+ },
215
+ "constraint_match_threshold": {
216
+ "type": "number"
217
+ },
218
+ "subgoal_drift_alignment_threshold": {
219
+ "type": "number"
220
+ },
221
+ "max_subgoals_in_prompt": {
222
+ "type": "number"
223
+ },
224
+ "max_done_subgoals_in_prompt": {
225
+ "type": "number"
226
+ },
227
+ "constraint_inactive_rounds": {
228
+ "type": "number"
229
+ },
230
+ "constraint_id_enabled": {
231
+ "type": "boolean"
232
+ }
233
+ },
234
+ "required": [
235
+ "max_discovered_constraints_per_round",
236
+ "max_active_constraints",
237
+ "max_objective_versions",
238
+ "failed_pattern_match_threshold",
239
+ "intent_drift_threshold",
240
+ "criteria_dedup_threshold",
241
+ "subgoal_dedup_threshold",
242
+ "subgoal_match_threshold",
243
+ "subgoal_auto_complete_threshold",
244
+ "constraint_match_threshold",
245
+ "subgoal_drift_alignment_threshold",
246
+ "max_subgoals_in_prompt",
247
+ "max_done_subgoals_in_prompt",
248
+ "constraint_inactive_rounds",
249
+ "constraint_id_enabled"
250
+ ],
251
+ "additionalProperties": false
252
+ },
253
+ "checkpoint": {
254
+ "type": "object",
255
+ "properties": {
256
+ "max_carried_constraints": {
257
+ "type": "number"
258
+ },
259
+ "outcome_max_chars": {
260
+ "type": "number"
261
+ }
262
+ },
263
+ "required": [
264
+ "max_carried_constraints",
265
+ "outcome_max_chars"
266
+ ],
267
+ "additionalProperties": false
268
+ },
269
+ "state_file": {
270
+ "type": "object",
271
+ "properties": {
272
+ "enabled": {
273
+ "type": "boolean"
274
+ },
275
+ "directory": {
276
+ "type": "string"
277
+ }
278
+ },
279
+ "required": [
280
+ "enabled",
281
+ "directory"
282
+ ],
283
+ "additionalProperties": false
284
+ },
285
+ "evidence": {
286
+ "type": "object",
287
+ "properties": {
288
+ "providers": {
289
+ "type": "array",
290
+ "items": {
291
+ "type": "string"
292
+ }
293
+ },
294
+ "timeout_ms": {
295
+ "type": "number"
296
+ },
297
+ "commands": {
298
+ "type": "array",
299
+ "items": {}
300
+ }
301
+ },
302
+ "required": [
303
+ "providers",
304
+ "timeout_ms",
305
+ "commands"
306
+ ],
307
+ "additionalProperties": false
308
+ },
309
+ "mcp": {
310
+ "type": "object",
311
+ "properties": {
312
+ "session_lease_ms": {
313
+ "type": "number"
314
+ },
315
+ "session_lease_renew_interval_ms": {
316
+ "type": "number"
317
+ }
318
+ },
319
+ "required": [
320
+ "session_lease_ms",
321
+ "session_lease_renew_interval_ms"
322
+ ],
323
+ "additionalProperties": false
324
+ }
325
+ },
326
+ "required": [
327
+ "version",
328
+ "constraints",
329
+ "summary",
330
+ "engine",
331
+ "prompt",
332
+ "backend",
333
+ "evolution",
334
+ "checkpoint",
335
+ "state_file",
336
+ "evidence",
337
+ "mcp"
338
+ ],
339
+ "additionalProperties": false
340
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "loopforge",
3
- "version": "2.7.0",
4
- "description": "Durable cognitive infrastructure for multi-session AI coding tasks — hierarchical summaries, structured sub-goal tracking, time-aware constraint decay, and adaptive prompt budgets for 100+ round agent loops.",
3
+ "version": "3.0.0",
4
+ "description": "External cognitive infrastructure for AI coding agents — breaks the summary cascade, provides independent verification, and enables model-directed prompt prioritization for 100+ round agent loops.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -31,15 +31,21 @@
31
31
  "!dist/tests/",
32
32
  "skills",
33
33
  "loop_policy.json",
34
+ "loopforge-policy.json",
34
35
  "LICENSE"
35
36
  ],
36
37
  "scripts": {
37
- "build": "tsc && node dist/generate-schema.js",
38
- "generate-schema": "tsc && node dist/generate-schema.js",
39
- "test": "tsc && node dist/generate-schema.js && node --test --test-concurrency=1 dist/tests/*.test.js",
40
- "test:watch": "tsc && node --test --watch dist/tests/*.test.js",
38
+ "build": "npm run clean:dist && tsc && node dist/generate-schema.js",
39
+ "generate-schema": "npm run clean:dist && tsc && node dist/generate-schema.js",
40
+ "test": "npm run clean:dist && tsc && node dist/generate-schema.js && node --test --test-concurrency=1 dist/tests/*.test.js",
41
+ "test:watch": "npm run clean:dist && tsc && node --test --watch dist/tests/*.test.js",
42
+ "test:long-horizon": "npm run clean:dist && tsc && node --test --test-concurrency=1 dist/tests/long-horizon-reconstruction.test.js",
43
+ "clean:dist": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
41
44
  "check": "tsc --noEmit",
42
- "prepack": "npm run build"
45
+ "check:hygiene": "node scripts/check-repository-hygiene.mjs",
46
+ "verify:artifacts": "node scripts/verify-artifacts.mjs",
47
+ "release:check": "npm run check && npm run check:hygiene && npm test && npm run verify:artifacts && npm --cache ../.npm-cache pack --dry-run --json --ignore-scripts",
48
+ "prepack": "npm run verify:artifacts && npm run build"
43
49
  },
44
50
  "repository": {
45
51
  "type": "git",