wicked-crew 0.7.48 → 0.7.49

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 (51) hide show
  1. package/dist/api/routes.d.ts +4 -1
  2. package/dist/api/routes.d.ts.map +1 -1
  3. package/dist/api/routes.js +8 -0
  4. package/dist/api/routes.js.map +1 -1
  5. package/dist/api/server.d.ts +15 -0
  6. package/dist/api/server.d.ts.map +1 -1
  7. package/dist/api/server.js +55 -3
  8. package/dist/api/server.js.map +1 -1
  9. package/dist/cli/index.d.ts.map +1 -1
  10. package/dist/cli/index.js +16 -1
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/core/adapter.d.ts.map +1 -1
  13. package/dist/core/adapter.js +13 -0
  14. package/dist/core/adapter.js.map +1 -1
  15. package/dist/core/types.d.ts +7 -0
  16. package/dist/core/types.d.ts.map +1 -1
  17. package/dist/core/types.js.map +1 -1
  18. package/dist/interactive/doc-checks-routes.d.ts +38 -0
  19. package/dist/interactive/doc-checks-routes.d.ts.map +1 -0
  20. package/dist/interactive/doc-checks-routes.js +122 -0
  21. package/dist/interactive/doc-checks-routes.js.map +1 -0
  22. package/dist/interactive/doc-delete-routes.d.ts +1 -1
  23. package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
  24. package/dist/interactive/doc-delete-routes.js +1 -1
  25. package/dist/interactive/doc-delete-routes.js.map +1 -1
  26. package/dist/interactive/doc-ledger-sweep.d.ts +3 -2
  27. package/dist/interactive/doc-ledger-sweep.d.ts.map +1 -1
  28. package/dist/interactive/doc-ledger-sweep.js +4 -3
  29. package/dist/interactive/doc-ledger-sweep.js.map +1 -1
  30. package/dist/interactive/ledger.d.ts +4 -1
  31. package/dist/interactive/ledger.d.ts.map +1 -1
  32. package/dist/interactive/ledger.js +5 -2
  33. package/dist/interactive/ledger.js.map +1 -1
  34. package/dist/interactive/review-events.d.ts +185 -0
  35. package/dist/interactive/review-events.d.ts.map +1 -0
  36. package/dist/interactive/review-events.js +856 -0
  37. package/dist/interactive/review-events.js.map +1 -0
  38. package/dist/interactive/review-ledger.d.ts +79 -0
  39. package/dist/interactive/review-ledger.d.ts.map +1 -0
  40. package/dist/interactive/review-ledger.js +131 -0
  41. package/dist/interactive/review-ledger.js.map +1 -0
  42. package/dist/interactive/ws-relay.d.ts +2 -1
  43. package/dist/interactive/ws-relay.d.ts.map +1 -1
  44. package/dist/interactive/ws-relay.js +2 -1
  45. package/dist/interactive/ws-relay.js.map +1 -1
  46. package/dist/qe/ledger.d.ts +35 -0
  47. package/dist/qe/ledger.d.ts.map +1 -1
  48. package/dist/qe/ledger.js +47 -0
  49. package/dist/qe/ledger.js.map +1 -1
  50. package/endpoint-manifest.json +13 -1
  51. package/package.json +1 -1
@@ -0,0 +1,122 @@
1
+ /**
2
+ * `GET /api/v1/projects/:projectId/interactive/docs/:doc/checks?version=` — the ONE checks read of
3
+ * a document (DES-artifact-editor-plugins §4, §5.8, §7.6; EP-C2).
4
+ *
5
+ * Every verdict behind it is a wicked-ledger row stamped with the crew run that produced it: the
6
+ * rows the interactive-review seam records in the document's review root (`review-ledger.ts`),
7
+ * read here as canonical JSON, read-only, exactly as the seam read them back before it announced
8
+ * them. There is no second verdict store, and nothing here writes.
9
+ *
10
+ * Per reviewer the answer is the newest verdict AT OR BELOW the version asked for (every version
11
+ * when the query names none): a newer review replaces an older one, and an older one stays visible
12
+ * — "on version N" — until then. A ledger that cannot be read is a 500 naming why, never an empty
13
+ * list pretending the document was never reviewed.
14
+ *
15
+ * `demo-review` is not served here: a demo run is not bound to a document any more (demos are made
16
+ * by the `demo` preset), and its reviewer's verdict already reads from `GET /runs/:id/demo`
17
+ * (`DemoView.review`).
18
+ */
19
+ import { API_PREFIX } from '../api/api-prefix.js';
20
+ import { ProjectsUnsupportedError } from '../core/adapter.js';
21
+ import { DEFAULT_PROJECT_ID } from '../projects/default-project.js';
22
+ import { readDocReviewVerdicts } from '../qe/ledger.js';
23
+ import { DOC_NAME } from './draft-events.js';
24
+ import { reviewRootOf } from './review-ledger.js';
25
+ const V = API_PREFIX;
26
+ const SOURCE = { match: 'review:intent', a11y: 'review:a11y', copy: 'review:copy', qe: 'review:quality' };
27
+ const ORDER = ['match', 'a11y', 'copy', 'qe'];
28
+ const isReviewer = (v) => Object.hasOwn(SOURCE, v);
29
+ const cliKey = (seat) => (seat.includes('#') ? seat.slice(0, seat.indexOf('#')) : seat);
30
+ function findingsOf(raw) {
31
+ const out = [];
32
+ for (const f of raw) {
33
+ if (typeof f !== 'object' || f === null)
34
+ continue;
35
+ const r = f;
36
+ if (typeof r['sentence'] !== 'string' || r['sentence'] === '')
37
+ continue;
38
+ out.push({
39
+ wid: typeof r['wid'] === 'string' && r['wid'] !== '' ? r['wid'] : null,
40
+ severity: r['severity'] === 'low' || r['severity'] === 'high' ? r['severity'] : 'medium',
41
+ sentence: r['sentence'],
42
+ });
43
+ }
44
+ return out;
45
+ }
46
+ /** A recorded review verdict as the checks panel shows it. */
47
+ export function docCheckOf(row) {
48
+ return {
49
+ id: row.id,
50
+ source: SOURCE[row.reviewer],
51
+ reviewer: row.reviewer,
52
+ version: row.version,
53
+ state: row.reviewVerdict === 'pass' ? 'pass' : row.reviewVerdict === 'changes' ? 'fail' : 'inconclusive',
54
+ sentence: row.reason ?? '',
55
+ findings: findingsOf(row.findings),
56
+ by: {
57
+ seat: row.seat,
58
+ evaluator: row.authorKnown && row.seat !== null && !row.excludedSeats.map(cliKey).includes(cliKey(row.seat)),
59
+ excluded_seats: row.excludedSeats,
60
+ author_known: row.authorKnown,
61
+ },
62
+ skill: row.skill,
63
+ run_id: row.runId,
64
+ at: row.createdAt,
65
+ };
66
+ }
67
+ /**
68
+ * Per reviewer, the verdict of the HIGHEST version at or below `version` (any version when `null`),
69
+ * newest first within a version; in the reviewers' display order.
70
+ */
71
+ export function newestPerReviewer(rows, version) {
72
+ const best = new Map();
73
+ for (const row of rows) {
74
+ if (!isReviewer(row.reviewer))
75
+ continue;
76
+ if (version !== null && row.version > version)
77
+ continue;
78
+ const cur = best.get(row.reviewer);
79
+ if (cur === undefined || row.version > cur.version || (row.version === cur.version && row.createdAt > cur.createdAt)) {
80
+ best.set(row.reviewer, row);
81
+ }
82
+ }
83
+ return ORDER.flatMap((id) => {
84
+ const row = best.get(id);
85
+ return row !== undefined ? [docCheckOf(row)] : [];
86
+ });
87
+ }
88
+ export function registerInteractiveDocChecks(app, adapter, deps) {
89
+ const log = deps.log ?? (() => undefined);
90
+ app.get(`${V}/projects/:projectId/interactive/docs/:doc/checks`, { config: { manifest: { responseType: 'DocChecksResponse', statusCodes: [200, 400, 404, 500] } } }, async (req, reply) => {
91
+ const { projectId, doc } = req.params;
92
+ if (!DOC_NAME.test(doc))
93
+ return reply.code(400).send({ error: `"${doc}" is not a document name` });
94
+ const rawVersion = req.query.version;
95
+ let version = null;
96
+ if (rawVersion !== undefined) {
97
+ const n = typeof rawVersion === 'string' && /^\d{1,9}$/u.test(rawVersion) ? Number(rawVersion) : NaN;
98
+ if (!Number.isInteger(n))
99
+ return reply.code(400).send({ error: 'version must be a whole number, 0 or above' });
100
+ version = n;
101
+ }
102
+ if (projectId !== DEFAULT_PROJECT_ID) {
103
+ try {
104
+ if ((await adapter.projectGet(projectId)) === null)
105
+ return reply.code(404).send({ error: `Project ${projectId} not found` });
106
+ }
107
+ catch (err) {
108
+ // An engine without projects files every document under Unfiled: the default partition answers.
109
+ if (!(err instanceof ProjectsUnsupportedError))
110
+ throw err;
111
+ }
112
+ }
113
+ const read = readDocReviewVerdicts(reviewRootOf(deps.reviewsDir(), projectId, doc));
114
+ if (read.error !== undefined) {
115
+ log(`[doc-checks] the review record of ${doc} (project ${projectId}) could not be read: ${read.error}`);
116
+ return reply.code(500).send({ error: 'The recorded reviews of this document could not be read', detail: read.error });
117
+ }
118
+ const body = { document_id: doc, version, checks: newestPerReviewer(read.rows, version) };
119
+ return reply.send(body);
120
+ });
121
+ }
122
+ //# sourceMappingURL=doc-checks-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-checks-routes.js","sourceRoot":"","sources":["../../src/interactive/doc-checks-routes.ts"],"names":[],"mappings":"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"}
@@ -58,7 +58,7 @@ export interface DocDeleteDeps {
58
58
  }) => Actor;
59
59
  /** The four-ledger sweep (`server.ts` wires the real one over the armed seams + their files;
60
60
  * a directly-driven route set gets an inert default so unit tests never touch ~/.wicked-crew). */
61
- dropDocLedgerRows: (documentId: string) => DocLedgerSweep;
61
+ dropDocLedgerRows: (documentId: string, projectId?: string) => DocLedgerSweep;
62
62
  env?: NodeJS.ProcessEnv;
63
63
  /** The daemon state home the DEFAULT docs root hangs off (crew ≥ 0.7.35, D-L7-1; tests point it at a scratch dir). */
64
64
  stateHome?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"doc-delete-routes.d.ts","sourceRoot":"","sources":["../../src/interactive/doc-delete-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAA0B,KAAK,qBAAqB,EAAmB,MAAM,kBAAkB,CAAC;AAEvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,KAAK,CAAC;IAC3C;uGACmG;IACnG,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,cAAc,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sHAAsH;IACtH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;gFAC4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,aAAa,GAClB,IAAI,CA6LN"}
1
+ {"version":3,"file":"doc-delete-routes.d.ts","sourceRoot":"","sources":["../../src/interactive/doc-delete-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAA0B,KAAK,qBAAqB,EAAmB,MAAM,kBAAkB,CAAC;AAEvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,KAAK,CAAC;IAC3C;uGACmG;IACnG,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,cAAc,CAAC;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sHAAsH;IACtH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;gFAC4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,aAAa,GAClB,IAAI,CA6LN"}
@@ -174,7 +174,7 @@ export function registerInteractiveDocDelete(app, adapter, deps) {
174
174
  // Interactive's half is settled (retired now, already retired, or nothing there to
175
175
  // retire). Crew's half runs in EVERY one of those cases — a 404 with ghost rows is
176
176
  // precisely the hand-deleted-workspace mess this route exists to clean up.
177
- const sweep = dropDocLedgerRows(doc);
177
+ const sweep = dropDocLedgerRows(doc, projectId);
178
178
  const retiredNow = upstream.status === 200 && upstream.body['already_retired'] !== true;
179
179
  if (upstream.status === 200 || sweep.removed_keys.length > 0) {
180
180
  audit.record('interactive.doc.deleted', actorOf(req), {
@@ -1 +1 @@
1
- {"version":3,"file":"doc-delete-routes.js","sourceRoot":"","sources":["../../src/interactive/doc-delete-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-delete-routes.js","sourceRoot":"","sources":["../../src/interactive/doc-delete-routes.ts"],"names":[],"mappings":"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"}
@@ -47,7 +47,8 @@ export interface DocLedgerSweep {
47
47
  }
48
48
  /**
49
49
  * Sweep one document's rows out of every given ledger. Never throws; see the module doc for the
50
- * per-ledger isolation and live-instance-first rules.
50
+ * per-ledger isolation and live-instance-first rules. `keep` spares rows of the name that belong
51
+ * to another project's document (EP-C2: review rows carry their project).
51
52
  */
52
- export declare function sweepDocLedgers(documentId: string, sources: DocLedgerSource[]): DocLedgerSweep;
53
+ export declare function sweepDocLedgers(documentId: string, sources: DocLedgerSource[], keep?: (key: string) => boolean): DocLedgerSweep;
53
54
  //# sourceMappingURL=doc-ledger-sweep.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doc-ledger-sweep.d.ts","sourceRoot":"","sources":["../../src/interactive/doc-ledger-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,IAAI,EAAE,MAAM,CAAC;IACb;yDACqD;IACrD,MAAM,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC9C,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;CACd;AAED;2CAC2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,iGAAiG;IACjG,EAAE,EAAE,OAAO,CAAC;IACZ,2FAA2F;IAC3F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;2DACuD;IACvD,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,cAAc,CAe9F"}
1
+ {"version":3,"file":"doc-ledger-sweep.d.ts","sourceRoot":"","sources":["../../src/interactive/doc-ledger-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,IAAI,EAAE,MAAM,CAAC;IACb;yDACqD;IACrD,MAAM,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC9C,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;CACd;AAED;2CAC2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,iGAAiG;IACjG,EAAE,EAAE,OAAO,CAAC;IACZ,2FAA2F;IAC3F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;2DACuD;IACvD,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,cAAc,CAe/H"}
@@ -23,15 +23,16 @@
23
23
  import { InteractiveHandoffLedger } from './ledger.js';
24
24
  /**
25
25
  * Sweep one document's rows out of every given ledger. Never throws; see the module doc for the
26
- * per-ledger isolation and live-instance-first rules.
26
+ * per-ledger isolation and live-instance-first rules. `keep` spares rows of the name that belong
27
+ * to another project's document (EP-C2: review rows carry their project).
27
28
  */
28
- export function sweepDocLedgers(documentId, sources) {
29
+ export function sweepDocLedgers(documentId, sources, keep) {
29
30
  const removed = [];
30
31
  const errors = [];
31
32
  for (const source of sources) {
32
33
  try {
33
34
  const ledger = source.ledger ?? new InteractiveHandoffLedger(source.path);
34
- removed.push(...ledger.removeDoc(documentId));
35
+ removed.push(...ledger.removeDoc(documentId, keep));
35
36
  }
36
37
  catch (err) {
37
38
  errors.push({
@@ -1 +1 @@
1
- {"version":3,"file":"doc-ledger-sweep.js","sourceRoot":"","sources":["../../src/interactive/doc-ledger-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAyBvD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,OAA0B;IAC5E,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACtG,CAAC"}
1
+ {"version":3,"file":"doc-ledger-sweep.js","sourceRoot":"","sources":["../../src/interactive/doc-ledger-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAyBvD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,OAA0B,EAAE,IAA+B;IAC7G,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACtG,CAAC"}
@@ -53,9 +53,12 @@ export declare class InteractiveHandoffLedger {
53
53
  * (tmp + rename, like every other write) and ONLY when something was actually removed, so a
54
54
  * sweep of a doc this ledger never answered does not create or rewrite the file.
55
55
  *
56
+ * `keep` (EP-C2): rows of the name that are NOT this document's — a review row of the same-named
57
+ * document in another project (`<doc>:review:<project partition>:…` carries its project) — stay.
58
+ *
56
59
  * @returns the removed keys (empty = nothing to remove).
57
60
  */
58
- removeDoc(documentId: string): string[];
61
+ removeDoc(documentId: string, keep?: (key: string) => boolean): string[];
59
62
  private persist;
60
63
  }
61
64
  //# sourceMappingURL=ledger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/interactive/ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;6EACyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAqC;gBAExC,IAAI,EAAE,MAAM;IAuCxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIhD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQhC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQhC,IAAI,IAAI,MAAM;IAId,kGAAkG;IAClG,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAI3C;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAavC,OAAO,CAAC,OAAO;CAMhB"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/interactive/ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;6EACyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAqC;gBAExC,IAAI,EAAE,MAAM;IAuCxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIhD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQhC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQhC,IAAI,IAAI,MAAM;IAId,kGAAkG;IAClG,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAI3C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,EAAE;IAaxE,OAAO,CAAC,OAAO;CAMhB"}
@@ -104,13 +104,16 @@ export class InteractiveHandoffLedger {
104
104
  * (tmp + rename, like every other write) and ONLY when something was actually removed, so a
105
105
  * sweep of a doc this ledger never answered does not create or rewrite the file.
106
106
  *
107
+ * `keep` (EP-C2): rows of the name that are NOT this document's — a review row of the same-named
108
+ * document in another project (`<doc>:review:<project partition>:…` carries its project) — stay.
109
+ *
107
110
  * @returns the removed keys (empty = nothing to remove).
108
111
  */
109
- removeDoc(documentId) {
112
+ removeDoc(documentId, keep) {
110
113
  const prefix = `${documentId}:`;
111
114
  const removed = [];
112
115
  for (const key of Object.keys(this.entries)) {
113
- if (key === documentId || key.startsWith(prefix)) {
116
+ if ((key === documentId || key.startsWith(prefix)) && keep?.(key) !== true) {
114
117
  delete this.entries[key];
115
118
  removed.push(key);
116
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/interactive/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/interactive/ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * The interactive-review seam (DES-artifact-editor-plugins §7.6 "Reviews", EP-C2) — the sibling of
3
+ * `edit-events.ts` and `theme-events.ts`, same subscriber shape, ledger and filter pattern.
4
+ *
5
+ * 1. The page / document editor's "Review this page" makes the host post
6
+ * `wicked.interactive.review.requested {document_id, version, reviewers:[…]}`.
7
+ * 2. Crew answers with ONE governed `interactive-review` run — one read-only phase that reviews the
8
+ * saved version once per requested reviewer (Intent, A11y, Copy, Quality) and reports per
9
+ * reviewer. One council per review, not four. The request is deduped on
10
+ * `<doc>:review:<project>:v<version>:<reviewers sorted>`: an answered request is re-announced from the
11
+ * record, a running one is left alone, a failed one may be asked again.
12
+ * 3. NOT THE AUTHOR'S SEAT. The seats that wrote the document (the creator units of its draft,
13
+ * edit and chat runs) are removed from the review run's roster AND passed as the launch's
14
+ * `excludeSeats` (EP-K3), which the engine unions into its judge exclusion — so neither the
15
+ * reviewer nor its judge is a seat that wrote what is under review. When no authoring run is
16
+ * on record (the operator typed the version), nothing is excluded and every verdict says so.
17
+ * 4. The phase is READ-ONLY (the engine gives a non-creator, non-code phase no write tools), so it
18
+ * cannot write its own verdict rows: it ends with one `REVIEW-REPORT-<nonce> {json}` line in its
19
+ * engine-captured output, and crew records ONE wicked-ledger verdict row per reviewer, stamped
20
+ * with `crew_run_id`, in the document's review root (`review-ledger.ts`) — there is no crew
21
+ * review ledger. The rows are READ BACK, and only what was read back is announced:
22
+ * `wicked.interactive.review.completed {document_id, version, reviewer, verdict, passed, findings}`.
23
+ * 5. A finding never edits the document. Fixing one is the operator's choice (rule 2).
24
+ *
25
+ * Replay dedup and the handoff directory ride the edit seam's ledger and `interactive-edits` root
26
+ * (keys `<doc>:review:…` beside `<doc>:v<n>` and `<doc>:theme:<ts>`), so no new state-home entry is
27
+ * introduced — the worker fence is unchanged.
28
+ */
29
+ import type { CoreAdapter } from '../core/adapter.js';
30
+ import type { SessionView, WorkflowDef } from '../core/types.js';
31
+ import type { InteractiveBridgePool } from './bridge-pool.js';
32
+ import { InteractiveHandoffLedger } from './ledger.js';
33
+ import { type ReviewFinding, type ReviewVerdict } from './review-ledger.js';
34
+ export declare const REVIEW_REQUESTED = "wicked.interactive.review.requested";
35
+ export declare const REVIEW_COMPLETED = "wicked.interactive.review.completed";
36
+ export declare const INTERACTIVE_REVIEW_BUS_FILTER = "wicked.interactive.review.requested@wicked-interactive";
37
+ export declare const INTERACTIVE_REVIEW_WORKFLOW = "interactive-review";
38
+ /** The reviewers, by the `review.requested` schema id (interactive's enum). */
39
+ export type ReviewerId = 'match' | 'a11y' | 'copy' | 'qe';
40
+ export interface ReviewerSpec {
41
+ /** What the operator calls it. */
42
+ title: string;
43
+ /** The garden skill the phase loads for it, when the published snapshot holds it. */
44
+ skill: string;
45
+ /** What to look for when the skill is not installed — one line. */
46
+ rubric: string;
47
+ }
48
+ /** DES §7.6's table. Order = the order results are announced in. */
49
+ export declare const REVIEWERS: Readonly<Record<ReviewerId, ReviewerSpec>>;
50
+ export declare const REVIEWER_IDS: ReviewerId[];
51
+ /**
52
+ * The line the phase ends with: `<marker> {json}`, where the marker is `REVIEW-REPORT-<nonce>` — a
53
+ * per-run nonce minted AFTER the version was saved and handed to the reviewer in the handoff only.
54
+ * The reviewed page is attacker-influenced; a report it carries (and the reviewer quotes) cannot
55
+ * know the nonce, so it is never this run's report.
56
+ */
57
+ export declare const REPORT_MARKER_PREFIX = "REVIEW-REPORT-";
58
+ export declare const reportMarker: () => string;
59
+ /**
60
+ * The review run's def. One phase, read-only by the engine's own posture rule (not a creator, not a
61
+ * code phase). It is `neutral`, not `evaluator`: an engine Evaluator must end `VERDICT: PASS|FAIL`
62
+ * and a FAIL parks the run at a human gate — but a review that finds problems is a FINISHED review,
63
+ * not a failed gate. The verdicts are the per-reviewer rows, not the run's status.
64
+ */
65
+ export declare function interactiveReviewWorkflowDef(allowedSkills?: string[]): WorkflowDef;
66
+ export interface ReviewRequest {
67
+ documentId: string;
68
+ version: number;
69
+ /** Deduped, in {@link REVIEWER_IDS} order. */
70
+ reviewers: ReviewerId[];
71
+ projectId?: string;
72
+ }
73
+ /**
74
+ * Parse a bus frame into a {@link ReviewRequest}, or `null` when it is not an actionable request:
75
+ * wrong type, malformed payload, slug-invalid `document_id`, no integer `version` (interactive
76
+ * stamps the head when the browser omits it, EP-I1), or a `reviewers` list naming none of the four.
77
+ * An ABSENT `reviewers` means all four.
78
+ */
79
+ export declare function parseReviewRequested(eventType: string, payload: unknown): ReviewRequest | null;
80
+ /**
81
+ * The dedupe unit: one review per document version per reviewer set — per project, because two
82
+ * projects may each hold a document of the same name (docs roots are partitioned per project).
83
+ * It starts `<doc>:` like every handoff key, so the doc↔run index and the delete sweep see it.
84
+ */
85
+ export declare function reviewHandoffKey(documentId: string, version: number, reviewers: readonly ReviewerId[], projectId?: string): string;
86
+ /**
87
+ * Is `key` a review row of `documentId` in a project OTHER than `projectId`? The delete sweep keeps
88
+ * those (codex r2): deleting one project's document must not make the same-named document of
89
+ * another project forget that it was reviewed.
90
+ */
91
+ export declare function isAnotherProjectsReviewKey(key: string, documentId: string, projectId: string | undefined): boolean;
92
+ export declare function reviewProblem(req: ReviewRequest, handoffPath: string): string;
93
+ /**
94
+ * This run's report: the object after the LAST occurrence of `marker` in a unit's output. `null` when
95
+ * the marker is absent, or when what follows its last occurrence is not one JSON object — an
96
+ * earlier occurrence is never revived (the last word of the reviewer decides, and a broken last
97
+ * word is no report).
98
+ */
99
+ export declare function extractReviewReport(output: string | null, marker: string): Record<string, unknown> | null;
100
+ export interface ReviewerResult {
101
+ reviewer: ReviewerId;
102
+ verdict: ReviewVerdict;
103
+ findings: ReviewFinding[];
104
+ reason: string;
105
+ }
106
+ /**
107
+ * One result per REQUESTED reviewer, in request order. A reviewer the report leaves out, whose
108
+ * verdict is neither `pass` nor `changes`, or whose findings cannot be read, reads `error` — never a
109
+ * guessed pass. A `pass` that still
110
+ * lists findings is recorded as `changes`: "nothing needs changing" and a list of changes cannot both
111
+ * be true, and the stricter one is kept.
112
+ */
113
+ export declare function resultsFromReport(report: Record<string, unknown> | null, requested: readonly ReviewerId[]): ReviewerResult[];
114
+ /** The same result for every requested reviewer when the run itself did not finish. */
115
+ export declare function errorResults(requested: readonly ReviewerId[], reason: string): ReviewerResult[];
116
+ export type ReadDocVersion = (documentId: string, projectId: string | undefined, version: number) => Promise<string>;
117
+ /** The default reader: the doc's bridge ← `GET /d/:doc/doc/:version` (interactive stays the reader of its files). */
118
+ export declare function readDocVersionViaBridge(pool: Pick<InteractiveBridgePool, 'ensure'>, resolveDocsRoot: (projectId: string | undefined) => string): ReadDocVersion;
119
+ /** `claude#2` → `claude`: the cli key of a seat instance. */
120
+ export declare const seatKey: (seat: string) => string;
121
+ /**
122
+ * The seats that wrote in `runIds`: every creator unit's assigned seat, as cli keys, sorted. A run
123
+ * that is not in `views`, or has no assigned creator unit, contributes nothing.
124
+ */
125
+ export declare function authorSeatsOf(views: readonly SessionView[], runIds: readonly string[]): string[];
126
+ /**
127
+ * The edit runs on record that produced a version at or below `version`: a `<doc>:v<n>` row names
128
+ * the PARENT of the version its run made, so `n < version` is the only row that can have written
129
+ * what is under review. The default {@link InteractiveReviewOptions.authoringRuns} (the edit ledger
130
+ * alone); the daemon passes one that also reads the draft and chat ledgers.
131
+ */
132
+ export declare function editRunsBefore(ledger: InteractiveHandoffLedger, documentId: string, version: number): string[];
133
+ /** One seam's ledger, as the doc-delete sweep and the doc↔run index name it. */
134
+ export interface AuthoringLedgerSource {
135
+ /** `draft` | `edit` | `chat`. */
136
+ name: string;
137
+ ledger?: InteractiveHandoffLedger | undefined;
138
+ path: string;
139
+ }
140
+ /**
141
+ * Every run on record that can have written what is under review: the document's draft run
142
+ * (`<doc>`), its edit runs whose parent version is below `version` (`<doc>:v<n>`), and its chat
143
+ * revisions (`<doc>:m:…` / `<doc>:e:…` — a chat ask carries no version, so all of them count: the
144
+ * list is a SUPERSET on purpose, because it can only narrow who reviews). Throws when a ledger
145
+ * cannot be read — the caller then refuses to pick a reviewer blindly.
146
+ */
147
+ export declare function authoringRunsFromLedgers(sources: readonly AuthoringLedgerSource[], documentId: string, version: number): string[];
148
+ /** `roster` without the seats in `excluded` (by cli key). Entries with no string `key` are kept. */
149
+ export declare function rosterWithout(roster: readonly unknown[], excluded: readonly string[]): unknown[];
150
+ export interface InteractiveReviewOptions {
151
+ dbPath?: string;
152
+ pollIntervalMs?: number;
153
+ heartbeatMs?: number;
154
+ /** Shared with the edit seam (one file, one instance); default: the edit ledger path. */
155
+ ledger?: InteractiveHandoffLedger;
156
+ ledgerPath?: string;
157
+ /** Handoff root (default `<state home>/interactive-edits`, shared with the edit seam). Reviews are recorded under `<editDir>/_reviews/<doc>/`. */
158
+ editDir?: string;
159
+ clisJson?: string;
160
+ roster?: () => unknown[];
161
+ /** Reads one saved version through interactive. Required: without it there is nothing to review. */
162
+ readDocVersion: ReadDocVersion;
163
+ /** The runs that wrote this document up to `version` (default: the edit ledger's rows below it). */
164
+ authoringRuns?: (documentId: string, version: number) => string[];
165
+ /** Does the published skills snapshot hold (and enable) this skill? Absent = none are held. */
166
+ skillHeld?: (name: string) => boolean;
167
+ onRunFiled?: (runId: string, projectId: string) => void;
168
+ log?: (message: string) => void;
169
+ logError?: (message: string) => void;
170
+ }
171
+ export interface InteractiveReviewSubscription {
172
+ stop(): Promise<void> | void;
173
+ ledger: InteractiveHandoffLedger;
174
+ /** Where every document's review root lives (`<editDir>/_reviews`). */
175
+ reviewsDir: string;
176
+ inFlightDocs(): string[];
177
+ }
178
+ /** "Intent passed · A11y asks for 2 changes · Copy could not run". */
179
+ export declare function summaryLine(rows: ReadonlyArray<{
180
+ reviewer: string;
181
+ reviewVerdict: string;
182
+ findings: unknown[];
183
+ }>): string;
184
+ export declare function startInteractiveReviewSubscriber(adapter: CoreAdapter, opts: InteractiveReviewOptions): Promise<InteractiveReviewSubscription | null>;
185
+ //# sourceMappingURL=review-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-events.d.ts","sourceRoot":"","sources":["../../src/interactive/review-events.ts"],"names":[],"mappings":"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"}