@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.
Files changed (70) hide show
  1. package/README.md +27 -1
  2. package/dist/commands/compare-image-reference.d.ts +3 -0
  3. package/dist/commands/compare-image-reference.js +16 -1
  4. package/dist/commands/compare-image-reference.js.map +1 -1
  5. package/dist/commands/compare-output.d.ts +2 -0
  6. package/dist/commands/compare-output.js +20 -0
  7. package/dist/commands/compare-output.js.map +1 -0
  8. package/dist/commands/compare.d.ts +3 -0
  9. package/dist/commands/compare.js +10 -19
  10. package/dist/commands/compare.js.map +1 -1
  11. package/dist/commands/ledger.d.ts +4 -1
  12. package/dist/commands/loop-actions.d.ts +22 -0
  13. package/dist/commands/loop-actions.js +54 -0
  14. package/dist/commands/loop-actions.js.map +1 -0
  15. package/dist/commands/loop-cli.js +96 -2
  16. package/dist/commands/loop-cli.js.map +1 -1
  17. package/dist/commands/loop-comparison-adapters.d.ts +3 -0
  18. package/dist/commands/loop-comparison-adapters.js +15 -1
  19. package/dist/commands/loop-comparison-adapters.js.map +1 -1
  20. package/dist/commands/loop-task.d.ts +17 -0
  21. package/dist/commands/loop-task.js +95 -0
  22. package/dist/commands/loop-task.js.map +1 -0
  23. package/dist/commands/loop.d.ts +3 -1
  24. package/dist/commands/loop.js +31 -14
  25. package/dist/commands/loop.js.map +1 -1
  26. package/dist/core/agent-comparison-pack.d.ts +13 -0
  27. package/dist/core/agent-comparison-pack.js +27 -21
  28. package/dist/core/agent-comparison-pack.js.map +1 -1
  29. package/dist/core/agent-comparison-response.d.ts +19 -0
  30. package/dist/core/agent-comparison-response.js +34 -0
  31. package/dist/core/agent-comparison-response.js.map +1 -0
  32. package/dist/core/agent-task-brief.d.ts +30 -0
  33. package/dist/core/agent-task-brief.js +158 -0
  34. package/dist/core/agent-task-brief.js.map +1 -0
  35. package/dist/core/comparison-artifacts.d.ts +12 -0
  36. package/dist/core/comparison-artifacts.js +50 -0
  37. package/dist/core/comparison-artifacts.js.map +1 -0
  38. package/dist/core/current-artifacts.d.ts +14 -0
  39. package/dist/core/current-artifacts.js +16 -0
  40. package/dist/core/current-artifacts.js.map +1 -0
  41. package/dist/core/ledger-agent-responses.d.ts +21 -0
  42. package/dist/core/ledger-agent-responses.js +13 -0
  43. package/dist/core/ledger-agent-responses.js.map +1 -0
  44. package/dist/core/ledger-db.js +28 -0
  45. package/dist/core/ledger-db.js.map +1 -1
  46. package/dist/core/ledger-events.js +46 -7
  47. package/dist/core/ledger-events.js.map +1 -1
  48. package/dist/core/ledger-markdown.d.ts +23 -4
  49. package/dist/core/ledger-markdown.js +133 -4
  50. package/dist/core/ledger-markdown.js.map +1 -1
  51. package/dist/core/ledger-queries.d.ts +5 -1
  52. package/dist/core/ledger-queries.js +14 -4
  53. package/dist/core/ledger-queries.js.map +1 -1
  54. package/dist/core/ledger-store.d.ts +11 -3
  55. package/dist/core/ledger-store.js +4 -0
  56. package/dist/core/ledger-store.js.map +1 -1
  57. package/dist/core/loop-rerun-command.d.ts +4 -0
  58. package/dist/core/loop-rerun-command.js +36 -0
  59. package/dist/core/loop-rerun-command.js.map +1 -0
  60. package/dist/core/runtime-context.d.ts +1 -0
  61. package/dist/core/runtime-context.js +18 -0
  62. package/dist/core/runtime-context.js.map +1 -0
  63. package/dist/schemas/ledger.d.ts +33 -0
  64. package/dist/schemas/ledger.js +13 -0
  65. package/dist/schemas/ledger.js.map +1 -1
  66. package/docs/agent-workflow.md +31 -1
  67. package/docs/superpowers/plans/2026-06-13-agent-response-sqlite.md +70 -0
  68. package/docs/superpowers/plans/2026-06-13-loop-action-ledger.md +257 -0
  69. package/package.json +1 -1
  70. package/skills/limner/SKILL.md +15 -4
@@ -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,33 +16,160 @@ export function formatLedgerMarkdown(exported) {
14
16
  '## Timeline',
15
17
  '',
16
18
  ...exported.events.flatMap(formatEvent),
17
- '## Artifacts',
19
+ '## Agent Responses',
18
20
  '',
19
- ...(exported.artifacts.length > 0 ? exported.artifacts.map((artifact) => `- ${artifact.kind}: ${artifact.path}`) : ['- None recorded']),
21
+ ...formatAgentResponses(exported.agentResponses ?? []),
22
+ '## Action History',
23
+ '',
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),
20
34
  '',
21
35
  ];
22
36
  return lines.join('\n');
23
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: ${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
+ }
24
66
  function formatEvent(event) {
25
67
  const refs = parseRefs(event.artifactRefsJson);
68
+ const context = event.eventType.startsWith('loop.action.') ? [] : formatContext(event.inputsSummary);
26
69
  return [
27
70
  `- ${event.createdAt ?? 'unknown'} ${event.eventType} (${event.resultStatus ?? 'unknown'})`,
28
71
  ` - actor: ${event.actor ?? 'unknown'}`,
29
72
  ` - command: ${event.command ?? 'unknown'}`,
73
+ ...(event.runId ? [` - run: ${event.runId}`] : []),
30
74
  ...(event.agentFeedback ? [` - feedback: ${event.agentFeedback}`] : []),
75
+ ...context,
31
76
  ...(event.notes ? [` - notes: ${event.notes}`] : []),
32
- ...refs.map((ref) => ` - artifact: ${ref}`),
77
+ ...refs.map((ref) => ` - ${ref.role === 'expected-output' ? 'expected output' : 'artifact'}: ${ref.kind}: ${ref.path}`),
78
+ ];
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')),
33
100
  ];
34
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
+ }
119
+ function formatContext(raw) {
120
+ if (!raw)
121
+ return [];
122
+ try {
123
+ const parsed = JSON.parse(raw);
124
+ const parts = [
125
+ `cli ${stringValue(parsed.cliVersion)}`,
126
+ parsed.headless === true ? 'headless' : parsed.headed === true ? 'headed' : undefined,
127
+ parsed.fullPage === true ? 'full-page' : parsed.fullPage === false ? 'viewport' : undefined,
128
+ stringValue(parsed.cwd),
129
+ ].filter(Boolean);
130
+ return parts.length > 0 ? [` - context: ${parts.join(', ')}`] : [];
131
+ }
132
+ catch {
133
+ return [];
134
+ }
135
+ }
35
136
  function parseRefs(raw) {
36
137
  if (!raw)
37
138
  return [];
38
139
  try {
39
140
  const parsed = JSON.parse(raw);
40
- return Array.isArray(parsed) ? parsed.filter((value) => typeof value === 'string') : [];
141
+ if (!Array.isArray(parsed))
142
+ return [];
143
+ return parsed.flatMap((value) => {
144
+ if (typeof value === 'string')
145
+ return [{ path: value, kind: 'event-artifact' }];
146
+ if (value && typeof value === 'object' && 'path' in value && typeof value.path === 'string') {
147
+ return [{ path: value.path, kind: getString(value, 'kind') ?? 'event-artifact', role: getString(value, 'role') }];
148
+ }
149
+ return [];
150
+ });
41
151
  }
42
152
  catch {
43
153
  return [];
44
154
  }
45
155
  }
156
+ function formatArtifacts(artifacts) {
157
+ if (artifacts.length === 0)
158
+ return ['- None recorded'];
159
+ return artifacts.map((artifact) => {
160
+ const exists = artifact.existsOnDisk === null || artifact.existsOnDisk === undefined ? 'unknown' : artifact.existsOnDisk === 1 ? 'yes' : 'no';
161
+ return `- ${artifact.kind} (${exists}): ${artifact.path}`;
162
+ });
163
+ }
164
+ function getString(value, key) {
165
+ const record = value;
166
+ return typeof record[key] === 'string' ? record[key] : undefined;
167
+ }
168
+ function getStringArray(value, key) {
169
+ const record = value;
170
+ return Array.isArray(record[key]) ? record[key].filter((item) => typeof item === 'string') : [];
171
+ }
172
+ function stringValue(value) {
173
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
174
+ }
46
175
  //# sourceMappingURL=ledger-markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger-markdown.js","sourceRoot":"","sources":["../../src/core/ledger-markdown.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,oBAAoB,CAAC,QAA4B;IAC/D,MAAM,KAAK,GAAG;QACZ,qBAAqB;QACrB,EAAE;QACF,eAAe,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE;QACjD,SAAS,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE;QACtC,SAAS,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE;QACnC,WAAW,QAAQ,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE;QACpD,WAAW,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;QACvC,eAAe,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;QAC3C,WAAW,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QACnC,cAAc,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;QACzC,EAAE;QACF,aAAa;QACb,EAAE;QACF,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACvC,cAAc;QACd,EAAE;QACF,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACvI,EAAE;KACH,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,KAA2C;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/C,OAAO;QACL,KAAK,KAAK,CAAC,SAAS,IAAI,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,IAAI,SAAS,GAAG;QAC3F,cAAc,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACxC,gBAAgB,KAAK,CAAC,OAAO,IAAI,SAAS,EAAE;QAC5C,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAuB;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
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[];
@@ -7,7 +8,10 @@ export declare function exportTrajectoryRows(db: LedgerDatabase, trajectory: Tra
7
8
  trajectory: TrajectorySummary;
8
9
  iterations: unknown[];
9
10
  events: unknown[];
11
+ runs: unknown[];
10
12
  instructionVersions: unknown[];
11
13
  notes: unknown[];
12
- artifacts: unknown[];
14
+ agentResponses: unknown[];
15
+ artifacts: LedgerArtifactRow[];
16
+ currentArtifacts: import("./current-artifacts.js").CurrentArtifacts;
13
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,15 +25,23 @@ 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),
30
- events: db.prepare(`select event_type as eventType, actor, command, result_status as resultStatus,
31
- artifact_refs_json as artifactRefsJson, agent_feedback as agentFeedback, notes, created_at as createdAt
33
+ events: db.prepare(`select event_type as eventType, actor, command, run_id as runId, inputs_summary as inputsSummary,
34
+ result_status as resultStatus, artifact_refs_json as artifactRefsJson, agent_feedback as agentFeedback, notes, created_at as createdAt
32
35
  from ledger_events where trajectory_id = ? order by rowid`).all(trajectoryId),
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),
33
37
  instructionVersions: db.prepare('select version_id as versionId, instructions_json as instructionsJson from instruction_versions where trajectory_id = ? order by rowid').all(trajectoryId),
34
38
  notes: db.prepare('select note_id as noteId, body from notes where trajectory_id = ? order by rowid').all(trajectoryId),
35
- artifacts: db.prepare('select artifact_id as artifactId, kind, path, 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, response_json as responseJson, score_json as scoreJson,
42
+ top_fix as topFix, created_at as createdAt from agent_responses where trajectory_id = ? order by rowid`).all(trajectoryId),
43
+ artifacts,
44
+ currentArtifacts: getCurrentArtifacts(artifacts),
36
45
  };
37
46
  }
38
47
  const trajectoryColumns = `
@@ -42,6 +51,7 @@ const trajectoryColumns = `
42
51
  target,
43
52
  status,
44
53
  active_iteration_id as activeIterationId,
45
- max_iterations as maxIterations
54
+ max_iterations as maxIterations,
55
+ context_json as contextJson
46
56
  `;
47
57
  //# 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,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,yIAAyI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;KACnL,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;;;6GAG8E,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
- import { type LedgerEventActor, type LedgerMode } from '../schemas/ledger.js';
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;
@@ -28,7 +30,7 @@ export type AppendEventInput = {
28
30
  command?: string;
29
31
  inputsSummary?: string;
30
32
  resultStatus?: string;
31
- artifactRefs?: unknown[];
33
+ artifactRefs?: LedgerArtifactRef[];
32
34
  agentFeedback?: string;
33
35
  notes?: string;
34
36
  };
@@ -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;
@@ -57,8 +62,11 @@ export declare function createLedgerStore(db: LedgerDatabase): {
57
62
  trajectory: TrajectorySummary;
58
63
  iterations: unknown[];
59
64
  events: unknown[];
65
+ runs: unknown[];
60
66
  instructionVersions: unknown[];
61
67
  notes: unknown[];
62
- artifacts: unknown[];
68
+ agentResponses: unknown[];
69
+ artifacts: import("./current-artifacts.js").LedgerArtifactRow[];
70
+ currentArtifacts: import("./current-artifacts.js").CurrentArtifacts;
63
71
  };
64
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"}
@@ -0,0 +1 @@
1
+ export declare function getRuntimeContext(argv?: string[]): Record<string, unknown>;
@@ -0,0 +1,18 @@
1
+ import { readFileSync } from 'node:fs';
2
+ export function getRuntimeContext(argv = process.argv) {
3
+ return {
4
+ cliVersion: readPackageVersion(),
5
+ cwd: process.cwd(),
6
+ argv: argv.slice(2),
7
+ };
8
+ }
9
+ function readPackageVersion() {
10
+ try {
11
+ const packageJson = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
12
+ return packageJson.version;
13
+ }
14
+ catch {
15
+ return 'unknown';
16
+ }
17
+ }
18
+ //# sourceMappingURL=runtime-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-context.js","sourceRoot":"","sources":["../../src/core/runtime-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,MAAM,UAAU,iBAAiB,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IACnD,OAAO;QACL,UAAU,EAAE,kBAAkB,EAAE;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAgB,CAAC;QACpH,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -18,8 +18,41 @@ 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;
41
+ export declare const ledgerArtifactRefSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
42
+ path: z.ZodString;
43
+ kind: z.ZodString;
44
+ role: z.ZodDefault<z.ZodEnum<{
45
+ artifact: "artifact";
46
+ "expected-output": "expected-output";
47
+ }>>;
48
+ exists: z.ZodOptional<z.ZodBoolean>;
49
+ }, z.core.$strip>]>;
21
50
  export type LedgerMode = z.infer<typeof ledgerModeSchema>;
22
51
  export type TrajectoryStatus = z.infer<typeof trajectoryStatusSchema>;
23
52
  export type IterationStatus = z.infer<typeof iterationStatusSchema>;
24
53
  export type LedgerEventActor = z.infer<typeof ledgerEventActorSchema>;
25
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>;
58
+ export type LedgerArtifactRef = z.infer<typeof ledgerArtifactRefSchema>;
@@ -4,4 +4,17 @@ 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);
11
+ export const ledgerArtifactRefSchema = z.union([
12
+ z.string(),
13
+ z.object({
14
+ path: z.string().min(1),
15
+ kind: z.string().min(1),
16
+ role: z.enum(['artifact', 'expected-output']).default('artifact'),
17
+ exists: z.boolean().optional(),
18
+ }),
19
+ ]);
7
20
  //# sourceMappingURL=ledger.js.map
@@ -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"}
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"}
@@ -18,10 +18,40 @@ Use `limner loop` when a screen will need Ralph Loop-style iteration. Limner sto
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 stored in the local SQLite DB with the full JSON body, hash, validation status, and freshness, so cached reuse is visible in exports. 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 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 an agent writes `agent-response.json` and `limner loop compare` reports `Agent comparison 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>`.
@@ -0,0 +1,70 @@
1
+ # Agent Response SQLite Evidence Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Store every loop comparison's full `agent-response.json` evidence in SQLite so freshness, validation, and recommendations are centralized.
6
+
7
+ **Architecture:** Add an `agent_responses` table beside `ledger_events`, not inside the event log. `writeAgentComparisonPack` reports response JSON/hash/freshness; `loop compare` records that evidence with trajectory, iteration, and run IDs. Ledger exports summarize DB rows and mark cached reuse plainly.
8
+
9
+ **Tech Stack:** TypeScript, better-sqlite3, Zod comparison schema, Vitest, GitHub Actions, npm release workflow.
10
+
11
+ ---
12
+
13
+ ## Files
14
+
15
+ - Modify `src/core/ledger-db.ts`: create `agent_responses`.
16
+ - Modify `src/core/agent-comparison-pack.ts`: expose response JSON, hash, and freshness.
17
+ - Modify `src/core/ledger-store.ts`: add `recordAgentResponse`.
18
+ - Modify `src/core/ledger-queries.ts`: export agent response rows.
19
+ - Modify `src/core/ledger-markdown.ts`: render `## Agent Responses`.
20
+ - Modify `src/commands/loop.ts`: record response evidence after compare.
21
+ - Tests: `src/core/ledger-db.test.ts`, `src/core/agent-comparison-pack.test.ts`, `src/core/ledger-store.test.ts`, `src/commands/loop.test.ts`, `src/commands/ledger.test.ts`.
22
+ - Docs: update `README.md`, `docs/agent-workflow.md`, and `skills/limner/SKILL.md` only if CLI/user behavior changes.
23
+
24
+ ## Data Contract
25
+
26
+ Create table:
27
+
28
+ ```sql
29
+ agent_responses (
30
+ response_id text primary key,
31
+ trajectory_id text not null references trajectories(trajectory_id) on delete cascade,
32
+ iteration_id text,
33
+ run_id text,
34
+ mode text not null,
35
+ profile text,
36
+ response_path text not null,
37
+ response_hash text,
38
+ freshness text not null,
39
+ validation_status text not null,
40
+ input_fingerprint_json text,
41
+ response_json text,
42
+ score_json text,
43
+ top_fix text,
44
+ created_at text not null
45
+ )
46
+ ```
47
+
48
+ Freshness values: `missing`, `cached`, `stale`, `invalid`. `fresh` is reserved for future run-scoped response creation.
49
+
50
+ ## Tasks
51
+
52
+ - [ ] **Task 1: DB schema and store API**
53
+
54
+ Add `agent_responses` to `ledger-db.ts` and assert it exists in `ledger-db.test.ts`. Add `recordAgentResponse` to `ledger-store.ts`; it inserts one row with `response_id = createLedgerId('resp')`. Add a store test that starts a trajectory, records a validated cached response with `response_json`, then exports the row.
55
+
56
+ - [ ] **Task 2: Pack response evidence**
57
+
58
+ In `agent-comparison-pack.ts`, compute whether `agent-response.json` existed before the pack was written, read the raw response text when present, hash it, and expose fields on `AgentComparisonPackResult`: `responseJson`, `responseHash`, `freshness`, `profile`, `inputFingerprint`, `topFix`, `score`. Map missing to `missing`, invalid JSON/schema to `invalid`, active comparison mismatch to `stale`, and validated pre-existing response to `cached`.
59
+
60
+ - [ ] **Task 3: Record from loop compare**
61
+
62
+ In `compareLoop`, after a compare returns and before/after the event append, call `store.recordAgentResponse` when `result.agentComparison` exists. Include trajectory ID, active iteration ID, run ID, trajectory mode, pack profile, response path/hash/json, freshness, validation status, input fingerprint, score, and top fix. Add loop tests for validated cached and missing/awaiting rows.
63
+
64
+ - [ ] **Task 4: Export and docs**
65
+
66
+ Export `agentResponses` from `ledger-queries.ts` and render `## Agent Responses` in `ledger-markdown.ts`, including run, status, freshness, response hash, score, top fix, and path. Add ledger markdown tests showing `freshness: cached`. Update docs/skill if needed to say full agent responses are stored in local SQLite.
67
+
68
+ - [ ] **Task 5: Verify and release path**
69
+
70
+ Run `npm run check`, smoke Seatify with a fresh trajectory, confirm the DB row says `freshness: cached` for the reused response, then make a commit, push, open PR, monitor CI, merge when green, trigger npm release workflow, reinstall, and rerun Seatify expecting the installed CLI to expose the same evidence.