agenticreplay 0.1.12 → 0.1.13

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 (67) hide show
  1. package/README.md +6 -0
  2. package/node_modules/@agenticreplay/adapters/package.json +6 -6
  3. package/node_modules/@agenticreplay/core/package.json +3 -3
  4. package/node_modules/@agenticreplay/fs-capture/dist/capture.d.ts +8 -0
  5. package/node_modules/@agenticreplay/fs-capture/dist/capture.d.ts.map +1 -1
  6. package/node_modules/@agenticreplay/fs-capture/dist/capture.js +7 -1
  7. package/node_modules/@agenticreplay/fs-capture/dist/capture.js.map +1 -1
  8. package/node_modules/@agenticreplay/fs-capture/package.json +2 -2
  9. package/node_modules/@agenticreplay/mcp-shim/package.json +1 -1
  10. package/node_modules/@agenticreplay/node-instrument/package.json +1 -1
  11. package/node_modules/@agenticreplay/plugin-api/dist/index.d.ts +1 -0
  12. package/node_modules/@agenticreplay/plugin-api/dist/index.d.ts.map +1 -1
  13. package/node_modules/@agenticreplay/plugin-api/dist/index.js +1 -0
  14. package/node_modules/@agenticreplay/plugin-api/dist/index.js.map +1 -1
  15. package/node_modules/@agenticreplay/plugin-api/dist/memory-review.d.ts +35 -0
  16. package/node_modules/@agenticreplay/plugin-api/dist/memory-review.d.ts.map +1 -0
  17. package/node_modules/@agenticreplay/plugin-api/dist/memory-review.js +2 -0
  18. package/node_modules/@agenticreplay/plugin-api/dist/memory-review.js.map +1 -0
  19. package/node_modules/@agenticreplay/plugin-api/package.json +1 -1
  20. package/node_modules/@agenticreplay/providers/package.json +3 -3
  21. package/node_modules/@agenticreplay/proxy/package.json +5 -5
  22. package/node_modules/@agenticreplay/schema/package.json +1 -1
  23. package/node_modules/@agenticreplay/shell-shim/package.json +3 -3
  24. package/node_modules/@agenticreplay/viewer/dist/index.d.ts +1 -0
  25. package/node_modules/@agenticreplay/viewer/dist/index.d.ts.map +1 -1
  26. package/node_modules/@agenticreplay/viewer/dist/index.js +1 -0
  27. package/node_modules/@agenticreplay/viewer/dist/index.js.map +1 -1
  28. package/node_modules/@agenticreplay/viewer/dist/review.d.ts +41 -0
  29. package/node_modules/@agenticreplay/viewer/dist/review.d.ts.map +1 -0
  30. package/node_modules/@agenticreplay/viewer/dist/review.js +206 -0
  31. package/node_modules/@agenticreplay/viewer/dist/review.js.map +1 -0
  32. package/node_modules/@agenticreplay/viewer/package.json +2 -2
  33. package/package.json +12 -12
  34. package/packages/cli/dist/args.d.ts.map +1 -1
  35. package/packages/cli/dist/args.js +1 -0
  36. package/packages/cli/dist/args.js.map +1 -1
  37. package/packages/cli/dist/commands/record.d.ts.map +1 -1
  38. package/packages/cli/dist/commands/record.js +37 -15
  39. package/packages/cli/dist/commands/record.js.map +1 -1
  40. package/packages/cli/dist/commands/review.d.ts +4 -0
  41. package/packages/cli/dist/commands/review.d.ts.map +1 -0
  42. package/packages/cli/dist/commands/review.js +54 -0
  43. package/packages/cli/dist/commands/review.js.map +1 -0
  44. package/packages/cli/dist/config.d.ts +3 -0
  45. package/packages/cli/dist/config.d.ts.map +1 -1
  46. package/packages/cli/dist/config.js.map +1 -1
  47. package/packages/cli/dist/flags.d.ts.map +1 -1
  48. package/packages/cli/dist/flags.js +2 -0
  49. package/packages/cli/dist/flags.js.map +1 -1
  50. package/packages/cli/dist/fs-events.d.ts.map +1 -1
  51. package/packages/cli/dist/fs-events.js +16 -0
  52. package/packages/cli/dist/fs-events.js.map +1 -1
  53. package/packages/cli/dist/main.d.ts.map +1 -1
  54. package/packages/cli/dist/main.js +5 -0
  55. package/packages/cli/dist/main.js.map +1 -1
  56. package/packages/cli/dist/review-coordinator.d.ts +16 -0
  57. package/packages/cli/dist/review-coordinator.d.ts.map +1 -0
  58. package/packages/cli/dist/review-coordinator.js +141 -0
  59. package/packages/cli/dist/review-coordinator.js.map +1 -0
  60. package/packages/cli/dist/review-store.d.ts +24 -0
  61. package/packages/cli/dist/review-store.d.ts.map +1 -0
  62. package/packages/cli/dist/review-store.js +159 -0
  63. package/packages/cli/dist/review-store.js.map +1 -0
  64. package/packages/cli/dist/snapshot.d.ts +2 -0
  65. package/packages/cli/dist/snapshot.d.ts.map +1 -1
  66. package/packages/cli/dist/snapshot.js.map +1 -1
  67. package/packages/cli/package.json +11 -11
package/README.md CHANGED
@@ -60,6 +60,12 @@ contain sensitive data. Review them before sharing.
60
60
  See [integrations](docs/integrations.md) for other harnesses and
61
61
  [debugging a failing run](docs/how-to/debug-a-failing-agent-run.md) for an example.
62
62
 
63
+ ## Post-recording review
64
+
65
+ The optional [memory review queue](docs/memory-review.md) tracks a finished CLI recording and lets
66
+ you reopen its review by exact run ID. Candidate preparation and saving need a compatible
67
+ Kiokuko host integration.
68
+
63
69
  ## License
64
70
 
65
71
  Apache-2.0. Trace specification: CC BY 4.0.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/adapters",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,11 +17,11 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/core": "0.1.12",
21
- "@agenticreplay/node-instrument": "0.1.12",
22
- "@agenticreplay/plugin-api": "0.1.12",
23
- "@agenticreplay/proxy": "0.1.12",
24
- "@agenticreplay/shell-shim": "0.1.12"
20
+ "@agenticreplay/core": "0.1.13",
21
+ "@agenticreplay/node-instrument": "0.1.13",
22
+ "@agenticreplay/plugin-api": "0.1.13",
23
+ "@agenticreplay/proxy": "0.1.13",
24
+ "@agenticreplay/shell-shim": "0.1.13"
25
25
  },
26
26
  "engines": {
27
27
  "node": ">=24.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/core",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,8 +17,8 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/plugin-api": "0.1.12",
21
- "@agenticreplay/schema": "0.1.12",
20
+ "@agenticreplay/plugin-api": "0.1.13",
21
+ "@agenticreplay/schema": "0.1.13",
22
22
  "any-ascii": "0.3.3"
23
23
  },
24
24
  "engines": {
@@ -11,6 +11,14 @@ export interface FsCaptureOptions {
11
11
  }
12
12
  export interface TurnSnapshot {
13
13
  changes: FileChange[];
14
+ /**
15
+ * The turn whose sample already covers this turn's window, set only when this call sampled
16
+ * nothing because that later turn was sampled first: the harness can hold exchanges in flight
17
+ * at once, so they reach the recorder in completion order, not request order. Re-sampling
18
+ * would describe the tree as it is *after* that later turn and reattribute its changes to this
19
+ * turn. Absent from every ordinary snapshot, whose diff is complete for its own window.
20
+ */
21
+ coveredBy?: number;
14
22
  /**
15
23
  * Nested repositories inside a declared artifact path that this snapshot could not hold, named
16
24
  * the first time each is seen. Absent from every ordinary snapshot; see
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACpD;AAED;;;;;;GAMG;AACH,qBAAa,SAAS;IAKlB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAP7B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAM;IAEtB,OAAO;IAOP,+FAA+F;WAClF,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAexD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;WAIjB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBvD,8FAA8F;IAC9F,IAAI,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAEzC;IAED,4FAA4F;IAC5F,IAAI,kBAAkB,IAAI,SAAS,kBAAkB,EAAE,CAEtD;IAED;;;OAGG;IACG,OAAO,CAAC,GAAG,GAAE,MAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBvD;;;;;;;;OAQG;YACW,cAAc;CAiB7B"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACpD;AAED;;;;;;GAMG;AACH,qBAAa,SAAS;IAKlB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAP7B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAM;IAEtB,OAAO;IAOP,+FAA+F;WAClF,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAexD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;WAIjB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA6BvD,8FAA8F;IAC9F,IAAI,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAEzC;IAED,4FAA4F;IAC5F,IAAI,kBAAkB,IAAI,SAAS,kBAAkB,EAAE,CAEtD;IAED;;;OAGG;IACG,OAAO,CAAC,GAAG,GAAE,MAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBvD;;;;;;;;OAQG;YACW,cAAc;CAiB7B"}
@@ -50,7 +50,13 @@ export class FsCapture {
50
50
  throw new Error(`turn must be a non-negative integer, got ${turn}`);
51
51
  }
52
52
  if (turn < this.lastTurn) {
53
- throw new Error(`turn ${turn} is before the last snapshotted turn ${this.lastTurn}`);
53
+ // Out of order, not corruption. A gone-backwards turn means the recorder sampled a later
54
+ // turn first — the harness had exchanges in flight at once, so completion order is not
55
+ // request order, and a turn can arrive after its own window was covered. The later
56
+ // sample is the one that saw that tree; sampling again now would describe the tree as it
57
+ // is after that later turn and reattribute its changes to this turn. So no sample, and
58
+ // the flag tells the caller to record, not warn.
59
+ return { changes: [], coveredBy: this.lastTurn };
54
60
  }
55
61
  const tree = await this.shadow.snapshot();
56
62
  const previous = this.previousTree;
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/fs-capture",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,7 +17,7 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/schema": "0.1.12"
20
+ "@agenticreplay/schema": "0.1.13"
21
21
  },
22
22
  "engines": {
23
23
  "node": ">=24.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/mcp-shim",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/node-instrument",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,3 +1,4 @@
1
1
  export * from './canonical.js';
2
2
  export * from './plugins.js';
3
+ export * from './memory-review.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './canonical.js';
2
2
  export * from './plugins.js';
3
+ export * from './memory-review.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /** A sealed recording of a single CLI process. It can span multiple conversation turns. */
2
+ export interface RecordingReviewSource {
3
+ readonly version: 1;
4
+ readonly kind: 'recorded_process';
5
+ readonly repository: string;
6
+ readonly runId: string;
7
+ readonly hostSessionId: null;
8
+ readonly range: {
9
+ readonly kind: 'whole_run';
10
+ readonly events: number;
11
+ };
12
+ readonly manifestDigest: string;
13
+ readonly eventsDigest: string;
14
+ readonly capture: 'complete' | 'incomplete' | 'unverified';
15
+ readonly captureIssues: readonly string[];
16
+ readonly exitCode: number;
17
+ }
18
+ export interface ReviewCandidate {
19
+ readonly title: string;
20
+ readonly body: string;
21
+ readonly evidence: readonly {
22
+ readonly sequence: number;
23
+ readonly kind: 'observed' | 'inferred' | 'unverified';
24
+ readonly description: string;
25
+ }[];
26
+ }
27
+ /** Read-only host integration. The preparer owns trace input validation and secret removal. */
28
+ export interface ReviewPreparer {
29
+ prepare(input: {
30
+ source: RecordingReviewSource;
31
+ traceDirectory: string;
32
+ signal: AbortSignal;
33
+ }): Promise<ReviewCandidate | null>;
34
+ }
35
+ //# sourceMappingURL=memory-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-review.d.ts","sourceRoot":"","sources":["../src/memory-review.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;QACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,EAAE,CAAC;CACL;AAED,+FAA+F;AAC/F,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,qBAAqB,CAAC;QAC9B,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,WAAW,CAAC;KACrB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-review.js","sourceRoot":"","sources":["../src/memory-review.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/plugin-api",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/providers",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,8 +17,8 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/plugin-api": "0.1.12",
21
- "@agenticreplay/schema": "0.1.12"
20
+ "@agenticreplay/plugin-api": "0.1.13",
21
+ "@agenticreplay/schema": "0.1.13"
22
22
  },
23
23
  "engines": {
24
24
  "node": ">=24.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/proxy",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,10 +17,10 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/plugin-api": "0.1.12",
21
- "@agenticreplay/schema": "0.1.12",
22
- "@agenticreplay/core": "0.1.12",
23
- "@agenticreplay/providers": "0.1.12"
20
+ "@agenticreplay/plugin-api": "0.1.13",
21
+ "@agenticreplay/schema": "0.1.13",
22
+ "@agenticreplay/core": "0.1.13",
23
+ "@agenticreplay/providers": "0.1.13"
24
24
  },
25
25
  "engines": {
26
26
  "node": ">=24.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/schema",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/shell-shim",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,8 +17,8 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/schema": "0.1.12",
21
- "@agenticreplay/core": "0.1.12"
20
+ "@agenticreplay/schema": "0.1.13",
21
+ "@agenticreplay/core": "0.1.13"
22
22
  },
23
23
  "engines": {
24
24
  "node": ">=24.0.0"
@@ -13,4 +13,5 @@ export * from './html.js';
13
13
  export * from './render.js';
14
14
  export * from './serve.js';
15
15
  export * from './trace-dir.js';
16
+ export * from './review.js';
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
@@ -13,4 +13,5 @@ export * from './html.js';
13
13
  export * from './render.js';
14
14
  export * from './serve.js';
15
15
  export * from './trace-dir.js';
16
+ export * from './review.js';
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,41 @@
1
+ export interface ReviewView {
2
+ runId: string;
3
+ repository: string;
4
+ exitCode: number;
5
+ events: number;
6
+ capture: string;
7
+ captureIssues: readonly string[];
8
+ state: 'queued' | 'empty' | 'preparation_failed' | 'awaiting_review' | 'declined';
9
+ message: string;
10
+ proposal?: {
11
+ title: string;
12
+ body: string;
13
+ evidence: readonly {
14
+ sequence: number;
15
+ kind: string;
16
+ description: string;
17
+ }[];
18
+ revision: number;
19
+ digest: string;
20
+ };
21
+ }
22
+ export type ReviewAction = {
23
+ revision: number;
24
+ digest: string;
25
+ } & ({
26
+ kind: 'revise';
27
+ body: string;
28
+ } | {
29
+ kind: 'decline';
30
+ });
31
+ interface ReviewController {
32
+ read(): Promise<ReviewView>;
33
+ decide(action: ReviewAction): Promise<ReviewView>;
34
+ }
35
+ /** Owns a single loopback review. No write-to-memory route is registered here. */
36
+ export declare function serveMemoryReview(controller: ReviewController): Promise<{
37
+ url: string;
38
+ close: () => Promise<void>;
39
+ }>;
40
+ export {};
41
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,UAAU,CAAC;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,SAAS;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC7E,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,CAChE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CACvD,CAAC;AAEF,UAAU,gBAAgB;IACxB,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnD;AAkJD,kFAAkF;AAClF,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,gBAAgB;;;GAsEnE"}
@@ -0,0 +1,206 @@
1
+ import { randomBytes, timingSafeEqual } from 'node:crypto';
2
+ import { createServer } from 'node:http';
3
+ import { escapeHtml } from './html.js';
4
+ function reviewMain(view, csrf) {
5
+ const escape = escapeHtml;
6
+ const proposal = view.proposal;
7
+ return `<main>
8
+ <h1 tabindex="-1">Memory review</h1>
9
+ <p role="status">${escape(view.message)}</p>
10
+ <dl>
11
+ <dt>Recording</dt><dd>${escape(view.runId)} · whole recording (${escape(view.events)} events)</dd>
12
+ <dt>Repository scope</dt><dd>${escape(view.repository)}</dd>
13
+ <dt>Process exit</dt><dd>${escape(view.exitCode)} · task outcome unverified</dd>
14
+ <dt>Capture</dt><dd>${escape([view.capture, ...view.captureIssues].join(' · '))}</dd>
15
+ </dl>
16
+ ${proposal
17
+ ? `
18
+ <h2>${escape(proposal.title)}</h2>
19
+ <details><summary>Evidence and limitations</summary>
20
+ <ul>${proposal.evidence.map((e) => `<li>Event ${escape(e.sequence)} · ${escape(e.kind)} · ${escape(e.description)}</li>`).join('')}</ul>
21
+ <p>Revision ${escape(proposal.revision)} · <code>${escape(proposal.digest)}</code></p>
22
+ </details>
23
+ <form method="post">
24
+ <input type="hidden" name="csrf" value="${escape(csrf)}">
25
+ <input type="hidden" name="revision" value="${escape(proposal.revision)}">
26
+ <input type="hidden" name="digest" value="${escape(proposal.digest)}">
27
+ <label for="review-body">Proposed memory</label>
28
+ <textarea id="review-body" name="body" rows="8" maxlength="6000" required>
29
+ ${escape(proposal.body)}</textarea>
30
+ <p id="save-status">Saving requires a Kiokuko connection with a verified approval flow.</p>
31
+ <div class="actions">
32
+ <button type="submit" name="action" value="revise">Preview revision</button>
33
+ <button type="button" disabled aria-describedby="save-status">Save to Kiokuko</button>
34
+ <button type="submit" name="action" value="decline" formnovalidate>Discard review</button>
35
+ </div>
36
+ </form>`
37
+ : view.state === 'preparation_failed'
38
+ ? '<a href="">Retry review</a>'
39
+ : ''}
40
+ <p id="feedback" role="status"></p>
41
+ </main>`;
42
+ }
43
+ const script = `
44
+ let busy = false;
45
+ function dirty() {
46
+ const body = document.querySelector('textarea');
47
+ return body && body.value !== body.defaultValue;
48
+ }
49
+ window.addEventListener('beforeunload', event => {
50
+ if (dirty()) event.preventDefault();
51
+ });
52
+ document.addEventListener('submit', async event => {
53
+ event.preventDefault();
54
+ if (busy || !event.submitter) return;
55
+ const form = event.target;
56
+ const submitter = event.submitter;
57
+ const action = submitter.value;
58
+ if (action === 'decline' && !window.confirm('Discard this review? It will no longer be offered for this recording.')) return;
59
+ const fields = new URLSearchParams(new FormData(form, submitter));
60
+ if (action === 'decline') fields.delete('body');
61
+ const controls = Array.from(form.elements).filter(control => !control.disabled);
62
+ const feedback = document.querySelector('#feedback');
63
+ busy = true;
64
+ form.setAttribute('aria-busy', 'true');
65
+ controls.forEach(control => { control.disabled = true; });
66
+ feedback.textContent = 'Updating review…';
67
+ try {
68
+ const response = await fetch(location.pathname, {
69
+ method: 'POST', body: fields, mode: 'same-origin',
70
+ credentials: 'omit', redirect: 'error', signal: AbortSignal.timeout(12000)
71
+ });
72
+ if (!response.ok) {
73
+ feedback.textContent = await response.text();
74
+ return;
75
+ }
76
+ const next = new DOMParser().parseFromString(await response.text(), 'text/html').querySelector('main');
77
+ if (!next) throw new Error('Missing review');
78
+ document.querySelector('main').replaceWith(next);
79
+ next.querySelector('h1').focus();
80
+ } catch {
81
+ feedback.textContent = 'Connection lost. Your edit is still here. Retry, or reopen the review from the terminal.';
82
+ } finally {
83
+ form.removeAttribute('aria-busy');
84
+ controls.forEach(control => { control.disabled = false; });
85
+ if (form.isConnected && document.activeElement === document.body) submitter.focus();
86
+ busy = false;
87
+ }
88
+ });`;
89
+ function document(view, csrf, nonce) {
90
+ return `<!doctype html>
91
+ <html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
92
+ <title>Memory review · AgenticReplay</title>
93
+ <style nonce="${nonce}">
94
+ :root { color-scheme: light dark; font: 1rem/1.5 system-ui, sans-serif; }
95
+ main { max-width: 44rem; margin: 2rem auto; padding: 0 1rem; overflow-wrap: anywhere; }
96
+ dt { font-weight: 650; } dd { margin: 0 0 .65rem; }
97
+ details { margin: 1rem 0; } label { display: block; margin-bottom: .4rem; }
98
+ textarea { box-sizing: border-box; width: 100%; padding: .6rem; font: inherit; resize: vertical; }
99
+ .actions { display: flex; flex-wrap: wrap; gap: .6rem; }
100
+ button { font: inherit; padding: .5rem .85rem; min-height: 44px; }
101
+ :focus-visible { outline: 2px solid Highlight; outline-offset: 3px; }
102
+ </style>
103
+ ${reviewMain(view, csrf)}
104
+ <script nonce="${nonce}">${script}</script></html>`;
105
+ }
106
+ const maxBody = 80 * 1024;
107
+ async function readAction(request, csrf) {
108
+ let bytes = 0;
109
+ const chunks = [];
110
+ for await (const chunk of request) {
111
+ bytes += chunk.length;
112
+ if (bytes > maxBody)
113
+ throw new Error('Review form exceeds its size limit.');
114
+ chunks.push(chunk);
115
+ }
116
+ const fields = new URLSearchParams(Buffer.concat(chunks).toString('utf8'));
117
+ const token = Buffer.from(fields.get('csrf') ?? '');
118
+ const expected = Buffer.from(csrf);
119
+ if (token.length !== expected.length || !timingSafeEqual(token, expected))
120
+ throw new Error('Invalid review form. Reopen the review.');
121
+ const action = fields.get('action');
122
+ const revision = Number(fields.get('revision'));
123
+ const digest = fields.get('digest') ?? '';
124
+ const body = fields.get('body') ?? '';
125
+ if (!Number.isSafeInteger(revision) ||
126
+ revision < 1 ||
127
+ !/^[a-f0-9]{64}$/.test(digest) ||
128
+ (action !== 'decline' && action !== 'revise'))
129
+ throw new Error('Invalid review action.');
130
+ return action === 'decline'
131
+ ? { kind: action, revision, digest }
132
+ : { kind: action, revision, digest, body };
133
+ }
134
+ function send(response, status, body, html = false) {
135
+ response.writeHead(status, {
136
+ 'Content-Type': html ? 'text/html; charset=utf-8' : 'text/plain; charset=utf-8',
137
+ });
138
+ response.end(body);
139
+ }
140
+ /** Owns a single loopback review. No write-to-memory route is registered here. */
141
+ export async function serveMemoryReview(controller) {
142
+ const path = `/review/${randomBytes(24).toString('hex')}`;
143
+ const csrf = randomBytes(24).toString('hex');
144
+ let host;
145
+ const server = createServer({ requestTimeout: 15_000, headersTimeout: 5000 }, (req, res) => {
146
+ void handle(req, res).catch(() => {
147
+ if (!res.headersSent)
148
+ send(res, 500, 'The review is unavailable. Reopen it from the terminal.');
149
+ else
150
+ res.destroy();
151
+ });
152
+ });
153
+ async function handle(req, res) {
154
+ const nonce = randomBytes(16).toString('base64');
155
+ res.setHeader('Cache-Control', 'no-store');
156
+ res.setHeader('X-Content-Type-Options', 'nosniff');
157
+ res.setHeader('Referrer-Policy', 'no-referrer');
158
+ res.setHeader('Content-Security-Policy', `default-src 'none'; style-src 'nonce-${nonce}'; script-src 'nonce-${nonce}'; connect-src 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'none'`);
159
+ if (req.headers.host !== host || req.url !== path)
160
+ return send(res, 404, 'Review page not found.');
161
+ if (req.method === 'GET')
162
+ return send(res, 200, document(await controller.read(), csrf, nonce), true);
163
+ if (req.method !== 'POST')
164
+ return send(res, 405, 'Method not allowed.');
165
+ if (req.headers.origin !== `http://${host}`)
166
+ return send(res, 403, 'Review must come from this page.');
167
+ if (req.headers['content-type']?.split(';')[0] !== 'application/x-www-form-urlencoded')
168
+ return send(res, 415, 'Unsupported review form.');
169
+ if (Number(req.headers['content-length']) > maxBody)
170
+ return send(res, 413, 'Review form is too large.');
171
+ let action;
172
+ try {
173
+ action = await readAction(req, csrf);
174
+ }
175
+ catch (error) {
176
+ return send(res, 400, error instanceof Error ? error.message : 'Invalid review form.');
177
+ }
178
+ try {
179
+ return send(res, 200, document(await controller.decide(action), csrf, nonce), true);
180
+ }
181
+ catch (error) {
182
+ return send(res, 409, error instanceof Error ? error.message : 'The review could not be updated.');
183
+ }
184
+ }
185
+ await new Promise((resolve, reject) => {
186
+ server.once('error', reject);
187
+ server.listen(0, '127.0.0.1', () => {
188
+ server.off('error', reject);
189
+ resolve();
190
+ });
191
+ });
192
+ const address = server.address();
193
+ if (!address || typeof address === 'string') {
194
+ server.close();
195
+ throw new Error('Could not bind the local review.');
196
+ }
197
+ host = `127.0.0.1:${address.port}`;
198
+ return {
199
+ url: `http://${host}${path}`,
200
+ close: () => new Promise((resolve) => {
201
+ server.close(() => resolve());
202
+ server.closeAllConnections();
203
+ }),
204
+ };
205
+ }
206
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticreplay/viewer",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,7 +17,7 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@agenticreplay/schema": "0.1.12"
20
+ "@agenticreplay/schema": "0.1.13"
21
21
  },
22
22
  "engines": {
23
23
  "node": ">=24.0.0"