ralphy-spec 0.1.1 → 0.2.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.ja.md +74 -130
- package/README.ko.md +74 -130
- package/README.md +75 -133
- package/README.zh.md +74 -130
- package/bin/ralphy-spec.js +0 -0
- package/dist/cli/checkpoint.d.ts +3 -0
- package/dist/cli/checkpoint.d.ts.map +1 -0
- package/dist/cli/checkpoint.js +23 -0
- package/dist/cli/checkpoint.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +66 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/report.d.ts +3 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +53 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/run.d.ts +3 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +79 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/status.d.ts +3 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +45 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/tail.d.ts +3 -0
- package/dist/cli/tail.d.ts.map +1 -0
- package/dist/cli/tail.js +46 -0
- package/dist/cli/tail.js.map +1 -0
- package/dist/cli/update.d.ts +3 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +62 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/validate.d.ts +3 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +83 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/core/backends/claude-code.d.ts +17 -0
- package/dist/core/backends/claude-code.d.ts.map +1 -0
- package/dist/core/backends/claude-code.js +75 -0
- package/dist/core/backends/claude-code.js.map +1 -0
- package/dist/core/backends/cursor.d.ts +17 -0
- package/dist/core/backends/cursor.d.ts.map +1 -0
- package/dist/core/backends/cursor.js +75 -0
- package/dist/core/backends/cursor.js.map +1 -0
- package/dist/core/backends/noop.d.ts +10 -0
- package/dist/core/backends/noop.d.ts.map +1 -0
- package/dist/core/backends/noop.js +17 -0
- package/dist/core/backends/noop.js.map +1 -0
- package/dist/core/backends/opencode.d.ts +16 -0
- package/dist/core/backends/opencode.d.ts.map +1 -0
- package/dist/core/backends/opencode.js +73 -0
- package/dist/core/backends/opencode.js.map +1 -0
- package/dist/core/backends/types.d.ts +21 -0
- package/dist/core/backends/types.d.ts.map +1 -0
- package/dist/core/backends/types.js +3 -0
- package/dist/core/backends/types.js.map +1 -0
- package/dist/core/budgets/manager.d.ts +21 -0
- package/dist/core/budgets/manager.d.ts.map +1 -0
- package/dist/core/budgets/manager.js +48 -0
- package/dist/core/budgets/manager.js.map +1 -0
- package/dist/core/budgets/state.d.ts +25 -0
- package/dist/core/budgets/state.d.ts.map +1 -0
- package/dist/core/budgets/state.js +33 -0
- package/dist/core/budgets/state.js.map +1 -0
- package/dist/core/budgets/tiers.d.ts +32 -0
- package/dist/core/budgets/tiers.d.ts.map +1 -0
- package/dist/core/budgets/tiers.js +67 -0
- package/dist/core/budgets/tiers.js.map +1 -0
- package/dist/core/engine/context-pack.d.ts +12 -0
- package/dist/core/engine/context-pack.d.ts.map +1 -0
- package/dist/core/engine/context-pack.js +45 -0
- package/dist/core/engine/context-pack.js.map +1 -0
- package/dist/core/engine/loop.d.ts +28 -0
- package/dist/core/engine/loop.d.ts.map +1 -0
- package/dist/core/engine/loop.js +366 -0
- package/dist/core/engine/loop.js.map +1 -0
- package/dist/core/engine/phases.d.ts +2 -0
- package/dist/core/engine/phases.d.ts.map +1 -0
- package/dist/core/engine/phases.js +3 -0
- package/dist/core/engine/phases.js.map +1 -0
- package/dist/core/engine/repair.d.ts +6 -0
- package/dist/core/engine/repair.d.ts.map +1 -0
- package/dist/core/engine/repair.js +23 -0
- package/dist/core/engine/repair.js.map +1 -0
- package/dist/core/folders.d.ts +26 -0
- package/dist/core/folders.d.ts.map +1 -0
- package/dist/core/folders.js +58 -0
- package/dist/core/folders.js.map +1 -0
- package/dist/core/memory/ledger.d.ts +13 -0
- package/dist/core/memory/ledger.d.ts.map +1 -0
- package/dist/core/memory/ledger.js +24 -0
- package/dist/core/memory/ledger.js.map +1 -0
- package/dist/core/memory/persistence.d.ts +45 -0
- package/dist/core/memory/persistence.d.ts.map +1 -0
- package/dist/core/memory/persistence.js +162 -0
- package/dist/core/memory/persistence.js.map +1 -0
- package/dist/core/reporting/spend.d.ts +40 -0
- package/dist/core/reporting/spend.d.ts.map +1 -0
- package/dist/core/reporting/spend.js +157 -0
- package/dist/core/reporting/spend.js.map +1 -0
- package/dist/core/spec/dag.d.ts +7 -0
- package/dist/core/spec/dag.d.ts.map +1 -0
- package/dist/core/spec/dag.js +65 -0
- package/dist/core/spec/dag.js.map +1 -0
- package/dist/core/spec/file-contract.d.ts +13 -0
- package/dist/core/spec/file-contract.d.ts.map +1 -0
- package/dist/core/spec/file-contract.js +29 -0
- package/dist/core/spec/file-contract.js.map +1 -0
- package/dist/core/spec/loader.d.ts +8 -0
- package/dist/core/spec/loader.d.ts.map +1 -0
- package/dist/core/spec/loader.js +51 -0
- package/dist/core/spec/loader.js.map +1 -0
- package/dist/core/spec/schemas.d.ts +278 -0
- package/dist/core/spec/schemas.d.ts.map +1 -0
- package/dist/core/spec/schemas.js +207 -0
- package/dist/core/spec/schemas.js.map +1 -0
- package/dist/core/spec/types.d.ts +71 -0
- package/dist/core/spec/types.d.ts.map +1 -0
- package/dist/core/spec/types.js +3 -0
- package/dist/core/spec/types.js.map +1 -0
- package/dist/core/validators/parsers/eslint.d.ts +3 -0
- package/dist/core/validators/parsers/eslint.d.ts.map +1 -0
- package/dist/core/validators/parsers/eslint.js +35 -0
- package/dist/core/validators/parsers/eslint.js.map +1 -0
- package/dist/core/validators/parsers/jest.d.ts +3 -0
- package/dist/core/validators/parsers/jest.d.ts.map +1 -0
- package/dist/core/validators/parsers/jest.js +16 -0
- package/dist/core/validators/parsers/jest.js.map +1 -0
- package/dist/core/validators/parsers/tsc.d.ts +3 -0
- package/dist/core/validators/parsers/tsc.d.ts.map +1 -0
- package/dist/core/validators/parsers/tsc.js +32 -0
- package/dist/core/validators/parsers/tsc.js.map +1 -0
- package/dist/core/validators/runner.d.ts +8 -0
- package/dist/core/validators/runner.d.ts.map +1 -0
- package/dist/core/validators/runner.js +85 -0
- package/dist/core/validators/runner.js.map +1 -0
- package/dist/core/validators/signatures.d.ts +3 -0
- package/dist/core/validators/signatures.d.ts.map +1 -0
- package/dist/core/validators/signatures.js +10 -0
- package/dist/core/validators/signatures.js.map +1 -0
- package/dist/core/validators/types.d.ts +27 -0
- package/dist/core/validators/types.d.ts.map +1 -0
- package/dist/core/validators/types.js +3 -0
- package/dist/core/validators/types.js.map +1 -0
- package/dist/core/workspace/contract-enforcer.d.ts +54 -0
- package/dist/core/workspace/contract-enforcer.d.ts.map +1 -0
- package/dist/core/workspace/contract-enforcer.js +128 -0
- package/dist/core/workspace/contract-enforcer.js.map +1 -0
- package/dist/core/workspace/manager.d.ts +28 -0
- package/dist/core/workspace/manager.d.ts.map +1 -0
- package/dist/core/workspace/manager.js +3 -0
- package/dist/core/workspace/manager.js.map +1 -0
- package/dist/core/workspace/merge.d.ts +38 -0
- package/dist/core/workspace/merge.d.ts.map +1 -0
- package/dist/core/workspace/merge.js +92 -0
- package/dist/core/workspace/merge.js.map +1 -0
- package/dist/core/workspace/patch-mode.d.ts +22 -0
- package/dist/core/workspace/patch-mode.d.ts.map +1 -0
- package/dist/core/workspace/patch-mode.js +91 -0
- package/dist/core/workspace/patch-mode.js.map +1 -0
- package/dist/core/workspace/worktree-mode.d.ts +28 -0
- package/dist/core/workspace/worktree-mode.d.ts.map +1 -0
- package/dist/core/workspace/worktree-mode.js +156 -0
- package/dist/core/workspace/worktree-mode.js.map +1 -0
- package/dist/index.js +14 -4
- package/dist/index.js.map +1 -1
- package/dist/templates/shared/openspec-tasks-template.md +23 -3
- package/dist/templates/shared/project-template.yml +232 -0
- package/dist/utils/installer.d.ts.map +1 -1
- package/dist/utils/installer.js +31 -1
- package/dist/utils/installer.js.map +1 -1
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +10 -0
- package/dist/utils/validator.js.map +1 -1
- package/package.json +11 -4
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EngineLoop = void 0;
|
|
7
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
8
|
+
const dag_1 = require("../spec/dag");
|
|
9
|
+
const persistence_1 = require("../memory/persistence");
|
|
10
|
+
const ledger_1 = require("../memory/ledger");
|
|
11
|
+
const runner_1 = require("../validators/runner");
|
|
12
|
+
const signatures_1 = require("../validators/signatures");
|
|
13
|
+
const manager_1 = require("../budgets/manager");
|
|
14
|
+
const state_1 = require("../budgets/state");
|
|
15
|
+
const context_pack_1 = require("./context-pack");
|
|
16
|
+
const repair_1 = require("./repair");
|
|
17
|
+
function createRunId() {
|
|
18
|
+
return `run_${new Date().toISOString().replace(/[:.]/g, "-")}_${node_crypto_1.default
|
|
19
|
+
.randomBytes(4)
|
|
20
|
+
.toString("hex")}`;
|
|
21
|
+
}
|
|
22
|
+
class EngineLoop {
|
|
23
|
+
async run(opts) {
|
|
24
|
+
const runId = createRunId();
|
|
25
|
+
const persistence = await persistence_1.PersistenceLayer.openForRepo(opts.repoRoot);
|
|
26
|
+
const ledger = new ledger_1.LedgerLogger(persistence, runId);
|
|
27
|
+
const runBudget = opts.spec.budgets?.run;
|
|
28
|
+
const budgetState = new state_1.BudgetState({
|
|
29
|
+
usd: runBudget?.moneyUsd,
|
|
30
|
+
tokens: runBudget?.tokens,
|
|
31
|
+
wallTimeMs: runBudget?.wallTimeMinutes !== undefined
|
|
32
|
+
? runBudget.wallTimeMinutes * 60_000
|
|
33
|
+
: undefined,
|
|
34
|
+
maxIterations: runBudget?.maxIterationsTotal,
|
|
35
|
+
});
|
|
36
|
+
const budgetManager = new manager_1.BudgetManager(budgetState);
|
|
37
|
+
persistence.createRun({
|
|
38
|
+
runId,
|
|
39
|
+
repoRoot: opts.repoRoot,
|
|
40
|
+
backendId: opts.backend.id,
|
|
41
|
+
workspaceMode: opts.workspace.mode,
|
|
42
|
+
});
|
|
43
|
+
ledger.event({ kind: "run_started", message: "Run started", data: { runId } });
|
|
44
|
+
try {
|
|
45
|
+
const tasks = opts.spec.tasks ?? [];
|
|
46
|
+
const dag = (0, dag_1.buildTaskDAG)(tasks);
|
|
47
|
+
const planOrder = opts.taskId ? [opts.taskId] : dag.order;
|
|
48
|
+
if (opts.dryRun) {
|
|
49
|
+
ledger.event({
|
|
50
|
+
kind: "dry_run",
|
|
51
|
+
message: "Dry run plan generated",
|
|
52
|
+
data: { tasks: planOrder },
|
|
53
|
+
});
|
|
54
|
+
persistence.finishRun({ runId, status: "success" });
|
|
55
|
+
return { ok: true, runId };
|
|
56
|
+
}
|
|
57
|
+
for (const taskId of planOrder) {
|
|
58
|
+
const task = dag.tasksById.get(taskId) ?? tasks.find((t) => t.id === taskId);
|
|
59
|
+
if (!task) {
|
|
60
|
+
persistence.finishRun({ runId, status: "error" });
|
|
61
|
+
return {
|
|
62
|
+
ok: false,
|
|
63
|
+
runId,
|
|
64
|
+
exitCode: 4,
|
|
65
|
+
reason: `Unknown task id: ${taskId}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const outcome = await this.runOneTask({
|
|
69
|
+
runId,
|
|
70
|
+
task,
|
|
71
|
+
repoRoot: opts.repoRoot,
|
|
72
|
+
spec: opts.spec,
|
|
73
|
+
backend: opts.backend,
|
|
74
|
+
workspace: opts.workspace,
|
|
75
|
+
persistence,
|
|
76
|
+
ledger,
|
|
77
|
+
budgetManager,
|
|
78
|
+
});
|
|
79
|
+
if (!outcome.ok) {
|
|
80
|
+
persistence.finishRun({
|
|
81
|
+
runId,
|
|
82
|
+
status: outcome.exitCode === 2 || outcome.exitCode === 3 ? "stopped" : "error",
|
|
83
|
+
});
|
|
84
|
+
return outcome;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
ledger.event({ kind: "run_done", message: "All tasks done" });
|
|
88
|
+
persistence.finishRun({ runId, status: "success" });
|
|
89
|
+
return { ok: true, runId };
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
ledger.event({
|
|
93
|
+
kind: "run_error",
|
|
94
|
+
message: err?.message ? String(err.message) : String(err),
|
|
95
|
+
});
|
|
96
|
+
persistence.finishRun({ runId, status: "error" });
|
|
97
|
+
return {
|
|
98
|
+
ok: false,
|
|
99
|
+
runId,
|
|
100
|
+
exitCode: 4,
|
|
101
|
+
reason: err?.message ? String(err.message) : String(err),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
persistence.close();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async runOneTask(args) {
|
|
109
|
+
const { task, runId, persistence, ledger, budgetManager } = args;
|
|
110
|
+
let phase = "PLAN";
|
|
111
|
+
persistence.upsertTaskState({ runId, taskId: task.id, status: "running", phase });
|
|
112
|
+
ledger.event({ taskId: task.id, kind: "task_started", message: "Task started" });
|
|
113
|
+
const maxIter = task.budget?.hard?.maxIterations ??
|
|
114
|
+
args.spec.budgets?.run?.maxIterationsTotal ??
|
|
115
|
+
12;
|
|
116
|
+
const lastSignatures = [];
|
|
117
|
+
await args.workspace.prepare(task.id);
|
|
118
|
+
const cwd = args.workspace.getWorkingDir(task.id);
|
|
119
|
+
const taskBudgetConfig = this.toTaskBudgetConfig(task) ?? null;
|
|
120
|
+
let pendingRepairNotes;
|
|
121
|
+
let lastValidatorResults = null;
|
|
122
|
+
let lastIssues = null;
|
|
123
|
+
for (let iter = 1; iter <= maxIter; iter++) {
|
|
124
|
+
const iterStarted = Date.now();
|
|
125
|
+
try {
|
|
126
|
+
budgetManager.preflightOrThrow({ estimatedUsd: 0, estimatedTokens: 0 });
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
ledger.event({
|
|
130
|
+
taskId: task.id,
|
|
131
|
+
kind: "budget_exceeded",
|
|
132
|
+
message: e?.message ? String(e.message) : "Budget exceeded",
|
|
133
|
+
});
|
|
134
|
+
persistence.upsertTaskState({
|
|
135
|
+
runId,
|
|
136
|
+
taskId: task.id,
|
|
137
|
+
status: "blocked",
|
|
138
|
+
phase: "DIAGNOSE",
|
|
139
|
+
iteration: iter,
|
|
140
|
+
lastError: "Budget exceeded",
|
|
141
|
+
});
|
|
142
|
+
return { ok: false, runId, exitCode: 2, reason: "Budget limit" };
|
|
143
|
+
}
|
|
144
|
+
const tier = taskBudgetConfig ? budgetManager.getTier(taskBudgetConfig) : "optimal";
|
|
145
|
+
const shouldDegrade = taskBudgetConfig
|
|
146
|
+
? budgetManager.shouldApplyDegrade(taskBudgetConfig)
|
|
147
|
+
: false;
|
|
148
|
+
if (shouldDegrade) {
|
|
149
|
+
ledger.event({
|
|
150
|
+
taskId: task.id,
|
|
151
|
+
kind: "degrade",
|
|
152
|
+
message: "WARNING tier: degrade behaviors enabled",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (shouldDegrade && lastValidatorResults && lastIssues) {
|
|
156
|
+
const ctx = (0, context_pack_1.buildContextPack)({
|
|
157
|
+
tier: "warning",
|
|
158
|
+
taskId: task.id,
|
|
159
|
+
validatorResults: lastValidatorResults,
|
|
160
|
+
issues: lastIssues,
|
|
161
|
+
});
|
|
162
|
+
ledger.event({
|
|
163
|
+
taskId: task.id,
|
|
164
|
+
kind: "context_pack",
|
|
165
|
+
message: `Context pack built (${ctx.size})`,
|
|
166
|
+
});
|
|
167
|
+
// Optional calls disabling (MVP: only logs, as we don't have optional calls yet).
|
|
168
|
+
ledger.event({
|
|
169
|
+
taskId: task.id,
|
|
170
|
+
kind: "optional_calls_skipped",
|
|
171
|
+
message: "WARNING tier: skipping optional calls (self-review / plan regen)",
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
phase = "EXEC";
|
|
175
|
+
persistence.upsertTaskState({
|
|
176
|
+
runId,
|
|
177
|
+
taskId: task.id,
|
|
178
|
+
status: "running",
|
|
179
|
+
phase,
|
|
180
|
+
iteration: iter,
|
|
181
|
+
});
|
|
182
|
+
ledger.event({ taskId: task.id, kind: "exec", message: `EXEC iteration ${iter}` });
|
|
183
|
+
const backendRes = await args.backend.implement({ cwd, backendId: args.backend.id }, {
|
|
184
|
+
task,
|
|
185
|
+
iteration: iter,
|
|
186
|
+
repairNotes: pendingRepairNotes ??
|
|
187
|
+
(shouldDegrade
|
|
188
|
+
? "WARNING tier active (repair-only mode will be enforced on failures)."
|
|
189
|
+
: undefined),
|
|
190
|
+
});
|
|
191
|
+
if (!backendRes.ok) {
|
|
192
|
+
persistence.upsertTaskState({
|
|
193
|
+
runId,
|
|
194
|
+
taskId: task.id,
|
|
195
|
+
status: "error",
|
|
196
|
+
phase: "EXEC",
|
|
197
|
+
iteration: iter,
|
|
198
|
+
lastError: backendRes.message,
|
|
199
|
+
});
|
|
200
|
+
ledger.event({
|
|
201
|
+
taskId: task.id,
|
|
202
|
+
kind: "backend_error",
|
|
203
|
+
message: backendRes.message,
|
|
204
|
+
});
|
|
205
|
+
return { ok: false, runId, exitCode: 5, reason: "Backend invocation error" };
|
|
206
|
+
}
|
|
207
|
+
phase = "VALIDATE";
|
|
208
|
+
const validators = this.resolveValidators(args.spec, task).map((v) => ({
|
|
209
|
+
...v,
|
|
210
|
+
timeoutMs: v.timeoutMs ?? (args.spec.budgets?.limits?.commandTimeoutSeconds ?? 900) * 1000,
|
|
211
|
+
}));
|
|
212
|
+
const runner = new runner_1.ValidatorRunner({
|
|
213
|
+
cwd,
|
|
214
|
+
commandTimeoutMs: (args.spec.budgets?.limits?.commandTimeoutSeconds ?? 900) * 1000,
|
|
215
|
+
});
|
|
216
|
+
const results = await runner.runAll(validators);
|
|
217
|
+
const allIssues = Object.entries(results).flatMap(([id, r]) => {
|
|
218
|
+
// If a validator failed but produced no parsed issues, create a generic one.
|
|
219
|
+
const issues = !r.ok && r.issues.length === 0
|
|
220
|
+
? [
|
|
221
|
+
{
|
|
222
|
+
kind: "unknown",
|
|
223
|
+
level: "error",
|
|
224
|
+
message: `Validator "${id}" failed (exit=${r.exitCode ?? "?"})`,
|
|
225
|
+
raw: { validatorId: id },
|
|
226
|
+
},
|
|
227
|
+
]
|
|
228
|
+
: r.issues;
|
|
229
|
+
return issues.map((i) => ({
|
|
230
|
+
...i,
|
|
231
|
+
raw: i.raw ?? { validatorId: id },
|
|
232
|
+
}));
|
|
233
|
+
});
|
|
234
|
+
// Contract enforcement after EXEC
|
|
235
|
+
if (task.filesContract) {
|
|
236
|
+
const violations = await args.workspace.enforceContract(task.id, task.filesContract);
|
|
237
|
+
if (violations.length) {
|
|
238
|
+
allIssues.push(...violations.map((v) => ({
|
|
239
|
+
kind: "contract_violation",
|
|
240
|
+
level: "error",
|
|
241
|
+
message: `File contract violation: ${v.reason} (${v.file})`,
|
|
242
|
+
file: v.file,
|
|
243
|
+
raw: v,
|
|
244
|
+
})));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const ok = Object.values(results).every((r) => r.ok) && allIssues.every((i) => i.level !== "error");
|
|
248
|
+
ledger.event({
|
|
249
|
+
taskId: task.id,
|
|
250
|
+
kind: "validate",
|
|
251
|
+
message: ok ? "VALIDATE passed" : "VALIDATE failed",
|
|
252
|
+
data: { ok, issues: allIssues.length },
|
|
253
|
+
});
|
|
254
|
+
const signatures = allIssues.map(signatures_1.issueSignature);
|
|
255
|
+
lastSignatures.push(...signatures);
|
|
256
|
+
while (lastSignatures.length > 50)
|
|
257
|
+
lastSignatures.shift();
|
|
258
|
+
const recent = lastSignatures.slice(-signatures.length);
|
|
259
|
+
const stuck = signatures.length > 0 &&
|
|
260
|
+
recent.length === signatures.length &&
|
|
261
|
+
iter >= 3 &&
|
|
262
|
+
signatures.every((s) => lastSignatures.slice(-signatures.length * 3).includes(s));
|
|
263
|
+
if (ok) {
|
|
264
|
+
phase = "CHECKPOINT";
|
|
265
|
+
await args.workspace.checkpoint(task.id, "Task completed");
|
|
266
|
+
persistence.upsertTaskState({
|
|
267
|
+
runId,
|
|
268
|
+
taskId: task.id,
|
|
269
|
+
status: "done",
|
|
270
|
+
phase: "DONE",
|
|
271
|
+
iteration: iter,
|
|
272
|
+
});
|
|
273
|
+
ledger.event({ taskId: task.id, kind: "task_done", message: "Task done" });
|
|
274
|
+
budgetManager.recordIteration(Date.now() - iterStarted);
|
|
275
|
+
return { ok: true, runId };
|
|
276
|
+
}
|
|
277
|
+
// Save failure context for next iteration.
|
|
278
|
+
lastValidatorResults = results;
|
|
279
|
+
lastIssues = allIssues;
|
|
280
|
+
pendingRepairNotes = undefined;
|
|
281
|
+
phase = "DIAGNOSE";
|
|
282
|
+
persistence.upsertTaskState({
|
|
283
|
+
runId,
|
|
284
|
+
taskId: task.id,
|
|
285
|
+
status: "running",
|
|
286
|
+
phase,
|
|
287
|
+
iteration: iter,
|
|
288
|
+
lastError: "Validation failed",
|
|
289
|
+
});
|
|
290
|
+
if (stuck) {
|
|
291
|
+
ledger.event({
|
|
292
|
+
taskId: task.id,
|
|
293
|
+
kind: "stuck",
|
|
294
|
+
message: "Stuck detected (same issues repeated)",
|
|
295
|
+
});
|
|
296
|
+
return { ok: false, runId, exitCode: 3, reason: "Stuck / max iterations" };
|
|
297
|
+
}
|
|
298
|
+
phase = "REPAIR";
|
|
299
|
+
const tierAfter = taskBudgetConfig ? budgetManager.getTier(taskBudgetConfig) : "optimal";
|
|
300
|
+
const repairNotes = (0, repair_1.buildRepairNotes)({
|
|
301
|
+
tier: tierAfter === "warning" ? "warning" : "optimal",
|
|
302
|
+
issues: allIssues,
|
|
303
|
+
});
|
|
304
|
+
ledger.event({ taskId: task.id, kind: "repair", message: "Retrying (repair loop)" });
|
|
305
|
+
pendingRepairNotes = repairNotes;
|
|
306
|
+
budgetManager.recordIteration(Date.now() - iterStarted);
|
|
307
|
+
}
|
|
308
|
+
ledger.event({
|
|
309
|
+
taskId: task.id,
|
|
310
|
+
kind: "max_iterations",
|
|
311
|
+
message: `Max iterations reached (${maxIter})`,
|
|
312
|
+
});
|
|
313
|
+
persistence.upsertTaskState({
|
|
314
|
+
runId,
|
|
315
|
+
taskId: task.id,
|
|
316
|
+
status: "blocked",
|
|
317
|
+
phase: "DIAGNOSE",
|
|
318
|
+
iteration: maxIter,
|
|
319
|
+
lastError: "Max iterations reached",
|
|
320
|
+
});
|
|
321
|
+
return { ok: false, runId, exitCode: 3, reason: "Max iterations reached" };
|
|
322
|
+
}
|
|
323
|
+
toTaskBudgetConfig(task) {
|
|
324
|
+
const b = task.budget;
|
|
325
|
+
const hardIter = b?.hard?.maxIterations;
|
|
326
|
+
if (!b || hardIter === undefined)
|
|
327
|
+
return null;
|
|
328
|
+
return {
|
|
329
|
+
optimal: {
|
|
330
|
+
usd: b.optimal?.usd,
|
|
331
|
+
tokens: b.optimal?.tokens,
|
|
332
|
+
timeMinutes: b.optimal?.timeMinutes,
|
|
333
|
+
},
|
|
334
|
+
warning: {
|
|
335
|
+
usd: b.warning?.usd,
|
|
336
|
+
tokens: b.warning?.tokens,
|
|
337
|
+
timeMinutes: b.warning?.timeMinutes,
|
|
338
|
+
},
|
|
339
|
+
hard: {
|
|
340
|
+
usd: b.hard?.usd,
|
|
341
|
+
tokens: b.hard?.tokens,
|
|
342
|
+
timeMinutes: b.hard?.timeMinutes,
|
|
343
|
+
maxIterations: hardIter,
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
resolveValidators(spec, task) {
|
|
348
|
+
const ids = task.validators ?? spec.defaults.validators ?? [];
|
|
349
|
+
const byId = new Map((spec.validators ?? []).map((v) => [v.id, v]));
|
|
350
|
+
const validators = [];
|
|
351
|
+
for (const id of ids) {
|
|
352
|
+
const v = byId.get(id);
|
|
353
|
+
if (!v)
|
|
354
|
+
continue;
|
|
355
|
+
validators.push({
|
|
356
|
+
id: v.id,
|
|
357
|
+
run: v.run,
|
|
358
|
+
timeoutMs: v.timeoutSeconds ? v.timeoutSeconds * 1000 : undefined,
|
|
359
|
+
parser: v.parser ?? undefined,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return validators;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
exports.EngineLoop = EngineLoop;
|
|
366
|
+
//# sourceMappingURL=loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/core/engine/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../../src/core/engine/phases.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,GACV,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../src/core/engine/phases.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../../src/core/engine/repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,GAAG,MAAM,CAsBT"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildRepairNotes = buildRepairNotes;
|
|
4
|
+
function buildRepairNotes(args) {
|
|
5
|
+
const lines = [];
|
|
6
|
+
lines.push(`# Repair notes`);
|
|
7
|
+
lines.push(``);
|
|
8
|
+
if (args.tier === "warning") {
|
|
9
|
+
lines.push(`## Constraints (WARNING tier)`);
|
|
10
|
+
lines.push(`- Fix only failing validators`);
|
|
11
|
+
lines.push(`- Do NOT refactor unrelated code`);
|
|
12
|
+
lines.push(`- Do NOT add new features`);
|
|
13
|
+
lines.push(``);
|
|
14
|
+
}
|
|
15
|
+
lines.push(`## Issues`);
|
|
16
|
+
for (const i of args.issues) {
|
|
17
|
+
const loc = i.file ? `${i.file}${i.line ? `:${i.line}` : ""}` : "";
|
|
18
|
+
lines.push(`- [${i.level}] ${i.kind}${loc ? ` (${loc})` : ""}: ${i.message}`);
|
|
19
|
+
}
|
|
20
|
+
lines.push(``);
|
|
21
|
+
return lines.join("\n");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair.js","sourceRoot":"","sources":["../../../src/core/engine/repair.ts"],"names":[],"mappings":";;AAEA,4CAyBC;AAzBD,SAAgB,gBAAgB,CAAC,IAGhC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const LEGACY_ROOT_DIR = ".ralphy";
|
|
2
|
+
export declare const DEFAULT_ROOT_DIR = "ralphy-spec";
|
|
3
|
+
export declare const FOLDERS: {
|
|
4
|
+
readonly runs: "runs";
|
|
5
|
+
readonly logs: "logs";
|
|
6
|
+
readonly worktrees: "worktrees";
|
|
7
|
+
readonly tasks: "tasks";
|
|
8
|
+
};
|
|
9
|
+
export declare const FILES: {
|
|
10
|
+
readonly db: "state.db";
|
|
11
|
+
readonly status: "STATUS.md";
|
|
12
|
+
readonly tasks: "TASKS.md";
|
|
13
|
+
readonly budget: "BUDGET.md";
|
|
14
|
+
};
|
|
15
|
+
export declare function getRalphyRoot(repoRoot: string, overrideDir?: string): string;
|
|
16
|
+
export declare function ensureRalphyFolders(repoRoot: string, overrideDir?: string): Promise<string>;
|
|
17
|
+
export declare function migrateLegacyIfNeeded(repoRoot: string, overrideDir?: string): Promise<{
|
|
18
|
+
migrated: false;
|
|
19
|
+
from?: undefined;
|
|
20
|
+
to?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
migrated: true;
|
|
23
|
+
from: string;
|
|
24
|
+
to: string;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=folders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/core/folders.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX,eAAO,MAAM,KAAK;;;;;CAKR,CAAC;AAEX,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,mBAQ/E;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;;;GAWjF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FILES = exports.FOLDERS = exports.DEFAULT_ROOT_DIR = exports.LEGACY_ROOT_DIR = void 0;
|
|
7
|
+
exports.getRalphyRoot = getRalphyRoot;
|
|
8
|
+
exports.ensureRalphyFolders = ensureRalphyFolders;
|
|
9
|
+
exports.migrateLegacyIfNeeded = migrateLegacyIfNeeded;
|
|
10
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
13
|
+
exports.LEGACY_ROOT_DIR = ".ralphy";
|
|
14
|
+
exports.DEFAULT_ROOT_DIR = "ralphy-spec";
|
|
15
|
+
exports.FOLDERS = {
|
|
16
|
+
runs: "runs",
|
|
17
|
+
logs: "logs",
|
|
18
|
+
worktrees: "worktrees",
|
|
19
|
+
tasks: "tasks",
|
|
20
|
+
};
|
|
21
|
+
exports.FILES = {
|
|
22
|
+
db: "state.db",
|
|
23
|
+
status: "STATUS.md",
|
|
24
|
+
tasks: "TASKS.md",
|
|
25
|
+
budget: "BUDGET.md",
|
|
26
|
+
};
|
|
27
|
+
function getRalphyRoot(repoRoot, overrideDir) {
|
|
28
|
+
return node_path_1.default.join(repoRoot, overrideDir ?? exports.DEFAULT_ROOT_DIR);
|
|
29
|
+
}
|
|
30
|
+
async function ensureRalphyFolders(repoRoot, overrideDir) {
|
|
31
|
+
const root = getRalphyRoot(repoRoot, overrideDir);
|
|
32
|
+
await promises_1.default.mkdir(root, { recursive: true });
|
|
33
|
+
await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.runs), { recursive: true });
|
|
34
|
+
await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.logs), { recursive: true });
|
|
35
|
+
await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.worktrees), { recursive: true });
|
|
36
|
+
await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.tasks), { recursive: true });
|
|
37
|
+
return root;
|
|
38
|
+
}
|
|
39
|
+
async function migrateLegacyIfNeeded(repoRoot, overrideDir) {
|
|
40
|
+
const legacy = node_path_1.default.join(repoRoot, exports.LEGACY_ROOT_DIR);
|
|
41
|
+
const next = getRalphyRoot(repoRoot, overrideDir);
|
|
42
|
+
const legacyExists = await exists(legacy);
|
|
43
|
+
const nextExists = await exists(next);
|
|
44
|
+
if (!legacyExists || nextExists)
|
|
45
|
+
return { migrated: false };
|
|
46
|
+
await fs_extra_1.default.copy(legacy, next, { overwrite: false, errorOnExist: false });
|
|
47
|
+
return { migrated: true, from: legacy, to: next };
|
|
48
|
+
}
|
|
49
|
+
async function exists(p) {
|
|
50
|
+
try {
|
|
51
|
+
await promises_1.default.access(p);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=folders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/core/folders.ts"],"names":[],"mappings":";;;;;;AAqBA,sCAEC;AAED,kDAQC;AAED,sDAWC;AA9CD,gEAAkC;AAClC,0DAA6B;AAC7B,wDAA2B;AAEd,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,gBAAgB,GAAG,aAAa,CAAC;AAEjC,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;CACN,CAAC;AAEE,QAAA,KAAK,GAAG;IACnB,EAAE,EAAE,UAAU;IACd,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;CACX,CAAC;AAEX,SAAgB,aAAa,CAAC,QAAgB,EAAE,WAAoB;IAClE,OAAO,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,wBAAgB,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,WAAoB;IAC9E,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,WAAoB;IAChF,MAAM,MAAM,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAe,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,YAAY,IAAI,UAAU;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAc,EAAE,CAAC;IAErE,MAAM,kBAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,OAAO,EAAE,QAAQ,EAAE,IAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PersistenceLayer } from "./persistence";
|
|
2
|
+
export declare class LedgerLogger {
|
|
3
|
+
private readonly persistence;
|
|
4
|
+
private readonly runId;
|
|
5
|
+
constructor(persistence: PersistenceLayer, runId: string);
|
|
6
|
+
event(args: {
|
|
7
|
+
taskId?: string;
|
|
8
|
+
kind: string;
|
|
9
|
+
message: string;
|
|
10
|
+
data?: unknown;
|
|
11
|
+
}): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/core/memory/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,WAAW,EAAE,gBAAgB,EAC7B,KAAK,EAAE,MAAM;IAGhC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;CAWtF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LedgerLogger = void 0;
|
|
4
|
+
class LedgerLogger {
|
|
5
|
+
persistence;
|
|
6
|
+
runId;
|
|
7
|
+
constructor(persistence, runId) {
|
|
8
|
+
this.persistence = persistence;
|
|
9
|
+
this.runId = runId;
|
|
10
|
+
}
|
|
11
|
+
event(args) {
|
|
12
|
+
const ev = {
|
|
13
|
+
runId: this.runId,
|
|
14
|
+
taskId: args.taskId,
|
|
15
|
+
ts: new Date().toISOString(),
|
|
16
|
+
kind: args.kind,
|
|
17
|
+
message: args.message,
|
|
18
|
+
data: args.data,
|
|
19
|
+
};
|
|
20
|
+
this.persistence.appendLedger(ev);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.LedgerLogger = LedgerLogger;
|
|
24
|
+
//# sourceMappingURL=ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/core/memory/ledger.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IAEJ;IACA;IAFnB,YACmB,WAA6B,EAC7B,KAAa;QADb,gBAAW,GAAX,WAAW,CAAkB;QAC7B,UAAK,GAAL,KAAK,CAAQ;IAC7B,CAAC;IAEJ,KAAK,CAAC,IAAwE;QAC5E,MAAM,EAAE,GAAgB;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;CACF;AAjBD,oCAiBC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type RunStatus = "active" | "success" | "stopped" | "error";
|
|
2
|
+
export type TaskStatus = "pending" | "running" | "done" | "blocked" | "error";
|
|
3
|
+
export type LedgerEvent = {
|
|
4
|
+
runId: string;
|
|
5
|
+
taskId?: string;
|
|
6
|
+
ts: string;
|
|
7
|
+
kind: string;
|
|
8
|
+
message: string;
|
|
9
|
+
data?: unknown;
|
|
10
|
+
};
|
|
11
|
+
export declare class PersistenceLayer {
|
|
12
|
+
private readonly db;
|
|
13
|
+
constructor(dbPath: string);
|
|
14
|
+
static openForRepo(repoRoot: string): Promise<PersistenceLayer>;
|
|
15
|
+
close(): void;
|
|
16
|
+
createRun(args: {
|
|
17
|
+
runId: string;
|
|
18
|
+
repoRoot: string;
|
|
19
|
+
backendId?: string;
|
|
20
|
+
workspaceMode?: string;
|
|
21
|
+
}): void;
|
|
22
|
+
finishRun(args: {
|
|
23
|
+
runId: string;
|
|
24
|
+
status: RunStatus;
|
|
25
|
+
}): void;
|
|
26
|
+
upsertTaskState(args: {
|
|
27
|
+
runId: string;
|
|
28
|
+
taskId: string;
|
|
29
|
+
status: TaskStatus;
|
|
30
|
+
phase?: string;
|
|
31
|
+
iteration?: number;
|
|
32
|
+
lastError?: string;
|
|
33
|
+
}): void;
|
|
34
|
+
appendLedger(event: LedgerEvent): void;
|
|
35
|
+
listLedger(args: {
|
|
36
|
+
runId: string;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}): LedgerEvent[];
|
|
39
|
+
getLatestRun(): {
|
|
40
|
+
runId: string;
|
|
41
|
+
status: RunStatus;
|
|
42
|
+
startedAt: string;
|
|
43
|
+
} | null;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/core/memory/persistence.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AA0DF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;gBAE3B,MAAM,EAAE,MAAM;WAMb,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOrE,KAAK,IAAI,IAAI;IAIb,SAAS,CAAC,IAAI,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;IAeR,SAAS,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IAU3D,eAAe,CAAC,IAAI,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI;IAsBR,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAgBtC,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,EAAE;IAuBlE,YAAY,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAW/E"}
|