faceted-prompting 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/compose-command.d.ts +2 -2
  3. package/dist/cli/compose-command.d.ts.map +1 -1
  4. package/dist/cli/compose-command.js +15 -145
  5. package/dist/cli/compose-command.js.map +1 -1
  6. package/dist/cli/compose-definition-resolution.d.ts +12 -0
  7. package/dist/cli/compose-definition-resolution.d.ts.map +1 -0
  8. package/dist/cli/compose-definition-resolution.js +50 -0
  9. package/dist/cli/compose-definition-resolution.js.map +1 -0
  10. package/dist/cli/compose-execution.d.ts +18 -0
  11. package/dist/cli/compose-execution.d.ts.map +1 -0
  12. package/dist/cli/compose-execution.js +165 -0
  13. package/dist/cli/compose-execution.js.map +1 -0
  14. package/dist/cli/compose-options.d.ts +4 -0
  15. package/dist/cli/compose-options.d.ts.map +1 -0
  16. package/dist/cli/compose-options.js +64 -0
  17. package/dist/cli/compose-options.js.map +1 -0
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +2 -1
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/cli/install-skill/flow.d.ts +2 -1
  22. package/dist/cli/install-skill/flow.d.ts.map +1 -1
  23. package/dist/cli/install-skill/flow.js +7 -2
  24. package/dist/cli/install-skill/flow.js.map +1 -1
  25. package/dist/cli/install-skill/modes.d.ts +3 -1
  26. package/dist/cli/install-skill/modes.d.ts.map +1 -1
  27. package/dist/cli/install-skill/modes.js +14 -13
  28. package/dist/cli/install-skill/modes.js.map +1 -1
  29. package/dist/cli/install-skill/targets.d.ts +4 -3
  30. package/dist/cli/install-skill/targets.d.ts.map +1 -1
  31. package/dist/cli/install-skill/targets.js +18 -4
  32. package/dist/cli/install-skill/targets.js.map +1 -1
  33. package/dist/cli/path-guard.d.ts +5 -0
  34. package/dist/cli/path-guard.d.ts.map +1 -1
  35. package/dist/cli/path-guard.js +25 -0
  36. package/dist/cli/path-guard.js.map +1 -1
  37. package/dist/cli/skill-commands.d.ts +8 -0
  38. package/dist/cli/skill-commands.d.ts.map +1 -1
  39. package/dist/cli/skill-commands.js +22 -6
  40. package/dist/cli/skill-commands.js.map +1 -1
  41. package/dist/cli/skill-file-ops.d.ts +1 -2
  42. package/dist/cli/skill-file-ops.d.ts.map +1 -1
  43. package/dist/cli/skill-file-ops.js +12 -38
  44. package/dist/cli/skill-file-ops.js.map +1 -1
  45. package/dist/cli/skill-types.d.ts +0 -1
  46. package/dist/cli/skill-types.d.ts.map +1 -1
  47. package/dist/cli/types.d.ts +6 -0
  48. package/dist/cli/types.d.ts.map +1 -1
  49. package/dist/config/index.d.ts +12 -0
  50. package/dist/config/index.d.ts.map +1 -1
  51. package/dist/config/index.js +44 -2
  52. package/dist/config/index.js.map +1 -1
  53. package/dist/config/install-targets.d.ts +6 -0
  54. package/dist/config/install-targets.d.ts.map +1 -0
  55. package/dist/config/install-targets.js +71 -0
  56. package/dist/config/install-targets.js.map +1 -0
  57. package/dist/install-targets.d.ts +2 -0
  58. package/dist/install-targets.d.ts.map +1 -0
  59. package/dist/install-targets.js +2 -0
  60. package/dist/install-targets.js.map +1 -0
  61. package/package.json +1 -1
package/README.md CHANGED
@@ -137,7 +137,7 @@ order:
137
137
 
138
138
  - `name` and `persona` are required.
139
139
  - `order` controls user-message section order (default: `knowledge` → `instructions` → `policies`).
140
- - `instructions` is a list of facet file references.
140
+ - `instructions` is a list of facet names, file paths, or inline text.
141
141
 
142
142
  ## Scope References
143
143
 
@@ -1,3 +1,3 @@
1
- import type { FacetCliOptions, FacetCliResult } from './types.js';
2
- export declare function runComposeCommand(options: FacetCliOptions): Promise<FacetCliResult>;
1
+ import type { ComposeCliOptions, FacetCliOptions, FacetCliResult } from './types.js';
2
+ export declare function runComposeCommand(options: FacetCliOptions, composeOptions: ComposeCliOptions): Promise<FacetCliResult>;
3
3
  //# sourceMappingURL=compose-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose-command.d.ts","sourceRoot":"","sources":["../../src/cli/compose-command.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA8KlE,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BzF"}
1
+ {"version":3,"file":"compose-command.d.ts","sourceRoot":"","sources":["../../src/cli/compose-command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAErF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,iBAAiB,GAChC,OAAO,CAAC,cAAc,CAAC,CAwBzB"}
@@ -1,156 +1,26 @@
1
- import { existsSync, mkdirSync } from 'node:fs';
2
- import { dirname, resolve } from 'node:path';
3
- import { compose } from '../compose.js';
4
- import { loadComposeDefinition } from '../compose-definition.js';
5
- import { formatCombinedOutput, resolveOutputDirectory, writeComposeOutput } from '../output/index.js';
6
- import { buildFacetSet, buildSkillSections, ensureSafeDefinitionName, } from './skill-renderer.js';
7
- import { getSkillPaths, selectCompositionDefinitionPath, } from './skill-commands.js';
8
- import { collectDirectoryFiles, copyDirectoryTree, ensureTemplateDirectoryFromRoots, shouldOverwrite, } from './install-skill/flow.js';
9
- import { applyFacetTokensToFiles, buildInlineFacetTokenValues } from './install-skill/facets.js';
10
- import { ensurePathAncestorsContainNoSymbolicLinks, ensurePathIsNotSymbolicLink } from './path-guard.js';
11
- function buildComposeOutputPlans(params) {
12
- if (params.splitSystem) {
13
- return [
14
- {
15
- fileName: `${params.safeName}.system.md`,
16
- content: `${params.systemPrompt}\n`,
17
- },
18
- {
19
- fileName: `${params.safeName}.user.md`,
20
- content: `${params.userMessage}\n`,
21
- },
22
- ];
23
- }
24
- return [
25
- {
26
- fileName: `${params.safeName}.md`,
27
- content: formatCombinedOutput({
28
- systemPrompt: params.systemPrompt,
29
- userMessage: params.userMessage,
30
- }),
31
- },
32
- ];
33
- }
34
- async function confirmOverwriteForExistingPaths(params) {
35
- if (params.existingPaths.length === 0) {
36
- return false;
37
- }
38
- const overwriteAnswer = await params.options.input(`${params.promptMessage} (${params.existingPaths.join(', ')}) [y/N]`, 'n');
39
- if (!shouldOverwrite(overwriteAnswer)) {
40
- throw new Error(`${params.cancelMessage}: ${params.existingPaths.join(', ')}`);
41
- }
42
- return true;
43
- }
44
- async function runTemplateBackedCompose(params) {
45
- const templateName = params.definition.template;
46
- if (!templateName) {
47
- throw new Error(`Template-backed compose requires template: ${params.definition.name}`);
48
- }
49
- const templateDir = ensureTemplateDirectoryFromRoots(params.facetedRoots, templateName, dirname(params.definitionPath));
50
- const outputInput = await params.options.input('Output directory', params.options.cwd);
51
- const outputDir = resolveOutputDirectory(outputInput, params.options.cwd);
52
- ensurePathIsNotSymbolicLink(outputDir, 'Output directory');
53
- ensurePathAncestorsContainNoSymbolicLinks(outputDir, 'Output directory', params.options.cwd);
54
- mkdirSync(outputDir, { recursive: true });
55
- const templateRelativePaths = collectDirectoryFiles(templateDir);
56
- const templateOutputPaths = templateRelativePaths.map(relativePath => resolve(outputDir, relativePath));
57
- await confirmOverwriteForExistingPaths({
58
- options: params.options,
59
- existingPaths: templateOutputPaths.filter(path => existsSync(path)),
60
- promptMessage: 'Output files exist. Overwrite?',
61
- cancelMessage: 'Output files exist and overwrite was cancelled',
62
- });
63
- copyDirectoryTree(templateDir, outputDir);
64
- const sections = buildSkillSections({
65
- definition: params.definition,
66
- definitionDir: dirname(params.definitionPath),
67
- facetsRoots: params.facetsRoots,
68
- });
69
- applyFacetTokensToFiles({
70
- filePaths: templateOutputPaths.filter(path => existsSync(path)),
71
- tokenValues: buildInlineFacetTokenValues(sections),
72
- rootDir: outputDir,
73
- });
74
- return {
75
- kind: 'path',
76
- path: outputDir,
77
- };
78
- }
79
- async function runStandardCompose(params) {
80
- const safeName = ensureSafeDefinitionName(params.definition.name);
81
- const facetSet = buildFacetSet({
82
- definitionDir: dirname(params.definitionPath),
83
- facetsRoots: params.facetsRoots,
84
- definition: params.definition,
85
- });
86
- const composed = compose(facetSet, {
87
- contextMaxChars: 2000,
88
- userMessageOrder: params.definition.order,
89
- });
90
- const splitSelection = await params.options.select(['Combined (single file)', 'Split (system + user)'], 'Choose output mode with Up/Down and Enter:');
91
- const outputPlans = buildComposeOutputPlans({
92
- safeName,
93
- systemPrompt: composed.systemPrompt,
94
- userMessage: composed.userMessage,
95
- splitSystem: splitSelection === 'Split (system + user)',
96
- });
97
- const outputInput = await params.options.input('Output directory', params.options.cwd);
98
- const outputDir = resolveOutputDirectory(outputInput, params.options.cwd);
99
- const existingPaths = outputPlans
100
- .map(plan => resolve(outputDir, plan.fileName))
101
- .filter(path => existsSync(path));
102
- const overwrite = await confirmOverwriteForExistingPaths({
103
- options: params.options,
104
- existingPaths,
105
- promptMessage: 'Output file exists. Overwrite?',
106
- cancelMessage: 'Output file exists and overwrite was cancelled',
107
- });
108
- const outputPaths = [];
109
- for (const plan of outputPlans) {
110
- outputPaths.push(await writeComposeOutput({
111
- outputDir,
112
- fileName: plan.fileName,
113
- content: plan.content,
114
- overwrite,
115
- }));
116
- }
117
- if (outputPaths.length === 1) {
118
- return {
119
- kind: 'path',
120
- path: outputPaths[0],
121
- };
122
- }
123
- return {
124
- kind: 'paths',
125
- paths: outputPaths,
126
- };
127
- }
128
- export async function runComposeCommand(options) {
129
- const { facetedRoots, facetsRoots, compositionsDirs } = getSkillPaths(options.cwd, options.homeDir);
130
- const localCompositionsDir = facetedRoots.length > 1 ? resolve(facetedRoots[0], 'compositions') : undefined;
131
- const globalCompositionsDir = resolve(facetedRoots[facetedRoots.length - 1], 'compositions');
132
- const { definitionPath } = await selectCompositionDefinitionPath({
1
+ import { resolveComposeDefinition } from './compose-definition-resolution.js';
2
+ import { runStandardCompose, runTemplateBackedCompose } from './compose-execution.js';
3
+ export async function runComposeCommand(options, composeOptions) {
4
+ const resolved = await resolveComposeDefinition({
133
5
  options,
134
- compositionDefinitionDirs: compositionsDirs,
135
- localCompositionsDir,
136
- globalCompositionsDir,
137
- cancelAction: 'Compose',
6
+ composeOptions,
138
7
  });
139
- const definition = await loadComposeDefinition(definitionPath);
140
- if (definition.template) {
8
+ if (resolved.definition.template) {
141
9
  return runTemplateBackedCompose({
142
10
  options,
143
- facetedRoots,
144
- facetsRoots,
145
- definitionPath,
146
- definition,
11
+ facetedRoots: resolved.facetedRoots,
12
+ facetsRoots: resolved.facetsRoots,
13
+ definitionPath: resolved.definitionPath,
14
+ definition: resolved.definition,
15
+ composeOptions,
147
16
  });
148
17
  }
149
18
  return runStandardCompose({
150
19
  options,
151
- facetsRoots,
152
- definitionPath,
153
- definition,
20
+ facetsRoots: resolved.facetsRoots,
21
+ definitionPath: resolved.definitionPath,
22
+ definition: resolved.definition,
23
+ composeOptions,
154
24
  });
155
25
  }
156
26
  //# sourceMappingURL=compose-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose-command.js","sourceRoot":"","sources":["../../src/cli/compose-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose-command.js","sourceRoot":"","sources":["../../src/cli/compose-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAwB,EACxB,cAAiC;IAEjC,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC;QAC9C,OAAO;QACP,cAAc;KACf,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,wBAAwB,CAAC;YAC9B,OAAO;YACP,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,kBAAkB,CAAC;QACxB,OAAO;QACP,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,cAAc;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ComposeDefinition } from '../types.js';
2
+ import type { ComposeCliOptions, FacetCliOptions } from './types.js';
3
+ export declare function resolveComposeDefinition(params: {
4
+ options: FacetCliOptions;
5
+ composeOptions: ComposeCliOptions;
6
+ }): Promise<{
7
+ facetedRoots: readonly string[];
8
+ facetsRoots: readonly string[];
9
+ definitionPath: string;
10
+ definition: ComposeDefinition;
11
+ }>;
12
+ //# sourceMappingURL=compose-definition-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-definition-resolution.d.ts","sourceRoot":"","sources":["../../src/cli/compose-definition-resolution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA0BrE,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,iBAAiB,CAAC;CACnC,GAAG,OAAO,CAAC;IACV,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CAAC,CAqCD"}
@@ -0,0 +1,50 @@
1
+ import { loadComposeDefinition } from '../compose-definition.js';
2
+ import { isNonInteractiveMode } from './compose-options.js';
3
+ import { getSkillPaths, resolveCompositionDefinitionPathByName, selectCompositionDefinitionPath } from './skill-commands.js';
4
+ function requireCompositionName(composeOptions) {
5
+ if (!composeOptions.composition) {
6
+ throw new Error('Non-interactive compose requires --composition');
7
+ }
8
+ return composeOptions.composition;
9
+ }
10
+ function validateNonInteractiveComposeOptions(params) {
11
+ if (params.definition.template) {
12
+ if (params.composeOptions.outputMode) {
13
+ throw new Error('Template-backed compose does not support --split or --combined');
14
+ }
15
+ return;
16
+ }
17
+ if (!params.composeOptions.outputMode) {
18
+ throw new Error('Non-interactive standard compose requires --split or --combined');
19
+ }
20
+ }
21
+ export async function resolveComposeDefinition(params) {
22
+ const { facetedRoots, facetsRoots, compositionsDirs, localCompositionsDir, globalCompositionsDir, } = getSkillPaths(params.options.cwd, params.options.homeDir);
23
+ const nonInteractive = isNonInteractiveMode(params.composeOptions);
24
+ const definitionPath = nonInteractive
25
+ ? resolveCompositionDefinitionPathByName({
26
+ compositionName: requireCompositionName(params.composeOptions),
27
+ compositionDefinitionDirs: compositionsDirs,
28
+ }).definitionPath
29
+ : (await selectCompositionDefinitionPath({
30
+ options: params.options,
31
+ compositionDefinitionDirs: compositionsDirs,
32
+ localCompositionsDir,
33
+ globalCompositionsDir,
34
+ cancelAction: 'Compose',
35
+ })).definitionPath;
36
+ const definition = await loadComposeDefinition(definitionPath);
37
+ if (nonInteractive) {
38
+ validateNonInteractiveComposeOptions({
39
+ composeOptions: params.composeOptions,
40
+ definition,
41
+ });
42
+ }
43
+ return {
44
+ facetedRoots,
45
+ facetsRoots,
46
+ definitionPath,
47
+ definition,
48
+ };
49
+ }
50
+ //# sourceMappingURL=compose-definition-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-definition-resolution.js","sourceRoot":"","sources":["../../src/cli/compose-definition-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,sCAAsC,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAG7H,SAAS,sBAAsB,CAAC,cAAiC;IAC/D,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,cAAc,CAAC,WAAW,CAAC;AACpC,CAAC;AAED,SAAS,oCAAoC,CAAC,MAG7C;IACC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAG9C;IAMC,MAAM,EACJ,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnE,MAAM,cAAc,GAAG,cAAc;QACnC,CAAC,CAAC,sCAAsC,CAAC;YACvC,eAAe,EAAE,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC;YAC9D,yBAAyB,EAAE,gBAAgB;SAC5C,CAAC,CAAC,cAAc;QACjB,CAAC,CAAC,CAAC,MAAM,+BAA+B,CAAC;YACvC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,yBAAyB,EAAE,gBAAgB;YAC3C,oBAAoB;YACpB,qBAAqB;YACrB,YAAY,EAAE,SAAS;SACxB,CAAC,CAAC,CAAC,cAAc,CAAC;IAErB,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,cAAc,EAAE,CAAC;QACnB,oCAAoC,CAAC;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,YAAY;QACZ,WAAW;QACX,cAAc;QACd,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ComposeDefinition } from '../types.js';
2
+ import type { ComposeCliOptions, FacetCliOptions, FacetCliResult } from './types.js';
3
+ export declare function runTemplateBackedCompose(params: {
4
+ options: FacetCliOptions;
5
+ facetedRoots: readonly string[];
6
+ facetsRoots: readonly string[];
7
+ definitionPath: string;
8
+ definition: ComposeDefinition;
9
+ composeOptions: ComposeCliOptions;
10
+ }): Promise<FacetCliResult>;
11
+ export declare function runStandardCompose(params: {
12
+ options: FacetCliOptions;
13
+ facetsRoots: readonly string[];
14
+ definitionPath: string;
15
+ definition: ComposeDefinition;
16
+ composeOptions: ComposeCliOptions;
17
+ }): Promise<FacetCliResult>;
18
+ //# sourceMappingURL=compose-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-execution.d.ts","sourceRoot":"","sources":["../../src/cli/compose-execution.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAuFrF,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,cAAc,EAAE,iBAAiB,CAAC;CACnC,GAAG,OAAO,CAAC,cAAc,CAAC,CAkD1B;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,cAAc,EAAE,iBAAiB,CAAC;CACnC,GAAG,OAAO,CAAC,cAAc,CAAC,CAsE1B"}
@@ -0,0 +1,165 @@
1
+ import { existsSync, mkdirSync } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { compose } from '../compose.js';
4
+ import { formatCombinedOutput, resolveOutputDirectory, writeComposeOutput } from '../output/index.js';
5
+ import { isNonInteractiveMode } from './compose-options.js';
6
+ import { buildFacetSet, buildSkillSections, ensureSafeDefinitionName, } from './skill-renderer.js';
7
+ import { collectDirectoryFiles, copyDirectoryTree, ensureTemplateDirectoryFromRoots, shouldOverwrite, } from './install-skill/flow.js';
8
+ import { applyFacetTokensToFiles, buildInlineFacetTokenValues } from './install-skill/facets.js';
9
+ import { ensurePathAncestorsContainNoSymbolicLinks, ensurePathIsNotSymbolicLink } from './path-guard.js';
10
+ function buildComposeOutputPlans(params) {
11
+ if (params.splitSystem) {
12
+ return [
13
+ {
14
+ fileName: `${params.safeName}.system.md`,
15
+ content: `${params.systemPrompt}\n`,
16
+ },
17
+ {
18
+ fileName: `${params.safeName}.user.md`,
19
+ content: `${params.userMessage}\n`,
20
+ },
21
+ ];
22
+ }
23
+ return [
24
+ {
25
+ fileName: `${params.safeName}.md`,
26
+ content: formatCombinedOutput({
27
+ systemPrompt: params.systemPrompt,
28
+ userMessage: params.userMessage,
29
+ }),
30
+ },
31
+ ];
32
+ }
33
+ async function confirmOverwriteForExistingPaths(params) {
34
+ if (params.existingPaths.length === 0) {
35
+ return false;
36
+ }
37
+ const overwriteAnswer = await params.options.input(`${params.promptMessage} (${params.existingPaths.join(', ')}) [y/N]`, 'n');
38
+ if (!shouldOverwrite(overwriteAnswer)) {
39
+ throw new Error(`${params.cancelMessage}: ${params.existingPaths.join(', ')}`);
40
+ }
41
+ return true;
42
+ }
43
+ function resolveOutputDir(params) {
44
+ const outputDir = resolveOutputDirectory(params.output, params.cwd);
45
+ ensurePathIsNotSymbolicLink(outputDir, 'Output directory');
46
+ ensurePathAncestorsContainNoSymbolicLinks(outputDir, 'Output directory', params.cwd);
47
+ mkdirSync(outputDir, { recursive: true });
48
+ return outputDir;
49
+ }
50
+ async function resolveComposeOutputDir(params) {
51
+ const outputInput = params.composeOptions.output ?? (isNonInteractiveMode(params.composeOptions)
52
+ ? params.options.cwd
53
+ : await params.options.input('Output directory', params.options.cwd));
54
+ return resolveOutputDir({
55
+ output: outputInput,
56
+ cwd: params.options.cwd,
57
+ });
58
+ }
59
+ export async function runTemplateBackedCompose(params) {
60
+ const templateName = params.definition.template;
61
+ if (!templateName) {
62
+ throw new Error(`Template-backed compose requires template: ${params.definition.name}`);
63
+ }
64
+ const templateDir = ensureTemplateDirectoryFromRoots(params.facetedRoots, templateName, dirname(params.definitionPath));
65
+ const nonInteractive = isNonInteractiveMode(params.composeOptions);
66
+ const outputDir = await resolveComposeOutputDir({
67
+ options: params.options,
68
+ composeOptions: params.composeOptions,
69
+ });
70
+ const templateRelativePaths = collectDirectoryFiles(templateDir);
71
+ const templateOutputPaths = templateRelativePaths.map(relativePath => resolve(outputDir, relativePath));
72
+ const existingPaths = templateOutputPaths.filter(path => existsSync(path));
73
+ if (params.composeOptions.overwrite !== true) {
74
+ if (nonInteractive) {
75
+ if (existingPaths.length > 0) {
76
+ throw new Error(`Output files exist and overwrite was cancelled: ${existingPaths.join(', ')}`);
77
+ }
78
+ }
79
+ else {
80
+ await confirmOverwriteForExistingPaths({
81
+ options: params.options,
82
+ existingPaths,
83
+ promptMessage: 'Output files exist. Overwrite?',
84
+ cancelMessage: 'Output files exist and overwrite was cancelled',
85
+ });
86
+ }
87
+ }
88
+ copyDirectoryTree(templateDir, outputDir);
89
+ const sections = buildSkillSections({
90
+ definition: params.definition,
91
+ definitionDir: dirname(params.definitionPath),
92
+ facetsRoots: params.facetsRoots,
93
+ });
94
+ applyFacetTokensToFiles({
95
+ filePaths: templateOutputPaths.filter(path => existsSync(path)),
96
+ tokenValues: buildInlineFacetTokenValues(sections),
97
+ rootDir: outputDir,
98
+ });
99
+ return {
100
+ kind: 'path',
101
+ path: outputDir,
102
+ };
103
+ }
104
+ export async function runStandardCompose(params) {
105
+ const safeName = ensureSafeDefinitionName(params.definition.name);
106
+ const facetSet = buildFacetSet({
107
+ definitionDir: dirname(params.definitionPath),
108
+ facetsRoots: params.facetsRoots,
109
+ definition: params.definition,
110
+ });
111
+ const composed = compose(facetSet, {
112
+ contextMaxChars: 2000,
113
+ userMessageOrder: params.definition.order,
114
+ });
115
+ const nonInteractive = isNonInteractiveMode(params.composeOptions);
116
+ const splitSelection = params.composeOptions.outputMode
117
+ ? (params.composeOptions.outputMode === 'split' ? 'Split (system + user)' : 'Combined (single file)')
118
+ : await params.options.select(['Combined (single file)', 'Split (system + user)'], 'Choose output mode with Up/Down and Enter:');
119
+ const outputPlans = buildComposeOutputPlans({
120
+ safeName,
121
+ systemPrompt: composed.systemPrompt,
122
+ userMessage: composed.userMessage,
123
+ splitSystem: splitSelection === 'Split (system + user)',
124
+ });
125
+ const outputDir = await resolveComposeOutputDir({
126
+ options: params.options,
127
+ composeOptions: params.composeOptions,
128
+ });
129
+ const existingPaths = outputPlans
130
+ .map(plan => resolve(outputDir, plan.fileName))
131
+ .filter(path => existsSync(path));
132
+ const overwrite = params.composeOptions.overwrite === true
133
+ ? true
134
+ : nonInteractive
135
+ ? false
136
+ : await confirmOverwriteForExistingPaths({
137
+ options: params.options,
138
+ existingPaths,
139
+ promptMessage: 'Output file exists. Overwrite?',
140
+ cancelMessage: 'Output file exists and overwrite was cancelled',
141
+ });
142
+ if (!overwrite && existingPaths.length > 0) {
143
+ throw new Error(`Output file exists and overwrite was cancelled: ${existingPaths.join(', ')}`);
144
+ }
145
+ const outputPaths = [];
146
+ for (const plan of outputPlans) {
147
+ outputPaths.push(await writeComposeOutput({
148
+ outputDir,
149
+ fileName: plan.fileName,
150
+ content: plan.content,
151
+ overwrite,
152
+ }));
153
+ }
154
+ if (outputPaths.length === 1) {
155
+ return {
156
+ kind: 'path',
157
+ path: outputPaths[0],
158
+ };
159
+ }
160
+ return {
161
+ kind: 'paths',
162
+ paths: outputPaths,
163
+ };
164
+ }
165
+ //# sourceMappingURL=compose-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-execution.js","sourceRoot":"","sources":["../../src/cli/compose-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ComposeCliOptions } from './types.js';
2
+ export declare function parseComposeOptions(args: readonly string[]): ComposeCliOptions;
3
+ export declare function isNonInteractiveMode(options: ComposeCliOptions): boolean;
4
+ //# sourceMappingURL=compose-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-options.d.ts","sourceRoot":"","sources":["../../src/cli/compose-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAcpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,CA0D9E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAKxE"}
@@ -0,0 +1,64 @@
1
+ function requireOptionValue(args, index, optionName) {
2
+ const value = args[index + 1];
3
+ if (!value || value.startsWith('--')) {
4
+ throw new Error(`Missing value for ${optionName}`);
5
+ }
6
+ return value;
7
+ }
8
+ export function parseComposeOptions(args) {
9
+ let composition;
10
+ let outputMode;
11
+ let output;
12
+ let overwrite = false;
13
+ for (let index = 0; index < args.length; index += 1) {
14
+ const arg = args[index];
15
+ if (arg === undefined) {
16
+ throw new Error('Unsupported compose argument: undefined');
17
+ }
18
+ if (arg === '--composition') {
19
+ composition = requireOptionValue(args, index, '--composition');
20
+ index += 1;
21
+ continue;
22
+ }
23
+ if (arg === '--output') {
24
+ output = requireOptionValue(args, index, '--output');
25
+ index += 1;
26
+ continue;
27
+ }
28
+ if (arg === '--split') {
29
+ if (outputMode === 'combined') {
30
+ throw new Error('Cannot specify both --split and --combined');
31
+ }
32
+ outputMode = 'split';
33
+ continue;
34
+ }
35
+ if (arg === '--combined') {
36
+ if (outputMode === 'split') {
37
+ throw new Error('Cannot specify both --split and --combined');
38
+ }
39
+ outputMode = 'combined';
40
+ continue;
41
+ }
42
+ if (arg === '--overwrite') {
43
+ overwrite = true;
44
+ continue;
45
+ }
46
+ if (arg.startsWith('--')) {
47
+ throw new Error(`Unsupported compose option: ${arg}`);
48
+ }
49
+ throw new Error(`Unsupported compose argument: ${arg}`);
50
+ }
51
+ return {
52
+ composition,
53
+ outputMode,
54
+ output,
55
+ overwrite: overwrite || undefined,
56
+ };
57
+ }
58
+ export function isNonInteractiveMode(options) {
59
+ return options.composition !== undefined
60
+ || options.outputMode !== undefined
61
+ || options.output !== undefined
62
+ || options.overwrite === true;
63
+ }
64
+ //# sourceMappingURL=compose-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-options.js","sourceRoot":"","sources":["../../src/cli/compose-options.ts"],"names":[],"mappings":"AAEA,SAAS,kBAAkB,CACzB,IAAuB,EACvB,KAAa,EACb,UAAwC;IAExC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,IAAI,WAA+B,CAAC;IACpC,IAAI,UAA2C,CAAC;IAChD,IAAI,MAA0B,CAAC;IAC/B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;YAC/D,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YACrD,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YACD,UAAU,GAAG,OAAO,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YACD,UAAU,GAAG,UAAU,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,WAAW;QACX,UAAU;QACV,MAAM;QACN,SAAS,EAAE,SAAS,IAAI,SAAS;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,OAAO,OAAO,CAAC,WAAW,KAAK,SAAS;WACnC,OAAO,CAAC,UAAU,KAAK,SAAS;WAChC,OAAO,CAAC,MAAM,KAAK,SAAS;WAC5B,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;AAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2BlE,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CA4DzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2BlE,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CA4DzB"}
package/dist/cli/index.js CHANGED
@@ -2,6 +2,7 @@ import { existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import { initializeGlobalFaceted, initializeLocalFaceted, listPullSampleTargetPaths, pullSampleFacets, } from '../init/index.js';
4
4
  import { runComposeCommand, } from './compose-command.js';
5
+ import { parseComposeOptions } from './compose-options.js';
5
6
  import { runInstallSkillCommand, } from './skill-commands.js';
6
7
  import { shouldOverwrite } from './install-skill/flow.js';
7
8
  const USAGE = [
@@ -65,7 +66,7 @@ export async function runFacetCli(args, options) {
65
66
  throw new Error(`Unsupported command: ${command}`);
66
67
  }
67
68
  if (command === 'compose') {
68
- return runComposeCommand(options);
69
+ return runComposeCommand(options, parseComposeOptions(args.slice(1)));
69
70
  }
70
71
  if (command === 'install') {
71
72
  ensureSkillSubcommand(command, subcommand);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,KAAK,GAAG;IACZ,wBAAwB;IACxB,EAAE;IACF,WAAW;IACX,2EAA2E;IAC3E,2FAA2F;IAC3F,sEAAsE;IACtE,0DAA0D;IAC1D,2DAA2D;CAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,aAAa,CAAC,OAA2B;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe,EAAE,UAA8B;IAC5E,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAc,EACd,OAAwB;IAExB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,sBAAsB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnD,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,gBAAgB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;aACzD,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,0CAA0C,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;aACvF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrG,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,KAAK,CACzC,yDAAyD,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAC7F,GAAG,CACJ,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,kBAAkB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;SAC/D,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { FacetCliOptions } from '../types.js';
2
- export { defaultOutputPath, listInstallTargets, resolveInstallTarget } from './targets.js';
2
+ export { defaultOutputPath, listInstallTargets, resolveInstallTarget, resolveInstallTargetRoots, } from './targets.js';
3
3
  export declare function shouldOverwrite(answer: string): boolean;
4
4
  export declare function ensureTemplateDirectoryFromRoots(facetedRoots: readonly string[], templateRef: string, definitionDir?: string): string;
5
5
  export declare function copyDirectoryTree(sourceDir: string, targetDir: string, rootTargetDir?: string): void;
@@ -9,5 +9,6 @@ export declare function ensureRegenerationTargetDir(params: {
9
9
  options: FacetCliOptions;
10
10
  promptLabel: string;
11
11
  homeDir?: string;
12
+ allowedRoots?: readonly string[];
12
13
  }): Promise<void>;
13
14
  //# sourceMappingURL=flow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/cli/install-skill/flow.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE3F,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAmCR;AAgGD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,SAAY,GAAG,IAAI,CASvG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,EAAE,CAsB1E;AAiBD,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBhB"}
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/cli/install-skill/flow.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAmCR;AAgGD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,SAAY,GAAG,IAAI,CASvG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,EAAE,CAsB1E;AAuBD,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhB"}