@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.
Files changed (81) hide show
  1. package/README.md +31 -29
  2. package/dist/commands/compare-image-reference.d.ts +1 -0
  3. package/dist/commands/compare-image-reference.js +4 -0
  4. package/dist/commands/compare-image-reference.js.map +1 -1
  5. package/dist/commands/compare-output.js +2 -1
  6. package/dist/commands/compare-output.js.map +1 -1
  7. package/dist/commands/compare.d.ts +1 -0
  8. package/dist/commands/compare.js +4 -12
  9. package/dist/commands/compare.js.map +1 -1
  10. package/dist/commands/ledger.d.ts +3 -1
  11. package/dist/commands/loop-actions.d.ts +22 -0
  12. package/dist/commands/loop-actions.js +54 -0
  13. package/dist/commands/loop-actions.js.map +1 -0
  14. package/dist/commands/loop-cli.js +121 -2
  15. package/dist/commands/loop-cli.js.map +1 -1
  16. package/dist/commands/loop-comparison-adapters.d.ts +1 -0
  17. package/dist/commands/loop-comparison-adapters.js +7 -2
  18. package/dist/commands/loop-comparison-adapters.js.map +1 -1
  19. package/dist/commands/loop-response.d.ts +31 -0
  20. package/dist/commands/loop-response.js +84 -0
  21. package/dist/commands/loop-response.js.map +1 -0
  22. package/dist/commands/loop-task.d.ts +17 -0
  23. package/dist/commands/loop-task.js +98 -0
  24. package/dist/commands/loop-task.js.map +1 -0
  25. package/dist/commands/loop.d.ts +4 -1
  26. package/dist/commands/loop.js +26 -21
  27. package/dist/commands/loop.js.map +1 -1
  28. package/dist/core/agent-comparison-pack.d.ts +17 -0
  29. package/dist/core/agent-comparison-pack.js +25 -102
  30. package/dist/core/agent-comparison-pack.js.map +1 -1
  31. package/dist/core/agent-comparison-prompts.d.ts +1 -1
  32. package/dist/core/agent-comparison-prompts.js +4 -4
  33. package/dist/core/agent-comparison-prompts.js.map +1 -1
  34. package/dist/core/agent-comparison-report.js +2 -2
  35. package/dist/core/agent-comparison-report.js.map +1 -1
  36. package/dist/core/agent-comparison-response.d.ts +1 -0
  37. package/dist/core/agent-comparison-response.js +2 -0
  38. package/dist/core/agent-comparison-response.js.map +1 -0
  39. package/dist/core/agent-comparison-submit.d.ts +35 -0
  40. package/dist/core/agent-comparison-submit.js +113 -0
  41. package/dist/core/agent-comparison-submit.js.map +1 -0
  42. package/dist/core/agent-task-brief.d.ts +30 -0
  43. package/dist/core/agent-task-brief.js +158 -0
  44. package/dist/core/agent-task-brief.js.map +1 -0
  45. package/dist/core/comparison-artifacts.js +16 -7
  46. package/dist/core/comparison-artifacts.js.map +1 -1
  47. package/dist/core/current-artifacts.d.ts +14 -0
  48. package/dist/core/current-artifacts.js +16 -0
  49. package/dist/core/current-artifacts.js.map +1 -0
  50. package/dist/core/ledger-agent-responses.d.ts +22 -0
  51. package/dist/core/ledger-agent-responses.js +13 -0
  52. package/dist/core/ledger-agent-responses.js.map +1 -0
  53. package/dist/core/ledger-db.js +20 -0
  54. package/dist/core/ledger-db.js.map +1 -1
  55. package/dist/core/ledger-events.js +21 -1
  56. package/dist/core/ledger-events.js.map +1 -1
  57. package/dist/core/ledger-markdown.d.ts +21 -6
  58. package/dist/core/ledger-markdown.js +89 -6
  59. package/dist/core/ledger-markdown.js.map +1 -1
  60. package/dist/core/ledger-queries.d.ts +4 -1
  61. package/dist/core/ledger-queries.js +12 -3
  62. package/dist/core/ledger-queries.js.map +1 -1
  63. package/dist/core/ledger-store.d.ts +8 -1
  64. package/dist/core/ledger-store.js +4 -0
  65. package/dist/core/ledger-store.js.map +1 -1
  66. package/dist/core/loop-rerun-command.d.ts +4 -0
  67. package/dist/core/loop-rerun-command.js +36 -0
  68. package/dist/core/loop-rerun-command.js.map +1 -0
  69. package/dist/core/report-writer.js +1 -1
  70. package/dist/schemas/ledger.d.ts +23 -0
  71. package/dist/schemas/ledger.js +4 -0
  72. package/dist/schemas/ledger.js.map +1 -1
  73. package/docs/agent-workflow.md +39 -11
  74. package/docs/archive/visual-spec-workflow.md +23 -0
  75. package/docs/goals/db-native-agent-responses/goal.md +91 -0
  76. package/docs/goals/db-native-agent-responses/state.yaml +240 -0
  77. package/docs/superpowers/plans/2026-06-13-agent-response-sqlite.md +70 -0
  78. package/docs/superpowers/plans/2026-06-13-loop-action-ledger.md +257 -0
  79. package/package.json +1 -1
  80. package/skills/limner/SKILL.md +22 -21
  81. 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;AAG5G,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,EAAkB,EAAE,KAAuB,EAAE,GAAW;IACxF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAChE,EAAE,CAAC,OAAO,CAAC;;;;;GAKV,CAAC,CAAC,GAAG,CACJ,cAAc,CAAC,KAAK,CAAC,EACrB,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,WAAW,IAAI,IAAI,EACzB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,IAAI,KAAK,EACpB,KAAK,CAAC,OAAO,IAAI,IAAI,EACrB,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,EACxC,QAAQ,IAAI,IAAI,EAChB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,GAAG,CACJ,CAAC;IACF,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3D,EAAE,CAAC,OAAO,CAAC;;;;KAIV,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,OAAO,IAAI,SAAS,EAC1B,KAAK,CAAC,YAAY,IAAI,SAAS,EAC/B,GAAG,EACH,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC3C,EAAE,CAAC,OAAO,CAAC;;;;OAIV,CAAC,CAAC,GAAG,CACJ,cAAc,CAAC,KAAK,CAAC,EACrB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,WAAW,IAAI,IAAI,EACzB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvB,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAsB;IAClD,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAChG,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;KACjD,CAAC;AACJ,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
- artifacts: Array<{
27
- kind: string;
28
- path: string;
29
- role?: string;
30
- existsOnDisk?: number | null;
31
- snapshotPath?: string | null;
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
- '## Written Artifacts',
19
+ '## Agent Responses',
18
20
  '',
19
- ...formatArtifacts(exported.artifacts.filter((artifact) => artifact.role !== 'expected-output')),
20
- '## Expected Outputs',
21
+ ...formatAgentResponses(exported.agentResponses ?? []),
22
+ '## Action History',
21
23
  '',
22
- ...formatArtifacts(exported.artifacts.filter((artifact) => artifact.role === 'expected-output')),
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
- ...formatContext(event.inputsSummary),
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":"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"}
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
- artifacts: unknown[];
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
- artifacts: db.prepare(`select artifact_id as artifactId, kind, path, role, exists_on_disk as existsOnDisk,
37
- hash, snapshot_path as snapshotPath from artifacts where trajectory_id = ? order by rowid`).all(trajectoryId),
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":"AAGA,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,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,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC;gGACsE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;KAChH,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAG;;;;;;;;CAQzB,CAAC"}
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
- artifacts: unknown[];
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":"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"}
1
+ {"version":3,"file":"ledger-store.js","sourceRoot":"","sources":["../../src/core/ledger-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function buildLoopCompareRerunCommand(trajectory: {
2
+ trajectoryId: string;
3
+ contextJson?: string | null;
4
+ }, preferredContextJson?: string | null): string;
@@ -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 \`captures/image-reference/spec/agent-response.json\`.
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') {
@@ -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>;
@@ -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"}
@@ -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 and response target.
16
- 4. Write or validate the agent response.
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. Write `captures/image-reference/agent-comparison/agent-response.json`.
34
- 8. Rerun the same command to validate `image-comparison.json` and `comparison-summary.json`.
35
- 9. Optional: run `limner compare image-reference --target <name> --spec` to generate a visual spec prompt pack.
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. Write `captures/reference-implementation/agent-comparison/agent-response.json`.
45
- 5. Rerun the same command to validate `image-comparison.json`, `structure-comparison.json`, and `comparison-summary.json`.
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 write the structured comparison response and use its next-iteration guidance for one scoped fix.
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.