loopforge 3.0.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -143
- package/dist/audit.d.ts +50 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +131 -0
- package/dist/audit.js.map +1 -0
- package/dist/canonical-state.d.ts +98 -23
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +257 -181
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -33
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-facts.d.ts +17 -0
- package/dist/cognitive-facts.d.ts.map +1 -0
- package/dist/cognitive-facts.js +99 -0
- package/dist/cognitive-facts.js.map +1 -0
- package/dist/cognitive-governance.d.ts +25 -33
- package/dist/cognitive-governance.d.ts.map +1 -1
- package/dist/cognitive-governance.js +38 -138
- package/dist/cognitive-governance.js.map +1 -1
- package/dist/committed-round.d.ts +59 -0
- package/dist/committed-round.d.ts.map +1 -0
- package/dist/committed-round.js +222 -0
- package/dist/committed-round.js.map +1 -0
- package/dist/enforcement-gate.d.ts +78 -0
- package/dist/enforcement-gate.d.ts.map +1 -0
- package/dist/enforcement-gate.js +1109 -0
- package/dist/enforcement-gate.js.map +1 -0
- package/dist/engine.d.ts +111 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +887 -0
- package/dist/engine.js.map +1 -0
- package/dist/evidence-claims.d.ts +50 -0
- package/dist/evidence-claims.d.ts.map +1 -0
- package/dist/evidence-claims.js +116 -0
- package/dist/evidence-claims.js.map +1 -0
- package/dist/evidence-provider.d.ts +50 -23
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +167 -50
- package/dist/evidence-provider.js.map +1 -1
- package/dist/generate-schema.js +1 -84
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +19 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +58 -3
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +841 -304
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +2 -2
- package/dist/loop-extras-parser.d.ts.map +1 -1
- package/dist/loop-extras-parser.js +2 -2
- package/dist/loop-extras-parser.js.map +1 -1
- package/dist/loop-projection.d.ts +6 -0
- package/dist/loop-projection.d.ts.map +1 -0
- package/dist/loop-projection.js +26 -0
- package/dist/loop-projection.js.map +1 -0
- package/dist/loop-store.d.ts +115 -24
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +365 -218
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +214 -0
- package/dist/mcp/round-lifecycle.d.ts.map +1 -0
- package/dist/mcp/round-lifecycle.js +935 -0
- package/dist/mcp/round-lifecycle.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +29 -43
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +64 -101
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +433 -1110
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +20 -11
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +587 -413
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +12 -24
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +78 -184
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +61 -50
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +48 -146
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +37 -6
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +487 -278
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +1 -8
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +8 -26
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +398 -236
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +147 -17
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts +5 -13
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +32 -69
- package/dist/replay.js.map +1 -1
- package/dist/round-contract.d.ts +64 -0
- package/dist/round-contract.d.ts.map +1 -0
- package/dist/round-contract.js +80 -0
- package/dist/round-contract.js.map +1 -0
- package/dist/round-coordinator.d.ts +23 -25
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +103 -92
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +13 -13
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +25 -14
- package/dist/round-driver.js.map +1 -1
- package/dist/round-transaction.d.ts +14 -18
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +37 -47
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +48 -0
- package/dist/self-eval.d.ts.map +1 -0
- package/dist/self-eval.js +248 -0
- package/dist/self-eval.js.map +1 -0
- package/dist/storage.d.ts +9 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +18 -6
- package/dist/storage.js.map +1 -1
- package/dist/token-utils.d.ts +15 -3
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +24 -5
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +149 -0
- package/dist/verification-gate.d.ts.map +1 -0
- package/dist/verification-gate.js +1343 -0
- package/dist/verification-gate.js.map +1 -0
- package/dist/workspace.d.ts +29 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +61 -0
- package/dist/workspace.js.map +1 -0
- package/loop_policy.json +37 -16
- package/package.json +5 -10
- package/skills/perception/SKILL.md +184 -202
- package/dist/canonical-event-writer.d.ts +0 -20
- package/dist/canonical-event-writer.d.ts.map +0 -1
- package/dist/canonical-event-writer.js +0 -131
- package/dist/canonical-event-writer.js.map +0 -1
- package/dist/compiler-subgoals.d.ts +0 -7
- package/dist/compiler-subgoals.d.ts.map +0 -1
- package/dist/compiler-subgoals.js +0 -93
- package/dist/compiler-subgoals.js.map +0 -1
- package/dist/derive-id.d.ts +0 -12
- package/dist/derive-id.d.ts.map +0 -1
- package/dist/derive-id.js +0 -31
- package/dist/derive-id.js.map +0 -1
- package/dist/mcp/session-projection.d.ts +0 -5
- package/dist/mcp/session-projection.d.ts.map +0 -1
- package/dist/mcp/session-projection.js +0 -18
- package/dist/mcp/session-projection.js.map +0 -1
- package/dist/mcp/session-queue.d.ts +0 -3
- package/dist/mcp/session-queue.d.ts.map +0 -1
- package/dist/mcp/session-queue.js +0 -18
- package/dist/mcp/session-queue.js.map +0 -1
- package/dist/mcp/session-types.d.ts +0 -72
- package/dist/mcp/session-types.d.ts.map +0 -1
- package/dist/mcp/session-types.js +0 -2
- package/dist/mcp/session-types.js.map +0 -1
- package/dist/round-commit-store.d.ts +0 -12
- package/dist/round-commit-store.d.ts.map +0 -1
- package/dist/round-commit-store.js +0 -13
- package/dist/round-commit-store.js.map +0 -1
- package/dist/round-gate.d.ts +0 -31
- package/dist/round-gate.d.ts.map +0 -1
- package/dist/round-gate.js +0 -259
- package/dist/round-gate.js.map +0 -1
- package/dist/round-recovery.d.ts +0 -17
- package/dist/round-recovery.d.ts.map +0 -1
- package/dist/round-recovery.js +0 -117
- package/dist/round-recovery.js.map +0 -1
- package/dist/round-report.d.ts +0 -16
- package/dist/round-report.d.ts.map +0 -1
- package/dist/round-report.js +0 -401
- package/dist/round-report.js.map +0 -1
- package/dist/runtime-services.d.ts +0 -59
- package/dist/runtime-services.d.ts.map +0 -1
- package/dist/runtime-services.js +0 -460
- package/dist/runtime-services.js.map +0 -1
- package/dist/vault-format.d.ts +0 -4
- package/dist/vault-format.d.ts.map +0 -1
- package/dist/vault-format.js +0 -4
- package/dist/vault-format.js.map +0 -1
- package/dist/vault-types.d.ts +0 -24
- package/dist/vault-types.d.ts.map +0 -1
- package/dist/vault-types.js +0 -2
- package/dist/vault-types.js.map +0 -1
- package/loopforge-policy.json +0 -340
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/** Structured self-evaluation parsing and normalization — pure functions.
|
|
2
|
+
* The MCP boundary validates required fields before these helpers run.
|
|
3
|
+
*/
|
|
4
|
+
import { makeExecutionEvidence, makeSelfEvaluation, } from "./protocol.js";
|
|
5
|
+
// ── Raw parsing helpers ───────────────────────────────────────────────────
|
|
6
|
+
function boundedString(value, maxChars) {
|
|
7
|
+
return typeof value === "string" ? value.slice(0, maxChars) : undefined;
|
|
8
|
+
}
|
|
9
|
+
function boundedStringArray(value, maxItems, maxChars) {
|
|
10
|
+
return Array.isArray(value)
|
|
11
|
+
? value
|
|
12
|
+
.filter((item) => typeof item === "string")
|
|
13
|
+
.map((item) => item.slice(0, maxChars))
|
|
14
|
+
.slice(0, maxItems)
|
|
15
|
+
: [];
|
|
16
|
+
}
|
|
17
|
+
function nonNegativeInteger(value) {
|
|
18
|
+
return typeof value === "number" && Number.isFinite(value)
|
|
19
|
+
? Math.max(0, Math.trunc(value))
|
|
20
|
+
: 0;
|
|
21
|
+
}
|
|
22
|
+
/** v2.12: Parse retroactive claims — {round ≥ 1, claim non-empty}, capped at
|
|
23
|
+
* 20 entries. Invalid entries are silently dropped (lenient parsing). */
|
|
24
|
+
function parseRetroactiveClaims(raw) {
|
|
25
|
+
if (!Array.isArray(raw))
|
|
26
|
+
return [];
|
|
27
|
+
const claims = [];
|
|
28
|
+
for (const item of raw) {
|
|
29
|
+
if (claims.length >= 20)
|
|
30
|
+
break;
|
|
31
|
+
if (typeof item !== "object" || item === null || Array.isArray(item))
|
|
32
|
+
continue;
|
|
33
|
+
const record = item;
|
|
34
|
+
if (typeof record.round !== "number" || !Number.isInteger(record.round) ||
|
|
35
|
+
record.round < 1 || typeof record.claim !== "string" ||
|
|
36
|
+
record.claim.trim().length === 0) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
claims.push({ round: record.round, claim: record.claim.slice(0, 500) });
|
|
40
|
+
}
|
|
41
|
+
return claims;
|
|
42
|
+
}
|
|
43
|
+
/** Parse ExecutionEvidence from a raw JSON object. */
|
|
44
|
+
export function parseExecutionEvidence(raw) {
|
|
45
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
46
|
+
return undefined;
|
|
47
|
+
const testResults = raw.test_results && typeof raw.test_results === "object" &&
|
|
48
|
+
!Array.isArray(raw.test_results)
|
|
49
|
+
? raw.test_results
|
|
50
|
+
: undefined;
|
|
51
|
+
return makeExecutionEvidence({
|
|
52
|
+
files_changed: boundedStringArray(raw.files_changed, 200, 500),
|
|
53
|
+
test_results: testResults && typeof testResults.passed === "number" &&
|
|
54
|
+
Number.isFinite(testResults.passed)
|
|
55
|
+
? {
|
|
56
|
+
passed: nonNegativeInteger(testResults.passed),
|
|
57
|
+
failed: nonNegativeInteger(testResults.failed),
|
|
58
|
+
skipped: nonNegativeInteger(testResults.skipped),
|
|
59
|
+
}
|
|
60
|
+
: null,
|
|
61
|
+
success_criteria_met: boundedStringArray(raw.success_criteria_met, 100, 500),
|
|
62
|
+
success_criteria_remaining: boundedStringArray(raw.success_criteria_remaining, 100, 500),
|
|
63
|
+
progress_estimate: typeof raw.progress_estimate === "number" &&
|
|
64
|
+
Number.isFinite(raw.progress_estimate)
|
|
65
|
+
? Math.max(0, Math.min(1, raw.progress_estimate))
|
|
66
|
+
: 0.0,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Parse CriterionRevision[] from a raw JSON array. */
|
|
70
|
+
export function parseCriterionRevisions(raw) {
|
|
71
|
+
if (!Array.isArray(raw))
|
|
72
|
+
return [];
|
|
73
|
+
return raw
|
|
74
|
+
.filter((v) => typeof v === "object" && v !== null &&
|
|
75
|
+
typeof v.old === "string" &&
|
|
76
|
+
typeof v.new === "string")
|
|
77
|
+
.slice(0, 20)
|
|
78
|
+
.map((v) => {
|
|
79
|
+
const r = v;
|
|
80
|
+
return { old: r.old.slice(0, 500), new: r.new.slice(0, 500) };
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** Parse WorkerResult[] from a raw JSON array. */
|
|
84
|
+
export function parseWorkerResults(raw) {
|
|
85
|
+
if (!Array.isArray(raw))
|
|
86
|
+
return [];
|
|
87
|
+
return raw
|
|
88
|
+
.filter((v) => typeof v === "object" && v !== null &&
|
|
89
|
+
typeof v.agentId === "string" &&
|
|
90
|
+
typeof v.subTask === "string" &&
|
|
91
|
+
typeof v.resultSummary === "string")
|
|
92
|
+
.slice(0, 20)
|
|
93
|
+
.map((v) => {
|
|
94
|
+
const w = v;
|
|
95
|
+
return {
|
|
96
|
+
agentId: w.agentId.slice(0, 200),
|
|
97
|
+
subAgentType: typeof w.subAgentType === "string"
|
|
98
|
+
? w.subAgentType.slice(0, 100)
|
|
99
|
+
: "general-purpose",
|
|
100
|
+
subTask: w.subTask.slice(0, 500),
|
|
101
|
+
resultSummary: w.resultSummary.slice(0, 1000),
|
|
102
|
+
success: typeof w.success === "boolean" ? w.success : false,
|
|
103
|
+
// v2.12: Declared outcome wins; derived from success when absent.
|
|
104
|
+
outcome: w.outcome === "success" || w.outcome === "partial" || w.outcome === "failed"
|
|
105
|
+
? w.outcome
|
|
106
|
+
: undefined,
|
|
107
|
+
discoveredConstraints: boundedStringArray(w.discoveredConstraints, 50, 500),
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** v2.12: The effective round outcome — declared outcome wins, otherwise
|
|
112
|
+
* derived from `success`. "partial" can only be declared explicitly (never
|
|
113
|
+
* silently derived from success=false, which would quietly change the
|
|
114
|
+
* success-class enforcement surface). */
|
|
115
|
+
export function effectiveOutcome(selfEval) {
|
|
116
|
+
if (selfEval.outcome === "success" || selfEval.outcome === "partial" ||
|
|
117
|
+
selfEval.outcome === "failed" || selfEval.outcome === "blocked") {
|
|
118
|
+
return selfEval.outcome;
|
|
119
|
+
}
|
|
120
|
+
return selfEval.success ? "success" : "failed";
|
|
121
|
+
}
|
|
122
|
+
/** v2.12: Whether the effective outcome is a success claim. Shared by the
|
|
123
|
+
* verification gate (success-class checks) and enforcement gate (R3). */
|
|
124
|
+
export function effectiveSuccess(selfEval) {
|
|
125
|
+
return effectiveOutcome(selfEval) === "success";
|
|
126
|
+
}
|
|
127
|
+
export function validateCoreSelfEvaluation(raw) {
|
|
128
|
+
const missing = [];
|
|
129
|
+
const invalid = [];
|
|
130
|
+
const required = ["success", "output_summary", "constraint_violations", "should_continue"];
|
|
131
|
+
for (const field of required) {
|
|
132
|
+
if (!(field in raw))
|
|
133
|
+
missing.push(field);
|
|
134
|
+
}
|
|
135
|
+
if ("success" in raw && typeof raw.success !== "boolean") {
|
|
136
|
+
invalid.push({ field: "success", expected: "boolean" });
|
|
137
|
+
}
|
|
138
|
+
if ("output_summary" in raw && typeof raw.output_summary !== "string") {
|
|
139
|
+
invalid.push({ field: "output_summary", expected: "string" });
|
|
140
|
+
}
|
|
141
|
+
if ("constraint_violations" in raw &&
|
|
142
|
+
(!Array.isArray(raw.constraint_violations) ||
|
|
143
|
+
raw.constraint_violations.some((value) => typeof value !== "string"))) {
|
|
144
|
+
invalid.push({ field: "constraint_violations", expected: "array of strings" });
|
|
145
|
+
}
|
|
146
|
+
if ("should_continue" in raw && typeof raw.should_continue !== "boolean") {
|
|
147
|
+
invalid.push({ field: "should_continue", expected: "boolean" });
|
|
148
|
+
}
|
|
149
|
+
return { missing, invalid };
|
|
150
|
+
}
|
|
151
|
+
/** Build a SelfEvaluation from a parsed JSON object.
|
|
152
|
+
* Lenient parsing: missing optional fields get sensible defaults. */
|
|
153
|
+
export function buildSelfEvaluation(raw) {
|
|
154
|
+
const executionEvidence = parseExecutionEvidence(raw.execution_evidence);
|
|
155
|
+
const retractedConstraints = boundedStringArray(raw.retracted_constraints, 50, 500);
|
|
156
|
+
const revisedCriteria = parseCriterionRevisions(raw.revised_success_criteria);
|
|
157
|
+
const wrongAssumptions = boundedStringArray(raw.wrong_assumptions, 50, 500);
|
|
158
|
+
const workerResults = parseWorkerResults(raw.worker_results);
|
|
159
|
+
return makeSelfEvaluation({
|
|
160
|
+
success: typeof raw.success === "boolean" ? raw.success : false,
|
|
161
|
+
output_summary: typeof raw.output_summary === "string" ? raw.output_summary : "",
|
|
162
|
+
constraint_violations: Array.isArray(raw.constraint_violations)
|
|
163
|
+
? raw.constraint_violations.filter((v) => typeof v === "string")
|
|
164
|
+
: [],
|
|
165
|
+
should_continue: typeof raw.should_continue === "boolean" ? raw.should_continue : true,
|
|
166
|
+
discovered_constraints: boundedStringArray(raw.discovered_constraints, 50, 500),
|
|
167
|
+
objective_refinement: boundedString(raw.objective_refinement, 1000) ?? "",
|
|
168
|
+
emerged_subtasks: boundedStringArray(raw.emerged_subtasks, 50, 500),
|
|
169
|
+
execution_evidence: executionEvidence,
|
|
170
|
+
retracted_constraints: retractedConstraints,
|
|
171
|
+
revised_success_criteria: revisedCriteria,
|
|
172
|
+
wrong_assumptions: wrongAssumptions,
|
|
173
|
+
worker_results: workerResults,
|
|
174
|
+
compression_checkpoint: typeof raw.compression_checkpoint === "boolean" ? raw.compression_checkpoint : false,
|
|
175
|
+
checkpoint_label: boundedString(raw.checkpoint_label, 200) ?? "",
|
|
176
|
+
next_action: boundedString(raw.next_action, 500),
|
|
177
|
+
completed_subtasks: boundedStringArray(raw.completed_subtasks, 50, 500),
|
|
178
|
+
blocked_subtasks: boundedStringArray(raw.blocked_subtasks, 50, 500),
|
|
179
|
+
canceled_subtasks: boundedStringArray(raw.canceled_subtasks, 50, 500),
|
|
180
|
+
stop_reason: raw.stop_reason === "gave_up" || raw.stop_reason === "blocked" || raw.stop_reason === "needs_human_input"
|
|
181
|
+
? raw.stop_reason
|
|
182
|
+
: undefined,
|
|
183
|
+
outcome: raw.outcome === "success" || raw.outcome === "partial" ||
|
|
184
|
+
raw.outcome === "failed" || raw.outcome === "blocked"
|
|
185
|
+
? raw.outcome
|
|
186
|
+
: undefined,
|
|
187
|
+
blocker: typeof raw.blocker === "string" && raw.blocker.trim().length > 0
|
|
188
|
+
? raw.blocker.slice(0, 500)
|
|
189
|
+
: undefined,
|
|
190
|
+
retroactiveClaims: parseRetroactiveClaims(raw.retroactiveClaims),
|
|
191
|
+
no_change_reason: typeof raw.no_change_reason === "string" && raw.no_change_reason.trim().length > 0
|
|
192
|
+
? raw.no_change_reason.slice(0, 200)
|
|
193
|
+
: undefined,
|
|
194
|
+
drift_clarification: boundedString(raw.drift_clarification, 1000),
|
|
195
|
+
prompt_requests: parsePromptRequests(raw.prompt_requests),
|
|
196
|
+
round_contract: parseRoundContract(raw.round_contract),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/** Parse a RoundContract object from raw JSON input. Lenient: non-string
|
|
200
|
+
* entries are dropped, strings are trimmed and capped. An object that IS
|
|
201
|
+
* present is returned even with empty arrays — an empty contract is a
|
|
202
|
+
* real declaration the round_underspecified check must see. Returns
|
|
203
|
+
* undefined only when the raw value is absent or not an object. */
|
|
204
|
+
export function parseRoundContract(raw) {
|
|
205
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
206
|
+
return undefined;
|
|
207
|
+
const obj = raw;
|
|
208
|
+
const capStrings = (value, max, cap) => Array.isArray(value)
|
|
209
|
+
? value
|
|
210
|
+
.filter((v) => typeof v === "string")
|
|
211
|
+
.map((v) => v.trim().slice(0, max))
|
|
212
|
+
.filter(Boolean)
|
|
213
|
+
.slice(0, cap)
|
|
214
|
+
: [];
|
|
215
|
+
return {
|
|
216
|
+
work_item: typeof obj.work_item === "string" && obj.work_item.trim().length > 0
|
|
217
|
+
? obj.work_item.trim().slice(0, 200)
|
|
218
|
+
: undefined,
|
|
219
|
+
done_when: capStrings(obj.done_when, 200, 20),
|
|
220
|
+
verification_plan: capStrings(obj.verification_plan, 200, 20),
|
|
221
|
+
scope: capStrings(obj.scope, 500, 50),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/** Parse a PromptRequests object from raw JSON input.
|
|
225
|
+
* Lenient: missing or invalid fields get sensible defaults.
|
|
226
|
+
* Returns undefined if the raw value is absent or not an object,
|
|
227
|
+
* so makeSelfEvaluation can distinguish "not set" from "empty".
|
|
228
|
+
* Exported for the engine's last_round_result rebuild — the MCP
|
|
229
|
+
* lifecycle assembles prompt_requests into the request, but every
|
|
230
|
+
* compile path funnels through engine.invokeLoopCompile, whose
|
|
231
|
+
* field-by-field reconstruction must preserve them (v3.3.1). */
|
|
232
|
+
export function parsePromptRequests(raw) {
|
|
233
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
234
|
+
return undefined;
|
|
235
|
+
const obj = raw;
|
|
236
|
+
const emphasize = boundedStringArray(obj.emphasize, 5, 500);
|
|
237
|
+
const confusionPoints = boundedStringArray(obj.confusion_points, 3, 200);
|
|
238
|
+
// Return undefined when all fields are empty — semantically equivalent
|
|
239
|
+
// to "not set", avoids carrying an empty object through the pipeline.
|
|
240
|
+
if (emphasize.length === 0 && confusionPoints.length === 0) {
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
return { emphasize, confusion_points: confusionPoints };
|
|
244
|
+
}
|
|
245
|
+
// Free-text inference is intentionally absent. Invalid core fields are
|
|
246
|
+
// rejected before round advancement and may be resubmitted with the same
|
|
247
|
+
// roundId without changing session, gate, metric, or vault state.
|
|
248
|
+
//# sourceMappingURL=self-eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-eval.js","sourceRoot":"","sources":["../src/self-eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GAOnB,MAAM,eAAe,CAAC;AAEvB,6EAA6E;AAE7E,SAAS,aAAa,CAAC,KAAc,EAAE,QAAgB;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,QAAgB,EAChB,QAAgB;IAEhB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK;aACF,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;aAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;aACtC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED;0EAC0E;AAC1E,SAAS,sBAAsB,CAAC,GAAY;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;YAAE,MAAM;QAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/E,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;YACnE,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YACpD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,sBAAsB,CACpC,GAA+C;IAE/C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ;QACxE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAClC,CAAC,CAAC,GAAG,CAAC,YAAuC;QAC7C,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,qBAAqB,CAAC;QAC3B,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC;QAC9D,YAAY,EAAE,WAAW,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ;YAC/D,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;YACrC,CAAC,CAAC;gBACE,MAAM,EAAE,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC9C,MAAM,EAAE,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC9C,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC;aACjD;YACH,CAAC,CAAC,IAAI;QACR,oBAAoB,EAAE,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,CAAC;QAC5E,0BAA0B,EAAE,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,EAAE,GAAG,EAAE,GAAG,CAAC;QACxF,iBAAiB,EAAE,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;YACxD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACjD,CAAC,CAAC,GAAG;KACR,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,uBAAuB,CACrC,GAAY;IAEZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,GAAG;SACP,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CACrB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QACnC,OAAQ,CAA6B,CAAC,GAAG,KAAK,QAAQ;QACtD,OAAQ,CAA6B,CAAC,GAAG,KAAK,QAAQ,CAAC;SACxD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,OAAO,EAAE,GAAG,EAAG,CAAC,CAAC,GAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAG,CAAC,CAAC,GAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACxF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,kBAAkB,CAChC,GAAY;IAEZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,GAAG;SACP,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CACrB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QACnC,OAAQ,CAA6B,CAAC,OAAO,KAAK,QAAQ;QAC1D,OAAQ,CAA6B,CAAC,OAAO,KAAK,QAAQ;QAC1D,OAAQ,CAA6B,CAAC,aAAa,KAAK,QAAQ,CAAC;SAClE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,OAAO;YACL,OAAO,EAAG,CAAC,CAAC,OAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC5C,YAAY,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;gBAC9C,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC9B,CAAC,CAAC,iBAAiB;YACrB,OAAO,EAAG,CAAC,CAAC,OAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC5C,aAAa,EAAG,CAAC,CAAC,aAAwB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACzD,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC3D,kEAAkE;YAClE,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ;gBACnF,CAAC,CAAC,CAAC,CAAC,OAAO;gBACX,CAAC,CAAC,SAAS;YACb,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,EAAE,GAAG,CAAC;SAC5E,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;0CAG0C;AAC1C,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;QAChE,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACpE,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED;0EAC0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAClD,CAAC;AAUD,MAAM,UAAU,0BAA0B,CACxC,GAA4B;IAE5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA+C,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,CAAU,CAAC;IACpG,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,SAAS,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,gBAAgB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,uBAAuB,IAAI,GAAG;QAC9B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;YACzC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,iBAAiB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;sEACsE;AACtE,MAAM,UAAU,mBAAmB,CACjC,GAA4B;IAE5B,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,GAAG,CAAC,kBAAyD,CAC9D,CAAC;IAEF,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,eAAe,GAAwB,uBAAuB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACnG,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE7D,OAAO,kBAAkB,CAAC;QACxB,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QAC/D,cAAc,EAAE,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;QAChF,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;YAC7D,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACzE,CAAC,CAAC,EAAE;QACN,eAAe,EAAE,OAAO,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;QACtF,sBAAsB,EAAE,kBAAkB,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,EAAE,GAAG,CAAC;QAC/E,oBAAoB,EAAE,aAAa,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,EAAE;QACzE,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,GAAG,CAAC;QACnE,kBAAkB,EAAE,iBAAiB;QACrC,qBAAqB,EAAE,oBAAoB;QAC3C,wBAAwB,EAAE,eAAe;QACzC,iBAAiB,EAAE,gBAAgB;QACnC,cAAc,EAAE,aAAa;QAC7B,sBAAsB,EACpB,OAAO,GAAG,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK;QACtF,gBAAgB,EAAE,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE;QAChE,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QAChD,kBAAkB,EAAE,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,GAAG,CAAC;QACvE,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,GAAG,CAAC;QACnE,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC;QACrE,WAAW,EACT,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,mBAAmB;YACvG,CAAC,CAAC,GAAG,CAAC,WAAW;YACjB,CAAC,CAAC,SAAS;QACf,OAAO,EACL,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;YACtD,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;YACnD,CAAC,CAAC,GAAG,CAAC,OAAO;YACb,CAAC,CAAC,SAAS;QACf,OAAO,EACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC3B,CAAC,CAAC,SAAS;QACf,iBAAiB,EAAE,sBAAsB,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChE,gBAAgB,EACd,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAChF,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,CAAC,CAAC,SAAS;QACf,mBAAmB,EAAE,aAAa,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC;QACjE,eAAe,EAAE,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC;QACzD,cAAc,EAAE,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED;;;;oEAIoE;AACpE,MAAM,UAAU,kBAAkB,CAChC,GAAY;IAEZ,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,GAAW,EAAE,GAAW,EAAY,EAAE,CACxE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,KAAK;aACF,MAAM,CAAC,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;aAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAClC,MAAM,CAAC,OAAO,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAClB,CAAC,CAAC,EAAE,CAAC;IACT,OAAO;QACL,SAAS,EACP,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAClE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,CAAC,CAAC,SAAS;QACf,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7C,iBAAiB,EAAE,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7D,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED;;;;;;;iEAOiE;AACjE,MAAM,UAAU,mBAAmB,CACjC,GAAY;IAEZ,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAC1D,CAAC;AAED,uEAAuE;AACvE,yEAAyE;AACzE,kEAAkE"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
/** Persistence adapters for session state and committed round lookup. */
|
|
2
|
-
import type { VaultEntry } from "./
|
|
3
|
-
import type { LoopStore } from "./loop-store.js";
|
|
4
|
-
export { VaultRoundCommitStore } from "./round-commit-store.js";
|
|
5
|
-
export type { RoundCommitStore } from "./round-commit-store.js";
|
|
2
|
+
import type { LoopStore, VaultEntry } from "./loop-store.js";
|
|
6
3
|
export interface SessionStateStore {
|
|
7
4
|
load(loopId: string): VaultEntry | undefined;
|
|
8
5
|
list(): VaultEntry[];
|
|
@@ -19,6 +16,9 @@ export declare class SessionLeaseConflictError extends Error {
|
|
|
19
16
|
readonly loopId: string;
|
|
20
17
|
constructor(loopId: string);
|
|
21
18
|
}
|
|
19
|
+
export interface RoundCommitStore {
|
|
20
|
+
find(loopId: string, round: number): VaultEntry[];
|
|
21
|
+
}
|
|
22
22
|
export declare class VaultSessionStateStore implements SessionStateStore {
|
|
23
23
|
private readonly store;
|
|
24
24
|
constructor(store: LoopStore);
|
|
@@ -30,4 +30,9 @@ export declare class VaultSessionStateStore implements SessionStateStore {
|
|
|
30
30
|
releaseLease(loopId: string, ownerId: string): boolean;
|
|
31
31
|
private lineage;
|
|
32
32
|
}
|
|
33
|
+
export declare class VaultRoundCommitStore implements RoundCommitStore {
|
|
34
|
+
private readonly store;
|
|
35
|
+
constructor(store: LoopStore);
|
|
36
|
+
find(loopId: string, round: number): VaultEntry[];
|
|
37
|
+
}
|
|
33
38
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,yEAAyE;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAuB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0BlF,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,IAAI,IAAI,UAAU,EAAE,CAAC;IACrB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5D,YAAY,CAAC,CACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,UAAU,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IACX,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACzD;AAED,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAIpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CACnD;AAED,qBAAa,sBAAuB,YAAW,iBAAiB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAE7C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAK5C,IAAI,IAAI,UAAU,EAAE;IASpB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI;IA2B/D,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,SAAa,GACf,UAAU,GAAG,SAAS;IA6CzB,UAAU,CACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,SAAa,GACf,OAAO;IA4BV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IA6BtD,OAAO,CAAC,OAAO;CAOhB;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAE7C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;CAMlD"}
|
package/dist/storage.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Persistence adapters for session state and committed round lookup. */
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { queryLoopEntries } from "./loop-store.js";
|
|
3
|
+
import { LOOP_STORE_SCHEMA_VERSION } from "./loop-store.js";
|
|
4
4
|
function isLeaseOwnerAlive(ownerId, leaseExpiresAt) {
|
|
5
5
|
const match = ownerId.match(/^(\d+):/);
|
|
6
6
|
if (!match)
|
|
@@ -69,7 +69,7 @@ export class VaultSessionStateStore {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
const doc = {
|
|
72
|
-
|
|
72
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
73
73
|
loopId,
|
|
74
74
|
updatedAt: new Date().toISOString(),
|
|
75
75
|
entry,
|
|
@@ -111,7 +111,7 @@ export class VaultSessionStateStore {
|
|
|
111
111
|
},
|
|
112
112
|
};
|
|
113
113
|
const doc = {
|
|
114
|
-
|
|
114
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
115
115
|
loopId,
|
|
116
116
|
updatedAt: new Date(now).toISOString(),
|
|
117
117
|
entry: updated,
|
|
@@ -140,7 +140,7 @@ export class VaultSessionStateStore {
|
|
|
140
140
|
},
|
|
141
141
|
};
|
|
142
142
|
const doc = {
|
|
143
|
-
|
|
143
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
144
144
|
loopId,
|
|
145
145
|
updatedAt: new Date(now).toISOString(),
|
|
146
146
|
entry: updated,
|
|
@@ -170,7 +170,7 @@ export class VaultSessionStateStore {
|
|
|
170
170
|
},
|
|
171
171
|
};
|
|
172
172
|
const doc = {
|
|
173
|
-
|
|
173
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
174
174
|
loopId,
|
|
175
175
|
updatedAt: new Date().toISOString(),
|
|
176
176
|
entry: updated,
|
|
@@ -189,4 +189,16 @@ export class VaultSessionStateStore {
|
|
|
189
189
|
: {};
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
|
+
export class VaultRoundCommitStore {
|
|
193
|
+
store;
|
|
194
|
+
constructor(store) {
|
|
195
|
+
this.store = store;
|
|
196
|
+
}
|
|
197
|
+
find(loopId, round) {
|
|
198
|
+
return queryLoopEntries(this.store, loopId, {
|
|
199
|
+
prefix: `loop:${loopId}:r${round}:feedback`,
|
|
200
|
+
feedbackOnly: true,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
192
204
|
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,yEAAyE;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/token-utils.d.ts
CHANGED
|
@@ -13,14 +13,26 @@
|
|
|
13
13
|
* Scripts are tokenized independently, so mixed text yields per-script
|
|
14
14
|
* tokens (e.g. "修复bug重入" → {修复, bug, 重入}). */
|
|
15
15
|
export declare function tokenize(text: string): Set<string>;
|
|
16
|
-
/** Jaccard similarity in [0, 1]. Returns
|
|
17
|
-
*
|
|
16
|
+
/** Jaccard similarity in [0, 1]. Returns 0 when either side is empty —
|
|
17
|
+
* an empty description carries no information and must not match
|
|
18
|
+
* everything (a score of 1 would make `[""]` a wildcard that falsely
|
|
19
|
+
* marks sub-goals done or suppresses criteria milestones). */
|
|
18
20
|
export declare function jaccardSimilarity(left: string, right: string): number;
|
|
19
21
|
/** Filter null/undefined/empty strings, trim, and deduplicate via Set. */
|
|
20
22
|
export declare function unique(values: Array<string | null | undefined>): string[];
|
|
21
23
|
/** Narrow `unknown` to a non-array object. Used across storage, MCP, and
|
|
22
24
|
* transaction modules to validate JSON-deserialized data before field access. */
|
|
23
25
|
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
24
|
-
/** Extract the round number from
|
|
26
|
+
/** Extract the round number from a vault entry-like object by reading
|
|
27
|
+
* `loop_lineage.round` (with `lineage.round` fallback). Returns 0 if
|
|
28
|
+
* the entry has no recognizable round field. */
|
|
25
29
|
export declare function entryRound(entry: Record<string, unknown>): number;
|
|
30
|
+
/** Stable 8-hex item ID derived from normalized text — used for
|
|
31
|
+
* c-/cr-/sg-XXXXXXXX constraint, criterion, and sub-goal IDs.
|
|
32
|
+
* Previously copy-pasted in prompt-assembler, canonical-state, and
|
|
33
|
+
* loop-compiler; consolidation must not change the hash strategy
|
|
34
|
+
* (deterministic across rounds). */
|
|
35
|
+
export declare function deriveItemId(text: string): string;
|
|
36
|
+
/** Stable-ID shape shared by constraint/criterion/sub-goal references. */
|
|
37
|
+
export declare const STABLE_ID_RE: RegExp;
|
|
26
38
|
//# sourceMappingURL=token-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../src/token-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../src/token-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH;;+CAE+C;AAC/C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAmBlD;AAED;;;+DAG+D;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOrE;AAID,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAKzE;AAID;kFACkF;AAClF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAID;;iDAEiD;AACjD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIjE;AAID;;;;qCAIqC;AACrC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,0EAA0E;AAC1E,eAAO,MAAM,YAAY,QAA4B,CAAC"}
|
package/dist/token-utils.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* 0/1. The ranges cover Unified Ideographs, Compatibility Ideographs and
|
|
10
10
|
* Extensions B–F (surrogate-pair code points the legacy regex missed).
|
|
11
11
|
*/
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
12
13
|
// ── Tokenization & similarity ──────────────────────────────────────────────
|
|
13
14
|
/** CJK ranges: Unified Ideographs (U+3400–U+9FFF), Compatibility Ideographs
|
|
14
15
|
* (U+F900–U+FAFF), Extensions B–F (U+20000–U+2FA1F). */
|
|
@@ -55,13 +56,15 @@ export function tokenize(text) {
|
|
|
55
56
|
flushCjk();
|
|
56
57
|
return tokens;
|
|
57
58
|
}
|
|
58
|
-
/** Jaccard similarity in [0, 1]. Returns
|
|
59
|
-
*
|
|
59
|
+
/** Jaccard similarity in [0, 1]. Returns 0 when either side is empty —
|
|
60
|
+
* an empty description carries no information and must not match
|
|
61
|
+
* everything (a score of 1 would make `[""]` a wildcard that falsely
|
|
62
|
+
* marks sub-goals done or suppresses criteria milestones). */
|
|
60
63
|
export function jaccardSimilarity(left, right) {
|
|
61
64
|
const a = tokenize(left);
|
|
62
65
|
const b = tokenize(right);
|
|
63
66
|
if (a.size === 0 || b.size === 0)
|
|
64
|
-
return
|
|
67
|
+
return 0;
|
|
65
68
|
let intersection = 0;
|
|
66
69
|
for (const value of a)
|
|
67
70
|
if (b.has(value))
|
|
@@ -83,10 +86,26 @@ export function isRecord(value) {
|
|
|
83
86
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
84
87
|
}
|
|
85
88
|
// ── Vault entry helpers ────────────────────────────────────────────────────
|
|
86
|
-
/** Extract the round number from
|
|
89
|
+
/** Extract the round number from a vault entry-like object by reading
|
|
90
|
+
* `loop_lineage.round` (with `lineage.round` fallback). Returns 0 if
|
|
91
|
+
* the entry has no recognizable round field. */
|
|
87
92
|
export function entryRound(entry) {
|
|
88
|
-
const lin = (entry.loop_lineage ?? {});
|
|
93
|
+
const lin = (entry.loop_lineage ?? entry.lineage ?? {});
|
|
89
94
|
const rnd = lin.round;
|
|
90
95
|
return typeof rnd === "number" && Number.isInteger(rnd) ? rnd : 0;
|
|
91
96
|
}
|
|
97
|
+
// ── Stable ID derivation (v2.14: single source of truth) ───────────────────
|
|
98
|
+
/** Stable 8-hex item ID derived from normalized text — used for
|
|
99
|
+
* c-/cr-/sg-XXXXXXXX constraint, criterion, and sub-goal IDs.
|
|
100
|
+
* Previously copy-pasted in prompt-assembler, canonical-state, and
|
|
101
|
+
* loop-compiler; consolidation must not change the hash strategy
|
|
102
|
+
* (deterministic across rounds). */
|
|
103
|
+
export function deriveItemId(text) {
|
|
104
|
+
return createHash("sha256")
|
|
105
|
+
.update(text.trim().replace(/\s+/g, " ").toLowerCase())
|
|
106
|
+
.digest("hex")
|
|
107
|
+
.slice(0, 8);
|
|
108
|
+
}
|
|
109
|
+
/** Stable-ID shape shared by constraint/criterion/sub-goal references. */
|
|
110
|
+
export const STABLE_ID_RE = /^(c|cr|sg)-[a-f0-9]{8}$/;
|
|
92
111
|
//# sourceMappingURL=token-utils.js.map
|
package/dist/token-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-utils.js","sourceRoot":"","sources":["../src/token-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8EAA8E;AAE9E;yDACyD;AACzD,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;WACpC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;WAClC,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;+CAE+C;AAC/C,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,GAAG,GAAa,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,GAAS,EAAE,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAAC,KAAK,GAAG,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9E,GAAG,GAAG,EAAE,CAAC;IACX,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YAAC,QAAQ,EAAE,CAAC;YAAC,KAAK,IAAI,EAAE,CAAC;QAAC,CAAC;aAC7F,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,UAAU,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;aACzD,CAAC;YAAC,UAAU,EAAE,CAAC;YAAC,QAAQ,EAAE,CAAC;QAAC,CAAC;IACpC,CAAC;IACD,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AAChB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"token-utils.js","sourceRoot":"","sources":["../src/token-utils.ts"],"names":[],"mappings":"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"}
|