@gt-fe/eap-sdk 0.1.1 → 0.1.3
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 +378 -370
- package/dist/discovery/resolve-agent-project.d.ts.map +1 -1
- package/dist/discovery/resolve-agent-project.js +2 -3
- package/dist/discovery/resolve-agent-project.js.map +1 -1
- package/dist/lockfile/read-lockfile.js +2 -2
- package/dist/lockfile/read-lockfile.js.map +1 -1
- package/dist/lockfile/resolve-dependencies.js +11 -11
- package/dist/lockfile/resolve-dependencies.js.map +1 -1
- package/dist/packaging/package-agent-project.d.ts.map +1 -1
- package/dist/packaging/package-agent-project.js +10 -2
- package/dist/packaging/package-agent-project.js.map +1 -1
- package/dist/platform/client.d.ts +7 -0
- package/dist/platform/client.d.ts.map +1 -1
- package/dist/platform/client.js +16 -2
- package/dist/platform/client.js.map +1 -1
- package/dist/project/agent-project.js +1 -1
- package/dist/project/agent-project.js.map +1 -1
- package/dist/resources/extract-resource-package.js +7 -6
- 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-resource.d.ts.map +1 -1
- package/dist/resources/install-agent-resource.js +35 -3
- 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 +20 -3
- package/dist/resources/install-local-agent-resource.js.map +1 -1
- package/dist/resources/skill-tool-dependencies.d.ts +46 -0
- package/dist/resources/skill-tool-dependencies.d.ts.map +1 -0
- package/dist/resources/skill-tool-dependencies.js +231 -0
- package/dist/resources/skill-tool-dependencies.js.map +1 -0
- package/dist/resources/uninstall-agent-resource.d.ts.map +1 -1
- package/dist/resources/uninstall-agent-resource.js +10 -0
- package/dist/resources/uninstall-agent-resource.js.map +1 -1
- package/dist/schema/agent/manifest.js +1 -1
- package/dist/schema/agent/manifest.js.map +1 -1
- package/dist/schema/agent/models.js +4 -4
- package/dist/schema/agent/models.js.map +1 -1
- package/dist/schema/common.d.ts.map +1 -1
- package/dist/schema/common.js +7 -5
- package/dist/schema/common.js.map +1 -1
- package/dist/schema/dependencies-lock.js +1 -1
- package/dist/schema/dependencies-lock.js.map +1 -1
- package/dist/schema/package-manifest.js +2 -2
- package/dist/schema/package-manifest.js.map +1 -1
- package/dist/schema/project-config.d.ts +7 -7
- package/dist/schema/project-config.js +4 -4
- package/dist/schema/project-config.js.map +1 -1
- package/dist/schema/skill/manifest.js +2 -2
- package/dist/schema/skill/manifest.js.map +1 -1
- package/dist/schema/tool/manifest.d.ts +14 -14
- package/dist/schema/tool/manifest.js +8 -8
- package/dist/schema/tool/manifest.js.map +1 -1
- package/dist/schema/zod-error-map.d.ts +3 -0
- package/dist/schema/zod-error-map.d.ts.map +1 -0
- package/dist/schema/zod-error-map.js +91 -0
- package/dist/schema/zod-error-map.js.map +1 -0
- package/dist/validation/validate-agent-directory.js +4 -4
- package/dist/validation/validate-agent-directory.js.map +1 -1
- package/dist/validation/validate-agent-project.js +4 -4
- package/dist/validation/validate-agent-project.js.map +1 -1
- package/dist/validation/validate-graph.d.ts.map +1 -1
- package/dist/validation/validate-graph.js +53 -15
- package/dist/validation/validate-graph.js.map +1 -1
- package/dist/validation/validate-local-llm.js +2 -2
- package/dist/validation/validate-local-llm.js.map +1 -1
- package/package.json +3 -3
|
@@ -4,6 +4,7 @@ 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';
|
|
7
8
|
export function installLocalAgentResource(options) {
|
|
8
9
|
const code = ResourceCodeSchema.parse(options.code);
|
|
9
10
|
const project = resolveAgentProject(options.root ? { root: options.root } : {});
|
|
@@ -19,8 +20,24 @@ export function installLocalAgentResource(options) {
|
|
|
19
20
|
if (existing?.source === 'registry') {
|
|
20
21
|
throw new Error(`Local ${options.kind} ${code} conflicts with its Registry lock entry`);
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
|
|
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
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const nextLock = readEapLock(project.root) ?? emptyLock();
|
|
39
|
+
nextLock.resources[kind] = [
|
|
40
|
+
...nextLock.resources[kind].filter((entry) => entry.code !== code),
|
|
24
41
|
{
|
|
25
42
|
code,
|
|
26
43
|
version,
|
|
@@ -29,7 +46,7 @@ export function installLocalAgentResource(options) {
|
|
|
29
46
|
digest: local.digest,
|
|
30
47
|
},
|
|
31
48
|
];
|
|
32
|
-
writeEapLock(project.root,
|
|
49
|
+
writeEapLock(project.root, nextLock);
|
|
33
50
|
updateAgentManifest({
|
|
34
51
|
root: project.root,
|
|
35
52
|
update: (manifest) => options.kind === 'tool'
|
|
@@ -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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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Skill can scope tools with `toolsets` (the Runtime spelling) or the
|
|
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
|
+
*/
|
|
7
|
+
export interface SkillToolDependency {
|
|
8
|
+
code: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface EnsureSkillToolDependenciesOptions {
|
|
12
|
+
root: string;
|
|
13
|
+
skillCode: string;
|
|
14
|
+
dependencies: SkillToolDependency[];
|
|
15
|
+
installRegistryTool: (dependency: Required<SkillToolDependency>) => Promise<void>;
|
|
16
|
+
installLocalTool: (dependency: SkillToolDependency) => void;
|
|
17
|
+
hasRegistryCredentials?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Read installable Toolset references from a materialized Skill directory. */
|
|
20
|
+
export declare function readSkillToolDependencies(directory: string): SkillToolDependency[];
|
|
21
|
+
/** Read all Skill tool names for uninstall/reference checks. */
|
|
22
|
+
export declare function readSkillToolReferenceNames(directory: string): string[];
|
|
23
|
+
export interface InstalledSkillToolReference {
|
|
24
|
+
skillCode: string;
|
|
25
|
+
skillVersion: string;
|
|
26
|
+
}
|
|
27
|
+
/** Find declared Skills that still reference a Toolset code. */
|
|
28
|
+
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>;
|
|
46
|
+
//# sourceMappingURL=skill-tool-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-tool-dependencies.d.ts","sourceRoot":"","sources":["../../src/resources/skill-tool-dependencies.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,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,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAqClF;AAED,gEAAgE;AAChE,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAmCvE;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gEAAgE;AAChE,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,2BAA2B,EAAE,CAgB/B;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,gBAAgB,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC7D,GAAG,IAAI,CA8BP;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { parseSkillMd } from '@gt-fe/eap-contracts';
|
|
4
|
+
import { resolveAgentProject } from '../discovery/index.js';
|
|
5
|
+
import { readEapLock } from '../lockfile/index.js';
|
|
6
|
+
import { updateAgentManifest } from '../project/index.js';
|
|
7
|
+
import { AgentManifestSchema } from '../schema/index.js';
|
|
8
|
+
import { findLocalSkillEntryFile, readLocalAgentResource } from './local-resource.js';
|
|
9
|
+
/** Read installable Toolset references from a materialized Skill directory. */
|
|
10
|
+
export function readSkillToolDependencies(directory) {
|
|
11
|
+
const manifestPath = resolve(directory, 'skill.manifest.json');
|
|
12
|
+
if (!isRegularFile(manifestPath))
|
|
13
|
+
return [];
|
|
14
|
+
let value;
|
|
15
|
+
try {
|
|
16
|
+
value = JSON.parse(readFileSync(manifestPath, 'utf8'));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
20
|
+
throw new Error(`Skill manifest is not valid JSON: ${manifestPath} (${reason})`);
|
|
21
|
+
}
|
|
22
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
23
|
+
return [];
|
|
24
|
+
const manifest = value;
|
|
25
|
+
const dependencies = [];
|
|
26
|
+
const byCode = new Map();
|
|
27
|
+
for (const field of ['toolsets', 'toolRefs']) {
|
|
28
|
+
const refs = manifest[field];
|
|
29
|
+
if (!Array.isArray(refs))
|
|
30
|
+
continue;
|
|
31
|
+
for (const ref of refs) {
|
|
32
|
+
const dependency = parseInstallableDependency(ref);
|
|
33
|
+
if (!dependency)
|
|
34
|
+
continue;
|
|
35
|
+
const previous = byCode.get(dependency.code);
|
|
36
|
+
if (previous) {
|
|
37
|
+
if (previous.version && dependency.version && previous.version !== dependency.version) {
|
|
38
|
+
throw new Error(`Skill ${String(manifest.code ?? '(unknown)')} declares conflicting Toolset versions for ${dependency.code}: ${previous.version} and ${dependency.version}`);
|
|
39
|
+
}
|
|
40
|
+
if (!previous.version && dependency.version)
|
|
41
|
+
previous.version = dependency.version;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
byCode.set(dependency.code, dependency);
|
|
45
|
+
dependencies.push(dependency);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return dependencies;
|
|
49
|
+
}
|
|
50
|
+
/** Read all Skill tool names for uninstall/reference checks. */
|
|
51
|
+
export function readSkillToolReferenceNames(directory) {
|
|
52
|
+
const manifestPath = resolve(directory, 'skill.manifest.json');
|
|
53
|
+
if (!isRegularFile(manifestPath))
|
|
54
|
+
return readSkillMdAllowedTools(directory);
|
|
55
|
+
let value;
|
|
56
|
+
try {
|
|
57
|
+
value = JSON.parse(readFileSync(manifestPath, 'utf8'));
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
61
|
+
throw new Error(`Skill manifest is not valid JSON: ${manifestPath} (${reason})`);
|
|
62
|
+
}
|
|
63
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
64
|
+
return [];
|
|
65
|
+
const names = new Set();
|
|
66
|
+
const manifest = value;
|
|
67
|
+
for (const field of ['toolsets', 'toolRefs']) {
|
|
68
|
+
const refs = manifest[field];
|
|
69
|
+
if (!Array.isArray(refs))
|
|
70
|
+
continue;
|
|
71
|
+
for (const ref of refs) {
|
|
72
|
+
if (typeof ref === 'string' && ref.trim()) {
|
|
73
|
+
names.add(ref.trim());
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!ref || typeof ref !== 'object' || Array.isArray(ref))
|
|
77
|
+
continue;
|
|
78
|
+
const record = ref;
|
|
79
|
+
for (const fieldName of ['code', 'toolset', 'toolId', 'name']) {
|
|
80
|
+
const name = record[fieldName];
|
|
81
|
+
if (typeof name === 'string' && name.trim()) {
|
|
82
|
+
names.add(name.trim());
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return [...names, ...readSkillMdAllowedTools(directory)].sort();
|
|
89
|
+
}
|
|
90
|
+
/** Find declared Skills that still reference a Toolset code. */
|
|
91
|
+
export function findInstalledSkillToolReferences(root, toolCode) {
|
|
92
|
+
const project = resolveAgentProject({ root });
|
|
93
|
+
const manifest = AgentManifestSchema.parse(JSON.parse(readFileSync(project.manifestPath, 'utf8')));
|
|
94
|
+
const lock = readEapLock(project.root);
|
|
95
|
+
const references = [];
|
|
96
|
+
for (const skillRef of manifest.skillRefs) {
|
|
97
|
+
const locked = lock?.resources.skills.find((entry) => entry.code === skillRef.code);
|
|
98
|
+
const sourcePath = locked
|
|
99
|
+
? resolve(project.root, locked.path)
|
|
100
|
+
: resolve(project.root, 'skills', skillRef.code);
|
|
101
|
+
if (!existsAsDirectory(sourcePath))
|
|
102
|
+
continue;
|
|
103
|
+
if (!readSkillToolReferenceNames(sourcePath).includes(toolCode))
|
|
104
|
+
continue;
|
|
105
|
+
references.push({ skillCode: skillRef.code, skillVersion: skillRef.version });
|
|
106
|
+
}
|
|
107
|
+
return references.sort((left, right) => left.skillCode.localeCompare(right.skillCode));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Offline reconciliation used by the synchronous local-resource API. Existing
|
|
111
|
+
* Agent toolRefs always win; local dependencies are added immediately, while a
|
|
112
|
+
* missing Registry dependency is reported with the exact install command.
|
|
113
|
+
*/
|
|
114
|
+
export function ensureLocalSkillToolDependencies(options) {
|
|
115
|
+
if (options.dependencies.length === 0)
|
|
116
|
+
return;
|
|
117
|
+
const project = resolveAgentProject({ root: options.root });
|
|
118
|
+
const manifest = AgentManifestSchema.parse(JSON.parse(readFileSync(project.manifestPath, 'utf8')));
|
|
119
|
+
const lock = readEapLock(project.root);
|
|
120
|
+
for (const dependency of options.dependencies) {
|
|
121
|
+
const existing = manifest.toolRefs.find((ref) => ref.code === dependency.code);
|
|
122
|
+
if (existing)
|
|
123
|
+
continue;
|
|
124
|
+
const locked = lock?.resources.tools.find((entry) => entry.code === dependency.code);
|
|
125
|
+
const localDirectory = resolve(project.root, 'tools', dependency.code);
|
|
126
|
+
if (existsAsDirectory(localDirectory)) {
|
|
127
|
+
options.installLocalTool({
|
|
128
|
+
code: dependency.code,
|
|
129
|
+
...(dependency.version ? { version: dependency.version } : {}),
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const version = dependency.version ?? locked?.version;
|
|
134
|
+
if (locked?.source === 'registry' && version) {
|
|
135
|
+
throw new Error(`本地 Skill ${options.skillCode} 依赖 Registry Toolset ${dependency.code}@${version},请先运行 eap install ${dependency.code} --type tool --version ${version}`);
|
|
136
|
+
}
|
|
137
|
+
throw new Error(`本地 Skill ${options.skillCode} 依赖 Toolset ${dependency.code}${version ? `@${version}` : ''},但当前项目未安装。请先安装该 Tool,再重新安装 Skill。`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Reconcile Skill Toolset dependencies with the Agent's top-level toolRefs.
|
|
142
|
+
* Agent dependencies remain the lock/materialization unit; a Skill never gets
|
|
143
|
+
* an independent lock file or a second Tool installation namespace.
|
|
144
|
+
*/
|
|
145
|
+
export async function ensureSkillToolDependencies(options) {
|
|
146
|
+
if (options.dependencies.length === 0)
|
|
147
|
+
return;
|
|
148
|
+
const project = resolveAgentProject({ root: options.root });
|
|
149
|
+
for (const dependency of options.dependencies) {
|
|
150
|
+
const manifest = AgentManifestSchema.parse(JSON.parse(readFileSync(project.manifestPath, 'utf8')));
|
|
151
|
+
const existing = manifest.toolRefs.find((ref) => ref.code === dependency.code);
|
|
152
|
+
const lock = readEapLock(project.root);
|
|
153
|
+
const locked = lock?.resources.tools.find((entry) => entry.code === dependency.code);
|
|
154
|
+
const localDirectory = resolve(project.root, 'tools', dependency.code);
|
|
155
|
+
const local = existsAsDirectory(localDirectory)
|
|
156
|
+
? readLocalAgentResource(localDirectory, 'tool', dependency.code)
|
|
157
|
+
: undefined;
|
|
158
|
+
if (locked?.source === 'registry' && local) {
|
|
159
|
+
throw new Error(`Registry Toolset ${dependency.code} conflicts with local directory ${localDirectory}`);
|
|
160
|
+
}
|
|
161
|
+
// An Agent-level reference is the authority. This is what makes Portal
|
|
162
|
+
// Agent initialization and standalone Skill installation deterministic
|
|
163
|
+
// when a Skill asks for a different version of the same Toolset.
|
|
164
|
+
const version = existing?.version ?? dependency.version ?? locked?.version ?? local?.version;
|
|
165
|
+
if (locked?.source === 'local' && local) {
|
|
166
|
+
addAgentToolRef(project.root, dependency.code, version ?? local.version);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (locked?.source === 'registry'
|
|
170
|
+
&& locked.version === version
|
|
171
|
+
&& version
|
|
172
|
+
&& existsAsDirectory(resolve(project.root, locked.path))) {
|
|
173
|
+
addAgentToolRef(project.root, dependency.code, version);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (local) {
|
|
177
|
+
options.installLocalTool({ code: dependency.code, ...(version ? { version } : {}) });
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (!version) {
|
|
181
|
+
throw new Error(`Skill ${options.skillCode} declares Toolset ${dependency.code} without a version. Add { "code": "${dependency.code}", "version": "x.y.z" } to the Skill manifest or install the Tool explicitly first.`);
|
|
182
|
+
}
|
|
183
|
+
if (options.hasRegistryCredentials === false) {
|
|
184
|
+
throw new Error(`Skill ${options.skillCode} requires Registry Toolset ${dependency.code}@${version}. Install it first with eap install ${dependency.code} --type tool --version ${version}.`);
|
|
185
|
+
}
|
|
186
|
+
await options.installRegistryTool({ code: dependency.code, version });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function addAgentToolRef(root, code, version) {
|
|
190
|
+
updateAgentManifest({
|
|
191
|
+
root,
|
|
192
|
+
update: (manifest) => manifest.toolRefs.some((ref) => ref.code === code)
|
|
193
|
+
? manifest
|
|
194
|
+
: { ...manifest, toolRefs: [...manifest.toolRefs, { code, version }] },
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function parseInstallableDependency(value) {
|
|
198
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
199
|
+
return undefined;
|
|
200
|
+
const record = value;
|
|
201
|
+
// `toolId`/`name` identify child tools for Runtime filtering, not an
|
|
202
|
+
// installable Toolset. Only `code` (current spelling) or `toolset` (legacy
|
|
203
|
+
// spelling) can be resolved through the Agent Tool registry.
|
|
204
|
+
const rawCode = record.code ?? record.toolset;
|
|
205
|
+
if (typeof rawCode !== 'string' || !rawCode.trim())
|
|
206
|
+
return undefined;
|
|
207
|
+
const code = rawCode.trim();
|
|
208
|
+
const rawVersion = record.version;
|
|
209
|
+
const version = typeof rawVersion === 'string' && rawVersion.trim() ? rawVersion.trim() : undefined;
|
|
210
|
+
return { code, ...(version ? { version } : {}) };
|
|
211
|
+
}
|
|
212
|
+
function readSkillMdAllowedTools(directory) {
|
|
213
|
+
const entry = findLocalSkillEntryFile(directory);
|
|
214
|
+
if (entry !== 'SKILL.md' && entry !== 'skill.md')
|
|
215
|
+
return [];
|
|
216
|
+
const parsed = parseSkillMd(readFileSync(resolve(directory, entry), 'utf8'));
|
|
217
|
+
return parsed?.frontmatter.allowedTools?.filter((name) => name.trim()).map((name) => name.trim()) ?? [];
|
|
218
|
+
}
|
|
219
|
+
function existsAsDirectory(path) {
|
|
220
|
+
if (!existsSync(path))
|
|
221
|
+
return false;
|
|
222
|
+
const stat = lstatSync(path);
|
|
223
|
+
return stat.isDirectory() && !stat.isSymbolicLink();
|
|
224
|
+
}
|
|
225
|
+
function isRegularFile(path) {
|
|
226
|
+
if (!existsSync(path))
|
|
227
|
+
return false;
|
|
228
|
+
const stat = lstatSync(path);
|
|
229
|
+
return stat.isFile() && !stat.isSymbolicLink();
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=skill-tool-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-tool-dependencies.js","sourceRoot":"","sources":["../../src/resources/skill-tool-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-agent-resource.d.ts","sourceRoot":"","sources":["../../src/resources/uninstall-agent-resource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall-agent-resource.d.ts","sourceRoot":"","sources":["../../src/resources/uninstall-agent-resource.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,wBAAwB,CAuD1B"}
|
|
@@ -6,6 +6,7 @@ import { ResourceCodeSchema } from '../schema/index.js';
|
|
|
6
6
|
import { resolveAgentProject } from '../discovery/index.js';
|
|
7
7
|
import { removeDirectoryChild } from './resource-files.js';
|
|
8
8
|
import { readLocalAgentResource } from './local-resource.js';
|
|
9
|
+
import { findInstalledSkillToolReferences } from './skill-tool-dependencies.js';
|
|
9
10
|
export function uninstallAgentResource(options) {
|
|
10
11
|
const code = ResourceCodeSchema.parse(options.code);
|
|
11
12
|
const project = resolveAgentProject(options.root ? { root: options.root } : {});
|
|
@@ -20,6 +21,15 @@ export function uninstallAgentResource(options) {
|
|
|
20
21
|
throw new Error(`Resource ${code} is installed as more than one resource type; specify --type tool or skill`);
|
|
21
22
|
}
|
|
22
23
|
const candidate = candidates[0];
|
|
24
|
+
if (candidate.kind === 'tool') {
|
|
25
|
+
const skillReferences = findInstalledSkillToolReferences(project.root, code);
|
|
26
|
+
if (skillReferences.length > 0) {
|
|
27
|
+
const details = skillReferences
|
|
28
|
+
.map((reference) => `${reference.skillCode}@${reference.skillVersion}`)
|
|
29
|
+
.join('、');
|
|
30
|
+
throw new Error(`Tool ${code} 仍被 Skill 引用:${details}。请先更新这些 Skill,或到平台重新配置并移除该 Tool 引用,然后重新安装 Skill 后再卸载 Tool。`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
23
33
|
const kind = candidate.kind === 'tool' ? 'tools' : 'skills';
|
|
24
34
|
const nextLock = {
|
|
25
35
|
...lock,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-agent-resource.js","sourceRoot":"","sources":["../../src/resources/uninstall-agent-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,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,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"uninstall-agent-resource.js","sourceRoot":"","sources":["../../src/resources/uninstall-agent-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { GraphSchema } from '../graph.js';
|
|
|
4
4
|
import { AgentModelsSchema } from './models.js';
|
|
5
5
|
const ManifestVersionSchema = z
|
|
6
6
|
.string()
|
|
7
|
-
.regex(/^\d+\.\d+\.\d+$/, 'Agent version
|
|
7
|
+
.regex(/^\d+\.\d+\.\d+$/, 'Agent version 必须使用 major.minor.patch 格式(如 1.2.3)')
|
|
8
8
|
.describe('Agent 的三段式语义化版本号。');
|
|
9
9
|
const AgentConfigSchema = z.object({
|
|
10
10
|
timeout: z.number().int().min(1_000).max(3_600_000).optional().describe('执行超时,单位为毫秒。有 graph.json 时以图 config.timeout 为准。'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/schema/agent/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,qBAAqB,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,KAAK,CAAC,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/schema/agent/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export const AgentModelsSchema = z.object({
|
|
3
|
-
default: z.string().min(1).describe('默认模型;llm 节点未写 model 时使用。'),
|
|
4
|
-
allowed: z.array(z.string().min(1)).max(6).optional().describe('图上允许的模型 code;可含 default。解析时会把 default 并入并去重。最多 6 个(含 default)。'),
|
|
3
|
+
default: z.string().min(1, 'models.default 不能为空,请填写默认模型 code。').describe('默认模型;llm 节点未写 model 时使用。'),
|
|
4
|
+
allowed: z.array(z.string().min(1, 'models.allowed 中的模型 code 不能为空。')).max(6, 'models.allowed 最多填写 6 个模型。').optional().describe('图上允许的模型 code;可含 default。解析时会把 default 并入并去重。最多 6 个(含 default)。'),
|
|
5
5
|
}).strict().superRefine((value, context) => {
|
|
6
6
|
const seenInAllowed = new Set();
|
|
7
7
|
for (const [index, name] of (value.allowed ?? []).entries()) {
|
|
8
8
|
if (seenInAllowed.has(name)) {
|
|
9
9
|
context.addIssue({
|
|
10
10
|
code: z.ZodIssueCode.custom,
|
|
11
|
-
message: `
|
|
11
|
+
message: `models.allowed 中模型 ${name} 重复出现,请去重。`,
|
|
12
12
|
path: ['allowed', index],
|
|
13
13
|
});
|
|
14
14
|
}
|
|
@@ -18,7 +18,7 @@ export const AgentModelsSchema = z.object({
|
|
|
18
18
|
if (unique.size > 6) {
|
|
19
19
|
context.addIssue({
|
|
20
20
|
code: z.ZodIssueCode.custom,
|
|
21
|
-
message: 'models.default
|
|
21
|
+
message: 'models.default 与 models.allowed 合计最多 6 个不同模型,请删减后重试。',
|
|
22
22
|
path: ['allowed'],
|
|
23
23
|
});
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/schema/agent/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/schema/agent/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACpG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5H,gEAAgE,CACjE;CACF,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,QAAQ,CAAC;gBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,sBAAsB,IAAI,YAAY;gBAC/C,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC,CAAC;AAIxE,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,eAAe,aAIgB,CAAC;AAE7C,eAAO,MAAM,kBAAkB,aAAwD,CAAC;AAExF,eAAO,MAAM,qBAAqB,aAMZ,CAAC;AAEvB,eAAO,MAAM,kBAAkB,aAGkB,CAAC;AAElD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMpE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED,eAAO,MAAM,yBAAyB,2CAKW,CAAC;AAElD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,qEAc5C"}
|
package/dist/schema/common.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { installZodErrorMap } from './zod-error-map.js';
|
|
3
|
+
installZodErrorMap();
|
|
2
4
|
export const AgentCodeSchema = z
|
|
3
5
|
.string()
|
|
4
|
-
.regex(/^[a-z0-9][a-z0-9_-]*$/, 'Agent code
|
|
6
|
+
.regex(/^[a-z0-9][a-z0-9_-]*$/, 'Agent code 只能包含小写字母、数字、连字符和下划线')
|
|
5
7
|
.max(64)
|
|
6
8
|
.describe('Agent 编码,只能包含小写字母、数字、连字符和下划线。');
|
|
7
9
|
export const ResourceCodeSchema = AgentCodeSchema.describe('资源编码,只能包含小写字母、数字、连字符和下划线。');
|
|
8
10
|
export const SemanticVersionSchema = z
|
|
9
11
|
.string()
|
|
10
|
-
.regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/, '
|
|
12
|
+
.regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/, '版本号必须是语义化版本(例如 1.2.3)')
|
|
11
13
|
.describe('语义化版本号。');
|
|
12
14
|
export const Sha256DigestSchema = z
|
|
13
15
|
.string()
|
|
14
|
-
.regex(/^sha256:[a-f0-9]{64}$/, '
|
|
16
|
+
.regex(/^sha256:[a-f0-9]{64}$/, '摘要必须是 sha256:<64 位十六进制值>')
|
|
15
17
|
.describe('SHA-256 摘要,格式为 sha256:<64 位十六进制值>。');
|
|
16
18
|
export function isPortableProjectRelativePath(value) {
|
|
17
19
|
const normalized = value.replace(/\\/g, '/');
|
|
@@ -27,7 +29,7 @@ export function normalizeProjectRelativePath(value) {
|
|
|
27
29
|
return normalized.startsWith('./') ? normalized.slice(2) : normalized;
|
|
28
30
|
}
|
|
29
31
|
export const ProjectRelativePathSchema = z.string()
|
|
30
|
-
.refine(isPortableProjectRelativePath, '
|
|
32
|
+
.refine(isPortableProjectRelativePath, '路径必须是相对项目根目录的可移植路径(portable project-relative path;正斜杠、禁止绝对路径或路径遍历)')
|
|
31
33
|
.describe('相对于项目根目录的可移植路径,使用正斜杠且不允许绝对路径或路径遍历。');
|
|
32
34
|
export function uniqueCodeArray(label) {
|
|
33
35
|
return z.array(ResourceCodeSchema).superRefine((values, context) => {
|
|
@@ -36,7 +38,7 @@ export function uniqueCodeArray(label) {
|
|
|
36
38
|
if (seen.has(value)) {
|
|
37
39
|
context.addIssue({
|
|
38
40
|
code: z.ZodIssueCode.custom,
|
|
39
|
-
message: `${label}
|
|
41
|
+
message: `${label} 中存在重复项,请去重。`,
|
|
40
42
|
path: [index],
|
|
41
43
|
});
|
|
42
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,EAAE;KACR,KAAK,CAAC,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,kBAAkB,EAAE,CAAC;AAErB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,EAAE;KACR,KAAK,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;KAChE,GAAG,CAAC,EAAE,CAAC;KACP,QAAQ,CAAC,+BAA+B,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,EAAE;KACR,KAAK,CACJ,2HAA2H,EAC3H,uBAAuB,CACxB;KACA,QAAQ,CAAC,SAAS,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,KAAK,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;KAC1D,QAAQ,CAAC,oCAAoC,CAAC,CAAC;AAElD,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1C,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,EAAE;KAChD,MAAM,CACL,6BAA6B,EAC7B,oEAAoE,CACrE;KACA,QAAQ,CAAC,oCAAoC,CAAC,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,GAAG,KAAK,cAAc;oBAC/B,IAAI,EAAE,CAAC,KAAK,CAAC;iBACd,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
const ArtifactCodeSchema = z.string().min(1).max(64)
|
|
3
|
-
.regex(/^[a-z0-9][a-z0-9_-]*$/, 'Artifact code
|
|
3
|
+
.regex(/^[a-z0-9][a-z0-9_-]*$/, 'Artifact code 只能包含小写字母、数字、连字符和下划线');
|
|
4
4
|
export const LockedArtifactSchema = z.object({
|
|
5
5
|
code: ArtifactCodeSchema.describe('Toolset 或 Skill 制品编码。'),
|
|
6
6
|
version: z.string().min(1).describe('锁定的制品版本。'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies-lock.js","sourceRoot":"","sources":["../../src/schema/dependencies-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;KACjD,KAAK,CAAC,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"dependencies-lock.js","sourceRoot":"","sources":["../../src/schema/dependencies-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;KACjD,KAAK,CAAC,uBAAuB,EAAE,mCAAmC,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,EAAE,8CAA8C,CAAC;SACnG,QAAQ,CAAC,wBAAwB,CAAC;CACtC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;CACzC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC"}
|
|
@@ -17,7 +17,7 @@ function uniquePackageAgents() {
|
|
|
17
17
|
if (identities.has(identity)) {
|
|
18
18
|
context.addIssue({
|
|
19
19
|
code: z.ZodIssueCode.custom,
|
|
20
|
-
message:
|
|
20
|
+
message: `打包清单中存在重复的 Agent:${identity}`,
|
|
21
21
|
path: [index],
|
|
22
22
|
});
|
|
23
23
|
}
|
|
@@ -32,7 +32,7 @@ function uniquePackageFiles() {
|
|
|
32
32
|
if (paths.has(file.path)) {
|
|
33
33
|
context.addIssue({
|
|
34
34
|
code: z.ZodIssueCode.custom,
|
|
35
|
-
message:
|
|
35
|
+
message: `打包清单中存在重复的文件记录:${file.path}`,
|
|
36
36
|
path: [index, 'path'],
|
|
37
37
|
});
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manifest.js","sourceRoot":"","sources":["../../src/schema/package-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEzF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,qBAAqB;CAC/B,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAE9C,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC5D,MAAM,EAAE,kBAAkB;CAC3B,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEtC,SAAS,mBAAmB;IAC1B,OAAO,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"package-manifest.js","sourceRoot":"","sources":["../../src/schema/package-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEzF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,qBAAqB;CAC/B,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAE9C,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC5D,MAAM,EAAE,kBAAkB;CAC3B,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEtC,SAAS,mBAAmB;IAC1B,OAAO,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,oBAAoB,QAAQ,EAAE;oBACvC,IAAI,EAAE,CAAC,KAAK,CAAC;iBACd,CAAC,CAAC;YACL,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,kBAAkB,IAAI,CAAC,IAAI,EAAE;oBACtC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;iBACtB,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACzD,MAAM,EAAE,mBAAmB,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACtE,KAAK,EAAE,kBAAkB,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CAC/D,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC"}
|