loopforge 3.0.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +128 -145
  2. package/dist/audit.d.ts +50 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +158 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/canonical-state.d.ts +28 -20
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +82 -173
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +25 -16
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +25 -33
  14. package/dist/cognitive-governance.d.ts.map +1 -1
  15. package/dist/cognitive-governance.js +38 -138
  16. package/dist/cognitive-governance.js.map +1 -1
  17. package/dist/enforcement-gate.d.ts +76 -0
  18. package/dist/enforcement-gate.d.ts.map +1 -0
  19. package/dist/enforcement-gate.js +1071 -0
  20. package/dist/enforcement-gate.js.map +1 -0
  21. package/dist/engine.d.ts +99 -0
  22. package/dist/engine.d.ts.map +1 -0
  23. package/dist/engine.js +839 -0
  24. package/dist/engine.js.map +1 -0
  25. package/dist/evidence-claims.d.ts +50 -0
  26. package/dist/evidence-claims.d.ts.map +1 -0
  27. package/dist/evidence-claims.js +134 -0
  28. package/dist/evidence-claims.js.map +1 -0
  29. package/dist/evidence-provider.d.ts +21 -23
  30. package/dist/evidence-provider.d.ts.map +1 -1
  31. package/dist/evidence-provider.js +74 -34
  32. package/dist/evidence-provider.js.map +1 -1
  33. package/dist/generate-schema.js +1 -84
  34. package/dist/generate-schema.js.map +1 -1
  35. package/dist/index.d.ts +19 -22
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +16 -15
  38. package/dist/index.js.map +1 -1
  39. package/dist/loop-compiler.d.ts +41 -3
  40. package/dist/loop-compiler.d.ts.map +1 -1
  41. package/dist/loop-compiler.js +632 -273
  42. package/dist/loop-compiler.js.map +1 -1
  43. package/dist/loop-extras-parser.d.ts +2 -2
  44. package/dist/loop-extras-parser.d.ts.map +1 -1
  45. package/dist/loop-extras-parser.js +2 -2
  46. package/dist/loop-extras-parser.js.map +1 -1
  47. package/dist/loop-projection.d.ts +26 -0
  48. package/dist/loop-projection.d.ts.map +1 -0
  49. package/dist/loop-projection.js +142 -0
  50. package/dist/loop-projection.js.map +1 -0
  51. package/dist/loop-store.d.ts +112 -24
  52. package/dist/loop-store.d.ts.map +1 -1
  53. package/dist/loop-store.js +365 -218
  54. package/dist/loop-store.js.map +1 -1
  55. package/dist/mcp/round-lifecycle.d.ts +216 -0
  56. package/dist/mcp/round-lifecycle.d.ts.map +1 -0
  57. package/dist/mcp/round-lifecycle.js +926 -0
  58. package/dist/mcp/round-lifecycle.js.map +1 -0
  59. package/dist/mcp/server.d.ts +2 -1
  60. package/dist/mcp/server.d.ts.map +1 -1
  61. package/dist/mcp/server.js +28 -42
  62. package/dist/mcp/server.js.map +1 -1
  63. package/dist/mcp/session.d.ts +53 -101
  64. package/dist/mcp/session.d.ts.map +1 -1
  65. package/dist/mcp/session.js +306 -1105
  66. package/dist/mcp/session.js.map +1 -1
  67. package/dist/mcp/tools.d.ts +13 -16
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +479 -413
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/policy-metrics.d.ts +12 -17
  72. package/dist/policy-metrics.d.ts.map +1 -1
  73. package/dist/policy-metrics.js +95 -161
  74. package/dist/policy-metrics.js.map +1 -1
  75. package/dist/policy.d.ts +44 -35
  76. package/dist/policy.d.ts.map +1 -1
  77. package/dist/policy.js +31 -115
  78. package/dist/policy.js.map +1 -1
  79. package/dist/prompt-assembler.d.ts +37 -6
  80. package/dist/prompt-assembler.d.ts.map +1 -1
  81. package/dist/prompt-assembler.js +389 -160
  82. package/dist/prompt-assembler.js.map +1 -1
  83. package/dist/prompt-policy.d.ts +1 -8
  84. package/dist/prompt-policy.d.ts.map +1 -1
  85. package/dist/prompt-policy.js +8 -26
  86. package/dist/prompt-policy.js.map +1 -1
  87. package/dist/protocol.d.ts +357 -229
  88. package/dist/protocol.d.ts.map +1 -1
  89. package/dist/protocol.js +139 -15
  90. package/dist/protocol.js.map +1 -1
  91. package/dist/replay.d.ts +5 -13
  92. package/dist/replay.d.ts.map +1 -1
  93. package/dist/replay.js +19 -55
  94. package/dist/replay.js.map +1 -1
  95. package/dist/round-coordinator.d.ts +20 -24
  96. package/dist/round-coordinator.d.ts.map +1 -1
  97. package/dist/round-coordinator.js +99 -92
  98. package/dist/round-coordinator.js.map +1 -1
  99. package/dist/round-driver.d.ts +14 -13
  100. package/dist/round-driver.d.ts.map +1 -1
  101. package/dist/round-driver.js +26 -14
  102. package/dist/round-driver.js.map +1 -1
  103. package/dist/round-transaction.d.ts +15 -18
  104. package/dist/round-transaction.d.ts.map +1 -1
  105. package/dist/round-transaction.js +38 -47
  106. package/dist/round-transaction.js.map +1 -1
  107. package/dist/self-eval.d.ts +53 -0
  108. package/dist/self-eval.d.ts.map +1 -0
  109. package/dist/self-eval.js +284 -0
  110. package/dist/self-eval.js.map +1 -0
  111. package/dist/storage.d.ts +9 -4
  112. package/dist/storage.d.ts.map +1 -1
  113. package/dist/storage.js +18 -6
  114. package/dist/storage.js.map +1 -1
  115. package/dist/token-utils.d.ts +15 -3
  116. package/dist/token-utils.d.ts.map +1 -1
  117. package/dist/token-utils.js +24 -5
  118. package/dist/token-utils.js.map +1 -1
  119. package/dist/verification-gate.d.ts +108 -0
  120. package/dist/verification-gate.d.ts.map +1 -0
  121. package/dist/verification-gate.js +971 -0
  122. package/dist/verification-gate.js.map +1 -0
  123. package/loop_policy.json +44 -15
  124. package/package.json +5 -10
  125. package/skills/perception/SKILL.md +182 -199
  126. package/dist/canonical-event-writer.d.ts +0 -20
  127. package/dist/canonical-event-writer.d.ts.map +0 -1
  128. package/dist/canonical-event-writer.js +0 -131
  129. package/dist/canonical-event-writer.js.map +0 -1
  130. package/dist/compiler-subgoals.d.ts +0 -7
  131. package/dist/compiler-subgoals.d.ts.map +0 -1
  132. package/dist/compiler-subgoals.js +0 -93
  133. package/dist/compiler-subgoals.js.map +0 -1
  134. package/dist/derive-id.d.ts +0 -12
  135. package/dist/derive-id.d.ts.map +0 -1
  136. package/dist/derive-id.js +0 -31
  137. package/dist/derive-id.js.map +0 -1
  138. package/dist/mcp/session-projection.d.ts +0 -5
  139. package/dist/mcp/session-projection.d.ts.map +0 -1
  140. package/dist/mcp/session-projection.js +0 -18
  141. package/dist/mcp/session-projection.js.map +0 -1
  142. package/dist/mcp/session-queue.d.ts +0 -3
  143. package/dist/mcp/session-queue.d.ts.map +0 -1
  144. package/dist/mcp/session-queue.js +0 -18
  145. package/dist/mcp/session-queue.js.map +0 -1
  146. package/dist/mcp/session-types.d.ts +0 -72
  147. package/dist/mcp/session-types.d.ts.map +0 -1
  148. package/dist/mcp/session-types.js +0 -2
  149. package/dist/mcp/session-types.js.map +0 -1
  150. package/dist/round-commit-store.d.ts +0 -12
  151. package/dist/round-commit-store.d.ts.map +0 -1
  152. package/dist/round-commit-store.js +0 -13
  153. package/dist/round-commit-store.js.map +0 -1
  154. package/dist/round-gate.d.ts +0 -31
  155. package/dist/round-gate.d.ts.map +0 -1
  156. package/dist/round-gate.js +0 -259
  157. package/dist/round-gate.js.map +0 -1
  158. package/dist/round-recovery.d.ts +0 -17
  159. package/dist/round-recovery.d.ts.map +0 -1
  160. package/dist/round-recovery.js +0 -117
  161. package/dist/round-recovery.js.map +0 -1
  162. package/dist/round-report.d.ts +0 -16
  163. package/dist/round-report.d.ts.map +0 -1
  164. package/dist/round-report.js +0 -401
  165. package/dist/round-report.js.map +0 -1
  166. package/dist/runtime-services.d.ts +0 -59
  167. package/dist/runtime-services.d.ts.map +0 -1
  168. package/dist/runtime-services.js +0 -460
  169. package/dist/runtime-services.js.map +0 -1
  170. package/dist/vault-format.d.ts +0 -4
  171. package/dist/vault-format.d.ts.map +0 -1
  172. package/dist/vault-format.js +0 -4
  173. package/dist/vault-format.js.map +0 -1
  174. package/dist/vault-types.d.ts +0 -24
  175. package/dist/vault-types.d.ts.map +0 -1
  176. package/dist/vault-types.js +0 -2
  177. package/dist/vault-types.js.map +0 -1
  178. package/loopforge-policy.json +0 -340
package/dist/policy.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Externalized LoopForge runtime policy. */
2
2
  export interface ConstraintsPolicy {
3
- retire_window?: number;
3
+ retire_window: number;
4
4
  }
5
5
  export interface SummaryPolicy {
6
6
  window: number;
@@ -12,14 +12,18 @@ export interface SummaryPolicy {
12
12
  /** v2.1: Maximum number of milestone summaries to accumulate.
13
13
  * Oldest milestones are evicted when the cap is exceeded. */
14
14
  max_milestones: number;
15
+ /** v3.0.1: L1 milestone sampling — when milestones exceed max_milestones,
16
+ * keep this many of the OLDEST milestones as history anchors. The same
17
+ * count of the NEWEST is always kept; the middle is sampled evenly. */
18
+ milestone_head_count: number;
19
+ /** v3.0.1: L1 milestone sampling — this many of the NEWEST milestones are
20
+ * always kept when the cap is exceeded. */
21
+ milestone_tail_count: number;
15
22
  /** v2.1: Enable the loop_synthesis paragraph in L2 prompts and state files. */
16
23
  enable_loop_synthesis: boolean;
17
24
  }
18
25
  export interface EnginePolicy {
19
- round_event_flush_interval?: number;
20
- /** Consecutive accepted-but-failed rounds that stop the loop via the
21
- * circuit breaker. The breaker only counts committed rounds; rejected
22
- * rounds are handled by max_rejections. Set to 0 to disable. Default: 3. */
26
+ feedback_flush_interval: number;
23
27
  max_circuit_breaker: number;
24
28
  max_rounds: number;
25
29
  /** v2.7: When true, enforcement rules that would terminate (R4 2nd strike,
@@ -48,20 +52,17 @@ export interface EnginePolicy {
48
52
  * disable the streak limit (pre-v2.12 behavior — any ≥ 20 char
49
53
  * clarification always waives). Default: 3. */
50
54
  drift_clarification_max_streak: number;
51
- /** v2.14: R6 — maximum consecutive enforcement rejections (counted
52
- * globally across all rejection checks) before the loop escalates to a
53
- * single "Seek Human Guidance" retry and then terminates. Set to 0 to
54
- * disable the rejection limit entirely. Default: 3. */
55
- max_rejections: number;
55
+ /** v2.13: When true, LoopForge automatically executes git stash + reset
56
+ * on backtrack to restore the workspace to the clean round's commit.
57
+ * DANGEROUS: mutates the working tree directly. Default: false.
58
+ * When false (default), the backtrack prompt instructs the agent to
59
+ * restore manually, and the verification gate enforces the check. */
60
+ backtrack_auto_restore: boolean;
56
61
  }
57
62
  /** Levels control state density only; reasoning strategy belongs to the Agent. */
58
63
  export interface PromptPolicy {
59
64
  injection_mode: "adaptive" | "full" | "pointer";
60
65
  full_refresh_interval: number;
61
- adaptive_refresh: boolean;
62
- max_l1_streak: number;
63
- stale_round_threshold: number;
64
- min_meaningful_sections: number;
65
66
  l0_max_chars: number;
66
67
  l1_max_chars: number;
67
68
  l2_max_chars: number;
@@ -82,6 +83,10 @@ export interface PromptPolicy {
82
83
  * rendered. Default: true. Set to false to restore pre-v2.8 L2
83
84
  * behavior. */
84
85
  l2_pointer_enabled: boolean;
86
+ /** v3.2: Collapse unchanged L1 content (vs the previous round's persisted
87
+ * presentation) into one-line state-file pointers. Default: true.
88
+ * Set to false to restore pre-v3.2 full L1 rendering. */
89
+ l1_collapse_enabled: boolean;
85
90
  /** v2.9: Max emphasize items when level is L2. Default: 5. */
86
91
  max_emphasize_l2: number;
87
92
  /** v2.9: Max emphasize items when level is L1. Default: 3. */
@@ -90,6 +95,9 @@ export interface PromptPolicy {
90
95
  max_expand_l1: number;
91
96
  /** v2.9: Max confusion points rendered. Default: 3. */
92
97
  max_confusion_points: number;
98
+ /** v2.14: Jaccard threshold for pointing a confusion point at its
99
+ * best-matching state section. Default: 0.15 (15%). */
100
+ confusion_section_threshold: number;
93
101
  base_prompt_version: string;
94
102
  }
95
103
  export interface BackendPolicy {
@@ -100,13 +108,14 @@ export interface EvolutionPolicy {
100
108
  max_discovered_constraints_per_round: number;
101
109
  max_active_constraints: number;
102
110
  max_objective_versions: number;
103
- progress_stall_threshold?: number;
104
- progress_stall_rounds?: number;
105
- progress_mismatch_threshold?: number;
106
- /** Similarity required before two failed attempts become one pattern. */
107
- failed_pattern_match_threshold: number;
111
+ progress_stall_threshold: number;
112
+ progress_stall_rounds: number;
113
+ progress_mismatch_threshold: number;
114
+ /** v2.14: Jaccard threshold for task continuity in checkLoopHealth —
115
+ * below this, the loop is considered drifting. Default: 0.2. */
116
+ task_continuity_threshold: number;
108
117
  /** v2.1: Jaccard token similarity threshold for intent-action drift
109
- * detection. When the previous round's agent intent and the current
118
+ * detection. When the previous round's next_action and the current
110
119
  * round's output_summary have similarity below this threshold, a
111
120
  * verification flag is raised. Default: 0.15 (15%). */
112
121
  intent_drift_threshold: number;
@@ -123,18 +132,18 @@ export interface EvolutionPolicy {
123
132
  * (completed/blocked/canceled) to existing sub-goals. Default: 0.5. */
124
133
  subgoal_match_threshold: number;
125
134
  /** v2.5: Jaccard threshold for auto-promoting a pending sub-goal to
126
- * in-progress when agent intent aligns. Default: 0.4. */
127
- subgoal_auto_in_progress_threshold?: number;
135
+ * in_progress when next_action aligns. Default: 0.4. */
136
+ subgoal_auto_in_progress_threshold: number;
128
137
  /** v2.5: Jaccard threshold for matching constraints during discovery
129
138
  * and violation tracking. Default: 0.5. */
130
139
  constraint_match_threshold: number;
131
- /** v2.5: Jaccard threshold for checkSubGoalDrift — agent intent must
140
+ /** v2.5: Jaccard threshold for checkSubGoalDrift — next_action must
132
141
  * exceed this to be considered "aligned" with a pending sub-goal.
133
142
  * Default: 0.3. */
134
143
  subgoal_drift_alignment_threshold: number;
135
144
  /** v2.2: Number of rounds a sub-goal can stay pending before
136
145
  * being flagged as stale in prompts. Default: 10. */
137
- subgoal_stale_rounds?: number;
146
+ subgoal_stale_rounds: number;
138
147
  /** v2.2: Maximum sub-goals to render in prompt. Default: 10. */
139
148
  max_subgoals_in_prompt: number;
140
149
  /** v2.2: Maximum completed sub-goals to render in prompt. Default: 5. */
@@ -151,15 +160,14 @@ export interface EvolutionPolicy {
151
160
  constraint_id_enabled: boolean;
152
161
  }
153
162
  export interface CheckpointPolicy {
154
- max_carried_constraints: number;
155
163
  outcome_max_chars: number;
156
164
  }
157
165
  /** Human-readable derived state view. JSON LoopStore documents remain truth. */
158
166
  export interface StateFilePolicy {
159
167
  enabled: boolean;
160
168
  directory: string;
161
- max_checkpoints?: number;
162
- max_summary_rounds?: number;
169
+ max_checkpoints: number;
170
+ max_summary_rounds: number;
163
171
  }
164
172
  export interface EvidencePolicy {
165
173
  providers: string[];
@@ -182,6 +190,11 @@ export interface McpPolicy {
182
190
  session_lease_ms: number;
183
191
  session_lease_renew_interval_ms: number;
184
192
  }
193
+ /** v2.12: User/Agent gate governance. The gate is a record layer — it never
194
+ * blocks the verify→enforce→stop decision flow. */
195
+ export interface GatePolicy {
196
+ enabled: boolean;
197
+ }
185
198
  export interface LoopPolicy {
186
199
  version: string;
187
200
  constraints: ConstraintsPolicy;
@@ -194,16 +207,9 @@ export interface LoopPolicy {
194
207
  state_file: StateFilePolicy;
195
208
  evidence: EvidencePolicy;
196
209
  mcp: McpPolicy;
197
- }
198
- export interface PolicyDiagnostic {
199
- severity: "warning" | "error";
200
- kind: "unknown" | "deprecated" | "removed" | "type" | "parse";
201
- path: string;
202
- message: string;
210
+ gate: GatePolicy;
203
211
  }
204
212
  export declare const DEFAULT_POLICY: LoopPolicy;
205
- export declare function diagnosePolicyDocument(value: unknown): PolicyDiagnostic[];
206
- export declare function getPolicyDiagnostics(): PolicyDiagnostic[];
207
213
  /** Write a full default `loop_policy.json` to the target directory.
208
214
  *
209
215
  * The written file contains every configurable key and its default value
@@ -219,6 +225,9 @@ export declare function writeDefaultPolicy(targetDir: string, force?: boolean):
219
225
  export declare function loadPolicy(path?: string): LoopPolicy;
220
226
  export declare function getPolicy(path?: string): LoopPolicy;
221
227
  export declare function resetPolicy(): void;
228
+ /** v3.2: Test-only injection — mirrors resetPolicy so tests can exercise a
229
+ * specific policy configuration (e.g. l1_collapse_enabled=false). */
230
+ export declare function setPolicyForTest(next: LoopPolicy): void;
222
231
  export declare function validateLoopId(loopId: string): void;
223
232
  export declare function resolveStateDirectory(workspaceRoot: string, configuredDirectory: string): string;
224
233
  export declare function writeStateFile(loopId: string, content: string | undefined): void;
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
package/dist/policy.js CHANGED
@@ -2,32 +2,14 @@
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
4
4
  import { isAbsolute, relative, resolve, sep } from "node:path";
5
- const REMOVED_POLICY_KEYS = new Set([
6
- "engine.backtrack_auto_restore",
7
- ]);
8
- const DEPRECATED_POLICY_KEYS = new Set([
9
- "constraints.retire_window",
10
- "engine.round_event_flush_interval",
11
- "evolution.progress_stall_threshold",
12
- "evolution.progress_stall_rounds",
13
- "evolution.progress_mismatch_threshold",
14
- "evolution.subgoal_auto_in_progress_threshold",
15
- "evolution.subgoal_stale_rounds",
16
- "state_file.max_checkpoints",
17
- "state_file.max_summary_rounds",
18
- ]);
19
5
  export const DEFAULT_POLICY = {
20
- version: "stable",
21
- constraints: {},
22
- summary: { window: 5, health_check_interval: 1, milestone_interval: 20, max_milestones: 10, enable_loop_synthesis: true },
23
- engine: { max_circuit_breaker: 3, max_rounds: 100, enforcement_escalation_enabled: true, backtrack_enabled: true, backtrack_max_depth: 3, backtrack_preserve_discoveries: true, drift_clarification_max_streak: 3, max_rejections: 3 },
6
+ version: "2",
7
+ constraints: { retire_window: 3 },
8
+ summary: { window: 5, health_check_interval: 1, milestone_interval: 20, max_milestones: 10, milestone_head_count: 3, milestone_tail_count: 3, enable_loop_synthesis: true },
9
+ engine: { feedback_flush_interval: 5, max_circuit_breaker: 3, max_rounds: 20, enforcement_escalation_enabled: true, backtrack_enabled: true, backtrack_max_depth: 3, backtrack_preserve_discoveries: true, drift_clarification_max_streak: 3, backtrack_auto_restore: false },
24
10
  prompt: {
25
11
  injection_mode: "adaptive",
26
12
  full_refresh_interval: 0,
27
- adaptive_refresh: true,
28
- max_l1_streak: 6,
29
- stale_round_threshold: 3,
30
- min_meaningful_sections: 4,
31
13
  l0_max_chars: 3000,
32
14
  l1_max_chars: 7000,
33
15
  l2_max_chars: 18000,
@@ -37,120 +19,53 @@ export const DEFAULT_POLICY = {
37
19
  l2_adaptive_max_chars: 40000,
38
20
  l2_adaptive_subgoal_factor: 100,
39
21
  l2_pointer_enabled: true,
22
+ l1_collapse_enabled: true,
40
23
  max_emphasize_l2: 5,
41
24
  max_emphasize_l1: 3,
42
25
  max_expand_l1: 1,
43
26
  max_confusion_points: 3,
44
- base_prompt_version: "stable",
27
+ confusion_section_threshold: 0.15,
28
+ base_prompt_version: "2.0.0",
45
29
  },
46
30
  backend: { root_dir: ".loopforge" },
47
31
  evolution: {
48
32
  max_discovered_constraints_per_round: 5,
49
33
  max_active_constraints: 15,
50
34
  max_objective_versions: 10,
51
- failed_pattern_match_threshold: 0.6,
35
+ progress_stall_threshold: 0.05,
36
+ progress_stall_rounds: 2,
37
+ progress_mismatch_threshold: 0.3,
38
+ task_continuity_threshold: 0.2,
52
39
  intent_drift_threshold: 0.15,
53
40
  criteria_dedup_threshold: 0.45,
54
41
  subgoal_dedup_threshold: 0.6,
55
42
  subgoal_match_threshold: 0.5,
43
+ subgoal_auto_in_progress_threshold: 0.4,
56
44
  subgoal_auto_complete_threshold: 0.4,
57
45
  constraint_match_threshold: 0.5,
58
46
  subgoal_drift_alignment_threshold: 0.3,
47
+ subgoal_stale_rounds: 10,
59
48
  max_subgoals_in_prompt: 10,
60
49
  max_done_subgoals_in_prompt: 5,
61
50
  constraint_inactive_rounds: 15,
62
51
  constraint_id_enabled: true,
63
52
  },
64
- checkpoint: { max_carried_constraints: 10, outcome_max_chars: 200 },
53
+ checkpoint: { outcome_max_chars: 200 },
65
54
  state_file: {
66
55
  enabled: true,
67
56
  directory: ".loopforge/state",
57
+ max_checkpoints: 5,
58
+ max_summary_rounds: 5,
68
59
  },
69
60
  evidence: { providers: ["git"], timeout_ms: 120_000, commands: [] },
70
61
  mcp: {
71
62
  session_lease_ms: 30_000,
72
63
  session_lease_renew_interval_ms: 10_000,
73
64
  },
65
+ gate: {
66
+ enabled: true,
67
+ },
74
68
  };
75
- let lastPolicyDiagnostics = [];
76
- function policyKind(value) {
77
- if (Array.isArray(value))
78
- return "array";
79
- if (value === null)
80
- return "null";
81
- return typeof value;
82
- }
83
- function collectPolicyDiagnostics(value, defaults, path, diagnostics) {
84
- if (value === null || value === undefined)
85
- return;
86
- if (typeof defaults !== "object" || defaults === null || Array.isArray(defaults)) {
87
- if (policyKind(value) !== policyKind(defaults)) {
88
- diagnostics.push({
89
- severity: "error",
90
- kind: "type",
91
- path,
92
- message: `Expected ${policyKind(defaults)}, received ${policyKind(value)}.`,
93
- });
94
- }
95
- return;
96
- }
97
- if (typeof value !== "object" || Array.isArray(value)) {
98
- diagnostics.push({
99
- severity: "error",
100
- kind: "type",
101
- path,
102
- message: `Expected object, received ${policyKind(value)}.`,
103
- });
104
- return;
105
- }
106
- const defaultRecord = defaults;
107
- const valueRecord = value;
108
- for (const key of Object.keys(valueRecord)) {
109
- const childPath = path ? `${path}.${key}` : key;
110
- if (REMOVED_POLICY_KEYS.has(childPath)) {
111
- diagnostics.push({
112
- severity: "error",
113
- kind: "removed",
114
- path: childPath,
115
- message: "This policy key is removed and has never performed automatic workspace changes.",
116
- });
117
- continue;
118
- }
119
- if (DEPRECATED_POLICY_KEYS.has(childPath)) {
120
- diagnostics.push({
121
- severity: "warning",
122
- kind: "deprecated",
123
- path: childPath,
124
- message: "This policy key is deprecated and has no effect in the stable runtime.",
125
- });
126
- }
127
- if (!(key in defaultRecord)) {
128
- const kind = REMOVED_POLICY_KEYS.has(childPath)
129
- ? "removed"
130
- : DEPRECATED_POLICY_KEYS.has(childPath) ? "deprecated" : "unknown";
131
- diagnostics.push({
132
- severity: kind === "removed" ? "error" : "warning",
133
- kind,
134
- path: childPath,
135
- message: kind === "removed"
136
- ? "This policy key is removed and has never performed automatic workspace changes."
137
- : kind === "deprecated"
138
- ? "This policy key is deprecated and has no effect in the stable runtime."
139
- : "Unknown policy key; it will be ignored.",
140
- });
141
- continue;
142
- }
143
- collectPolicyDiagnostics(valueRecord[key], defaultRecord[key], childPath, diagnostics);
144
- }
145
- }
146
- export function diagnosePolicyDocument(value) {
147
- const diagnostics = [];
148
- collectPolicyDiagnostics(value, DEFAULT_POLICY, "", diagnostics);
149
- return diagnostics;
150
- }
151
- export function getPolicyDiagnostics() {
152
- return lastPolicyDiagnostics.map((diagnostic) => ({ ...diagnostic }));
153
- }
154
69
  /** Write a full default `loop_policy.json` to the target directory.
155
70
  *
156
71
  * The written file contains every configurable key and its default value
@@ -177,32 +92,28 @@ function deepMerge(defaults, overrides) {
177
92
  typeof incoming === "object" && !Array.isArray(incoming)) {
178
93
  result[key] = deepMerge(current, incoming);
179
94
  }
180
- else if (key in result && policyKind(current) === policyKind(incoming)) {
95
+ else if (key in result) {
181
96
  result[key] = incoming;
182
97
  }
98
+ else {
99
+ // Warn on unknown keys — a typo like "max_round" instead of
100
+ // "max_rounds" would otherwise be silently ignored.
101
+ console.warn(`loopforge: ignoring unknown policy key "${key}". Check loop_policy.json for typos.`);
102
+ }
183
103
  }
184
104
  return result;
185
105
  }
186
106
  export function loadPolicy(path) {
187
- lastPolicyDiagnostics = [];
188
107
  const candidates = [path, "loop_policy.json"].filter(Boolean);
189
108
  for (const candidate of candidates) {
190
109
  try {
191
110
  const raw = JSON.parse(readFileSync(resolve(candidate), "utf8"));
192
111
  if (raw && typeof raw === "object" && !Array.isArray(raw)) {
193
- lastPolicyDiagnostics = diagnosePolicyDocument(raw);
194
112
  return deepMerge(DEFAULT_POLICY, raw);
195
113
  }
196
114
  }
197
115
  catch {
198
- if (existsSync(resolve(candidate))) {
199
- lastPolicyDiagnostics = [{
200
- severity: "error",
201
- kind: "parse",
202
- path: candidate,
203
- message: "Policy file is not valid JSON; defaults are active.",
204
- }];
205
- }
116
+ // Try the next candidate.
206
117
  }
207
118
  }
208
119
  return structuredClone(DEFAULT_POLICY);
@@ -219,6 +130,11 @@ export function getPolicy(path) {
219
130
  export function resetPolicy() {
220
131
  policy = null;
221
132
  }
133
+ /** v3.2: Test-only injection — mirrors resetPolicy so tests can exercise a
134
+ * specific policy configuration (e.g. l1_collapse_enabled=false). */
135
+ export function setPolicyForTest(next) {
136
+ policy = next;
137
+ }
222
138
  const LOOP_ID_RE = /^[a-zA-Z0-9][-a-zA-Z0-9_:.]{0,127}$/;
223
139
  export function validateLoopId(loopId) {
224
140
  if (typeof loopId !== "string" || !loopId) {
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAiO/D,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;IACjC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE;IAC3K,MAAM,EAAE,EAAE,uBAAuB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,8BAA8B,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,8BAA8B,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,EAAE,sBAAsB,EAAE,KAAK,EAAE;IAC7Q,MAAM,EAAE;QACN,cAAc,EAAE,UAAU;QAC1B,qBAAqB,EAAE,CAAC;QACxB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,IAAI;QACzB,wBAAwB,EAAE,GAAG;QAC7B,4BAA4B,EAAE,IAAI;QAClC,qBAAqB,EAAE,KAAK;QAC5B,0BAA0B,EAAE,GAAG;QAC/B,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,CAAC;QACvB,2BAA2B,EAAE,IAAI;QACjC,mBAAmB,EAAE,OAAO;KAC7B;IACD,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;IACnC,SAAS,EAAE;QACT,oCAAoC,EAAE,CAAC;QACvC,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,EAAE;QAC1B,wBAAwB,EAAE,IAAI;QAC9B,qBAAqB,EAAE,CAAC;QACxB,2BAA2B,EAAE,GAAG;QAChC,yBAAyB,EAAE,GAAG;QAC9B,sBAAsB,EAAE,IAAI;QAC5B,wBAAwB,EAAE,IAAI;QAC9B,uBAAuB,EAAE,GAAG;QAC5B,uBAAuB,EAAE,GAAG;QAC5B,kCAAkC,EAAE,GAAG;QACvC,+BAA+B,EAAE,GAAG;QACpC,0BAA0B,EAAE,GAAG;QAC/B,iCAAiC,EAAE,GAAG;QACtC,oBAAoB,EAAE,EAAE;QACxB,sBAAsB,EAAE,EAAE;QAC1B,2BAA2B,EAAE,CAAC;QAC9B,0BAA0B,EAAE,EAAE;QAC9B,qBAAqB,EAAE,IAAI;KAC5B;IACD,UAAU,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE;IACtC,UAAU,EAAE;QACV,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,kBAAkB;QAC7B,eAAe,EAAE,CAAC;QAClB,kBAAkB,EAAE,CAAC;KACtB;IACD,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnE,GAAG,EAAE;QACH,gBAAgB,EAAE,MAAM;QACxB,+BAA+B,EAAE,MAAM;KACxC;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;KACd;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,KAAK,GAAG,KAAK;IAEb,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IACD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAAI,QAAW,EAAE,SAAkC;IACnE,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAA6B,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,IACE,GAAG,IAAI,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;YACtD,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACtD,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACxD,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,OAAkC,EAClC,QAAmC,CACpC,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,4DAA4D;YAC5D,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,2CAA2C,GAAG,sCAAsC,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IACD,OAAO,MAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAC1E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACjE,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,OAAO,SAAS,CAAC,cAAc,EAAE,GAA8B,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,MAAM,GAAsB,IAAI,CAAC;AAErC,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,iDAAiD;IACjD,kEAAkE;IAClE,IAAI,IAAI;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,UAAU,EAAE,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED;sEACsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAEzD,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,aAAqB,EACrB,mBAA2B;IAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC7D,IACE,eAAe,KAAK,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAClE,UAAU,CAAC,eAAe,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,QAAQ,GAAG,aAAa,CAAC;IAC7B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,QAAQ;YAAE,MAAM;QAC/B,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnD,IACE,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5D,UAAU,CAAC,YAAY,CAAC,EACxB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAA2B;IACxE,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,UAAU,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO;IAC5B,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACzE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CACvB,iBAAiB,EACjB,IAAI,MAAM,UAAU,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CACtD,CAAC;IACF,IAAI,CAAC;QACH,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -4,11 +4,12 @@
4
4
  * external Agent. Mandatory task, hard-constraint, and verification sections
5
5
  * are never truncated; budgets are soft and overflow is recorded.
6
6
  */
7
- import type { CanonicalLoopState } from "./canonical-state.js";
7
+ import type { CanonicalLoopState, PresentedStateSnapshot } from "./canonical-state.js";
8
8
  import type { PromptArtifact, PromptRequests } from "./protocol.js";
9
+ import type { ConstraintMeta, MilestoneSummary, SubGoal } from "./protocol.js";
9
10
  import type { PromptLevel, PromptLevelReason } from "./prompt-policy.js";
10
- export declare const PROMPT_ARTIFACT_FORMAT: "loopforge.prompt";
11
- export declare const BASE_PROMPT_VERSION = "stable";
11
+ export declare const PROMPT_ARTIFACT_SCHEMA_VERSION: 1;
12
+ export declare const BASE_PROMPT_VERSION = "2.0.0";
12
13
  export type InjectionMode = "adaptive" | "full" | "pointer";
13
14
  export interface PromptBudgets {
14
15
  l0: number;
@@ -23,12 +24,42 @@ export interface PromptAssemblyInput {
23
24
  mode?: InjectionMode;
24
25
  budgets?: Partial<PromptBudgets>;
25
26
  attempt?: number;
26
- roundReportBlock?: string;
27
+ selfEvaluationBlock: string;
27
28
  fullStateMarkdown?: string;
28
- /** Previous Agent suggestion. Display-only; never part of canonical state. */
29
- agentIntent?: string;
30
29
  /** v2.9: Model's information needs for this prompt. L0: ignored. */
31
30
  promptRequests?: PromptRequests;
31
+ /** v3.2: Previous round's L1 presentation (persisted diff baseline).
32
+ * When present, L1 collapses unchanged content against it. */
33
+ presentedBaseline?: PresentedStateSnapshot | null;
32
34
  }
35
+ /** v3.2: The actionable instruction for a verification check. Exported for
36
+ * the coverage test (which imports the CHECK_* constants). */
37
+ export declare function verificationActionFor(check: string): string;
38
+ /** v3.2: Collapse only when at least this many items are unchanged — a tiny
39
+ * unchanged set renders in full (nothing worth saving). */
40
+ export declare const COLLAPSE_MIN_UNCHANGED = 3;
41
+ /** v3.2: Recent-rounds items kept in full when older ones collapse. */
42
+ export declare const KEEP_RECENT_ROUNDS = 3;
43
+ export interface ConstraintDiff {
44
+ /** Constraint texts to render in full (new or violated this round). */
45
+ changed: string[];
46
+ /** Same-ID items unchanged since the baseline. */
47
+ unchangedCount: number;
48
+ /** Baseline items absent now, excluding emphasized items (they were moved
49
+ * to Critical Context, not demoted). */
50
+ removedCount: number;
51
+ }
52
+ export declare function diffConstraints(baseline: PresentedStateSnapshot | null, activeTexts: string[], metadata: ConstraintMeta[], round: number, emphasized: Set<string>): ConstraintDiff;
53
+ export interface SubGoalDiff {
54
+ /** Sub-goals to render in full (new or status transition). */
55
+ changed: SubGoal[];
56
+ unchangedCount: number;
57
+ /** Baseline sub-goals no longer in the active set (done/canceled/blocked). */
58
+ removedCount: number;
59
+ }
60
+ export declare function diffSubGoals(baseline: PresentedStateSnapshot | null, activeSubs: SubGoal[]): SubGoalDiff;
61
+ /** v3.2: True when a milestone boundary was crossed since the baseline —
62
+ * the Recent Rounds section then renders in full (a phase ended). */
63
+ export declare function milestoneBoundaryChanged(baseline: PresentedStateSnapshot | null, milestones: MilestoneSummary[]): boolean;
33
64
  export declare function assemblePromptArtifact(input: PromptAssemblyInput): PromptArtifact;
34
65
  //# sourceMappingURL=prompt-assembler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAI5B,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAClE,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA4sBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CA2KjF"}
1
+ {"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAI5B,eAAO,MAAM,8BAA8B,EAAG,CAAU,CAAC;AACzD,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;mEAC+D;IAC/D,iBAAiB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACnD;AAqFD;+DAC+D;AAC/D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAmCD;4DAC4D;AAC5D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AASpC,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB;6CACyC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,cAAc,CAyBhB;AAED,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,UAAU,EAAE,OAAO,EAAE,GACpB,WAAW,CAgBb;AAED;sEACsE;AACtE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,UAAU,EAAE,gBAAgB,EAAE,GAC7B,OAAO,CAQT;AAkuBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAuNjF"}