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.
- package/README.md +172 -95
- package/dist/backends/interface.d.ts +5 -10
- package/dist/backends/interface.d.ts.map +1 -1
- package/dist/backends/interface.js +3 -4
- package/dist/backends/interface.js.map +1 -1
- package/dist/canonical-state.d.ts +53 -0
- package/dist/canonical-state.d.ts.map +1 -0
- package/dist/canonical-state.js +161 -0
- package/dist/canonical-state.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +227 -0
- package/dist/cli.js.map +1 -0
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +28 -10
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +9 -28
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +135 -361
- package/dist/engine.js.map +1 -1
- package/dist/evidence-provider.d.ts +146 -0
- package/dist/evidence-provider.d.ts.map +1 -0
- package/dist/evidence-provider.js +512 -0
- package/dist/evidence-provider.js.map +1 -0
- package/dist/index.d.ts +19 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -12
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +49 -0
- package/dist/init.js.map +1 -0
- package/dist/interop.d.ts +35 -0
- package/dist/interop.d.ts.map +1 -0
- package/dist/interop.js +34 -0
- package/dist/interop.js.map +1 -0
- package/dist/loop-compiler.d.ts +14 -64
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +305 -2206
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +82 -0
- package/dist/loop-extras-parser.d.ts.map +1 -0
- package/dist/loop-extras-parser.js +217 -0
- package/dist/loop-extras-parser.js.map +1 -0
- package/dist/loop-store.d.ts +104 -0
- package/dist/loop-store.d.ts.map +1 -0
- package/dist/loop-store.js +421 -0
- package/dist/loop-store.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +109 -73
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +102 -21
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +795 -400
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +18 -268
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +226 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability.d.ts +36 -16
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +82 -23
- package/dist/observability.js.map +1 -1
- package/dist/policy-metrics.d.ts +46 -0
- package/dist/policy-metrics.d.ts.map +1 -0
- package/dist/policy-metrics.js +146 -0
- package/dist/policy-metrics.js.map +1 -0
- package/dist/policy.d.ts +52 -147
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +118 -191
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +30 -0
- package/dist/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt-assembler.js +278 -0
- package/dist/prompt-assembler.js.map +1 -0
- package/dist/prompt-policy.d.ts +29 -0
- package/dist/prompt-policy.d.ts.map +1 -0
- package/dist/prompt-policy.js +51 -0
- package/dist/prompt-policy.js.map +1 -0
- package/dist/protocol.d.ts +75 -152
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +11 -53
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +1 -27
- package/dist/replay.js.map +1 -1
- package/dist/round-coordinator.d.ts +90 -0
- package/dist/round-coordinator.d.ts.map +1 -0
- package/dist/round-coordinator.js +186 -0
- package/dist/round-coordinator.js.map +1 -0
- package/dist/round-driver.d.ts +53 -0
- package/dist/round-driver.d.ts.map +1 -0
- package/dist/round-driver.js +101 -0
- package/dist/round-driver.js.map +1 -0
- package/dist/round-transaction.d.ts +70 -0
- package/dist/round-transaction.d.ts.map +1 -0
- package/dist/round-transaction.js +290 -0
- package/dist/round-transaction.js.map +1 -0
- package/dist/self-eval.d.ts +26 -0
- package/dist/self-eval.d.ts.map +1 -0
- package/dist/self-eval.js +154 -0
- package/dist/self-eval.js.map +1 -0
- package/dist/storage.d.ts +39 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +193 -0
- package/dist/storage.js.map +1 -0
- package/dist/verification-gate.d.ts +31 -7
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +250 -7
- package/dist/verification-gate.js.map +1 -1
- package/loop_policy.json +19 -53
- package/package.json +13 -10
- package/skills/perception/SKILL.md +80 -267
- package/dist/backends/fs.d.ts +0 -36
- package/dist/backends/fs.d.ts.map +0 -1
- package/dist/backends/fs.js +0 -362
- package/dist/backends/fs.js.map +0 -1
- package/dist/builder.d.ts +0 -19
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -215
- package/dist/builder.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -12
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -14
- package/dist/mcp-server.js.map +0 -1
- package/dist/memory-bridge.d.ts +0 -47
- package/dist/memory-bridge.d.ts.map +0 -1
- package/dist/memory-bridge.js +0 -290
- package/dist/memory-bridge.js.map +0 -1
- package/dist/runtime.d.ts +0 -80
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -699
- package/dist/runtime.js.map +0 -1
- package/dist/tests/_helpers.d.ts +0 -25
- package/dist/tests/_helpers.d.ts.map +0 -1
- package/dist/tests/_helpers.js +0 -47
- package/dist/tests/_helpers.js.map +0 -1
- package/dist/tests/builder.test.d.ts +0 -2
- package/dist/tests/builder.test.d.ts.map +0 -1
- package/dist/tests/builder.test.js +0 -112
- package/dist/tests/builder.test.js.map +0 -1
- package/dist/tests/enforcement-gate.test.d.ts +0 -2
- package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
- package/dist/tests/enforcement-gate.test.js +0 -328
- package/dist/tests/enforcement-gate.test.js.map +0 -1
- package/dist/tests/engine.test.d.ts +0 -2
- package/dist/tests/engine.test.d.ts.map +0 -1
- package/dist/tests/engine.test.js +0 -375
- package/dist/tests/engine.test.js.map +0 -1
- package/dist/tests/generate-schema.test.d.ts +0 -8
- package/dist/tests/generate-schema.test.d.ts.map +0 -1
- package/dist/tests/generate-schema.test.js +0 -199
- package/dist/tests/generate-schema.test.js.map +0 -1
- package/dist/tests/loop-compiler.test.d.ts +0 -2
- package/dist/tests/loop-compiler.test.d.ts.map +0 -1
- package/dist/tests/loop-compiler.test.js +0 -1059
- package/dist/tests/loop-compiler.test.js.map +0 -1
- package/dist/tests/mcp.test.d.ts +0 -7
- package/dist/tests/mcp.test.d.ts.map +0 -1
- package/dist/tests/mcp.test.js +0 -505
- package/dist/tests/mcp.test.js.map +0 -1
- package/dist/tests/memory-bridge.test.d.ts +0 -8
- package/dist/tests/memory-bridge.test.d.ts.map +0 -1
- package/dist/tests/memory-bridge.test.js +0 -383
- package/dist/tests/memory-bridge.test.js.map +0 -1
- package/dist/tests/policy.test.d.ts +0 -2
- package/dist/tests/policy.test.d.ts.map +0 -1
- package/dist/tests/policy.test.js +0 -49
- package/dist/tests/policy.test.js.map +0 -1
- package/dist/tests/protocol.test.d.ts +0 -2
- package/dist/tests/protocol.test.d.ts.map +0 -1
- package/dist/tests/protocol.test.js +0 -73
- package/dist/tests/protocol.test.js.map +0 -1
- package/dist/tests/replay.test.d.ts +0 -2
- package/dist/tests/replay.test.d.ts.map +0 -1
- package/dist/tests/replay.test.js +0 -222
- package/dist/tests/replay.test.js.map +0 -1
- package/dist/tests/runtime.test.d.ts +0 -7
- package/dist/tests/runtime.test.d.ts.map +0 -1
- package/dist/tests/runtime.test.js +0 -337
- package/dist/tests/runtime.test.js.map +0 -1
- package/dist/tests/verification-gate.test.d.ts +0 -2
- package/dist/tests/verification-gate.test.d.ts.map +0 -1
- package/dist/tests/verification-gate.test.js +0 -407
- package/dist/tests/verification-gate.test.js.map +0 -1
- package/skills/prompt-techniques/SKILL.md +0 -52
- package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
- package/skills/prompt-techniques/references/few-shot.md +0 -174
- package/skills/prompt-techniques/references/least-to-most.md +0 -182
- package/skills/prompt-techniques/references/step-back.md +0 -160
- package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
- 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"}
|