@jevitate/cli 0.10.0 → 0.12.0

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 (141) hide show
  1. package/dist/approval-provenance.d.ts +6 -0
  2. package/dist/approval-provenance.js +9 -1
  3. package/dist/approval-provenance.js.map +1 -1
  4. package/dist/approved-demo.d.ts +86 -0
  5. package/dist/approved-demo.js +184 -0
  6. package/dist/approved-demo.js.map +1 -0
  7. package/dist/author-journey-cli.js +2 -1
  8. package/dist/author-journey-cli.js.map +1 -1
  9. package/dist/bin.js +16525 -13523
  10. package/dist/build-info.generated.js +2 -2
  11. package/dist/campaign-api.d.ts +15 -0
  12. package/dist/campaign-api.js +67 -6
  13. package/dist/campaign-api.js.map +1 -1
  14. package/dist/campaign-cli.js +7 -2
  15. package/dist/campaign-cli.js.map +1 -1
  16. package/dist/campaign-preflight.d.ts +76 -0
  17. package/dist/campaign-preflight.js +117 -0
  18. package/dist/campaign-preflight.js.map +1 -0
  19. package/dist/catalog-bundle-api.d.ts +15 -5
  20. package/dist/catalog-bundle-api.js +117 -14
  21. package/dist/catalog-bundle-api.js.map +1 -1
  22. package/dist/catalog-bundle-findings.d.ts +10 -0
  23. package/dist/catalog-bundle-findings.js +75 -1
  24. package/dist/catalog-bundle-findings.js.map +1 -1
  25. package/dist/catalog-bundle.d.ts +111 -7
  26. package/dist/catalog-bundle.js +208 -9
  27. package/dist/catalog-bundle.js.map +1 -1
  28. package/dist/catalog-cli.js +3 -2
  29. package/dist/catalog-cli.js.map +1 -1
  30. package/dist/check-api.js +20 -2
  31. package/dist/check-api.js.map +1 -1
  32. package/dist/check-cli.d.ts +2 -0
  33. package/dist/check-cli.js +25 -0
  34. package/dist/check-cli.js.map +1 -1
  35. package/dist/check-execute.d.ts +6 -0
  36. package/dist/check-execute.js +1 -0
  37. package/dist/check-execute.js.map +1 -1
  38. package/dist/check-types.d.ts +7 -0
  39. package/dist/check-types.js.map +1 -1
  40. package/dist/cli-output.js +15 -1
  41. package/dist/cli-output.js.map +1 -1
  42. package/dist/cold-start-report.d.ts +32 -0
  43. package/dist/cold-start-report.js +31 -0
  44. package/dist/cold-start-report.js.map +1 -0
  45. package/dist/defect-evidence.js +10 -5
  46. package/dist/defect-evidence.js.map +1 -1
  47. package/dist/demo-aspect-api.d.ts +11 -0
  48. package/dist/demo-aspect-api.js +27 -2
  49. package/dist/demo-aspect-api.js.map +1 -1
  50. package/dist/demo-aspect-cli.js +7 -1
  51. package/dist/demo-aspect-cli.js.map +1 -1
  52. package/dist/demo-capture.d.ts +79 -2
  53. package/dist/demo-capture.js +504 -12
  54. package/dist/demo-capture.js.map +1 -1
  55. package/dist/environments.d.ts +8 -1
  56. package/dist/environments.js +14 -3
  57. package/dist/environments.js.map +1 -1
  58. package/dist/exit-codes.js +1 -0
  59. package/dist/exit-codes.js.map +1 -1
  60. package/dist/explore-adversarial.js +2 -2
  61. package/dist/explore-adversarial.js.map +1 -1
  62. package/dist/explore-cli.js +3 -2
  63. package/dist/explore-cli.js.map +1 -1
  64. package/dist/explore-goal.js +4 -3
  65. package/dist/explore-goal.js.map +1 -1
  66. package/dist/explore-shared.d.ts +11 -0
  67. package/dist/explore-shared.js +9 -0
  68. package/dist/explore-shared.js.map +1 -1
  69. package/dist/findings-filing.js +7 -3
  70. package/dist/findings-filing.js.map +1 -1
  71. package/dist/github-issue-filer.js +15 -9
  72. package/dist/github-issue-filer.js.map +1 -1
  73. package/dist/journeeze-api.d.ts +8 -2
  74. package/dist/journeeze-api.js +105 -19
  75. package/dist/journeeze-api.js.map +1 -1
  76. package/dist/journey-anchor-api.d.ts +37 -0
  77. package/dist/journey-anchor-api.js +58 -0
  78. package/dist/journey-anchor-api.js.map +1 -0
  79. package/dist/journey-anchor-cli.d.ts +17 -0
  80. package/dist/journey-anchor-cli.js +104 -0
  81. package/dist/journey-anchor-cli.js.map +1 -0
  82. package/dist/journey-api.d.ts +38 -1
  83. package/dist/journey-api.js +107 -10
  84. package/dist/journey-api.js.map +1 -1
  85. package/dist/journey-cli.d.ts +0 -1
  86. package/dist/journey-cli.js +124 -22
  87. package/dist/journey-cli.js.map +1 -1
  88. package/dist/journey-demo-api.d.ts +29 -0
  89. package/dist/journey-demo-api.js +29 -7
  90. package/dist/journey-demo-api.js.map +1 -1
  91. package/dist/journey-labels-migrate-api.d.ts +100 -0
  92. package/dist/journey-labels-migrate-api.js +194 -0
  93. package/dist/journey-labels-migrate-api.js.map +1 -0
  94. package/dist/journey-lint-sarif.js +6 -0
  95. package/dist/journey-lint-sarif.js.map +1 -1
  96. package/dist/journey-network-checks.d.ts +11 -0
  97. package/dist/journey-network-checks.js +36 -13
  98. package/dist/journey-network-checks.js.map +1 -1
  99. package/dist/journey-review.d.ts +12 -2
  100. package/dist/journey-review.js +522 -108
  101. package/dist/journey-review.js.map +1 -1
  102. package/dist/load-api.js +4 -2
  103. package/dist/load-api.js.map +1 -1
  104. package/dist/mcp-api.d.ts +3 -1
  105. package/dist/mcp-api.js +21 -2
  106. package/dist/mcp-api.js.map +1 -1
  107. package/dist/mcp-cli-tools.d.ts +1 -0
  108. package/dist/mcp-cli-tools.js +32 -9
  109. package/dist/mcp-cli-tools.js.map +1 -1
  110. package/dist/openrouter-call.d.ts +23 -10
  111. package/dist/openrouter-call.js +14 -11
  112. package/dist/openrouter-call.js.map +1 -1
  113. package/dist/png-pixels.d.ts +12 -0
  114. package/dist/png-pixels.js +96 -0
  115. package/dist/png-pixels.js.map +1 -0
  116. package/dist/regression-api.js +8 -5
  117. package/dist/regression-api.js.map +1 -1
  118. package/dist/review-render-options.d.ts +17 -0
  119. package/dist/review-render-options.js +17 -0
  120. package/dist/review-render-options.js.map +1 -0
  121. package/dist/server-log-verify.js +2 -1
  122. package/dist/server-log-verify.js.map +1 -1
  123. package/dist/signal-triage.js +7 -3
  124. package/dist/signal-triage.js.map +1 -1
  125. package/dist/source-run-api.js +2 -2
  126. package/dist/source-run-api.js.map +1 -1
  127. package/dist/ux-usability.js +5 -2
  128. package/dist/ux-usability.js.map +1 -1
  129. package/dist/verify-fix-api.d.ts +29 -0
  130. package/dist/verify-fix-api.js +45 -2
  131. package/dist/verify-fix-api.js.map +1 -1
  132. package/dist/verify-fix-cli.js +4 -0
  133. package/dist/verify-fix-cli.js.map +1 -1
  134. package/dist/zip-store.d.ts +15 -0
  135. package/dist/zip-store.js +93 -0
  136. package/dist/zip-store.js.map +1 -0
  137. package/package.json +14 -14
  138. package/skills/jevitate-demo/SKILL.md +4 -1
  139. package/skills/jevitate-run-journey/SKILL.md +4 -0
  140. package/skills/jevitate-test-campaign/SKILL.md +13 -0
  141. package/skills/jevitate-verify-fix/SKILL.md +5 -0
@@ -2,7 +2,9 @@ import { journeyEndState } from "@jevitate/journey";
2
2
  import { installFlashRecorder } from "@jevitate/interpreter";
3
3
  import { describeStep } from "@jevitate/journey";
4
4
  import { clock } from "@jevitate/domain";
5
- import { evaluateNetworkCheck, evaluateOutcomeChecks, monitorFor } from "@jevitate/explore";
5
+ import { DEFAULT_STEP_RESPONSE_TIMEOUT_MS, evaluateNetworkCheckAwaiting, evaluateOutcomeChecks, monitorFor } from "@jevitate/explore";
6
+ /** #486/L2: the largest `--step-response-timeout` / `stepResponseTimeoutMs` accepted (5 minutes): a step never waits longer. */
7
+ export const MAX_STEP_RESPONSE_TIMEOUT_MS = 300_000;
6
8
  /** How long the network may take to go idle after the last step before the checks read it. */
7
9
  const SETTLE_CEILING_MS = 5_000;
8
10
  export class JourneyOutcomeChecks {
@@ -10,10 +12,13 @@ export class JourneyOutcomeChecks {
10
12
  #end;
11
13
  #steps;
12
14
  #secrets;
15
+ #responseTimeoutMs;
13
16
  #lastFailures = [];
17
+ #slowSteps = [];
14
18
  /** `journey` undefined (an anchored prefix run): nothing is judged. */
15
19
  constructor(page, journey, opts = {}) {
16
20
  this.#page = page;
21
+ this.#responseTimeoutMs = opts.stepResponseTimeoutMs ?? DEFAULT_STEP_RESPONSE_TIMEOUT_MS;
17
22
  this.#secrets = opts.secrets ?? [];
18
23
  this.#end = journey === undefined ? [] : journeyEndState(journey);
19
24
  this.#steps = [];
@@ -21,7 +26,7 @@ export class JourneyOutcomeChecks {
21
26
  for (const p of journey?.recording.pages ?? []) {
22
27
  for (const r of p.steps) {
23
28
  if ((r.expectRequests ?? []).length > 0)
24
- this.#steps.push({ index: i, label: describeStep(r.step), checks: r.expectRequests ?? [] });
29
+ this.#steps.push({ index: i, label: describeStep(r.step), checks: r.expectRequests ?? [], ...(r.responseTimeoutMs === undefined ? {} : { responseTimeoutMs: r.responseTimeoutMs }) });
25
30
  i += 1;
26
31
  }
27
32
  }
@@ -29,6 +34,10 @@ export class JourneyOutcomeChecks {
29
34
  get active() {
30
35
  return this.#end.length > 0 || this.#steps.length > 0;
31
36
  }
37
+ /** #486: advisory `slow-step` findings of the last `run` (empty when every response came promptly). */
38
+ get slowSteps() {
39
+ return this.#slowSteps;
40
+ }
32
41
  /** #402: the failed assertion sites of the last `run` (empty when every check held, or none ran). */
33
42
  get lastFailures() {
34
43
  return this.#lastFailures;
@@ -54,12 +63,19 @@ export class JourneyOutcomeChecks {
54
63
  },
55
64
  };
56
65
  }
66
+ #stopCaptures(monitor, capture) {
67
+ monitor.stopCapture(capture);
68
+ for (const s of this.#steps)
69
+ if (s.capture !== undefined)
70
+ monitor.stopCapture(s.capture);
71
+ }
57
72
  /**
58
73
  * Runs `replay` with the page's requests captured, then judges the checks. A replay that already
59
74
  * failed keeps its own reason. Without checks it just runs `replay`.
60
75
  */
61
76
  async run(actor, replay) {
62
77
  this.#lastFailures = [];
78
+ this.#slowSteps = [];
63
79
  if (!this.active)
64
80
  return replay();
65
81
  const monitor = monitorFor(this.#page);
@@ -71,17 +87,17 @@ export class JourneyOutcomeChecks {
71
87
  let result;
72
88
  try {
73
89
  result = await replay();
74
- if (result.outcome === "quarantined" || result.outcome === "heal-exhausted")
90
+ if (result.outcome === "quarantined" || result.outcome === "heal-exhausted") {
91
+ this.#stopCaptures(monitor, capture);
75
92
  return result;
93
+ }
76
94
  // A step's postcondition can hold before the write it triggered finished: wait for the network
77
95
  // to go idle (bounded) before reading what was sent.
78
96
  await monitor.waitSettled({ ceilingMs: SETTLE_CEILING_MS }).catch(() => undefined);
79
97
  }
80
- finally {
81
- monitor.stopCapture(capture);
82
- for (const s of this.#steps)
83
- if (s.capture !== undefined)
84
- monitor.stopCapture(s.capture);
98
+ catch (e) {
99
+ this.#stopCaptures(monitor, capture);
100
+ throw e;
85
101
  }
86
102
  // Step windows first (the end state's reload must not count as a step's request).
87
103
  const stepFailureSites = [];
@@ -92,15 +108,22 @@ export class JourneyOutcomeChecks {
92
108
  // A request still in flight when the step began (the previous step's write) finishes inside
93
109
  // this window: only requests SENT from the step's start count.
94
110
  const since = s.startedAt;
95
- const sent = window.sent().filter((r) => since === undefined || (r.startedAt !== undefined && r.startedAt >= since));
96
- s.checks.forEach((c, checkIndex) => {
97
- const r = evaluateNetworkCheck(c, sent, window.truncated);
111
+ for (const [checkIndex, c] of s.checks.entries()) {
112
+ // #486: a request still awaiting its response (a cold start) is waited for, up to the bound.
113
+ const { result: r, slowStep } = await evaluateNetworkCheckAwaiting(c, () => ({
114
+ requests: window.sent().filter((q) => since === undefined || (q.startedAt !== undefined && q.startedAt >= since)),
115
+ truncated: window.truncated,
116
+ }), s.responseTimeoutMs ?? this.#responseTimeoutMs);
117
+ if (slowStep !== undefined)
118
+ this.#slowSteps.push({ ...slowStep, step: s.index + 1 });
98
119
  if (r.passed)
99
- return;
120
+ continue;
100
121
  stepFailureSites.push({ where: "step-request", step: s.index + 1, checkIndex, detail: `${r.check} — ${r.detail}` });
101
122
  stepFailureReasons.push(`step ${s.index + 1} (${s.label}): ${r.check} — ${r.detail}`);
102
- });
123
+ }
103
124
  }
125
+ // The captures stay live through the waits above (#486): a pending request's response lands in them.
126
+ this.#stopCaptures(monitor, capture);
104
127
  let end = [];
105
128
  if (this.#end.length > 0) {
106
129
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AAIlE,OAAO,EAAE,oBAAoB,EAAqB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,UAAU,EAAgD,MAAM,mBAAmB,CAAC;AAE1I,8FAA8F;AAC9F,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAyBhC,MAAM,OAAO,oBAAoB;IACtB,KAAK,CAAO;IACZ,IAAI,CAAC;IACL,MAAM,CAAe;IACrB,QAAQ,CAAoB;IACrC,aAAa,GAAmC,EAAE,CAAC;IAEnD,uEAAuE;IACvE,YAAY,IAAU,EAAE,OAA4B,EAAE,OAAiD,EAAE;QACvG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC,CAAC;gBACrI,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,qGAAqG;IACrG,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,OAAO;YACL,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO;gBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC5D,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC1B,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,KAAY,EAAE,MAAuC;QAC7D,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YAC5G,MAAM,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACvC,IAAI,MAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB;gBAAE,OAAO,MAAM,CAAC;YAC3F,+FAA+F;YAC/F,qDAAqD;YACrD,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACrF,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC;QACD,kFAAkF;QAClF,MAAM,gBAAgB,GAA0B,EAAE,CAAC;QACnD,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,6FAA6F;YAC7F,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;YACpC,4FAA4F;YAC5F,+DAA+D;YAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;YACrH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;gBACjC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,CAAC,CAAC,MAAM;oBAAE,OAAO;gBACrB,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpH,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,GAAyB,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC1I,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,yEAAyE;gBACzE,MAAM,MAAM,GAAG,8DAA8D,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1H,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACpD,CAAC;QACH,CAAC;QACD,+FAA+F;QAC/F,yEAAyE;QACzE,MAAM,eAAe,GAA0B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACtE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7F,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,eAAe,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG;YACd,GAAG,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzJ,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iCAAiC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACpJ,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QACxC,uFAAuF;QACvF,IAAI,MAAM,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,qEAAqE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACpM,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChE,CAAC;CACF"}
1
+ {"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"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"}
@@ -48,10 +48,20 @@ export interface JourneyReviewContext {
48
48
  }
49
49
  /** #432: the review sheet of one Journey — pure. */
50
50
  export declare function buildJourneyReview(journey: Journey, ctx?: JourneyReviewContext): JourneyReview;
51
+ /** Step numbers as ranges: 1, 2, 3, 5 becomes `1–3, 5`. */
52
+ export declare function stepRanges(numbers: readonly number[]): string;
53
+ /** How the sheet is drawn. `width` wraps the text sheet (default 100); `color` adds ANSI; `full` adds the detail sections. */
54
+ export interface RenderOptions {
55
+ readonly width?: number;
56
+ readonly color?: boolean;
57
+ readonly full?: boolean;
58
+ }
59
+ /** `2026-10-11T08:33:26.979Z` as `11 Oct 2026 08:33 UTC` — parsed, not locale-formatted, so it is deterministic. */
60
+ export declare function humanTime(iso: string): string;
51
61
  /** #432: the review sheet as Markdown (`journey review --markdown`). */
52
- export declare function renderReviewMarkdown(review: JourneyReview): string;
62
+ export declare function renderReviewMarkdown(review: JourneyReview, opts?: RenderOptions): string;
53
63
  /** #432: the review sheet as plain text (`journey review`, and `journey promote` in human mode). */
54
- export declare function renderReviewText(review: JourneyReview): string;
64
+ export declare function renderReviewText(review: JourneyReview, opts?: RenderOptions): string;
55
65
  /** #432: a review sheet file's content hash refused (none, or two different ones). */
56
66
  export declare class ReviewSheetError extends Error {
57
67
  readonly code = "E_JOURNEY_REVIEW_ARGS";