@jevitate/cli 0.6.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.
- package/dist/ai-cli.d.ts +3 -1
- package/dist/ai-cli.js +60 -16
- package/dist/ai-cli.js.map +1 -1
- package/dist/approval-provenance.d.ts +120 -0
- package/dist/approval-provenance.js +300 -0
- package/dist/approval-provenance.js.map +1 -0
- package/dist/author-journey-cli.js +11 -18
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +29012 -20685
- package/dist/build-info.generated.js +2 -2
- package/dist/builtin-analyzers.d.ts +7 -0
- package/dist/builtin-analyzers.js +19 -0
- package/dist/builtin-analyzers.js.map +1 -0
- package/dist/campaign-cli.d.ts +6 -0
- package/dist/campaign-cli.js +9 -4
- package/dist/campaign-cli.js.map +1 -1
- package/dist/catalog-analysis.d.ts +70 -0
- package/dist/catalog-analysis.js +507 -0
- package/dist/catalog-analysis.js.map +1 -0
- package/dist/catalog-api.d.ts +73 -0
- package/dist/catalog-api.js +97 -0
- package/dist/catalog-api.js.map +1 -0
- package/dist/catalog-cli.d.ts +12 -0
- package/dist/catalog-cli.js +224 -0
- package/dist/catalog-cli.js.map +1 -0
- package/dist/catalog-review.d.ts +29 -0
- package/dist/catalog-review.js +290 -0
- package/dist/catalog-review.js.map +1 -0
- package/dist/catalog.d.ts +133 -0
- package/dist/catalog.js +352 -0
- package/dist/catalog.js.map +1 -0
- package/dist/check-api.js +24 -2
- package/dist/check-api.js.map +1 -1
- package/dist/check-cli.d.ts +3 -0
- package/dist/check-cli.js +18 -4
- package/dist/check-cli.js.map +1 -1
- package/dist/check-execute.js +25 -9
- package/dist/check-execute.js.map +1 -1
- package/dist/check-plan.js +4 -1
- package/dist/check-plan.js.map +1 -1
- package/dist/check-suite.js +6 -3
- package/dist/check-suite.js.map +1 -1
- package/dist/check-types.d.ts +12 -1
- package/dist/check-types.js.map +1 -1
- package/dist/cli-output.js +86 -4
- package/dist/cli-output.js.map +1 -1
- package/dist/cli-shared.d.ts +22 -2
- package/dist/cli-shared.js +34 -5
- package/dist/cli-shared.js.map +1 -1
- package/dist/demo-aspect-api.d.ts +21 -5
- package/dist/demo-aspect-api.js +30 -1
- package/dist/demo-aspect-api.js.map +1 -1
- package/dist/demo-aspect-cli.js +64 -5
- package/dist/demo-aspect-cli.js.map +1 -1
- package/dist/environments.js +6 -1
- package/dist/environments.js.map +1 -1
- package/dist/exit-codes.js +4 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/explore-adversarial.d.ts +3 -1
- package/dist/explore-adversarial.js +3 -3
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-author.js +5 -2
- package/dist/explore-author.js.map +1 -1
- package/dist/explore-cli.js +162 -13
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-coverage.d.ts +6 -2
- package/dist/explore-coverage.js +5 -4
- package/dist/explore-coverage.js.map +1 -1
- package/dist/explore-feature.d.ts +3 -1
- package/dist/explore-feature.js +2 -2
- package/dist/explore-feature.js.map +1 -1
- package/dist/explore-goal.d.ts +37 -6
- package/dist/explore-goal.js +70 -52
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-shared.d.ts +12 -7
- package/dist/explore-shared.js +9 -1
- package/dist/explore-shared.js.map +1 -1
- package/dist/goal-run-flags.d.ts +2 -0
- package/dist/goal-run-flags.js +8 -1
- package/dist/goal-run-flags.js.map +1 -1
- package/dist/http-5xx-outcome.d.ts +8 -3
- package/dist/http-5xx-outcome.js +5 -15
- package/dist/http-5xx-outcome.js.map +1 -1
- package/dist/init-cli.d.ts +7 -0
- package/dist/init-cli.js +79 -9
- package/dist/init-cli.js.map +1 -1
- package/dist/init-codeowners.d.ts +39 -0
- package/dist/init-codeowners.js +91 -0
- package/dist/init-codeowners.js.map +1 -0
- package/dist/init-keys.d.ts +3 -1
- package/dist/init-keys.js +20 -8
- package/dist/init-keys.js.map +1 -1
- package/dist/init-skills.d.ts +85 -7
- package/dist/init-skills.js +303 -36
- package/dist/init-skills.js.map +1 -1
- package/dist/jev-advisor.d.ts +72 -0
- package/dist/jev-advisor.js +172 -0
- package/dist/jev-advisor.js.map +1 -0
- package/dist/journey-api.d.ts +104 -5
- package/dist/journey-api.js +165 -23
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +1 -1
- package/dist/journey-cli.js +320 -13
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-api.d.ts +7 -1
- package/dist/journey-demo-api.js +8 -3
- package/dist/journey-demo-api.js.map +1 -1
- package/dist/journey-demo-cli.js +3 -0
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-lint-sarif.d.ts +19 -0
- package/dist/journey-lint-sarif.js +48 -0
- package/dist/journey-lint-sarif.js.map +1 -0
- package/dist/journey-network-checks.d.ts +45 -9
- package/dist/journey-network-checks.js +117 -30
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-prefix.d.ts +24 -15
- package/dist/journey-prefix.js +53 -7
- package/dist/journey-prefix.js.map +1 -1
- package/dist/journey-review-api.d.ts +19 -0
- package/dist/journey-review-api.js +46 -0
- package/dist/journey-review-api.js.map +1 -0
- package/dist/journey-review-store.d.ts +16 -0
- package/dist/journey-review-store.js +95 -0
- package/dist/journey-review-store.js.map +1 -0
- package/dist/journey-review.d.ts +47 -0
- package/dist/journey-review.js +499 -0
- package/dist/journey-review.js.map +1 -0
- package/dist/journey-verify.d.ts +61 -0
- package/dist/journey-verify.js +144 -0
- package/dist/journey-verify.js.map +1 -0
- package/dist/key-report.d.ts +20 -5
- package/dist/key-report.js +32 -9
- package/dist/key-report.js.map +1 -1
- package/dist/kill-signal.js +10 -2
- package/dist/kill-signal.js.map +1 -1
- package/dist/load-api.js +9 -3
- package/dist/load-api.js.map +1 -1
- package/dist/load-cli.js +4 -2
- package/dist/load-cli.js.map +1 -1
- package/dist/log-classes.d.ts +73 -0
- package/dist/log-classes.js +167 -0
- package/dist/log-classes.js.map +1 -0
- package/dist/log-correlation.d.ts +29 -10
- package/dist/log-correlation.js +44 -21
- package/dist/log-correlation.js.map +1 -1
- package/dist/login-cli.d.ts +15 -0
- package/dist/login-cli.js +116 -0
- package/dist/login-cli.js.map +1 -0
- package/dist/logs-cli.js +3 -1
- package/dist/logs-cli.js.map +1 -1
- package/dist/mcp-api.d.ts +1 -0
- package/dist/mcp-api.js +61 -12
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-runner.d.ts +2 -0
- package/dist/mcp-cli-runner.js +3 -1
- package/dist/mcp-cli-runner.js.map +1 -1
- package/dist/mcp-cli-tools.d.ts +6 -0
- package/dist/mcp-cli-tools.js +182 -23
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mission-cli.js +8 -4
- package/dist/mission-cli.js.map +1 -1
- package/dist/mission-journal.d.ts +4 -1
- package/dist/mission-journal.js +9 -3
- package/dist/mission-journal.js.map +1 -1
- package/dist/mission-queue-cli.js +21 -2
- package/dist/mission-queue-cli.js.map +1 -1
- package/dist/mission-queue-runner.d.ts +6 -0
- package/dist/mission-queue-runner.js +33 -3
- package/dist/mission-queue-runner.js.map +1 -1
- package/dist/multi-run-cli.d.ts +7 -1
- package/dist/multi-run-cli.js +10 -3
- package/dist/multi-run-cli.js.map +1 -1
- package/dist/multi-run.d.ts +38 -3
- package/dist/multi-run.js +115 -23
- package/dist/multi-run.js.map +1 -1
- package/dist/persona-login.d.ts +199 -0
- package/dist/persona-login.js +574 -0
- package/dist/persona-login.js.map +1 -0
- package/dist/pre-approval.d.ts +98 -0
- package/dist/pre-approval.js +175 -0
- package/dist/pre-approval.js.map +1 -0
- package/dist/program.js +10 -0
- package/dist/program.js.map +1 -1
- package/dist/project-dir.d.ts +2 -1
- package/dist/project-dir.js +3 -1
- package/dist/project-dir.js.map +1 -1
- package/dist/promotions.d.ts +15 -0
- package/dist/promotions.js +52 -0
- package/dist/promotions.js.map +1 -0
- package/dist/readiness.d.ts +29 -0
- package/dist/readiness.js +291 -0
- package/dist/readiness.js.map +1 -0
- package/dist/regression-cli.js +4 -2
- package/dist/regression-cli.js.map +1 -1
- package/dist/report-api.d.ts +24 -2
- package/dist/report-api.js +33 -5
- package/dist/report-api.js.map +1 -1
- package/dist/report-cli.js +8 -1
- package/dist/report-cli.js.map +1 -1
- package/dist/result-schema.d.ts +12 -0
- package/dist/result-schema.js +8 -0
- package/dist/result-schema.js.map +1 -1
- package/dist/run-index.d.ts +4 -2
- package/dist/run-index.js +3 -1
- package/dist/run-index.js.map +1 -1
- package/dist/run-key-preflight.d.ts +2 -1
- package/dist/run-key-preflight.js +3 -2
- package/dist/run-key-preflight.js.map +1 -1
- package/dist/run-metadata.d.ts +26 -0
- package/dist/run-metadata.js +41 -0
- package/dist/run-metadata.js.map +1 -0
- package/dist/run-tags-cli.d.ts +12 -0
- package/dist/run-tags-cli.js +35 -0
- package/dist/run-tags-cli.js.map +1 -0
- package/dist/self-heal-adapter.js +3 -1
- package/dist/self-heal-adapter.js.map +1 -1
- package/dist/site-cli.d.ts +1 -1
- package/dist/site-cli.js +24 -1
- package/dist/site-cli.js.map +1 -1
- package/dist/source-cli.js +4 -2
- package/dist/source-cli.js.map +1 -1
- package/dist/source-run-api.js +17 -7
- package/dist/source-run-api.js.map +1 -1
- package/dist/suite-explore-options.d.ts +14 -0
- package/dist/suite-explore-options.js +7 -0
- package/dist/suite-explore-options.js.map +1 -1
- package/dist/sweep-api.d.ts +266 -0
- package/dist/sweep-api.js +828 -0
- package/dist/sweep-api.js.map +1 -0
- package/dist/sweep-cli.d.ts +9 -0
- package/dist/sweep-cli.js +115 -0
- package/dist/sweep-cli.js.map +1 -0
- package/dist/target-config.d.ts +5 -2
- package/dist/target-config.js +15 -0
- package/dist/target-config.js.map +1 -1
- package/dist/usability-capture.js +6 -0
- package/dist/usability-capture.js.map +1 -1
- package/dist/ux-cli.js +3 -1
- package/dist/ux-cli.js.map +1 -1
- package/dist/ux-usability.d.ts +9 -3
- package/dist/ux-usability.js +6 -4
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-cli.js +4 -2
- package/dist/verify-fix-cli.js.map +1 -1
- package/package.json +13 -13
- package/skills/jevitate-demo/SKILL.md +5 -2
- package/skills/jevitate-explore/SKILL.md +6 -2
- package/skills/jevitate-getting-started/SKILL.md +12 -0
- package/skills/jevitate-run-journey/SKILL.md +17 -4
- package/skills/jevitate-test-campaign/SKILL.md +26 -5
package/dist/init-skills.js
CHANGED
|
@@ -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
|
|
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`.
|
|
95
|
-
*
|
|
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
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
113
|
-
*
|
|
114
|
-
*
|
|
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
|
|
117
|
-
if (
|
|
211
|
+
const found = locateBlock(content);
|
|
212
|
+
if (found.kind === "none")
|
|
118
213
|
return undefined;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
|
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
|
|
134
|
-
if (
|
|
135
|
-
return "
|
|
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
|
|
142
|
-
return
|
|
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, {
|
|
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
|
|
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({
|
|
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
|
package/dist/init-skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-skills.js","sourceRoot":"","sources":["../src/init-skills.ts"],"names":[],"mappings":"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"}
|
|
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,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzE,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;AAWD,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;QACjD,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC;KACvC,CAAC;AACJ,CAAC;AAYD,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;AAClE,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,yCAAyC,CAAC;AAC/E,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEvE,0FAA0F;AAC1F,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,MAAM,CAAS;IACxB,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAeD,SAAS,cAAc,CAAC,EAAU,EAAE,OAAe;IACjD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC;IACjE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAUD,MAAM,cAAc,GAAiB,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;AAE1H,SAAS,WAAW,CAClB,OAAe,EACf,UAAwB,cAAc;IAEtC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IACxB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EACJ,6BAA6B,CAAC,kFAAkF;SACnH,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EACJ,2BAA2B,CAAC,gFAAgF;SAC/G,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EACJ,aAAa,CAAC,oGAAoG;SACrH,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EACJ,WAAW,CAAC,oGAAoG;SACnH,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EACJ,WAAW,CAAC,gGAAgG;SAC/G,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE;YACJ,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YACtC,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;SACjC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAYD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,IAAwB;IAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe;QAChC,CAAC,CAAC,0CAA0C,IAAI,CAAC,eAAe,MAAM;QACtE,CAAC,CAAC,kBAAkB,CAAC;IACvB,MAAM,KAAK,GAAa,CAAC,KAAK,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC7D,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;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,QAAgB;IAC3D,OAAO,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAqB;IACxF,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,MAAM,IAAI,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjG,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;;;+EAG+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,MAAM,IAAI,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzE,CAAC;AAOD,KAAK,UAAU,wBAAwB,CACrC,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,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC5F,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,gDAAgD;IACxG,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,iBAAiB,KAAK,SAAS,IAAI,gBAAgB,KAAK,iBAAiB,CAAC;IAC/F,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACzE,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAClE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9E,OAAO,EAAE,MAAM,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,QAAgB,EAChB,iBAAqC,EACrC,OAA4B,EAAE;IAE9B,OAAO,CAAC,MAAM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAChG,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAqB;IAC1F,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,oBAAoB,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO;IACvG,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;AAeD,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,OAA4F,EAAE;IAE9F,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;QACtC,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CAAC;IACH,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;IAC5G,4EAA4E;IAC5E,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,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,IAAI,GAAG,MAAM,wBAAwB,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;QAC5G,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,IAAI,IAAI,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;gBAC/E,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;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;IACL,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;AA4BD;qEACqE;AACrE,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,GAAG,KAAK,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAqB,EACrB,MAAuB,EACvB,KAAyB,EACzB,SAAiB,EACjB,OAAkE,EAAE;IAEpE,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;IAErC,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,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,KAAK,CAAC,eAAe;aAC/B,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,KAAK,CAAC,cAAc;aAC9B,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,KAAK,CAAC,gBAAgB;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAC/F,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrG,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;QACD,IAAI,MAAiC,CAAC;QACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAC5E,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;gBACrD,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,iCAAiC;gBAClF,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;oBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACnF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,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,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;QACD,IAAI,MAAiC,CAAC;QACtC,IAAI,MAA0B,CAAC;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,GAAG,QAAQ,CAAC;YACpB,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACtC,MAAM,GAAG,kBAAkB,CAAC;gBAC5B,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,CAAC;gBACtE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;gBACrD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;oBAC3D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACjD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;YACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,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"}
|
|
@@ -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>;
|