@gt-fe/eap-sdk 0.1.2 → 0.1.4
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 +371 -373
- package/dist/lockfile/types.d.ts +1 -1
- package/dist/lockfile/types.d.ts.map +1 -1
- package/dist/lockfile/write-lockfile.js +3 -3
- package/dist/lockfile/write-lockfile.js.map +1 -1
- package/dist/materialization/prepare-agent-runtime.d.ts.map +1 -1
- package/dist/materialization/prepare-agent-runtime.js +50 -31
- package/dist/materialization/prepare-agent-runtime.js.map +1 -1
- package/dist/packaging/package-agent-project.js +3 -0
- package/dist/packaging/package-agent-project.js.map +1 -1
- package/dist/packaging/read-package.d.ts.map +1 -1
- package/dist/packaging/read-package.js +21 -0
- package/dist/packaging/read-package.js.map +1 -1
- package/dist/platform/types.d.ts +6 -1
- package/dist/platform/types.d.ts.map +1 -1
- package/dist/resources/extract-resource-package.js +23 -23
- package/dist/resources/extract-resource-package.js.map +1 -1
- package/dist/resources/index.d.ts +1 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +1 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/install-agent-dependencies.d.ts.map +1 -1
- package/dist/resources/install-agent-dependencies.js +172 -60
- package/dist/resources/install-agent-dependencies.js.map +1 -1
- package/dist/resources/install-agent-resource.d.ts.map +1 -1
- package/dist/resources/install-agent-resource.js +62 -32
- package/dist/resources/install-agent-resource.js.map +1 -1
- package/dist/resources/install-local-agent-resource.d.ts.map +1 -1
- package/dist/resources/install-local-agent-resource.js +6 -20
- package/dist/resources/install-local-agent-resource.js.map +1 -1
- package/dist/resources/local-resource.d.ts +2 -3
- package/dist/resources/local-resource.d.ts.map +1 -1
- package/dist/resources/local-resource.js +29 -24
- package/dist/resources/local-resource.js.map +1 -1
- package/dist/resources/registry-resource-client.d.ts +3 -0
- package/dist/resources/registry-resource-client.d.ts.map +1 -1
- package/dist/resources/registry-resource-client.js +11 -6
- package/dist/resources/registry-resource-client.js.map +1 -1
- package/dist/resources/resource-files.d.ts +0 -2
- package/dist/resources/resource-files.d.ts.map +1 -1
- package/dist/resources/resource-files.js +16 -28
- package/dist/resources/resource-files.js.map +1 -1
- package/dist/resources/skill-md.d.ts +8 -0
- package/dist/resources/skill-md.d.ts.map +1 -0
- package/dist/resources/skill-md.js +28 -0
- package/dist/resources/skill-md.js.map +1 -0
- package/dist/resources/skill-tool-dependencies.d.ts +18 -28
- package/dist/resources/skill-tool-dependencies.d.ts.map +1 -1
- package/dist/resources/skill-tool-dependencies.js +76 -189
- package/dist/resources/skill-tool-dependencies.js.map +1 -1
- package/dist/resources/types.d.ts +9 -1
- package/dist/resources/types.d.ts.map +1 -1
- package/dist/resources/uninstall-agent-resource.js +3 -3
- package/dist/resources/uninstall-agent-resource.js.map +1 -1
- package/dist/schema/dependencies-lock.d.ts +13 -13
- package/dist/schema/dependencies-lock.js +1 -1
- package/dist/schema/dependencies-lock.js.map +1 -1
- package/dist/schema/lockfile.d.ts +125 -30
- package/dist/schema/lockfile.d.ts.map +1 -1
- package/dist/schema/lockfile.js +16 -8
- package/dist/schema/lockfile.js.map +1 -1
- package/dist/schema/package-manifest.d.ts +6 -6
- package/dist/schema/project-config.js +1 -1
- package/dist/schema/project-config.js.map +1 -1
- package/dist/schema/skill/index.d.ts +4 -1
- package/dist/schema/skill/index.d.ts.map +1 -1
- package/dist/schema/skill/index.js +10 -1
- package/dist/schema/skill/index.js.map +1 -1
- package/dist/validation/validate-agent-project.js +19 -1
- package/dist/validation/validate-agent-project.js.map +1 -1
- package/dist/validation/validate-local-llm.d.ts.map +1 -1
- package/dist/validation/validate-local-llm.js +0 -12
- package/dist/validation/validate-local-llm.js.map +1 -1
- package/package.json +3 -3
- package/dist/schema/skill/manifest.d.ts +0 -108
- package/dist/schema/skill/manifest.d.ts.map +0 -1
- package/dist/schema/skill/manifest.js +0 -37
- package/dist/schema/skill/manifest.js.map +0 -1
|
@@ -4,7 +4,6 @@ import { updateAgentManifest } from '../project/index.js';
|
|
|
4
4
|
import { ResourceCodeSchema } from '../schema/index.js';
|
|
5
5
|
import { resolveAgentProject } from '../discovery/index.js';
|
|
6
6
|
import { readLocalAgentResource } from './local-resource.js';
|
|
7
|
-
import { ensureLocalSkillToolDependencies, readSkillToolDependencies } from './skill-tool-dependencies.js';
|
|
8
7
|
export function installLocalAgentResource(options) {
|
|
9
8
|
const code = ResourceCodeSchema.parse(options.code);
|
|
10
9
|
const project = resolveAgentProject(options.root ? { root: options.root } : {});
|
|
@@ -12,28 +11,13 @@ export function installLocalAgentResource(options) {
|
|
|
12
11
|
const local = readLocalAgentResource(resourceDirectory, options.kind, code);
|
|
13
12
|
const version = options.version ?? local.version;
|
|
14
13
|
if (options.version && local.version !== options.version) {
|
|
15
|
-
throw new Error(
|
|
14
|
+
throw new Error(`本地${resourceKindLabel(options.kind)} ${code} 版本不匹配:指定 ${options.version},实际为 ${local.version}`);
|
|
16
15
|
}
|
|
17
16
|
const kind = options.kind === 'tool' ? 'tools' : 'skills';
|
|
18
17
|
const lock = readEapLock(project.root) ?? emptyLock();
|
|
19
18
|
const existing = lock.resources[kind].find((entry) => entry.code === code);
|
|
20
19
|
if (existing?.source === 'registry') {
|
|
21
|
-
throw new Error(
|
|
22
|
-
}
|
|
23
|
-
if (options.kind === 'skill') {
|
|
24
|
-
ensureLocalSkillToolDependencies({
|
|
25
|
-
root: project.root,
|
|
26
|
-
skillCode: code,
|
|
27
|
-
dependencies: readSkillToolDependencies(resourceDirectory),
|
|
28
|
-
installLocalTool: (dependency) => {
|
|
29
|
-
installLocalAgentResource({
|
|
30
|
-
root: project.root,
|
|
31
|
-
kind: 'tool',
|
|
32
|
-
code: dependency.code,
|
|
33
|
-
version: dependency.version,
|
|
34
|
-
});
|
|
35
|
-
},
|
|
36
|
-
});
|
|
20
|
+
throw new Error(`本地${resourceKindLabel(options.kind)} ${code} 与锁文件中的平台资源记录冲突`);
|
|
37
21
|
}
|
|
38
22
|
const nextLock = readEapLock(project.root) ?? emptyLock();
|
|
39
23
|
nextLock.resources[kind] = [
|
|
@@ -43,7 +27,6 @@ export function installLocalAgentResource(options) {
|
|
|
43
27
|
version,
|
|
44
28
|
source: 'local',
|
|
45
29
|
path: `${kind}/${code}`,
|
|
46
|
-
digest: local.digest,
|
|
47
30
|
},
|
|
48
31
|
];
|
|
49
32
|
writeEapLock(project.root, nextLock);
|
|
@@ -69,9 +52,12 @@ export function installLocalAgentResource(options) {
|
|
|
69
52
|
code,
|
|
70
53
|
version,
|
|
71
54
|
path: resourceDirectory,
|
|
72
|
-
|
|
55
|
+
failures: [],
|
|
73
56
|
};
|
|
74
57
|
}
|
|
58
|
+
function resourceKindLabel(kind) {
|
|
59
|
+
return kind === 'tool' ? ' Tool' : ' Skill';
|
|
60
|
+
}
|
|
75
61
|
function emptyLock() {
|
|
76
62
|
return { lockfileVersion: 2, resources: { tools: [], skills: [], subagents: [] } };
|
|
77
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-local-agent-resource.js","sourceRoot":"","sources":["../../src/resources/install-local-agent-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAgB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"install-local-agent-resource.js","sourceRoot":"","sources":["../../src/resources/install-local-agent-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { AgentResourceKind } from './types.js';
|
|
2
|
-
export declare const LOCAL_SKILL_ENTRY_CANDIDATES: readonly ["
|
|
2
|
+
export declare const LOCAL_SKILL_ENTRY_CANDIDATES: readonly ["SKILL.md", "skill.md"];
|
|
3
3
|
export declare const LOCAL_TOOL_MANIFEST_CANDIDATES: readonly ["toolset.manifest.json", "tool.manifest.json"];
|
|
4
4
|
export interface LocalAgentResourceMetadata {
|
|
5
5
|
version: string;
|
|
6
|
-
|
|
7
|
-
manifestFile: 'tool.manifest.json' | 'toolset.manifest.json' | 'skill.manifest.json' | 'SKILL.md' | 'skill.md';
|
|
6
|
+
manifestFile: 'tool.manifest.json' | 'toolset.manifest.json' | 'SKILL.md' | 'skill.md';
|
|
8
7
|
}
|
|
9
8
|
export declare function findLocalSkillEntryFile(directory: string): (typeof LOCAL_SKILL_ENTRY_CANDIDATES)[number] | undefined;
|
|
10
9
|
export declare function hasOfficialSkillPackage(root: string, code: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-resource.d.ts","sourceRoot":"","sources":["../../src/resources/local-resource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-resource.d.ts","sourceRoot":"","sources":["../../src/resources/local-resource.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,eAAO,MAAM,4BAA4B,mCAAoC,CAAC;AAc9E,eAAO,MAAM,8BAA8B,0DAA2D,CAAC;AAEvG,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EACR,oBAAoB,GACpB,uBAAuB,GACvB,UAAU,GACV,UAAU,CAAC;CAChB;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAMpH;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,GAChB,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAUjD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,MAAM,GACX,0BAA0B,CAsD5B"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { existsSync, lstatSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { SemanticVersionSchema, ToolManifestSchema } from '../schema/index.js';
|
|
4
|
+
import { parseSkillMdIdentity } from './skill-md.js';
|
|
5
|
+
export const LOCAL_SKILL_ENTRY_CANDIDATES = ['SKILL.md', 'skill.md'];
|
|
6
|
+
function resourceKindLabel(kind) {
|
|
7
|
+
return kind === 'tool' ? 'Tool' : 'Skill';
|
|
8
|
+
}
|
|
7
9
|
function isToolsetManifest(value) {
|
|
8
10
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
9
11
|
return false;
|
|
@@ -22,7 +24,7 @@ export function findLocalSkillEntryFile(directory) {
|
|
|
22
24
|
}
|
|
23
25
|
export function hasOfficialSkillPackage(root, code) {
|
|
24
26
|
const entry = findLocalSkillEntryFile(resolve(root, 'skills', code));
|
|
25
|
-
return entry === 'SKILL.md' || entry === 'skill.md'
|
|
27
|
+
return entry === 'SKILL.md' || entry === 'skill.md';
|
|
26
28
|
}
|
|
27
29
|
export function resolveLocalToolManifestFile(directory) {
|
|
28
30
|
const found = LOCAL_TOOL_MANIFEST_CANDIDATES.find((name) => {
|
|
@@ -31,14 +33,20 @@ export function resolveLocalToolManifestFile(directory) {
|
|
|
31
33
|
return Boolean(stat?.isFile() && !stat.isSymbolicLink());
|
|
32
34
|
});
|
|
33
35
|
if (!found) {
|
|
34
|
-
throw new Error(
|
|
36
|
+
throw new Error(`本地 Tool 缺少清单文件:${resolve(directory, 'toolset.manifest.json')} 或 ${resolve(directory, 'tool.manifest.json')}`);
|
|
35
37
|
}
|
|
36
38
|
return found;
|
|
37
39
|
}
|
|
38
40
|
export function readLocalAgentResource(directory, kind, code) {
|
|
39
41
|
const directoryStat = lstatIfExists(directory);
|
|
40
|
-
if (!directoryStat
|
|
41
|
-
|
|
42
|
+
if (!directoryStat) {
|
|
43
|
+
if (kind === 'skill') {
|
|
44
|
+
throw new Error(`未找到本地 Skill ${code}:${directory}。--local 只会查找 skills/${code}/SKILL.md 或 skills/${code}/skill.md。`);
|
|
45
|
+
}
|
|
46
|
+
throw new Error(`未找到本地 Tool ${code}:${directory}。--local 只会查找 tools/${code}/toolset.manifest.json 或 tools/${code}/tool.manifest.json。`);
|
|
47
|
+
}
|
|
48
|
+
if (!directoryStat.isDirectory() || directoryStat.isSymbolicLink()) {
|
|
49
|
+
throw new Error(`本地 ${resourceKindLabel(kind)} 目录必须是非符号链接的普通目录:${directory}`);
|
|
42
50
|
}
|
|
43
51
|
if (kind === 'tool') {
|
|
44
52
|
const manifestName = resolveLocalToolManifestFile(directory);
|
|
@@ -46,38 +54,35 @@ export function readLocalAgentResource(directory, kind, code) {
|
|
|
46
54
|
const value = JSON.parse(readFileSync(manifestFile, 'utf8'));
|
|
47
55
|
if (isToolsetManifest(value)) {
|
|
48
56
|
if (value.code !== code) {
|
|
49
|
-
throw new Error(
|
|
57
|
+
throw new Error(`本地 Tool 标识不匹配:期望 ${code},实际为 ${value.code}`);
|
|
50
58
|
}
|
|
51
|
-
return { version: value.version,
|
|
59
|
+
return { version: value.version, manifestFile: manifestName };
|
|
52
60
|
}
|
|
53
61
|
const manifest = ToolManifestSchema.parse(value);
|
|
54
62
|
if (manifest.code !== code) {
|
|
55
|
-
throw new Error(
|
|
63
|
+
throw new Error(`本地 Tool 标识不匹配:期望 ${code},实际为 ${manifest.code}`);
|
|
56
64
|
}
|
|
57
|
-
return { version: manifest.version,
|
|
65
|
+
return { version: manifest.version, manifestFile: manifestName };
|
|
58
66
|
}
|
|
59
67
|
const entryName = findLocalSkillEntryFile(directory);
|
|
60
68
|
if (!entryName) {
|
|
61
|
-
throw new Error(
|
|
69
|
+
throw new Error(`本地 Skill 目录缺少 SKILL.md 或 skill.md:${directory}。请将入口文件直接放在 skills/${code}/SKILL.md,不能额外嵌套版本目录。`);
|
|
62
70
|
}
|
|
63
71
|
const manifestFile = resolve(directory, entryName);
|
|
64
72
|
if (entryName === 'SKILL.md' || entryName === 'skill.md') {
|
|
65
|
-
const parsed =
|
|
66
|
-
if (!parsed)
|
|
67
|
-
throw new Error(
|
|
73
|
+
const parsed = parseSkillMdIdentity(readFileSync(manifestFile, 'utf8'));
|
|
74
|
+
if (!parsed)
|
|
75
|
+
throw new Error(`本地 Skill 的 SKILL.md YAML frontmatter 缺少 code 或 name:${manifestFile}`);
|
|
76
|
+
if (parsed.code && parsed.code !== code) {
|
|
77
|
+
throw new Error(`本地 Skill 标识不匹配:期望 ${code},实际为 ${parsed.code}`);
|
|
68
78
|
}
|
|
79
|
+
const version = parsed.version ? SemanticVersionSchema.parse(parsed.version) : '1.0.0';
|
|
69
80
|
return {
|
|
70
|
-
version
|
|
71
|
-
digest: readFileDigest(manifestFile),
|
|
81
|
+
version,
|
|
72
82
|
manifestFile: entryName,
|
|
73
83
|
};
|
|
74
84
|
}
|
|
75
|
-
|
|
76
|
-
if (manifest.code !== code)
|
|
77
|
-
throw new Error(`Local ${kind} identity mismatch: expected ${code}, received ${manifest.code}`);
|
|
78
|
-
if (!manifest.version)
|
|
79
|
-
throw new Error(`Local ${kind} manifest is missing version: ${manifestFile}`);
|
|
80
|
-
return { version: manifest.version, digest: readFileDigest(manifestFile), manifestFile: 'skill.manifest.json' };
|
|
85
|
+
throw new Error(`本地 Skill 目录缺少 SKILL.md 或 skill.md:${directory}`);
|
|
81
86
|
}
|
|
82
87
|
function lstatIfExists(path) {
|
|
83
88
|
if (!existsSync(path))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-resource.js","sourceRoot":"","sources":["../../src/resources/local-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"local-resource.js","sourceRoot":"","sources":["../../src/resources/local-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,UAAU,EAAE,UAAU,CAAU,CAAC;AAE9E,SAAS,iBAAiB,CAAC,IAAuB;IAChD,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,MAAM,GAAG,KAA+D,CAAC;IAC/E,OAAO,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;WACjC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;WAClC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,CAAU,CAAC;AAWvG,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,IAAY;IAChE,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACrE,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAAiB;IAEjB,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACjI,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,IAAuB,EACvB,IAAY;IAEZ,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,IAAI,SAAS,wBAAwB,IAAI,sBAAsB,IAAI,YAAY,CACnG,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,IAAI,SAAS,uBAAuB,IAAI,kCAAkC,IAAI,sBAAsB,CACvH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAY,CAAC;QACxE,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;QAChE,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qCAAqC,SAAS,sBAAsB,IAAI,uBAAuB,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,oBAAoB,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,YAAY,EAAE,CAAC,CAAC;QACpG,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,OAAO;YACL,OAAO;YACP,YAAY,EAAE,SAAS;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import type { PlatformSkillManifest } from '../platform/types.js';
|
|
1
2
|
import type { AgentResourceKind } from './types.js';
|
|
2
3
|
export interface RegistryResourceArchive {
|
|
3
4
|
sourceUrl: string;
|
|
4
5
|
archive: Buffer;
|
|
6
|
+
/** Platform-owned Skill tool references; never inferred from the ZIP. */
|
|
7
|
+
skillToolRefs?: PlatformSkillManifest['toolRefs'];
|
|
5
8
|
}
|
|
6
9
|
export type RegistryResourcePackage = RegistryResourceArchive;
|
|
7
10
|
export declare function fetchRegistryResourcePackage(options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-resource-client.d.ts","sourceRoot":"","sources":["../../src/resources/registry-resource-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry-resource-client.d.ts","sourceRoot":"","sources":["../../src/resources/registry-resource-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,qBAAqB,EAAsB,MAAM,sBAAsB,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,aAAa,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAE9D,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAgCnC"}
|
|
@@ -12,30 +12,35 @@ export async function fetchRegistryResourcePackage(options) {
|
|
|
12
12
|
const response = options.kind === 'tool'
|
|
13
13
|
? await client.getToolDetail(options.code, options.version)
|
|
14
14
|
: await client.getSkillDetail(options.code, options.version);
|
|
15
|
+
let skillToolRefs;
|
|
15
16
|
if (options.kind === 'tool') {
|
|
16
17
|
const detail = response.data;
|
|
17
18
|
if (!detail)
|
|
18
|
-
throw new Error(
|
|
19
|
+
throw new Error(`平台 Tool ${options.code}@${options.version} 缺少详情`);
|
|
19
20
|
assertToolIdentity(detail, options.code, options.version);
|
|
20
21
|
// Code、MCP、HTTP 统一由 source_url 提供 ZIP 制品;access_type 不再改变安装链路。
|
|
21
22
|
}
|
|
23
|
+
else {
|
|
24
|
+
const detail = response.data;
|
|
25
|
+
skillToolRefs = detail?.skill_manifest?.toolRefs ?? [];
|
|
26
|
+
}
|
|
22
27
|
const sourceUrl = response.data?.source_url?.trim();
|
|
23
28
|
if (!sourceUrl) {
|
|
24
|
-
throw new Error(
|
|
29
|
+
throw new Error(`平台${kindLabel(options.kind)} ${options.code}@${options.version} 缺少 source_url`);
|
|
25
30
|
}
|
|
26
31
|
assertZipSourceUrl(sourceUrl, endpoint, options.kind, options.code, options.version);
|
|
27
32
|
const archive = Buffer.from(await client.downloadPortalFile(sourceUrl));
|
|
28
|
-
return { sourceUrl, archive };
|
|
33
|
+
return { sourceUrl, archive, ...(options.kind === 'skill' ? { skillToolRefs } : {}) };
|
|
29
34
|
}
|
|
30
35
|
function kindLabel(kind) {
|
|
31
36
|
return kind === 'tool' ? '工具' : '技能';
|
|
32
37
|
}
|
|
33
38
|
function assertToolIdentity(detail, code, version) {
|
|
34
39
|
if (detail.tool_code !== code) {
|
|
35
|
-
throw new Error(
|
|
40
|
+
throw new Error(`平台 Tool 标识不匹配:请求 ${code},实际收到 ${detail.tool_code || '(缺失)'}`);
|
|
36
41
|
}
|
|
37
42
|
if (detail.version !== version) {
|
|
38
|
-
throw new Error(
|
|
43
|
+
throw new Error(`平台 Tool 版本不匹配:请求 ${version},实际收到 ${detail.version || '(缺失)'}`);
|
|
39
44
|
}
|
|
40
45
|
}
|
|
41
46
|
function assertZipSourceUrl(sourceUrl, endpoint, kind, code, version) {
|
|
@@ -43,7 +48,7 @@ function assertZipSourceUrl(sourceUrl, endpoint, kind, code, version) {
|
|
|
43
48
|
new URL(sourceUrl, `${endpoint}/`);
|
|
44
49
|
}
|
|
45
50
|
catch {
|
|
46
|
-
throw new Error(
|
|
51
|
+
throw new Error(`平台${kindLabel(kind)} ${code}@${version} 的 source_url 无效:${sourceUrl}`);
|
|
47
52
|
}
|
|
48
53
|
}
|
|
49
54
|
//# sourceMappingURL=registry-resource-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-resource-client.js","sourceRoot":"","sources":["../../src/resources/registry-resource-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry-resource-client.js","sourceRoot":"","sources":["../../src/resources/registry-resource-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,4 @@ export declare function ensureGeneratedDirectory(root: string): string;
|
|
|
8
8
|
export declare function ensureGeneratedDirectoryPath(root: string, components: readonly string[]): string;
|
|
9
9
|
export declare function validateDirectoryChild(parent: string, child: string): string | undefined;
|
|
10
10
|
export declare function removeDirectoryChild(parent: string, child: string): void;
|
|
11
|
-
export declare function readFileDigest(path: string): `sha256:${string}`;
|
|
12
|
-
export declare function readRegistryResourceManifestDigest(directory: string, kind: 'tool' | 'skill'): `sha256:${string}`;
|
|
13
11
|
//# sourceMappingURL=resource-files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-files.d.ts","sourceRoot":"","sources":["../../src/resources/resource-files.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoB7E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAahG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxE
|
|
1
|
+
{"version":3,"file":"resource-files.d.ts","sourceRoot":"","sources":["../../src/resources/resource-files.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoB7E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAahG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxE"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { lstatSync, mkdirSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { basename, dirname, relative, resolve, sep } from 'node:path';
|
|
3
|
-
import { sha256 } from '../digest.js';
|
|
4
3
|
export { sha256 } from '../digest.js';
|
|
5
4
|
export function writeFileAtomically(path, data) {
|
|
6
5
|
const destination = resolve(path);
|
|
7
|
-
const parent = assertRegularDirectory(dirname(destination), '
|
|
6
|
+
const parent = assertRegularDirectory(dirname(destination), '原子写入目标的父目录');
|
|
8
7
|
const filename = basename(destination);
|
|
9
8
|
const target = resolve(parent, filename);
|
|
10
9
|
const existing = lstatIfExists(target);
|
|
11
10
|
if (existing && (!existing.isFile() || existing.isSymbolicLink())) {
|
|
12
|
-
throw new Error(
|
|
11
|
+
throw new Error(`原子写入目标必须是非符号链接的普通文件:${target}`);
|
|
13
12
|
}
|
|
14
13
|
const tempPath = resolve(parent, `${filename}.${process.pid}.${Date.now()}.tmp`);
|
|
15
14
|
if (lstatIfExists(tempPath))
|
|
16
|
-
throw new Error(
|
|
15
|
+
throw new Error(`原子写入临时文件已存在:${tempPath}`);
|
|
17
16
|
writeFileSync(tempPath, data, { flag: 'wx' });
|
|
18
17
|
try {
|
|
19
18
|
renameSync(tempPath, target);
|
|
@@ -33,30 +32,30 @@ export function ensureGeneratedDirectory(root) {
|
|
|
33
32
|
* Every component is checked with lstat and realpath before it can be used.
|
|
34
33
|
*/
|
|
35
34
|
export function ensureGeneratedDirectoryPath(root, components) {
|
|
36
|
-
const realRoot = assertRegularDirectory(root, '
|
|
35
|
+
const realRoot = assertRegularDirectory(root, '生成状态根目录');
|
|
37
36
|
let current = realRoot;
|
|
38
37
|
for (const component of components) {
|
|
39
38
|
assertDirectoryComponent(component);
|
|
40
39
|
const candidate = resolve(current, component);
|
|
41
|
-
assertInside(current, candidate, '
|
|
40
|
+
assertInside(current, candidate, '生成状态目录');
|
|
42
41
|
const existing = lstatIfExists(candidate);
|
|
43
42
|
if (!existing)
|
|
44
43
|
mkdirSync(candidate);
|
|
45
|
-
current = assertRegularDirectory(candidate, '
|
|
46
|
-
assertInside(realRoot, current, '
|
|
44
|
+
current = assertRegularDirectory(candidate, '生成状态目录');
|
|
45
|
+
assertInside(realRoot, current, '生成状态目录');
|
|
47
46
|
}
|
|
48
47
|
return current;
|
|
49
48
|
}
|
|
50
49
|
export function validateDirectoryChild(parent, child) {
|
|
51
|
-
const realParent = assertRegularDirectory(parent, '
|
|
50
|
+
const realParent = assertRegularDirectory(parent, '生成状态父目录');
|
|
52
51
|
assertDirectoryComponent(child);
|
|
53
52
|
const path = resolve(realParent, child);
|
|
54
|
-
assertInside(realParent, path, '
|
|
53
|
+
assertInside(realParent, path, '生成状态子目录');
|
|
55
54
|
if (!lstatIfExists(path))
|
|
56
55
|
return undefined;
|
|
57
|
-
const realChild = assertRegularDirectory(path, '
|
|
56
|
+
const realChild = assertRegularDirectory(path, '生成状态子目录');
|
|
58
57
|
if (realpathSync(dirname(path)) !== realParent || !isInside(realParent, realChild)) {
|
|
59
|
-
throw new Error(
|
|
58
|
+
throw new Error(`生成状态子目录越出了父目录:${path}`);
|
|
60
59
|
}
|
|
61
60
|
return realChild;
|
|
62
61
|
}
|
|
@@ -66,34 +65,23 @@ export function removeDirectoryChild(parent, child) {
|
|
|
66
65
|
return;
|
|
67
66
|
rmSync(directory, { recursive: true, force: true });
|
|
68
67
|
}
|
|
69
|
-
export function readFileDigest(path) {
|
|
70
|
-
return sha256(readFileSync(path));
|
|
71
|
-
}
|
|
72
|
-
export function readRegistryResourceManifestDigest(directory, kind) {
|
|
73
|
-
const manifestName = kind === 'skill'
|
|
74
|
-
? 'skill.manifest.json'
|
|
75
|
-
: existsSync(resolve(directory, 'toolset.manifest.json'))
|
|
76
|
-
? 'toolset.manifest.json'
|
|
77
|
-
: 'tool.manifest.json';
|
|
78
|
-
return readFileDigest(resolve(directory, manifestName));
|
|
79
|
-
}
|
|
80
68
|
function assertRegularDirectory(path, label) {
|
|
81
69
|
const stat = lstatIfExists(path);
|
|
82
70
|
if (!stat)
|
|
83
|
-
throw new Error(`${label}
|
|
71
|
+
throw new Error(`${label}不存在:${path}`);
|
|
84
72
|
if (!stat.isDirectory() || stat.isSymbolicLink()) {
|
|
85
|
-
throw new Error(`${label}
|
|
73
|
+
throw new Error(`${label}必须是非符号链接的普通目录:${path}`);
|
|
86
74
|
}
|
|
87
75
|
return realpathSync(path);
|
|
88
76
|
}
|
|
89
77
|
function assertDirectoryComponent(component) {
|
|
90
78
|
if (!component || component === '.' || component === '..' || /[\\/]/.test(component)) {
|
|
91
|
-
throw new Error(
|
|
79
|
+
throw new Error(`生成状态目录名无效:${component}`);
|
|
92
80
|
}
|
|
93
81
|
}
|
|
94
82
|
function assertInside(root, target, label) {
|
|
95
83
|
if (!isInside(root, target))
|
|
96
|
-
throw new Error(`${label}
|
|
84
|
+
throw new Error(`${label}越出了根目录:${target}`);
|
|
97
85
|
}
|
|
98
86
|
function isInside(root, target) {
|
|
99
87
|
const relativePath = relative(resolve(root), resolve(target));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-files.js","sourceRoot":"","sources":["../../src/resources/resource-files.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resource-files.js","sourceRoot":"","sources":["../../src/resources/resource-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ParsedSkillIdentity {
|
|
2
|
+
code?: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
}
|
|
6
|
+
/** Parse only the SDK-owned identity fields from SKILL.md frontmatter. */
|
|
7
|
+
export declare function parseSkillMdIdentity(content: string): ParsedSkillIdentity | null;
|
|
8
|
+
//# sourceMappingURL=skill-md.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md.d.ts","sourceRoot":"","sources":["../../src/resources/skill-md.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAoBhF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { parse } from 'yaml';
|
|
2
|
+
/** Parse only the SDK-owned identity fields from SKILL.md frontmatter. */
|
|
3
|
+
export function parseSkillMdIdentity(content) {
|
|
4
|
+
const lines = content.split(/\r?\n/);
|
|
5
|
+
if (lines[0]?.trim() !== '---')
|
|
6
|
+
return null;
|
|
7
|
+
const closing = lines.findIndex((line, index) => index > 0 && line.trim() === '---');
|
|
8
|
+
if (closing < 0)
|
|
9
|
+
return null;
|
|
10
|
+
let value;
|
|
11
|
+
try {
|
|
12
|
+
value = parse(lines.slice(1, closing).join('\n'));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
18
|
+
return null;
|
|
19
|
+
const record = value;
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const key of ['code', 'name', 'version']) {
|
|
22
|
+
const raw = record[key];
|
|
23
|
+
if (typeof raw === 'string' && raw.trim())
|
|
24
|
+
result[key] = raw.trim();
|
|
25
|
+
}
|
|
26
|
+
return result.code || result.name ? result : null;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=skill-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md.js","sourceRoot":"","sources":["../../src/resources/skill-md.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAQ7B,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC;IACrF,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7B,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAU,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* contract's older `toolRefs` spelling. Only object entries with an explicit
|
|
4
|
-
* `code` identify installable Toolsets. String entries are tool names used for
|
|
5
|
-
* runtime filtering and must already be provided by the Agent.
|
|
6
|
-
*/
|
|
1
|
+
import { type LockSkillResource } from '../schema/index.js';
|
|
2
|
+
import type { ResourceInstallFailure } from './types.js';
|
|
7
3
|
export interface SkillToolDependency {
|
|
8
4
|
code: string;
|
|
9
5
|
version?: string;
|
|
@@ -16,31 +12,25 @@ export interface EnsureSkillToolDependenciesOptions {
|
|
|
16
12
|
installLocalTool: (dependency: SkillToolDependency) => void;
|
|
17
13
|
hasRegistryCredentials?: boolean;
|
|
18
14
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
export declare function normalizePlatformSkillToolRefs(value: unknown): {
|
|
16
|
+
refs: Array<{
|
|
17
|
+
toolId: string;
|
|
18
|
+
name: string;
|
|
19
|
+
version: string;
|
|
20
|
+
}>;
|
|
21
|
+
errors: string[];
|
|
22
|
+
};
|
|
23
|
+
/** Read Tool dependencies only from platform-owned Skill lock metadata. */
|
|
24
|
+
export declare function readSkillToolDependencies(skill: Pick<LockSkillResource, 'toolRefs'> | Array<{
|
|
25
|
+
toolId: string;
|
|
26
|
+
name: string;
|
|
27
|
+
version: string;
|
|
28
|
+
}> | undefined): SkillToolDependency[];
|
|
23
29
|
export interface InstalledSkillToolReference {
|
|
24
30
|
skillCode: string;
|
|
25
31
|
skillVersion: string;
|
|
26
32
|
}
|
|
27
|
-
/** Find declared Skills that still reference a
|
|
33
|
+
/** Find declared Skills that still reference a Tool code from the lock. */
|
|
28
34
|
export declare function findInstalledSkillToolReferences(root: string, toolCode: string): InstalledSkillToolReference[];
|
|
29
|
-
|
|
30
|
-
* Offline reconciliation used by the synchronous local-resource API. Existing
|
|
31
|
-
* Agent toolRefs always win; local dependencies are added immediately, while a
|
|
32
|
-
* missing Registry dependency is reported with the exact install command.
|
|
33
|
-
*/
|
|
34
|
-
export declare function ensureLocalSkillToolDependencies(options: {
|
|
35
|
-
root: string;
|
|
36
|
-
skillCode: string;
|
|
37
|
-
dependencies: SkillToolDependency[];
|
|
38
|
-
installLocalTool: (dependency: SkillToolDependency) => void;
|
|
39
|
-
}): void;
|
|
40
|
-
/**
|
|
41
|
-
* Reconcile Skill Toolset dependencies with the Agent's top-level toolRefs.
|
|
42
|
-
* Agent dependencies remain the lock/materialization unit; a Skill never gets
|
|
43
|
-
* an independent lock file or a second Tool installation namespace.
|
|
44
|
-
*/
|
|
45
|
-
export declare function ensureSkillToolDependencies(options: EnsureSkillToolDependenciesOptions): Promise<void>;
|
|
35
|
+
export declare function ensureSkillToolDependencies(options: EnsureSkillToolDependenciesOptions): Promise<ResourceInstallFailure[]>;
|
|
46
36
|
//# sourceMappingURL=skill-tool-dependencies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-tool-dependencies.d.ts","sourceRoot":"","sources":["../../src/resources/skill-tool-dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-tool-dependencies.d.ts","sourceRoot":"","sources":["../../src/resources/skill-tool-dependencies.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiD,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,mBAAmB,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,gBAAgB,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG;IAC9D,IAAI,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAqBA;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,GAChH,mBAAmB,EAAE,CAiBvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,2EAA2E;AAC3E,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,2BAA2B,EAAE,CAW9G;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkBnC"}
|