@numa-tech/numa 1.14.43 → 1.14.45
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 +27 -2
- package/dist/ai-registry/bootstrap.js +17 -1
- package/dist/ai-registry/bootstrap.js.map +1 -1
- package/dist/ai-registry/commands.js +91 -9
- package/dist/ai-registry/commands.js.map +1 -1
- package/dist/ai-registry/skill-dependencies.d.ts +45 -0
- package/dist/ai-registry/skill-dependencies.js +187 -0
- package/dist/ai-registry/skill-dependencies.js.map +1 -0
- package/dist/ai-registry/skill-installer.d.ts +24 -0
- package/dist/ai-registry/skill-installer.js +129 -7
- package/dist/ai-registry/skill-installer.js.map +1 -1
- package/dist/ai-registry/skill-uninstaller.d.ts +35 -0
- package/dist/ai-registry/skill-uninstaller.js +131 -0
- package/dist/ai-registry/skill-uninstaller.js.map +1 -0
- package/dist/ai-registry/sync.js +75 -4
- package/dist/ai-registry/sync.js.map +1 -1
- package/dist/ai-registry/uninstall-command.d.ts +2 -0
- package/dist/ai-registry/uninstall-command.js +48 -0
- package/dist/ai-registry/uninstall-command.js.map +1 -0
- package/dist/ai-registry/update-commands.d.ts +2 -0
- package/dist/ai-registry/update-commands.js +39 -0
- package/dist/ai-registry/update-commands.js.map +1 -0
- package/dist/ai-registry/update-prompt.d.ts +8 -0
- package/dist/ai-registry/update-prompt.js +32 -0
- package/dist/ai-registry/update-prompt.js.map +1 -0
- package/dist/ai-registry/updates.d.ts +132 -0
- package/dist/ai-registry/updates.js +252 -0
- package/dist/ai-registry/updates.js.map +1 -0
- package/dist/cli.js +28 -8
- package/dist/cli.js.map +1 -1
- package/dist/codex-module.d.ts +5 -1
- package/dist/codex-module.js +22 -11
- package/dist/codex-module.js.map +1 -1
- package/dist/command-catalog.js +23 -0
- package/dist/command-catalog.js.map +1 -1
- package/dist/maintenance/commands.d.ts +3 -0
- package/dist/maintenance/commands.js +15 -0
- package/dist/maintenance/commands.js.map +1 -0
- package/dist/maintenance/identity.d.ts +3 -0
- package/dist/maintenance/identity.js +24 -0
- package/dist/maintenance/identity.js.map +1 -0
- package/dist/maintenance/modules.d.ts +8 -0
- package/dist/maintenance/modules.js +45 -0
- package/dist/maintenance/modules.js.map +1 -0
- package/dist/maintenance/scheduler.d.ts +60 -0
- package/dist/maintenance/scheduler.js +101 -0
- package/dist/maintenance/scheduler.js.map +1 -0
- package/dist/maintenance/storage.d.ts +4 -0
- package/dist/maintenance/storage.js +32 -0
- package/dist/maintenance/storage.js.map +1 -0
- package/docs/module-maintenance-and-skills-updates.md +196 -0
- package/examples/platform-profile-skill-bootstrap.json +2 -2
- package/package.json +5 -4
- package/skills/numa-ai-registry/SKILL.md +2 -2
- package/skills/numa-ai-registry/evals/evals.json +2 -2
- package/skills/numa-ai-registry/references/command-contract.md +1 -1
- package/skills/numa-cli/SKILL.md +45 -29
- package/skills/numa-cli/agents/openai.yaml +2 -2
- package/skills/numa-cli/evals/evals.json +72 -0
- package/skills/numa-cli/numa-skill.json +6 -0
- package/skills/numa-cli/references/cli-bootstrap.md +36 -0
- package/skills/{numa-skills/references/command-contract.md → numa-cli/references/skills-command-contract.md} +1 -1
- package/skills/numa-cli/references/skills-updates.md +31 -0
- package/skills/{numa-skills/SKILL.md → numa-cli/references/skills-workflows.md} +6 -9
- package/skills/numa-create-application/SKILL.md +6 -0
- package/skills/numa-create-application/numa-skill.json +11 -0
- package/skills/numa-create-application/references/cli-bootstrap.md +11 -0
- package/skills/numa-jenkins-deployment/SKILL.md +6 -0
- package/skills/numa-jenkins-deployment/numa-skill.json +11 -0
- package/skills/numa-jenkins-deployment/references/cli-bootstrap.md +11 -0
- package/skills/numa-local-flux-deploy/SKILL.md +6 -0
- package/skills/numa-local-flux-deploy/numa-skill.json +11 -0
- package/skills/numa-local-flux-deploy/references/cli-bootstrap.md +11 -0
- package/skills/numa-nacos/SKILL.md +10 -4
- package/skills/numa-nacos/evals/evals.json +2 -2
- package/skills/numa-nacos/numa-skill.json +11 -0
- package/skills/numa-nacos/references/cli-bootstrap.md +11 -0
- package/skills/numa-nacos/references/command-contract.md +1 -1
- package/skills/numa-notion/SKILL.md +54 -0
- package/skills/numa-notion/agents/openai.yaml +4 -0
- package/skills/numa-notion/evals/evals.json +7 -0
- package/skills/numa-notion/numa-skill.json +11 -0
- package/skills/numa-notion/references/agents-automation.md +54 -0
- package/skills/numa-notion/references/cli-bootstrap.md +11 -0
- package/skills/numa-notion/references/cli.md +82 -0
- package/skills/numa-oss-access/SKILL.md +7 -1
- package/skills/numa-oss-access/numa-skill.json +11 -0
- package/skills/numa-oss-access/references/cli-bootstrap.md +11 -0
- package/skills/numa-wecom/SKILL.md +82 -0
- package/skills/numa-wecom/agents/openai.yaml +4 -0
- package/skills/numa-wecom/numa-skill.json +11 -0
- package/skills/numa-wecom/references/cli-bootstrap.md +11 -0
- package/skills/numa-wecom/references/machine-auth.md +36 -0
- package/skills/numa-skills/agents/openai.yaml +0 -4
- package/skills/numa-skills/evals/evals.json +0 -38
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
3
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
+
import { createInterface } from "node:readline/promises";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { AiRegistryError } from "./errors.js";
|
|
7
|
+
import { readSkillBundleMetadata, skillArchiveContentDigest, skillDirectoryDigest, skillTargetRoot } from "./skill-installer.js";
|
|
8
|
+
import { readSkillUpdates } from "./updates.js";
|
|
9
|
+
const name = z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(64);
|
|
10
|
+
const version = z.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/);
|
|
11
|
+
export const SkillDependencySchema = z.object({ name, version }).strict();
|
|
12
|
+
export const SkillBundleSchema = z.object({ schemaVersion: z.literal(1), name, version,
|
|
13
|
+
dependencies: z.array(SkillDependencySchema).max(16).default([]) }).strict();
|
|
14
|
+
export async function readSkillBundle(bytes, expected) {
|
|
15
|
+
const raw = await readSkillBundleMetadata(bytes);
|
|
16
|
+
if (raw === undefined)
|
|
17
|
+
return undefined;
|
|
18
|
+
const parsed = SkillBundleSchema.safeParse(raw);
|
|
19
|
+
if (!parsed.success)
|
|
20
|
+
throw new AiRegistryError("Invalid numa-skill.json; use schemaVersion 1 and exact stable versions from the same source.", "skills_dependency_manifest_invalid");
|
|
21
|
+
const bundle = parsed.data;
|
|
22
|
+
if (expected && (bundle.name !== expected.name || bundle.version !== expected.version))
|
|
23
|
+
throw new AiRegistryError("Skill dependency manifest identity does not match its archive selection.", "skills_dependency_identity_mismatch");
|
|
24
|
+
if (new Set(bundle.dependencies.map(d => d.name)).size !== bundle.dependencies.length)
|
|
25
|
+
throw new AiRegistryError("Duplicate Skill dependencies.", "skills_dependency_manifest_invalid");
|
|
26
|
+
return bundle;
|
|
27
|
+
}
|
|
28
|
+
/** Bounded dependency-first closure. Dependencies never choose another namespace or an URL. */
|
|
29
|
+
export async function resolveSkillDependencies(client, namespaceId, root) {
|
|
30
|
+
const result = [], selected = new Map(), active = new Set(), done = new Set();
|
|
31
|
+
let totalBytes = 0;
|
|
32
|
+
async function visit(target, supplied, depth = 0) {
|
|
33
|
+
if (depth > 8 || selected.size >= 32 && !selected.has(target.name))
|
|
34
|
+
throw new AiRegistryError("Skill dependency graph exceeds limits (32 packages / depth 8).", "skills_dependency_limit");
|
|
35
|
+
if (active.has(target.name))
|
|
36
|
+
throw new AiRegistryError(`Cyclic Skill dependency: ${target.name}.`, "skills_dependency_cycle");
|
|
37
|
+
const previous = selected.get(target.name);
|
|
38
|
+
if (previous && previous !== target.version)
|
|
39
|
+
throw new AiRegistryError(`Conflicting versions for ${target.name}: ${previous} / ${target.version}.`, "skills_dependency_version_conflict");
|
|
40
|
+
if (done.has(target.name))
|
|
41
|
+
return;
|
|
42
|
+
selected.set(target.name, target.version);
|
|
43
|
+
active.add(target.name);
|
|
44
|
+
if (!supplied) {
|
|
45
|
+
const detail = await client.getSkill(namespaceId, target.name);
|
|
46
|
+
if (detail.name !== target.name || detail.enable === false || !Array.isArray(detail.versions)
|
|
47
|
+
|| !detail.versions.some(v => v && typeof v === "object" && v.version === target.version && v.status === "online")) {
|
|
48
|
+
throw new AiRegistryError(`Dependency ${target.name}@${target.version} is not published in the selected source.`, "skills_dependency_unpublished");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const download = supplied?.download ?? await client.downloadSkill(namespaceId, target.name, { version: target.version });
|
|
52
|
+
if (createHash("sha256").update(download.bytes).digest("hex") !== download.sha256 || download.version && download.version !== target.version)
|
|
53
|
+
throw new AiRegistryError("Skill dependency download failed version/checksum verification.", "skills_dependency_integrity_failed");
|
|
54
|
+
totalBytes += download.bytes.length;
|
|
55
|
+
if (totalBytes > 100 * 1024 * 1024)
|
|
56
|
+
throw new AiRegistryError("Skill dependency downloads exceed 100 MiB.", "skills_dependency_limit");
|
|
57
|
+
const bundle = await readSkillBundle(download.bytes, target);
|
|
58
|
+
const dependencies = bundle?.dependencies ?? [];
|
|
59
|
+
for (const dep of dependencies)
|
|
60
|
+
await visit(dep, undefined, depth + 1);
|
|
61
|
+
active.delete(target.name);
|
|
62
|
+
done.add(target.name);
|
|
63
|
+
result.push({ ...target, download, dependencies });
|
|
64
|
+
}
|
|
65
|
+
await visit(root, root);
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
async function canonicalPath(path) {
|
|
69
|
+
const absolute = resolve(path);
|
|
70
|
+
try {
|
|
71
|
+
return await realpath(absolute);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
if (e.code !== "ENOENT" || dirname(absolute) === absolute)
|
|
75
|
+
throw e;
|
|
76
|
+
return join(await canonicalPath(dirname(absolute)), basename(absolute));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Reuse requires recorded source/version and unchanged content; transport ZIPs may be repacked. */
|
|
80
|
+
export async function reusableDependency(node, options, source, directory) {
|
|
81
|
+
const path = join(await canonicalPath(skillTargetRoot(options)), node.name);
|
|
82
|
+
const info = await lstat(path).catch((e) => { if (e.code === "ENOENT")
|
|
83
|
+
return undefined; throw e; });
|
|
84
|
+
if (!info)
|
|
85
|
+
return false;
|
|
86
|
+
const conflict = (reason) => {
|
|
87
|
+
throw new AiRegistryError(`Existing dependency ${node.name}@${node.version}: ${reason}. No files were overwritten; inspect the installation before a separate explicit update.`, "skills_dependency_local_conflict");
|
|
88
|
+
};
|
|
89
|
+
if (info.isSymbolicLink() || !info.isDirectory())
|
|
90
|
+
conflict("target is not a regular directory");
|
|
91
|
+
const records = (await readSkillUpdates(directory)).installations;
|
|
92
|
+
const candidates = [];
|
|
93
|
+
for (const record of records)
|
|
94
|
+
if (await canonicalPath(record.path) === path)
|
|
95
|
+
candidates.push(record);
|
|
96
|
+
const record = candidates[0];
|
|
97
|
+
if (!record || candidates.length !== 1)
|
|
98
|
+
return conflict("installation provenance is missing or ambiguous");
|
|
99
|
+
if (record.name !== node.name || record.namespace !== source.namespace || record.instance !== source.instance
|
|
100
|
+
|| record.namespaceId !== source.namespaceId || record.instanceId !== source.instanceId)
|
|
101
|
+
conflict("recorded source does not match the selected source");
|
|
102
|
+
if (record.version !== node.version)
|
|
103
|
+
conflict(`installed version ${record.version} does not match required exact version ${node.version}`);
|
|
104
|
+
if (await skillDirectoryDigest(path) !== record.contentDigest)
|
|
105
|
+
conflict("installed files have local changes");
|
|
106
|
+
// The checksum still authenticates this download's bytes before any archive processing.
|
|
107
|
+
if (createHash("sha256").update(node.download.bytes).digest("hex") !== node.download.sha256
|
|
108
|
+
|| node.download.version && node.download.version !== node.version) {
|
|
109
|
+
throw new AiRegistryError("Skill dependency download failed version/checksum verification.", "skills_dependency_integrity_failed");
|
|
110
|
+
}
|
|
111
|
+
if (record.archiveSha256 !== node.download.sha256
|
|
112
|
+
&& await skillArchiveContentDigest(node.download.bytes) !== record.contentDigest)
|
|
113
|
+
conflict("published content differs from the recorded installation despite the same version");
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
/** A single-package updater must not introduce or change a dependency graph silently. */
|
|
117
|
+
export async function assertUnchangedDependencies(next, installedPath) {
|
|
118
|
+
const upcoming = await readSkillBundle(next);
|
|
119
|
+
const previous = await readFile(join(installedPath, "numa-skill.json"), "utf8")
|
|
120
|
+
.then(text => SkillBundleSchema.parse(JSON.parse(text)))
|
|
121
|
+
.catch((e) => { if (e.code === "ENOENT")
|
|
122
|
+
return undefined; throw e; });
|
|
123
|
+
const canonical = (deps = []) => JSON.stringify([...deps].sort((a, b) => a.name.localeCompare(b.name)));
|
|
124
|
+
if (canonical(upcoming?.dependencies) !== canonical(previous?.dependencies))
|
|
125
|
+
throw new AiRegistryError("Dependency changes need an explicit install plan and confirmation.", "skills_dependency_confirmation_required");
|
|
126
|
+
}
|
|
127
|
+
export async function assertInstalledDependencies(bytes, installedPath, source, directory) {
|
|
128
|
+
const bundle = await readSkillBundle(bytes);
|
|
129
|
+
const state = await readSkillUpdates(directory);
|
|
130
|
+
for (const dep of bundle?.dependencies ?? []) {
|
|
131
|
+
const path = join(await canonicalPath(dirname(installedPath)), dep.name);
|
|
132
|
+
const candidates = [];
|
|
133
|
+
for (const item of state.installations)
|
|
134
|
+
if (await canonicalPath(item.path) === path)
|
|
135
|
+
candidates.push(item);
|
|
136
|
+
const r = candidates.length === 1 ? candidates[0] : undefined;
|
|
137
|
+
if (!r || r.version !== dep.version || r.namespace !== source.namespace || r.instance !== source.instance
|
|
138
|
+
|| r.namespaceId !== source.namespaceId || r.instanceId !== source.instanceId
|
|
139
|
+
|| await skillDirectoryDigest(path) !== r.contentDigest) {
|
|
140
|
+
throw new AiRegistryError(`Dependency ${dep.name}@${dep.version} is missing or changed; run an explicit install plan.`, "skills_dependency_local_conflict");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export async function assertConsumersCompatible(name, nextVersion, installedPath, directory) {
|
|
145
|
+
for (const r of (await readSkillUpdates(directory)).installations) {
|
|
146
|
+
if (r.name === name || await canonicalPath(dirname(r.path)) !== await canonicalPath(dirname(installedPath)))
|
|
147
|
+
continue;
|
|
148
|
+
const info = await lstat(r.path).catch((e) => { if (e.code === "ENOENT")
|
|
149
|
+
return undefined; throw e; });
|
|
150
|
+
if (!info)
|
|
151
|
+
continue;
|
|
152
|
+
if (info.isSymbolicLink() || !info.isDirectory())
|
|
153
|
+
throw new AiRegistryError("Consumer installation is not a regular directory.", "skills_dependency_local_conflict");
|
|
154
|
+
const raw = await readFile(join(r.path, "numa-skill.json"), "utf8").catch((e) => {
|
|
155
|
+
if (e.code === "ENOENT")
|
|
156
|
+
return undefined;
|
|
157
|
+
throw e;
|
|
158
|
+
});
|
|
159
|
+
if (!raw)
|
|
160
|
+
continue;
|
|
161
|
+
const bundle = SkillBundleSchema.parse(JSON.parse(raw));
|
|
162
|
+
const dep = bundle.dependencies.find(d => d.name === name);
|
|
163
|
+
if (dep && dep.version !== nextVersion)
|
|
164
|
+
throw new AiRegistryError(`Installed ${r.name} requires ${name}@${dep.version}; updating it independently would break that dependency.`, "skills_dependency_version_conflict");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export async function confirmSkillDependencies(plan, options, ask) {
|
|
168
|
+
if (options.confirmed)
|
|
169
|
+
return;
|
|
170
|
+
if (!options.json && ask) {
|
|
171
|
+
if (await ask())
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
else if (!options.json && process.stdin.isTTY && process.stderr.isTTY) {
|
|
175
|
+
process.stderr.write(`${JSON.stringify(plan, null, 2)}\n`);
|
|
176
|
+
const prompt = createInterface({ input: process.stdin, output: process.stderr });
|
|
177
|
+
try {
|
|
178
|
+
if (/^(y|yes)$/i.test((await prompt.question("是否现在安装上述 Skill 及其依赖?[y/N] ")).trim()))
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
prompt.close();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
throw new AiRegistryError("Dependency installation requires confirmation; inspect --plan, then rerun with --with-dependencies only after approval.", "skills_dependency_confirmation_required", undefined, undefined, { plan });
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=skill-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-dependencies.js","sourceRoot":"","sources":["../../src/ai-registry/skill-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
export type SkillAgentTarget = "chatgpt" | "codex" | "claude" | "cursor" | "workbuddy" | "openclaw" | "agents" | "custom";
|
|
2
2
|
export type InstallScope = "project" | "user";
|
|
3
3
|
export interface SkillInstallOptions {
|
|
4
|
+
/** Set only by a caller which resolved and verified the dependency closure. */
|
|
5
|
+
dependencyPlanVerified?: boolean;
|
|
4
6
|
agent: SkillAgentTarget;
|
|
5
7
|
scope: InstallScope;
|
|
6
8
|
skillName: string;
|
|
7
9
|
workspace?: string;
|
|
8
10
|
customRoot?: string;
|
|
9
11
|
force?: boolean;
|
|
12
|
+
/** Automatic maintenance may replace only this exact unmodified installation. */
|
|
13
|
+
expectedInstalledDigest?: string;
|
|
14
|
+
expectedInstalledPath?: string;
|
|
15
|
+
/** Keep automatic-update backups outside the live Skills discovery directory. */
|
|
16
|
+
maintenanceBackup?: boolean;
|
|
10
17
|
}
|
|
11
18
|
export interface SkillInstallResult {
|
|
12
19
|
agent: SkillAgentTarget;
|
|
@@ -16,7 +23,24 @@ export interface SkillInstallResult {
|
|
|
16
23
|
backupPath?: string;
|
|
17
24
|
files: number;
|
|
18
25
|
expandedBytes: number;
|
|
26
|
+
/** Digest of the verified staging tree, before it becomes editable by the user. */
|
|
27
|
+
contentDigest?: string;
|
|
28
|
+
}
|
|
29
|
+
interface InspectedArchive {
|
|
30
|
+
root: string;
|
|
31
|
+
entries: number;
|
|
32
|
+
files: number;
|
|
33
|
+
expandedBytes: number;
|
|
19
34
|
}
|
|
20
35
|
export declare function skillTargetRoot(options: Pick<SkillInstallOptions, "agent" | "scope" | "workspace" | "customRoot">): string;
|
|
21
36
|
export declare function installSkillArchive(archive: Buffer, options: SkillInstallOptions): Promise<SkillInstallResult>;
|
|
37
|
+
/** Exact content + executable-bit fingerprint. Refuse links and unexpected files. */
|
|
38
|
+
export declare function skillDirectoryDigest(root: string): Promise<string>;
|
|
39
|
+
/** Compare installed content, not ZIP timestamps/order/compression. Never touch the installed tree. */
|
|
40
|
+
export declare function skillArchiveContentDigest(archive: Buffer): Promise<string>;
|
|
41
|
+
export declare function safeSkillName(value: string): string;
|
|
42
|
+
export declare function inspectArchive(buffer: Buffer): Promise<InspectedArchive>;
|
|
43
|
+
/** Read bounded declarative metadata only; never extract or execute an archive. */
|
|
44
|
+
export declare function readSkillBundleMetadata(buffer: Buffer): Promise<unknown | undefined>;
|
|
22
45
|
export declare function validateSkillAdapterPath(base: string, candidate: string, scope: InstallScope): Promise<void>;
|
|
46
|
+
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { randomBytes } from "node:crypto";
|
|
1
|
+
import { randomBytes, createHash } from "node:crypto";
|
|
2
|
+
import { withTokenFileLock } from "@numa-tech/cli-auth";
|
|
2
3
|
import { createWriteStream } from "node:fs";
|
|
3
|
-
import { lstat, mkdir, realpath, rename, rm } from "node:fs/promises";
|
|
4
|
-
import { homedir } from "node:os";
|
|
4
|
+
import { lstat, mkdir, mkdtemp, realpath, readdir, readFile, rename, rm } from "node:fs/promises";
|
|
5
|
+
import { homedir, tmpdir } from "node:os";
|
|
5
6
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
6
7
|
import { pipeline } from "node:stream/promises";
|
|
7
8
|
import yauzl from "yauzl";
|
|
@@ -32,6 +33,18 @@ export function skillTargetRoot(options) {
|
|
|
32
33
|
return join(base, root);
|
|
33
34
|
}
|
|
34
35
|
export async function installSkillArchive(archive, options) {
|
|
36
|
+
const root = skillTargetRoot(options);
|
|
37
|
+
const skillName = safeSkillName(options.skillName);
|
|
38
|
+
if (options.agent !== "custom")
|
|
39
|
+
await validateSkillAdapterPath(options.scope === "user" ? homedir() : resolve(options.workspace ?? process.cwd()), root, options.scope);
|
|
40
|
+
// Shared by explicit installs, sync, bootstrap and maintenance.
|
|
41
|
+
return withTokenFileLock(join(root, `.numa-install-${skillName}`), () => installSkillArchiveLocked(archive, options), { timeoutMilliseconds: 1_000 });
|
|
42
|
+
}
|
|
43
|
+
async function installSkillArchiveLocked(archive, options) {
|
|
44
|
+
const bundle = await (await import("./skill-dependencies.js")).readSkillBundle(archive);
|
|
45
|
+
if (bundle?.dependencies.length && !options.dependencyPlanVerified) {
|
|
46
|
+
throw new AiRegistryError("This Skill requires a verified dependency plan; use skills install --plan first.", "skills_dependency_confirmation_required");
|
|
47
|
+
}
|
|
35
48
|
if (archive.length < 4 || archive.length > MAX_ARCHIVE_BYTES) {
|
|
36
49
|
throw new AiRegistryError("Skill ZIP is empty or exceeds 50 MiB.", "ai_registry_skill_zip_invalid");
|
|
37
50
|
}
|
|
@@ -48,6 +61,9 @@ export async function installSkillArchive(archive, options) {
|
|
|
48
61
|
if (adapterBase)
|
|
49
62
|
assertInside(await realpath(adapterBase), targetRoot);
|
|
50
63
|
const destination = join(targetRoot, skillName);
|
|
64
|
+
if (options.expectedInstalledPath && destination !== options.expectedInstalledPath) {
|
|
65
|
+
throw new AiRegistryError("Skill target moved; automatic update stopped.", "skills_update_path_changed");
|
|
66
|
+
}
|
|
51
67
|
assertInside(targetRoot, destination);
|
|
52
68
|
const existing = await lstat(destination).catch((error) => {
|
|
53
69
|
if (error.code === "ENOENT")
|
|
@@ -61,13 +77,26 @@ export async function installSkillArchive(archive, options) {
|
|
|
61
77
|
throw new AiRegistryError(`Skill already exists at ${destination}; pass --force to replace it with a recoverable backup.`, "ai_registry_install_exists");
|
|
62
78
|
}
|
|
63
79
|
const stage = join(targetRoot, `.numa-stage-${skillName}-${randomBytes(6).toString("hex")}`);
|
|
80
|
+
let backupRoot = targetRoot;
|
|
81
|
+
if (existing && options.maintenanceBackup) {
|
|
82
|
+
backupRoot = join(dirname(targetRoot), ".numa-skill-backups");
|
|
83
|
+
await mkdir(backupRoot, { recursive: true, mode: 0o700 });
|
|
84
|
+
if ((await lstat(backupRoot)).isSymbolicLink()) {
|
|
85
|
+
throw new AiRegistryError("Backup directory must not be a link.", "skills_update_backup_invalid");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
64
88
|
const backup = existing
|
|
65
|
-
? join(
|
|
89
|
+
? join(backupRoot, `${skillName}.numa-backup-${new Date().toISOString().replace(/[:.]/gu, "-")}-${randomBytes(4).toString("hex")}`)
|
|
66
90
|
: undefined;
|
|
67
91
|
await mkdir(stage, { mode: 0o700 });
|
|
68
92
|
let movedExisting = false;
|
|
93
|
+
let contentDigest;
|
|
69
94
|
try {
|
|
70
95
|
await extractArchive(archive, inspected.root, stage);
|
|
96
|
+
contentDigest = await skillDirectoryDigest(stage);
|
|
97
|
+
if (options.expectedInstalledDigest && await skillDirectoryDigest(destination) !== options.expectedInstalledDigest) {
|
|
98
|
+
throw new AiRegistryError("Local Skill was modified; automatic update stopped.", "skills_update_local_conflict");
|
|
99
|
+
}
|
|
71
100
|
if (backup) {
|
|
72
101
|
await rename(destination, backup);
|
|
73
102
|
movedExisting = true;
|
|
@@ -91,10 +120,55 @@ export async function installSkillArchive(archive, options) {
|
|
|
91
120
|
installedPath: destination,
|
|
92
121
|
...(backup ? { backupPath: backup } : {}),
|
|
93
122
|
files: inspected.files,
|
|
94
|
-
expandedBytes: inspected.expandedBytes
|
|
123
|
+
expandedBytes: inspected.expandedBytes,
|
|
124
|
+
contentDigest
|
|
95
125
|
};
|
|
96
126
|
}
|
|
97
|
-
|
|
127
|
+
/** Exact content + executable-bit fingerprint. Refuse links and unexpected files. */
|
|
128
|
+
export async function skillDirectoryDigest(root) {
|
|
129
|
+
const hash = createHash("sha256");
|
|
130
|
+
let bytes = 0;
|
|
131
|
+
let count = 0;
|
|
132
|
+
async function walk(directory, prefix) {
|
|
133
|
+
const info = await lstat(directory);
|
|
134
|
+
if (info.isSymbolicLink() || !info.isDirectory())
|
|
135
|
+
throw new Error("Skill tree is not a regular directory.");
|
|
136
|
+
for (const name of (await readdir(directory)).sort()) {
|
|
137
|
+
const path = join(directory, name);
|
|
138
|
+
const stat = await lstat(path);
|
|
139
|
+
const key = `${prefix}${name}`;
|
|
140
|
+
if (++count > MAX_ENTRIES || stat.isSymbolicLink())
|
|
141
|
+
throw new Error("Skill tree contains unsupported entries.");
|
|
142
|
+
if (stat.isDirectory()) {
|
|
143
|
+
hash.update(JSON.stringify([key, "directory"]));
|
|
144
|
+
await walk(path, `${key}/`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
if (!stat.isFile() || (bytes += stat.size) > MAX_EXPANDED_BYTES)
|
|
148
|
+
throw new Error("Skill tree is too large.");
|
|
149
|
+
hash.update(JSON.stringify([key, stat.mode & 0o111, stat.size]));
|
|
150
|
+
hash.update(await readFile(path));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
await walk(root, "");
|
|
155
|
+
return hash.digest("hex");
|
|
156
|
+
}
|
|
157
|
+
/** Compare installed content, not ZIP timestamps/order/compression. Never touch the installed tree. */
|
|
158
|
+
export async function skillArchiveContentDigest(archive) {
|
|
159
|
+
if (archive.length < 4 || archive.length > MAX_ARCHIVE_BYTES)
|
|
160
|
+
throw zipError("Skill ZIP is empty or exceeds 50 MiB.");
|
|
161
|
+
const inspected = await inspectArchive(archive);
|
|
162
|
+
const stage = await mkdtemp(join(tmpdir(), "numa-skill-verify-"));
|
|
163
|
+
try {
|
|
164
|
+
await extractArchive(archive, inspected.root, stage);
|
|
165
|
+
return await skillDirectoryDigest(stage);
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
await rm(stage, { recursive: true, force: true });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export function safeSkillName(value) {
|
|
98
172
|
const name = value.trim();
|
|
99
173
|
if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(name) || name === "." || name === "..") {
|
|
100
174
|
throw new AiRegistryError("Skill name contains unsupported characters.", "ai_registry_install_target_invalid");
|
|
@@ -104,7 +178,7 @@ function safeSkillName(value) {
|
|
|
104
178
|
}
|
|
105
179
|
return name;
|
|
106
180
|
}
|
|
107
|
-
async function inspectArchive(buffer) {
|
|
181
|
+
export async function inspectArchive(buffer) {
|
|
108
182
|
const entries = await readEntries(buffer);
|
|
109
183
|
if (entries.length === 0 || entries.length > MAX_ENTRIES) {
|
|
110
184
|
throw zipError("Skill ZIP has no entries or exceeds the 512-entry limit.");
|
|
@@ -143,6 +217,54 @@ async function inspectArchive(buffer) {
|
|
|
143
217
|
}
|
|
144
218
|
return { root, entries: entries.length, files, expandedBytes };
|
|
145
219
|
}
|
|
220
|
+
/** Read bounded declarative metadata only; never extract or execute an archive. */
|
|
221
|
+
export async function readSkillBundleMetadata(buffer) {
|
|
222
|
+
if (buffer.length > MAX_ARCHIVE_BYTES)
|
|
223
|
+
throw zipError("Skill ZIP exceeds 50 MiB.");
|
|
224
|
+
const inspected = await inspectArchive(buffer);
|
|
225
|
+
const target = `${inspected.root}numa-skill.json`;
|
|
226
|
+
const zip = await openZip(buffer);
|
|
227
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
228
|
+
let settled = false;
|
|
229
|
+
const fail = (error) => { if (!settled) {
|
|
230
|
+
settled = true;
|
|
231
|
+
zip.close();
|
|
232
|
+
rejectPromise(error);
|
|
233
|
+
} };
|
|
234
|
+
zip.once("error", fail);
|
|
235
|
+
zip.once("end", () => { if (!settled) {
|
|
236
|
+
settled = true;
|
|
237
|
+
resolvePromise(undefined);
|
|
238
|
+
} });
|
|
239
|
+
zip.on("entry", (entry) => {
|
|
240
|
+
if (entry.fileName !== target) {
|
|
241
|
+
zip.readEntry();
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
void (async () => {
|
|
245
|
+
if (entry.uncompressedSize > 16_384)
|
|
246
|
+
throw zipError("Skill dependency manifest exceeds 16 KiB.");
|
|
247
|
+
const stream = await openEntryStream(zip, entry);
|
|
248
|
+
const chunks = [];
|
|
249
|
+
let size = 0;
|
|
250
|
+
for await (const chunk of stream) {
|
|
251
|
+
const bytes = Buffer.from(chunk);
|
|
252
|
+
size += bytes.length;
|
|
253
|
+
if (size > 16_384)
|
|
254
|
+
throw zipError("Skill dependency manifest exceeds 16 KiB.");
|
|
255
|
+
chunks.push(bytes);
|
|
256
|
+
}
|
|
257
|
+
const value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks)));
|
|
258
|
+
if (!settled) {
|
|
259
|
+
settled = true;
|
|
260
|
+
zip.close();
|
|
261
|
+
resolvePromise(value);
|
|
262
|
+
}
|
|
263
|
+
})().catch(fail);
|
|
264
|
+
});
|
|
265
|
+
zip.readEntry();
|
|
266
|
+
});
|
|
267
|
+
}
|
|
146
268
|
async function extractArchive(buffer, archiveRoot, stage) {
|
|
147
269
|
const zip = await openZip(buffer);
|
|
148
270
|
await new Promise((resolvePromise, rejectPromise) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/ai-registry/skill-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,EAAE,EACH,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,OAAO,EACP,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,GAAG,EACJ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAmC,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7C,MAAM,WAAW,GAAG,GAAG,CAAC;AAwCxB,MAAM,YAAY,GAAwD;IACxE,oEAAoE;IACpE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACjC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC/B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;IACjC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;IACjC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;IACvC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IACrC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;CAClC,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,OAAkF;IAChH,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE,oCAAoC,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QACvE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,OAA4B;IAE5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC7D,MAAM,IAAI,eAAe,CAAC,uCAAuC,EAAE,+BAA+B,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC5C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvF,IAAI,WAAW;QAAE,MAAM,wBAAwB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5F,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,WAAW;QAAE,YAAY,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAChD,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE;QAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC9C,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CAAC,mDAAmD,EAAE,oCAAoC,CAAC,CAAC;IACvH,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CACvB,2BAA2B,WAAW,yDAAyD,EAC/F,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,gBAAgB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QACjG,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClC,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,aAAa,IAAI,MAAM;gBAAE,MAAM,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACtF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS;QACT,aAAa,EAAE,WAAW;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,aAAa,EAAE,SAAS,CAAC,aAAa;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACvF,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE,oCAAoC,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,eAAe,CAAC,oCAAoC,EAAE,oCAAoC,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAc;IAC1C,MAAM,OAAO,GAAY,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QACzD,MAAM,QAAQ,CAAC,0DAA0D,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,MAAM,QAAQ,CAAC,yDAAyD,CAAC,CAAC;QACvG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,QAAQ,CAAC,gDAAgD,CAAC,CAAC;QAChH,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,QAAQ,CAAC,4CAA4C,CAAC,CAAC;QACnF,aAAa,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACxC,IAAI,aAAa,GAAG,kBAAkB;YAAE,MAAM,QAAQ,CAAC,mCAAmC,CAAC,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,QAAQ,CAAC,8CAA8C,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;IACpG,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,CAAC,0EAA0E,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB,EAAE,KAAa;IAC9E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACxD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,KAAc,EAAQ,EAAE;YACpC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YAC/B,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACjF,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,GAAG,CAAC,SAAS,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC5E,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC3D,GAAG,CAAC,SAAS,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;gBAC/D,MAAM,IAAI,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtD,MAAM,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9E,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,OAAO,CAAU,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QAC1F,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,GAAG,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACnD,KAAK,CAAC,UAAU,CACd,MAAM,EACN,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAC3F,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAC7G,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,GAAY,EAAE,KAAY;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACnD,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,KAAK,IAAI,CAAC,MAAM;gBAAE,aAAa,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,CAAC;;gBAC5E,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,IACE,CAAC,IAAI;QACL,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,UAAU,CAAC,IAAI,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,EAC7D,CAAC;QACD,MAAM,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,KAAY;IAC7B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC;IAC9D,OAAO,IAAI,KAAK,QAAQ,CAAC;AAC3B,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,SAAiB;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,IAAI,eAAe,CAAC,gDAAgD,EAAE,oCAAoC,CAAC,CAAC;IACpH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,SAAiB,EAAE,KAAmB;IACjG,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9G,MAAM,IAAI,eAAe,CAAC,mDAAmD,EAAE,oCAAoC,CAAC,CAAC;IACvH,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE;YACvE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAC9C,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBACrB,MAAM,IAAI,eAAe,CAAC,+DAA+D,EAAE,oCAAoC,CAAC,CAAC;YACnI,CAAC;YACD,yEAAyE;YACzE,yEAAyE;YACzE,0EAA0E;YAC1E,YAAY,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;AACvE,CAAC"}
|
|
1
|
+
{"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/ai-registry/skill-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type SkillInstallOptions } from "./skill-installer.js";
|
|
2
|
+
export type UninstallOptions = Pick<SkillInstallOptions, "agent" | "scope" | "skillName" | "workspace" | "customRoot">;
|
|
3
|
+
export interface UninstallPlan {
|
|
4
|
+
name: string;
|
|
5
|
+
agent: string;
|
|
6
|
+
scope: string;
|
|
7
|
+
path: string;
|
|
8
|
+
exists: boolean;
|
|
9
|
+
version?: string;
|
|
10
|
+
digest?: string;
|
|
11
|
+
trackingIds: string[];
|
|
12
|
+
dependents: string[];
|
|
13
|
+
references: string[];
|
|
14
|
+
warnings: string[];
|
|
15
|
+
fingerprint: string;
|
|
16
|
+
}
|
|
17
|
+
/** Local-only preview: never resolve a remote profile or change tracking. */
|
|
18
|
+
export declare function planSkillUninstall(options: UninstallOptions, directory?: string): Promise<UninstallPlan>;
|
|
19
|
+
export declare function uninstallSkill(options: UninstallOptions, approved: UninstallPlan, directory?: string): Promise<{
|
|
20
|
+
name: string;
|
|
21
|
+
agent: string;
|
|
22
|
+
scope: string;
|
|
23
|
+
path: string;
|
|
24
|
+
exists: boolean;
|
|
25
|
+
version?: string;
|
|
26
|
+
digest?: string;
|
|
27
|
+
trackingIds: string[];
|
|
28
|
+
dependents: string[];
|
|
29
|
+
references: string[];
|
|
30
|
+
warnings: string[];
|
|
31
|
+
fingerprint: string;
|
|
32
|
+
status: string;
|
|
33
|
+
trackingRemoved: number;
|
|
34
|
+
backupCreated: boolean;
|
|
35
|
+
}>;
|