skill-flow 1.0.6 → 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/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/skill-flow.d.ts +18 -2
- package/dist/services/skill-flow.js +149 -27
- package/dist/services/skill-flow.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/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 +54 -4
- package/dist/tests/config-ui-utils.test.js.map +1 -1
- 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 +4 -2
- package/dist/tui/config-app.js +51 -56
- 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/package.json +1 -1
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":"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
|
|
1
|
+
{"version":3,"file":"config-coordinator.js","sourceRoot":"","sources":["../../src/services/config-coordinator.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,7 +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;
|
|
92
106
|
private normalizeRequestedPath;
|
|
107
|
+
private rollbackPreparedSourceInternal;
|
|
93
108
|
private prepareManifestForDraft;
|
|
94
109
|
private findExactDuplicateLeafSelections;
|
|
95
110
|
private getExactDuplicateKey;
|
|
@@ -115,3 +130,4 @@ export declare class SkillFlowApp {
|
|
|
115
130
|
private formatSourceLabel;
|
|
116
131
|
private applySourceUpdateResults;
|
|
117
132
|
}
|
|
133
|
+
export {};
|
|
@@ -49,16 +49,41 @@ 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
88
|
const requestedPath = this.normalizeRequestedPath(source.requestedPath);
|
|
64
89
|
if (requestedPath) {
|
|
@@ -70,42 +95,45 @@ export class SkillFlowApp {
|
|
|
70
95
|
delete result.data.manifest.requestedPath;
|
|
71
96
|
}
|
|
72
97
|
const sourceLeafs = lockFile.leafInventory.filter((leaf) => leaf.sourceId === source.id);
|
|
73
|
-
const
|
|
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]);
|
|
105
|
+
}
|
|
74
106
|
source.selectionMode =
|
|
75
107
|
addOptions.selectionMode ??
|
|
76
|
-
(selectedLeafIds.length >= sourceLeafs.length && sourceLeafs.length > 0
|
|
108
|
+
(preparedDraft.data.selectedLeafIds.length >= sourceLeafs.length && sourceLeafs.length > 0
|
|
77
109
|
? "all"
|
|
78
110
|
: "partial");
|
|
79
111
|
result.data.manifest.selectionMode = source.selectionMode;
|
|
80
|
-
|
|
81
|
-
await this.getAvailableTargets();
|
|
82
|
-
manifest.bindings[source.id] = this.bindingFromDraft({
|
|
83
|
-
enabledTargets,
|
|
84
|
-
selectedLeafIds,
|
|
85
|
-
});
|
|
112
|
+
manifest.bindings[source.id] = { targets: {} };
|
|
86
113
|
await this.store.writeState(manifest, lockFile);
|
|
87
114
|
const warnings = [...result.warnings];
|
|
88
|
-
if (requestedPath &&
|
|
115
|
+
if (requestedPath &&
|
|
116
|
+
!addOptions.skillNames?.length &&
|
|
117
|
+
!addOptions.draft &&
|
|
118
|
+
preparedDraft.data.selectedLeafIds.length < sourceLeafs.length) {
|
|
89
119
|
warnings.push({
|
|
90
120
|
code: "ADD_SELECTION_PRESELECTED",
|
|
91
|
-
message: `Preselected ${selectedLeafIds.length} of ${sourceLeafs.length} ` +
|
|
121
|
+
message: `Preselected ${preparedDraft.data.selectedLeafIds.length} of ${sourceLeafs.length} ` +
|
|
92
122
|
`skill${sourceLeafs.length === 1 ? "" : "s"} under '${requestedPath}'; ` +
|
|
93
123
|
"the full skills group was imported.",
|
|
94
124
|
});
|
|
95
125
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
return ok(result.data, [...warnings, ...plan.warnings, ...applied.warnings]);
|
|
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));
|
|
109
137
|
}
|
|
110
138
|
async findSkills(query) {
|
|
111
139
|
const { manifest, lockFile } = await this.store.readState();
|
|
@@ -472,7 +500,10 @@ export class SkillFlowApp {
|
|
|
472
500
|
leafIds: [...draft.selectedLeafIds],
|
|
473
501
|
};
|
|
474
502
|
}
|
|
475
|
-
return {
|
|
503
|
+
return {
|
|
504
|
+
selectedLeafIds: [...draft.selectedLeafIds],
|
|
505
|
+
targets,
|
|
506
|
+
};
|
|
476
507
|
}
|
|
477
508
|
async pruneMissingCheckoutsImpl() {
|
|
478
509
|
const { manifest, lockFile } = await this.store.readState();
|
|
@@ -548,7 +579,11 @@ export class SkillFlowApp {
|
|
|
548
579
|
const enabledTargets = Object.entries(binding.targets)
|
|
549
580
|
.filter(([, targetBinding]) => targetBinding?.enabled)
|
|
550
581
|
.map(([target]) => target);
|
|
551
|
-
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));
|
|
552
587
|
return {
|
|
553
588
|
enabledTargets,
|
|
554
589
|
selectedLeafIds,
|
|
@@ -564,6 +599,77 @@ export class SkillFlowApp {
|
|
|
564
599
|
leaf.relativePath.startsWith(`${normalizedPath}/`))
|
|
565
600
|
.map((leaf) => leaf.id);
|
|
566
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
|
+
}
|
|
567
673
|
normalizeRequestedPath(requestedPath) {
|
|
568
674
|
if (!requestedPath) {
|
|
569
675
|
return undefined;
|
|
@@ -571,6 +677,22 @@ export class SkillFlowApp {
|
|
|
571
677
|
const normalized = requestedPath.trim().replace(/^\.\/+/, "").replace(/\/+$/, "");
|
|
572
678
|
return normalized.length > 0 && normalized !== "." ? normalized : undefined;
|
|
573
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
|
+
}
|
|
574
696
|
prepareManifestForDraft(manifest, lockFile, sourceId, draft) {
|
|
575
697
|
manifest.bindings[sourceId] = this.bindingFromDraft(draft);
|
|
576
698
|
const source = manifest.sources.find((item) => item.id === sourceId);
|