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.
- package/LICENSE +21 -0
- package/README.md +75 -0
- package/dist/adapter.d.ts +17 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +228 -0
- package/dist/adapter.js.map +1 -0
- package/dist/backends/fs.d.ts +31 -0
- package/dist/backends/fs.d.ts.map +1 -0
- package/dist/backends/fs.js +308 -0
- package/dist/backends/fs.js.map +1 -0
- package/dist/backends/interface.d.ts +42 -0
- package/dist/backends/interface.d.ts.map +1 -0
- package/dist/backends/interface.js +7 -0
- package/dist/backends/interface.js.map +1 -0
- package/dist/builder.d.ts +17 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +205 -0
- package/dist/builder.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +360 -0
- package/dist/cli.js.map +1 -0
- package/dist/engine.d.ts +42 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +595 -0
- package/dist/engine.js.map +1 -0
- package/dist/generate-schema.d.ts +12 -0
- package/dist/generate-schema.d.ts.map +1 -0
- package/dist/generate-schema.js +278 -0
- package/dist/generate-schema.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/loop-compiler.d.ts +37 -0
- package/dist/loop-compiler.d.ts.map +1 -0
- package/dist/loop-compiler.js +1232 -0
- package/dist/loop-compiler.js.map +1 -0
- package/dist/policy.d.ts +44 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +111 -0
- package/dist/policy.js.map +1 -0
- package/dist/protocol.d.ts +167 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +198 -0
- package/dist/protocol.js.map +1 -0
- package/dist/replay.d.ts +19 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +198 -0
- package/dist/replay.js.map +1 -0
- package/dist/tests/adapter.test.d.ts +2 -0
- package/dist/tests/adapter.test.d.ts.map +1 -0
- package/dist/tests/adapter.test.js +104 -0
- package/dist/tests/adapter.test.js.map +1 -0
- package/dist/tests/builder.test.d.ts +2 -0
- package/dist/tests/builder.test.d.ts.map +1 -0
- package/dist/tests/builder.test.js +122 -0
- package/dist/tests/builder.test.js.map +1 -0
- package/dist/tests/engine.test.d.ts +2 -0
- package/dist/tests/engine.test.d.ts.map +1 -0
- package/dist/tests/engine.test.js +200 -0
- package/dist/tests/engine.test.js.map +1 -0
- package/dist/tests/generate-schema.test.d.ts +8 -0
- package/dist/tests/generate-schema.test.d.ts.map +1 -0
- package/dist/tests/generate-schema.test.js +196 -0
- package/dist/tests/generate-schema.test.js.map +1 -0
- package/dist/tests/loop-compiler.test.d.ts +2 -0
- package/dist/tests/loop-compiler.test.d.ts.map +1 -0
- package/dist/tests/loop-compiler.test.js +387 -0
- package/dist/tests/loop-compiler.test.js.map +1 -0
- package/dist/tests/policy.test.d.ts +2 -0
- package/dist/tests/policy.test.d.ts.map +1 -0
- package/dist/tests/policy.test.js +59 -0
- package/dist/tests/policy.test.js.map +1 -0
- package/dist/tests/protocol.test.d.ts +2 -0
- package/dist/tests/protocol.test.d.ts.map +1 -0
- package/dist/tests/protocol.test.js +63 -0
- package/dist/tests/protocol.test.js.map +1 -0
- package/dist/tests/replay.test.d.ts +2 -0
- package/dist/tests/replay.test.d.ts.map +1 -0
- package/dist/tests/replay.test.js +194 -0
- package/dist/tests/replay.test.js.map +1 -0
- package/loop_policy.json +44 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|