@dzhechkov/harness-core 0.3.150 → 0.4.2
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/.dz-manifest.json +410 -62
- package/README.md +81 -3
- package/dist/agentdb-index.d.ts.map +1 -1
- package/dist/agentdb-index.js +10 -2
- package/dist/agentdb-index.js.map +1 -1
- package/dist/backlog-embed.d.ts +94 -0
- package/dist/backlog-embed.d.ts.map +1 -0
- package/dist/backlog-embed.js +138 -0
- package/dist/backlog-embed.js.map +1 -0
- package/dist/backlog.d.ts +180 -7
- package/dist/backlog.d.ts.map +1 -1
- package/dist/backlog.js +429 -26
- package/dist/backlog.js.map +1 -1
- package/dist/challenge-panel.d.ts +3 -0
- package/dist/challenge-panel.d.ts.map +1 -1
- package/dist/challenge-panel.js +3 -0
- package/dist/challenge-panel.js.map +1 -1
- package/dist/export-holdout.d.ts +149 -0
- package/dist/export-holdout.d.ts.map +1 -0
- package/dist/export-holdout.js +198 -0
- package/dist/export-holdout.js.map +1 -0
- package/dist/feature-adr-checkpoints.d.ts +127 -0
- package/dist/feature-adr-checkpoints.d.ts.map +1 -1
- package/dist/feature-adr-checkpoints.js +199 -1
- package/dist/feature-adr-checkpoints.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +3 -0
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +3 -0
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/guard.d.ts +42 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +73 -1
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +16 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/index.js.map +1 -1
- package/dist/loop-blobs.generated.d.ts +33 -0
- package/dist/loop-blobs.generated.d.ts.map +1 -0
- package/dist/loop-blobs.generated.js +101 -0
- package/dist/loop-blobs.generated.js.map +1 -0
- package/dist/loop-lint.d.ts +63 -0
- package/dist/loop-lint.d.ts.map +1 -0
- package/dist/loop-lint.js +606 -0
- package/dist/loop-lint.js.map +1 -0
- package/dist/loop-plan.d.ts +416 -0
- package/dist/loop-plan.d.ts.map +1 -0
- package/dist/loop-plan.js +1151 -0
- package/dist/loop-plan.js.map +1 -0
- package/dist/loop-render.d.ts +104 -0
- package/dist/loop-render.d.ts.map +1 -0
- package/dist/loop-render.js +1068 -0
- package/dist/loop-render.js.map +1 -0
- package/dist/loop-trace.d.ts +229 -0
- package/dist/loop-trace.d.ts.map +1 -0
- package/dist/loop-trace.js +614 -0
- package/dist/loop-trace.js.map +1 -0
- package/dist/mutation-gate.d.ts +247 -0
- package/dist/mutation-gate.d.ts.map +1 -0
- package/dist/mutation-gate.js +535 -0
- package/dist/mutation-gate.js.map +1 -0
- package/dist/no-stubs.d.ts +53 -0
- package/dist/no-stubs.d.ts.map +1 -0
- package/dist/no-stubs.js +190 -0
- package/dist/no-stubs.js.map +1 -0
- package/dist/package-skill-layouts.d.ts +67 -0
- package/dist/package-skill-layouts.d.ts.map +1 -0
- package/dist/package-skill-layouts.js +81 -0
- package/dist/package-skill-layouts.js.map +1 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +156 -75
- package/dist/patterns.js.map +1 -1
- package/dist/recall-domain-boost.d.ts.map +1 -1
- package/dist/recall-domain-boost.js +6 -0
- package/dist/recall-domain-boost.js.map +1 -1
- package/dist/statusline.d.ts +10 -2
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +122 -36
- package/dist/statusline.js.map +1 -1
- package/dist/store-lock.d.ts +108 -0
- package/dist/store-lock.d.ts.map +1 -0
- package/dist/store-lock.js +231 -0
- package/dist/store-lock.js.map +1 -0
- package/dist/workflows.d.ts +16 -22
- package/dist/workflows.d.ts.map +1 -1
- package/dist/workflows.js +17 -98
- package/dist/workflows.js.map +1 -1
- package/package.json +6 -4
- package/sbom.json +1073 -203
- package/src/agentdb-index.ts +10 -1
- package/src/backlog-embed.ts +156 -0
- package/src/backlog.ts +536 -28
- package/src/challenge-panel.ts +4 -0
- package/src/export-holdout.ts +235 -0
- package/src/feature-adr-checkpoints.ts +291 -1
- package/src/feature-adr-routing.ts +4 -0
- package/src/guard.ts +106 -1
- package/src/index.ts +62 -2
- package/src/loop-blobs.generated.ts +114 -0
- package/src/loop-lint.ts +643 -0
- package/src/loop-plan.ts +1419 -0
- package/src/loop-render.ts +1126 -0
- package/src/loop-trace.ts +727 -0
- package/src/mutation-gate.ts +701 -0
- package/src/no-stubs.ts +204 -0
- package/src/package-skill-layouts.ts +107 -0
- package/src/patterns.ts +135 -60
- package/src/recall-domain-boost.ts +6 -0
- package/src/statusline.ts +117 -30
- package/src/store-lock.ts +258 -0
- package/src/workflows.ts +18 -117
package/dist/no-stubs.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// `no-stubs` — a deterministic layer-1 scan for unfinished-stub markers left in CHANGED files
|
|
2
|
+
// (backlog 0b403a0106103901, Karpathy-Michaels rule XI). `dz claim-check` catches false CLAIMS in
|
|
3
|
+
// prose; an unfinished stub in code was, until this rule, caught only by a QE agent's judgment
|
|
4
|
+
// (layer 4 on the cost-of-detection ladder). A five-line grep is layer 1 — cheap, deterministic,
|
|
5
|
+
// silent-proof — so that is where this check lives.
|
|
6
|
+
//
|
|
7
|
+
// MEASURED before design (2026-08-10, this repo): a case-INSENSITIVE whole-tree scan over
|
|
8
|
+
// packages/@dzhechkov/*/{src,lib,skills} yields 32 hits and over {test,fixtures} another 25 — the
|
|
9
|
+
// clear majority ancient and legitimate (prose "placeholder", a `todo` keyword list, `xxx` in an
|
|
10
|
+
// example URL). Two design decisions fall straight out of that measurement:
|
|
11
|
+
// 1. SCOPE = the CHANGE-SET, not the tree. The gate catches what YOU left in THIS change; it does
|
|
12
|
+
// not relitigate 25 ancient fixture markers. The change-set is the same working-tree
|
|
13
|
+
// `git status --porcelain` diff the readme-first rule and the template-rule `change` fact
|
|
14
|
+
// already use — one notion of "changed", not a third.
|
|
15
|
+
// 2. CASE-SENSITIVE bare markers. Dropping case halves the hits (32 → 16) and EVERY line the
|
|
16
|
+
// relaxation would add was inspected and found to be prose, not a stub. The uppercase
|
|
17
|
+
// convention is the stub convention; lowercase is English.
|
|
18
|
+
//
|
|
19
|
+
// SELF-EXEMPTION IS STRUCTURAL, NOT A PATH SKIP: every marker below is assembled from fragments at
|
|
20
|
+
// module load, so this file — and any file that builds its patterns the same way — contains no
|
|
21
|
+
// literal marker for the scan to find. A test proves the scan of this very source yields nothing.
|
|
22
|
+
//
|
|
23
|
+
// PURE: no filesystem, no child_process. The caller (CLI / guard facts gatherer) hands in paths,
|
|
24
|
+
// contents, and config waivers; everything here is deterministic string work.
|
|
25
|
+
//
|
|
26
|
+
// ── KNOWN LIMITS (conscious trade-offs — the rule SAYS them rather than implying totality) ──────
|
|
27
|
+
// A guarantee the code asserts but does not hold is worse than an honest limit. Each item below is
|
|
28
|
+
// a DECISION, not an oversight; none is silently patched around.
|
|
29
|
+
//
|
|
30
|
+
// • WHOLE-LINE inline waiver (FN-2). The waiver token exempts the ENTIRE line it appears on
|
|
31
|
+
// (indexOf-based, no position check) — any line can be silenced by appending the token. The
|
|
32
|
+
// defence is AUDITABILITY, not prevention: the token is a fixed greppable string, so every
|
|
33
|
+
// silencing is one grep away. That is a layer-4 defence (reviewer judgment over grep output) by
|
|
34
|
+
// the cost-of-detection ladder, and it is named as such here on purpose.
|
|
35
|
+
// • REASON QUALITY is not judged (FN-6). A junk reason ('.', 'x') satisfies the reason
|
|
36
|
+
// requirement. The design stops FORGETTING a reason, not FAKING one — a deterministic layer
|
|
37
|
+
// cannot judge whether a reason is honest; that is review-plane work.
|
|
38
|
+
// • MARKDOWN FENCE MODEL is a single boolean toggle (FN-4). It cannot model CommonMark: a
|
|
39
|
+
// mismatched pair of tilde/backtick fence styles, an INDENTED fence, an unclosed fence running
|
|
40
|
+
// to EOF (everything after it reads as fenced ⇒ skipped), and a marker sitting on the fence
|
|
41
|
+
// info-string line itself are all mis-scoped. Good enough for the docs this repo writes; not a
|
|
42
|
+
// CommonMark parser and not claimed to be one.
|
|
43
|
+
// • GIT-QUOTED PATHS are not decoded (FN-3). A path `git status --porcelain` quotes (spaces,
|
|
44
|
+
// non-ASCII under core.quotePath=true — the default) arrives here with quote characters baked
|
|
45
|
+
// in, matches no real file, and is therefore NOT scanned. Fail-open by shape, and invisible per
|
|
46
|
+
// file; the aggregate skipped-files note is the only trace when contents were also not gathered.
|
|
47
|
+
// • EXTENSION ALLOWLIST is a TS-monorepo set (FN-8). Extensionless bin scripts, Dockerfile,
|
|
48
|
+
// Makefile, .txt/.html/.css/.vue/.svelte/.c/.cpp/.php/.toml/.sql/.ps1/.kt/.swift are NOT
|
|
49
|
+
// scanned. MED risk if this rule template ships into a polyglot repo — extend
|
|
50
|
+
// STUB_SCAN_EXTENSIONS there; the list is exported and testable for exactly that reason.
|
|
51
|
+
// • STAGED-BUT-NOT-WORKTREE content is not read (FN-5). The gatherer reads the WORKING TREE; a
|
|
52
|
+
// change staged in the index but reverted in the worktree scans as the worktree text. Design-
|
|
53
|
+
// consistent for the publish op, which packs the worktree — the index never ships.
|
|
54
|
+
// • CONFIG WAIVERS match the EXACT repo-relative path string. No normalization, no globs: a
|
|
55
|
+
// waiver for a path spelled differently than git spells it simply does not match, and the
|
|
56
|
+
// finding FIRES. Errs toward firing — the safe side for an exemption mechanism.
|
|
57
|
+
/**
|
|
58
|
+
* The bare stub markers, ASSEMBLED so this module never fires on itself. Matched case-SENSITIVELY
|
|
59
|
+
* (measured: case-insensitivity doubles hits and adds only prose) with hard word boundaries on both
|
|
60
|
+
* sides, so a marker embedded in a word (a codename, a longer identifier) does not fire.
|
|
61
|
+
*/
|
|
62
|
+
export const STUB_MARKERS = [
|
|
63
|
+
'TO' + 'DO',
|
|
64
|
+
'FIX' + 'ME',
|
|
65
|
+
'HA' + 'CK',
|
|
66
|
+
'XX' + 'X',
|
|
67
|
+
'PLACE' + 'HOLDER',
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Stub PHRASES: matched case-insensitively (a phrase is English, not a convention), with letter
|
|
71
|
+
* boundaries. Assembled for the same self-exemption reason.
|
|
72
|
+
*/
|
|
73
|
+
export const STUB_PHRASES = ['imple' + 'ment later'];
|
|
74
|
+
// One regex per class, built once. `(?<![A-Za-z0-9_])` / `(?![A-Za-z0-9_])`: a marker glued to a
|
|
75
|
+
// word character on either side is part of an identifier/hash/codename, not a stub. XXXX therefore
|
|
76
|
+
// does NOT match the three-letter marker (its neighbours are word chars), and lowercase variants of
|
|
77
|
+
// the bare markers never match at all.
|
|
78
|
+
const BARE_RE = new RegExp('(?<![A-Za-z0-9_])(' + STUB_MARKERS.join('|') + ')(?![A-Za-z0-9_])');
|
|
79
|
+
const PHRASE_RE = new RegExp('(?<![A-Za-z])(' + STUB_PHRASES.join('|').replace(/ /g, '\\s+') + ')(?![A-Za-z])', 'i');
|
|
80
|
+
/**
|
|
81
|
+
* The inline waiver token: a line carrying `no-stubs: <reason>` is exempt — WITH a non-empty reason.
|
|
82
|
+
* A reasonless waiver is REFUSED LOUDLY (its own finding): an exemption you cannot explain is a
|
|
83
|
+
* silent allowlist, the recurring defect class this repo keeps re-learning. The reason-required
|
|
84
|
+
* shape follows the `dz feature-adr-setup --guards` waiver precedent (`waivers: [{path, reason}]`,
|
|
85
|
+
* "a waiver without a reason is itself a violation").
|
|
86
|
+
*/
|
|
87
|
+
const WAIVER_TOKEN = 'no-stubs:';
|
|
88
|
+
/**
|
|
89
|
+
* File extensions the scan reads. EXPLICIT and testable — never a silent glob. Fixture/test paths
|
|
90
|
+
* are NOT auto-exempt: a marker you just added to a fixture is still a decision, and the waiver is
|
|
91
|
+
* where that decision gets its reason.
|
|
92
|
+
*/
|
|
93
|
+
export const STUB_SCAN_EXTENSIONS = [
|
|
94
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
|
|
95
|
+
'.py', '.go', '.rs', '.java', '.rb', '.sh', '.bash',
|
|
96
|
+
'.md', '.mdx', '.markdown',
|
|
97
|
+
'.yml', '.yaml', '.json',
|
|
98
|
+
];
|
|
99
|
+
/** Is this path one the stub scan reads? (extension allowlist, case-insensitive on the extension) */
|
|
100
|
+
export function scannableStubPath(path) {
|
|
101
|
+
if (typeof path !== 'string' || path.length === 0)
|
|
102
|
+
return false;
|
|
103
|
+
const lower = path.toLowerCase();
|
|
104
|
+
return STUB_SCAN_EXTENSIONS.some((ext) => lower.endsWith(ext));
|
|
105
|
+
}
|
|
106
|
+
function isMarkdown(path) {
|
|
107
|
+
const lower = path.toLowerCase();
|
|
108
|
+
return lower.endsWith('.md') || lower.endsWith('.mdx') || lower.endsWith('.markdown');
|
|
109
|
+
}
|
|
110
|
+
/** Mask inline `code spans` with spaces (length-preserving, so line/column geometry survives). */
|
|
111
|
+
function maskInlineCode(line) {
|
|
112
|
+
return line.replace(/`[^`]*`/g, (m) => ' '.repeat(m.length));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Scan ONE file's text. Case-sensitive bare markers + case-insensitive phrases, word-bounded.
|
|
116
|
+
* Markdown gets PROSE scoping: fenced code blocks and inline backtick spans are QUOTES of a marker,
|
|
117
|
+
* not stubs (the claim-check backtick-literal convention) — a doc explaining this very gate scans
|
|
118
|
+
* clean, while a naked stub line in doc prose still fires. Code files are scanned in full: a marker
|
|
119
|
+
* a code file must legitimately carry (another gate's source, a fixture) takes an inline
|
|
120
|
+
* `no-stubs: <reason>` waiver — visible, reasoned, greppable.
|
|
121
|
+
*/
|
|
122
|
+
export function scanStubs(path, text) {
|
|
123
|
+
if (typeof text !== 'string' || text.length === 0)
|
|
124
|
+
return [];
|
|
125
|
+
const md = isMarkdown(path);
|
|
126
|
+
const out = [];
|
|
127
|
+
let inFence = false;
|
|
128
|
+
const lines = text.split('\n');
|
|
129
|
+
for (let i = 0; i < lines.length; i++) {
|
|
130
|
+
const raw = lines[i];
|
|
131
|
+
if (md && /^\s*(```|~~~)/.test(raw)) {
|
|
132
|
+
inFence = !inFence;
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (md && inFence)
|
|
136
|
+
continue;
|
|
137
|
+
const line = md ? maskInlineCode(raw) : raw;
|
|
138
|
+
// Inline waiver first: with a reason ⇒ the line is exempt; without one ⇒ refuse loudly AND
|
|
139
|
+
// leave the marker finding in place (a refused waiver must not half-work).
|
|
140
|
+
const w = line.indexOf(WAIVER_TOKEN);
|
|
141
|
+
if (w >= 0) {
|
|
142
|
+
const reason = line.slice(w + WAIVER_TOKEN.length).replace(/(\*\/|-->|#>)\s*$/, '').trim();
|
|
143
|
+
if (reason.length > 0)
|
|
144
|
+
continue;
|
|
145
|
+
out.push({ path, line: i + 1, kind: 'reasonless-waiver', detail: `inline waiver ("${WAIVER_TOKEN}") carries NO reason — refused; a waiver you cannot explain is a silent allowlist` });
|
|
146
|
+
}
|
|
147
|
+
const bare = BARE_RE.exec(line);
|
|
148
|
+
if (bare && bare[1] !== undefined) {
|
|
149
|
+
out.push({ path, line: i + 1, kind: 'marker', detail: bare[1] });
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const phrase = PHRASE_RE.exec(line);
|
|
153
|
+
if (phrase && phrase[1] !== undefined)
|
|
154
|
+
out.push({ path, line: i + 1, kind: 'marker', detail: phrase[1] });
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The aggregate check the guard rule calls: scan the CHANGED files whose contents were gathered,
|
|
160
|
+
* then apply config waivers. Missing contents for a changed file ⇒ that file reports nothing
|
|
161
|
+
* (fail-open on missing evidence — the standing guard contract; a deleted file has no contents).
|
|
162
|
+
*
|
|
163
|
+
* Config-waiver semantics: an entry with a non-empty `path` AND a non-empty `reason` exempts that
|
|
164
|
+
* exact repo-relative path. An entry with a path but NO reason is REFUSED as its own finding and
|
|
165
|
+
* exempts nothing. An entry with no path at all is inert garbage and is ignored (there is nothing
|
|
166
|
+
* it could exempt, and inventing a finding for it would punish a stray comma).
|
|
167
|
+
*/
|
|
168
|
+
export function checkNoStubs(files, contents, waivers) {
|
|
169
|
+
const out = [];
|
|
170
|
+
const waived = new Set();
|
|
171
|
+
for (const w of Array.isArray(waivers) ? waivers : []) {
|
|
172
|
+
if (!w || typeof w !== 'object' || typeof w.path !== 'string' || w.path.trim() === '')
|
|
173
|
+
continue;
|
|
174
|
+
const reason = typeof w.reason === 'string' ? w.reason.trim() : '';
|
|
175
|
+
if (reason.length > 0)
|
|
176
|
+
waived.add(w.path);
|
|
177
|
+
else
|
|
178
|
+
out.push({ path: w.path, line: 0, kind: 'reasonless-waiver', detail: 'config waiver (stubWaivers) carries NO reason — refused; add a reason or remove the entry' });
|
|
179
|
+
}
|
|
180
|
+
for (const f of Array.isArray(files) ? files : []) {
|
|
181
|
+
if (!scannableStubPath(f) || waived.has(f))
|
|
182
|
+
continue;
|
|
183
|
+
const text = contents?.[f];
|
|
184
|
+
if (typeof text !== 'string')
|
|
185
|
+
continue; // no evidence gathered — fail-open, never guessed
|
|
186
|
+
out.push(...scanStubs(f, text));
|
|
187
|
+
}
|
|
188
|
+
return out;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=no-stubs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-stubs.js","sourceRoot":"","sources":["../src/no-stubs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package skill-layout resolution — where an installed npm package keeps its skills.
|
|
3
|
+
*
|
|
4
|
+
* `dz install <pkg>` (and, later, `dz init`/`dz registry` — see the backlog note below)
|
|
5
|
+
* must find `SKILL.md` skill dirs inside an npm package. Packages in the wild ship three
|
|
6
|
+
* on-disk arrangements; before this module existed, `cmdInstall` hard-coded exactly one
|
|
7
|
+
* (`flat`), so every npx-init pack (`templates/.claude/skills/…`) and bare-`skills/`
|
|
8
|
+
* pack resolved to "no SKILL.md files found" despite carrying valid skills.
|
|
9
|
+
*
|
|
10
|
+
* DESIGN RULE — ordered allowlist, NEVER a recursive find. A recursive "find any
|
|
11
|
+
* SKILL.md" walk would resolve decoys that must stay invisible (both MEASURED in the
|
|
12
|
+
* feature's layout census, `features/dz-install-npx-init/05_architecture.md` §3):
|
|
13
|
+
*
|
|
14
|
+
* - `adapter-claude/test/fixtures/<id>/SKILL.md` — a test fixture, not a shipped skill;
|
|
15
|
+
* - `health-advisor/base/skills/base/<id>/SKILL.md` — a vendored mirror of another
|
|
16
|
+
* pack's skills (skills-analyst-manual); resolving it would double-install them.
|
|
17
|
+
*
|
|
18
|
+
* The allowlist is three fixed relative paths with no walk, so those decoys are
|
|
19
|
+
* structurally unreachable (they are not on the probe list) rather than filtered out.
|
|
20
|
+
* Any future recursive extension MUST re-introduce exclusion logic for both cases.
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
/** A known on-disk arrangement of skills inside an npm package. */
|
|
25
|
+
export type PackageSkillLayout = 'flat' | 'npx-template' | 'skills-dir';
|
|
26
|
+
/** One resolved skills root inside a package. */
|
|
27
|
+
export interface PackageSkillRoot {
|
|
28
|
+
readonly layout: PackageSkillLayout;
|
|
29
|
+
/** Absolute dir to hand to `runInit({ skillsDir })` — its children are skill dirs. */
|
|
30
|
+
readonly dir: string;
|
|
31
|
+
/** Skill ids discovered under `dir` (sorted, via {@link discoverSkillIds}). */
|
|
32
|
+
readonly ids: readonly string[];
|
|
33
|
+
/**
|
|
34
|
+
* True iff the matched root's parent carries sibling non-skill component dirs the
|
|
35
|
+
* resolver does NOT install (e.g. `templates/.claude/commands` next to
|
|
36
|
+
* `templates/.claude/skills` in an npx-init pack). `dz install` uses this to disclose,
|
|
37
|
+
* honestly, that `npx -y <pkg> init` installs a larger kit. Always `false` for the
|
|
38
|
+
* `flat` layout (the package root's other dirs — `bin/`, `src/` — are not components).
|
|
39
|
+
*/
|
|
40
|
+
readonly hasCompanionAssets: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ordered layout probe list. ORDER IS THE CONTRACT — first non-empty wins.
|
|
44
|
+
*
|
|
45
|
+
* `flat` is probed first so a classic pack can never be re-interpreted; `npx-template`
|
|
46
|
+
* before `skills-dir` matches the measured census (13 vs 2 packages). Extending support
|
|
47
|
+
* for a new layout is a data edit here, not new control flow.
|
|
48
|
+
*/
|
|
49
|
+
export declare const PACKAGE_SKILL_LAYOUTS: readonly {
|
|
50
|
+
readonly layout: PackageSkillLayout;
|
|
51
|
+
readonly rel: string;
|
|
52
|
+
}[];
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the skills root of an installed npm package.
|
|
55
|
+
*
|
|
56
|
+
* Probes {@link PACKAGE_SKILL_LAYOUTS} in order; the FIRST layout with at least one
|
|
57
|
+
* `<root>/<id>/SKILL.md` wins, and exactly one root is returned (`[root]`). Returns `[]`
|
|
58
|
+
* when the package carries no skills in ANY known layout — the caller MUST treat `[]`
|
|
59
|
+
* as an error (see `cmdInstall`'s exit code). Single-root is deliberate (feature
|
|
60
|
+
* dz-install-npx-init, plan AM-4): no package today has skills in two allowlisted
|
|
61
|
+
* layouts simultaneously, so multi-root install semantics would be untested dead code.
|
|
62
|
+
* The array return type keeps the door open without committing to a merge policy.
|
|
63
|
+
*
|
|
64
|
+
* Pure, filesystem-read-only, synchronous, never throws on missing/unreadable dirs.
|
|
65
|
+
*/
|
|
66
|
+
export declare function resolvePackageSkillRoots(pkgDir: string): readonly PackageSkillRoot[];
|
|
67
|
+
//# sourceMappingURL=package-skill-layouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-skill-layouts.d.ts","sourceRoot":"","sources":["../src/package-skill-layouts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,cAAc,GACd,YAAY,CAAC;AAEjB,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAIzG,CAAC;AAeF;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE,CAepF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package skill-layout resolution — where an installed npm package keeps its skills.
|
|
3
|
+
*
|
|
4
|
+
* `dz install <pkg>` (and, later, `dz init`/`dz registry` — see the backlog note below)
|
|
5
|
+
* must find `SKILL.md` skill dirs inside an npm package. Packages in the wild ship three
|
|
6
|
+
* on-disk arrangements; before this module existed, `cmdInstall` hard-coded exactly one
|
|
7
|
+
* (`flat`), so every npx-init pack (`templates/.claude/skills/…`) and bare-`skills/`
|
|
8
|
+
* pack resolved to "no SKILL.md files found" despite carrying valid skills.
|
|
9
|
+
*
|
|
10
|
+
* DESIGN RULE — ordered allowlist, NEVER a recursive find. A recursive "find any
|
|
11
|
+
* SKILL.md" walk would resolve decoys that must stay invisible (both MEASURED in the
|
|
12
|
+
* feature's layout census, `features/dz-install-npx-init/05_architecture.md` §3):
|
|
13
|
+
*
|
|
14
|
+
* - `adapter-claude/test/fixtures/<id>/SKILL.md` — a test fixture, not a shipped skill;
|
|
15
|
+
* - `health-advisor/base/skills/base/<id>/SKILL.md` — a vendored mirror of another
|
|
16
|
+
* pack's skills (skills-analyst-manual); resolving it would double-install them.
|
|
17
|
+
*
|
|
18
|
+
* The allowlist is three fixed relative paths with no walk, so those decoys are
|
|
19
|
+
* structurally unreachable (they are not on the probe list) rather than filtered out.
|
|
20
|
+
* Any future recursive extension MUST re-introduce exclusion logic for both cases.
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
25
|
+
import { dirname, join } from 'node:path';
|
|
26
|
+
import { discoverSkillIds } from './skills.js';
|
|
27
|
+
/**
|
|
28
|
+
* Ordered layout probe list. ORDER IS THE CONTRACT — first non-empty wins.
|
|
29
|
+
*
|
|
30
|
+
* `flat` is probed first so a classic pack can never be re-interpreted; `npx-template`
|
|
31
|
+
* before `skills-dir` matches the measured census (13 vs 2 packages). Extending support
|
|
32
|
+
* for a new layout is a data edit here, not new control flow.
|
|
33
|
+
*/
|
|
34
|
+
export const PACKAGE_SKILL_LAYOUTS = [
|
|
35
|
+
{ layout: 'flat', rel: '.' },
|
|
36
|
+
{ layout: 'npx-template', rel: 'templates/.claude/skills' },
|
|
37
|
+
{ layout: 'skills-dir', rel: 'skills' },
|
|
38
|
+
];
|
|
39
|
+
/** Does the matched skills root have sibling component dirs (commands/hooks/agents…)? */
|
|
40
|
+
function companionAssetsPresent(skillsRoot) {
|
|
41
|
+
const parent = dirname(skillsRoot);
|
|
42
|
+
if (!existsSync(parent))
|
|
43
|
+
return false;
|
|
44
|
+
try {
|
|
45
|
+
return readdirSync(parent, { withFileTypes: true }).some((entry) => entry.isDirectory() && entry.name !== 'skills');
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the skills root of an installed npm package.
|
|
53
|
+
*
|
|
54
|
+
* Probes {@link PACKAGE_SKILL_LAYOUTS} in order; the FIRST layout with at least one
|
|
55
|
+
* `<root>/<id>/SKILL.md` wins, and exactly one root is returned (`[root]`). Returns `[]`
|
|
56
|
+
* when the package carries no skills in ANY known layout — the caller MUST treat `[]`
|
|
57
|
+
* as an error (see `cmdInstall`'s exit code). Single-root is deliberate (feature
|
|
58
|
+
* dz-install-npx-init, plan AM-4): no package today has skills in two allowlisted
|
|
59
|
+
* layouts simultaneously, so multi-root install semantics would be untested dead code.
|
|
60
|
+
* The array return type keeps the door open without committing to a merge policy.
|
|
61
|
+
*
|
|
62
|
+
* Pure, filesystem-read-only, synchronous, never throws on missing/unreadable dirs.
|
|
63
|
+
*/
|
|
64
|
+
export function resolvePackageSkillRoots(pkgDir) {
|
|
65
|
+
for (const { layout, rel } of PACKAGE_SKILL_LAYOUTS) {
|
|
66
|
+
const dir = rel === '.' ? pkgDir : join(pkgDir, rel);
|
|
67
|
+
const ids = discoverSkillIds(dir);
|
|
68
|
+
if (ids.length === 0)
|
|
69
|
+
continue;
|
|
70
|
+
return [
|
|
71
|
+
{
|
|
72
|
+
layout,
|
|
73
|
+
dir,
|
|
74
|
+
ids,
|
|
75
|
+
hasCompanionAssets: layout === 'npx-template' && companionAssetsPresent(dir),
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=package-skill-layouts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-skill-layouts.js","sourceRoot":"","sources":["../src/package-skill-layouts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAyB/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA6E;IAC7G,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;IAC5B,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,0BAA0B,EAAE;IAC3D,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;CACxC,CAAC;AAEF,yFAAyF;AACzF,SAAS,sBAAsB,CAAC,UAAkB;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACtD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAC1D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC/B,OAAO;YACL;gBACE,MAAM;gBACN,GAAG;gBACH,GAAG;gBACH,kBAAkB,EAAE,MAAM,KAAK,cAAc,IAAI,sBAAsB,CAAC,GAAG,CAAC;aAC7E;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/dist/patterns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,OAAO,EAAwE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
|