skill-flow 1.0.5 → 1.0.7
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 +1 -1
- package/dist/cli.js +45 -11
- package/dist/cli.js.map +1 -1
- package/dist/domain/types.d.ts +13 -0
- package/dist/services/config-coordinator.js +3 -1
- package/dist/services/config-coordinator.js.map +1 -1
- package/dist/services/inventory-service.d.ts +1 -0
- package/dist/services/inventory-service.js +42 -21
- package/dist/services/inventory-service.js.map +1 -1
- package/dist/services/skill-flow.d.ts +19 -2
- package/dist/services/skill-flow.js +177 -25
- package/dist/services/skill-flow.js.map +1 -1
- package/dist/services/source-service.d.ts +4 -1
- package/dist/services/source-service.js +83 -17
- package/dist/services/source-service.js.map +1 -1
- package/dist/tests/add-flow-model.test.d.ts +1 -0
- package/dist/tests/add-flow-model.test.js +108 -0
- package/dist/tests/add-flow-model.test.js.map +1 -0
- package/dist/tests/add-flow-ui.test.d.ts +1 -0
- package/dist/tests/add-flow-ui.test.js +16 -0
- package/dist/tests/add-flow-ui.test.js.map +1 -0
- package/dist/tests/add-prepare-flow.test.d.ts +1 -0
- package/dist/tests/add-prepare-flow.test.js +166 -0
- package/dist/tests/add-prepare-flow.test.js.map +1 -0
- package/dist/tests/add-selection-and-find-command.test.d.ts +1 -0
- package/dist/tests/add-selection-and-find-command.test.js +89 -0
- package/dist/tests/add-selection-and-find-command.test.js.map +1 -0
- package/dist/tests/config-coordinator.test.js +47 -0
- package/dist/tests/config-coordinator.test.js.map +1 -1
- package/dist/tests/config-integration.test.js +2 -0
- package/dist/tests/config-integration.test.js.map +1 -1
- package/dist/tests/config-ui-utils.test.js +142 -8
- package/dist/tests/config-ui-utils.test.js.map +1 -1
- package/dist/tests/inventory-service-precedence.test.d.ts +1 -0
- package/dist/tests/inventory-service-precedence.test.js +42 -0
- package/dist/tests/inventory-service-precedence.test.js.map +1 -0
- package/dist/tests/source-parsing-compatibility.test.d.ts +1 -0
- package/dist/tests/source-parsing-compatibility.test.js +71 -0
- package/dist/tests/source-parsing-compatibility.test.js.map +1 -0
- package/dist/tui/add-flow-model.d.ts +62 -0
- package/dist/tui/add-flow-model.js +206 -0
- package/dist/tui/add-flow-model.js.map +1 -0
- package/dist/tui/add-flow.d.ts +25 -0
- package/dist/tui/add-flow.js +533 -0
- package/dist/tui/add-flow.js.map +1 -0
- package/dist/tui/config-app.d.ts +11 -3
- package/dist/tui/config-app.js +78 -73
- package/dist/tui/config-app.js.map +1 -1
- package/dist/tui/find-app.js +44 -43
- package/dist/tui/find-app.js.map +1 -1
- package/dist/utils/find-command.js +10 -2
- package/dist/utils/find-command.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ skill-flow uninstall my-source-id
|
|
|
87
87
|
|
|
88
88
|
`add <source>` supports local paths, `owner/repo`, full https/ssh Git URLs, GitHub tree URLs, and `clawhub:<slug>[@version]`.
|
|
89
89
|
|
|
90
|
-
By default, `add` preselects all discovered skills and all detected agent targets. When `--path <repoSubpath>` is provided, the full repo is still imported, but only skills under that path are preselected.
|
|
90
|
+
By default, `add` preselects all discovered skills and all detected agent targets. When `--path <repoSubpath>` is provided, the full repo is still imported, but only skills under that path are preselected. `--path` values are normalized, so `./skills/` and `skills/` behave the same, and the CLI prints a preselection warning when the import only scopes the default selection.
|
|
91
91
|
|
|
92
92
|
Examples:
|
|
93
93
|
|
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@ import packageJson from "../package.json" with { type: "json" };
|
|
|
6
6
|
import { SkillFlowApp } from "./services/skill-flow.js";
|
|
7
7
|
import { ConfigBootstrapApp } from "./tui/config-app.js";
|
|
8
8
|
import { FindApp } from "./tui/find-app.js";
|
|
9
|
+
import { AddFlowApp, runAddFlowNonInteractive } from "./tui/add-flow.js";
|
|
9
10
|
import { formatGroupRef } from "./utils/naming.js";
|
|
10
11
|
import { formatActionSummary, formatDoctorIssue, formatWorkflowList, } from "./utils/format.js";
|
|
11
12
|
import { resolveAddSourceLocator } from "./utils/cli.js";
|
|
@@ -21,6 +22,10 @@ program
|
|
|
21
22
|
.argument("<source>", "Source locator")
|
|
22
23
|
.option("--path <repoSubpath>", "Filter Git sources to a specific repo subpath")
|
|
23
24
|
.option("--from <catalog>", "Interpret source using a named catalog")
|
|
25
|
+
.option("--skill <id>", "Enable a specific skill selector", collectOption, [])
|
|
26
|
+
.option("--agent <target>", "Enable a specific deployment target", collectOption, [])
|
|
27
|
+
.option("--yes", "Skip prompts and use default selections")
|
|
28
|
+
.option("--all", "Enable all discovered skills and all detected targets")
|
|
24
29
|
.action(async (source, options) => {
|
|
25
30
|
let resolvedSource;
|
|
26
31
|
try {
|
|
@@ -31,19 +36,21 @@ program
|
|
|
31
36
|
process.exitCode = 1;
|
|
32
37
|
return;
|
|
33
38
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
const request = {
|
|
40
|
+
locator: resolvedSource,
|
|
41
|
+
...(options.path ? { path: options.path } : {}),
|
|
42
|
+
...(options.skill?.length ? { requestedSkills: options.skill } : {}),
|
|
43
|
+
...(options.agent?.length ? { requestedAgents: options.agent } : {}),
|
|
44
|
+
...(options.yes ? { yes: true } : {}),
|
|
45
|
+
...(options.all ? { all: true } : {}),
|
|
46
|
+
};
|
|
47
|
+
if (options.all || options.yes) {
|
|
48
|
+
const result = await runAddFlowNonInteractive(app, request);
|
|
49
|
+
handleAddFlowResult(result);
|
|
38
50
|
return;
|
|
39
51
|
}
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
const duplicateSummary = duplicateSkipCount > 0
|
|
43
|
-
? `, skipped ${duplicateSkipCount} duplicate skill${duplicateSkipCount === 1 ? "" : "s"}`
|
|
44
|
-
: "";
|
|
45
|
-
console.log(`Added ${formatGroupRef(result.data.manifest)} with ${result.data.leafCount} valid skills${duplicateSummary}.`);
|
|
46
|
-
printWarnings(visibleWarnings.map((warning) => warning.message));
|
|
52
|
+
const result = await runRenderedAddFlow(app, request);
|
|
53
|
+
handleAddFlowResult(result, { rendered: true });
|
|
47
54
|
});
|
|
48
55
|
program.command("list").action(async () => {
|
|
49
56
|
const result = await app.listWorkflows();
|
|
@@ -189,4 +196,31 @@ function printWarnings(messages) {
|
|
|
189
196
|
console.warn(`warning: ${message}`);
|
|
190
197
|
}
|
|
191
198
|
}
|
|
199
|
+
async function runRenderedAddFlow(app, request) {
|
|
200
|
+
return new Promise((resolve) => {
|
|
201
|
+
const instance = render(_jsx(AddFlowApp, { app: app, request: request, onExit: (result) => {
|
|
202
|
+
resolve(result);
|
|
203
|
+
instance.unmount();
|
|
204
|
+
} }));
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function handleAddFlowResult(result, options) {
|
|
208
|
+
if (result.status === "applied") {
|
|
209
|
+
if (!options?.rendered) {
|
|
210
|
+
console.log(result.message);
|
|
211
|
+
}
|
|
212
|
+
printWarnings(result.warnings);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (result.status === "cancelled") {
|
|
216
|
+
console.log(result.message);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
printErrors([{ message: result.message }]);
|
|
220
|
+
printWarnings(result.warnings ?? []);
|
|
221
|
+
process.exitCode = 1;
|
|
222
|
+
}
|
|
223
|
+
function collectOption(value, previous) {
|
|
224
|
+
return [...previous, value];
|
|
225
|
+
}
|
|
192
226
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";;AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAEjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;AAE/B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,sBAAsB,EAAE,+CAA+C,CAAC;KAC/E,MAAM,CAAC,kBAAkB,EAAE,wCAAwC,CAAC;KACpE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":"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"}
|
package/dist/domain/types.d.ts
CHANGED
|
@@ -37,12 +37,25 @@ export type TargetBinding = {
|
|
|
37
37
|
leafIds: string[];
|
|
38
38
|
};
|
|
39
39
|
export type SourceBinding = {
|
|
40
|
+
selectedLeafIds?: string[];
|
|
40
41
|
targets: Partial<Record<DeploymentTargetName, TargetBinding>>;
|
|
41
42
|
};
|
|
42
43
|
export type DraftBinding = {
|
|
43
44
|
enabledTargets: DeploymentTargetName[];
|
|
44
45
|
selectedLeafIds: string[];
|
|
45
46
|
};
|
|
47
|
+
export type AddSourceDraftOptions = {
|
|
48
|
+
skillNames?: string[];
|
|
49
|
+
agentTargets?: DeploymentTargetName[];
|
|
50
|
+
draft?: DraftBinding;
|
|
51
|
+
skipTargetDetection?: boolean;
|
|
52
|
+
};
|
|
53
|
+
export type AddSourcePreparation = {
|
|
54
|
+
sourceId: string;
|
|
55
|
+
availableTargets: DeploymentTargetName[];
|
|
56
|
+
draft: DraftBinding;
|
|
57
|
+
leafs: LeafRecord[];
|
|
58
|
+
};
|
|
46
59
|
export type Manifest = {
|
|
47
60
|
schemaVersion: 1;
|
|
48
61
|
sources: SourceManifestRecord[];
|
|
@@ -73,7 +73,9 @@ function buildInitialDrafts(summaries) {
|
|
|
73
73
|
.filter(([, value]) => value?.enabled)
|
|
74
74
|
.map(([target]) => target);
|
|
75
75
|
const selectedLeafIds = [
|
|
76
|
-
...new Set(
|
|
76
|
+
...new Set((summary.bindings.selectedLeafIds && summary.bindings.selectedLeafIds.length > 0
|
|
77
|
+
? summary.bindings.selectedLeafIds
|
|
78
|
+
: enabledTargets.flatMap((target) => summary.bindings.targets[target]?.leafIds ?? []))),
|
|
77
79
|
];
|
|
78
80
|
return [summary.source.id, { enabledTargets, selectedLeafIds }];
|
|
79
81
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-coordinator.js","sourceRoot":"","sources":["../../src/services/config-coordinator.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAmC9C,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,IAA2B;QAA3B,SAAI,GAAJ,IAAI,CAAuB;IAAG,CAAC;IAE5D,KAAK,CAAC,uBAAuB,CAC3B,OAAyC;QAEzC,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,sCAAsC;SAChD,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,CAAC;gBACR,KAAK,EAAE,iBAAiB;gBACxB,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,WAAW,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,iBAAiB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAqB;aAClJ,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,oBAAoB;YAC3B,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAC7C,UAAU,CAAC,IAAI,CAAC,QAAQ,EACxB,UAAU,CAAC,IAAI,CAAC,QAAQ,CACzB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,8BAA8B;SACxC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CACtD,UAAU,CAAC,IAAI,CAAC,QAAQ,EACxB,UAAU,CAAC,IAAI,CAAC,QAAQ,EACxB,KAAK,CAAC,IAAI,CACX,CAAC;QACF,MAAM,UAAU,GAAqB;YACnC,KAAK,EAAE,SAAS;YAChB,gBAAgB,EAAE,EAAE;YACpB,aAAa,EAAE,EAAE;SAClB,CAAC;QACF,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,4BAA4B;SACtC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;YACR,gBAAgB;YAChB,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ;YAClC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ;YAClC,SAAS;YACT,aAAa,EAAE,kBAAkB,CAAC,SAAS,CAAC;YAC5C,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,SAA4B;IACtD,OAAO,MAAM,CAAC,WAAW,CACvB,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACxB,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;aAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAmC,CAAC;QAC/D,MAAM,eAAe,GAAG;YACtB,GAAG,IAAI,GAAG,CACR,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"config-coordinator.js","sourceRoot":"","sources":["../../src/services/config-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export declare class InventoryService {
|
|
|
9
9
|
private static readonly IGNORED_DIRECTORIES;
|
|
10
10
|
scanSource(sourceId: string, checkoutPath: string, rootLinkName?: string): Promise<InventoryScan>;
|
|
11
11
|
private findSkillFiles;
|
|
12
|
+
private walkSkillTree;
|
|
12
13
|
private parseSkillFile;
|
|
13
14
|
private dedupeCandidates;
|
|
14
15
|
private parseFrontmatter;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { hashDirectory, slugify } from "../utils/fs.js";
|
|
3
|
+
import { hashDirectory, pathExists, slugify } from "../utils/fs.js";
|
|
4
4
|
export class InventoryService {
|
|
5
5
|
static IGNORED_DIRECTORIES = new Set([
|
|
6
6
|
".git",
|
|
@@ -56,32 +56,53 @@ export class InventoryService {
|
|
|
56
56
|
}
|
|
57
57
|
async findSkillFiles(rootPath) {
|
|
58
58
|
const discovered = [];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
const seen = new Set();
|
|
60
|
+
const rootSkillPath = path.join(rootPath, "SKILL.md");
|
|
61
|
+
if (await pathExists(rootSkillPath)) {
|
|
62
|
+
discovered.push(rootSkillPath);
|
|
63
|
+
seen.add(rootSkillPath);
|
|
64
|
+
}
|
|
65
|
+
await this.walkSkillTree(path.join(rootPath, "skills"), discovered, seen, false);
|
|
66
|
+
await this.walkSkillTree(path.join(rootPath, "skills", ".curated"), discovered, seen, true);
|
|
67
|
+
await this.walkSkillTree(path.join(rootPath, "skills", ".experimental"), discovered, seen, true);
|
|
68
|
+
await this.walkSkillTree(path.join(rootPath, "skills", ".system"), discovered, seen, true);
|
|
69
|
+
await this.walkSkillTree(rootPath, discovered, seen, true);
|
|
70
|
+
return discovered;
|
|
71
|
+
}
|
|
72
|
+
async walkSkillTree(currentPath, discovered, seen, includeHiddenDirectories) {
|
|
73
|
+
if (!(await pathExists(currentPath))) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
77
|
+
const files = entries
|
|
78
|
+
.filter((entry) => entry.isFile())
|
|
79
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
80
|
+
const visibleDirectories = entries
|
|
81
|
+
.filter((entry) => entry.isDirectory() &&
|
|
82
|
+
!InventoryService.IGNORED_DIRECTORIES.has(entry.name) &&
|
|
83
|
+
!entry.name.startsWith("."))
|
|
84
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
85
|
+
const hiddenDirectories = includeHiddenDirectories
|
|
86
|
+
? entries
|
|
70
87
|
.filter((entry) => entry.isDirectory() &&
|
|
71
88
|
!InventoryService.IGNORED_DIRECTORIES.has(entry.name) &&
|
|
72
89
|
entry.name.startsWith("."))
|
|
73
|
-
.sort((left, right) => left.name.localeCompare(right.name))
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
90
|
+
.sort((left, right) => left.name.localeCompare(right.name))
|
|
91
|
+
: [];
|
|
92
|
+
for (const entry of files) {
|
|
93
|
+
if (entry.name !== "SKILL.md") {
|
|
94
|
+
continue;
|
|
78
95
|
}
|
|
79
|
-
|
|
80
|
-
|
|
96
|
+
const skillFilePath = path.join(currentPath, entry.name);
|
|
97
|
+
if (seen.has(skillFilePath)) {
|
|
98
|
+
continue;
|
|
81
99
|
}
|
|
100
|
+
seen.add(skillFilePath);
|
|
101
|
+
discovered.push(skillFilePath);
|
|
102
|
+
}
|
|
103
|
+
for (const entry of [...visibleDirectories, ...hiddenDirectories]) {
|
|
104
|
+
await this.walkSkillTree(path.join(currentPath, entry.name), discovered, seen, includeHiddenDirectories);
|
|
82
105
|
}
|
|
83
|
-
await walk(rootPath);
|
|
84
|
-
return discovered;
|
|
85
106
|
}
|
|
86
107
|
parseSkillFile(raw, parentDirName) {
|
|
87
108
|
const lines = raw.split(/\r?\n/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-service.js","sourceRoot":"","sources":["../../src/services/inventory-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"inventory-service.js","sourceRoot":"","sources":["../../src/services/inventory-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DraftBinding, DeploymentAction, DeploymentPlan, DeploymentTargetName, DoctorReport, LockFile, Manifest, Result, SkillCandidate, SourceBinding, SourceUpdateResult, WorkflowSummary } from "../domain/types.js";
|
|
1
|
+
import type { AddSourceDraftOptions, AddSourcePreparation, DraftBinding, DeploymentAction, DeploymentPlan, DeploymentTargetName, DoctorReport, LockFile, Manifest, Result, SkillCandidate, SourceBinding, SourceUpdateResult, WorkflowSummary } from "../domain/types.js";
|
|
2
2
|
import { StateStore } from "../state/store.js";
|
|
3
3
|
import { DeploymentApplier } from "./deployment-applier.js";
|
|
4
4
|
import { ConfigCoordinator } from "./config-coordinator.js";
|
|
@@ -9,6 +9,12 @@ import { SourceService } from "./source-service.js";
|
|
|
9
9
|
import { WorkflowService } from "./workflow-service.js";
|
|
10
10
|
import type { AddSourceOptions, SourceSnapshot } from "./source-service.js";
|
|
11
11
|
import { WorkspaceBootstrapService, type BootstrapEvent } from "./workspace-bootstrap-service.js";
|
|
12
|
+
type SkillFlowAddOptions = AddSourceOptions & AddSourceDraftOptions & {
|
|
13
|
+
project?: boolean;
|
|
14
|
+
};
|
|
15
|
+
type AddSourceResult = SourceSnapshot & AddSourcePreparation & {
|
|
16
|
+
projected: boolean;
|
|
17
|
+
};
|
|
12
18
|
export declare class SkillFlowApp {
|
|
13
19
|
readonly store: StateStore;
|
|
14
20
|
readonly inventoryService: InventoryService;
|
|
@@ -21,8 +27,13 @@ export declare class SkillFlowApp {
|
|
|
21
27
|
readonly configCoordinator: ConfigCoordinator;
|
|
22
28
|
private mutationQueue;
|
|
23
29
|
constructor();
|
|
24
|
-
addSource(locator: string, options?:
|
|
30
|
+
addSource(locator: string, options?: SkillFlowAddOptions): Promise<Result<AddSourceResult>>;
|
|
31
|
+
prepareAddSource(locator: string, options?: SkillFlowAddOptions): Promise<Result<AddSourceResult>>;
|
|
25
32
|
private addSourceImpl;
|
|
33
|
+
private prepareAddSourceImpl;
|
|
34
|
+
rollbackPreparedSource(sourceId: string): Promise<Result<{
|
|
35
|
+
removed: string[];
|
|
36
|
+
}>>;
|
|
26
37
|
findSkills(query: string): Promise<Result<{
|
|
27
38
|
candidates: SkillCandidate[];
|
|
28
39
|
}>>;
|
|
@@ -89,6 +100,11 @@ export declare class SkillFlowApp {
|
|
|
89
100
|
private normalizeBindings;
|
|
90
101
|
private draftFromBinding;
|
|
91
102
|
private selectLeafIdsForRequestedPath;
|
|
103
|
+
private buildAddDraft;
|
|
104
|
+
private resolveSelectedLeafIds;
|
|
105
|
+
private resolveRequestedTargets;
|
|
106
|
+
private normalizeRequestedPath;
|
|
107
|
+
private rollbackPreparedSourceInternal;
|
|
92
108
|
private prepareManifestForDraft;
|
|
93
109
|
private findExactDuplicateLeafSelections;
|
|
94
110
|
private getExactDuplicateKey;
|
|
@@ -114,3 +130,4 @@ export declare class SkillFlowApp {
|
|
|
114
130
|
private formatSourceLabel;
|
|
115
131
|
private applySourceUpdateResults;
|
|
116
132
|
}
|
|
133
|
+
export {};
|
|
@@ -49,40 +49,91 @@ export class SkillFlowApp {
|
|
|
49
49
|
async addSource(locator, options) {
|
|
50
50
|
return this.runSerializedMutation(() => this.addSourceImpl(locator, options));
|
|
51
51
|
}
|
|
52
|
+
async prepareAddSource(locator, options) {
|
|
53
|
+
return this.runSerializedMutation(() => this.prepareAddSourceImpl(locator, options));
|
|
54
|
+
}
|
|
52
55
|
async addSourceImpl(locator, options) {
|
|
56
|
+
const prepared = await this.prepareAddSourceImpl(locator, options);
|
|
57
|
+
if (!prepared.ok) {
|
|
58
|
+
return prepared;
|
|
59
|
+
}
|
|
60
|
+
const addOptions = options ?? {};
|
|
61
|
+
if (addOptions.project === false) {
|
|
62
|
+
return prepared;
|
|
63
|
+
}
|
|
64
|
+
const applied = await this.applyDraftImpl(prepared.data.sourceId, addOptions.draft ?? prepared.data.draft);
|
|
65
|
+
if (!applied.ok) {
|
|
66
|
+
return fail(applied.errors, [...prepared.warnings, ...applied.warnings]);
|
|
67
|
+
}
|
|
68
|
+
return ok({
|
|
69
|
+
...prepared.data,
|
|
70
|
+
draft: applied.data.draft,
|
|
71
|
+
projected: true,
|
|
72
|
+
}, [...prepared.warnings, ...applied.warnings]);
|
|
73
|
+
}
|
|
74
|
+
async prepareAddSourceImpl(locator, options) {
|
|
53
75
|
const addOptions = options ?? {};
|
|
54
76
|
const result = await this.sourceService.addSource(locator, addOptions);
|
|
55
77
|
if (!result.ok) {
|
|
56
|
-
return result;
|
|
78
|
+
return fail(result.errors, result.warnings);
|
|
57
79
|
}
|
|
58
80
|
const { manifest, lockFile } = await this.store.readState();
|
|
59
81
|
const source = manifest.sources.find((item) => item.id === result.data.manifest.id);
|
|
60
82
|
if (!source) {
|
|
61
|
-
return
|
|
83
|
+
return fail({
|
|
84
|
+
code: "SOURCE_NOT_FOUND",
|
|
85
|
+
message: `Skills group id '${result.data.manifest.id}' is not registered.`,
|
|
86
|
+
});
|
|
62
87
|
}
|
|
63
|
-
source.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
await this.getAvailableTargets();
|
|
68
|
-
manifest.bindings[source.id] = this.bindingFromDraft({
|
|
69
|
-
enabledTargets,
|
|
70
|
-
selectedLeafIds: this.selectLeafIdsForRequestedPath(lockFile.leafInventory.filter((leaf) => leaf.sourceId === source.id), source.requestedPath),
|
|
71
|
-
});
|
|
72
|
-
await this.store.writeState(manifest, lockFile);
|
|
73
|
-
if (addOptions.project === false) {
|
|
74
|
-
return result;
|
|
88
|
+
const requestedPath = this.normalizeRequestedPath(source.requestedPath);
|
|
89
|
+
if (requestedPath) {
|
|
90
|
+
source.requestedPath = requestedPath;
|
|
91
|
+
result.data.manifest.requestedPath = requestedPath;
|
|
75
92
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
93
|
+
else {
|
|
94
|
+
delete source.requestedPath;
|
|
95
|
+
delete result.data.manifest.requestedPath;
|
|
96
|
+
}
|
|
97
|
+
const sourceLeafs = lockFile.leafInventory.filter((leaf) => leaf.sourceId === source.id);
|
|
98
|
+
const availableTargets = addOptions.skipTargetDetection
|
|
99
|
+
? []
|
|
100
|
+
: await this.getAvailableTargets();
|
|
101
|
+
const preparedDraft = this.buildAddDraft(sourceLeafs, requestedPath, availableTargets, addOptions);
|
|
102
|
+
if (!preparedDraft.ok) {
|
|
103
|
+
await this.rollbackPreparedSourceInternal(source.id);
|
|
104
|
+
return fail(preparedDraft.errors, [...result.warnings, ...preparedDraft.warnings]);
|
|
79
105
|
}
|
|
80
|
-
|
|
106
|
+
source.selectionMode =
|
|
107
|
+
addOptions.selectionMode ??
|
|
108
|
+
(preparedDraft.data.selectedLeafIds.length >= sourceLeafs.length && sourceLeafs.length > 0
|
|
109
|
+
? "all"
|
|
110
|
+
: "partial");
|
|
111
|
+
result.data.manifest.selectionMode = source.selectionMode;
|
|
112
|
+
manifest.bindings[source.id] = { targets: {} };
|
|
81
113
|
await this.store.writeState(manifest, lockFile);
|
|
82
|
-
|
|
83
|
-
|
|
114
|
+
const warnings = [...result.warnings];
|
|
115
|
+
if (requestedPath &&
|
|
116
|
+
!addOptions.skillNames?.length &&
|
|
117
|
+
!addOptions.draft &&
|
|
118
|
+
preparedDraft.data.selectedLeafIds.length < sourceLeafs.length) {
|
|
119
|
+
warnings.push({
|
|
120
|
+
code: "ADD_SELECTION_PRESELECTED",
|
|
121
|
+
message: `Preselected ${preparedDraft.data.selectedLeafIds.length} of ${sourceLeafs.length} ` +
|
|
122
|
+
`skill${sourceLeafs.length === 1 ? "" : "s"} under '${requestedPath}'; ` +
|
|
123
|
+
"the full skills group was imported.",
|
|
124
|
+
});
|
|
84
125
|
}
|
|
85
|
-
return ok(
|
|
126
|
+
return ok({
|
|
127
|
+
...result.data,
|
|
128
|
+
sourceId: source.id,
|
|
129
|
+
availableTargets,
|
|
130
|
+
draft: preparedDraft.data,
|
|
131
|
+
leafs: sourceLeafs,
|
|
132
|
+
projected: false,
|
|
133
|
+
}, warnings);
|
|
134
|
+
}
|
|
135
|
+
async rollbackPreparedSource(sourceId) {
|
|
136
|
+
return this.runSerializedMutation(() => this.rollbackPreparedSourceInternal(sourceId));
|
|
86
137
|
}
|
|
87
138
|
async findSkills(query) {
|
|
88
139
|
const { manifest, lockFile } = await this.store.readState();
|
|
@@ -449,7 +500,10 @@ export class SkillFlowApp {
|
|
|
449
500
|
leafIds: [...draft.selectedLeafIds],
|
|
450
501
|
};
|
|
451
502
|
}
|
|
452
|
-
return {
|
|
503
|
+
return {
|
|
504
|
+
selectedLeafIds: [...draft.selectedLeafIds],
|
|
505
|
+
targets,
|
|
506
|
+
};
|
|
453
507
|
}
|
|
454
508
|
async pruneMissingCheckoutsImpl() {
|
|
455
509
|
const { manifest, lockFile } = await this.store.readState();
|
|
@@ -525,22 +579,120 @@ export class SkillFlowApp {
|
|
|
525
579
|
const enabledTargets = Object.entries(binding.targets)
|
|
526
580
|
.filter(([, targetBinding]) => targetBinding?.enabled)
|
|
527
581
|
.map(([target]) => target);
|
|
528
|
-
const selectedLeafIds = [
|
|
582
|
+
const selectedLeafIds = [
|
|
583
|
+
...new Set((binding.selectedLeafIds && binding.selectedLeafIds.length > 0
|
|
584
|
+
? binding.selectedLeafIds
|
|
585
|
+
: enabledTargets.flatMap((target) => binding.targets[target]?.leafIds ?? []))),
|
|
586
|
+
].filter((leafId) => leafIds.has(leafId));
|
|
529
587
|
return {
|
|
530
588
|
enabledTargets,
|
|
531
589
|
selectedLeafIds,
|
|
532
590
|
};
|
|
533
591
|
}
|
|
534
592
|
selectLeafIdsForRequestedPath(leafs, requestedPath) {
|
|
535
|
-
|
|
593
|
+
const normalizedPath = this.normalizeRequestedPath(requestedPath);
|
|
594
|
+
if (!normalizedPath) {
|
|
536
595
|
return leafs.map((leaf) => leaf.id);
|
|
537
596
|
}
|
|
538
|
-
const normalizedPath = requestedPath.replace(/^\.\/+/, "").replace(/\/+$/, "");
|
|
539
597
|
return leafs
|
|
540
598
|
.filter((leaf) => leaf.relativePath === normalizedPath ||
|
|
541
599
|
leaf.relativePath.startsWith(`${normalizedPath}/`))
|
|
542
600
|
.map((leaf) => leaf.id);
|
|
543
601
|
}
|
|
602
|
+
buildAddDraft(sourceLeafs, requestedPath, availableTargets, options) {
|
|
603
|
+
if (options.draft) {
|
|
604
|
+
return ok({
|
|
605
|
+
enabledTargets: [...new Set(options.draft.enabledTargets)],
|
|
606
|
+
selectedLeafIds: [...new Set(options.draft.selectedLeafIds)],
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
const selectedLeafIdsResult = this.resolveSelectedLeafIds(sourceLeafs, requestedPath, options.skillNames);
|
|
610
|
+
if (!selectedLeafIdsResult.ok) {
|
|
611
|
+
return fail(selectedLeafIdsResult.errors, selectedLeafIdsResult.warnings);
|
|
612
|
+
}
|
|
613
|
+
const enabledTargetsResult = this.resolveRequestedTargets(availableTargets, options.agentTargets ?? options.enabledTargets);
|
|
614
|
+
if (!enabledTargetsResult.ok) {
|
|
615
|
+
return fail(enabledTargetsResult.errors, enabledTargetsResult.warnings);
|
|
616
|
+
}
|
|
617
|
+
return ok({
|
|
618
|
+
enabledTargets: enabledTargetsResult.data,
|
|
619
|
+
selectedLeafIds: selectedLeafIdsResult.data,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
resolveSelectedLeafIds(sourceLeafs, requestedPath, skillNames) {
|
|
623
|
+
if (!skillNames || skillNames.length === 0) {
|
|
624
|
+
return ok(this.selectLeafIdsForRequestedPath(sourceLeafs, requestedPath));
|
|
625
|
+
}
|
|
626
|
+
const requested = [...new Set(skillNames.map((skillName) => skillName.trim()).filter(Boolean))];
|
|
627
|
+
const matchedLeafIds = [];
|
|
628
|
+
for (const selector of requested) {
|
|
629
|
+
const relativePathMatches = sourceLeafs.filter((leaf) => leaf.relativePath === selector);
|
|
630
|
+
if (relativePathMatches.length === 1) {
|
|
631
|
+
matchedLeafIds.push(relativePathMatches[0].id);
|
|
632
|
+
continue;
|
|
633
|
+
}
|
|
634
|
+
if (relativePathMatches.length > 1) {
|
|
635
|
+
return fail({
|
|
636
|
+
code: "ADD_SKILL_SELECTOR_AMBIGUOUS",
|
|
637
|
+
message: `Skill selector '${selector}' is ambiguous. Use a unique relative path.`,
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
const fallbackMatches = sourceLeafs.filter((leaf) => leaf.linkName === selector || leaf.name === selector);
|
|
641
|
+
if (fallbackMatches.length === 1) {
|
|
642
|
+
matchedLeafIds.push(fallbackMatches[0].id);
|
|
643
|
+
continue;
|
|
644
|
+
}
|
|
645
|
+
if (fallbackMatches.length > 1) {
|
|
646
|
+
return fail({
|
|
647
|
+
code: "ADD_SKILL_SELECTOR_AMBIGUOUS",
|
|
648
|
+
message: `Skill selector '${selector}' is ambiguous. ` +
|
|
649
|
+
`Use a relative path such as '${fallbackMatches[0].relativePath}'.`,
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
return fail({
|
|
653
|
+
code: "ADD_SKILL_NOT_FOUND",
|
|
654
|
+
message: `Unable to preselect skill(s): ${selector}.`,
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
return ok([...new Set(matchedLeafIds)]);
|
|
658
|
+
}
|
|
659
|
+
resolveRequestedTargets(availableTargets, requestedTargets) {
|
|
660
|
+
if (!requestedTargets?.length) {
|
|
661
|
+
return ok([...availableTargets]);
|
|
662
|
+
}
|
|
663
|
+
const available = new Set(availableTargets);
|
|
664
|
+
const unsupported = [...new Set(requestedTargets)].filter((target) => !available.has(target));
|
|
665
|
+
if (unsupported.length > 0) {
|
|
666
|
+
return fail({
|
|
667
|
+
code: "ADD_AGENT_NOT_AVAILABLE",
|
|
668
|
+
message: `Unknown or unavailable agent(s): ${unsupported.join(", ")}.`,
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
return ok([...new Set(requestedTargets)]);
|
|
672
|
+
}
|
|
673
|
+
normalizeRequestedPath(requestedPath) {
|
|
674
|
+
if (!requestedPath) {
|
|
675
|
+
return undefined;
|
|
676
|
+
}
|
|
677
|
+
const normalized = requestedPath.trim().replace(/^\.\/+/, "").replace(/\/+$/, "");
|
|
678
|
+
return normalized.length > 0 && normalized !== "." ? normalized : undefined;
|
|
679
|
+
}
|
|
680
|
+
async rollbackPreparedSourceInternal(sourceId) {
|
|
681
|
+
const { lockFile, manifest } = await this.store.readState();
|
|
682
|
+
if (!manifest.sources.some((source) => source.id === sourceId)) {
|
|
683
|
+
return fail({
|
|
684
|
+
code: "SOURCE_NOT_FOUND",
|
|
685
|
+
message: `Skills group id '${sourceId}' is not registered.`,
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
if (lockFile.deployments.some((deployment) => deployment.sourceId === sourceId)) {
|
|
689
|
+
return fail({
|
|
690
|
+
code: "ADD_ROLLBACK_HAS_DEPLOYMENTS",
|
|
691
|
+
message: `Unable to roll back skills group id '${sourceId}' because deployments already exist.`,
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
return this.sourceService.removeSource([sourceId]);
|
|
695
|
+
}
|
|
544
696
|
prepareManifestForDraft(manifest, lockFile, sourceId, draft) {
|
|
545
697
|
manifest.bindings[sourceId] = this.bindingFromDraft(draft);
|
|
546
698
|
const source = manifest.sources.find((item) => item.id === sourceId);
|