loopforge 2.7.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/README.md +136 -182
  2. package/dist/canonical-event-writer.d.ts +20 -0
  3. package/dist/canonical-event-writer.d.ts.map +1 -0
  4. package/dist/canonical-event-writer.js +131 -0
  5. package/dist/canonical-event-writer.js.map +1 -0
  6. package/dist/canonical-state.d.ts +20 -16
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +211 -64
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +11 -10
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +48 -0
  14. package/dist/cognitive-governance.d.ts.map +1 -0
  15. package/dist/cognitive-governance.js +226 -0
  16. package/dist/cognitive-governance.js.map +1 -0
  17. package/dist/compiler-subgoals.d.ts +7 -0
  18. package/dist/compiler-subgoals.d.ts.map +1 -0
  19. package/dist/compiler-subgoals.js +93 -0
  20. package/dist/compiler-subgoals.js.map +1 -0
  21. package/dist/derive-id.d.ts +12 -0
  22. package/dist/derive-id.d.ts.map +1 -0
  23. package/dist/derive-id.js +31 -0
  24. package/dist/derive-id.js.map +1 -0
  25. package/dist/evidence-provider.d.ts +26 -26
  26. package/dist/evidence-provider.d.ts.map +1 -1
  27. package/dist/evidence-provider.js +45 -71
  28. package/dist/evidence-provider.js.map +1 -1
  29. package/dist/generate-schema.js +90 -2
  30. package/dist/generate-schema.js.map +1 -1
  31. package/dist/index.d.ts +23 -29
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +16 -26
  34. package/dist/index.js.map +1 -1
  35. package/dist/loop-compiler.d.ts +2 -2
  36. package/dist/loop-compiler.d.ts.map +1 -1
  37. package/dist/loop-compiler.js +321 -315
  38. package/dist/loop-compiler.js.map +1 -1
  39. package/dist/loop-extras-parser.d.ts +2 -2
  40. package/dist/loop-extras-parser.d.ts.map +1 -1
  41. package/dist/loop-extras-parser.js +2 -2
  42. package/dist/loop-extras-parser.js.map +1 -1
  43. package/dist/loop-store.d.ts +20 -58
  44. package/dist/loop-store.d.ts.map +1 -1
  45. package/dist/loop-store.js +232 -311
  46. package/dist/loop-store.js.map +1 -1
  47. package/dist/mcp/server.d.ts +3 -3
  48. package/dist/mcp/server.d.ts.map +1 -1
  49. package/dist/mcp/server.js +123 -19
  50. package/dist/mcp/server.js.map +1 -1
  51. package/dist/mcp/session-projection.d.ts +5 -0
  52. package/dist/mcp/session-projection.d.ts.map +1 -0
  53. package/dist/mcp/session-projection.js +18 -0
  54. package/dist/mcp/session-projection.js.map +1 -0
  55. package/dist/mcp/session-queue.d.ts +3 -0
  56. package/dist/mcp/session-queue.d.ts.map +1 -0
  57. package/dist/mcp/session-queue.js +18 -0
  58. package/dist/mcp/session-queue.js.map +1 -0
  59. package/dist/mcp/session-types.d.ts +72 -0
  60. package/dist/mcp/session-types.d.ts.map +1 -0
  61. package/dist/mcp/session-types.js +2 -0
  62. package/dist/mcp/session-types.js.map +1 -0
  63. package/dist/mcp/session.d.ts +65 -84
  64. package/dist/mcp/session.d.ts.map +1 -1
  65. package/dist/mcp/session.js +667 -224
  66. package/dist/mcp/session.js.map +1 -1
  67. package/dist/mcp/tools.d.ts +26 -1
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +401 -254
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/policy-metrics.d.ts +24 -0
  72. package/dist/policy-metrics.d.ts.map +1 -1
  73. package/dist/policy-metrics.js +174 -0
  74. package/dist/policy-metrics.js.map +1 -1
  75. package/dist/policy.d.ts +74 -12
  76. package/dist/policy.d.ts.map +1 -1
  77. package/dist/policy.js +124 -19
  78. package/dist/policy.js.map +1 -1
  79. package/dist/prompt-assembler.d.ts +8 -4
  80. package/dist/prompt-assembler.d.ts.map +1 -1
  81. package/dist/prompt-assembler.js +533 -86
  82. package/dist/prompt-assembler.js.map +1 -1
  83. package/dist/prompt-policy.d.ts +8 -1
  84. package/dist/prompt-policy.d.ts.map +1 -1
  85. package/dist/prompt-policy.js +26 -8
  86. package/dist/prompt-policy.js.map +1 -1
  87. package/dist/protocol.d.ts +259 -173
  88. package/dist/protocol.d.ts.map +1 -1
  89. package/dist/protocol.js +17 -96
  90. package/dist/protocol.js.map +1 -1
  91. package/dist/replay.d.ts +11 -3
  92. package/dist/replay.d.ts.map +1 -1
  93. package/dist/replay.js +51 -14
  94. package/dist/replay.js.map +1 -1
  95. package/dist/round-commit-store.d.ts +12 -0
  96. package/dist/round-commit-store.d.ts.map +1 -0
  97. package/dist/round-commit-store.js +13 -0
  98. package/dist/round-commit-store.js.map +1 -0
  99. package/dist/round-coordinator.d.ts +53 -22
  100. package/dist/round-coordinator.d.ts.map +1 -1
  101. package/dist/round-coordinator.js +140 -44
  102. package/dist/round-coordinator.js.map +1 -1
  103. package/dist/round-driver.d.ts +18 -10
  104. package/dist/round-driver.d.ts.map +1 -1
  105. package/dist/round-driver.js +11 -13
  106. package/dist/round-driver.js.map +1 -1
  107. package/dist/round-gate.d.ts +31 -0
  108. package/dist/round-gate.d.ts.map +1 -0
  109. package/dist/round-gate.js +259 -0
  110. package/dist/round-gate.js.map +1 -0
  111. package/dist/round-recovery.d.ts +17 -0
  112. package/dist/round-recovery.d.ts.map +1 -0
  113. package/dist/round-recovery.js +117 -0
  114. package/dist/round-recovery.js.map +1 -0
  115. package/dist/round-report.d.ts +16 -0
  116. package/dist/round-report.d.ts.map +1 -0
  117. package/dist/round-report.js +401 -0
  118. package/dist/round-report.js.map +1 -0
  119. package/dist/round-transaction.d.ts +23 -12
  120. package/dist/round-transaction.d.ts.map +1 -1
  121. package/dist/round-transaction.js +104 -91
  122. package/dist/round-transaction.js.map +1 -1
  123. package/dist/runtime-services.d.ts +59 -0
  124. package/dist/runtime-services.d.ts.map +1 -0
  125. package/dist/{engine.js → runtime-services.js} +157 -275
  126. package/dist/runtime-services.js.map +1 -0
  127. package/dist/storage.d.ts +3 -9
  128. package/dist/storage.d.ts.map +1 -1
  129. package/dist/storage.js +6 -17
  130. package/dist/storage.js.map +1 -1
  131. package/dist/token-utils.d.ts +12 -8
  132. package/dist/token-utils.d.ts.map +1 -1
  133. package/dist/token-utils.js +56 -10
  134. package/dist/token-utils.js.map +1 -1
  135. package/dist/vault-format.d.ts +4 -0
  136. package/dist/vault-format.d.ts.map +1 -0
  137. package/dist/vault-format.js +4 -0
  138. package/dist/vault-format.js.map +1 -0
  139. package/dist/vault-types.d.ts +24 -0
  140. package/dist/vault-types.d.ts.map +1 -0
  141. package/dist/vault-types.js +2 -0
  142. package/dist/vault-types.js.map +1 -0
  143. package/loop_policy.json +10 -12
  144. package/loopforge-policy.json +340 -0
  145. package/package.json +13 -7
  146. package/skills/perception/SKILL.md +200 -90
  147. package/dist/backends/interface.d.ts +0 -39
  148. package/dist/backends/interface.d.ts.map +0 -1
  149. package/dist/backends/interface.js +0 -6
  150. package/dist/backends/interface.js.map +0 -1
  151. package/dist/enforcement-gate.d.ts +0 -50
  152. package/dist/enforcement-gate.d.ts.map +0 -1
  153. package/dist/enforcement-gate.js +0 -501
  154. package/dist/enforcement-gate.js.map +0 -1
  155. package/dist/engine.d.ts +0 -59
  156. package/dist/engine.d.ts.map +0 -1
  157. package/dist/engine.js.map +0 -1
  158. package/dist/interop.d.ts +0 -35
  159. package/dist/interop.d.ts.map +0 -1
  160. package/dist/interop.js +0 -34
  161. package/dist/interop.js.map +0 -1
  162. package/dist/run.d.ts +0 -51
  163. package/dist/run.d.ts.map +0 -1
  164. package/dist/run.js +0 -200
  165. package/dist/run.js.map +0 -1
  166. package/dist/self-eval.d.ts +0 -23
  167. package/dist/self-eval.d.ts.map +0 -1
  168. package/dist/self-eval.js +0 -151
  169. package/dist/self-eval.js.map +0 -1
  170. package/dist/verification-gate.d.ts +0 -52
  171. package/dist/verification-gate.d.ts.map +0 -1
  172. package/dist/verification-gate.js +0 -527
  173. package/dist/verification-gate.js.map +0 -1
@@ -0,0 +1,226 @@
1
+ import { createHash } from "node:crypto";
2
+ import { deriveCriterionId, deriveGateId, deriveTextHash } from "./derive-id.js";
3
+ import { isRecord } from "./token-utils.js";
4
+ import { entryRound } from "./token-utils.js";
5
+ const USER_EFFECTS = new Set([
6
+ "production", "credentials", "data_migration", "public_api", "publish",
7
+ "payment", "external_communication",
8
+ ]);
9
+ const USER_RISK = /production|prod\b|credential|secret|permission|publish|release|database migration|schema migration|public api break|rm\s+-rf|reset\s+--hard|send email|payment|生产|上线|凭据|密钥|权限|发布|数据迁移|破坏性/i;
10
+ export function canonicalizeGateAction(action) {
11
+ return JSON.stringify({
12
+ description: action.description.trim(),
13
+ scope: [...action.scope].map((value) => value.trim()).filter(Boolean).sort(),
14
+ effects: [...action.effects].sort(),
15
+ reversibility: action.reversibility,
16
+ authorization: action.authorization,
17
+ });
18
+ }
19
+ export function gateActionHash(action) {
20
+ return createHash("sha256").update(canonicalizeGateAction(action)).digest("hex").slice(0, 16);
21
+ }
22
+ export function deriveStructuredGate(action) {
23
+ const actionHash = gateActionHash(action);
24
+ const highRisk = action.authorization === "user_required" ||
25
+ action.reversibility === "irreversible" ||
26
+ action.reversibility === "unknown" ||
27
+ action.effects.some((effect) => USER_EFFECTS.has(effect));
28
+ const userGate = highRisk || action.authorization === "unknown" || action.effects.length === 0;
29
+ return {
30
+ id: `gate-${actionHash}`,
31
+ actionHash,
32
+ gate: userGate
33
+ ? {
34
+ kind: "user",
35
+ question: `Authorize this action: ${action.description}`,
36
+ blockedScope: action.scope.length ? action.scope : [action.description],
37
+ allowedWork: ["Read-only investigation", "Local dry-run", "Prepare verification and rollback evidence"],
38
+ }
39
+ : {
40
+ kind: "agent",
41
+ problem: action.description,
42
+ requiredEvidence: action.scope,
43
+ suggestedResolution: "Resolve the technical blocker and submit concrete evidence in RoundReport.",
44
+ },
45
+ };
46
+ }
47
+ export function deriveGate(action, scope = []) {
48
+ if (typeof action !== "string")
49
+ return deriveStructuredGate(action);
50
+ const normalized = [action, ...scope].join("\n").trim();
51
+ const id = deriveGateId(normalized);
52
+ const gate = USER_RISK.test(normalized)
53
+ ? {
54
+ kind: "user",
55
+ question: `Authorize this high-risk action: ${action}`,
56
+ blockedScope: scope.length ? scope : [action],
57
+ allowedWork: ["Read-only investigation", "Local dry-run", "Prepare verification and rollback evidence"],
58
+ }
59
+ : {
60
+ kind: "agent",
61
+ problem: action,
62
+ requiredEvidence: scope,
63
+ suggestedResolution: "Resolve the technical blocker and submit concrete evidence in RoundReport.",
64
+ };
65
+ return { id, gate };
66
+ }
67
+ function report(entry) {
68
+ return isRecord(entry.round_report) ? entry.round_report : null;
69
+ }
70
+ /**
71
+ * Replay events in a deterministic logical order. Backends are allowed to
72
+ * return entries in different physical orders, so insertion order cannot be
73
+ * used to decide which gate decision or verification result wins.
74
+ * Shared with the policy-metrics replay path, which must fold events in the
75
+ * same order as the audit.
76
+ */
77
+ export function auditOrder(entries) {
78
+ return entries
79
+ .map((entry, index) => ({ entry, index }))
80
+ .sort((left, right) => {
81
+ const leftSequence = left.entry.event_sequence;
82
+ const rightSequence = right.entry.event_sequence;
83
+ if (typeof leftSequence === "number" && typeof rightSequence === "number" && leftSequence !== rightSequence) {
84
+ return leftSequence - rightSequence;
85
+ }
86
+ const roundDiff = entryRound(left.entry) - entryRound(right.entry);
87
+ if (roundDiff !== 0)
88
+ return roundDiff;
89
+ const timeLeft = Date.parse(left.entry.timestamp ?? "");
90
+ const timeRight = Date.parse(right.entry.timestamp ?? "");
91
+ const validLeft = Number.isFinite(timeLeft);
92
+ const validRight = Number.isFinite(timeRight);
93
+ if (validLeft && validRight && timeLeft !== timeRight) {
94
+ return timeLeft - timeRight;
95
+ }
96
+ if (validLeft !== validRight)
97
+ return validLeft ? -1 : 1;
98
+ const key = (entry) => [
99
+ entry.task_type ?? "",
100
+ entry.task_id ?? entry.id ?? "",
101
+ entry.gate_id ?? "",
102
+ entry.approved === true ? "1" : entry.approved === false ? "0" : "",
103
+ ].join("\u0000");
104
+ const keyDiff = key(left.entry).localeCompare(key(right.entry));
105
+ return keyDiff !== 0 ? keyDiff : left.index - right.index;
106
+ })
107
+ .map(({ entry }) => entry);
108
+ }
109
+ /** Read-only, replayable audit derived from accepted vault events. */
110
+ export function auditEntries(loopId, entries) {
111
+ const orderedEntries = auditOrder(entries);
112
+ const objectiveEntry = [...orderedEntries].reverse().find((entry) => isRecord(entry.loop_objective));
113
+ const objective = objectiveEntry && isRecord(objectiveEntry.loop_objective)
114
+ ? objectiveEntry.loop_objective
115
+ : null;
116
+ const declared = objective && Array.isArray(objective.success_criteria)
117
+ ? objective.success_criteria.filter((value) => typeof value === "string")
118
+ : [];
119
+ const evidenced = new Set();
120
+ const passed = new Set();
121
+ const failed = new Set();
122
+ const unavailable = new Set();
123
+ const evidenceRefs = new Set();
124
+ const gateState = new Map();
125
+ const obligations = new Map();
126
+ const criterionByTarget = new Map();
127
+ for (const criterion of declared) {
128
+ const normalized = criterion.trim().replace(/\s+/g, " ").toLowerCase();
129
+ criterionByTarget.set(normalized, criterion);
130
+ criterionByTarget.set(deriveCriterionId(normalized), criterion);
131
+ }
132
+ for (const entry of orderedEntries) {
133
+ if (entry.task_type === "gate_decision" && typeof entry.gate_id === "string") {
134
+ gateState.set(entry.gate_id, entry.approved === true);
135
+ }
136
+ if (entry.task_type === "gate_opened" && typeof entry.gate_id === "string") {
137
+ if (!gateState.has(entry.gate_id))
138
+ gateState.set(entry.gate_id, false);
139
+ }
140
+ const value = report(entry);
141
+ const evidence = value && isRecord(value.evidence) ? value.evidence : null;
142
+ if (value && isRecord(value.blocker) && typeof value.blocker.reason === "string") {
143
+ const refs = Array.isArray(value.blocker.references)
144
+ ? value.blocker.references.filter((ref) => typeof ref === "string")
145
+ : [];
146
+ const derived = isRecord(value.blocker.action)
147
+ ? deriveStructuredGate(value.blocker.action)
148
+ : deriveGate(value.blocker.reason, refs);
149
+ if (derived.gate.kind === "user" && !gateState.has(derived.id)) {
150
+ gateState.set(derived.id, false);
151
+ }
152
+ }
153
+ if (!evidence)
154
+ continue;
155
+ const provenance = isRecord(evidence.provenance) ? evidence.provenance : {};
156
+ if (Array.isArray(evidence.claims)) {
157
+ for (const raw of evidence.claims) {
158
+ if (!isRecord(raw) || typeof raw.targetId !== "string" || !Array.isArray(raw.evidenceRefs) || raw.evidenceRefs.length === 0)
159
+ continue;
160
+ const refs = raw.evidenceRefs.filter((ref) => typeof ref === "string");
161
+ const verified = refs.some((ref) => isRecord(provenance[ref]) &&
162
+ provenance[ref].status === "verified" && provenance[ref].source !== "agent");
163
+ if (verified) {
164
+ const normalizedTarget = raw.targetId.trim().replace(/\s+/g, " ").toLowerCase();
165
+ evidenced.add(criterionByTarget.get(normalizedTarget) ?? raw.targetId.trim());
166
+ }
167
+ for (const ref of refs)
168
+ evidenceRefs.add(ref);
169
+ }
170
+ }
171
+ if (Array.isArray(evidence.checks)) {
172
+ for (const raw of evidence.checks) {
173
+ if (!isRecord(raw) || typeof raw.name !== "string")
174
+ continue;
175
+ const checkProvenance = provenance[`check:${raw.name}`];
176
+ const evidenceStatus = isRecord(checkProvenance)
177
+ ? checkProvenance.status
178
+ : "unavailable";
179
+ const id = `reg-${deriveTextHash(raw.name, 12)}`;
180
+ const sourceRound = entryRound(entry);
181
+ if (raw.status === "passed" && evidenceStatus === "verified") {
182
+ passed.add(raw.name);
183
+ failed.delete(raw.name);
184
+ unavailable.delete(raw.name);
185
+ obligations.set(raw.name, { id, check: raw.name, sourceRound, status: "satisfied" });
186
+ }
187
+ else if (raw.status === "failed" || evidenceStatus === "contradicted") {
188
+ failed.add(raw.name);
189
+ passed.delete(raw.name);
190
+ unavailable.delete(raw.name);
191
+ obligations.set(raw.name, { id, check: raw.name, sourceRound, status: "contradicted" });
192
+ }
193
+ else {
194
+ unavailable.add(raw.name);
195
+ passed.delete(raw.name);
196
+ obligations.set(raw.name, { id, check: raw.name, sourceRound, status: "open" });
197
+ }
198
+ }
199
+ }
200
+ }
201
+ const missing = declared.filter((criterion) => !evidenced.has(criterion));
202
+ const unresolvedUserGates = [...gateState].filter(([, approved]) => !approved).map(([id]) => id);
203
+ const verdict = failed.size > 0 ? "contradicted"
204
+ : missing.length || unresolvedUserGates.length || unavailable.size ? "incomplete"
205
+ : "passed";
206
+ const sequences = entries.map((entry) => entry.event_sequence);
207
+ const sequenceValues = sequences.filter((value) => typeof value === "number" && Number.isInteger(value) && value > 0);
208
+ const sequenceSet = new Set(sequenceValues);
209
+ const sequenceComplete = entries.length === 0
210
+ || (sequenceValues.length === entries.length
211
+ && sequenceSet.size === entries.length
212
+ && Math.min(...sequenceValues) === 1
213
+ && Math.max(...sequenceValues) === entries.length
214
+ && entries.every((entry) => entry.loop_id === undefined || entry.loop_id === loopId));
215
+ return {
216
+ loopId,
217
+ verdict,
218
+ criteria: { declared, evidenced: [...evidenced].sort(), missing },
219
+ checks: { passed: [...passed].sort(), failed: [...failed].sort(), unavailable: [...unavailable].sort() },
220
+ unresolvedUserGates,
221
+ sequenceComplete,
222
+ evidenceRefs: [...evidenceRefs].sort(),
223
+ regressionObligations: [...obligations.values()].sort((a, b) => a.check.localeCompare(b.check)),
224
+ };
225
+ }
226
+ //# sourceMappingURL=cognitive-governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cognitive-governance.js","sourceRoot":"","sources":["../src/cognitive-governance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CompilerRoundProjection, SubGoal } from "./protocol.js";
2
+ type Entry = Record<string, unknown>;
3
+ type EntryProjection = (entry: Entry) => CompilerRoundProjection | null;
4
+ /** Derive the complete SubGoal lifecycle from prior entries and this projection. */
5
+ export declare function manageSubGoals(loopId: string, currentRound: number, lastRoundResult: CompilerRoundProjection | null, vaultContext: Record<string, unknown> | null, project: EntryProjection): SubGoal[];
6
+ export {};
7
+ //# sourceMappingURL=compiler-subgoals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-subgoals.d.ts","sourceRoot":"","sources":["../src/compiler-subgoals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAItE,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,uBAAuB,GAAG,IAAI,CAAC;AAoBxE,oFAAoF;AACpF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,uBAAuB,GAAG,IAAI,EAC/C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAC5C,OAAO,EAAE,eAAe,GACvB,OAAO,EAAE,CAwDX"}
@@ -0,0 +1,93 @@
1
+ import { deriveSubGoalId } from "./derive-id.js";
2
+ import { getPolicy } from "./policy.js";
3
+ import { makeSubGoal } from "./protocol.js";
4
+ import { jaccardSimilarity, entryRound } from "./token-utils.js";
5
+ function lineage(entry) {
6
+ const value = entry.loop_lineage;
7
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
8
+ }
9
+ function matchSubGoal(target, subGoals, threshold) {
10
+ const trimmed = target.trim();
11
+ const exact = subGoals.findIndex((goal) => goal.id === trimmed);
12
+ if (exact >= 0)
13
+ return exact;
14
+ let bestIdx = -1;
15
+ let bestScore = 0;
16
+ for (let i = 0; i < subGoals.length; i++) {
17
+ const score = jaccardSimilarity(trimmed, subGoals[i].description);
18
+ if (score > bestScore) {
19
+ bestScore = score;
20
+ bestIdx = i;
21
+ }
22
+ }
23
+ return bestScore >= threshold ? bestIdx : -1;
24
+ }
25
+ /** Derive the complete SubGoal lifecycle from prior entries and this projection. */
26
+ export function manageSubGoals(loopId, currentRound, lastRoundResult, vaultContext, project) {
27
+ const policy = getPolicy().evolution;
28
+ const entries = vaultContext && Array.isArray(vaultContext.results)
29
+ ? vaultContext.results.filter((value) => {
30
+ if (value === null || typeof value !== "object" || Array.isArray(value))
31
+ return false;
32
+ const entry = value;
33
+ return entry.loop_id === loopId || lineage(entry).loop_id === loopId;
34
+ })
35
+ : [];
36
+ const subGoals = [];
37
+ for (const entry of entries.filter((item) => entryRound(item) >= 1 && entryRound(item) < currentRound)) {
38
+ const descriptions = project(entry)?.discoveries?.emergedWork ?? [];
39
+ for (const description of descriptions) {
40
+ if (matchSubGoal(description, subGoals, policy.subgoal_dedup_threshold) >= 0)
41
+ continue;
42
+ const round = entryRound(entry);
43
+ subGoals.push(makeSubGoal({ id: deriveSubGoalId(description), description: description.trim(), status: "pending", declared_at_round: round, status_changed_at_round: round, priority: subGoals.length }));
44
+ }
45
+ }
46
+ if (lastRoundResult) {
47
+ const round = lastRoundResult.round || currentRound - 1;
48
+ for (const description of lastRoundResult.discoveries?.emergedWork ?? []) {
49
+ if (matchSubGoal(description, subGoals, policy.subgoal_dedup_threshold) >= 0)
50
+ continue;
51
+ subGoals.push(makeSubGoal({ id: deriveSubGoalId(description), description: description.trim(), status: "pending", declared_at_round: round, status_changed_at_round: round, priority: subGoals.length }));
52
+ }
53
+ const update = (items, status) => {
54
+ for (const description of items) {
55
+ const index = matchSubGoal(description, subGoals, policy.subgoal_match_threshold);
56
+ if (index < 0)
57
+ continue;
58
+ const goal = subGoals[index];
59
+ if (goal.status === "done" || goal.status === "canceled")
60
+ continue;
61
+ goal.status = status;
62
+ goal.status_changed_at_round = round;
63
+ if (status === "done")
64
+ goal.completed_at_round = round;
65
+ }
66
+ };
67
+ update(lastRoundResult.subGoalEvents?.completed ?? [], "done");
68
+ update(lastRoundResult.subGoalEvents?.blocked ?? [], "blocked");
69
+ update(lastRoundResult.subGoalEvents?.canceled ?? [], "canceled");
70
+ for (const goal of subGoals) {
71
+ if (goal.status !== "pending" && goal.status !== "in_progress")
72
+ continue;
73
+ if ((lastRoundResult.evidence?.criteriaMet ?? []).some((criterion) => jaccardSimilarity(criterion, goal.description) >= policy.subgoal_auto_complete_threshold)) {
74
+ goal.status = "done";
75
+ goal.status_changed_at_round = round;
76
+ goal.completed_at_round = round;
77
+ }
78
+ }
79
+ }
80
+ const rank = (status) => ({ in_progress: 0, pending: 1, blocked: 2, done: 3, canceled: 4 }[status]);
81
+ subGoals.sort((a, b) => {
82
+ const byStatus = rank(a.status) - rank(b.status);
83
+ if (byStatus !== 0)
84
+ return byStatus;
85
+ if (a.status === "pending")
86
+ return (currentRound - a.declared_at_round) - (currentRound - b.declared_at_round);
87
+ if (a.status === "done")
88
+ return (b.completed_at_round ?? 0) - (a.completed_at_round ?? 0);
89
+ return a.declared_at_round - b.declared_at_round;
90
+ });
91
+ return subGoals;
92
+ }
93
+ //# sourceMappingURL=compiler-subgoals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-subgoals.js","sourceRoot":"","sources":["../src/compiler-subgoals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Stable text normalization shared by every persisted cognitive ID. */
2
+ export declare function normalizeIdText(text: string): string;
3
+ /** Preserve the historical hash lengths by making the length explicit. */
4
+ export declare function deriveTextHash(text: string, length?: number): string;
5
+ export declare function deriveItemId(text: string): string;
6
+ export declare function deriveSubGoalId(text: string): string;
7
+ export declare function deriveConstraintId(text: string): string;
8
+ export declare function deriveCriterionId(text: string): string;
9
+ export declare function deriveGateId(text: string): string;
10
+ export declare function deriveTodoId(text: string): string;
11
+ export declare function isStableItemId(value: string): boolean;
12
+ //# sourceMappingURL=derive-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-id.d.ts","sourceRoot":"","sources":["../src/derive-id.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAEhE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD"}
@@ -0,0 +1,31 @@
1
+ import { createHash } from "node:crypto";
2
+ /** Stable text normalization shared by every persisted cognitive ID. */
3
+ export function normalizeIdText(text) {
4
+ return text.trim().replace(/\s+/g, " ").toLowerCase();
5
+ }
6
+ /** Preserve the historical hash lengths by making the length explicit. */
7
+ export function deriveTextHash(text, length = 12) {
8
+ return createHash("sha256").update(normalizeIdText(text)).digest("hex").slice(0, length);
9
+ }
10
+ export function deriveItemId(text) {
11
+ return deriveTextHash(text, 8);
12
+ }
13
+ export function deriveSubGoalId(text) {
14
+ return `sg-${deriveTextHash(text, 8)}`;
15
+ }
16
+ export function deriveConstraintId(text) {
17
+ return `c-${deriveTextHash(text, 8)}`;
18
+ }
19
+ export function deriveCriterionId(text) {
20
+ return `cr-${deriveTextHash(text, 8)}`;
21
+ }
22
+ export function deriveGateId(text) {
23
+ return `gate-${deriveTextHash(text, 12)}`;
24
+ }
25
+ export function deriveTodoId(text) {
26
+ return `todo-${deriveTextHash(text, 8)}`;
27
+ }
28
+ export function isStableItemId(value) {
29
+ return /^(?:c|cr|sg)-[a-f0-9]{8}$/i.test(value);
30
+ }
31
+ //# sourceMappingURL=derive-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-id.js","sourceRoot":"","sources":["../src/derive-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE;IACtD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,QAAQ,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,QAAQ,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
@@ -1,13 +1,11 @@
1
1
  /** EvidenceProvider — Pluggable evidence capture interface (v1.18).
2
2
  *
3
- * Before this module, evidence capture was hardcoded to git via
4
- * captureGitModifiedFiles() in two places (runtime.ts, session.ts).
5
3
  * This module defines an abstract EvidenceProvider interface so
6
4
  * additional evidence sources (test runners, linters, bundle analysis)
7
5
  * can be added without touching the verification pipeline.
8
6
  *
9
7
  * Built-in provider: GitEvidenceProvider — git file state capture with
10
- * parallel async execution (v2.0.1) and a synchronous fallback.
8
+ * parallel async execution.
11
9
  */
12
10
  import type { CommandEvidencePolicy } from "./policy.js";
13
11
  /** A snapshot of evidence captured by a single provider. */
@@ -21,6 +19,12 @@ export interface ProviderSnapshot {
21
19
  files: string[];
22
20
  /** Provider-specific structured data. */
23
21
  data: Record<string, unknown>;
22
+ /**
23
+ * Explicitly declares that this provider can verify claims. Providers that
24
+ * only report observations must leave this unset; their snapshots are
25
+ * never promoted to runtime-verified evidence.
26
+ */
27
+ claimCapable?: boolean;
24
28
  }
25
29
  /** Interface for evidence capture providers.
26
30
  *
@@ -41,6 +45,11 @@ export interface EvidenceProvider {
41
45
  * (e.g. git not installed, no test config found). */
42
46
  capture(context?: EvidenceCaptureContext): EvidenceCaptureResult;
43
47
  }
48
+ /** Raised when the synchronous collector is asked to run an async provider. */
49
+ export declare class AsyncEvidenceProviderError extends Error {
50
+ readonly code: "async_provider_requires_collect_async";
51
+ constructor(provider: string);
52
+ }
44
53
  export interface EvidenceCollectOptions {
45
54
  timeoutMs?: number;
46
55
  loopId?: string;
@@ -54,7 +63,7 @@ export declare function unregisterEvidenceProvider(name: string): boolean;
54
63
  *
55
64
  * Usage:
56
65
  * const collector = new EvidenceCollector([new GitEvidenceProvider()]);
57
- * const snapshots = collector.collect();
66
+ * const snapshots = await collector.collectAsync();
58
67
  * // snapshots = [{ provider: "git", files: [...], data: {...} }]
59
68
  */
60
69
  export declare class EvidenceCollector {
@@ -65,9 +74,13 @@ export declare class EvidenceCollector {
65
74
  static fromProviderNames(providerNames: string[]): EvidenceCollector;
66
75
  /** Build built-ins and explicitly configured command providers. */
67
76
  static fromPolicy(): EvidenceCollector;
68
- /** Run all providers and return non-null snapshots.
69
- * Providers that return null (e.g. git not available) are silently
70
- * skipped — the caller handles missing evidence. */
77
+ /** Run synchronous providers and return their non-null snapshots.
78
+ *
79
+ * The built-in Git provider is asynchronous. Callers that may include
80
+ * asynchronous providers must use collectAsync(); silently treating an
81
+ * async provider as unavailable would turn a caller limitation into a
82
+ * misleading evidence result.
83
+ */
71
84
  collect(options?: EvidenceCollectOptions): ProviderSnapshot[];
72
85
  /** Capture all providers concurrently with per-provider timeout isolation. */
73
86
  collectAsync(options?: EvidenceCollectOptions): Promise<ProviderSnapshot[]>;
@@ -101,6 +114,9 @@ export interface GitFileState {
101
114
  staged: string[];
102
115
  /** Untracked files not yet known to git (git ls-files --others --exclude-standard). */
103
116
  untracked: string[];
117
+ /** v2.13: HEAD commit hash for backtrack restore point.
118
+ * undefined when git is unavailable or not a repository. */
119
+ head?: string;
104
120
  }
105
121
  /** v2.0.1: Capture git file state using parallel async execFile.
106
122
  *
@@ -115,28 +131,12 @@ export interface GitFileState {
115
131
  * On a normal repo (~200ms/command): ~200ms vs ~600ms sequential.
116
132
  * On Windows with antivirus (~4s/command): ~4s vs ~12s sequential. */
117
133
  export declare function captureGitFileStateAsync(signal?: AbortSignal, timeoutMs?: number): Promise<GitFileState | null>;
118
- /** v1.17 (sync): Capture git file state using sequential execFileSync.
119
- *
120
- * @deprecated Use captureGitFileStateAsync() for the primary path.
121
- * This sync fallback exists for legacy callers that cannot be made async
122
- * (e.g. reconstructSession during startup). Uses execFileSync — shell-free,
123
- * unlike the old execSync-based implementation. */
124
- export declare function captureGitFileState(): GitFileState | null;
125
- /** v1.16: Capture modified files as a flat sorted array.
126
- * @deprecated v1.17 — Use captureGitFileState() for full coverage. */
127
- export declare function captureGitModifiedFiles(): string[] | null;
128
- /** Captures git file state (tracked, staged, untracked) via the async
129
- * captureGitFileStateAsync() when a context is provided, falling back
130
- * to the synchronous captureGitFileState() for legacy callers. */
134
+ /** Captures git file state (tracked, staged, untracked) via the async provider. */
131
135
  export declare class GitEvidenceProvider implements EvidenceProvider {
132
136
  readonly name = "git";
133
- capture(context?: EvidenceCaptureContext): ProviderSnapshot | null | Promise<ProviderSnapshot | null>;
137
+ capture(context?: EvidenceCaptureContext): Promise<ProviderSnapshot | null>;
134
138
  }
135
- /** Extract merged file list from evidence snapshots for backward compat
136
- * with runtimeFilesChanged (string[] | null).
137
- *
138
- * Looks for the "git" provider first; falls back to merging all
139
- * providers' files arrays (deduplicated). */
139
+ /** Extract the merged file list from provider snapshots for read-only views. */
140
140
  export declare function extractFilesFromSnapshots(snapshots: ProviderSnapshot[]): string[] | null;
141
141
  /** Return provider snapshots narrowed to evidence produced during this round.
142
142
  * The full provider payload remains available in data, while files contains
@@ -1 +1 @@
1
- {"version":3,"file":"evidence-provider.d.ts","sourceRoot":"","sources":["../src/evidence-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence-provider.d.ts","sourceRoot":"","sources":["../src/evidence-provider.ts"],"names":[],"mappings":"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"}