@jevitate/cli 0.7.0 → 0.8.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 (220) hide show
  1. package/dist/ai-cli.d.ts +3 -1
  2. package/dist/ai-cli.js +60 -16
  3. package/dist/ai-cli.js.map +1 -1
  4. package/dist/approval-provenance.d.ts +120 -0
  5. package/dist/approval-provenance.js +300 -0
  6. package/dist/approval-provenance.js.map +1 -0
  7. package/dist/author-journey-cli.js +4 -2
  8. package/dist/author-journey-cli.js.map +1 -1
  9. package/dist/bin.js +29019 -22450
  10. package/dist/build-info.generated.js +2 -2
  11. package/dist/builtin-analyzers.d.ts +7 -0
  12. package/dist/builtin-analyzers.js +19 -0
  13. package/dist/builtin-analyzers.js.map +1 -0
  14. package/dist/campaign-cli.d.ts +6 -0
  15. package/dist/campaign-cli.js +9 -4
  16. package/dist/campaign-cli.js.map +1 -1
  17. package/dist/catalog-analysis.d.ts +70 -0
  18. package/dist/catalog-analysis.js +507 -0
  19. package/dist/catalog-analysis.js.map +1 -0
  20. package/dist/catalog-api.d.ts +73 -0
  21. package/dist/catalog-api.js +97 -0
  22. package/dist/catalog-api.js.map +1 -0
  23. package/dist/catalog-cli.d.ts +12 -0
  24. package/dist/catalog-cli.js +224 -0
  25. package/dist/catalog-cli.js.map +1 -0
  26. package/dist/catalog-review.d.ts +29 -0
  27. package/dist/catalog-review.js +290 -0
  28. package/dist/catalog-review.js.map +1 -0
  29. package/dist/catalog.d.ts +133 -0
  30. package/dist/catalog.js +352 -0
  31. package/dist/catalog.js.map +1 -0
  32. package/dist/check-api.js +24 -2
  33. package/dist/check-api.js.map +1 -1
  34. package/dist/check-cli.d.ts +3 -0
  35. package/dist/check-cli.js +18 -4
  36. package/dist/check-cli.js.map +1 -1
  37. package/dist/check-execute.js +25 -9
  38. package/dist/check-execute.js.map +1 -1
  39. package/dist/check-plan.js +4 -1
  40. package/dist/check-plan.js.map +1 -1
  41. package/dist/check-suite.js +6 -3
  42. package/dist/check-suite.js.map +1 -1
  43. package/dist/check-types.d.ts +12 -1
  44. package/dist/check-types.js.map +1 -1
  45. package/dist/cli-output.js +82 -4
  46. package/dist/cli-output.js.map +1 -1
  47. package/dist/cli-shared.d.ts +22 -2
  48. package/dist/cli-shared.js +34 -5
  49. package/dist/cli-shared.js.map +1 -1
  50. package/dist/demo-aspect-api.d.ts +15 -0
  51. package/dist/demo-aspect-api.js +26 -1
  52. package/dist/demo-aspect-api.js.map +1 -1
  53. package/dist/demo-aspect-cli.js +64 -5
  54. package/dist/demo-aspect-cli.js.map +1 -1
  55. package/dist/exit-codes.js +4 -0
  56. package/dist/exit-codes.js.map +1 -1
  57. package/dist/explore-adversarial.d.ts +3 -1
  58. package/dist/explore-adversarial.js +2 -2
  59. package/dist/explore-adversarial.js.map +1 -1
  60. package/dist/explore-author.js +5 -2
  61. package/dist/explore-author.js.map +1 -1
  62. package/dist/explore-cli.js +144 -9
  63. package/dist/explore-cli.js.map +1 -1
  64. package/dist/explore-coverage.d.ts +6 -2
  65. package/dist/explore-coverage.js +4 -3
  66. package/dist/explore-coverage.js.map +1 -1
  67. package/dist/explore-feature.d.ts +3 -1
  68. package/dist/explore-feature.js +2 -2
  69. package/dist/explore-feature.js.map +1 -1
  70. package/dist/explore-goal.d.ts +37 -6
  71. package/dist/explore-goal.js +61 -48
  72. package/dist/explore-goal.js.map +1 -1
  73. package/dist/explore-shared.d.ts +12 -7
  74. package/dist/explore-shared.js +9 -1
  75. package/dist/explore-shared.js.map +1 -1
  76. package/dist/goal-run-flags.d.ts +2 -0
  77. package/dist/goal-run-flags.js +8 -1
  78. package/dist/goal-run-flags.js.map +1 -1
  79. package/dist/http-5xx-outcome.d.ts +8 -3
  80. package/dist/http-5xx-outcome.js +5 -15
  81. package/dist/http-5xx-outcome.js.map +1 -1
  82. package/dist/init-cli.d.ts +7 -0
  83. package/dist/init-cli.js +79 -9
  84. package/dist/init-cli.js.map +1 -1
  85. package/dist/init-codeowners.d.ts +39 -0
  86. package/dist/init-codeowners.js +91 -0
  87. package/dist/init-codeowners.js.map +1 -0
  88. package/dist/init-keys.d.ts +3 -1
  89. package/dist/init-keys.js +20 -8
  90. package/dist/init-keys.js.map +1 -1
  91. package/dist/init-skills.d.ts +85 -7
  92. package/dist/init-skills.js +303 -36
  93. package/dist/init-skills.js.map +1 -1
  94. package/dist/jev-advisor.d.ts +72 -0
  95. package/dist/jev-advisor.js +172 -0
  96. package/dist/jev-advisor.js.map +1 -0
  97. package/dist/journey-api.d.ts +34 -2
  98. package/dist/journey-api.js +51 -20
  99. package/dist/journey-api.js.map +1 -1
  100. package/dist/journey-cli.js +156 -12
  101. package/dist/journey-cli.js.map +1 -1
  102. package/dist/journey-review-api.d.ts +19 -0
  103. package/dist/journey-review-api.js +46 -0
  104. package/dist/journey-review-api.js.map +1 -0
  105. package/dist/journey-review-store.d.ts +16 -0
  106. package/dist/journey-review-store.js +95 -0
  107. package/dist/journey-review-store.js.map +1 -0
  108. package/dist/journey-review.d.ts +47 -0
  109. package/dist/journey-review.js +499 -0
  110. package/dist/journey-review.js.map +1 -0
  111. package/dist/journey-verify.js +14 -1
  112. package/dist/journey-verify.js.map +1 -1
  113. package/dist/key-report.d.ts +20 -5
  114. package/dist/key-report.js +32 -9
  115. package/dist/key-report.js.map +1 -1
  116. package/dist/kill-signal.js +10 -2
  117. package/dist/kill-signal.js.map +1 -1
  118. package/dist/load-cli.js +4 -2
  119. package/dist/load-cli.js.map +1 -1
  120. package/dist/log-classes.d.ts +73 -0
  121. package/dist/log-classes.js +167 -0
  122. package/dist/log-classes.js.map +1 -0
  123. package/dist/log-correlation.d.ts +29 -10
  124. package/dist/log-correlation.js +44 -21
  125. package/dist/log-correlation.js.map +1 -1
  126. package/dist/login-cli.d.ts +15 -0
  127. package/dist/login-cli.js +116 -0
  128. package/dist/login-cli.js.map +1 -0
  129. package/dist/logs-cli.js +3 -1
  130. package/dist/logs-cli.js.map +1 -1
  131. package/dist/mcp-api.d.ts +1 -0
  132. package/dist/mcp-api.js +61 -12
  133. package/dist/mcp-api.js.map +1 -1
  134. package/dist/mcp-cli-runner.d.ts +2 -0
  135. package/dist/mcp-cli-runner.js +3 -1
  136. package/dist/mcp-cli-runner.js.map +1 -1
  137. package/dist/mcp-cli-tools.d.ts +5 -0
  138. package/dist/mcp-cli-tools.js +158 -23
  139. package/dist/mcp-cli-tools.js.map +1 -1
  140. package/dist/mission-cli.js +8 -4
  141. package/dist/mission-cli.js.map +1 -1
  142. package/dist/mission-journal.d.ts +4 -1
  143. package/dist/mission-journal.js +9 -3
  144. package/dist/mission-journal.js.map +1 -1
  145. package/dist/mission-queue-cli.js +21 -2
  146. package/dist/mission-queue-cli.js.map +1 -1
  147. package/dist/mission-queue-runner.d.ts +6 -0
  148. package/dist/mission-queue-runner.js +33 -3
  149. package/dist/mission-queue-runner.js.map +1 -1
  150. package/dist/multi-run-cli.d.ts +7 -1
  151. package/dist/multi-run-cli.js +10 -3
  152. package/dist/multi-run-cli.js.map +1 -1
  153. package/dist/multi-run.d.ts +38 -3
  154. package/dist/multi-run.js +115 -23
  155. package/dist/multi-run.js.map +1 -1
  156. package/dist/persona-login.d.ts +199 -0
  157. package/dist/persona-login.js +574 -0
  158. package/dist/persona-login.js.map +1 -0
  159. package/dist/pre-approval.d.ts +98 -0
  160. package/dist/pre-approval.js +175 -0
  161. package/dist/pre-approval.js.map +1 -0
  162. package/dist/program.js +10 -0
  163. package/dist/program.js.map +1 -1
  164. package/dist/project-dir.d.ts +2 -1
  165. package/dist/project-dir.js +3 -1
  166. package/dist/project-dir.js.map +1 -1
  167. package/dist/readiness.d.ts +29 -0
  168. package/dist/readiness.js +291 -0
  169. package/dist/readiness.js.map +1 -0
  170. package/dist/regression-cli.js +4 -2
  171. package/dist/regression-cli.js.map +1 -1
  172. package/dist/report-api.d.ts +24 -2
  173. package/dist/report-api.js +33 -5
  174. package/dist/report-api.js.map +1 -1
  175. package/dist/report-cli.js +8 -1
  176. package/dist/report-cli.js.map +1 -1
  177. package/dist/result-schema.d.ts +12 -0
  178. package/dist/result-schema.js +8 -0
  179. package/dist/result-schema.js.map +1 -1
  180. package/dist/run-index.d.ts +4 -2
  181. package/dist/run-index.js +3 -1
  182. package/dist/run-index.js.map +1 -1
  183. package/dist/run-key-preflight.d.ts +2 -1
  184. package/dist/run-key-preflight.js +3 -2
  185. package/dist/run-key-preflight.js.map +1 -1
  186. package/dist/run-metadata.d.ts +26 -0
  187. package/dist/run-metadata.js +41 -0
  188. package/dist/run-metadata.js.map +1 -0
  189. package/dist/run-tags-cli.d.ts +12 -0
  190. package/dist/run-tags-cli.js +35 -0
  191. package/dist/run-tags-cli.js.map +1 -0
  192. package/dist/site-cli.d.ts +1 -1
  193. package/dist/site-cli.js +24 -1
  194. package/dist/site-cli.js.map +1 -1
  195. package/dist/source-cli.js +4 -2
  196. package/dist/source-cli.js.map +1 -1
  197. package/dist/suite-explore-options.d.ts +14 -0
  198. package/dist/suite-explore-options.js +7 -0
  199. package/dist/suite-explore-options.js.map +1 -1
  200. package/dist/sweep-api.d.ts +266 -0
  201. package/dist/sweep-api.js +828 -0
  202. package/dist/sweep-api.js.map +1 -0
  203. package/dist/sweep-cli.d.ts +9 -0
  204. package/dist/sweep-cli.js +115 -0
  205. package/dist/sweep-cli.js.map +1 -0
  206. package/dist/target-config.d.ts +5 -2
  207. package/dist/target-config.js +15 -0
  208. package/dist/target-config.js.map +1 -1
  209. package/dist/ux-cli.js +3 -1
  210. package/dist/ux-cli.js.map +1 -1
  211. package/dist/ux-usability.d.ts +9 -3
  212. package/dist/ux-usability.js +5 -3
  213. package/dist/ux-usability.js.map +1 -1
  214. package/dist/verify-fix-cli.js +4 -2
  215. package/dist/verify-fix-cli.js.map +1 -1
  216. package/package.json +12 -12
  217. package/skills/jevitate-demo/SKILL.md +5 -2
  218. package/skills/jevitate-getting-started/SKILL.md +12 -0
  219. package/skills/jevitate-run-journey/SKILL.md +17 -4
  220. package/skills/jevitate-test-campaign/SKILL.md +26 -5
@@ -1,5 +1,5 @@
1
1
  import { existsSync as realExistsSync } from "node:fs";
2
- import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { readFile, writeFile, mkdir, rm, rmdir } from "node:fs/promises";
3
3
  import { homedir as realHomedir } from "node:os";
4
4
  import { join, dirname } from "node:path";
5
5
  import { createHash } from "node:crypto";
@@ -34,6 +34,7 @@ export function resolveInstallTargetPaths(deps = {}) {
34
34
  cursorRulesDir: join(cwd(), ".cursor", "rules"),
35
35
  genericAgentsFile: join(cwd(), "AGENTS.md"),
36
36
  genericSkillsDir: join(cwd(), ".agent", "skills"),
37
+ claudeMdFile: join(cwd(), "CLAUDE.md"),
37
38
  };
38
39
  }
39
40
  function sha256(s) {
@@ -70,6 +71,87 @@ export async function applyFileInstall(targetPath, content, action) {
70
71
  // ---- marked-block targets (Codex + generic AGENTS.md) ----
71
72
  export const SKILLS_BLOCK_BEGIN = "<!-- BEGIN JEVITATE SKILLS v1 -->";
72
73
  export const SKILLS_BLOCK_END = "<!-- END JEVITATE SKILLS v1 -->";
74
+ /** Matches a BEGIN marker of ANY version, plus any trailing attributes (#431). */
75
+ export const SKILLS_BLOCK_BEGIN_RE = /<!-- BEGIN JEVITATE SKILLS v\d+[^>]*-->/;
76
+ /** Matches an END marker of ANY version (#431). */
77
+ export const SKILLS_BLOCK_END_RE = /<!-- END JEVITATE SKILLS v\d+ -->/;
78
+ /** Raised when a file's marker pair is malformed (missing, duplicated, or misordered). */
79
+ export class SkillsBlockMarkerError extends Error {
80
+ reason;
81
+ constructor(reason) {
82
+ super(reason);
83
+ this.name = "SkillsBlockMarkerError";
84
+ this.reason = reason;
85
+ }
86
+ }
87
+ function findAllMarkers(re, content) {
88
+ const flags = re.flags.includes("g") ? re.flags : `${re.flags}g`;
89
+ return [...content.matchAll(new RegExp(re.source, flags))];
90
+ }
91
+ const SKILLS_MARKERS = { begin: SKILLS_BLOCK_BEGIN_RE, end: SKILLS_BLOCK_END_RE, label: "JEVITATE SKILLS" };
92
+ function locateBlock(content, markers = SKILLS_MARKERS) {
93
+ const begins = findAllMarkers(markers.begin, content);
94
+ const ends = findAllMarkers(markers.end, content);
95
+ const L = markers.label;
96
+ if (begins.length === 0 && ends.length === 0)
97
+ return { kind: "none" };
98
+ if (begins.length > 1) {
99
+ return {
100
+ kind: "malformed",
101
+ reason: `found more than one BEGIN ${L} marker — keep a single marked block (delete the extra BEGIN lines), then re-run`,
102
+ };
103
+ }
104
+ if (ends.length > 1) {
105
+ return {
106
+ kind: "malformed",
107
+ reason: `found more than one END ${L} marker — keep a single marked block (delete the extra END lines), then re-run`,
108
+ };
109
+ }
110
+ if (begins.length === 1 && ends.length === 0) {
111
+ return {
112
+ kind: "malformed",
113
+ reason: `the BEGIN ${L} marker has no matching END marker — restore the END line or delete the partial block, then re-run`,
114
+ };
115
+ }
116
+ if (begins.length === 0) {
117
+ return {
118
+ kind: "malformed",
119
+ reason: `the END ${L} marker has no matching BEGIN marker — restore the BEGIN line or delete the stray END, then re-run`,
120
+ };
121
+ }
122
+ const begin = begins[0];
123
+ const end = ends[0];
124
+ const beginIndex = begin.index ?? 0;
125
+ const endIndex = end.index ?? 0;
126
+ if (endIndex < beginIndex) {
127
+ return {
128
+ kind: "malformed",
129
+ reason: `the END ${L} marker appears before the BEGIN marker — reorder the markers or delete the block, then re-run`,
130
+ };
131
+ }
132
+ return {
133
+ kind: "block",
134
+ span: {
135
+ beginStart: beginIndex,
136
+ beginEnd: beginIndex + begin[0].length,
137
+ endStart: endIndex,
138
+ endEnd: endIndex + end[0].length,
139
+ },
140
+ };
141
+ }
142
+ /**
143
+ * Locates the Jevitate skills block in `content`, version-agnostically (#431).
144
+ * `none` when no marker is present; `malformed` (with a fix-it reason) when the
145
+ * markers are missing, duplicated, or misordered; otherwise `block` with the
146
+ * BEGIN-line-start..END-marker-end span.
147
+ */
148
+ export function findSkillsBlock(content) {
149
+ const found = locateBlock(content);
150
+ if (found.kind === "block") {
151
+ return { kind: "block", start: found.span.beginStart, end: found.span.endEnd };
152
+ }
153
+ return found;
154
+ }
73
155
  /**
74
156
  * Renders the marked block that Codex/generic `AGENTS.md` carry. In `inline`
75
157
  * mode each skill's full body is embedded (used when no other on-disk copy
@@ -77,7 +159,10 @@ export const SKILLS_BLOCK_END = "<!-- END JEVITATE SKILLS v1 -->";
77
159
  * installed Claude-Code path instead.
78
160
  */
79
161
  export function renderSkillsBlock(skills, opts) {
80
- const parts = [SKILLS_BLOCK_BEGIN, "", "# Jevitate skills", ""];
162
+ const begin = opts.jevitateVersion
163
+ ? `<!-- BEGIN JEVITATE SKILLS v1 jevitate@${opts.jevitateVersion} -->`
164
+ : SKILLS_BLOCK_BEGIN;
165
+ const parts = [begin, "", "# Jevitate skills", ""];
81
166
  for (const s of skills) {
82
167
  parts.push(`## ${s.name}`, "", s.description, "");
83
168
  if (opts.mode === "reference" && opts.claudeSkillsDir) {
@@ -91,58 +176,77 @@ export function renderSkillsBlock(skills, opts) {
91
176
  return parts.join("\n");
92
177
  }
93
178
  /**
94
- * Splices `newBlock` (marker-wrapped) into `existing`. If markers are present,
95
- * only the marked region is replaced; everything before the opening marker and
179
+ * Splices `newBlock` (marker-wrapped) into `existing`. Any existing block (of
180
+ * ANY version) is replaced in place; everything before the opening marker and
96
181
  * after the closing marker is preserved byte-for-byte. Otherwise the block is
97
- * appended after a blank-line separator. Idempotent on repeat with the same block.
182
+ * appended after a blank-line separator. Idempotent on repeat with the same
183
+ * block. Throws `SkillsBlockMarkerError` when the target's markers are
184
+ * malformed (#431).
98
185
  */
99
186
  export function mergeBlock(existing, newBlock) {
100
- const start = existing.indexOf(SKILLS_BLOCK_BEGIN);
101
- const endMarker = existing.indexOf(SKILLS_BLOCK_END, start === -1 ? 0 : start);
102
- if (start !== -1 && endMarker !== -1) {
103
- const before = existing.slice(0, start);
104
- const after = existing.slice(endMarker + SKILLS_BLOCK_END.length);
105
- return before + newBlock + after;
187
+ return mergeMarkedBlock(existing, newBlock, SKILLS_MARKERS);
188
+ }
189
+ /**
190
+ * #437: `mergeBlock` for any marked block (`BlockMarkers`) — e.g. the CODEOWNERS block of
191
+ * `jevitate init --codeowners`. Same rules: replaced in place, else appended; idempotent; throws
192
+ * `SkillsBlockMarkerError` on malformed markers.
193
+ */
194
+ export function mergeMarkedBlock(existing, newBlock, markers) {
195
+ const found = locateBlock(existing, markers);
196
+ if (found.kind === "malformed")
197
+ throw new SkillsBlockMarkerError(found.reason);
198
+ if (found.kind === "block") {
199
+ return existing.slice(0, found.span.beginStart) + newBlock + existing.slice(found.span.endEnd);
106
200
  }
107
201
  if (existing === "")
108
202
  return newBlock;
109
203
  const sep = existing.endsWith("\n\n") ? "" : existing.endsWith("\n") ? "\n" : "\n\n";
110
204
  return existing + sep + newBlock;
111
205
  }
112
- /** sha256 of just the block's inner text (between the markers), or undefined
113
- * when no block is present — so user edits OUTSIDE the block never register as
114
- * a modification and edits INSIDE it do. */
206
+ /** sha256 of just the block's inner text (between the marker lines) — so the
207
+ * `jevitate@<version>` stamp in the BEGIN line never counts as a user
208
+ * modification, while edits INSIDE the block do. `undefined` when no block is
209
+ * present; throws `SkillsBlockMarkerError` when the markers are malformed. */
115
210
  export function extractBlockHash(content) {
116
- const start = content.indexOf(SKILLS_BLOCK_BEGIN);
117
- if (start === -1)
211
+ const found = locateBlock(content);
212
+ if (found.kind === "none")
118
213
  return undefined;
119
- const endMarker = content.indexOf(SKILLS_BLOCK_END, start);
120
- if (endMarker === -1)
121
- return undefined;
122
- const inner = content.slice(start + SKILLS_BLOCK_BEGIN.length, endMarker);
123
- return sha256(inner);
214
+ if (found.kind === "malformed")
215
+ throw new SkillsBlockMarkerError(found.reason);
216
+ return sha256(content.slice(found.span.beginEnd, found.span.endStart));
124
217
  }
125
- async function planBlockInstall(targetPath, newBlock, lastInstalledHash, opts = {}) {
218
+ async function planBlockInstallDetailed(targetPath, newBlock, lastInstalledHash, opts = {}) {
126
219
  let current;
127
220
  try {
128
221
  current = await readFile(targetPath, "utf8");
129
222
  }
130
223
  catch {
131
- return "create";
224
+ return { action: "create" };
132
225
  }
133
- const currentBlockHash = extractBlockHash(current);
134
- if (currentBlockHash === undefined)
135
- return "create"; // file exists but has no block yet — append one
226
+ const found = locateBlock(current);
227
+ if (found.kind === "malformed")
228
+ return { action: "refuse-malformed", reason: found.reason };
229
+ if (found.kind === "none")
230
+ return { action: "create" }; // file exists but has no block yet — append one
231
+ const currentBlockHash = sha256(current.slice(found.span.beginEnd, found.span.endStart));
136
232
  const userModified = lastInstalledHash === undefined || currentBlockHash !== lastInstalledHash;
137
233
  if (userModified && !opts.force)
138
- return "skip-user-modified";
234
+ return { action: "skip-user-modified" };
139
235
  if (userModified && opts.force)
140
- return "force-update";
141
- const newInnerHash = extractBlockHash(newBlock);
142
- return currentBlockHash === newInnerHash ? "unchanged" : "update";
236
+ return { action: "force-update" };
237
+ const existingBlock = current.slice(found.span.beginStart, found.span.endEnd);
238
+ return { action: existingBlock === newBlock ? "unchanged" : "update" };
239
+ }
240
+ /**
241
+ * Decides what to do with one marked-block target. Never writes and never
242
+ * throws: a malformed marker pair is reported as `refuse-malformed` so the
243
+ * skill installer leaves that file untouched and proceeds with the others (#431).
244
+ */
245
+ export async function planBlockInstall(targetPath, newBlock, lastInstalledHash, opts = {}) {
246
+ return (await planBlockInstallDetailed(targetPath, newBlock, lastInstalledHash, opts)).action;
143
247
  }
144
248
  async function applyBlockInstall(targetPath, newBlock, action) {
145
- if (action === "unchanged" || action === "skip-user-modified")
249
+ if (action === "unchanged" || action === "skip-user-modified" || action === "refuse-malformed")
146
250
  return;
147
251
  let existing = "";
148
252
  try {
@@ -214,11 +318,19 @@ export async function installSkills(runtimes, skills, paths, statePath, opts = {
214
318
  });
215
319
  }
216
320
  }
217
- const block = renderSkillsBlock(skills, { mode: blockMode, claudeSkillsDir: paths.claudeSkillsDir });
321
+ const block = renderSkillsBlock(skills, {
322
+ mode: blockMode,
323
+ claudeSkillsDir: paths.claudeSkillsDir,
324
+ jevitateVersion: opts.jevitateVersion,
325
+ });
218
326
  if (runtimeSet.has("codex"))
219
327
  blockUnits.push({ target: "codex", path: paths.codexAgentsFile, block });
220
328
  if (runtimeSet.has("generic"))
221
329
  blockUnits.push({ target: "generic", path: paths.genericAgentsFile, block });
330
+ // #431: opt-in CLAUDE.md block, only when Claude Code is actually a target.
331
+ if (opts.claudeMd && runtimeSet.has("claude-code")) {
332
+ blockUnits.push({ target: "claude-code", path: paths.claudeMdFile, block });
333
+ }
222
334
  const report = [];
223
335
  for (const unit of fileUnits) {
224
336
  const action = await planFileInstall(unit.path, unit.content, state[unit.path], { force: opts.force });
@@ -230,17 +342,23 @@ export async function installSkills(runtimes, skills, paths, statePath, opts = {
230
342
  report.push({ target: unit.target, skillId: unit.skillId, path: unit.path, action });
231
343
  }
232
344
  for (const unit of blockUnits) {
233
- const action = await planBlockInstall(unit.path, unit.block, state[unit.path], { force: opts.force });
345
+ const plan = await planBlockInstallDetailed(unit.path, unit.block, state[unit.path], { force: opts.force });
234
346
  if (!opts.dryRun) {
235
- await applyBlockInstall(unit.path, unit.block, action);
236
- if (action !== "skip-user-modified") {
347
+ await applyBlockInstall(unit.path, unit.block, plan.action);
348
+ if (plan.action !== "skip-user-modified" && plan.action !== "refuse-malformed") {
237
349
  const written = await readFile(unit.path, "utf8").catch(() => "");
238
350
  const hash = extractBlockHash(written);
239
351
  if (hash !== undefined)
240
352
  state[unit.path] = hash;
241
353
  }
242
354
  }
243
- report.push({ target: unit.target, skillId: "*", path: unit.path, action });
355
+ report.push({
356
+ target: unit.target,
357
+ skillId: "*",
358
+ path: unit.path,
359
+ action: plan.action,
360
+ ...(plan.reason !== undefined ? { reason: plan.reason } : {}),
361
+ });
244
362
  }
245
363
  // Only touch the state file when it actually changed, so a clean re-run
246
364
  // (everything "unchanged") performs zero writes.
@@ -253,4 +371,153 @@ export async function installSkills(runtimes, skills, paths, statePath, opts = {
253
371
  }
254
372
  return report;
255
373
  }
374
+ /** Removes a well-formed block plus ONE adjacent blank-line separator that
375
+ * mergeBlock appended, leaving every other byte in place (#431). */
376
+ function removeSkillsBlock(content) {
377
+ const found = locateBlock(content);
378
+ if (found.kind !== "block")
379
+ return content;
380
+ let before = content.slice(0, found.span.beginStart);
381
+ const after = content.slice(found.span.endEnd);
382
+ if (before.endsWith("\n\n"))
383
+ before = before.slice(0, -1);
384
+ return before + after;
385
+ }
386
+ /**
387
+ * Removes everything `installSkills` wrote, with the same never-clobber safety:
388
+ * a whole file or block whose current hash differs from the recorded state is
389
+ * reported `skip-user-modified` (or `force-remove` with `force`) rather than
390
+ * deleted. Malformed markers are reported `refuse-malformed` and left alone.
391
+ * `dryRun` reports the plan and writes nothing. Corresponding state entries are
392
+ * dropped for removed/absent targets.
393
+ */
394
+ export async function uninstallSkills(runtimes, skills, paths, statePath, opts = {}) {
395
+ const { state, raw: originalStateRaw } = await loadState(statePath);
396
+ const runtimeSet = new Set(runtimes);
397
+ const fileUnits = [];
398
+ const blockUnits = [];
399
+ for (const skill of skills) {
400
+ if (runtimeSet.has("claude-code")) {
401
+ fileUnits.push({
402
+ target: "claude-code",
403
+ skillId: skill.id,
404
+ path: join(paths.claudeSkillsDir, skill.id, "SKILL.md"),
405
+ rootDir: paths.claudeSkillsDir,
406
+ });
407
+ }
408
+ if (runtimeSet.has("cursor")) {
409
+ fileUnits.push({
410
+ target: "cursor",
411
+ skillId: skill.id,
412
+ path: join(paths.cursorRulesDir, `jevitate-${skill.id}.mdc`),
413
+ rootDir: paths.cursorRulesDir,
414
+ });
415
+ }
416
+ if (runtimeSet.has("generic")) {
417
+ fileUnits.push({
418
+ target: "generic",
419
+ skillId: skill.id,
420
+ path: join(paths.genericSkillsDir, skill.id, "SKILL.md"),
421
+ rootDir: paths.genericSkillsDir,
422
+ });
423
+ }
424
+ }
425
+ if (runtimeSet.has("codex"))
426
+ blockUnits.push({ target: "codex", path: paths.codexAgentsFile });
427
+ if (runtimeSet.has("generic"))
428
+ blockUnits.push({ target: "generic", path: paths.genericAgentsFile });
429
+ if (opts.claudeMd && runtimeSet.has("claude-code")) {
430
+ blockUnits.push({ target: "claude-code", path: paths.claudeMdFile });
431
+ }
432
+ const report = [];
433
+ for (const unit of fileUnits) {
434
+ let current;
435
+ try {
436
+ current = await readFile(unit.path, "utf8");
437
+ }
438
+ catch {
439
+ current = undefined;
440
+ }
441
+ let action;
442
+ if (current === undefined) {
443
+ action = "absent";
444
+ }
445
+ else {
446
+ const recorded = state[unit.path];
447
+ const userModified = recorded === undefined || sha256(current) !== recorded;
448
+ action = userModified ? (opts.force ? "force-remove" : "skip-user-modified") : "remove";
449
+ }
450
+ if (!opts.dryRun) {
451
+ if (action === "remove" || action === "force-remove") {
452
+ await rm(unit.path, { force: true });
453
+ await rmdir(dirname(unit.path)).catch(() => { }); // drop the now-empty <skill> dir
454
+ if (dirname(unit.path) !== unit.rootDir)
455
+ await rmdir(unit.rootDir).catch(() => { });
456
+ delete state[unit.path];
457
+ }
458
+ else if (action === "absent") {
459
+ delete state[unit.path];
460
+ }
461
+ }
462
+ report.push({ target: unit.target, skillId: unit.skillId, path: unit.path, action });
463
+ }
464
+ for (const unit of blockUnits) {
465
+ let current;
466
+ try {
467
+ current = await readFile(unit.path, "utf8");
468
+ }
469
+ catch {
470
+ current = undefined;
471
+ }
472
+ let action;
473
+ let reason;
474
+ if (current === undefined) {
475
+ action = "absent";
476
+ }
477
+ else {
478
+ const found = locateBlock(current);
479
+ if (found.kind === "none") {
480
+ action = "absent";
481
+ }
482
+ else if (found.kind === "malformed") {
483
+ action = "refuse-malformed";
484
+ reason = found.reason;
485
+ }
486
+ else {
487
+ const innerHash = sha256(current.slice(found.span.beginEnd, found.span.endStart));
488
+ const recorded = state[unit.path];
489
+ const userModified = recorded === undefined || innerHash !== recorded;
490
+ action = userModified ? (opts.force ? "force-remove" : "skip-user-modified") : "remove";
491
+ }
492
+ }
493
+ if (!opts.dryRun && current !== undefined) {
494
+ if (action === "remove" || action === "force-remove") {
495
+ const updated = removeSkillsBlock(current);
496
+ if (updated.trim() === "")
497
+ await rm(unit.path, { force: true });
498
+ else
499
+ await writeFile(unit.path, updated, "utf8");
500
+ delete state[unit.path];
501
+ }
502
+ else if (action === "absent") {
503
+ delete state[unit.path];
504
+ }
505
+ }
506
+ report.push({
507
+ target: unit.target,
508
+ skillId: "*",
509
+ path: unit.path,
510
+ action,
511
+ ...(reason !== undefined ? { reason } : {}),
512
+ });
513
+ }
514
+ if (!opts.dryRun) {
515
+ const nextStateRaw = JSON.stringify(state, null, 2);
516
+ if (nextStateRaw !== originalStateRaw) {
517
+ await mkdir(dirname(statePath), { recursive: true });
518
+ await writeFile(statePath, nextStateRaw, "utf8");
519
+ }
520
+ }
521
+ return report;
522
+ }
256
523
  //# sourceMappingURL=init-skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-skills.js","sourceRoot":"","sources":["../src/init-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAsB,EAAE;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,cAAc,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,2DAA2D;IACrF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAUD,MAAM,UAAU,yBAAyB,CAAC,OAAsB,EAAE;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,OAAO;QACL,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC;QACrD,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC;QACvD,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC;QAC/C,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC;QAC3C,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAClD,CAAC;AACJ,CAAC;AAMD,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,UAAkB,EAClB,iBAAqC,EACrC,OAA4B,EAAE;IAE9B,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC,CAAC,4FAA4F;IAC/G,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,iBAAiB,KAAK,SAAS,IAAI,WAAW,KAAK,iBAAiB,CAAC;IAC1F,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,oBAAoB,CAAC;IAC7D,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC;IACtD,OAAO,WAAW,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB,EAAE,OAAe,EAAE,MAAqB;IAC/F,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,oBAAoB;QAAE,OAAO;IACtE,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,6DAA6D;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,mCAAmC,CAAC;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAUlE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,IAAwB;IAC9E,MAAM,KAAK,GAAa,CAAC,kBAAkB,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC1E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,QAAgB;IAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/E,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,OAAO,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;AACnC,CAAC;AAED;;6CAE6C;AAC7C,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,UAAkB,EAClB,QAAgB,EAChB,iBAAqC,EACrC,OAA4B,EAAE;IAE9B,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,CAAC,gDAAgD;IACrG,MAAM,YAAY,GAAG,iBAAiB,KAAK,SAAS,IAAI,gBAAgB,KAAK,iBAAiB,CAAC;IAC/F,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,oBAAoB,CAAC;IAC7D,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC;IACtD,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,gBAAgB,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAqB;IAC1F,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,oBAAoB;QAAE,OAAO;IACtE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,wDAAwD;AAExD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,KAAiB;IACzC,OAAO,qBAAqB,KAAK,CAAC,WAAW,wCAAwC,KAAK,CAAC,IAAI,EAAE,CAAC;AACpG,CAAC;AAaD,KAAK,UAAU,SAAS,CAAC,SAAiB;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,EAAE,GAAG,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,gFAAgF;IACxH,CAAC;AACH,CAAC;AAkBD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAqB,EACrB,MAAuB,EACvB,KAAyB,EACzB,SAAiB,EACjB,OAA8C,EAAE;IAEhD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,SAAS,GAA2B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEjG,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC;gBACb,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;gBACvD,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC;gBACb,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,KAAK,CAAC,EAAE,MAAM,CAAC;gBAC5D,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC;aACjC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC;gBACb,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;gBACxD,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IACrG,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IACtG,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;IAE5G,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,MAAM,KAAK,oBAAoB;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClE,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAClD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,wEAAwE;IACxE,iDAAiD;IACjD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"init-skills.js","sourceRoot":"","sources":["../src/init-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { UsageTracker, type Answer, type JudgmentPort, type JudgmentState, type Question } from "@jevitate/ai-core";
2
+ import type { JevLayer } from "@jevitate/journey";
3
+ import { type CliDeps } from "./cli-shared.js";
4
+ /**
5
+ * #434/#435 — the advisory Jev layer of the review sheets and the pre-approval pipeline: one
6
+ * `JudgmentPort` (the existing judgment gateway, TypeSafe or OpenRouter key, #429) behind a cache
7
+ * keyed by the content hash of what is asked, plus the usage of every call actually made.
8
+ *
9
+ * Model use follows the CLI's `--real` convention: the layer runs only on a command given `--real`
10
+ * (review sheets, approvals, `catalog analyze`; MCP `real: true`). Unlike a run, a missing judgment
11
+ * key is not a refusal here — the deterministic layer stands on its own, so the sheet says
12
+ * "skipped: no judgment key". Without `--real` it says "skipped: pass --real".
13
+ *
14
+ * The cache (`<project>/.jevitate/cache/jev/<sha256>.json`, gitignored) holds ANSWERS only — a kind,
15
+ * a value, a probability — keyed by `sha256(state + questions)`. The state is built from catalog
16
+ * text (job stories, persona descriptions, a Journey's review-sheet lines, which never carry a
17
+ * secret value), and it is never written: nothing secret is cached. A re-review of unchanged
18
+ * content asks nothing new. An unreadable entry is a miss (it is re-asked and rewritten).
19
+ */
20
+ /** Bumped when the questions' meaning changes in a way their text does not show. */
21
+ export declare const JEV_CACHE_VERSION = 1;
22
+ /** Why the Jev layer did not run. */
23
+ export declare const JEV_SKIPPED_PASS_REAL = "pass --real to ask Jev (needs a judgment key)";
24
+ export declare const JEV_SKIPPED_NO_KEY = "no judgment key \u2014 set TYPESAFE_API_KEY or OPENROUTER_API_KEY (jevitate ai setup)";
25
+ export interface JevAdvisor {
26
+ /** Asks `questions` about `state` (one model call), or returns the cached answers for the same content. */
27
+ ask(state: JudgmentState, questions: Record<string, Question>): Promise<{
28
+ readonly answers: Record<string, Answer>;
29
+ readonly cached: boolean;
30
+ }>;
31
+ /** What this advisor did so far: questions sent to the model, answers served from the cache, usage. */
32
+ layer(): JevLayer;
33
+ }
34
+ /** The Jev layer for one command: an advisor, or why there is none. */
35
+ export type JevSetup = {
36
+ readonly advisor: JevAdvisor;
37
+ } | {
38
+ readonly skipped: string;
39
+ };
40
+ /** #434/#435: the judgment port behind a memory + on-disk answer cache, counting what it asks. */
41
+ export declare class CachedJevAdvisor implements JevAdvisor {
42
+ #private;
43
+ private readonly judge;
44
+ /** The answer cache directory; null: memory only (outside a project). */
45
+ private readonly cacheDir;
46
+ private readonly usage;
47
+ constructor(judge: JudgmentPort,
48
+ /** The answer cache directory; null: memory only (outside a project). */
49
+ cacheDir: string | null, usage: UsageTracker);
50
+ ask(state: JudgmentState, questions: Record<string, Question>): Promise<{
51
+ answers: Record<string, Answer>;
52
+ cached: boolean;
53
+ }>;
54
+ layer(): JevLayer;
55
+ }
56
+ /** The answer cache directory of a project data dir (`<.jevitate>/cache/jev`), or null outside a project. */
57
+ export declare function jevCacheDir(catalogDir: string | null): string | null;
58
+ /** The Jev layer's report when it did not run. */
59
+ export declare function skippedLayer(reason: string): JevLayer;
60
+ export declare function jevLayerOf(setup: JevSetup | undefined): JevLayer;
61
+ /**
62
+ * #434/#435: the Jev layer of one command. Without `--real`: skipped ("pass --real"). With it: an
63
+ * injected judge (tests) wins; else the live judgment gateway on the resolved Jev route
64
+ * (`--jev-provider`, else TypeSafe then OpenRouter) after the startup key check — or, when no
65
+ * judgment key is configured, skipped ("no judgment key"): the deterministic layer still runs.
66
+ * An unknown `--jev-provider` is refused (`GatewaySelectionError`), never ignored.
67
+ */
68
+ export declare function buildJevSetup(deps: CliDeps, opts: {
69
+ readonly real?: boolean;
70
+ readonly jevProvider?: string;
71
+ readonly cacheDir: string | null;
72
+ }): Promise<JevSetup>;