loopforge 1.15.1 → 2.0.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 (193) hide show
  1. package/README.md +172 -95
  2. package/dist/backends/interface.d.ts +5 -10
  3. package/dist/backends/interface.d.ts.map +1 -1
  4. package/dist/backends/interface.js +3 -4
  5. package/dist/backends/interface.js.map +1 -1
  6. package/dist/canonical-state.d.ts +53 -0
  7. package/dist/canonical-state.d.ts.map +1 -0
  8. package/dist/canonical-state.js +161 -0
  9. package/dist/canonical-state.js.map +1 -0
  10. package/dist/cli.d.ts +4 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +227 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/enforcement-gate.d.ts.map +1 -1
  15. package/dist/enforcement-gate.js +28 -10
  16. package/dist/enforcement-gate.js.map +1 -1
  17. package/dist/engine.d.ts +9 -28
  18. package/dist/engine.d.ts.map +1 -1
  19. package/dist/engine.js +135 -361
  20. package/dist/engine.js.map +1 -1
  21. package/dist/evidence-provider.d.ts +146 -0
  22. package/dist/evidence-provider.d.ts.map +1 -0
  23. package/dist/evidence-provider.js +512 -0
  24. package/dist/evidence-provider.js.map +1 -0
  25. package/dist/index.d.ts +19 -13
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +15 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/init.d.ts +15 -0
  30. package/dist/init.d.ts.map +1 -0
  31. package/dist/init.js +49 -0
  32. package/dist/init.js.map +1 -0
  33. package/dist/interop.d.ts +35 -0
  34. package/dist/interop.d.ts.map +1 -0
  35. package/dist/interop.js +34 -0
  36. package/dist/interop.js.map +1 -0
  37. package/dist/loop-compiler.d.ts +14 -64
  38. package/dist/loop-compiler.d.ts.map +1 -1
  39. package/dist/loop-compiler.js +305 -2206
  40. package/dist/loop-compiler.js.map +1 -1
  41. package/dist/loop-extras-parser.d.ts +82 -0
  42. package/dist/loop-extras-parser.d.ts.map +1 -0
  43. package/dist/loop-extras-parser.js +217 -0
  44. package/dist/loop-extras-parser.js.map +1 -0
  45. package/dist/loop-store.d.ts +104 -0
  46. package/dist/loop-store.d.ts.map +1 -0
  47. package/dist/loop-store.js +421 -0
  48. package/dist/loop-store.js.map +1 -0
  49. package/dist/mcp/server.d.ts +9 -6
  50. package/dist/mcp/server.d.ts.map +1 -1
  51. package/dist/mcp/server.js +109 -73
  52. package/dist/mcp/server.js.map +1 -1
  53. package/dist/mcp/session.d.ts +102 -21
  54. package/dist/mcp/session.d.ts.map +1 -1
  55. package/dist/mcp/session.js +795 -400
  56. package/dist/mcp/session.js.map +1 -1
  57. package/dist/mcp/tools.d.ts +18 -268
  58. package/dist/mcp/tools.d.ts.map +1 -1
  59. package/dist/mcp/tools.js +226 -12
  60. package/dist/mcp/tools.js.map +1 -1
  61. package/dist/observability.d.ts +36 -16
  62. package/dist/observability.d.ts.map +1 -1
  63. package/dist/observability.js +82 -23
  64. package/dist/observability.js.map +1 -1
  65. package/dist/policy-metrics.d.ts +46 -0
  66. package/dist/policy-metrics.d.ts.map +1 -0
  67. package/dist/policy-metrics.js +146 -0
  68. package/dist/policy-metrics.js.map +1 -0
  69. package/dist/policy.d.ts +52 -147
  70. package/dist/policy.d.ts.map +1 -1
  71. package/dist/policy.js +118 -191
  72. package/dist/policy.js.map +1 -1
  73. package/dist/prompt-assembler.d.ts +30 -0
  74. package/dist/prompt-assembler.d.ts.map +1 -0
  75. package/dist/prompt-assembler.js +278 -0
  76. package/dist/prompt-assembler.js.map +1 -0
  77. package/dist/prompt-policy.d.ts +29 -0
  78. package/dist/prompt-policy.d.ts.map +1 -0
  79. package/dist/prompt-policy.js +51 -0
  80. package/dist/prompt-policy.js.map +1 -0
  81. package/dist/protocol.d.ts +75 -152
  82. package/dist/protocol.d.ts.map +1 -1
  83. package/dist/protocol.js +11 -53
  84. package/dist/protocol.js.map +1 -1
  85. package/dist/replay.d.ts.map +1 -1
  86. package/dist/replay.js +1 -27
  87. package/dist/replay.js.map +1 -1
  88. package/dist/round-coordinator.d.ts +90 -0
  89. package/dist/round-coordinator.d.ts.map +1 -0
  90. package/dist/round-coordinator.js +186 -0
  91. package/dist/round-coordinator.js.map +1 -0
  92. package/dist/round-driver.d.ts +53 -0
  93. package/dist/round-driver.d.ts.map +1 -0
  94. package/dist/round-driver.js +101 -0
  95. package/dist/round-driver.js.map +1 -0
  96. package/dist/round-transaction.d.ts +70 -0
  97. package/dist/round-transaction.d.ts.map +1 -0
  98. package/dist/round-transaction.js +290 -0
  99. package/dist/round-transaction.js.map +1 -0
  100. package/dist/self-eval.d.ts +26 -0
  101. package/dist/self-eval.d.ts.map +1 -0
  102. package/dist/self-eval.js +154 -0
  103. package/dist/self-eval.js.map +1 -0
  104. package/dist/storage.d.ts +39 -0
  105. package/dist/storage.d.ts.map +1 -0
  106. package/dist/storage.js +193 -0
  107. package/dist/storage.js.map +1 -0
  108. package/dist/verification-gate.d.ts +31 -7
  109. package/dist/verification-gate.d.ts.map +1 -1
  110. package/dist/verification-gate.js +250 -7
  111. package/dist/verification-gate.js.map +1 -1
  112. package/loop_policy.json +19 -53
  113. package/package.json +13 -10
  114. package/skills/perception/SKILL.md +80 -267
  115. package/dist/backends/fs.d.ts +0 -36
  116. package/dist/backends/fs.d.ts.map +0 -1
  117. package/dist/backends/fs.js +0 -362
  118. package/dist/backends/fs.js.map +0 -1
  119. package/dist/builder.d.ts +0 -19
  120. package/dist/builder.d.ts.map +0 -1
  121. package/dist/builder.js +0 -215
  122. package/dist/builder.js.map +0 -1
  123. package/dist/mcp-server.d.ts +0 -12
  124. package/dist/mcp-server.d.ts.map +0 -1
  125. package/dist/mcp-server.js +0 -14
  126. package/dist/mcp-server.js.map +0 -1
  127. package/dist/memory-bridge.d.ts +0 -47
  128. package/dist/memory-bridge.d.ts.map +0 -1
  129. package/dist/memory-bridge.js +0 -290
  130. package/dist/memory-bridge.js.map +0 -1
  131. package/dist/runtime.d.ts +0 -80
  132. package/dist/runtime.d.ts.map +0 -1
  133. package/dist/runtime.js +0 -699
  134. package/dist/runtime.js.map +0 -1
  135. package/dist/tests/_helpers.d.ts +0 -25
  136. package/dist/tests/_helpers.d.ts.map +0 -1
  137. package/dist/tests/_helpers.js +0 -47
  138. package/dist/tests/_helpers.js.map +0 -1
  139. package/dist/tests/builder.test.d.ts +0 -2
  140. package/dist/tests/builder.test.d.ts.map +0 -1
  141. package/dist/tests/builder.test.js +0 -112
  142. package/dist/tests/builder.test.js.map +0 -1
  143. package/dist/tests/enforcement-gate.test.d.ts +0 -2
  144. package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
  145. package/dist/tests/enforcement-gate.test.js +0 -328
  146. package/dist/tests/enforcement-gate.test.js.map +0 -1
  147. package/dist/tests/engine.test.d.ts +0 -2
  148. package/dist/tests/engine.test.d.ts.map +0 -1
  149. package/dist/tests/engine.test.js +0 -375
  150. package/dist/tests/engine.test.js.map +0 -1
  151. package/dist/tests/generate-schema.test.d.ts +0 -8
  152. package/dist/tests/generate-schema.test.d.ts.map +0 -1
  153. package/dist/tests/generate-schema.test.js +0 -199
  154. package/dist/tests/generate-schema.test.js.map +0 -1
  155. package/dist/tests/loop-compiler.test.d.ts +0 -2
  156. package/dist/tests/loop-compiler.test.d.ts.map +0 -1
  157. package/dist/tests/loop-compiler.test.js +0 -1059
  158. package/dist/tests/loop-compiler.test.js.map +0 -1
  159. package/dist/tests/mcp.test.d.ts +0 -7
  160. package/dist/tests/mcp.test.d.ts.map +0 -1
  161. package/dist/tests/mcp.test.js +0 -505
  162. package/dist/tests/mcp.test.js.map +0 -1
  163. package/dist/tests/memory-bridge.test.d.ts +0 -8
  164. package/dist/tests/memory-bridge.test.d.ts.map +0 -1
  165. package/dist/tests/memory-bridge.test.js +0 -383
  166. package/dist/tests/memory-bridge.test.js.map +0 -1
  167. package/dist/tests/policy.test.d.ts +0 -2
  168. package/dist/tests/policy.test.d.ts.map +0 -1
  169. package/dist/tests/policy.test.js +0 -49
  170. package/dist/tests/policy.test.js.map +0 -1
  171. package/dist/tests/protocol.test.d.ts +0 -2
  172. package/dist/tests/protocol.test.d.ts.map +0 -1
  173. package/dist/tests/protocol.test.js +0 -73
  174. package/dist/tests/protocol.test.js.map +0 -1
  175. package/dist/tests/replay.test.d.ts +0 -2
  176. package/dist/tests/replay.test.d.ts.map +0 -1
  177. package/dist/tests/replay.test.js +0 -222
  178. package/dist/tests/replay.test.js.map +0 -1
  179. package/dist/tests/runtime.test.d.ts +0 -7
  180. package/dist/tests/runtime.test.d.ts.map +0 -1
  181. package/dist/tests/runtime.test.js +0 -337
  182. package/dist/tests/runtime.test.js.map +0 -1
  183. package/dist/tests/verification-gate.test.d.ts +0 -2
  184. package/dist/tests/verification-gate.test.d.ts.map +0 -1
  185. package/dist/tests/verification-gate.test.js +0 -407
  186. package/dist/tests/verification-gate.test.js.map +0 -1
  187. package/skills/prompt-techniques/SKILL.md +0 -52
  188. package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
  189. package/skills/prompt-techniques/references/few-shot.md +0 -174
  190. package/skills/prompt-techniques/references/least-to-most.md +0 -182
  191. package/skills/prompt-techniques/references/step-back.md +0 -160
  192. package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
  193. package/skills/prompt-techniques/references/zero-shot.md +0 -97
@@ -0,0 +1,278 @@
1
+ /** Single-pass prompt renderer for canonical LoopForge state.
2
+ *
3
+ * L0/L1/L2 control state density only. Reasoning strategy belongs to the
4
+ * external Agent. Mandatory task, hard-constraint, and verification sections
5
+ * are never truncated; budgets are soft and overflow is recorded.
6
+ */
7
+ import { createHash } from "node:crypto";
8
+ import { hashCanonicalState } from "./canonical-state.js";
9
+ export const PROMPT_ARTIFACT_SCHEMA_VERSION = 1;
10
+ export const BASE_PROMPT_VERSION = "2.0.0";
11
+ export const DEFAULT_PROMPT_BUDGETS = {
12
+ l0: 3000,
13
+ l1: 7000,
14
+ l2: 18000,
15
+ };
16
+ function section(title, body) {
17
+ return body.trim() ? `### ${title}\n${body.trim()}\n\n` : "";
18
+ }
19
+ function bullets(values, prefix = "- ") {
20
+ return values.map((value) => `${prefix}${value}`).join("\n");
21
+ }
22
+ function verificationText(state) {
23
+ const lines = state.verificationFlags.map((flag) => {
24
+ const icon = flag.severity === "error"
25
+ ? "🚫"
26
+ : flag.severity === "warn" ? "⚠️" : "ℹ️";
27
+ return `- ${icon} [${flag.check}] ${flag.detail}`;
28
+ });
29
+ if (state.verificationFlags.some((flag) => flag.severity === "error")) {
30
+ lines.push("- Gate Verdict: CONTRADICTED — resolve every error before claiming success.");
31
+ }
32
+ return lines.join("\n");
33
+ }
34
+ function activeNonHardConstraints(state) {
35
+ const hard = new Set(state.hardConstraints);
36
+ return state.activeConstraints.filter((value) => !hard.has(value));
37
+ }
38
+ function commonMandatorySections(state) {
39
+ const sections = [
40
+ {
41
+ id: "objective",
42
+ text: section("Objective", state.objective),
43
+ mandatory: true,
44
+ },
45
+ {
46
+ id: "current_task",
47
+ text: section("Current Task", state.currentTask),
48
+ mandatory: true,
49
+ },
50
+ ];
51
+ if (state.hardConstraints.length > 0) {
52
+ sections.push({
53
+ id: "hard_constraints",
54
+ text: section("Active Hard Constraints", bullets(state.hardConstraints)),
55
+ mandatory: true,
56
+ });
57
+ }
58
+ if (state.verificationFlags.length > 0) {
59
+ sections.push({
60
+ id: "verification",
61
+ text: section("Verification Gate", verificationText(state)),
62
+ mandatory: true,
63
+ });
64
+ }
65
+ return sections;
66
+ }
67
+ function l0Sections(state) {
68
+ const retryRequirements = [
69
+ ...state.blockers,
70
+ ...state.verificationFlags.map((flag) => flag.detail),
71
+ ];
72
+ const sections = commonMandatorySections(state);
73
+ if (retryRequirements.length > 0) {
74
+ sections.push({
75
+ id: "retry_requirements",
76
+ text: section("Retry Requirements", bullets(retryRequirements)),
77
+ mandatory: true,
78
+ });
79
+ }
80
+ if (state.changesSinceLastRound.length > 0) {
81
+ sections.push({
82
+ id: "changes",
83
+ text: section("New Evidence / Changes", bullets(state.changesSinceLastRound)),
84
+ mandatory: false,
85
+ });
86
+ }
87
+ return sections;
88
+ }
89
+ function l1Sections(state) {
90
+ const sections = commonMandatorySections(state);
91
+ const active = activeNonHardConstraints(state);
92
+ if (state.changesSinceLastRound.length > 0) {
93
+ sections.push({
94
+ id: "changes",
95
+ text: section("Changes Since Last Round", bullets(state.changesSinceLastRound)),
96
+ mandatory: false,
97
+ });
98
+ }
99
+ if (active.length > 0) {
100
+ sections.push({
101
+ id: "active_constraints",
102
+ text: section("Active Constraints / Success Criteria", bullets(active)),
103
+ mandatory: false,
104
+ });
105
+ }
106
+ if (state.remainingCriteria.length > 0) {
107
+ sections.push({
108
+ id: "remaining",
109
+ text: section("Remaining", bullets(state.remainingCriteria)),
110
+ mandatory: false,
111
+ });
112
+ }
113
+ if (state.blockers.length > 0) {
114
+ sections.push({
115
+ id: "blockers",
116
+ text: section("Blockers", bullets(state.blockers)),
117
+ mandatory: false,
118
+ });
119
+ }
120
+ if (state.discoveries.length > 0) {
121
+ sections.push({
122
+ id: "discoveries",
123
+ text: section("New Discoveries", bullets(state.discoveries)),
124
+ mandatory: false,
125
+ });
126
+ }
127
+ if (state.nextAction) {
128
+ sections.push({
129
+ id: "next_action",
130
+ text: section("Next Action", state.nextAction),
131
+ mandatory: false,
132
+ });
133
+ }
134
+ return sections;
135
+ }
136
+ function l2Sections(state, fullStateMarkdown) {
137
+ const sections = commonMandatorySections(state);
138
+ const fullState = fullStateMarkdown?.trim();
139
+ if (fullState) {
140
+ sections.push({
141
+ id: "full_state",
142
+ text: section("Full Rehydrated State", fullState),
143
+ mandatory: false,
144
+ });
145
+ return sections;
146
+ }
147
+ const groups = [
148
+ ["success_criteria", "Success Criteria", state.successCriteria],
149
+ ["active_constraints", "Active Constraints", activeNonHardConstraints(state)],
150
+ ["changes", "Changes Since Last Round", state.changesSinceLastRound],
151
+ ["remaining", "Remaining", state.remainingCriteria],
152
+ ["blockers", "Blockers", state.blockers],
153
+ ["discoveries", "Discoveries", state.discoveries],
154
+ ["rolling_outcomes", "Cross-Round Outcomes", state.rollingOutcomes],
155
+ ["recurring_issues", "Recurring Issues", state.recurringIssues],
156
+ ["failed_patterns", "Failed Patterns", state.failedPatterns],
157
+ ];
158
+ for (const [id, title, values] of groups) {
159
+ if (values.length > 0) {
160
+ sections.push({ id, text: section(title, bullets(values)), mandatory: false });
161
+ }
162
+ }
163
+ if (state.nextAction) {
164
+ sections.push({
165
+ id: "next_action",
166
+ text: section("Next Action", state.nextAction),
167
+ mandatory: false,
168
+ });
169
+ }
170
+ if (state.externalContext) {
171
+ sections.push({
172
+ id: "external_context",
173
+ text: section("External Context", state.externalContext),
174
+ mandatory: false,
175
+ });
176
+ }
177
+ return sections;
178
+ }
179
+ function selectSections(input) {
180
+ if (input.mode === "full") {
181
+ return l2Sections(input.state, input.fullStateMarkdown);
182
+ }
183
+ if (input.level === "l0")
184
+ return l0Sections(input.state);
185
+ if (input.level === "l1")
186
+ return l1Sections(input.state);
187
+ return l2Sections(input.state, input.fullStateMarkdown);
188
+ }
189
+ function renderWithinBudget(sections, fixedText, budget) {
190
+ const mandatory = sections.filter((item) => item.mandatory);
191
+ const optional = sections.filter((item) => !item.mandatory);
192
+ let rendered = fixedText + mandatory.map((item) => item.text).join("");
193
+ const included = mandatory.filter((item) => item.text).map((item) => item.id);
194
+ for (const item of optional) {
195
+ if (!item.text)
196
+ continue;
197
+ if (rendered.length + item.text.length <= budget) {
198
+ rendered += item.text;
199
+ included.push(item.id);
200
+ }
201
+ }
202
+ return { rendered, included };
203
+ }
204
+ export function assemblePromptArtifact(input) {
205
+ const mode = input.mode ?? "adaptive";
206
+ const budgets = { ...DEFAULT_PROMPT_BUDGETS, ...input.budgets };
207
+ const budget = budgets[input.level];
208
+ const stateHash = hashCanonicalState(input.state);
209
+ const attempt = Math.max(1, input.attempt ?? 1);
210
+ const header = [
211
+ `## LoopForge Round ${input.state.round}`,
212
+ `State: ${stateHash.slice(0, 12)} | Level: ${input.level.toUpperCase()} | Attempt: ${attempt}`,
213
+ "",
214
+ ].join("\n");
215
+ const sections = selectSections(input);
216
+ const pointer = input.state.stateFilePath
217
+ ? section("Full State", input.state.stateFilePath)
218
+ : "";
219
+ const evaluation = input.selfEvaluationBlock.trim()
220
+ ? `${input.selfEvaluationBlock.trim()}\n`
221
+ : "";
222
+ const howToRespond = [
223
+ "## How to Complete This Round",
224
+ "",
225
+ "1. Execute the task described above. Do NOT generate another prompt or plan — act.",
226
+ "2. When finished, call the MCP tool **`loopforge_next`** with these parameters:",
227
+ " - `sessionId`: the session ID from `loopforge_start`.",
228
+ " - `evaluation`: a structured self-assessment object (see schema below).",
229
+ "",
230
+ "### Evaluation Rules",
231
+ "",
232
+ "- `success`: Set to **`true` ONLY** when ALL hard constraints are met AND",
233
+ " the task goal is fully achieved. If anything remains incomplete, set `false`.",
234
+ "- `should_continue`: Set to **`false` ONLY** when the ENTIRE loop task is done.",
235
+ " Partial progress or completed subtasks → `true`.",
236
+ "- `constraint_violations`: Be honest. List every constraint you actually violated.",
237
+ "- `execution_evidence.files_changed`: List files you modified — used for verification.",
238
+ "- `execution_evidence.test_results`: Report actual test runner output.",
239
+ "- `progress_estimate`: A number 0.0–1.0 reflecting overall task completion.",
240
+ "",
241
+ "### If the Prompt Says \"REJECTED\"",
242
+ "",
243
+ "- Re-execute the **same round**. Do NOT advance the round counter.",
244
+ "- Read the Required Fix section, address every issue, then submit again.",
245
+ "- Use `loopforge_next` with a corrected evaluation.",
246
+ "",
247
+ evaluation,
248
+ ].join("\n");
249
+ const footer = [pointer, howToRespond].join("");
250
+ const fixedText = header;
251
+ const selected = mode === "pointer"
252
+ ? renderWithinBudget(sections.filter((item) => item.mandatory), fixedText, budget)
253
+ : renderWithinBudget(sections, fixedText, budget - footer.length);
254
+ const renderedPrompt = selected.rendered + footer;
255
+ const includedSections = [
256
+ ...selected.included,
257
+ ...(pointer ? ["state_pointer"] : []),
258
+ ...(evaluation ? ["self_evaluation"] : []),
259
+ ];
260
+ const promptHash = createHash("sha256").update(renderedPrompt).digest("hex");
261
+ return {
262
+ schemaVersion: PROMPT_ARTIFACT_SCHEMA_VERSION,
263
+ roundId: `loop:${input.state.loopId}:round:${input.state.round}`,
264
+ attempt,
265
+ level: input.level,
266
+ levelReasons: [...input.reasons],
267
+ renderedPrompt,
268
+ promptHash,
269
+ stateHash,
270
+ basePromptVersion: BASE_PROMPT_VERSION,
271
+ includedSections,
272
+ budgetChars: budget,
273
+ charCount: renderedPrompt.length,
274
+ budgetExceeded: renderedPrompt.length > budget,
275
+ generatedAt: Date.now(),
276
+ };
277
+ }
278
+ //# sourceMappingURL=prompt-assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-assembler.js","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** Pure L0/L1/L2 prompt-view policy.
2
+ *
3
+ * Levels describe how much canonical state is rendered. They do not select a
4
+ * reasoning technique; the external Agent owns its reasoning strategy.
5
+ */
6
+ export type PromptLevel = "l0" | "l1" | "l2";
7
+ export type PromptLevelReason = "explicit_override" | "first_round" | "plan_boundary" | "checkpoint_boundary" | "goal_changed" | "missing_previous_state" | "verification_contradicted" | "retry_delta" | "rejection_rehydrate" | "recovery_boundary" | "state_drift" | "periodic_refresh" | "state_capsule";
8
+ export interface PromptLevelInput {
9
+ round: number;
10
+ attempt?: number;
11
+ forceLevel?: string;
12
+ hasPlanSource: boolean;
13
+ checkpointBoundary: boolean;
14
+ goalChanged: boolean;
15
+ previousStateMissing: boolean;
16
+ previousFailedWithoutNewInformation: boolean;
17
+ verificationContradicted: boolean;
18
+ consecutiveRejections?: number;
19
+ recoveryBoundary?: boolean;
20
+ stateDrift?: boolean;
21
+ fullRefreshInterval: number;
22
+ lastFullRound?: number;
23
+ }
24
+ export interface PromptLevelDecision {
25
+ level: PromptLevel;
26
+ reasons: PromptLevelReason[];
27
+ }
28
+ export declare function decidePromptLevel(input: PromptLevelInput): PromptLevelDecision;
29
+ //# sourceMappingURL=prompt-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-policy.d.ts","sourceRoot":"","sources":["../src/prompt-policy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GACzB,mBAAmB,GACnB,aAAa,GACb,eAAe,GACf,qBAAqB,GACrB,cAAc,GACd,wBAAwB,GACxB,2BAA2B,GAC3B,aAAa,GACb,qBAAqB,GACrB,mBAAmB,GACnB,aAAa,GACb,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mCAAmC,EAAE,OAAO,CAAC;IAC7C,wBAAwB,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,CA8C9E"}
@@ -0,0 +1,51 @@
1
+ /** Pure L0/L1/L2 prompt-view policy.
2
+ *
3
+ * Levels describe how much canonical state is rendered. They do not select a
4
+ * reasoning technique; the external Agent owns its reasoning strategy.
5
+ */
6
+ export function decidePromptLevel(input) {
7
+ if ((input.consecutiveRejections ?? 0) >= 2) {
8
+ return { level: "l2", reasons: ["rejection_rehydrate"] };
9
+ }
10
+ if (input.recoveryBoundary) {
11
+ return { level: "l2", reasons: ["recovery_boundary"] };
12
+ }
13
+ if (input.stateDrift)
14
+ return { level: "l2", reasons: ["state_drift"] };
15
+ if ((input.attempt ?? 1) > 1) {
16
+ return { level: "l0", reasons: ["retry_delta"] };
17
+ }
18
+ if (input.verificationContradicted) {
19
+ return { level: "l2", reasons: ["verification_contradicted"] };
20
+ }
21
+ if (input.round === 1)
22
+ return { level: "l2", reasons: ["first_round"] };
23
+ if (input.hasPlanSource)
24
+ return { level: "l2", reasons: ["plan_boundary"] };
25
+ if (input.forceLevel &&
26
+ input.forceLevel !== "auto" &&
27
+ ["l0", "l1", "l2"].includes(input.forceLevel)) {
28
+ return {
29
+ level: input.forceLevel,
30
+ reasons: ["explicit_override"],
31
+ };
32
+ }
33
+ if (input.checkpointBoundary) {
34
+ return { level: "l2", reasons: ["checkpoint_boundary"] };
35
+ }
36
+ if (input.goalChanged)
37
+ return { level: "l2", reasons: ["goal_changed"] };
38
+ if (input.previousStateMissing) {
39
+ return { level: "l2", reasons: ["missing_previous_state"] };
40
+ }
41
+ if (input.previousFailedWithoutNewInformation) {
42
+ return { level: "l0", reasons: ["retry_delta"] };
43
+ }
44
+ const lastFullRound = input.lastFullRound ?? 1;
45
+ if (input.fullRefreshInterval > 0 &&
46
+ input.round - lastFullRound >= input.fullRefreshInterval) {
47
+ return { level: "l2", reasons: ["periodic_refresh"] };
48
+ }
49
+ return { level: "l1", reasons: ["state_capsule"] };
50
+ }
51
+ //# sourceMappingURL=prompt-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-policy.js","sourceRoot":"","sources":["../src/prompt-policy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyCH,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,2BAA2B,CAAC,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;IACxE,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IAC5E,IACE,KAAK,CAAC,UAAU;QAChB,KAAK,CAAC,UAAU,KAAK,MAAM;QAC3B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAC7C,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,UAAyB;YACtC,OAAO,EAAE,CAAC,mBAAmB,CAAC;SAC/B,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;IACzE,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,KAAK,CAAC,mCAAmC,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IAC/C,IACE,KAAK,CAAC,mBAAmB,GAAG,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,aAAa,IAAI,KAAK,CAAC,mBAAmB,EACxD,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;AACrD,CAAC"}