@neonwatty/limner 0.1.6 → 0.1.8
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 +31 -29
- package/dist/commands/compare-image-reference.d.ts +1 -0
- package/dist/commands/compare-image-reference.js +4 -0
- package/dist/commands/compare-image-reference.js.map +1 -1
- package/dist/commands/compare-output.js +2 -1
- package/dist/commands/compare-output.js.map +1 -1
- package/dist/commands/compare.d.ts +1 -0
- package/dist/commands/compare.js +4 -12
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/ledger.d.ts +3 -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 +121 -2
- package/dist/commands/loop-cli.js.map +1 -1
- package/dist/commands/loop-comparison-adapters.d.ts +1 -0
- package/dist/commands/loop-comparison-adapters.js +7 -2
- package/dist/commands/loop-comparison-adapters.js.map +1 -1
- package/dist/commands/loop-response.d.ts +31 -0
- package/dist/commands/loop-response.js +84 -0
- package/dist/commands/loop-response.js.map +1 -0
- package/dist/commands/loop-task.d.ts +17 -0
- package/dist/commands/loop-task.js +98 -0
- package/dist/commands/loop-task.js.map +1 -0
- package/dist/commands/loop.d.ts +4 -1
- package/dist/commands/loop.js +26 -21
- package/dist/commands/loop.js.map +1 -1
- package/dist/core/agent-comparison-pack.d.ts +17 -0
- package/dist/core/agent-comparison-pack.js +25 -102
- package/dist/core/agent-comparison-pack.js.map +1 -1
- package/dist/core/agent-comparison-prompts.d.ts +1 -1
- package/dist/core/agent-comparison-prompts.js +4 -4
- package/dist/core/agent-comparison-prompts.js.map +1 -1
- package/dist/core/agent-comparison-report.js +2 -2
- package/dist/core/agent-comparison-report.js.map +1 -1
- package/dist/core/agent-comparison-response.d.ts +1 -0
- package/dist/core/agent-comparison-response.js +2 -0
- package/dist/core/agent-comparison-response.js.map +1 -0
- package/dist/core/agent-comparison-submit.d.ts +35 -0
- package/dist/core/agent-comparison-submit.js +113 -0
- package/dist/core/agent-comparison-submit.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.js +16 -7
- package/dist/core/comparison-artifacts.js.map +1 -1
- 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 +22 -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 +20 -0
- package/dist/core/ledger-db.js.map +1 -1
- package/dist/core/ledger-events.js +21 -1
- package/dist/core/ledger-events.js.map +1 -1
- package/dist/core/ledger-markdown.d.ts +21 -6
- package/dist/core/ledger-markdown.js +89 -6
- package/dist/core/ledger-markdown.js.map +1 -1
- package/dist/core/ledger-queries.d.ts +4 -1
- package/dist/core/ledger-queries.js +12 -3
- package/dist/core/ledger-queries.js.map +1 -1
- package/dist/core/ledger-store.d.ts +8 -1
- 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/report-writer.js +1 -1
- package/dist/schemas/ledger.d.ts +23 -0
- package/dist/schemas/ledger.js +4 -0
- package/dist/schemas/ledger.js.map +1 -1
- package/docs/agent-workflow.md +39 -11
- package/docs/archive/visual-spec-workflow.md +23 -0
- package/docs/goals/db-native-agent-responses/goal.md +91 -0
- package/docs/goals/db-native-agent-responses/state.yaml +240 -0
- 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 +22 -21
- package/templates/target/AGENT_GUIDE.md +4 -4
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { agentFeedbackSchema, ledgerArtifactRefSchema } from '../schemas/ledger.js';
|
|
2
|
+
import { agentFeedbackSchema, ledgerActionSummarySchema, ledgerArtifactRefSchema } from '../schemas/ledger.js';
|
|
3
3
|
import { createLedgerId } from './ledger-ids.js';
|
|
4
|
+
const actionInputsSummaryMessage = 'loop.action inputsSummary must be valid JSON object with a summary';
|
|
4
5
|
export function insertLedgerEvent(db, input, now) {
|
|
5
6
|
const feedback = agentFeedbackSchema.parse(input.agentFeedback);
|
|
7
|
+
validateActionSummary(input);
|
|
6
8
|
db.prepare(`
|
|
7
9
|
insert into ledger_events (
|
|
8
10
|
event_id, trajectory_id, iteration_id, run_id, event_type, actor, command,
|
|
@@ -27,6 +29,24 @@ export function insertLedgerEvent(db, input, now) {
|
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
}
|
|
32
|
+
function validateActionSummary(input) {
|
|
33
|
+
if (!input.eventType.startsWith('loop.action.')) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const parsed = parseActionInputsSummary(input.inputsSummary);
|
|
37
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed) || !('summary' in parsed)) {
|
|
38
|
+
throw new Error(actionInputsSummaryMessage);
|
|
39
|
+
}
|
|
40
|
+
ledgerActionSummarySchema.parse(parsed.summary);
|
|
41
|
+
}
|
|
42
|
+
function parseActionInputsSummary(inputsSummary) {
|
|
43
|
+
try {
|
|
44
|
+
return JSON.parse(inputsSummary ?? 'null');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new Error(actionInputsSummaryMessage);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
30
50
|
function normalizeArtifactRef(ref) {
|
|
31
51
|
const parsed = ledgerArtifactRefSchema.parse(ref);
|
|
32
52
|
if (typeof parsed === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-events.js","sourceRoot":"","sources":["../../src/core/ledger-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAA0B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-events.js","sourceRoot":"","sources":["../../src/core/ledger-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
type ArtifactRow = {
|
|
2
|
+
kind: string;
|
|
3
|
+
path: string;
|
|
4
|
+
role?: string;
|
|
5
|
+
existsOnDisk?: number | null;
|
|
6
|
+
snapshotPath?: string | null;
|
|
7
|
+
};
|
|
1
8
|
type ExportedTrajectory = {
|
|
2
9
|
trajectory: {
|
|
3
10
|
trajectoryId: string;
|
|
@@ -23,13 +30,21 @@ type ExportedTrajectory = {
|
|
|
23
30
|
notes?: string;
|
|
24
31
|
createdAt?: string;
|
|
25
32
|
}>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
agentResponses?: Array<{
|
|
34
|
+
responseId: string;
|
|
35
|
+
runId?: string;
|
|
36
|
+
responsePath: string;
|
|
37
|
+
responseHash?: string;
|
|
38
|
+
freshness: string;
|
|
39
|
+
validationStatus: string;
|
|
40
|
+
scoreJson?: string;
|
|
41
|
+
topFix?: string;
|
|
32
42
|
}>;
|
|
43
|
+
artifacts: ArtifactRow[];
|
|
44
|
+
currentArtifacts?: {
|
|
45
|
+
writtenArtifacts: ArtifactRow[];
|
|
46
|
+
expectedOutputs: ArtifactRow[];
|
|
47
|
+
};
|
|
33
48
|
};
|
|
34
49
|
export declare function formatLedgerMarkdown(exported: ExportedTrajectory): string;
|
|
35
50
|
export {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export function formatLedgerMarkdown(exported) {
|
|
2
|
+
const currentWrittenArtifacts = exported.currentArtifacts?.writtenArtifacts ?? exported.artifacts.filter((artifact) => artifact.role !== 'expected-output');
|
|
3
|
+
const currentExpectedOutputs = exported.currentArtifacts?.expectedOutputs ?? exported.artifacts.filter((artifact) => artifact.role === 'expected-output');
|
|
2
4
|
const lines = [
|
|
3
5
|
'# Limner Trajectory',
|
|
4
6
|
'',
|
|
@@ -14,29 +16,106 @@ export function formatLedgerMarkdown(exported) {
|
|
|
14
16
|
'## Timeline',
|
|
15
17
|
'',
|
|
16
18
|
...exported.events.flatMap(formatEvent),
|
|
17
|
-
'##
|
|
19
|
+
'## Agent Responses',
|
|
18
20
|
'',
|
|
19
|
-
...
|
|
20
|
-
'##
|
|
21
|
+
...formatAgentResponses(exported.agentResponses ?? []),
|
|
22
|
+
'## Action History',
|
|
21
23
|
'',
|
|
22
|
-
...
|
|
24
|
+
...formatActions(exported.events),
|
|
25
|
+
'## Current Written Artifacts',
|
|
26
|
+
'',
|
|
27
|
+
...formatArtifacts(currentWrittenArtifacts),
|
|
28
|
+
'## Current Expected Outputs',
|
|
29
|
+
'',
|
|
30
|
+
...formatArtifacts(currentExpectedOutputs),
|
|
31
|
+
'## Artifact History',
|
|
32
|
+
'',
|
|
33
|
+
...formatArtifacts(exported.artifacts),
|
|
23
34
|
'',
|
|
24
35
|
];
|
|
25
36
|
return lines.join('\n');
|
|
26
37
|
}
|
|
38
|
+
function formatAgentResponses(responses) {
|
|
39
|
+
if (responses.length === 0)
|
|
40
|
+
return ['- None recorded'];
|
|
41
|
+
return responses.flatMap((response) => [
|
|
42
|
+
`- ${response.responseId}`,
|
|
43
|
+
...(response.runId ? [` - run: ${response.runId}`] : []),
|
|
44
|
+
` - status: ${response.validationStatus}`,
|
|
45
|
+
` - freshness: ${response.freshness}`,
|
|
46
|
+
...(response.responseHash ? [` - hash: ${response.responseHash}`] : []),
|
|
47
|
+
...formatScore(response.scoreJson),
|
|
48
|
+
...(response.topFix ? [` - top fix: ${response.topFix}`] : []),
|
|
49
|
+
` - response store: ${response.responsePath}`,
|
|
50
|
+
]);
|
|
51
|
+
}
|
|
52
|
+
function formatScore(raw) {
|
|
53
|
+
if (!raw)
|
|
54
|
+
return [];
|
|
55
|
+
try {
|
|
56
|
+
const parsed = JSON.parse(raw);
|
|
57
|
+
return [
|
|
58
|
+
typeof parsed.imageOverall === 'number' ? ` - image score: ${parsed.imageOverall}` : undefined,
|
|
59
|
+
typeof parsed.structureOverall === 'number' ? ` - structure score: ${parsed.structureOverall}` : undefined,
|
|
60
|
+
].filter((line) => Boolean(line));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
27
66
|
function formatEvent(event) {
|
|
28
67
|
const refs = parseRefs(event.artifactRefsJson);
|
|
68
|
+
const context = event.eventType.startsWith('loop.action.') ? [] : formatContext(event.inputsSummary);
|
|
29
69
|
return [
|
|
30
70
|
`- ${event.createdAt ?? 'unknown'} ${event.eventType} (${event.resultStatus ?? 'unknown'})`,
|
|
31
71
|
` - actor: ${event.actor ?? 'unknown'}`,
|
|
32
72
|
` - command: ${event.command ?? 'unknown'}`,
|
|
33
73
|
...(event.runId ? [` - run: ${event.runId}`] : []),
|
|
34
74
|
...(event.agentFeedback ? [` - feedback: ${event.agentFeedback}`] : []),
|
|
35
|
-
...
|
|
75
|
+
...context,
|
|
36
76
|
...(event.notes ? [` - notes: ${event.notes}`] : []),
|
|
37
77
|
...refs.map((ref) => ` - ${ref.role === 'expected-output' ? 'expected output' : 'artifact'}: ${ref.kind}: ${ref.path}`),
|
|
38
78
|
];
|
|
39
79
|
}
|
|
80
|
+
function formatActions(events) {
|
|
81
|
+
const actions = events.filter((event) => event.eventType.startsWith('loop.action.'));
|
|
82
|
+
if (actions.length === 0)
|
|
83
|
+
return ['- None recorded'];
|
|
84
|
+
return actions.flatMap(formatAction);
|
|
85
|
+
}
|
|
86
|
+
function formatAction(event) {
|
|
87
|
+
const summary = parseActionSummary(event.inputsSummary);
|
|
88
|
+
const refs = parseRefs(event.artifactRefsJson);
|
|
89
|
+
const files = getStringArray(summary, 'files');
|
|
90
|
+
const fallbackStatus = event.eventType.replace('loop.action.', '') || undefined;
|
|
91
|
+
const actionId = getString(summary, 'actionId') ?? event.runId ?? event.eventType;
|
|
92
|
+
return [
|
|
93
|
+
`- ${actionId}`,
|
|
94
|
+
` - status: ${getString(summary, 'status') ?? fallbackStatus ?? event.resultStatus ?? 'unknown'}`,
|
|
95
|
+
...optionalLine('executor', getString(summary, 'executor') ?? event.actor),
|
|
96
|
+
...optionalLine('from run', getString(summary, 'fromRunId')),
|
|
97
|
+
...optionalLine('summary', getString(summary, 'summary') ?? event.notes),
|
|
98
|
+
...formatActionFiles(files.length > 0 ? files : refs.map((ref) => ref.path)),
|
|
99
|
+
...optionalLine('commit', getString(summary, 'commit')),
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
function parseActionSummary(raw) {
|
|
103
|
+
if (!raw)
|
|
104
|
+
return {};
|
|
105
|
+
try {
|
|
106
|
+
const parsed = JSON.parse(raw);
|
|
107
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function optionalLine(label, value) {
|
|
114
|
+
return value ? [` - ${label}: ${value}`] : [];
|
|
115
|
+
}
|
|
116
|
+
function formatActionFiles(files) {
|
|
117
|
+
return files.length > 0 ? [` - files: ${files.join(', ')}`] : [];
|
|
118
|
+
}
|
|
40
119
|
function formatContext(raw) {
|
|
41
120
|
if (!raw)
|
|
42
121
|
return [];
|
|
@@ -45,7 +124,7 @@ function formatContext(raw) {
|
|
|
45
124
|
const parts = [
|
|
46
125
|
`cli ${stringValue(parsed.cliVersion)}`,
|
|
47
126
|
parsed.headless === true ? 'headless' : parsed.headed === true ? 'headed' : undefined,
|
|
48
|
-
parsed.fullPage === true ? 'full-page' : 'viewport',
|
|
127
|
+
parsed.fullPage === true ? 'full-page' : parsed.fullPage === false ? 'viewport' : undefined,
|
|
49
128
|
stringValue(parsed.cwd),
|
|
50
129
|
].filter(Boolean);
|
|
51
130
|
return parts.length > 0 ? [` - context: ${parts.join(', ')}`] : [];
|
|
@@ -86,6 +165,10 @@ function getString(value, key) {
|
|
|
86
165
|
const record = value;
|
|
87
166
|
return typeof record[key] === 'string' ? record[key] : undefined;
|
|
88
167
|
}
|
|
168
|
+
function getStringArray(value, key) {
|
|
169
|
+
const record = value;
|
|
170
|
+
return Array.isArray(record[key]) ? record[key].filter((item) => typeof item === 'string') : [];
|
|
171
|
+
}
|
|
89
172
|
function stringValue(value) {
|
|
90
173
|
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
91
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-markdown.js","sourceRoot":"","sources":["../../src/core/ledger-markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ledger-markdown.js","sourceRoot":"","sources":["../../src/core/ledger-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LedgerArtifactRow } from './current-artifacts.js';
|
|
1
2
|
import type { LedgerDatabase } from './ledger-db.js';
|
|
2
3
|
import type { ResolveTrajectoryInput, TrajectorySummary } from './ledger-store.js';
|
|
3
4
|
export declare function queryTrajectories(db: LedgerDatabase, input: ResolveTrajectoryInput): TrajectorySummary[];
|
|
@@ -10,5 +11,7 @@ export declare function exportTrajectoryRows(db: LedgerDatabase, trajectory: Tra
|
|
|
10
11
|
runs: unknown[];
|
|
11
12
|
instructionVersions: unknown[];
|
|
12
13
|
notes: unknown[];
|
|
13
|
-
|
|
14
|
+
agentResponses: unknown[];
|
|
15
|
+
artifacts: LedgerArtifactRow[];
|
|
16
|
+
currentArtifacts: import("./current-artifacts.js").CurrentArtifacts;
|
|
14
17
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getCurrentArtifacts } from './current-artifacts.js';
|
|
1
2
|
export function queryTrajectories(db, input) {
|
|
2
3
|
const conditions = [];
|
|
3
4
|
const params = [];
|
|
@@ -24,6 +25,8 @@ export function getIterations(db, trajectoryId) {
|
|
|
24
25
|
}
|
|
25
26
|
export function exportTrajectoryRows(db, trajectory) {
|
|
26
27
|
const trajectoryId = trajectory.trajectoryId;
|
|
28
|
+
const artifacts = db.prepare(`select artifact_id as artifactId, kind, path, role, exists_on_disk as existsOnDisk,
|
|
29
|
+
hash, snapshot_path as snapshotPath from artifacts where trajectory_id = ? order by rowid`).all(trajectoryId);
|
|
27
30
|
return {
|
|
28
31
|
trajectory,
|
|
29
32
|
iterations: getIterations(db, trajectoryId),
|
|
@@ -33,8 +36,13 @@ export function exportTrajectoryRows(db, trajectory) {
|
|
|
33
36
|
runs: db.prepare('select run_id as runId, iteration_id as iterationId, command, status from runs where trajectory_id = ? order by rowid').all(trajectoryId),
|
|
34
37
|
instructionVersions: db.prepare('select version_id as versionId, instructions_json as instructionsJson from instruction_versions where trajectory_id = ? order by rowid').all(trajectoryId),
|
|
35
38
|
notes: db.prepare('select note_id as noteId, body from notes where trajectory_id = ? order by rowid').all(trajectoryId),
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
agentResponses: db.prepare(`select response_id as responseId, iteration_id as iterationId, run_id as runId, mode, profile,
|
|
40
|
+
response_path as responsePath, response_hash as responseHash, freshness, validation_status as validationStatus,
|
|
41
|
+
input_fingerprint_json as inputFingerprintJson, comparison_context_json as comparisonContextJson,
|
|
42
|
+
response_json as responseJson, score_json as scoreJson,
|
|
43
|
+
top_fix as topFix, created_at as createdAt from agent_responses where trajectory_id = ? order by rowid`).all(trajectoryId),
|
|
44
|
+
artifacts,
|
|
45
|
+
currentArtifacts: getCurrentArtifacts(artifacts),
|
|
38
46
|
};
|
|
39
47
|
}
|
|
40
48
|
const trajectoryColumns = `
|
|
@@ -44,6 +52,7 @@ const trajectoryColumns = `
|
|
|
44
52
|
target,
|
|
45
53
|
status,
|
|
46
54
|
active_iteration_id as activeIterationId,
|
|
47
|
-
max_iterations as maxIterations
|
|
55
|
+
max_iterations as maxIterations,
|
|
56
|
+
context_json as contextJson
|
|
48
57
|
`;
|
|
49
58
|
//# sourceMappingURL=ledger-queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-queries.js","sourceRoot":"","sources":["../../src/core/ledger-queries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ledger-queries.js","sourceRoot":"","sources":["../../src/core/ledger-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,UAAU,iBAAiB,CAAC,EAAkB,EAAE,KAA6B;IACjF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI;QAC5B,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC;QACrC,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,CAAC;QACnC,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KAC/D,EAAE,CAAC;QACX,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,iBAAiB,sBAAsB,KAAK,gCAAgC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAwB,CAAC;AAClJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAkB,EAAE,YAAoB;IACpE,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,iBAAiB,4CAA4C,CAAC,CAAC,GAAG,CAAC,YAAY,CAAkC,CAAC;AAChJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAkB,EAAE,YAAoB;IACpE,OAAO,EAAE,CAAC,OAAO,CAAC,gHAAgH,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACxJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAkB,EAAE,UAA6B;IACpF,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAC7C,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;8FAC+D,CAAC,CAAC,GAAG,CAAC,YAAY,CAAwB,CAAC;IACvI,OAAO;QACL,UAAU;QACV,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC;QAC3C,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;;gEAEyC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QAC/E,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,uHAAuH,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QAC3J,mBAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,wIAAwI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QAC3L,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,kFAAkF,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QACvH,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC;;;;6GAI8E,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QAC5H,SAAS;QACT,gBAAgB,EAAE,mBAAmB,CAAC,SAAS,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAG;;;;;;;;;CASzB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type LedgerArtifactRef, type LedgerEventActor, type LedgerMode } from '../schemas/ledger.js';
|
|
2
2
|
import type { LedgerDatabase } from './ledger-db.js';
|
|
3
|
+
import { type RecordAgentResponseInput } from './ledger-agent-responses.js';
|
|
3
4
|
export type StartTrajectoryInput = {
|
|
4
5
|
mode: LedgerMode;
|
|
5
6
|
target: string;
|
|
@@ -18,6 +19,7 @@ export type TrajectorySummary = {
|
|
|
18
19
|
status: 'active' | 'closed';
|
|
19
20
|
activeIterationId: string | null;
|
|
20
21
|
maxIterations: number | null;
|
|
22
|
+
contextJson: string;
|
|
21
23
|
};
|
|
22
24
|
export type AppendEventInput = {
|
|
23
25
|
trajectoryId?: string;
|
|
@@ -48,6 +50,9 @@ export declare function createLedgerStore(db: LedgerDatabase): {
|
|
|
48
50
|
appendEvent(input: AppendEventInput): {
|
|
49
51
|
eventId: unknown;
|
|
50
52
|
};
|
|
53
|
+
recordAgentResponse(input: RecordAgentResponseInput): {
|
|
54
|
+
responseId: string;
|
|
55
|
+
};
|
|
51
56
|
resolveTrajectory(input: ResolveTrajectoryInput): TrajectorySummary;
|
|
52
57
|
advanceIteration(trajectoryId: string): {
|
|
53
58
|
iterationId: string;
|
|
@@ -60,6 +65,8 @@ export declare function createLedgerStore(db: LedgerDatabase): {
|
|
|
60
65
|
runs: unknown[];
|
|
61
66
|
instructionVersions: unknown[];
|
|
62
67
|
notes: unknown[];
|
|
63
|
-
|
|
68
|
+
agentResponses: unknown[];
|
|
69
|
+
artifacts: import("./current-artifacts.js").LedgerArtifactRow[];
|
|
70
|
+
currentArtifacts: import("./current-artifacts.js").CurrentArtifacts;
|
|
64
71
|
};
|
|
65
72
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ledgerModeSchema } from '../schemas/ledger.js';
|
|
2
|
+
import { insertAgentResponse } from './ledger-agent-responses.js';
|
|
2
3
|
import { insertLedgerEvent } from './ledger-events.js';
|
|
3
4
|
import { createLedgerId, createTrajectoryId } from './ledger-ids.js';
|
|
4
5
|
import { exportTrajectoryRows, getIterations, getTrajectory, queryTrajectories } from './ledger-queries.js';
|
|
@@ -56,6 +57,9 @@ export function createLedgerStore(db) {
|
|
|
56
57
|
insertLedgerEvent(db, input, now);
|
|
57
58
|
return { eventId: db.prepare('select event_id as eventId from ledger_events order by rowid desc limit 1').get() };
|
|
58
59
|
},
|
|
60
|
+
recordAgentResponse(input) {
|
|
61
|
+
return insertAgentResponse(db, input, new Date().toISOString());
|
|
62
|
+
},
|
|
59
63
|
resolveTrajectory(input) {
|
|
60
64
|
const candidates = queryTrajectories(db, input);
|
|
61
65
|
if (candidates.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-store.js","sourceRoot":"","sources":["../../src/core/ledger-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAkE,MAAM,sBAAsB,CAAC;AAExH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-store.js","sourceRoot":"","sources":["../../src/core/ledger-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function buildLoopCompareRerunCommand(trajectory, preferredContextJson) {
|
|
2
|
+
const context = {
|
|
3
|
+
...parseLoopContext(trajectory.contextJson),
|
|
4
|
+
...parseLoopContext(preferredContextJson),
|
|
5
|
+
};
|
|
6
|
+
const parts = ['limner', 'loop', 'compare', '--trajectory', trajectory.trajectoryId];
|
|
7
|
+
if (context.url)
|
|
8
|
+
parts.push('--url', shellQuote(context.url));
|
|
9
|
+
if (context.storageState)
|
|
10
|
+
parts.push('--storage-state', shellQuote(context.storageState));
|
|
11
|
+
if (context.fullPage)
|
|
12
|
+
parts.push('--full-page');
|
|
13
|
+
return parts.join(' ');
|
|
14
|
+
}
|
|
15
|
+
function parseLoopContext(raw) {
|
|
16
|
+
if (!raw)
|
|
17
|
+
return {};
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(raw);
|
|
20
|
+
const context = {};
|
|
21
|
+
if (typeof parsed.url === 'string')
|
|
22
|
+
context.url = parsed.url;
|
|
23
|
+
if (typeof parsed.storageState === 'string')
|
|
24
|
+
context.storageState = parsed.storageState;
|
|
25
|
+
if (typeof parsed.fullPage === 'boolean')
|
|
26
|
+
context.fullPage = parsed.fullPage;
|
|
27
|
+
return context;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function shellQuote(value) {
|
|
34
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=loop-rerun-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-rerun-command.js","sourceRoot":"","sources":["../../src/core/loop-rerun-command.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,4BAA4B,CAAC,UAAiE,EAAE,oBAAoC;IAClJ,MAAM,OAAO,GAAG;QACd,GAAG,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC;QAC3C,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;KAC1C,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACrF,IAAI,OAAO,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1F,IAAI,OAAO,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAA8B;IACtD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,MAAM,OAAO,GAAgE,EAAE,CAAC;QAChF,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAC7D,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;YAAE,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxF,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7E,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC"}
|
|
@@ -127,7 +127,7 @@ function formatAgentSpecStatus(agentSpec) {
|
|
|
127
127
|
## Visual Spec Status
|
|
128
128
|
|
|
129
129
|
- Agent-required spec pack generated.
|
|
130
|
-
- Next step: have an agent inspect the ideal image and reference artifacts, then write
|
|
130
|
+
- Next step: have an agent inspect the ideal image and reference artifacts, then write structured JSON to the response path named by the spec prompt.
|
|
131
131
|
- Rerun \`limner compare image-reference --target <target> --spec\` after the response file exists.`;
|
|
132
132
|
}
|
|
133
133
|
if (agentSpec.status === 'invalid') {
|
package/dist/schemas/ledger.d.ts
CHANGED
|
@@ -18,6 +18,26 @@ export declare const ledgerEventActorSchema: z.ZodEnum<{
|
|
|
18
18
|
cli: "cli";
|
|
19
19
|
}>;
|
|
20
20
|
export declare const agentFeedbackSchema: z.ZodOptional<z.ZodString>;
|
|
21
|
+
export declare const ledgerActionKindSchema: z.ZodEnum<{
|
|
22
|
+
polish: "polish";
|
|
23
|
+
handoff: "handoff";
|
|
24
|
+
"manual-edit": "manual-edit";
|
|
25
|
+
verification: "verification";
|
|
26
|
+
"no-op": "no-op";
|
|
27
|
+
}>;
|
|
28
|
+
export declare const ledgerActionStatusSchema: z.ZodEnum<{
|
|
29
|
+
skipped: "skipped";
|
|
30
|
+
failed: "failed";
|
|
31
|
+
started: "started";
|
|
32
|
+
completed: "completed";
|
|
33
|
+
}>;
|
|
34
|
+
export declare const ledgerActionExecutorSchema: z.ZodEnum<{
|
|
35
|
+
agent: "agent";
|
|
36
|
+
user: "user";
|
|
37
|
+
cli: "cli";
|
|
38
|
+
subagent: "subagent";
|
|
39
|
+
}>;
|
|
40
|
+
export declare const ledgerActionSummarySchema: z.ZodString;
|
|
21
41
|
export declare const ledgerArtifactRefSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
22
42
|
path: z.ZodString;
|
|
23
43
|
kind: z.ZodString;
|
|
@@ -32,4 +52,7 @@ export type TrajectoryStatus = z.infer<typeof trajectoryStatusSchema>;
|
|
|
32
52
|
export type IterationStatus = z.infer<typeof iterationStatusSchema>;
|
|
33
53
|
export type LedgerEventActor = z.infer<typeof ledgerEventActorSchema>;
|
|
34
54
|
export type AgentFeedback = z.infer<typeof agentFeedbackSchema>;
|
|
55
|
+
export type LedgerActionKind = z.infer<typeof ledgerActionKindSchema>;
|
|
56
|
+
export type LedgerActionStatus = z.infer<typeof ledgerActionStatusSchema>;
|
|
57
|
+
export type LedgerActionExecutor = z.infer<typeof ledgerActionExecutorSchema>;
|
|
35
58
|
export type LedgerArtifactRef = z.infer<typeof ledgerArtifactRefSchema>;
|
package/dist/schemas/ledger.js
CHANGED
|
@@ -4,6 +4,10 @@ export const trajectoryStatusSchema = z.enum(['active', 'closed']);
|
|
|
4
4
|
export const iterationStatusSchema = z.enum(['active', 'closed']);
|
|
5
5
|
export const ledgerEventActorSchema = z.enum(['user', 'agent', 'cli']);
|
|
6
6
|
export const agentFeedbackSchema = z.string().max(255).optional();
|
|
7
|
+
export const ledgerActionKindSchema = z.enum(['polish', 'handoff', 'manual-edit', 'verification', 'no-op']);
|
|
8
|
+
export const ledgerActionStatusSchema = z.enum(['started', 'completed', 'skipped', 'failed']);
|
|
9
|
+
export const ledgerActionExecutorSchema = z.enum(['subagent', 'agent', 'user', 'cli']);
|
|
10
|
+
export const ledgerActionSummarySchema = z.string().min(1).max(255);
|
|
7
11
|
export const ledgerArtifactRefSchema = z.union([
|
|
8
12
|
z.string(),
|
|
9
13
|
z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/schemas/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAC1G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;CACH,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/schemas/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAC1G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5G,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;CACH,CAAC,CAAC"}
|
package/docs/agent-workflow.md
CHANGED
|
@@ -12,16 +12,46 @@ Use `limner loop` when a screen will need Ralph Loop-style iteration. Limner sto
|
|
|
12
12
|
|
|
13
13
|
1. Start a trajectory with `limner loop start --mode <mode> --target <name> --name <human-name> --max-iterations <count>`.
|
|
14
14
|
2. Run `limner loop compare --trajectory <trajectory-id>`.
|
|
15
|
-
3. Read the generated agent comparison prompt
|
|
16
|
-
4.
|
|
15
|
+
3. Read the generated agent comparison prompt.
|
|
16
|
+
4. Submit the agent response with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
|
|
17
17
|
5. Use `limner loop status --trajectory <trajectory-id>` to inspect current state.
|
|
18
18
|
6. Use `limner loop next --trajectory <trajectory-id>` to begin the next scoped fix.
|
|
19
19
|
7. Use `limner loop close --trajectory <trajectory-id>` when the trajectory is done.
|
|
20
20
|
|
|
21
|
-
Every meaningful loop interaction writes a ledger event. Use `--feedback "<short note>"` on loop status for a 255-character `agentFeedback` note about improving the current process.
|
|
21
|
+
Every meaningful loop interaction writes a ledger event. Agent responses are submitted to the local SQLite DB with the full JSON body, hash, validation status, and freshness. Use `--feedback "<short note>"` on loop status for a 255-character `agentFeedback` note about improving the current process.
|
|
22
22
|
|
|
23
23
|
Use `limner ledger export <trajectory-id> --format markdown` when an agent needs a compact case file for a trajectory.
|
|
24
24
|
|
|
25
|
+
## Action Logging
|
|
26
|
+
|
|
27
|
+
After validation, the expected edit loop is:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
loop compare -> loop response submit -> loop task --executor subagent -> loop action start -> edit -> loop action complete -> loop compare
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Prefer `limner loop task --trajectory <trajectory-id> --executor subagent` so the task brief records subagent intent. Before editing, record the source comparison run with `limner loop action start --trajectory <trajectory-id> --from-run <run-id> --kind polish --executor subagent --summary "<short edit intent>"`. After editing, record `limner loop action complete --trajectory <trajectory-id> --action <action-id> --executor subagent --summary "<what changed>" --files "<paths>"`, then rerun `limner loop compare --trajectory <trajectory-id>`.
|
|
34
|
+
|
|
35
|
+
Use `limner loop action skip --trajectory <trajectory-id> --from-run <run-id> --summary "Comparison smoke only; no edit intended"` for comparison-only smoke runs. Keep every `--summary` under 255 characters. Limner records executor intent and action claims; it cannot itself prove that an external orchestrator actually used a subagent.
|
|
36
|
+
|
|
37
|
+
## Agent Handoff After Validation
|
|
38
|
+
|
|
39
|
+
After `limner loop response submit` reports `Status: validated`, use:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
limner loop task --trajectory <trajectory-id> --executor subagent
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The task brief is generated from the latest validated `comparison-summary.json`. It includes the trajectory, target, mode, overall score, top fix, likely editable files, selectors, prioritized diffs, next-iteration steps, and the compare command to rerun after edits.
|
|
46
|
+
|
|
47
|
+
For machine-readable output:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
limner loop task --trajectory <trajectory-id> --executor subagent --format json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Ledger exports remain append-only for audit history, but the top artifact sections show de-duped current artifacts so agents can quickly find the latest written files and expected outputs.
|
|
54
|
+
|
|
25
55
|
## Phase 1: Image To Reference
|
|
26
56
|
|
|
27
57
|
1. Run `limner init <image> --target <name>`.
|
|
@@ -30,21 +60,19 @@ Use `limner ledger export <trajectory-id> --format markdown` when an agent needs
|
|
|
30
60
|
4. Rebuild `reference/index.html` and `reference/styles.css` as a faithful HTML facsimile.
|
|
31
61
|
5. Run `limner compare image-reference --target <name>`.
|
|
32
62
|
6. Read `captures/image-reference/agent-comparison/agent-prompt.codex.md`.
|
|
33
|
-
7.
|
|
34
|
-
8.
|
|
35
|
-
9.
|
|
36
|
-
10. Edit `contract/visual-spec-instructions.md` for target-specific prompt guidance, or pass `--spec-instructions <path>` for a shared prompt policy.
|
|
37
|
-
11. Iterate on one scoped mockup fix at a time until the reference is approved.
|
|
63
|
+
7. Submit the response with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
|
|
64
|
+
8. Use the validated `image-comparison.json` and `comparison-summary.json`.
|
|
65
|
+
9. Iterate on one scoped mockup fix at a time until the reference is approved.
|
|
38
66
|
|
|
39
67
|
## Phase 2: Reference To Implementation
|
|
40
68
|
|
|
41
69
|
1. Add implementation selectors to `contract/regions.json` using `appSelector`.
|
|
42
70
|
2. Run `limner compare reference-implementation --target <name> --url <implementation-url>`.
|
|
43
71
|
3. Read `captures/reference-implementation/agent-comparison/agent-prompt.codex.md`.
|
|
44
|
-
4.
|
|
45
|
-
5.
|
|
72
|
+
4. Submit the response with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
|
|
73
|
+
5. Use the validated `image-comparison.json`, `structure-comparison.json`, and `comparison-summary.json`.
|
|
46
74
|
6. Fix the implementation and rerun until it matches the approved reference.
|
|
47
75
|
|
|
48
76
|
## Agent Rule
|
|
49
77
|
|
|
50
|
-
Do not treat side-by-side generation as success. It is evidence. The agent must
|
|
78
|
+
Do not treat side-by-side generation as success. It is evidence. The agent must submit the structured comparison response and use its next-iteration guidance for one scoped fix.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Archived Visual Spec Workflow
|
|
2
|
+
|
|
3
|
+
Limner previously exposed an optional `compare image-reference --spec` workflow for source image to mockup work.
|
|
4
|
+
|
|
5
|
+
The workflow asked an external agent to produce a structured visual-spec bundle:
|
|
6
|
+
|
|
7
|
+
- `idealSpec`: design intent inferred from the source image
|
|
8
|
+
- `referenceSpec`: design intent expressed by the rendered HTML mockup
|
|
9
|
+
- `diff`: semantic mismatches and next fixes between those two specs
|
|
10
|
+
|
|
11
|
+
When validated, Limner split the bundle into:
|
|
12
|
+
|
|
13
|
+
- `captures/image-reference/ideal-visual-spec.json`
|
|
14
|
+
- `captures/image-reference/reference-visual-spec.json`
|
|
15
|
+
- `captures/image-reference/visual-spec-diff.json`
|
|
16
|
+
|
|
17
|
+
This lane is archived because the DB-native agent comparison loop now covers the active iteration need more directly:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
loop compare -> loop response submit -> loop task -> loop action -> loop compare
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The archived visual-spec code may still be useful as a historical reference for structured design-intent extraction, but active agent workflows should use DB-native comparison responses in the local SQLite ledger.
|