@dzhechkov/harness-core 0.3.37 → 0.3.38
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +27 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +76 -12
- package/dist/registry.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/registry.ts +78 -12
package/dist/index.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type { CreateSkillOptions, CreateSkillResult } from './create-skill.js';
|
|
|
17
17
|
export { checkUpstream, checkAllUpstream, discoverSourcePackages, loadSourcesManifest } from './sync-upstream.js';
|
|
18
18
|
export type { SyncUpstreamReport, UpstreamCheckResult, SourcesManifest, SourcePackageInfo } from './sync-upstream.js';
|
|
19
19
|
export { benchmarkSkill, benchmarkSkills, compareSkills } from './benchmark.js';
|
|
20
|
-
export { buildRegistry, searchRegistry, filterByCategory } from './registry.js';
|
|
20
|
+
export { buildRegistry, searchRegistry, filterByCategory, skillPackBaseDirs, discoverSkillPackDirs } from './registry.js';
|
|
21
21
|
export { recommend } from './recommend.js';
|
|
22
22
|
export { pretrain } from './pretrain.js';
|
|
23
23
|
export { loadPatterns, loadSessions, computePatternBoost, readLearningConfig, BOOST_CAP, recordPattern, loadStorePatternsSync, patternToRecord, recordToPattern, consolidateSessions, recallPatterns } from './patterns.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,MACiD,CAAC;AAErF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ export * from './workflows.js';
|
|
|
15
15
|
export { createSkill } from './create-skill.js';
|
|
16
16
|
export { checkUpstream, checkAllUpstream, discoverSourcePackages, loadSourcesManifest } from './sync-upstream.js';
|
|
17
17
|
export { benchmarkSkill, benchmarkSkills, compareSkills } from './benchmark.js';
|
|
18
|
-
export { buildRegistry, searchRegistry, filterByCategory } from './registry.js';
|
|
18
|
+
export { buildRegistry, searchRegistry, filterByCategory, skillPackBaseDirs, discoverSkillPackDirs } from './registry.js';
|
|
19
19
|
export { recommend } from './recommend.js';
|
|
20
20
|
export { pretrain } from './pretrain.js';
|
|
21
21
|
export { loadPatterns, loadSessions, computePatternBoost, readLearningConfig, BOOST_CAP, recordPattern, loadStorePatternsSync, patternToRecord, recordToPattern, consolidateSessions, recallPatterns } from './patterns.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAC9B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AAErF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAC9B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AAErF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5N,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -6,6 +6,26 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
|
+
/**
|
|
10
|
+
* Resolve every `@dzhechkov` base directory that may hold `skills-*` packs, for a given
|
|
11
|
+
* working directory. Ordered by precedence (first wins on pack-name collision):
|
|
12
|
+
*
|
|
13
|
+
* 1. `<cwd>/packages/@dzhechkov` — monorepo/dev checkout (source of truth)
|
|
14
|
+
* 2. `<cwd>/node_modules/@dzhechkov` — project-local npm install
|
|
15
|
+
* 3. self-location — where THIS module (harness-core) is installed,
|
|
16
|
+
* walking up for any `@dzhechkov` ancestor and each `node_modules/@dzhechkov`.
|
|
17
|
+
*
|
|
18
|
+
* Step 3 is what makes a **global** `dz` install work: when `dz` runs in a project that does
|
|
19
|
+
* not itself depend on the skill packs, the packs sit next to the installed `harness-core`
|
|
20
|
+
* (e.g. `.../harness-cli/node_modules/@dzhechkov/skills-*`), a location the cwd-relative
|
|
21
|
+
* scans (1, 2) never reach. Returns only directories that exist, de-duplicated, in order.
|
|
22
|
+
*/
|
|
23
|
+
export declare function skillPackBaseDirs(cwd: string): string[];
|
|
24
|
+
/** List `skills-*` pack directories across all base dirs, de-duplicated by pack name (first wins). */
|
|
25
|
+
export declare function discoverSkillPackDirs(cwd: string): {
|
|
26
|
+
pack: string;
|
|
27
|
+
dir: string;
|
|
28
|
+
}[];
|
|
9
29
|
/** A single skill in the registry. */
|
|
10
30
|
export interface RegistryEntry {
|
|
11
31
|
readonly id: string;
|
|
@@ -24,8 +44,13 @@ export interface Registry {
|
|
|
24
44
|
readonly totalPacks: number;
|
|
25
45
|
readonly categories: readonly string[];
|
|
26
46
|
}
|
|
27
|
-
/**
|
|
28
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Build the registry from every `skills-*` pack discovered across all base dirs
|
|
49
|
+
* ({@link skillPackBaseDirs}) — monorepo `packages/@dzhechkov`, project-local
|
|
50
|
+
* `node_modules/@dzhechkov`, **and** the CLI's own install location. This is why
|
|
51
|
+
* `dz registry` works for a globally-installed `dz`, not only inside the monorepo.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildRegistry(cwd: string): Registry;
|
|
29
54
|
/** Search registry by query (matches id and description, case-insensitive). */
|
|
30
55
|
export declare function searchRegistry(registry: Registry, query: string): readonly RegistryEntry[];
|
|
31
56
|
/** Filter registry by category. */
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBvD;AAED,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAYlF;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,yBAAyB;AACzB,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAoCD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAmCnD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CAK1F;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CAE/F"}
|
package/dist/registry.js
CHANGED
|
@@ -7,7 +7,63 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
10
|
-
import { join } from 'node:path';
|
|
10
|
+
import { basename, dirname, join } from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve every `@dzhechkov` base directory that may hold `skills-*` packs, for a given
|
|
14
|
+
* working directory. Ordered by precedence (first wins on pack-name collision):
|
|
15
|
+
*
|
|
16
|
+
* 1. `<cwd>/packages/@dzhechkov` — monorepo/dev checkout (source of truth)
|
|
17
|
+
* 2. `<cwd>/node_modules/@dzhechkov` — project-local npm install
|
|
18
|
+
* 3. self-location — where THIS module (harness-core) is installed,
|
|
19
|
+
* walking up for any `@dzhechkov` ancestor and each `node_modules/@dzhechkov`.
|
|
20
|
+
*
|
|
21
|
+
* Step 3 is what makes a **global** `dz` install work: when `dz` runs in a project that does
|
|
22
|
+
* not itself depend on the skill packs, the packs sit next to the installed `harness-core`
|
|
23
|
+
* (e.g. `.../harness-cli/node_modules/@dzhechkov/skills-*`), a location the cwd-relative
|
|
24
|
+
* scans (1, 2) never reach. Returns only directories that exist, de-duplicated, in order.
|
|
25
|
+
*/
|
|
26
|
+
export function skillPackBaseDirs(cwd) {
|
|
27
|
+
const bases = [];
|
|
28
|
+
const add = (dir) => {
|
|
29
|
+
if (!bases.includes(dir))
|
|
30
|
+
bases.push(dir);
|
|
31
|
+
};
|
|
32
|
+
add(join(cwd, 'packages', '@dzhechkov'));
|
|
33
|
+
add(join(cwd, 'node_modules', '@dzhechkov'));
|
|
34
|
+
// Self-location: harness-core is always co-installed with the skill packs (they are
|
|
35
|
+
// siblings under the same `@dzhechkov` dir, or one `node_modules` hop away). Walk up.
|
|
36
|
+
try {
|
|
37
|
+
let dir = dirname(fileURLToPath(import.meta.url)); // .../@dzhechkov/harness-core/dist
|
|
38
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
39
|
+
if (basename(dir) === '@dzhechkov')
|
|
40
|
+
add(dir);
|
|
41
|
+
add(join(dir, 'node_modules', '@dzhechkov'));
|
|
42
|
+
const parent = dirname(dir);
|
|
43
|
+
if (parent === dir)
|
|
44
|
+
break;
|
|
45
|
+
dir = parent;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// import.meta.url unavailable (unexpected in ESM) — cwd scans still apply.
|
|
50
|
+
}
|
|
51
|
+
return bases.filter((dir) => existsSync(dir));
|
|
52
|
+
}
|
|
53
|
+
/** List `skills-*` pack directories across all base dirs, de-duplicated by pack name (first wins). */
|
|
54
|
+
export function discoverSkillPackDirs(cwd) {
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const base of skillPackBaseDirs(cwd)) {
|
|
58
|
+
for (const e of readdirSync(base, { withFileTypes: true })) {
|
|
59
|
+
if (e.isDirectory() && e.name.startsWith('skills-') && !seen.has(e.name)) {
|
|
60
|
+
seen.add(e.name);
|
|
61
|
+
out.push({ pack: e.name, dir: join(base, e.name) });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
11
67
|
/** Extract description from SKILL.md frontmatter. */
|
|
12
68
|
function extractFrontmatter(content) {
|
|
13
69
|
const descMatch = /^description:\s*"?(.+?)"?\s*$/m.exec(content);
|
|
@@ -39,18 +95,26 @@ function categoryFromPack(pack) {
|
|
|
39
95
|
return 'bto';
|
|
40
96
|
if (pack.includes('health'))
|
|
41
97
|
return 'health';
|
|
98
|
+
// Product & design cluster (ADR-0002)
|
|
99
|
+
if (pack.includes('taste') || pack.includes('cloner'))
|
|
100
|
+
return 'design';
|
|
101
|
+
if (pack.includes('pm') ||
|
|
102
|
+
pack.includes('idea2prd') ||
|
|
103
|
+
pack.includes('reverse-engineering') ||
|
|
104
|
+
pack.includes('presentation'))
|
|
105
|
+
return 'product';
|
|
42
106
|
return 'other';
|
|
43
107
|
}
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Build the registry from every `skills-*` pack discovered across all base dirs
|
|
110
|
+
* ({@link skillPackBaseDirs}) — monorepo `packages/@dzhechkov`, project-local
|
|
111
|
+
* `node_modules/@dzhechkov`, **and** the CLI's own install location. This is why
|
|
112
|
+
* `dz registry` works for a globally-installed `dz`, not only inside the monorepo.
|
|
113
|
+
*/
|
|
114
|
+
export function buildRegistry(cwd) {
|
|
49
115
|
const entries = [];
|
|
50
|
-
const packs =
|
|
51
|
-
|
|
52
|
-
for (const pack of packs) {
|
|
53
|
-
const packDir = join(baseDir, pack.name);
|
|
116
|
+
const packs = discoverSkillPackDirs(cwd);
|
|
117
|
+
for (const { pack, dir: packDir } of packs) {
|
|
54
118
|
const skillDirs = readdirSync(packDir, { withFileTypes: true })
|
|
55
119
|
.filter((e) => e.isDirectory() && existsSync(join(packDir, e.name, 'SKILL.md')));
|
|
56
120
|
for (const skill of skillDirs) {
|
|
@@ -59,13 +123,13 @@ export function buildRegistry(monorepoRoot) {
|
|
|
59
123
|
const { description, trustTier } = extractFrontmatter(content);
|
|
60
124
|
entries.push({
|
|
61
125
|
id: skill.name,
|
|
62
|
-
pack
|
|
126
|
+
pack,
|
|
63
127
|
description,
|
|
64
128
|
trustTier,
|
|
65
129
|
hasSchema: existsSync(join(packDir, skill.name, 'schemas', 'output.json')),
|
|
66
130
|
hasEvals: existsSync(join(packDir, skill.name, 'evals')),
|
|
67
131
|
lineCount: content.split('\n').length,
|
|
68
|
-
category: categoryFromPack(pack
|
|
132
|
+
category: categoryFromPack(pack),
|
|
69
133
|
});
|
|
70
134
|
}
|
|
71
135
|
}
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -22,7 +22,7 @@ export type { CreateSkillOptions, CreateSkillResult } from './create-skill.js';
|
|
|
22
22
|
export { checkUpstream, checkAllUpstream, discoverSourcePackages, loadSourcesManifest } from './sync-upstream.js';
|
|
23
23
|
export type { SyncUpstreamReport, UpstreamCheckResult, SourcesManifest, SourcePackageInfo } from './sync-upstream.js';
|
|
24
24
|
export { benchmarkSkill, benchmarkSkills, compareSkills } from './benchmark.js';
|
|
25
|
-
export { buildRegistry, searchRegistry, filterByCategory } from './registry.js';
|
|
25
|
+
export { buildRegistry, searchRegistry, filterByCategory, skillPackBaseDirs, discoverSkillPackDirs } from './registry.js';
|
|
26
26
|
export { recommend } from './recommend.js';
|
|
27
27
|
export { pretrain } from './pretrain.js';
|
|
28
28
|
export { loadPatterns, loadSessions, computePatternBoost, readLearningConfig, BOOST_CAP, recordPattern, loadStorePatternsSync, patternToRecord, recordToPattern, consolidateSessions, recallPatterns } from './patterns.js';
|
package/src/registry.ts
CHANGED
|
@@ -8,7 +8,64 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
11
|
-
import { join } from 'node:path';
|
|
11
|
+
import { basename, dirname, join } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Resolve every `@dzhechkov` base directory that may hold `skills-*` packs, for a given
|
|
16
|
+
* working directory. Ordered by precedence (first wins on pack-name collision):
|
|
17
|
+
*
|
|
18
|
+
* 1. `<cwd>/packages/@dzhechkov` — monorepo/dev checkout (source of truth)
|
|
19
|
+
* 2. `<cwd>/node_modules/@dzhechkov` — project-local npm install
|
|
20
|
+
* 3. self-location — where THIS module (harness-core) is installed,
|
|
21
|
+
* walking up for any `@dzhechkov` ancestor and each `node_modules/@dzhechkov`.
|
|
22
|
+
*
|
|
23
|
+
* Step 3 is what makes a **global** `dz` install work: when `dz` runs in a project that does
|
|
24
|
+
* not itself depend on the skill packs, the packs sit next to the installed `harness-core`
|
|
25
|
+
* (e.g. `.../harness-cli/node_modules/@dzhechkov/skills-*`), a location the cwd-relative
|
|
26
|
+
* scans (1, 2) never reach. Returns only directories that exist, de-duplicated, in order.
|
|
27
|
+
*/
|
|
28
|
+
export function skillPackBaseDirs(cwd: string): string[] {
|
|
29
|
+
const bases: string[] = [];
|
|
30
|
+
const add = (dir: string): void => {
|
|
31
|
+
if (!bases.includes(dir)) bases.push(dir);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
add(join(cwd, 'packages', '@dzhechkov'));
|
|
35
|
+
add(join(cwd, 'node_modules', '@dzhechkov'));
|
|
36
|
+
|
|
37
|
+
// Self-location: harness-core is always co-installed with the skill packs (they are
|
|
38
|
+
// siblings under the same `@dzhechkov` dir, or one `node_modules` hop away). Walk up.
|
|
39
|
+
try {
|
|
40
|
+
let dir = dirname(fileURLToPath(import.meta.url)); // .../@dzhechkov/harness-core/dist
|
|
41
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
42
|
+
if (basename(dir) === '@dzhechkov') add(dir);
|
|
43
|
+
add(join(dir, 'node_modules', '@dzhechkov'));
|
|
44
|
+
const parent = dirname(dir);
|
|
45
|
+
if (parent === dir) break;
|
|
46
|
+
dir = parent;
|
|
47
|
+
}
|
|
48
|
+
} catch {
|
|
49
|
+
// import.meta.url unavailable (unexpected in ESM) — cwd scans still apply.
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return bases.filter((dir) => existsSync(dir));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** List `skills-*` pack directories across all base dirs, de-duplicated by pack name (first wins). */
|
|
56
|
+
export function discoverSkillPackDirs(cwd: string): { pack: string; dir: string }[] {
|
|
57
|
+
const seen = new Set<string>();
|
|
58
|
+
const out: { pack: string; dir: string }[] = [];
|
|
59
|
+
for (const base of skillPackBaseDirs(cwd)) {
|
|
60
|
+
for (const e of readdirSync(base, { withFileTypes: true })) {
|
|
61
|
+
if (e.isDirectory() && e.name.startsWith('skills-') && !seen.has(e.name)) {
|
|
62
|
+
seen.add(e.name);
|
|
63
|
+
out.push({ pack: e.name, dir: join(base, e.name) });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
12
69
|
|
|
13
70
|
/** A single skill in the registry. */
|
|
14
71
|
export interface RegistryEntry {
|
|
@@ -52,20 +109,29 @@ function categoryFromPack(pack: string): string {
|
|
|
52
109
|
if (pack.includes('news')) return 'news';
|
|
53
110
|
if (pack.includes('bto')) return 'bto';
|
|
54
111
|
if (pack.includes('health')) return 'health';
|
|
112
|
+
// Product & design cluster (ADR-0002)
|
|
113
|
+
if (pack.includes('taste') || pack.includes('cloner')) return 'design';
|
|
114
|
+
if (
|
|
115
|
+
pack.includes('pm') ||
|
|
116
|
+
pack.includes('idea2prd') ||
|
|
117
|
+
pack.includes('reverse-engineering') ||
|
|
118
|
+
pack.includes('presentation')
|
|
119
|
+
)
|
|
120
|
+
return 'product';
|
|
55
121
|
return 'other';
|
|
56
122
|
}
|
|
57
123
|
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Build the registry from every `skills-*` pack discovered across all base dirs
|
|
126
|
+
* ({@link skillPackBaseDirs}) — monorepo `packages/@dzhechkov`, project-local
|
|
127
|
+
* `node_modules/@dzhechkov`, **and** the CLI's own install location. This is why
|
|
128
|
+
* `dz registry` works for a globally-installed `dz`, not only inside the monorepo.
|
|
129
|
+
*/
|
|
130
|
+
export function buildRegistry(cwd: string): Registry {
|
|
63
131
|
const entries: RegistryEntry[] = [];
|
|
64
|
-
const packs =
|
|
65
|
-
.filter((e) => e.isDirectory() && e.name.startsWith('skills-'));
|
|
132
|
+
const packs = discoverSkillPackDirs(cwd);
|
|
66
133
|
|
|
67
|
-
for (const pack of packs) {
|
|
68
|
-
const packDir = join(baseDir, pack.name);
|
|
134
|
+
for (const { pack, dir: packDir } of packs) {
|
|
69
135
|
const skillDirs = readdirSync(packDir, { withFileTypes: true })
|
|
70
136
|
.filter((e) => e.isDirectory() && existsSync(join(packDir, e.name, 'SKILL.md')));
|
|
71
137
|
|
|
@@ -76,13 +142,13 @@ export function buildRegistry(monorepoRoot: string): Registry {
|
|
|
76
142
|
|
|
77
143
|
entries.push({
|
|
78
144
|
id: skill.name,
|
|
79
|
-
pack
|
|
145
|
+
pack,
|
|
80
146
|
description,
|
|
81
147
|
trustTier,
|
|
82
148
|
hasSchema: existsSync(join(packDir, skill.name, 'schemas', 'output.json')),
|
|
83
149
|
hasEvals: existsSync(join(packDir, skill.name, 'evals')),
|
|
84
150
|
lineCount: content.split('\n').length,
|
|
85
|
-
category: categoryFromPack(pack
|
|
151
|
+
category: categoryFromPack(pack),
|
|
86
152
|
});
|
|
87
153
|
}
|
|
88
154
|
}
|