faceted-prompting 0.2.1 → 0.3.1
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/README.md +40 -11
- package/dist/cli/compose-command.d.ts +3 -0
- package/dist/cli/compose-command.d.ts.map +1 -0
- package/dist/cli/compose-command.js +156 -0
- package/dist/cli/compose-command.js.map +1 -0
- package/dist/cli/compose-context.js +3 -3
- package/dist/cli/compose-context.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +21 -89
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install-skill/facet-token-file-ops.d.ts +7 -0
- package/dist/cli/install-skill/facet-token-file-ops.d.ts.map +1 -0
- package/dist/cli/install-skill/facet-token-file-ops.js +69 -0
- package/dist/cli/install-skill/facet-token-file-ops.js.map +1 -0
- package/dist/cli/install-skill/facet-token-renderer.d.ts +6 -0
- package/dist/cli/install-skill/facet-token-renderer.d.ts.map +1 -0
- package/dist/cli/install-skill/facet-token-renderer.js +35 -0
- package/dist/cli/install-skill/facet-token-renderer.js.map +1 -0
- package/dist/cli/install-skill/facets.d.ts +8 -5
- package/dist/cli/install-skill/facets.d.ts.map +1 -1
- package/dist/cli/install-skill/facets.js +63 -34
- package/dist/cli/install-skill/facets.js.map +1 -1
- package/dist/cli/install-skill/flow.d.ts +3 -3
- package/dist/cli/install-skill/flow.d.ts.map +1 -1
- package/dist/cli/install-skill/flow.js +126 -21
- package/dist/cli/install-skill/flow.js.map +1 -1
- package/dist/cli/install-skill/modes.d.ts +2 -10
- package/dist/cli/install-skill/modes.d.ts.map +1 -1
- package/dist/cli/install-skill/modes.js +22 -49
- package/dist/cli/install-skill/modes.js.map +1 -1
- package/dist/cli/path-guard.d.ts +1 -0
- package/dist/cli/path-guard.d.ts.map +1 -1
- package/dist/cli/path-guard.js +34 -2
- package/dist/cli/path-guard.js.map +1 -1
- package/dist/cli/runner.d.ts +1 -0
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +11 -0
- package/dist/cli/runner.js.map +1 -1
- package/dist/cli/skill-commands.d.ts +13 -4
- package/dist/cli/skill-commands.d.ts.map +1 -1
- package/dist/cli/skill-commands.js +72 -15
- package/dist/cli/skill-commands.js.map +1 -1
- package/dist/cli/skill-renderer.d.ts +7 -4
- package/dist/cli/skill-renderer.d.ts.map +1 -1
- package/dist/cli/skill-renderer.js +74 -58
- package/dist/cli/skill-renderer.js.map +1 -1
- package/dist/cli/skill-types.d.ts +2 -2
- package/dist/cli/skill-types.d.ts.map +1 -1
- package/dist/cli/update-check.d.ts +2 -0
- package/dist/cli/update-check.d.ts.map +1 -0
- package/dist/cli/update-check.js +32 -0
- package/dist/cli/update-check.js.map +1 -0
- package/dist/compose-definition.d.ts.map +1 -1
- package/dist/compose-definition.js +10 -4
- package/dist/compose-definition.js.map +1 -1
- package/dist/compose.d.ts +5 -2
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +12 -5
- package/dist/compose.js.map +1 -1
- package/dist/init/index.d.ts +5 -1
- package/dist/init/index.d.ts.map +1 -1
- package/dist/init/index.js +30 -17
- package/dist/init/index.js.map +1 -1
- package/dist/prompt-payload.d.ts +2 -1
- package/dist/prompt-payload.d.ts.map +1 -1
- package/dist/prompt-payload.js +3 -1
- package/dist/prompt-payload.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modes.js","sourceRoot":"","sources":["../../../src/cli/install-skill/modes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"modes.js","sourceRoot":"","sources":["../../../src/cli/install-skill/modes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,EAC3B,kBAAkB,EAClB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,SAAS,oCAAoC,CAAC,MAI7C;IACC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,sBAAsB,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC;IAC7G,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAQ3C;IACC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAC7C,kBAAkB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAChD,+CAA+C,CAChD,CAAC;IACF,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,QAAiB,CAAC;IAC/B,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IACnF,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAC9D,UAAU,EACV,MAAM,CAAC,OAAO,CAAC,OAAO,EACtB,mBAAmB,CACpB,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpF,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,aAAa,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,aAAa,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,6CAA6C,iBAAiB,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,yDAAyD,iBAAiB,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ;QAC5C,CAAC,CAAC,gCAAgC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC;QACzG,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,oBAAoB,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;KAC1C,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,aAAa,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4EAA4E,aAAa,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,2BAA2B,CAAC;QAChC,SAAS;QACT,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;KAChC,CAAC,CAAC;IAEH,IAAI,WAAW,EAAE,CAAC;QAChB,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAE1C,cAAc,CAAC;YACb,SAAS;YACT,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,wBAAwB,EACtB,MAAM,CAAC,QAAQ,CAAC,YAAY;iBACzB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;iBAC/C,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;SAC1C,CAAC,CAAC;QAEH,sBAAsB,CAAC;YACrB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,MAAM,CAAC,gBAAgB;YACjC,WAAW,EAAE,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzD,WAAW,EAAE,CAAC,QAAQ,CAAC;SACxB,CAAC,CAAC;QAEH,oCAAoC,CAAC;YACnC,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;SAChC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,cAAc,CAAC;YACb,SAAS;YACT,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,wBAAwB,EACtB,MAAM,CAAC,QAAQ,CAAC,YAAY;iBACzB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;iBAC/C,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;SAC1C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,mBAAmB,CAAC;YAClC,GAAG,MAAM,CAAC,QAAQ;YAClB,IAAI;SACL,CAAC,CAAC;QAEH,cAAc,CAAC,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,iBAAiB;SACxB;QACD,IAAI;QACJ,UAAU,EAAE,iBAAiB;QAC7B,MAAM,EAAE,MAAM,CAAC,GAAG;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/cli/path-guard.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare function ensurePathWithinHome(path: string, homeDir: string, labe
|
|
|
4
4
|
homeRealPath: string;
|
|
5
5
|
};
|
|
6
6
|
export declare function ensurePathWithinRoots(path: string, roots: readonly string[], label: string): string;
|
|
7
|
+
export declare function ensurePathIsNotSymbolicLink(path: string, label: string): string;
|
|
7
8
|
export declare function ensurePathAncestorsContainNoSymbolicLinks(path: string, label: string, stopAtPath?: string): string;
|
|
8
9
|
export declare function ensurePathAncestorsAndRealPathWithinHome(path: string, homeDir: string, label: string): {
|
|
9
10
|
resolvedPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../src/cli/path-guard.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAUhD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBnG;AAcD,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../src/cli/path-guard.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAUhD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBnG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAY/E;AAcD,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAmDR;AAED,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAYhD"}
|
package/dist/cli/path-guard.js
CHANGED
|
@@ -31,6 +31,17 @@ export function ensurePathWithinRoots(path, roots, label) {
|
|
|
31
31
|
}
|
|
32
32
|
throw new Error(`${label} must be inside allowed facets directory: ${realPath}`);
|
|
33
33
|
}
|
|
34
|
+
export function ensurePathIsNotSymbolicLink(path, label) {
|
|
35
|
+
const resolvedPath = resolve(path);
|
|
36
|
+
if (!existsSync(resolvedPath)) {
|
|
37
|
+
return resolvedPath;
|
|
38
|
+
}
|
|
39
|
+
const stat = lstatSync(resolvedPath);
|
|
40
|
+
if (stat.isSymbolicLink()) {
|
|
41
|
+
throw new Error(`Symbolic links are not allowed for ${label}: ${resolvedPath}`);
|
|
42
|
+
}
|
|
43
|
+
return resolvedPath;
|
|
44
|
+
}
|
|
34
45
|
function findNearestExistingAncestor(path) {
|
|
35
46
|
let current = path;
|
|
36
47
|
while (!existsSync(current)) {
|
|
@@ -45,22 +56,43 @@ function findNearestExistingAncestor(path) {
|
|
|
45
56
|
export function ensurePathAncestorsContainNoSymbolicLinks(path, label, stopAtPath) {
|
|
46
57
|
const resolvedPath = resolve(path);
|
|
47
58
|
const resolvedStopAtPath = stopAtPath ? resolve(stopAtPath) : undefined;
|
|
59
|
+
const nearestExistingAncestor = findNearestExistingAncestor(resolvedPath);
|
|
48
60
|
let current = resolvedPath;
|
|
49
61
|
while (true) {
|
|
50
|
-
if (
|
|
62
|
+
if (existsSync(current)) {
|
|
63
|
+
const stat = lstatSync(current);
|
|
64
|
+
if (stat.isSymbolicLink()) {
|
|
65
|
+
throw new Error(`Symbolic links are not allowed in ${label} path: ${current}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (current === nearestExistingAncestor) {
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
const parent = dirname(current);
|
|
72
|
+
if (parent === current) {
|
|
51
73
|
break;
|
|
52
74
|
}
|
|
75
|
+
current = parent;
|
|
76
|
+
}
|
|
77
|
+
if (!resolvedStopAtPath || !isWithinRoot(nearestExistingAncestor, resolvedStopAtPath)) {
|
|
78
|
+
return resolvedPath;
|
|
79
|
+
}
|
|
80
|
+
current = dirname(nearestExistingAncestor);
|
|
81
|
+
while (true) {
|
|
53
82
|
if (existsSync(current)) {
|
|
54
83
|
const stat = lstatSync(current);
|
|
55
84
|
if (stat.isSymbolicLink()) {
|
|
56
85
|
throw new Error(`Symbolic links are not allowed in ${label} path: ${current}`);
|
|
57
86
|
}
|
|
58
87
|
}
|
|
88
|
+
if (current === resolvedStopAtPath) {
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
59
91
|
const parent = dirname(current);
|
|
60
92
|
if (parent === current) {
|
|
61
93
|
break;
|
|
62
94
|
}
|
|
63
|
-
if (
|
|
95
|
+
if (!isWithinRoot(parent, resolvedStopAtPath)) {
|
|
64
96
|
break;
|
|
65
97
|
}
|
|
66
98
|
current = parent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../src/cli/path-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAY;IACrD,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,OAAe,EACf,KAAa;IAEb,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAEnD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mCAAmC,YAAY,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,KAAwB,EAAE,KAAa;IACzF,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,KAAK,YAAY,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACtF,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6CAA6C,QAAQ,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAC/C,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yCAAyC,CACvD,IAAY,EACZ,KAAa,EACb,UAAmB;IAEnB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../src/cli/path-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/runner.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { runFacetCli } from './index.js';
|
|
2
2
|
export interface RunnerDependencies {
|
|
3
|
+
readonly checkForUpdates: () => Promise<void>;
|
|
3
4
|
readonly runFacetCli: typeof runFacetCli;
|
|
4
5
|
readonly writeStdout: (message: string) => void;
|
|
5
6
|
readonly writeStderr: (message: string) => void;
|
package/dist/cli/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiBzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,OAAO,WAAW,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAsBD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,kBAA0C,GACvD,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD"}
|
package/dist/cli/runner.js
CHANGED
|
@@ -4,6 +4,7 @@ import { createInterface } from 'node:readline/promises';
|
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
5
5
|
import { runFacetCli } from './index.js';
|
|
6
6
|
import { selectInteractive } from './select.js';
|
|
7
|
+
import { checkForUpdates } from './update-check.js';
|
|
7
8
|
async function inputInteractive(prompt, defaultValue) {
|
|
8
9
|
const rl = createInterface({ input, output });
|
|
9
10
|
try {
|
|
@@ -19,6 +20,7 @@ async function inputInteractive(prompt, defaultValue) {
|
|
|
19
20
|
}
|
|
20
21
|
function defaultDependencies() {
|
|
21
22
|
return {
|
|
23
|
+
checkForUpdates,
|
|
22
24
|
runFacetCli,
|
|
23
25
|
writeStdout: message => {
|
|
24
26
|
output.write(message);
|
|
@@ -35,6 +37,15 @@ function toErrorMessage(error) {
|
|
|
35
37
|
return error instanceof Error ? error.message : String(error);
|
|
36
38
|
}
|
|
37
39
|
export async function runMain(argv, dependencies = defaultDependencies()) {
|
|
40
|
+
try {
|
|
41
|
+
const updateCheckTask = dependencies.checkForUpdates();
|
|
42
|
+
void updateCheckTask.catch((error) => {
|
|
43
|
+
dependencies.writeStderr(`update check failed: ${toErrorMessage(error)}\n`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
dependencies.writeStderr(`update check failed: ${toErrorMessage(error)}\n`);
|
|
48
|
+
}
|
|
38
49
|
try {
|
|
39
50
|
const result = await dependencies.runFacetCli(argv, {
|
|
40
51
|
cwd: process.cwd(),
|
package/dist/cli/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,YAAoB;IAClE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzE,CAAC,CAAC,GAAG,MAAM,IAAI;YACf,CAAC,CAAC,GAAG,MAAM,KAAK,YAAY,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAUD,SAAS,mBAAmB;IAC1B,OAAO;QACL,eAAe;QACf,WAAW;QACX,WAAW,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,WAAW,EAAE,OAAO,CAAC,EAAE;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,WAAW,EAAE,IAAI,CAAC,EAAE;YAClB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAc,EACd,eAAmC,mBAAmB,EAAE;IAExD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;QACvD,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC5C,YAAY,CAAC,WAAW,CAAC,wBAAwB,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,YAAY,CAAC,WAAW,CAAC,wBAAwB,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;YAClD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,OAAO,EAAE;YAClB,MAAM,EAAE,iBAAiB;YACzB,KAAK,EAAE,gBAAgB;SACxB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,YAAY,CAAC,WAAW,CAAC,cAAc,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,YAAY,CAAC,WAAW,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;QAED,YAAY,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,YAAY,CAAC,WAAW,CAAC,yBAAyB,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7E,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import type { FacetCliOptions, FacetCliResult } from './types.js';
|
|
2
|
-
export declare function getSkillPaths(homeDir: string): {
|
|
3
|
-
readonly
|
|
4
|
-
readonly
|
|
5
|
-
readonly
|
|
2
|
+
export declare function getSkillPaths(cwd: string, homeDir: string): {
|
|
3
|
+
readonly facetedRoots: readonly string[];
|
|
4
|
+
readonly facetsRoots: readonly string[];
|
|
5
|
+
readonly compositionsDirs: readonly string[];
|
|
6
6
|
};
|
|
7
|
+
export declare function selectCompositionDefinitionPath(params: {
|
|
8
|
+
options: FacetCliOptions;
|
|
9
|
+
compositionDefinitionDirs: readonly string[];
|
|
10
|
+
localCompositionsDir: string | undefined;
|
|
11
|
+
globalCompositionsDir: string;
|
|
12
|
+
cancelAction: 'Install' | 'Compose';
|
|
13
|
+
}): Promise<{
|
|
14
|
+
definitionPath: string;
|
|
15
|
+
}>;
|
|
7
16
|
export declare function runInstallSkillCommand(options: FacetCliOptions): Promise<FacetCliResult>;
|
|
8
17
|
//# sourceMappingURL=skill-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-commands.d.ts","sourceRoot":"","sources":["../../src/cli/skill-commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-commands.d.ts","sourceRoot":"","sources":["../../src/cli/skill-commands.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIlE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAC3D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C,CAcA;AA+BD,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,OAAO,EAAE,eAAe,CAAC;IACzB,yBAAyB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC,GAAG,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCtC;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC9F"}
|
|
@@ -1,41 +1,98 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync, realpathSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve, sep } from 'node:path';
|
|
2
3
|
import { loadComposeDefinition } from '../compose-definition.js';
|
|
3
4
|
import { getFacetedRoot } from '../config/index.js';
|
|
4
5
|
import { buildSkillSections, ensureSafeDefinitionName, listCompositionDefinitions, } from './skill-renderer.js';
|
|
6
|
+
import { shouldOverwrite } from './install-skill/flow.js';
|
|
5
7
|
import { runSkillDeployInstall } from './install-skill/modes.js';
|
|
6
|
-
export function getSkillPaths(homeDir) {
|
|
7
|
-
const
|
|
8
|
+
export function getSkillPaths(cwd, homeDir) {
|
|
9
|
+
const globalFacetedRoot = getFacetedRoot(homeDir);
|
|
10
|
+
const localFacetedRoot = getFacetedRoot(cwd);
|
|
11
|
+
const realLocal = existsSync(localFacetedRoot) ? realpathSync(localFacetedRoot) : undefined;
|
|
12
|
+
const realGlobal = existsSync(globalFacetedRoot) ? realpathSync(globalFacetedRoot) : globalFacetedRoot;
|
|
13
|
+
const facetedRoots = realLocal && realLocal !== realGlobal
|
|
14
|
+
? [localFacetedRoot, globalFacetedRoot]
|
|
15
|
+
: [globalFacetedRoot];
|
|
8
16
|
return {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
17
|
+
facetedRoots,
|
|
18
|
+
facetsRoots: facetedRoots.map(facetedRoot => join(facetedRoot, 'facets')),
|
|
19
|
+
compositionsDirs: facetedRoots.map(facetedRoot => join(facetedRoot, 'compositions')),
|
|
12
20
|
};
|
|
13
21
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
22
|
+
function resolveCompositionSource(definitionPath, localCompositionsDir) {
|
|
23
|
+
if (!localCompositionsDir) {
|
|
24
|
+
return 'global';
|
|
25
|
+
}
|
|
26
|
+
const realDefPath = existsSync(definitionPath) ? realpathSync(resolve(definitionPath)) : resolve(definitionPath);
|
|
27
|
+
const realLocalDir = existsSync(localCompositionsDir) ? realpathSync(resolve(localCompositionsDir)) : resolve(localCompositionsDir);
|
|
28
|
+
if (realDefPath.startsWith(`${realLocalDir}${sep}`)) {
|
|
29
|
+
return 'local';
|
|
30
|
+
}
|
|
31
|
+
return 'global';
|
|
32
|
+
}
|
|
33
|
+
function hasGlobalCompositionShadow(compositionName, globalCompositionsDir) {
|
|
34
|
+
if (existsSync(join(globalCompositionsDir, `${compositionName}.yaml`)) ||
|
|
35
|
+
existsSync(join(globalCompositionsDir, `${compositionName}.yml`))) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
export async function selectCompositionDefinitionPath(params) {
|
|
41
|
+
const definitionMap = listCompositionDefinitions(params.compositionDefinitionDirs);
|
|
42
|
+
const compositionCandidates = Object.keys(definitionMap)
|
|
43
|
+
.sort()
|
|
44
|
+
.map(name => {
|
|
45
|
+
const definitionPath = definitionMap[name];
|
|
46
|
+
if (!definitionPath) {
|
|
47
|
+
throw new Error(`Unknown compose definition: ${name}`);
|
|
48
|
+
}
|
|
49
|
+
const source = resolveCompositionSource(definitionPath, params.localCompositionsDir);
|
|
50
|
+
return source === 'local' ? `${name} (local)` : `${name} (global)`;
|
|
51
|
+
});
|
|
18
52
|
if (compositionCandidates.length === 0) {
|
|
19
|
-
throw new Error(`No compose definitions found in ${
|
|
53
|
+
throw new Error(`No compose definitions found in ${params.compositionDefinitionDirs.join(', ')}`);
|
|
20
54
|
}
|
|
21
|
-
const
|
|
55
|
+
const selectedLabel = await params.options.select(compositionCandidates, 'Choose composition with Up/Down and Enter:');
|
|
56
|
+
const selectedComposition = selectedLabel.replace(/ \((local|global)\)$/u, '');
|
|
22
57
|
const definitionPath = definitionMap[selectedComposition];
|
|
23
58
|
if (!definitionPath) {
|
|
24
59
|
throw new Error(`Unknown compose definition selected: ${selectedComposition}`);
|
|
25
60
|
}
|
|
61
|
+
if (resolveCompositionSource(definitionPath, params.localCompositionsDir) === 'local' &&
|
|
62
|
+
hasGlobalCompositionShadow(selectedComposition, params.globalCompositionsDir)) {
|
|
63
|
+
const approved = await params.options.input(`Local composition "${selectedComposition}" overrides global definition. Continue? [y/N]`, 'n');
|
|
64
|
+
if (!shouldOverwrite(approved)) {
|
|
65
|
+
throw new Error(`${params.cancelAction} was cancelled for local composition: ${selectedComposition}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { definitionPath };
|
|
69
|
+
}
|
|
70
|
+
export async function runInstallSkillCommand(options) {
|
|
71
|
+
const { facetedRoots, facetsRoots, compositionsDirs } = getSkillPaths(options.cwd, options.homeDir);
|
|
72
|
+
const localFacetedRoot = getFacetedRoot(options.cwd);
|
|
73
|
+
const globalFacetedRoot = getFacetedRoot(options.homeDir);
|
|
74
|
+
const localCompositionsDir = existsSync(localFacetedRoot) ? join(localFacetedRoot, 'compositions') : undefined;
|
|
75
|
+
const globalCompositionsDir = join(globalFacetedRoot, 'compositions');
|
|
76
|
+
const { definitionPath } = await selectCompositionDefinitionPath({
|
|
77
|
+
options,
|
|
78
|
+
compositionDefinitionDirs: compositionsDirs,
|
|
79
|
+
localCompositionsDir,
|
|
80
|
+
globalCompositionsDir,
|
|
81
|
+
cancelAction: 'Install',
|
|
82
|
+
});
|
|
26
83
|
const definition = await loadComposeDefinition(definitionPath);
|
|
27
84
|
const safeSkillName = ensureSafeDefinitionName(definition.name);
|
|
28
85
|
const definitionDir = dirname(definitionPath);
|
|
29
86
|
const sections = buildSkillSections({
|
|
30
87
|
definition,
|
|
31
88
|
definitionDir,
|
|
32
|
-
|
|
89
|
+
facetsRoots,
|
|
33
90
|
});
|
|
34
91
|
return (await runSkillDeployInstall({
|
|
35
92
|
options,
|
|
36
|
-
|
|
93
|
+
facetedRoots,
|
|
37
94
|
definitionDir,
|
|
38
|
-
|
|
95
|
+
facetsRoots,
|
|
39
96
|
safeSkillName,
|
|
40
97
|
definition,
|
|
41
98
|
sections,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-commands.js","sourceRoot":"","sources":["../../src/cli/skill-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-commands.js","sourceRoot":"","sources":["../../src/cli/skill-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,18 +4,21 @@ export declare function ensureSafeDefinitionName(name: string): string;
|
|
|
4
4
|
export declare function resolveDefinitionSections(params: {
|
|
5
5
|
definition: ComposeDefinition;
|
|
6
6
|
definitionDir: string;
|
|
7
|
-
facetsRoot
|
|
7
|
+
facetsRoot?: string;
|
|
8
|
+
facetsRoots?: readonly string[];
|
|
8
9
|
}): ResolvedDefinitionSections;
|
|
9
|
-
export declare function listCompositionDefinitions(
|
|
10
|
+
export declare function listCompositionDefinitions(compositionsDirs: string | readonly string[]): Record<string, string>;
|
|
10
11
|
export declare function buildFacetSet(params: {
|
|
11
12
|
definitionDir: string;
|
|
12
|
-
facetsRoot
|
|
13
|
+
facetsRoot?: string;
|
|
14
|
+
facetsRoots?: readonly string[];
|
|
13
15
|
definition: ComposeDefinition;
|
|
14
16
|
}): FacetSet;
|
|
15
17
|
export declare function buildSkillSections(params: {
|
|
16
18
|
definition: ComposeDefinition;
|
|
17
19
|
definitionDir: string;
|
|
18
|
-
facetsRoot
|
|
20
|
+
facetsRoot?: string;
|
|
21
|
+
facetsRoots?: readonly string[];
|
|
19
22
|
}): Omit<SkillDocumentInput, 'mode'>;
|
|
20
23
|
export declare function renderSkillFrontmatter(definition: ComposeDefinition): string;
|
|
21
24
|
export declare function hasYamlFrontmatter(content: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-renderer.d.ts","sourceRoot":"","sources":["../../src/cli/skill-renderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAEV,0BAA0B,EAC1B,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAS1B,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7D;
|
|
1
|
+
{"version":3,"file":"skill-renderer.d.ts","sourceRoot":"","sources":["../../src/cli/skill-renderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAEV,0BAA0B,EAC1B,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAS1B,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7D;AA6CD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,0BAA0B,CA2D7B;AAED,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6B/G;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,iBAAiB,CAAC;CAC/B,GAAG,QAAQ,CAaX;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAWnC;AAWD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,MAAM,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAmDrE;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAM/F"}
|
|
@@ -15,24 +15,44 @@ export function ensureSafeDefinitionName(name) {
|
|
|
15
15
|
return name;
|
|
16
16
|
}
|
|
17
17
|
function resolveFacetRefContent(options) {
|
|
18
|
-
const { ref, label, baseDir,
|
|
18
|
+
const { ref, label, baseDir, facetDirs, allowedRoots } = options;
|
|
19
|
+
const primaryFacetDir = facetDirs[0];
|
|
20
|
+
if (!primaryFacetDir) {
|
|
21
|
+
throw new Error(`Missing ${label}: facet directory is required`);
|
|
22
|
+
}
|
|
19
23
|
if (isResourcePath(ref)) {
|
|
20
24
|
const resourcePath = resolveResourcePath(ref, baseDir);
|
|
21
25
|
const boundedPath = ensurePathWithinRoots(resourcePath, allowedRoots, label);
|
|
22
26
|
return { path: boundedPath, body: requireFile(boundedPath, label) };
|
|
23
27
|
}
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
for (const facetDir of facetDirs) {
|
|
29
|
+
const facetPath = join(facetDir, `${ref}.md`);
|
|
30
|
+
if (!existsSync(facetPath)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const boundedPath = ensurePathWithinRoots(facetPath, allowedRoots, label);
|
|
34
|
+
return { path: boundedPath, body: requireFile(boundedPath, label) };
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`Missing ${label}: ${join(primaryFacetDir, `${ref}.md`)}`);
|
|
37
|
+
}
|
|
38
|
+
function resolveFacetsRoots(params) {
|
|
39
|
+
if (params.facetsRoots && params.facetsRoots.length > 0) {
|
|
40
|
+
return params.facetsRoots;
|
|
41
|
+
}
|
|
42
|
+
if (params.facetsRoot) {
|
|
43
|
+
return [params.facetsRoot];
|
|
44
|
+
}
|
|
45
|
+
throw new Error('Facet roots are required');
|
|
27
46
|
}
|
|
28
47
|
export function resolveDefinitionSections(params) {
|
|
29
|
-
const { definition, definitionDir
|
|
30
|
-
const
|
|
48
|
+
const { definition, definitionDir } = params;
|
|
49
|
+
const facetsRoots = resolveFacetsRoots(params);
|
|
50
|
+
const allowedRoots = facetsRoots;
|
|
31
51
|
const personaContent = resolveFacetRefContent({
|
|
32
52
|
ref: definition.persona,
|
|
33
53
|
label: `persona facet "${definition.persona}"`,
|
|
34
54
|
baseDir: definitionDir,
|
|
35
|
-
|
|
55
|
+
facetDirs: facetsRoots.map(facetsRoot => join(facetsRoot, 'persona')),
|
|
36
56
|
allowedRoots,
|
|
37
57
|
});
|
|
38
58
|
const policies = definition.policies?.map(ref => {
|
|
@@ -40,7 +60,7 @@ export function resolveDefinitionSections(params) {
|
|
|
40
60
|
ref,
|
|
41
61
|
label: `policy facet "${ref}"`,
|
|
42
62
|
baseDir: definitionDir,
|
|
43
|
-
|
|
63
|
+
facetDirs: facetsRoots.map(facetsRoot => join(facetsRoot, 'policies')),
|
|
44
64
|
allowedRoots,
|
|
45
65
|
});
|
|
46
66
|
return { ref, body: resolved.body, path: resolved.path };
|
|
@@ -50,34 +70,21 @@ export function resolveDefinitionSections(params) {
|
|
|
50
70
|
ref,
|
|
51
71
|
label: `knowledge facet "${ref}"`,
|
|
52
72
|
baseDir: definitionDir,
|
|
53
|
-
|
|
73
|
+
facetDirs: facetsRoots.map(facetsRoot => join(facetsRoot, 'knowledge')),
|
|
74
|
+
allowedRoots,
|
|
75
|
+
});
|
|
76
|
+
return { ref, body: resolved.body, path: resolved.path };
|
|
77
|
+
}) ?? [];
|
|
78
|
+
const instructions = definition.instructions?.map(ref => {
|
|
79
|
+
const resolved = resolveFacetRefContent({
|
|
80
|
+
ref,
|
|
81
|
+
label: `instruction facet "${ref}"`,
|
|
82
|
+
baseDir: definitionDir,
|
|
83
|
+
facetDirs: facetsRoots.map(facetsRoot => join(facetsRoot, 'instructions')),
|
|
54
84
|
allowedRoots,
|
|
55
85
|
});
|
|
56
86
|
return { ref, body: resolved.body, path: resolved.path };
|
|
57
87
|
}) ?? [];
|
|
58
|
-
let instruction;
|
|
59
|
-
if (definition.instruction) {
|
|
60
|
-
if (isResourcePath(definition.instruction)) {
|
|
61
|
-
const resolved = resolveFacetRefContent({
|
|
62
|
-
ref: definition.instruction,
|
|
63
|
-
label: 'instruction file',
|
|
64
|
-
baseDir: definitionDir,
|
|
65
|
-
facetDir: facetsRoot,
|
|
66
|
-
allowedRoots,
|
|
67
|
-
});
|
|
68
|
-
instruction = {
|
|
69
|
-
ref: definition.instruction,
|
|
70
|
-
body: resolved.body,
|
|
71
|
-
path: resolved.path,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
instruction = {
|
|
76
|
-
ref: 'literal',
|
|
77
|
-
body: definition.instruction,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
88
|
return {
|
|
82
89
|
persona: {
|
|
83
90
|
ref: definition.persona,
|
|
@@ -86,21 +93,28 @@ export function resolveDefinitionSections(params) {
|
|
|
86
93
|
},
|
|
87
94
|
policies,
|
|
88
95
|
knowledge,
|
|
89
|
-
|
|
96
|
+
instructions,
|
|
90
97
|
};
|
|
91
98
|
}
|
|
92
|
-
export function listCompositionDefinitions(
|
|
93
|
-
|
|
94
|
-
throw new Error(`Compose definition directory does not exist: ${compositionsDir}`);
|
|
95
|
-
}
|
|
96
|
-
const entries = readdirSync(compositionsDir, { withFileTypes: true })
|
|
97
|
-
.filter(entry => !entry.isDirectory() && (entry.name.endsWith('.yaml') || entry.name.endsWith('.yml')))
|
|
98
|
-
.map(entry => entry.name);
|
|
99
|
+
export function listCompositionDefinitions(compositionsDirs) {
|
|
100
|
+
const dirs = Array.isArray(compositionsDirs) ? compositionsDirs : [compositionsDirs];
|
|
99
101
|
const definitions = {};
|
|
100
|
-
for (const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
for (const compositionsDir of dirs) {
|
|
103
|
+
if (!existsSync(compositionsDir)) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const entries = readdirSync(compositionsDir, { withFileTypes: true })
|
|
107
|
+
.filter(entry => !entry.isDirectory() && (entry.name.endsWith('.yaml') || entry.name.endsWith('.yml')))
|
|
108
|
+
.map(entry => entry.name)
|
|
109
|
+
.sort();
|
|
110
|
+
for (const entry of entries) {
|
|
111
|
+
const name = entry.replace(/\.(yaml|yml)$/u, '');
|
|
112
|
+
if (name in definitions) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const definitionPath = join(compositionsDir, entry);
|
|
116
|
+
definitions[name] = ensurePathWithinRoots(definitionPath, [compositionsDir], `compose definition "${entry}"`);
|
|
117
|
+
}
|
|
104
118
|
}
|
|
105
119
|
return definitions;
|
|
106
120
|
}
|
|
@@ -110,11 +124,9 @@ export function buildFacetSet(params) {
|
|
|
110
124
|
persona: { body: resolved.persona.body, sourcePath: resolved.persona.path },
|
|
111
125
|
policies: resolved.policies.map(policy => ({ body: policy.body, sourcePath: policy.path })),
|
|
112
126
|
knowledge: resolved.knowledge.map(item => ({ body: item.body, sourcePath: item.path })),
|
|
113
|
-
|
|
114
|
-
?
|
|
115
|
-
|
|
116
|
-
: { body: resolved.instruction.body })
|
|
117
|
-
: undefined,
|
|
127
|
+
instructions: resolved.instructions.map(instruction => 'path' in instruction
|
|
128
|
+
? { body: instruction.body, sourcePath: instruction.path }
|
|
129
|
+
: { body: instruction.body }),
|
|
118
130
|
};
|
|
119
131
|
}
|
|
120
132
|
export function buildSkillSections(params) {
|
|
@@ -125,7 +137,7 @@ export function buildSkillSections(params) {
|
|
|
125
137
|
persona: resolved.persona,
|
|
126
138
|
policies: resolved.policies,
|
|
127
139
|
knowledge: resolved.knowledge,
|
|
128
|
-
|
|
140
|
+
instructions: resolved.instructions,
|
|
129
141
|
};
|
|
130
142
|
}
|
|
131
143
|
function makeSkillHeader(definition) {
|
|
@@ -175,16 +187,20 @@ export function renderSkillDocument(input) {
|
|
|
175
187
|
lines.push('');
|
|
176
188
|
}
|
|
177
189
|
}
|
|
178
|
-
if (input.
|
|
179
|
-
lines.push('##
|
|
190
|
+
if (input.instructions.length > 0) {
|
|
191
|
+
lines.push('## Instructions');
|
|
180
192
|
lines.push('');
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
193
|
+
for (const instruction of input.instructions) {
|
|
194
|
+
if (input.mode === 'reference' && hasInstructionPath(instruction)) {
|
|
195
|
+
lines.push(`### ${instruction.ref}`);
|
|
196
|
+
lines.push('');
|
|
197
|
+
lines.push(instruction.path);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
lines.push(instruction.body);
|
|
201
|
+
}
|
|
202
|
+
lines.push('');
|
|
186
203
|
}
|
|
187
|
-
lines.push('');
|
|
188
204
|
}
|
|
189
205
|
return `${lines.join('\n').trimEnd()}\n`;
|
|
190
206
|
}
|