@neonwatty/limner 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -1
- package/dist/commands/compare-image-reference.d.ts +3 -0
- package/dist/commands/compare-image-reference.js +16 -1
- package/dist/commands/compare-image-reference.js.map +1 -1
- package/dist/commands/compare-output.d.ts +2 -0
- package/dist/commands/compare-output.js +20 -0
- package/dist/commands/compare-output.js.map +1 -0
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.js +10 -19
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/ledger.d.ts +4 -1
- package/dist/commands/loop-actions.d.ts +22 -0
- package/dist/commands/loop-actions.js +54 -0
- package/dist/commands/loop-actions.js.map +1 -0
- package/dist/commands/loop-cli.js +96 -2
- package/dist/commands/loop-cli.js.map +1 -1
- package/dist/commands/loop-comparison-adapters.d.ts +3 -0
- package/dist/commands/loop-comparison-adapters.js +15 -1
- package/dist/commands/loop-comparison-adapters.js.map +1 -1
- package/dist/commands/loop-task.d.ts +17 -0
- package/dist/commands/loop-task.js +95 -0
- package/dist/commands/loop-task.js.map +1 -0
- package/dist/commands/loop.d.ts +3 -1
- package/dist/commands/loop.js +31 -14
- package/dist/commands/loop.js.map +1 -1
- package/dist/core/agent-comparison-pack.d.ts +13 -0
- package/dist/core/agent-comparison-pack.js +27 -21
- package/dist/core/agent-comparison-pack.js.map +1 -1
- package/dist/core/agent-comparison-response.d.ts +19 -0
- package/dist/core/agent-comparison-response.js +34 -0
- package/dist/core/agent-comparison-response.js.map +1 -0
- package/dist/core/agent-task-brief.d.ts +30 -0
- package/dist/core/agent-task-brief.js +158 -0
- package/dist/core/agent-task-brief.js.map +1 -0
- package/dist/core/comparison-artifacts.d.ts +12 -0
- package/dist/core/comparison-artifacts.js +50 -0
- package/dist/core/comparison-artifacts.js.map +1 -0
- package/dist/core/current-artifacts.d.ts +14 -0
- package/dist/core/current-artifacts.js +16 -0
- package/dist/core/current-artifacts.js.map +1 -0
- package/dist/core/ledger-agent-responses.d.ts +21 -0
- package/dist/core/ledger-agent-responses.js +13 -0
- package/dist/core/ledger-agent-responses.js.map +1 -0
- package/dist/core/ledger-db.js +28 -0
- package/dist/core/ledger-db.js.map +1 -1
- package/dist/core/ledger-events.js +46 -7
- package/dist/core/ledger-events.js.map +1 -1
- package/dist/core/ledger-markdown.d.ts +23 -4
- package/dist/core/ledger-markdown.js +133 -4
- package/dist/core/ledger-markdown.js.map +1 -1
- package/dist/core/ledger-queries.d.ts +5 -1
- package/dist/core/ledger-queries.js +14 -4
- package/dist/core/ledger-queries.js.map +1 -1
- package/dist/core/ledger-store.d.ts +11 -3
- package/dist/core/ledger-store.js +4 -0
- package/dist/core/ledger-store.js.map +1 -1
- package/dist/core/loop-rerun-command.d.ts +4 -0
- package/dist/core/loop-rerun-command.js +36 -0
- package/dist/core/loop-rerun-command.js.map +1 -0
- package/dist/core/runtime-context.d.ts +1 -0
- package/dist/core/runtime-context.js +18 -0
- package/dist/core/runtime-context.js.map +1 -0
- package/dist/schemas/ledger.d.ts +33 -0
- package/dist/schemas/ledger.js +13 -0
- package/dist/schemas/ledger.js.map +1 -1
- package/docs/agent-workflow.md +31 -1
- package/docs/superpowers/plans/2026-06-13-agent-response-sqlite.md +70 -0
- package/docs/superpowers/plans/2026-06-13-loop-action-ledger.md +257 -0
- package/package.json +1 -1
- package/skills/limner/SKILL.md +15 -4
package/README.md
CHANGED
|
@@ -56,6 +56,9 @@ limner preview --target replay-boundaries
|
|
|
56
56
|
limner capture reference --target replay-boundaries
|
|
57
57
|
limner loop start --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --max-iterations 5
|
|
58
58
|
limner loop compare --trajectory traj_...
|
|
59
|
+
limner loop task --trajectory traj_... --executor subagent
|
|
60
|
+
limner loop action start --trajectory traj_... --from-run run_... --kind polish --executor subagent --summary "Resize dashboard preview"
|
|
61
|
+
limner loop action complete --trajectory traj_... --action act_... --executor subagent --summary "Adjusted preview sizing" --files "src/app/page.tsx"
|
|
59
62
|
limner loop status --trajectory traj_...
|
|
60
63
|
limner compare image-reference --target replay-boundaries
|
|
61
64
|
limner compare reference-implementation --target replay-boundaries --url http://localhost:3152/internal/optimization-lab/wedding-envelope#replay-boundaries --storage-state ./e2e/.auth/user.json
|
|
@@ -92,6 +95,10 @@ Use `limner loop` for Ralph Loop-style polishing. Loop work is tracked in a glob
|
|
|
92
95
|
```bash
|
|
93
96
|
limner loop start --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --max-iterations 5
|
|
94
97
|
limner loop compare --trajectory traj_...
|
|
98
|
+
limner loop task --trajectory traj_... --executor subagent
|
|
99
|
+
limner loop action start --trajectory traj_... --from-run run_... --kind polish --executor subagent --summary "Resize dashboard preview"
|
|
100
|
+
limner loop action complete --trajectory traj_... --action act_... --executor subagent --summary "Adjusted preview sizing" --files "src/app/page.tsx"
|
|
101
|
+
limner loop action skip --trajectory traj_... --from-run run_... --summary "Comparison smoke only; no edit intended"
|
|
95
102
|
limner loop status --trajectory traj_... --feedback "Prompt should mention button contrast."
|
|
96
103
|
limner loop next --trajectory traj_...
|
|
97
104
|
limner loop close --trajectory traj_...
|
|
@@ -103,7 +110,17 @@ Loop modes:
|
|
|
103
110
|
- `mockup-implementation`: approved mockup to real implementation.
|
|
104
111
|
- `image-implementation`: source image directly to real implementation.
|
|
105
112
|
|
|
106
|
-
Every meaningful loop interaction writes a ledger event. `agentFeedback` is an optional 255-character field for short process-improvement notes; longer comments belong in notes or project artifacts.
|
|
113
|
+
Every meaningful loop interaction writes a ledger event. Validated, missing, invalid, and stale agent responses are also stored in local SQLite with the full JSON body, response hash, validation status, and freshness (`missing`, `cached`, `stale`, `invalid`, or future `fresh`). `agentFeedback` is an optional 255-character field for short process-improvement notes; longer comments belong in notes or project artifacts.
|
|
114
|
+
|
|
115
|
+
### Action Logging
|
|
116
|
+
|
|
117
|
+
After an agent writes `agent-response.json` and `loop compare` validates it, use `limner loop task --trajectory traj_... --executor subagent` to print the next edit brief. The intended loop is:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
loop compare -> loop task --executor subagent -> loop action start -> edit -> loop action complete -> loop compare
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The task brief names likely files, selectors, prioritized diffs, next steps, action logging commands, and the compare command to rerun. Record `loop action start` before edits and `loop action complete` after edits; keep `--summary` under 255 characters. Use `loop action skip` for comparison-only smoke runs where no edit is intended. Limner records executor intent and action claims; it cannot prove an external orchestrator actually used a subagent. Use `--format json` when another tool needs machine-readable handoff data.
|
|
107
124
|
|
|
108
125
|
Use `limner ledger` to query and export trajectories:
|
|
109
126
|
|
|
@@ -116,6 +133,15 @@ limner ledger export traj_... --format json
|
|
|
116
133
|
limner ledger export traj_... --format markdown
|
|
117
134
|
```
|
|
118
135
|
|
|
136
|
+
Agents can discover the current CLI surface with:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
limner --help
|
|
140
|
+
limner loop --help
|
|
141
|
+
limner loop task --help
|
|
142
|
+
limner ledger --help
|
|
143
|
+
```
|
|
144
|
+
|
|
119
145
|
### Image To Reference
|
|
120
146
|
|
|
121
147
|
Use this while recreating the ideal image as a standalone HTML/CSS mockup. This mode uses the `ideal-to-mockup` agent comparison profile.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AgentComparisonPackResult } from '../core/agent-comparison-pack.js';
|
|
2
|
+
import type { LedgerArtifactRef } from '../schemas/ledger.js';
|
|
2
3
|
export declare function compareImageReference(options: {
|
|
3
4
|
workspaceRoot: string;
|
|
4
5
|
target: string;
|
|
@@ -10,6 +11,8 @@ export declare function compareImageReference(options: {
|
|
|
10
11
|
}): Promise<{
|
|
11
12
|
sideBySidePath: string;
|
|
12
13
|
reportPath: string;
|
|
14
|
+
runId: string;
|
|
15
|
+
artifacts: LedgerArtifactRef[];
|
|
13
16
|
specPaths?: {
|
|
14
17
|
idealSpecPath: string;
|
|
15
18
|
referenceSpecPath: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdir } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { writeAgentComparisonPack } from '../core/agent-comparison-pack.js';
|
|
4
|
+
import { agentComparisonArtifacts, artifact } from '../core/comparison-artifacts.js';
|
|
4
5
|
import { writeImageReferenceReport } from '../core/report-writer.js';
|
|
5
6
|
import { createRunLogger } from '../core/run-logger.js';
|
|
6
7
|
import { createSideBySideImage } from '../core/side-by-side.js';
|
|
@@ -94,7 +95,21 @@ export async function compareImageReference(options) {
|
|
|
94
95
|
}
|
|
95
96
|
await logger.artifact(reportPath, 'report');
|
|
96
97
|
await logger.complete('ok');
|
|
97
|
-
return {
|
|
98
|
+
return {
|
|
99
|
+
sideBySidePath,
|
|
100
|
+
reportPath,
|
|
101
|
+
runId: logger.runId,
|
|
102
|
+
artifacts: [
|
|
103
|
+
...artifact(referencePath, 'reference-screenshot'),
|
|
104
|
+
...artifact(`${referencePath}.console.json`, 'reference-console-log'),
|
|
105
|
+
...artifact(sideBySidePath, 'side-by-side'),
|
|
106
|
+
...artifact(reportPath, 'report'),
|
|
107
|
+
...agentComparisonArtifacts(agentComparison),
|
|
108
|
+
],
|
|
109
|
+
specPaths,
|
|
110
|
+
agentSpec,
|
|
111
|
+
agentComparison,
|
|
112
|
+
};
|
|
98
113
|
}
|
|
99
114
|
catch (error) {
|
|
100
115
|
await logger.event({ type: 'command.failed', status: 'failed', message: error instanceof Error ? error.message : String(error) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare-image-reference.js","sourceRoot":"","sources":["../../src/commands/compare-image-reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,wBAAwB,EAAkC,MAAM,kCAAkC,CAAC;AAC5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"compare-image-reference.js","sourceRoot":"","sources":["../../src/commands/compare-image-reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function printAgentComparison(agentComparison) {
|
|
2
|
+
if (!agentComparison)
|
|
3
|
+
return;
|
|
4
|
+
console.log(`Agent comparison prompt: ${agentComparison.promptPath}`);
|
|
5
|
+
console.log(`Codex comparison prompt: ${agentComparison.codexPromptPath}`);
|
|
6
|
+
console.log(`Claude comparison prompt: ${agentComparison.claudePromptPath}`);
|
|
7
|
+
console.log(`Agent comparison schema: ${agentComparison.schemaPath}`);
|
|
8
|
+
console.log(`Agent comparison response target: ${agentComparison.responsePath}`);
|
|
9
|
+
console.log(`Agent response freshness: ${agentComparison.freshness}`);
|
|
10
|
+
if (agentComparison.status === 'validated') {
|
|
11
|
+
console.log(`Image comparison: ${agentComparison.imageComparisonPath}`);
|
|
12
|
+
if (agentComparison.structureComparisonPath)
|
|
13
|
+
console.log(`Structure comparison: ${agentComparison.structureComparisonPath}`);
|
|
14
|
+
console.log(`Comparison summary: ${agentComparison.summaryPath}`);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.log(`Agent comparison status: ${agentComparison.status}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=compare-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-output.js","sourceRoot":"","sources":["../../src/commands/compare-output.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,eAA2C;IAC9E,IAAI,CAAC,eAAe;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,qCAAqC,eAAe,CAAC,YAAY,EAAE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;IACtE,IAAI,eAAe,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,qBAAqB,eAAe,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACxE,IAAI,eAAe,CAAC,uBAAuB;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,eAAe,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAC7H,OAAO,CAAC,GAAG,CAAC,uBAAuB,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
import { type AgentComparisonPackResult } from '../core/agent-comparison-pack.js';
|
|
3
|
+
import type { LedgerArtifactRef } from '../schemas/ledger.js';
|
|
3
4
|
export { compareImageReference } from './compare-image-reference.js';
|
|
4
5
|
export declare function compareReferenceImplementation(options: {
|
|
5
6
|
workspaceRoot: string;
|
|
@@ -13,6 +14,8 @@ export declare function compareReferenceImplementation(options: {
|
|
|
13
14
|
sideBySidePath: string;
|
|
14
15
|
reportPath: string;
|
|
15
16
|
metricsPath: string;
|
|
17
|
+
runId: string;
|
|
18
|
+
artifacts: LedgerArtifactRef[];
|
|
16
19
|
agentComparison?: AgentComparisonPackResult;
|
|
17
20
|
}>;
|
|
18
21
|
export declare function registerCompareCommand(program: Command): void;
|
package/dist/commands/compare.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { writeAgentComparisonPack } from '../core/agent-comparison-pack.js';
|
|
4
|
+
import { referenceImplementationArtifacts } from '../core/comparison-artifacts.js';
|
|
4
5
|
import { loadRegionContract } from '../core/dom-metrics.js';
|
|
5
6
|
import { capturePage } from '../core/playwright-capture.js';
|
|
6
7
|
import { writeReferenceImplementationReport } from '../core/report-writer.js';
|
|
@@ -9,6 +10,7 @@ import { createSideBySideImage } from '../core/side-by-side.js';
|
|
|
9
10
|
import { startStaticServer } from '../core/static-server.js';
|
|
10
11
|
import { resolveTarget, resolveWorkspace } from '../core/workspace.js';
|
|
11
12
|
import { compareImageReference } from './compare-image-reference.js';
|
|
13
|
+
import { printAgentComparison } from './compare-output.js';
|
|
12
14
|
export { compareImageReference } from './compare-image-reference.js';
|
|
13
15
|
export async function compareReferenceImplementation(options) {
|
|
14
16
|
const workspace = resolveWorkspace(options.workspaceRoot);
|
|
@@ -95,7 +97,14 @@ export async function compareReferenceImplementation(options) {
|
|
|
95
97
|
}
|
|
96
98
|
await logger.artifact(reportPath, 'report');
|
|
97
99
|
await logger.complete('ok');
|
|
98
|
-
return {
|
|
100
|
+
return {
|
|
101
|
+
sideBySidePath,
|
|
102
|
+
reportPath,
|
|
103
|
+
metricsPath,
|
|
104
|
+
runId: logger.runId,
|
|
105
|
+
artifacts: referenceImplementationArtifacts({ referencePath, implementationPath, sideBySidePath, metricsPath, reportPath, agentComparison }),
|
|
106
|
+
agentComparison,
|
|
107
|
+
};
|
|
99
108
|
}
|
|
100
109
|
catch (error) {
|
|
101
110
|
await logger.event({ type: 'command.failed', status: 'failed', message: error instanceof Error ? error.message : String(error) });
|
|
@@ -174,22 +183,4 @@ export function registerCompareCommand(program) {
|
|
|
174
183
|
console.log(`Report: ${result.reportPath}`);
|
|
175
184
|
});
|
|
176
185
|
}
|
|
177
|
-
function printAgentComparison(agentComparison) {
|
|
178
|
-
if (!agentComparison)
|
|
179
|
-
return;
|
|
180
|
-
console.log(`Agent comparison prompt: ${agentComparison.promptPath}`);
|
|
181
|
-
console.log(`Codex comparison prompt: ${agentComparison.codexPromptPath}`);
|
|
182
|
-
console.log(`Claude comparison prompt: ${agentComparison.claudePromptPath}`);
|
|
183
|
-
console.log(`Agent comparison schema: ${agentComparison.schemaPath}`);
|
|
184
|
-
console.log(`Agent comparison response target: ${agentComparison.responsePath}`);
|
|
185
|
-
if (agentComparison.status === 'validated') {
|
|
186
|
-
console.log(`Image comparison: ${agentComparison.imageComparisonPath}`);
|
|
187
|
-
if (agentComparison.structureComparisonPath)
|
|
188
|
-
console.log(`Structure comparison: ${agentComparison.structureComparisonPath}`);
|
|
189
|
-
console.log(`Comparison summary: ${agentComparison.summaryPath}`);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
console.log(`Agent comparison status: ${agentComparison.status}`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
186
|
//# sourceMappingURL=compare.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,wBAAwB,EAAkC,MAAM,kCAAkC,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,12 @@ export declare function showLedger(input: {
|
|
|
23
23
|
trajectory: import("../core/ledger-store.js").TrajectorySummary;
|
|
24
24
|
iterations: unknown[];
|
|
25
25
|
events: unknown[];
|
|
26
|
+
runs: unknown[];
|
|
26
27
|
instructionVersions: unknown[];
|
|
27
28
|
notes: unknown[];
|
|
28
|
-
|
|
29
|
+
agentResponses: unknown[];
|
|
30
|
+
artifacts: import("../core/current-artifacts.js").LedgerArtifactRow[];
|
|
31
|
+
currentArtifacts: import("../core/current-artifacts.js").CurrentArtifacts;
|
|
29
32
|
};
|
|
30
33
|
};
|
|
31
34
|
export declare function getLedgerNext(input: {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type LedgerActionExecutor, type LedgerActionKind, type LedgerActionStatus, type LedgerMode } from '../schemas/ledger.js';
|
|
2
|
+
type LedgerEnv = Partial<Pick<NodeJS.ProcessEnv, 'LIMNER_LEDGER_HOME'>>;
|
|
3
|
+
type TrajectorySelector = {
|
|
4
|
+
ledgerEnv?: LedgerEnv;
|
|
5
|
+
trajectoryId?: string;
|
|
6
|
+
target?: string;
|
|
7
|
+
mode?: LedgerMode;
|
|
8
|
+
};
|
|
9
|
+
export type LoopActionInput = TrajectorySelector & {
|
|
10
|
+
status: LedgerActionStatus;
|
|
11
|
+
kind: LedgerActionKind;
|
|
12
|
+
executor: LedgerActionExecutor;
|
|
13
|
+
summary: string;
|
|
14
|
+
actionId?: string;
|
|
15
|
+
fromRunId?: string;
|
|
16
|
+
files?: string[];
|
|
17
|
+
commit?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function recordLoopAction(input: LoopActionInput): {
|
|
20
|
+
actionId: string;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ledgerActionExecutorSchema, ledgerActionKindSchema, ledgerActionStatusSchema, ledgerActionSummarySchema } from '../schemas/ledger.js';
|
|
2
|
+
import { openLedgerDatabase } from '../core/ledger-db.js';
|
|
3
|
+
import { createLedgerId } from '../core/ledger-ids.js';
|
|
4
|
+
import { resolveLedgerPaths } from '../core/ledger-paths.js';
|
|
5
|
+
import { createLedgerStore } from '../core/ledger-store.js';
|
|
6
|
+
export function recordLoopAction(input) {
|
|
7
|
+
return withStore(input.ledgerEnv, (store) => {
|
|
8
|
+
const trajectory = store.resolveTrajectory(selector(input));
|
|
9
|
+
const status = ledgerActionStatusSchema.parse(input.status);
|
|
10
|
+
const kind = ledgerActionKindSchema.parse(input.kind);
|
|
11
|
+
const executor = ledgerActionExecutorSchema.parse(input.executor);
|
|
12
|
+
const summary = ledgerActionSummarySchema.parse(input.summary);
|
|
13
|
+
const actionId = input.actionId ?? createLedgerId('act');
|
|
14
|
+
store.appendEvent({
|
|
15
|
+
trajectoryId: trajectory.trajectoryId,
|
|
16
|
+
iterationId: trajectory.activeIterationId ?? undefined,
|
|
17
|
+
eventType: `loop.action.${status}`,
|
|
18
|
+
actor: actionActor(executor),
|
|
19
|
+
command: 'loop action',
|
|
20
|
+
resultStatus: status,
|
|
21
|
+
inputsSummary: JSON.stringify({
|
|
22
|
+
actionId,
|
|
23
|
+
kind,
|
|
24
|
+
executor,
|
|
25
|
+
fromRunId: input.fromRunId,
|
|
26
|
+
summary,
|
|
27
|
+
files: input.files,
|
|
28
|
+
commit: input.commit,
|
|
29
|
+
}),
|
|
30
|
+
artifactRefs: (input.files ?? []).map((file) => ({ path: file, kind: 'edited-file', role: 'artifact' })),
|
|
31
|
+
});
|
|
32
|
+
return { actionId };
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function withStore(env, callback) {
|
|
36
|
+
const db = openLedgerDatabase({ databasePath: resolveLedgerPaths(env).databasePath });
|
|
37
|
+
try {
|
|
38
|
+
return callback(createLedgerStore(db));
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
db.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function selector(input) {
|
|
45
|
+
return { trajectoryId: input.trajectoryId, target: input.target, mode: input.mode };
|
|
46
|
+
}
|
|
47
|
+
function actionActor(executor) {
|
|
48
|
+
if (executor === 'user')
|
|
49
|
+
return 'user';
|
|
50
|
+
if (executor === 'cli')
|
|
51
|
+
return 'cli';
|
|
52
|
+
return 'agent';
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=loop-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-actions.js","sourceRoot":"","sources":["../../src/commands/loop-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,yBAAyB,EAAqH,MAAM,sBAAsB,CAAC;AAClQ,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAA+B,MAAM,yBAAyB,CAAC;AAMzF,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QACzD,KAAK,CAAC,WAAW,CAAC;YAChB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,WAAW,EAAE,UAAU,CAAC,iBAAiB,IAAI,SAAS;YACtD,SAAS,EAAE,eAAe,MAAM,EAAE;YAClC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,YAAY,EAAE,MAAM;YACpB,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5B,QAAQ;gBACR,IAAI;gBACJ,QAAQ;gBACR,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO;gBACP,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACF,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;SACzG,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAI,GAA0B,EAAE,QAA4D;IAC5G,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,WAAW,CAAC,QAA8B;IACjD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { advanceLoop, closeLoop, compareLoop, getLoopStatus, startLoop } from './loop.js';
|
|
1
|
+
import { advanceLoop, closeLoop, compareLoop, getLoopStatus, getLoopTask, recordLoopAction, startLoop } from './loop.js';
|
|
2
2
|
export function registerLoopCommand(program) {
|
|
3
3
|
const loop = program.command('loop').description('Manage Limner comparison loops');
|
|
4
4
|
loop
|
|
@@ -64,8 +64,102 @@ export function registerLoopCommand(program) {
|
|
|
64
64
|
console.log(`Side-by-side: ${result.sideBySidePath}`);
|
|
65
65
|
if (result.reportPath)
|
|
66
66
|
console.log(`Report: ${result.reportPath}`);
|
|
67
|
-
if (result.agentComparison)
|
|
67
|
+
if (result.agentComparison) {
|
|
68
68
|
console.log(`Agent comparison status: ${result.agentComparison.status}`);
|
|
69
|
+
console.log(`Agent response freshness: ${result.agentComparison.freshness}`);
|
|
70
|
+
}
|
|
69
71
|
});
|
|
72
|
+
loop
|
|
73
|
+
.command('task')
|
|
74
|
+
.description('Print an agent-ready task brief from the latest validated comparison')
|
|
75
|
+
.option('--trajectory <id>', 'trajectory id')
|
|
76
|
+
.option('-t, --target <name>', 'target name')
|
|
77
|
+
.option('--mode <mode>', 'loop mode')
|
|
78
|
+
.option('--format <format>', 'output format', 'markdown')
|
|
79
|
+
.option('--executor <executor>', 'desired action executor', 'subagent')
|
|
80
|
+
.action(async (options, command) => {
|
|
81
|
+
const globals = command.optsWithGlobals();
|
|
82
|
+
const result = await getLoopTask({
|
|
83
|
+
workspaceRoot: globals.workspace,
|
|
84
|
+
trajectoryId: options.trajectory,
|
|
85
|
+
target: options.target,
|
|
86
|
+
mode: options.mode,
|
|
87
|
+
format: options.format,
|
|
88
|
+
executor: options.executor,
|
|
89
|
+
});
|
|
90
|
+
process.stdout.write(result.output);
|
|
91
|
+
});
|
|
92
|
+
registerLoopActionCommand(loop);
|
|
93
|
+
}
|
|
94
|
+
function registerLoopActionCommand(loop) {
|
|
95
|
+
const action = loop.command('action').description('Record loop action ledger events');
|
|
96
|
+
addActionSelector(action.command('start')
|
|
97
|
+
.requiredOption('--from-run <run-id>', 'source run id')
|
|
98
|
+
.option('--kind <kind>', 'action kind', 'polish')
|
|
99
|
+
.option('--executor <executor>', 'action executor', 'subagent')
|
|
100
|
+
.requiredOption('--summary <text>', 'short action summary'))
|
|
101
|
+
.action((options) => {
|
|
102
|
+
printAction({
|
|
103
|
+
trajectoryId: options.trajectory,
|
|
104
|
+
target: options.target,
|
|
105
|
+
mode: options.mode,
|
|
106
|
+
status: 'started',
|
|
107
|
+
kind: options.kind,
|
|
108
|
+
executor: options.executor,
|
|
109
|
+
fromRunId: options.fromRun,
|
|
110
|
+
summary: options.summary,
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
addActionSelector(action.command('complete')
|
|
114
|
+
.requiredOption('--action <action-id>', 'action id')
|
|
115
|
+
.requiredOption('--summary <text>', 'short action summary')
|
|
116
|
+
.option('--files <paths>', 'comma-separated edited files')
|
|
117
|
+
.option('--commit <sha>', 'commit sha')
|
|
118
|
+
.option('--kind <kind>', 'action kind', 'polish')
|
|
119
|
+
.option('--executor <executor>', 'action executor', 'agent'))
|
|
120
|
+
.action((options) => {
|
|
121
|
+
printAction({
|
|
122
|
+
trajectoryId: options.trajectory,
|
|
123
|
+
target: options.target,
|
|
124
|
+
mode: options.mode,
|
|
125
|
+
status: 'completed',
|
|
126
|
+
kind: options.kind,
|
|
127
|
+
executor: options.executor,
|
|
128
|
+
actionId: options.action,
|
|
129
|
+
summary: options.summary,
|
|
130
|
+
files: parseFiles(options.files),
|
|
131
|
+
commit: options.commit,
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
addActionSelector(action.command('skip')
|
|
135
|
+
.requiredOption('--from-run <run-id>', 'source run id')
|
|
136
|
+
.requiredOption('--summary <text>', 'short action summary')
|
|
137
|
+
.option('--executor <executor>', 'action executor', 'agent'))
|
|
138
|
+
.action((options) => {
|
|
139
|
+
printAction({
|
|
140
|
+
trajectoryId: options.trajectory,
|
|
141
|
+
target: options.target,
|
|
142
|
+
mode: options.mode,
|
|
143
|
+
status: 'skipped',
|
|
144
|
+
kind: 'no-op',
|
|
145
|
+
executor: options.executor,
|
|
146
|
+
fromRunId: options.fromRun,
|
|
147
|
+
summary: options.summary,
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function printAction(input) {
|
|
152
|
+
const result = recordLoopAction(input);
|
|
153
|
+
console.log(`Action: ${result.actionId}`);
|
|
154
|
+
}
|
|
155
|
+
function addActionSelector(command) {
|
|
156
|
+
return command
|
|
157
|
+
.option('--trajectory <id>', 'trajectory id')
|
|
158
|
+
.option('-t, --target <name>', 'target name')
|
|
159
|
+
.option('--mode <mode>', 'loop mode');
|
|
160
|
+
}
|
|
161
|
+
function parseFiles(files) {
|
|
162
|
+
const parsed = files?.split(',').map((file) => file.trim()).filter(Boolean);
|
|
163
|
+
return parsed && parsed.length > 0 ? parsed : undefined;
|
|
70
164
|
}
|
|
71
165
|
//# sourceMappingURL=loop-cli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-cli.js","sourceRoot":"","sources":["../../src/commands/loop-cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"loop-cli.js","sourceRoot":"","sources":["../../src/commands/loop-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AgentComparisonPackResult } from '../core/agent-comparison-pack.js';
|
|
2
2
|
import type { LedgerMode } from '../schemas/ledger.js';
|
|
3
|
+
import type { LedgerArtifactRef } from '../schemas/ledger.js';
|
|
3
4
|
export type LoopCompareInput = {
|
|
4
5
|
workspaceRoot: string;
|
|
5
6
|
target: string;
|
|
@@ -12,6 +13,8 @@ export type LoopCompareInput = {
|
|
|
12
13
|
export type LoopCompareResult = {
|
|
13
14
|
sideBySidePath: string;
|
|
14
15
|
reportPath?: string;
|
|
16
|
+
runId?: string;
|
|
17
|
+
artifacts: LedgerArtifactRef[];
|
|
15
18
|
agentComparison?: AgentComparisonPackResult;
|
|
16
19
|
};
|
|
17
20
|
export declare function runLoopComparison(input: LoopCompareInput): Promise<LoopCompareResult>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { writeAgentComparisonPack } from '../core/agent-comparison-pack.js';
|
|
4
|
+
import { agentComparisonArtifacts, artifact } from '../core/comparison-artifacts.js';
|
|
4
5
|
import { loadRegionContract } from '../core/dom-metrics.js';
|
|
5
6
|
import { capturePage } from '../core/playwright-capture.js';
|
|
6
7
|
import { createRunLogger } from '../core/run-logger.js';
|
|
@@ -74,7 +75,20 @@ async function compareImageImplementation(input) {
|
|
|
74
75
|
await logger.artifact(agentComparison.schemaPath, 'agent-comparison-schema');
|
|
75
76
|
await logger.artifact(reportPath, 'report');
|
|
76
77
|
await logger.complete('ok');
|
|
77
|
-
return {
|
|
78
|
+
return {
|
|
79
|
+
sideBySidePath,
|
|
80
|
+
reportPath,
|
|
81
|
+
runId: logger.runId,
|
|
82
|
+
artifacts: [
|
|
83
|
+
...artifact(implementationPath, 'implementation-screenshot'),
|
|
84
|
+
...artifact(`${implementationPath}.console.json`, 'implementation-console-log'),
|
|
85
|
+
...artifact(`${implementationPath}.metrics.json`, 'implementation-dom-metrics'),
|
|
86
|
+
...artifact(sideBySidePath, 'side-by-side'),
|
|
87
|
+
...artifact(reportPath, 'report'),
|
|
88
|
+
...agentComparisonArtifacts(agentComparison),
|
|
89
|
+
],
|
|
90
|
+
agentComparison,
|
|
91
|
+
};
|
|
78
92
|
}
|
|
79
93
|
catch (error) {
|
|
80
94
|
await logger.event({ type: 'command.failed', status: 'failed', message: error instanceof Error ? error.message : String(error) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-comparison-adapters.js","sourceRoot":"","sources":["../../src/commands/loop-comparison-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,wBAAwB,EAAkC,MAAM,kCAAkC,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"loop-comparison-adapters.js","sourceRoot":"","sources":["../../src/commands/loop-comparison-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type LedgerActionExecutor, type LedgerMode } from '../schemas/ledger.js';
|
|
2
|
+
type LedgerEnv = Partial<Pick<NodeJS.ProcessEnv, 'LIMNER_LEDGER_HOME'>>;
|
|
3
|
+
type TrajectorySelector = {
|
|
4
|
+
ledgerEnv?: LedgerEnv;
|
|
5
|
+
trajectoryId?: string;
|
|
6
|
+
target?: string;
|
|
7
|
+
mode?: LedgerMode;
|
|
8
|
+
};
|
|
9
|
+
export type LoopTaskInput = TrajectorySelector & {
|
|
10
|
+
executor?: LedgerActionExecutor;
|
|
11
|
+
format?: 'markdown' | 'json';
|
|
12
|
+
workspaceRoot?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function getLoopTask(input: LoopTaskInput): Promise<{
|
|
15
|
+
output: string;
|
|
16
|
+
}>;
|
|
17
|
+
export {};
|