loopforge 1.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/adapter.d.ts +17 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +228 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/backends/fs.d.ts +31 -0
  8. package/dist/backends/fs.d.ts.map +1 -0
  9. package/dist/backends/fs.js +308 -0
  10. package/dist/backends/fs.js.map +1 -0
  11. package/dist/backends/interface.d.ts +42 -0
  12. package/dist/backends/interface.d.ts.map +1 -0
  13. package/dist/backends/interface.js +7 -0
  14. package/dist/backends/interface.js.map +1 -0
  15. package/dist/builder.d.ts +17 -0
  16. package/dist/builder.d.ts.map +1 -0
  17. package/dist/builder.js +205 -0
  18. package/dist/builder.js.map +1 -0
  19. package/dist/cli.d.ts +7 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +360 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/engine.d.ts +42 -0
  24. package/dist/engine.d.ts.map +1 -0
  25. package/dist/engine.js +595 -0
  26. package/dist/engine.js.map +1 -0
  27. package/dist/generate-schema.d.ts +12 -0
  28. package/dist/generate-schema.d.ts.map +1 -0
  29. package/dist/generate-schema.js +278 -0
  30. package/dist/generate-schema.js.map +1 -0
  31. package/dist/index.d.ts +27 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +30 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/loop-compiler.d.ts +37 -0
  36. package/dist/loop-compiler.d.ts.map +1 -0
  37. package/dist/loop-compiler.js +1232 -0
  38. package/dist/loop-compiler.js.map +1 -0
  39. package/dist/policy.d.ts +44 -0
  40. package/dist/policy.d.ts.map +1 -0
  41. package/dist/policy.js +111 -0
  42. package/dist/policy.js.map +1 -0
  43. package/dist/protocol.d.ts +167 -0
  44. package/dist/protocol.d.ts.map +1 -0
  45. package/dist/protocol.js +198 -0
  46. package/dist/protocol.js.map +1 -0
  47. package/dist/replay.d.ts +19 -0
  48. package/dist/replay.d.ts.map +1 -0
  49. package/dist/replay.js +198 -0
  50. package/dist/replay.js.map +1 -0
  51. package/dist/tests/adapter.test.d.ts +2 -0
  52. package/dist/tests/adapter.test.d.ts.map +1 -0
  53. package/dist/tests/adapter.test.js +104 -0
  54. package/dist/tests/adapter.test.js.map +1 -0
  55. package/dist/tests/builder.test.d.ts +2 -0
  56. package/dist/tests/builder.test.d.ts.map +1 -0
  57. package/dist/tests/builder.test.js +122 -0
  58. package/dist/tests/builder.test.js.map +1 -0
  59. package/dist/tests/engine.test.d.ts +2 -0
  60. package/dist/tests/engine.test.d.ts.map +1 -0
  61. package/dist/tests/engine.test.js +200 -0
  62. package/dist/tests/engine.test.js.map +1 -0
  63. package/dist/tests/generate-schema.test.d.ts +8 -0
  64. package/dist/tests/generate-schema.test.d.ts.map +1 -0
  65. package/dist/tests/generate-schema.test.js +196 -0
  66. package/dist/tests/generate-schema.test.js.map +1 -0
  67. package/dist/tests/loop-compiler.test.d.ts +2 -0
  68. package/dist/tests/loop-compiler.test.d.ts.map +1 -0
  69. package/dist/tests/loop-compiler.test.js +387 -0
  70. package/dist/tests/loop-compiler.test.js.map +1 -0
  71. package/dist/tests/policy.test.d.ts +2 -0
  72. package/dist/tests/policy.test.d.ts.map +1 -0
  73. package/dist/tests/policy.test.js +59 -0
  74. package/dist/tests/policy.test.js.map +1 -0
  75. package/dist/tests/protocol.test.d.ts +2 -0
  76. package/dist/tests/protocol.test.d.ts.map +1 -0
  77. package/dist/tests/protocol.test.js +63 -0
  78. package/dist/tests/protocol.test.js.map +1 -0
  79. package/dist/tests/replay.test.d.ts +2 -0
  80. package/dist/tests/replay.test.d.ts.map +1 -0
  81. package/dist/tests/replay.test.js +194 -0
  82. package/dist/tests/replay.test.js.map +1 -0
  83. package/loop_policy.json +44 -0
  84. package/package.json +58 -0
@@ -0,0 +1,278 @@
1
+ #!/usr/bin/env node
2
+ /** Generate JSON Schema (draft 2020-12) from protocol.ts TypeScript definitions.
3
+ *
4
+ * Uses the TypeScript Compiler API to parse type declarations and emit a
5
+ * self-consistent JSON Schema. The generated schema is the single source of
6
+ * truth for the wire protocol — it is regenerated on every build.
7
+ *
8
+ * Usage: node dist/generate-schema.js
9
+ * or: npx tsx src/generate-schema.ts (during development)
10
+ */
11
+ import * as ts from "typescript";
12
+ import { writeFileSync } from "node:fs";
13
+ import { resolve } from "node:path";
14
+ // ═══════════════════════════════════════════════════════════════════════════
15
+ // JSDoc extraction
16
+ // ═══════════════════════════════════════════════════════════════════════════
17
+ function getNodeDescription(node) {
18
+ const jsDocs = ts.getJSDocCommentsAndTags(node);
19
+ if (!jsDocs || jsDocs.length === 0)
20
+ return undefined;
21
+ const first = jsDocs[0];
22
+ if (ts.isJSDoc(first)) {
23
+ if (typeof first.comment === "string")
24
+ return first.comment.trim();
25
+ if (Array.isArray(first.comment)) {
26
+ return first.comment.map((t) => t.text).join("").trim();
27
+ }
28
+ }
29
+ return undefined;
30
+ }
31
+ // ═══════════════════════════════════════════════════════════════════════════
32
+ // Enum conversion
33
+ // ═══════════════════════════════════════════════════════════════════════════
34
+ function convertEnum(node) {
35
+ const values = [];
36
+ for (const member of node.members) {
37
+ const init = member.initializer;
38
+ if (init && ts.isStringLiteral(init)) {
39
+ values.push(init.text);
40
+ }
41
+ else {
42
+ // Numeric or computed — fall back to member name
43
+ values.push(member.name.getText());
44
+ }
45
+ }
46
+ const result = {
47
+ type: "string",
48
+ enum: values,
49
+ };
50
+ const desc = getNodeDescription(node);
51
+ if (desc)
52
+ result.description = desc;
53
+ return result;
54
+ }
55
+ // ═══════════════════════════════════════════════════════════════════════════
56
+ // Type node conversion (core recursive dispatcher)
57
+ // ═══════════════════════════════════════════════════════════════════════════
58
+ function convertTypeNode(typeNode, checker) {
59
+ // Primitives
60
+ if (typeNode.kind === ts.SyntaxKind.StringKeyword)
61
+ return { type: "string" };
62
+ if (typeNode.kind === ts.SyntaxKind.NumberKeyword)
63
+ return { type: "number" };
64
+ if (typeNode.kind === ts.SyntaxKind.BooleanKeyword)
65
+ return { type: "boolean" };
66
+ // Arrays: T[]
67
+ if (ts.isArrayTypeNode(typeNode)) {
68
+ const elementType = convertTypeNode(typeNode.elementType, checker);
69
+ return { type: "array", items: elementType };
70
+ }
71
+ // Union types: T | null, A | B, etc.
72
+ if (ts.isUnionTypeNode(typeNode)) {
73
+ const types = typeNode.types;
74
+ // null in TS AST: LiteralType wrapping NullKeyword
75
+ const nullIndex = types.findIndex((t) => t.kind === ts.SyntaxKind.NullKeyword ||
76
+ t.kind === ts.SyntaxKind.UndefinedKeyword ||
77
+ (ts.isLiteralTypeNode(t) &&
78
+ (t.literal.kind === ts.SyntaxKind.NullKeyword ||
79
+ t.literal.kind === ts.SyntaxKind.UndefinedKeyword)));
80
+ const nonNull = types.filter((_, i) => i !== nullIndex);
81
+ // Simple `T | null` or `T | undefined`
82
+ if (nullIndex >= 0 && nonNull.length === 1) {
83
+ const inner = convertTypeNode(nonNull[0], checker);
84
+ // If inner is a $ref, use anyOf; otherwise use type array
85
+ if (inner.$ref) {
86
+ return {
87
+ anyOf: [inner, { type: "null" }],
88
+ };
89
+ }
90
+ const innerType = inner.type;
91
+ return { type: [innerType, "null"] };
92
+ }
93
+ // Multi-type union without simple null — anyOf
94
+ const anyOf = [];
95
+ for (const t of types) {
96
+ const kind = t.kind;
97
+ if (kind === ts.SyntaxKind.NullKeyword ||
98
+ kind === ts.SyntaxKind.UndefinedKeyword) {
99
+ anyOf.push({ type: "null" });
100
+ }
101
+ else if (ts.isLiteralTypeNode(t) &&
102
+ (t.literal.kind === ts.SyntaxKind.NullKeyword ||
103
+ t.literal.kind === ts.SyntaxKind.UndefinedKeyword)) {
104
+ anyOf.push({ type: "null" });
105
+ }
106
+ else {
107
+ anyOf.push(convertTypeNode(t, checker));
108
+ }
109
+ }
110
+ return { anyOf };
111
+ }
112
+ // Type references: InterfaceName, EnumName, Record<K,V>, Array<T>
113
+ if (ts.isTypeReferenceNode(typeNode)) {
114
+ const sym = checker.getSymbolAtLocation(typeNode.typeName);
115
+ if (sym) {
116
+ const name = sym.getName();
117
+ // Record<string, unknown> → object with additionalProperties
118
+ if (name === "Record" && typeNode.typeArguments?.length === 2) {
119
+ const _keyType = typeNode.typeArguments[0];
120
+ const valueType = typeNode.typeArguments[1];
121
+ // unknown values → open object
122
+ if (valueType.kind === ts.SyntaxKind.UnknownKeyword ||
123
+ valueType.kind === ts.SyntaxKind.AnyKeyword) {
124
+ return { type: "object", additionalProperties: true };
125
+ }
126
+ // Record<string, T> → object with additionalProperties: T
127
+ const valSchema = convertTypeNode(valueType, checker);
128
+ return { type: "object", additionalProperties: valSchema };
129
+ }
130
+ // Array<T> (generic form)
131
+ if (name === "Array" && typeNode.typeArguments?.length === 1) {
132
+ const elementType = convertTypeNode(typeNode.typeArguments[0], checker);
133
+ return { type: "array", items: elementType };
134
+ }
135
+ // Resolve to known $defs name
136
+ const declarations = sym.getDeclarations();
137
+ if (declarations?.length) {
138
+ const decl = declarations[0];
139
+ if (ts.isInterfaceDeclaration(decl) ||
140
+ ts.isEnumDeclaration(decl) ||
141
+ ts.isTypeAliasDeclaration(decl)) {
142
+ return { $ref: `#/$defs/${decl.name.text}` };
143
+ }
144
+ }
145
+ // Fallback: use symbol name as $ref
146
+ return { $ref: `#/$defs/${name}` };
147
+ }
148
+ // Unresolved type reference — fallback to type name text
149
+ const typeName = typeNode.typeName.getText();
150
+ if (typeName === "Record" || typeName === "Array") {
151
+ return { type: "object" };
152
+ }
153
+ return { type: "string" }; // safest fallback
154
+ }
155
+ // Literal types: 'foo' | 'bar'
156
+ if (ts.isLiteralTypeNode(typeNode)) {
157
+ const literal = typeNode.literal;
158
+ if (ts.isStringLiteral(literal)) {
159
+ return { type: "string", enum: [literal.text] };
160
+ }
161
+ if (ts.isNumericLiteral(literal)) {
162
+ return { type: "number" };
163
+ }
164
+ }
165
+ // Parenthesized type: (T)
166
+ if (ts.isParenthesizedTypeNode(typeNode)) {
167
+ return convertTypeNode(typeNode.type, checker);
168
+ }
169
+ // Fallback: unknown type → string
170
+ return { type: "string" };
171
+ }
172
+ // ═══════════════════════════════════════════════════════════════════════════
173
+ // Helpers
174
+ // ═══════════════════════════════════════════════════════════════════════════
175
+ /** Check if a type node includes null (T | null). */
176
+ function typeIncludesNull(typeNode) {
177
+ if (!typeNode)
178
+ return false;
179
+ if (typeNode.kind === ts.SyntaxKind.NullKeyword ||
180
+ typeNode.kind === ts.SyntaxKind.UndefinedKeyword) {
181
+ return true;
182
+ }
183
+ if (ts.isUnionTypeNode(typeNode)) {
184
+ return typeNode.types.some((t) => t.kind === ts.SyntaxKind.NullKeyword ||
185
+ t.kind === ts.SyntaxKind.UndefinedKeyword ||
186
+ (ts.isLiteralTypeNode(t) &&
187
+ (t.literal.kind === ts.SyntaxKind.NullKeyword ||
188
+ t.literal.kind === ts.SyntaxKind.UndefinedKeyword)));
189
+ }
190
+ return false;
191
+ }
192
+ // ═══════════════════════════════════════════════════════════════════════════
193
+ // Interface conversion
194
+ // ═══════════════════════════════════════════════════════════════════════════
195
+ function convertInterface(node, checker) {
196
+ const properties = {};
197
+ const required = [];
198
+ let hasIndexSignature = false;
199
+ for (const member of node.members) {
200
+ // Index signature: [key: string]: unknown
201
+ if (ts.isIndexSignatureDeclaration(member)) {
202
+ hasIndexSignature = true;
203
+ continue;
204
+ }
205
+ if (!ts.isPropertySignature(member))
206
+ continue;
207
+ const propName = member.name.getText();
208
+ // Optional properties (marked with ?) are NOT required.
209
+ // Properties with T | null type are also treated as optional (JSON
210
+ // has no distinction between absent and null in wire format).
211
+ const isOptional = !!member.questionToken || typeIncludesNull(member.type);
212
+ if (!isOptional) {
213
+ required.push(propName);
214
+ }
215
+ if (member.type) {
216
+ properties[propName] = convertTypeNode(member.type, checker);
217
+ }
218
+ else {
219
+ properties[propName] = { type: "string" }; // untyped → assume string
220
+ }
221
+ }
222
+ const result = {
223
+ type: "object",
224
+ properties,
225
+ };
226
+ if (required.length > 0)
227
+ result.required = required;
228
+ if (hasIndexSignature)
229
+ result.additionalProperties = true;
230
+ const desc = getNodeDescription(node);
231
+ if (desc)
232
+ result.description = desc;
233
+ return result;
234
+ }
235
+ // ═══════════════════════════════════════════════════════════════════════════
236
+ // Main
237
+ // ═══════════════════════════════════════════════════════════════════════════
238
+ function generateSchema() {
239
+ const srcPath = resolve(process.cwd(), "src/protocol.ts");
240
+ const program = ts.createProgram([srcPath], {
241
+ target: ts.ScriptTarget.ES2022,
242
+ module: ts.ModuleKind.Node16,
243
+ strict: true,
244
+ noEmit: true,
245
+ skipLibCheck: true,
246
+ });
247
+ const sourceFile = program.getSourceFile(srcPath);
248
+ if (!sourceFile) {
249
+ console.error(`ERROR: Could not find source file: ${srcPath}`);
250
+ process.exit(1);
251
+ }
252
+ const checker = program.getTypeChecker();
253
+ const defs = {};
254
+ for (const stmt of sourceFile.statements) {
255
+ if (ts.isEnumDeclaration(stmt)) {
256
+ defs[stmt.name.text] = convertEnum(stmt);
257
+ }
258
+ else if (ts.isInterfaceDeclaration(stmt)) {
259
+ defs[stmt.name.text] = convertInterface(stmt, checker);
260
+ }
261
+ // Skip functions, variables, type aliases, etc.
262
+ }
263
+ const schema = {
264
+ $schema: "https://json-schema.org/draft/2020-12/schema",
265
+ $id: "https://loopforge.dev/loopforge-protocol.json",
266
+ title: "LoopForge Protocol",
267
+ description: "JSON Schema for the LoopForge loop-compile protocol. " +
268
+ "Defines the wire format for all 3 modes (loop_compile, feedback, review) " +
269
+ "and internal types. Language-agnostic — reference implementation in TypeScript.",
270
+ type: "object",
271
+ $defs: defs,
272
+ };
273
+ const outputPath = resolve(process.cwd(), "..", "loopforge-protocol.json");
274
+ writeFileSync(outputPath, JSON.stringify(schema, null, 2) + "\n");
275
+ console.log(`Generated JSON Schema → ${outputPath} (${Object.keys(defs).length} $defs)`);
276
+ }
277
+ generateSchema();
278
+ //# sourceMappingURL=generate-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-schema.js","sourceRoot":"","sources":["../src/generate-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /** LoopForge — Loop-Time Intelligence Layer for AI coding agents.
2
+ *
3
+ * TypeScript reference implementation v1.0.
4
+ *
5
+ * Usage:
6
+ * import { handle, LoopForgeEngine, ReplayBackend, compileLoop } from "loopforge";
7
+ *
8
+ * // As a sub-agent adapter
9
+ * const result = handle('{"mode":"loop_compile","loop_id":"test","round":1,"task":"Audit ERC20"}');
10
+ *
11
+ * // As a library
12
+ * const engine = createEngine();
13
+ * const response = engine.invokeLoopCompile(request);
14
+ */
15
+ export { Mode, AgentStatus, Technique, makeAnalysis, makeVaultConfig, makeExecutionFeedback, makeLoopObjective, makeLoopHealth, makeRollingSummary, makeTaskAlignment, makeLoopRoundResult, makeLoopCompileRequest, makeLoopCompileResponse, makeSessionState, makeTaskId, toDict, } from "./protocol.js";
16
+ export type { Analysis, VaultConfig, ExecutionFeedback, LoopForgeRequest, LoopObjective, LoopHealth, RollingSummary, TaskAlignment, LoopRoundResult, LoopCompileRequest, LoopCompileResponse, LoopForgeResponse, SessionState, AgentLoopResult, } from "./protocol.js";
17
+ export { getPolicy, loadPolicy, resetPolicy, DEFAULT_POLICY, } from "./policy.js";
18
+ export type { LoopPolicy, ConstraintsPolicy, SummaryPolicy, RecompileTriggersPolicy, TechniquePolicy, EnginePolicy, BackendPolicy, } from "./policy.js";
19
+ export type { VaultBackend, VaultEntry } from "./backends/interface.js";
20
+ export { FSBackend } from "./backends/fs.js";
21
+ export { routeTechnique, routeTechniqueAdaptive, scoreQuality, extractGlobalConstraints, TECHNIQUE_REFERENCE, } from "./builder.js";
22
+ export { compileLoop, decideLevel, compileL2, alignTask, checkLoopHealth, computeAdvisories, computeGoalTextHash, deriveGoalId, getPreviousRound, } from "./loop-compiler.js";
23
+ export { ReplayBackend } from "./replay.js";
24
+ export { LoopForgeEngine, createEngine, } from "./engine.js";
25
+ export type { EngineMetrics } from "./engine.js";
26
+ export { handle, main } from "./adapter.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,MAAM,GACP,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EACL,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ /** LoopForge — Loop-Time Intelligence Layer for AI coding agents.
2
+ *
3
+ * TypeScript reference implementation v1.0.
4
+ *
5
+ * Usage:
6
+ * import { handle, LoopForgeEngine, ReplayBackend, compileLoop } from "loopforge";
7
+ *
8
+ * // As a sub-agent adapter
9
+ * const result = handle('{"mode":"loop_compile","loop_id":"test","round":1,"task":"Audit ERC20"}');
10
+ *
11
+ * // As a library
12
+ * const engine = createEngine();
13
+ * const response = engine.invokeLoopCompile(request);
14
+ */
15
+ // Protocol types
16
+ export { Mode, AgentStatus, Technique, makeAnalysis, makeVaultConfig, makeExecutionFeedback, makeLoopObjective, makeLoopHealth, makeRollingSummary, makeTaskAlignment, makeLoopRoundResult, makeLoopCompileRequest, makeLoopCompileResponse, makeSessionState, makeTaskId, toDict, } from "./protocol.js";
17
+ // Policy
18
+ export { getPolicy, loadPolicy, resetPolicy, DEFAULT_POLICY, } from "./policy.js";
19
+ export { FSBackend } from "./backends/fs.js";
20
+ // Builder
21
+ export { routeTechnique, routeTechniqueAdaptive, scoreQuality, extractGlobalConstraints, TECHNIQUE_REFERENCE, } from "./builder.js";
22
+ // Loop Compiler
23
+ export { compileLoop, decideLevel, compileL2, alignTask, checkLoopHealth, computeAdvisories, computeGoalTextHash, deriveGoalId, getPreviousRound, } from "./loop-compiler.js";
24
+ // Replay
25
+ export { ReplayBackend } from "./replay.js";
26
+ // Engine
27
+ export { LoopForgeEngine, createEngine, } from "./engine.js";
28
+ // Adapter
29
+ export { handle, main } from "./adapter.js";
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,iBAAiB;AACjB,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,MAAM,GACP,MAAM,eAAe,CAAC;AAmBvB,SAAS;AACT,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAcrB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,UAAU;AACV,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,gBAAgB;AAChB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,SAAS;AACT,OAAO,EACL,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB,UAAU;AACV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,37 @@
1
+ /** LoopForge-loop_compile — Loop Compiler (v3.5 core).
2
+ *
3
+ * Pure-function module for per-loop-iteration prompt compilation.
4
+ *
5
+ * Two layers:
6
+ * Layer 1 (Hard Gates): decideLevel() — 4-gate routing that CAN change compile level.
7
+ * Layer 2 (Soft Advisories): computeAdvisories() — warnings/alignment/health, NEVER
8
+ * change compile level directly.
9
+ *
10
+ * Compilation: compileL0() / compileL1() / compileL2() produce the actual prompt.
11
+ */
12
+ import { type LoopCompileRequest, type LoopCompileResponse, type LoopHealth, type TaskAlignment } from "./protocol.js";
13
+ export declare function computeGoalTextHash(task: string): string;
14
+ export declare function deriveGoalId(loopId: string, task: string, explicitGoalId?: string): string;
15
+ interface PreviousRound {
16
+ goal_id: string;
17
+ goal_text_hash: string;
18
+ quality_score: number;
19
+ success: boolean;
20
+ task: string;
21
+ constraints_active: string[];
22
+ prompt_text: string;
23
+ }
24
+ export declare function getPreviousRound(loopId: string, roundNum: number, vaultContext: Record<string, unknown> | null): PreviousRound | null;
25
+ export declare function decideLevel(request: LoopCompileRequest, vaultContext: Record<string, unknown> | null): string;
26
+ export declare function alignTask(proposedTask: string, request: LoopCompileRequest, vaultContext: Record<string, unknown> | null): TaskAlignment;
27
+ export declare function checkLoopHealth(loopId: string, request: LoopCompileRequest, vaultContext: Record<string, unknown> | null): LoopHealth;
28
+ export declare function computeAdvisories(request: LoopCompileRequest, vaultContext: Record<string, unknown> | null): {
29
+ warnings: string[];
30
+ suggestedNextTask: string;
31
+ alignment: TaskAlignment | null;
32
+ health: LoopHealth | null;
33
+ };
34
+ export declare function compileL2(request: LoopCompileRequest, vaultContext: Record<string, unknown> | null): LoopCompileResponse;
35
+ export declare function compileLoop(request: LoopCompileRequest, vaultContext?: Record<string, unknown> | null): LoopCompileResponse;
36
+ export {};
37
+ //# sourceMappingURL=loop-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-compiler.d.ts","sourceRoot":"","sources":["../src/loop-compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAGf,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AA8DvB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,cAAc,SAAK,GAClB,MAAM,CAKR;AAMD,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC3C,aAAa,GAAG,IAAI,CAoBtB;AA0TD,wBAAgB,WAAW,CACzB,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC3C,MAAM,CAwCR;AAMD,wBAAgB,SAAS,CACvB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC3C,aAAa,CAoDf;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC3C,UAAU,CA0FZ;AAkBD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC3C;IACD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B,CAoEA;AAsSD,wBAAgB,SAAS,CACvB,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC3C,mBAAmB,CAiFrB;AAgYD,wBAAgB,WAAW,CACzB,OAAO,EAAE,kBAAkB,EAC3B,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,GAClD,mBAAmB,CA0BrB"}