@neonwatty/limner 0.1.6 → 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 (56) hide show
  1. package/README.md +27 -1
  2. package/dist/commands/compare-output.js +1 -0
  3. package/dist/commands/compare-output.js.map +1 -1
  4. package/dist/commands/ledger.d.ts +3 -1
  5. package/dist/commands/loop-actions.d.ts +22 -0
  6. package/dist/commands/loop-actions.js +54 -0
  7. package/dist/commands/loop-actions.js.map +1 -0
  8. package/dist/commands/loop-cli.js +96 -2
  9. package/dist/commands/loop-cli.js.map +1 -1
  10. package/dist/commands/loop-task.d.ts +17 -0
  11. package/dist/commands/loop-task.js +95 -0
  12. package/dist/commands/loop-task.js.map +1 -0
  13. package/dist/commands/loop.d.ts +3 -1
  14. package/dist/commands/loop.js +23 -21
  15. package/dist/commands/loop.js.map +1 -1
  16. package/dist/core/agent-comparison-pack.d.ts +13 -0
  17. package/dist/core/agent-comparison-pack.js +27 -21
  18. package/dist/core/agent-comparison-pack.js.map +1 -1
  19. package/dist/core/agent-comparison-response.d.ts +19 -0
  20. package/dist/core/agent-comparison-response.js +34 -0
  21. package/dist/core/agent-comparison-response.js.map +1 -0
  22. package/dist/core/agent-task-brief.d.ts +30 -0
  23. package/dist/core/agent-task-brief.js +158 -0
  24. package/dist/core/agent-task-brief.js.map +1 -0
  25. package/dist/core/comparison-artifacts.js +17 -3
  26. package/dist/core/comparison-artifacts.js.map +1 -1
  27. package/dist/core/current-artifacts.d.ts +14 -0
  28. package/dist/core/current-artifacts.js +16 -0
  29. package/dist/core/current-artifacts.js.map +1 -0
  30. package/dist/core/ledger-agent-responses.d.ts +21 -0
  31. package/dist/core/ledger-agent-responses.js +13 -0
  32. package/dist/core/ledger-agent-responses.js.map +1 -0
  33. package/dist/core/ledger-db.js +18 -0
  34. package/dist/core/ledger-db.js.map +1 -1
  35. package/dist/core/ledger-events.js +21 -1
  36. package/dist/core/ledger-events.js.map +1 -1
  37. package/dist/core/ledger-markdown.d.ts +21 -6
  38. package/dist/core/ledger-markdown.js +89 -6
  39. package/dist/core/ledger-markdown.js.map +1 -1
  40. package/dist/core/ledger-queries.d.ts +4 -1
  41. package/dist/core/ledger-queries.js +11 -3
  42. package/dist/core/ledger-queries.js.map +1 -1
  43. package/dist/core/ledger-store.d.ts +8 -1
  44. package/dist/core/ledger-store.js +4 -0
  45. package/dist/core/ledger-store.js.map +1 -1
  46. package/dist/core/loop-rerun-command.d.ts +4 -0
  47. package/dist/core/loop-rerun-command.js +36 -0
  48. package/dist/core/loop-rerun-command.js.map +1 -0
  49. package/dist/schemas/ledger.d.ts +23 -0
  50. package/dist/schemas/ledger.js +4 -0
  51. package/dist/schemas/ledger.js.map +1 -1
  52. package/docs/agent-workflow.md +31 -1
  53. package/docs/superpowers/plans/2026-06-13-agent-response-sqlite.md +70 -0
  54. package/docs/superpowers/plans/2026-06-13-loop-action-ledger.md +257 -0
  55. package/package.json +1 -1
  56. package/skills/limner/SKILL.md +15 -4
package/README.md CHANGED
@@ -56,6 +56,9 @@ limner preview --target replay-boundaries
56
56
  limner capture reference --target replay-boundaries
57
57
  limner loop start --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --max-iterations 5
58
58
  limner loop compare --trajectory traj_...
59
+ limner loop task --trajectory traj_... --executor subagent
60
+ limner loop action start --trajectory traj_... --from-run run_... --kind polish --executor subagent --summary "Resize dashboard preview"
61
+ limner loop action complete --trajectory traj_... --action act_... --executor subagent --summary "Adjusted preview sizing" --files "src/app/page.tsx"
59
62
  limner loop status --trajectory traj_...
60
63
  limner compare image-reference --target replay-boundaries
61
64
  limner compare reference-implementation --target replay-boundaries --url http://localhost:3152/internal/optimization-lab/wedding-envelope#replay-boundaries --storage-state ./e2e/.auth/user.json
@@ -92,6 +95,10 @@ Use `limner loop` for Ralph Loop-style polishing. Loop work is tracked in a glob
92
95
  ```bash
93
96
  limner loop start --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --max-iterations 5
94
97
  limner loop compare --trajectory traj_...
98
+ limner loop task --trajectory traj_... --executor subagent
99
+ limner loop action start --trajectory traj_... --from-run run_... --kind polish --executor subagent --summary "Resize dashboard preview"
100
+ limner loop action complete --trajectory traj_... --action act_... --executor subagent --summary "Adjusted preview sizing" --files "src/app/page.tsx"
101
+ limner loop action skip --trajectory traj_... --from-run run_... --summary "Comparison smoke only; no edit intended"
95
102
  limner loop status --trajectory traj_... --feedback "Prompt should mention button contrast."
96
103
  limner loop next --trajectory traj_...
97
104
  limner loop close --trajectory traj_...
@@ -103,7 +110,17 @@ Loop modes:
103
110
  - `mockup-implementation`: approved mockup to real implementation.
104
111
  - `image-implementation`: source image directly to real implementation.
105
112
 
106
- Every meaningful loop interaction writes a ledger event. `agentFeedback` is an optional 255-character field for short process-improvement notes; longer comments belong in notes or project artifacts.
113
+ Every meaningful loop interaction writes a ledger event. Validated, missing, invalid, and stale agent responses are also stored in local SQLite with the full JSON body, response hash, validation status, and freshness (`missing`, `cached`, `stale`, `invalid`, or future `fresh`). `agentFeedback` is an optional 255-character field for short process-improvement notes; longer comments belong in notes or project artifacts.
114
+
115
+ ### Action Logging
116
+
117
+ After an agent writes `agent-response.json` and `loop compare` validates it, use `limner loop task --trajectory traj_... --executor subagent` to print the next edit brief. The intended loop is:
118
+
119
+ ```text
120
+ loop compare -> loop task --executor subagent -> loop action start -> edit -> loop action complete -> loop compare
121
+ ```
122
+
123
+ The task brief names likely files, selectors, prioritized diffs, next steps, action logging commands, and the compare command to rerun. Record `loop action start` before edits and `loop action complete` after edits; keep `--summary` under 255 characters. Use `loop action skip` for comparison-only smoke runs where no edit is intended. Limner records executor intent and action claims; it cannot prove an external orchestrator actually used a subagent. Use `--format json` when another tool needs machine-readable handoff data.
107
124
 
108
125
  Use `limner ledger` to query and export trajectories:
109
126
 
@@ -116,6 +133,15 @@ limner ledger export traj_... --format json
116
133
  limner ledger export traj_... --format markdown
117
134
  ```
118
135
 
136
+ Agents can discover the current CLI surface with:
137
+
138
+ ```bash
139
+ limner --help
140
+ limner loop --help
141
+ limner loop task --help
142
+ limner ledger --help
143
+ ```
144
+
119
145
  ### Image To Reference
120
146
 
121
147
  Use this while recreating the ideal image as a standalone HTML/CSS mockup. This mode uses the `ideal-to-mockup` agent comparison profile.
@@ -6,6 +6,7 @@ export function printAgentComparison(agentComparison) {
6
6
  console.log(`Claude comparison prompt: ${agentComparison.claudePromptPath}`);
7
7
  console.log(`Agent comparison schema: ${agentComparison.schemaPath}`);
8
8
  console.log(`Agent comparison response target: ${agentComparison.responsePath}`);
9
+ console.log(`Agent response freshness: ${agentComparison.freshness}`);
9
10
  if (agentComparison.status === 'validated') {
10
11
  console.log(`Image comparison: ${agentComparison.imageComparisonPath}`);
11
12
  if (agentComparison.structureComparisonPath)
@@ -1 +1 @@
1
- {"version":3,"file":"compare-output.js","sourceRoot":"","sources":["../../src/commands/compare-output.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,eAA2C;IAC9E,IAAI,CAAC,eAAe;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,qCAAqC,eAAe,CAAC,YAAY,EAAE,CAAC,CAAC;IACjF,IAAI,eAAe,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,qBAAqB,eAAe,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACxE,IAAI,eAAe,CAAC,uBAAuB;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,eAAe,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAC7H,OAAO,CAAC,GAAG,CAAC,uBAAuB,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"compare-output.js","sourceRoot":"","sources":["../../src/commands/compare-output.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,eAA2C;IAC9E,IAAI,CAAC,eAAe;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,qCAAqC,eAAe,CAAC,YAAY,EAAE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;IACtE,IAAI,eAAe,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,qBAAqB,eAAe,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACxE,IAAI,eAAe,CAAC,uBAAuB;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,eAAe,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAC7H,OAAO,CAAC,GAAG,CAAC,uBAAuB,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -26,7 +26,9 @@ export declare function showLedger(input: {
26
26
  runs: unknown[];
27
27
  instructionVersions: unknown[];
28
28
  notes: unknown[];
29
- artifacts: unknown[];
29
+ agentResponses: unknown[];
30
+ artifacts: import("../core/current-artifacts.js").LedgerArtifactRow[];
31
+ currentArtifacts: import("../core/current-artifacts.js").CurrentArtifacts;
30
32
  };
31
33
  };
32
34
  export declare function getLedgerNext(input: {
@@ -0,0 +1,22 @@
1
+ import { type LedgerActionExecutor, type LedgerActionKind, type LedgerActionStatus, type LedgerMode } from '../schemas/ledger.js';
2
+ type LedgerEnv = Partial<Pick<NodeJS.ProcessEnv, 'LIMNER_LEDGER_HOME'>>;
3
+ type TrajectorySelector = {
4
+ ledgerEnv?: LedgerEnv;
5
+ trajectoryId?: string;
6
+ target?: string;
7
+ mode?: LedgerMode;
8
+ };
9
+ export type LoopActionInput = TrajectorySelector & {
10
+ status: LedgerActionStatus;
11
+ kind: LedgerActionKind;
12
+ executor: LedgerActionExecutor;
13
+ summary: string;
14
+ actionId?: string;
15
+ fromRunId?: string;
16
+ files?: string[];
17
+ commit?: string;
18
+ };
19
+ export declare function recordLoopAction(input: LoopActionInput): {
20
+ actionId: string;
21
+ };
22
+ export {};
@@ -0,0 +1,54 @@
1
+ import { ledgerActionExecutorSchema, ledgerActionKindSchema, ledgerActionStatusSchema, ledgerActionSummarySchema } from '../schemas/ledger.js';
2
+ import { openLedgerDatabase } from '../core/ledger-db.js';
3
+ import { createLedgerId } from '../core/ledger-ids.js';
4
+ import { resolveLedgerPaths } from '../core/ledger-paths.js';
5
+ import { createLedgerStore } from '../core/ledger-store.js';
6
+ export function recordLoopAction(input) {
7
+ return withStore(input.ledgerEnv, (store) => {
8
+ const trajectory = store.resolveTrajectory(selector(input));
9
+ const status = ledgerActionStatusSchema.parse(input.status);
10
+ const kind = ledgerActionKindSchema.parse(input.kind);
11
+ const executor = ledgerActionExecutorSchema.parse(input.executor);
12
+ const summary = ledgerActionSummarySchema.parse(input.summary);
13
+ const actionId = input.actionId ?? createLedgerId('act');
14
+ store.appendEvent({
15
+ trajectoryId: trajectory.trajectoryId,
16
+ iterationId: trajectory.activeIterationId ?? undefined,
17
+ eventType: `loop.action.${status}`,
18
+ actor: actionActor(executor),
19
+ command: 'loop action',
20
+ resultStatus: status,
21
+ inputsSummary: JSON.stringify({
22
+ actionId,
23
+ kind,
24
+ executor,
25
+ fromRunId: input.fromRunId,
26
+ summary,
27
+ files: input.files,
28
+ commit: input.commit,
29
+ }),
30
+ artifactRefs: (input.files ?? []).map((file) => ({ path: file, kind: 'edited-file', role: 'artifact' })),
31
+ });
32
+ return { actionId };
33
+ });
34
+ }
35
+ function withStore(env, callback) {
36
+ const db = openLedgerDatabase({ databasePath: resolveLedgerPaths(env).databasePath });
37
+ try {
38
+ return callback(createLedgerStore(db));
39
+ }
40
+ finally {
41
+ db.close();
42
+ }
43
+ }
44
+ function selector(input) {
45
+ return { trajectoryId: input.trajectoryId, target: input.target, mode: input.mode };
46
+ }
47
+ function actionActor(executor) {
48
+ if (executor === 'user')
49
+ return 'user';
50
+ if (executor === 'cli')
51
+ return 'cli';
52
+ return 'agent';
53
+ }
54
+ //# sourceMappingURL=loop-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-actions.js","sourceRoot":"","sources":["../../src/commands/loop-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,yBAAyB,EAAqH,MAAM,sBAAsB,CAAC;AAClQ,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAA+B,MAAM,yBAAyB,CAAC;AAMzF,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QACzD,KAAK,CAAC,WAAW,CAAC;YAChB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,WAAW,EAAE,UAAU,CAAC,iBAAiB,IAAI,SAAS;YACtD,SAAS,EAAE,eAAe,MAAM,EAAE;YAClC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,YAAY,EAAE,MAAM;YACpB,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5B,QAAQ;gBACR,IAAI;gBACJ,QAAQ;gBACR,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO;gBACP,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACF,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;SACzG,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAI,GAA0B,EAAE,QAA4D;IAC5G,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,WAAW,CAAC,QAA8B;IACjD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { advanceLoop, closeLoop, compareLoop, getLoopStatus, startLoop } from './loop.js';
1
+ import { advanceLoop, closeLoop, compareLoop, getLoopStatus, getLoopTask, recordLoopAction, startLoop } from './loop.js';
2
2
  export function registerLoopCommand(program) {
3
3
  const loop = program.command('loop').description('Manage Limner comparison loops');
4
4
  loop
@@ -64,8 +64,102 @@ export function registerLoopCommand(program) {
64
64
  console.log(`Side-by-side: ${result.sideBySidePath}`);
65
65
  if (result.reportPath)
66
66
  console.log(`Report: ${result.reportPath}`);
67
- if (result.agentComparison)
67
+ if (result.agentComparison) {
68
68
  console.log(`Agent comparison status: ${result.agentComparison.status}`);
69
+ console.log(`Agent response freshness: ${result.agentComparison.freshness}`);
70
+ }
69
71
  });
72
+ loop
73
+ .command('task')
74
+ .description('Print an agent-ready task brief from the latest validated comparison')
75
+ .option('--trajectory <id>', 'trajectory id')
76
+ .option('-t, --target <name>', 'target name')
77
+ .option('--mode <mode>', 'loop mode')
78
+ .option('--format <format>', 'output format', 'markdown')
79
+ .option('--executor <executor>', 'desired action executor', 'subagent')
80
+ .action(async (options, command) => {
81
+ const globals = command.optsWithGlobals();
82
+ const result = await getLoopTask({
83
+ workspaceRoot: globals.workspace,
84
+ trajectoryId: options.trajectory,
85
+ target: options.target,
86
+ mode: options.mode,
87
+ format: options.format,
88
+ executor: options.executor,
89
+ });
90
+ process.stdout.write(result.output);
91
+ });
92
+ registerLoopActionCommand(loop);
93
+ }
94
+ function registerLoopActionCommand(loop) {
95
+ const action = loop.command('action').description('Record loop action ledger events');
96
+ addActionSelector(action.command('start')
97
+ .requiredOption('--from-run <run-id>', 'source run id')
98
+ .option('--kind <kind>', 'action kind', 'polish')
99
+ .option('--executor <executor>', 'action executor', 'subagent')
100
+ .requiredOption('--summary <text>', 'short action summary'))
101
+ .action((options) => {
102
+ printAction({
103
+ trajectoryId: options.trajectory,
104
+ target: options.target,
105
+ mode: options.mode,
106
+ status: 'started',
107
+ kind: options.kind,
108
+ executor: options.executor,
109
+ fromRunId: options.fromRun,
110
+ summary: options.summary,
111
+ });
112
+ });
113
+ addActionSelector(action.command('complete')
114
+ .requiredOption('--action <action-id>', 'action id')
115
+ .requiredOption('--summary <text>', 'short action summary')
116
+ .option('--files <paths>', 'comma-separated edited files')
117
+ .option('--commit <sha>', 'commit sha')
118
+ .option('--kind <kind>', 'action kind', 'polish')
119
+ .option('--executor <executor>', 'action executor', 'agent'))
120
+ .action((options) => {
121
+ printAction({
122
+ trajectoryId: options.trajectory,
123
+ target: options.target,
124
+ mode: options.mode,
125
+ status: 'completed',
126
+ kind: options.kind,
127
+ executor: options.executor,
128
+ actionId: options.action,
129
+ summary: options.summary,
130
+ files: parseFiles(options.files),
131
+ commit: options.commit,
132
+ });
133
+ });
134
+ addActionSelector(action.command('skip')
135
+ .requiredOption('--from-run <run-id>', 'source run id')
136
+ .requiredOption('--summary <text>', 'short action summary')
137
+ .option('--executor <executor>', 'action executor', 'agent'))
138
+ .action((options) => {
139
+ printAction({
140
+ trajectoryId: options.trajectory,
141
+ target: options.target,
142
+ mode: options.mode,
143
+ status: 'skipped',
144
+ kind: 'no-op',
145
+ executor: options.executor,
146
+ fromRunId: options.fromRun,
147
+ summary: options.summary,
148
+ });
149
+ });
150
+ }
151
+ function printAction(input) {
152
+ const result = recordLoopAction(input);
153
+ console.log(`Action: ${result.actionId}`);
154
+ }
155
+ function addActionSelector(command) {
156
+ return command
157
+ .option('--trajectory <id>', 'trajectory id')
158
+ .option('-t, --target <name>', 'target name')
159
+ .option('--mode <mode>', 'loop mode');
160
+ }
161
+ function parseFiles(files) {
162
+ const parsed = files?.split(',').map((file) => file.trim()).filter(Boolean);
163
+ return parsed && parsed.length > 0 ? parsed : undefined;
70
164
  }
71
165
  //# sourceMappingURL=loop-cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop-cli.js","sourceRoot":"","sources":["../../src/commands/loop-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop-cli.js","sourceRoot":"","sources":["../../src/commands/loop-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type LedgerActionExecutor, type LedgerMode } from '../schemas/ledger.js';
2
+ type LedgerEnv = Partial<Pick<NodeJS.ProcessEnv, 'LIMNER_LEDGER_HOME'>>;
3
+ type TrajectorySelector = {
4
+ ledgerEnv?: LedgerEnv;
5
+ trajectoryId?: string;
6
+ target?: string;
7
+ mode?: LedgerMode;
8
+ };
9
+ export type LoopTaskInput = TrajectorySelector & {
10
+ executor?: LedgerActionExecutor;
11
+ format?: 'markdown' | 'json';
12
+ workspaceRoot?: string;
13
+ };
14
+ export declare function getLoopTask(input: LoopTaskInput): Promise<{
15
+ output: string;
16
+ }>;
17
+ export {};
@@ -0,0 +1,95 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { buildAgentTaskBrief } from '../core/agent-task-brief.js';
3
+ import { openLedgerDatabase } from '../core/ledger-db.js';
4
+ import { resolveLedgerPaths } from '../core/ledger-paths.js';
5
+ import { buildLoopCompareRerunCommand } from '../core/loop-rerun-command.js';
6
+ import { createLedgerStore } from '../core/ledger-store.js';
7
+ import { ledgerActionExecutorSchema } from '../schemas/ledger.js';
8
+ export async function getLoopTask(input) {
9
+ return withStoreAsync(input.ledgerEnv, async (store) => {
10
+ const format = taskOutputFormat(input.format);
11
+ const desiredExecutor = ledgerActionExecutorSchema.parse(input.executor ?? 'subagent');
12
+ const trajectory = store.resolveTrajectory(selector(input));
13
+ const exported = store.exportTrajectoryJson(trajectory.trajectoryId);
14
+ const latestComparison = latestValidatedComparison(exported);
15
+ if (!latestComparison.ok)
16
+ throw new Error(latestComparisonError(latestComparison));
17
+ const brief = await buildAgentTaskBrief({
18
+ trajectoryId: trajectory.trajectoryId,
19
+ target: trajectory.target,
20
+ mode: trajectory.mode,
21
+ workspaceRoot: input.workspaceRoot ?? process.cwd(),
22
+ comparisonSummaryPath: latestComparison.summaryPath,
23
+ sourceRunId: latestComparison.runId,
24
+ desiredExecutor,
25
+ rerunCommand: buildLoopCompareRerunCommand(trajectory, latestComparison.inputsSummary),
26
+ });
27
+ store.appendEvent({
28
+ trajectoryId: trajectory.trajectoryId,
29
+ iterationId: trajectory.activeIterationId ?? undefined,
30
+ eventType: 'loop.task.viewed',
31
+ actor: 'agent',
32
+ command: 'loop task',
33
+ resultStatus: 'ok',
34
+ inputsSummary: JSON.stringify({ sourceRunId: latestComparison.runId, desiredExecutor }),
35
+ });
36
+ return { output: format === 'json' ? `${JSON.stringify(brief.json, null, 2)}\n` : brief.markdown };
37
+ });
38
+ }
39
+ async function withStoreAsync(env, callback) {
40
+ const db = openLedgerDatabase({ databasePath: resolveLedgerPaths(env).databasePath });
41
+ try {
42
+ return await callback(createLedgerStore(db));
43
+ }
44
+ finally {
45
+ db.close();
46
+ }
47
+ }
48
+ function selector(input) {
49
+ return { trajectoryId: input.trajectoryId, target: input.target, mode: input.mode };
50
+ }
51
+ function taskOutputFormat(format) {
52
+ if (format === undefined || format === 'markdown' || format === 'json')
53
+ return format ?? 'markdown';
54
+ throw new Error(`Unsupported loop task format: ${format}`);
55
+ }
56
+ function latestValidatedComparison(exported) {
57
+ for (const event of [...exported.events].reverse()) {
58
+ if (event.eventType !== 'loop.compare.validated' || event.resultStatus !== 'validated')
59
+ continue;
60
+ if (!event.runId)
61
+ return { ok: false, reason: 'missing-run-id' };
62
+ const summary = parseArtifactRefs(event.artifactRefsJson).find((artifact) => artifact.kind === 'comparison-summary');
63
+ if (!summary)
64
+ return { ok: false, reason: 'missing-summary-artifact', runId: event.runId };
65
+ if (summary.exists === false)
66
+ return { ok: false, reason: 'summary-marked-missing', runId: event.runId, summaryPath: summary.path };
67
+ if (!existsSync(summary.path))
68
+ return { ok: false, reason: 'summary-missing-on-disk', runId: event.runId, summaryPath: summary.path };
69
+ return { ok: true, summaryPath: summary.path, inputsSummary: event.inputsSummary, runId: event.runId };
70
+ }
71
+ return { ok: false, reason: 'none' };
72
+ }
73
+ function latestComparisonError(result) {
74
+ switch (result.reason) {
75
+ case 'none':
76
+ return 'No validated comparison summary found. Write agent-response.json, then run limner loop compare first.';
77
+ case 'missing-run-id':
78
+ return 'Latest validated comparison is missing a run id, so loop task cannot create a sourceRunId.';
79
+ case 'missing-summary-artifact':
80
+ return `Latest validated comparison run ${result.runId} did not include a comparison-summary artifact. Rerun limner loop compare.`;
81
+ case 'summary-marked-missing':
82
+ return `Latest validated comparison run ${result.runId} has a comparison summary marked missing: ${result.summaryPath}. Rerun limner loop compare.`;
83
+ case 'summary-missing-on-disk':
84
+ return `Latest validated comparison run ${result.runId} references a comparison summary that is missing on disk: ${result.summaryPath}. Rerun limner loop compare.`;
85
+ }
86
+ }
87
+ function parseArtifactRefs(raw) {
88
+ if (!raw)
89
+ return [];
90
+ const parsed = JSON.parse(raw);
91
+ return Array.isArray(parsed)
92
+ ? parsed.filter((value) => typeof value === 'object' && value !== null && 'path' in value && 'kind' in value && typeof value.path === 'string' && typeof value.kind === 'string')
93
+ : [];
94
+ }
95
+ //# sourceMappingURL=loop-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-task.js","sourceRoot":"","sources":["../../src/commands/loop-task.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,9 @@ export type CompareLoopInput = TrajectorySelector & {
25
25
  headed?: boolean;
26
26
  fullPage?: boolean;
27
27
  };
28
+ export { getLoopTask } from './loop-task.js';
29
+ export { recordLoopAction } from './loop-actions.js';
30
+ export type { LoopActionInput } from './loop-actions.js';
28
31
  export declare function startLoop(input: StartLoopInput): {
29
32
  trajectoryId: string;
30
33
  iterationId: string | null;
@@ -38,4 +41,3 @@ export declare function advanceLoop(input: TrajectorySelector): {
38
41
  };
39
42
  export declare function closeLoop(input: TrajectorySelector): import("../core/ledger-store.js").TrajectorySummary;
40
43
  export declare function compareLoop(input: CompareLoopInput): Promise<import("./loop-comparison-adapters.js").LoopCompareResult>;
41
- export {};
@@ -5,6 +5,8 @@ import { resolveLedgerPaths } from '../core/ledger-paths.js';
5
5
  import { getRuntimeContext } from '../core/runtime-context.js';
6
6
  import { createLedgerStore } from '../core/ledger-store.js';
7
7
  import { runLoopComparison } from './loop-comparison-adapters.js';
8
+ export { getLoopTask } from './loop-task.js';
9
+ export { recordLoopAction } from './loop-actions.js';
8
10
  export function startLoop(input) {
9
11
  return withStore(input.ledgerEnv, (store) => {
10
12
  const mode = ledgerModeSchema.parse(input.mode);
@@ -66,16 +68,10 @@ export function getLoopStatus(input) {
66
68
  });
67
69
  }
68
70
  export function advanceLoop(input) {
69
- return withStore(input.ledgerEnv, (store) => {
70
- const trajectory = store.resolveTrajectory(selector(input));
71
- return store.advanceIteration(trajectory.trajectoryId);
72
- });
71
+ return withStore(input.ledgerEnv, (store) => store.advanceIteration(store.resolveTrajectory(selector(input)).trajectoryId));
73
72
  }
74
73
  export function closeLoop(input) {
75
- return withStore(input.ledgerEnv, (store) => {
76
- const trajectory = store.resolveTrajectory(selector(input));
77
- return store.closeTrajectory(trajectory.trajectoryId);
78
- });
74
+ return withStore(input.ledgerEnv, (store) => store.closeTrajectory(store.resolveTrajectory(selector(input)).trajectoryId));
79
75
  }
80
76
  export async function compareLoop(input) {
81
77
  return withStoreAsync(input.ledgerEnv, async (store) => {
@@ -111,6 +107,23 @@ export async function compareLoop(input) {
111
107
  inputsSummary: JSON.stringify(compareContext(input)),
112
108
  artifactRefs: result.artifacts,
113
109
  });
110
+ if (result.agentComparison) {
111
+ store.recordAgentResponse({
112
+ trajectoryId: trajectory.trajectoryId,
113
+ iterationId: trajectory.activeIterationId ?? undefined,
114
+ runId: result.runId,
115
+ mode: trajectory.mode,
116
+ profile: result.agentComparison.profile,
117
+ responsePath: result.agentComparison.responsePath,
118
+ responseHash: result.agentComparison.responseHash,
119
+ freshness: result.agentComparison.freshness,
120
+ validationStatus: result.agentComparison.status,
121
+ inputFingerprint: result.agentComparison.inputFingerprint,
122
+ responseJson: result.agentComparison.responseJson,
123
+ score: result.agentComparison.score,
124
+ topFix: result.agentComparison.topFix,
125
+ });
126
+ }
114
127
  return result;
115
128
  }
116
129
  catch (error) {
@@ -147,20 +160,9 @@ async function withStoreAsync(env, callback) {
147
160
  }
148
161
  }
149
162
  function selector(input) {
150
- return {
151
- trajectoryId: input.trajectoryId,
152
- target: input.target,
153
- mode: input.mode,
154
- };
163
+ return { trajectoryId: input.trajectoryId, target: input.target, mode: input.mode };
155
164
  }
156
165
  function compareContext(input) {
157
- return {
158
- ...getRuntimeContext(),
159
- headed: input.headed === true,
160
- headless: input.headed !== true,
161
- fullPage: input.fullPage === true,
162
- hasUrl: Boolean(input.url),
163
- hasStorageState: Boolean(input.storageState),
164
- };
166
+ return { ...getRuntimeContext(), headed: input.headed === true, headless: input.headed !== true, fullPage: input.fullPage === true, hasUrl: Boolean(input.url), hasStorageState: Boolean(input.storageState), ...(input.url ? { url: input.url } : {}), ...(input.storageState ? { storageState: input.storageState } : {}) };
165
167
  }
166
168
  //# sourceMappingURL=loop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
+ import { type AgentComparisonInputFingerprint } from '../schemas/comparison.js';
1
2
  import type { AgentComparisonProfileName } from './agent-comparison-profiles.js';
3
+ import { type AgentResponseFreshness } from './agent-comparison-response.js';
2
4
  export type AgentComparisonPackResult = {
3
5
  promptPath: string;
4
6
  codexPromptPath: string;
@@ -7,11 +9,22 @@ export type AgentComparisonPackResult = {
7
9
  examplePath: string;
8
10
  responsePath: string;
9
11
  status: 'awaiting-agent' | 'validated' | 'invalid';
12
+ profile: AgentComparisonProfileName;
13
+ inputFingerprint: AgentComparisonInputFingerprint;
14
+ freshness: AgentResponseFreshness;
15
+ responseExistedBefore: boolean;
16
+ responseHash?: string;
17
+ responseJson?: string;
10
18
  validationErrors?: string[];
11
19
  imageComparisonPath?: string;
12
20
  structureComparisonPath?: string;
13
21
  summaryPath?: string;
14
22
  scoreHighlights?: string[];
23
+ score?: {
24
+ imageOverall: number;
25
+ structureOverall?: number;
26
+ };
27
+ topFix?: string;
15
28
  };
16
29
  export declare function writeAgentComparisonPack(input: {
17
30
  workspaceRoot: string;