@gt-fe/eap-sdk 0.2.18 → 0.2.20

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.
Files changed (297) hide show
  1. package/dist/auth/index.d.ts +2 -0
  2. package/dist/auth/index.d.ts.map +1 -0
  3. package/dist/auth/index.js +2 -0
  4. package/dist/auth/index.js.map +1 -0
  5. package/dist/auth/user-session.d.ts +23 -0
  6. package/dist/auth/user-session.d.ts.map +1 -0
  7. package/dist/auth/user-session.js +167 -0
  8. package/dist/auth/user-session.js.map +1 -0
  9. package/dist/config/index.d.ts +2 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +2 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/project-runtime.d.ts +36 -0
  14. package/dist/config/project-runtime.d.ts.map +1 -0
  15. package/dist/config/project-runtime.js +169 -0
  16. package/dist/config/project-runtime.js.map +1 -0
  17. package/dist/digest.d.ts +6 -0
  18. package/dist/digest.d.ts.map +1 -0
  19. package/dist/digest.js +17 -0
  20. package/dist/digest.js.map +1 -0
  21. package/dist/discovery/agent-errors.d.ts +6 -0
  22. package/dist/discovery/agent-errors.d.ts.map +1 -0
  23. package/dist/discovery/agent-errors.js +9 -0
  24. package/dist/discovery/agent-errors.js.map +1 -0
  25. package/dist/discovery/find-agent-root.d.ts +7 -0
  26. package/dist/discovery/find-agent-root.d.ts.map +1 -0
  27. package/dist/discovery/find-agent-root.js +32 -0
  28. package/dist/discovery/find-agent-root.js.map +1 -0
  29. package/dist/discovery/index.d.ts +4 -0
  30. package/dist/discovery/index.d.ts.map +1 -0
  31. package/dist/discovery/index.js +4 -0
  32. package/dist/discovery/index.js.map +1 -0
  33. package/dist/discovery/resolve-agent-project.d.ts +10 -0
  34. package/dist/discovery/resolve-agent-project.d.ts.map +1 -0
  35. package/dist/discovery/resolve-agent-project.js +67 -0
  36. package/dist/discovery/resolve-agent-project.js.map +1 -0
  37. package/dist/index.d.ts +15 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +15 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/lockfile/index.d.ts +5 -0
  42. package/dist/lockfile/index.d.ts.map +1 -0
  43. package/dist/lockfile/index.js +5 -0
  44. package/dist/lockfile/index.js.map +1 -0
  45. package/dist/lockfile/read-lockfile.d.ts +4 -0
  46. package/dist/lockfile/read-lockfile.d.ts.map +1 -0
  47. package/dist/lockfile/read-lockfile.js +22 -0
  48. package/dist/lockfile/read-lockfile.js.map +1 -0
  49. package/dist/lockfile/resolve-dependencies.d.ts +23 -0
  50. package/dist/lockfile/resolve-dependencies.d.ts.map +1 -0
  51. package/dist/lockfile/resolve-dependencies.js +119 -0
  52. package/dist/lockfile/resolve-dependencies.js.map +1 -0
  53. package/dist/lockfile/types.d.ts +9 -0
  54. package/dist/lockfile/types.d.ts.map +1 -0
  55. package/dist/lockfile/types.js +2 -0
  56. package/dist/lockfile/types.js.map +1 -0
  57. package/dist/lockfile/write-lockfile.d.ts +5 -0
  58. package/dist/lockfile/write-lockfile.d.ts.map +1 -0
  59. package/dist/lockfile/write-lockfile.js +53 -0
  60. package/dist/lockfile/write-lockfile.js.map +1 -0
  61. package/dist/materialization/copy-resource-directory.d.ts +3 -0
  62. package/dist/materialization/copy-resource-directory.d.ts.map +1 -0
  63. package/dist/materialization/copy-resource-directory.js +86 -0
  64. package/dist/materialization/copy-resource-directory.js.map +1 -0
  65. package/dist/materialization/index.d.ts +5 -0
  66. package/dist/materialization/index.d.ts.map +1 -0
  67. package/dist/materialization/index.js +5 -0
  68. package/dist/materialization/index.js.map +1 -0
  69. package/dist/materialization/load-agent-runtime.d.ts +19 -0
  70. package/dist/materialization/load-agent-runtime.d.ts.map +1 -0
  71. package/dist/materialization/load-agent-runtime.js +128 -0
  72. package/dist/materialization/load-agent-runtime.js.map +1 -0
  73. package/dist/materialization/prepare-agent-runtime.d.ts +9 -0
  74. package/dist/materialization/prepare-agent-runtime.d.ts.map +1 -0
  75. package/dist/materialization/prepare-agent-runtime.js +346 -0
  76. package/dist/materialization/prepare-agent-runtime.js.map +1 -0
  77. package/dist/materialization/types.d.ts +14 -0
  78. package/dist/materialization/types.d.ts.map +1 -0
  79. package/dist/materialization/types.js +2 -0
  80. package/dist/materialization/types.js.map +1 -0
  81. package/dist/packaging/archive.d.ts +10 -0
  82. package/dist/packaging/archive.d.ts.map +1 -0
  83. package/dist/packaging/archive.js +129 -0
  84. package/dist/packaging/archive.js.map +1 -0
  85. package/dist/packaging/index.d.ts +4 -0
  86. package/dist/packaging/index.d.ts.map +1 -0
  87. package/dist/packaging/index.js +4 -0
  88. package/dist/packaging/index.js.map +1 -0
  89. package/dist/packaging/package-agent-project.d.ts +20 -0
  90. package/dist/packaging/package-agent-project.d.ts.map +1 -0
  91. package/dist/packaging/package-agent-project.js +120 -0
  92. package/dist/packaging/package-agent-project.js.map +1 -0
  93. package/dist/packaging/read-package.d.ts +8 -0
  94. package/dist/packaging/read-package.d.ts.map +1 -0
  95. package/dist/packaging/read-package.js +88 -0
  96. package/dist/packaging/read-package.js.map +1 -0
  97. package/dist/platform/client.d.ts +10 -0
  98. package/dist/platform/client.d.ts.map +1 -0
  99. package/dist/platform/client.js +356 -0
  100. package/dist/platform/client.js.map +1 -0
  101. package/dist/platform/index.d.ts +3 -0
  102. package/dist/platform/index.d.ts.map +1 -0
  103. package/dist/platform/index.js +3 -0
  104. package/dist/platform/index.js.map +1 -0
  105. package/dist/platform/types.d.ts +250 -0
  106. package/dist/platform/types.d.ts.map +1 -0
  107. package/dist/platform/types.js +2 -0
  108. package/dist/platform/types.js.map +1 -0
  109. package/dist/project/agent-project.d.ts +29 -0
  110. package/dist/project/agent-project.d.ts.map +1 -0
  111. package/dist/project/agent-project.js +137 -0
  112. package/dist/project/agent-project.js.map +1 -0
  113. package/dist/project/index.d.ts +2 -0
  114. package/dist/project/index.d.ts.map +1 -0
  115. package/dist/project/index.js +2 -0
  116. package/dist/project/index.js.map +1 -0
  117. package/dist/resources/configured-local-resources.d.ts +15 -0
  118. package/dist/resources/configured-local-resources.d.ts.map +1 -0
  119. package/dist/resources/configured-local-resources.js +75 -0
  120. package/dist/resources/configured-local-resources.js.map +1 -0
  121. package/dist/resources/extract-resource-package.d.ts +9 -0
  122. package/dist/resources/extract-resource-package.d.ts.map +1 -0
  123. package/dist/resources/extract-resource-package.js +191 -0
  124. package/dist/resources/extract-resource-package.js.map +1 -0
  125. package/dist/resources/index.d.ts +10 -0
  126. package/dist/resources/index.d.ts.map +1 -0
  127. package/dist/resources/index.js +10 -0
  128. package/dist/resources/index.js.map +1 -0
  129. package/dist/resources/install-agent-dependencies.d.ts +3 -0
  130. package/dist/resources/install-agent-dependencies.d.ts.map +1 -0
  131. package/dist/resources/install-agent-dependencies.js +233 -0
  132. package/dist/resources/install-agent-dependencies.js.map +1 -0
  133. package/dist/resources/install-agent-resource.d.ts +3 -0
  134. package/dist/resources/install-agent-resource.d.ts.map +1 -0
  135. package/dist/resources/install-agent-resource.js +165 -0
  136. package/dist/resources/install-agent-resource.js.map +1 -0
  137. package/dist/resources/install-local-agent-resource.d.ts +9 -0
  138. package/dist/resources/install-local-agent-resource.d.ts.map +1 -0
  139. package/dist/resources/install-local-agent-resource.js +64 -0
  140. package/dist/resources/install-local-agent-resource.js.map +1 -0
  141. package/dist/resources/local-resource.d.ts +12 -0
  142. package/dist/resources/local-resource.d.ts.map +1 -0
  143. package/dist/resources/local-resource.js +78 -0
  144. package/dist/resources/local-resource.js.map +1 -0
  145. package/dist/resources/registry-resource-client.d.ts +19 -0
  146. package/dist/resources/registry-resource-client.d.ts.map +1 -0
  147. package/dist/resources/registry-resource-client.js +54 -0
  148. package/dist/resources/registry-resource-client.js.map +1 -0
  149. package/dist/resources/resource-files.d.ts +11 -0
  150. package/dist/resources/resource-files.d.ts.map +1 -0
  151. package/dist/resources/resource-files.js +100 -0
  152. package/dist/resources/resource-files.js.map +1 -0
  153. package/dist/resources/skill-md.d.ts +15 -0
  154. package/dist/resources/skill-md.d.ts.map +1 -0
  155. package/dist/resources/skill-md.js +63 -0
  156. package/dist/resources/skill-md.js.map +1 -0
  157. package/dist/resources/skill-tool-dependencies.d.ts +36 -0
  158. package/dist/resources/skill-tool-dependencies.d.ts.map +1 -0
  159. package/dist/resources/skill-tool-dependencies.js +118 -0
  160. package/dist/resources/skill-tool-dependencies.js.map +1 -0
  161. package/dist/resources/types.d.ts +46 -0
  162. package/dist/resources/types.d.ts.map +1 -0
  163. package/dist/resources/types.js +2 -0
  164. package/dist/resources/types.js.map +1 -0
  165. package/dist/resources/uninstall-agent-resource.d.ts +16 -0
  166. package/dist/resources/uninstall-agent-resource.d.ts.map +1 -0
  167. package/dist/resources/uninstall-agent-resource.js +74 -0
  168. package/dist/resources/uninstall-agent-resource.js.map +1 -0
  169. package/dist/schema/agent/index.d.ts +4 -0
  170. package/dist/schema/agent/index.d.ts.map +1 -0
  171. package/dist/schema/agent/index.js +4 -0
  172. package/dist/schema/agent/index.js.map +1 -0
  173. package/dist/schema/agent/manifest.d.ts +3277 -0
  174. package/dist/schema/agent/manifest.d.ts.map +1 -0
  175. package/dist/schema/agent/manifest.js +51 -0
  176. package/dist/schema/agent/manifest.js.map +1 -0
  177. package/dist/schema/agent/models.d.ts +20 -0
  178. package/dist/schema/agent/models.d.ts.map +1 -0
  179. package/dist/schema/agent/models.js +27 -0
  180. package/dist/schema/agent/models.js.map +1 -0
  181. package/dist/schema/agent/selector.d.ts +13 -0
  182. package/dist/schema/agent/selector.d.ts.map +1 -0
  183. package/dist/schema/agent/selector.js +6 -0
  184. package/dist/schema/agent/selector.js.map +1 -0
  185. package/dist/schema/common.d.ts +10 -0
  186. package/dist/schema/common.d.ts.map +1 -0
  187. package/dist/schema/common.js +49 -0
  188. package/dist/schema/common.js.map +1 -0
  189. package/dist/schema/dependencies-lock.d.ts +79 -0
  190. package/dist/schema/dependencies-lock.d.ts.map +1 -0
  191. package/dist/schema/dependencies-lock.js +18 -0
  192. package/dist/schema/dependencies-lock.js.map +1 -0
  193. package/dist/schema/graph.d.ts +4106 -0
  194. package/dist/schema/graph.d.ts.map +1 -0
  195. package/dist/schema/graph.js +163 -0
  196. package/dist/schema/graph.js.map +1 -0
  197. package/dist/schema/index.d.ts +11 -0
  198. package/dist/schema/index.d.ts.map +1 -0
  199. package/dist/schema/index.js +11 -0
  200. package/dist/schema/index.js.map +1 -0
  201. package/dist/schema/json-schema.d.ts +4 -0
  202. package/dist/schema/json-schema.d.ts.map +1 -0
  203. package/dist/schema/json-schema.js +14 -0
  204. package/dist/schema/json-schema.js.map +1 -0
  205. package/dist/schema/lockfile.d.ts +310 -0
  206. package/dist/schema/lockfile.d.ts.map +1 -0
  207. package/dist/schema/lockfile.js +41 -0
  208. package/dist/schema/lockfile.js.map +1 -0
  209. package/dist/schema/package-manifest.d.ts +65 -0
  210. package/dist/schema/package-manifest.d.ts.map +1 -0
  211. package/dist/schema/package-manifest.js +48 -0
  212. package/dist/schema/package-manifest.js.map +1 -0
  213. package/dist/schema/project-config.d.ts +319 -0
  214. package/dist/schema/project-config.d.ts.map +1 -0
  215. package/dist/schema/project-config.js +97 -0
  216. package/dist/schema/project-config.js.map +1 -0
  217. package/dist/schema/skill/index.d.ts +5 -0
  218. package/dist/schema/skill/index.d.ts.map +1 -0
  219. package/dist/schema/skill/index.js +11 -0
  220. package/dist/schema/skill/index.js.map +1 -0
  221. package/dist/schema/toolset/index.d.ts +3 -0
  222. package/dist/schema/toolset/index.d.ts.map +1 -0
  223. package/dist/schema/toolset/index.js +3 -0
  224. package/dist/schema/toolset/index.js.map +1 -0
  225. package/dist/schema/toolset/manifest.d.ts +475 -0
  226. package/dist/schema/toolset/manifest.d.ts.map +1 -0
  227. package/dist/schema/toolset/manifest.js +119 -0
  228. package/dist/schema/toolset/manifest.js.map +1 -0
  229. package/dist/schema/toolset/read-toolset-manifest.d.ts +7 -0
  230. package/dist/schema/toolset/read-toolset-manifest.d.ts.map +1 -0
  231. package/dist/schema/toolset/read-toolset-manifest.js +42 -0
  232. package/dist/schema/toolset/read-toolset-manifest.js.map +1 -0
  233. package/dist/schema/zod-error-map.d.ts +3 -0
  234. package/dist/schema/zod-error-map.d.ts.map +1 -0
  235. package/dist/schema/zod-error-map.js +91 -0
  236. package/dist/schema/zod-error-map.js.map +1 -0
  237. package/dist/service/create-agent.d.ts +8 -0
  238. package/dist/service/create-agent.d.ts.map +1 -0
  239. package/dist/service/create-agent.js +338 -0
  240. package/dist/service/create-agent.js.map +1 -0
  241. package/dist/service/events.d.ts +18 -0
  242. package/dist/service/events.d.ts.map +1 -0
  243. package/dist/service/events.js +47 -0
  244. package/dist/service/events.js.map +1 -0
  245. package/dist/service/index.d.ts +8 -0
  246. package/dist/service/index.d.ts.map +1 -0
  247. package/dist/service/index.js +7 -0
  248. package/dist/service/index.js.map +1 -0
  249. package/dist/service/messages.d.ts +13 -0
  250. package/dist/service/messages.d.ts.map +1 -0
  251. package/dist/service/messages.js +24 -0
  252. package/dist/service/messages.js.map +1 -0
  253. package/dist/service/resources.d.ts +86 -0
  254. package/dist/service/resources.d.ts.map +1 -0
  255. package/dist/service/resources.js +26 -0
  256. package/dist/service/resources.js.map +1 -0
  257. package/dist/service/runtime-adapter.d.ts +4 -0
  258. package/dist/service/runtime-adapter.d.ts.map +1 -0
  259. package/dist/service/runtime-adapter.js +30 -0
  260. package/dist/service/runtime-adapter.js.map +1 -0
  261. package/dist/service/sessions.d.ts +33 -0
  262. package/dist/service/sessions.d.ts.map +1 -0
  263. package/dist/service/sessions.js +67 -0
  264. package/dist/service/sessions.js.map +1 -0
  265. package/dist/service/types.d.ts +126 -0
  266. package/dist/service/types.d.ts.map +1 -0
  267. package/dist/service/types.js +2 -0
  268. package/dist/service/types.js.map +1 -0
  269. package/dist/validation/index.d.ts +6 -0
  270. package/dist/validation/index.d.ts.map +1 -0
  271. package/dist/validation/index.js +6 -0
  272. package/dist/validation/index.js.map +1 -0
  273. package/dist/validation/types.d.ts +23 -0
  274. package/dist/validation/types.d.ts.map +1 -0
  275. package/dist/validation/types.js +2 -0
  276. package/dist/validation/types.js.map +1 -0
  277. package/dist/validation/validate-agent-directory.d.ts +8 -0
  278. package/dist/validation/validate-agent-directory.d.ts.map +1 -0
  279. package/dist/validation/validate-agent-directory.js +87 -0
  280. package/dist/validation/validate-agent-directory.js.map +1 -0
  281. package/dist/validation/validate-agent-project.d.ts +3 -0
  282. package/dist/validation/validate-agent-project.d.ts.map +1 -0
  283. package/dist/validation/validate-agent-project.js +169 -0
  284. package/dist/validation/validate-agent-project.js.map +1 -0
  285. package/dist/validation/validate-graph.d.ts +8 -0
  286. package/dist/validation/validate-graph.d.ts.map +1 -0
  287. package/dist/validation/validate-graph.js +199 -0
  288. package/dist/validation/validate-graph.js.map +1 -0
  289. package/dist/validation/validate-local-llm.d.ts +7 -0
  290. package/dist/validation/validate-local-llm.d.ts.map +1 -0
  291. package/dist/validation/validate-local-llm.js +44 -0
  292. package/dist/validation/validate-local-llm.js.map +1 -0
  293. package/dist/version.d.ts +2 -0
  294. package/dist/version.d.ts.map +1 -0
  295. package/dist/version.js +5 -0
  296. package/dist/version.js.map +1 -0
  297. package/package.json +1 -1
@@ -0,0 +1,19 @@
1
+ import type { PlatformSkillManifest } from '../platform/types.js';
2
+ import type { AgentResourceKind } from './types.js';
3
+ export interface RegistryResourceArchive {
4
+ sourceUrl: string;
5
+ archive: Buffer;
6
+ /** Platform-owned Skill tool references; never inferred from the ZIP. */
7
+ skillToolRefs?: PlatformSkillManifest['toolRefs'];
8
+ }
9
+ export type RegistryResourcePackage = RegistryResourceArchive;
10
+ export declare function fetchRegistryResourcePackage(options: {
11
+ root: string;
12
+ kind: AgentResourceKind;
13
+ code: string;
14
+ version: string;
15
+ endpoint?: string;
16
+ token?: string;
17
+ fetch?: typeof globalThis.fetch;
18
+ }): Promise<RegistryResourcePackage>;
19
+ //# sourceMappingURL=registry-resource-client.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,54 @@
1
+ import { loadProjectRuntimeConfig, resolveProjectRuntimeEnvironment } from '../config/index.js';
2
+ import { createPlatformClient } from '../platform/index.js';
3
+ export async function fetchRegistryResourcePackage(options) {
4
+ const endpoint = options.endpoint ?? loadProjectRuntimeConfig({ root: options.root }).config.platform.portalUrl;
5
+ const resolvedEnvironment = resolveProjectRuntimeEnvironment({
6
+ root: options.root,
7
+ preinstallRoot: options.root,
8
+ loginToken: options.token,
9
+ }).environment;
10
+ const token = process.env.EAP_DELEGATION_TOKEN ?? resolvedEnvironment.EAP_DELEGATION_TOKEN;
11
+ const client = createPlatformClient({ portalEndpoint: endpoint, token, fetch: options.fetch });
12
+ const response = options.kind === 'tool'
13
+ ? await client.getToolDetail(options.code, options.version)
14
+ : await client.getSkillDetail(options.code, options.version);
15
+ let skillToolRefs;
16
+ if (options.kind === 'tool') {
17
+ const detail = response.data;
18
+ if (!detail)
19
+ throw new Error(`平台 Tool ${options.code}@${options.version} 缺少详情`);
20
+ assertToolIdentity(detail, options.code, options.version);
21
+ // Code、MCP、HTTP 统一由 source_url 提供 ZIP 制品;access_type 不再改变安装链路。
22
+ }
23
+ else {
24
+ const detail = response.data;
25
+ skillToolRefs = detail?.skill_manifest?.toolRefs ?? [];
26
+ }
27
+ const sourceUrl = response.data?.source_url?.trim();
28
+ if (!sourceUrl) {
29
+ throw new Error(`平台${kindLabel(options.kind)} ${options.code}@${options.version} 缺少 source_url`);
30
+ }
31
+ assertZipSourceUrl(sourceUrl, endpoint, options.kind, options.code, options.version);
32
+ const archive = Buffer.from(await client.downloadPortalFile(sourceUrl));
33
+ return { sourceUrl, archive, ...(options.kind === 'skill' ? { skillToolRefs } : {}) };
34
+ }
35
+ function kindLabel(kind) {
36
+ return kind === 'tool' ? '工具' : '技能';
37
+ }
38
+ function assertToolIdentity(detail, code, version) {
39
+ if (detail.tool_code !== code) {
40
+ throw new Error(`平台 Tool 标识不匹配:请求 ${code},实际收到 ${detail.tool_code || '(缺失)'}`);
41
+ }
42
+ if (detail.version !== version) {
43
+ throw new Error(`平台 Tool 版本不匹配:请求 ${version},实际收到 ${detail.version || '(缺失)'}`);
44
+ }
45
+ }
46
+ function assertZipSourceUrl(sourceUrl, endpoint, kind, code, version) {
47
+ try {
48
+ new URL(sourceUrl, `${endpoint}/`);
49
+ }
50
+ catch {
51
+ throw new Error(`平台${kindLabel(kind)} ${code}@${version} 的 source_url 无效:${sourceUrl}`);
52
+ }
53
+ }
54
+ //# sourceMappingURL=registry-resource-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-resource-client.js","sourceRoot":"","sources":["../../src/resources/registry-resource-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { sha256 } from '../digest.js';
2
+ export declare function writeFileAtomically(path: string, data: string | Buffer): void;
3
+ export declare function ensureGeneratedDirectory(root: string): string;
4
+ /**
5
+ * Creates or validates simple directory components below a real directory root.
6
+ * Every component is checked with lstat and realpath before it can be used.
7
+ */
8
+ export declare function ensureGeneratedDirectoryPath(root: string, components: readonly string[]): string;
9
+ export declare function validateDirectoryChild(parent: string, child: string): string | undefined;
10
+ export declare function removeDirectoryChild(parent: string, child: string): void;
11
+ //# sourceMappingURL=resource-files.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,100 @@
1
+ import { lstatSync, mkdirSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { basename, dirname, relative, resolve, sep } from 'node:path';
3
+ export { sha256 } from '../digest.js';
4
+ export function writeFileAtomically(path, data) {
5
+ const destination = resolve(path);
6
+ const parent = assertRegularDirectory(dirname(destination), '原子写入目标的父目录');
7
+ const filename = basename(destination);
8
+ const target = resolve(parent, filename);
9
+ const existing = lstatIfExists(target);
10
+ if (existing && (!existing.isFile() || existing.isSymbolicLink())) {
11
+ throw new Error(`原子写入目标必须是非符号链接的普通文件:${target}`);
12
+ }
13
+ const tempPath = resolve(parent, `${filename}.${process.pid}.${Date.now()}.tmp`);
14
+ if (lstatIfExists(tempPath))
15
+ throw new Error(`原子写入临时文件已存在:${tempPath}`);
16
+ writeFileSync(tempPath, data, { flag: 'wx' });
17
+ try {
18
+ renameSync(tempPath, target);
19
+ }
20
+ catch (error) {
21
+ const temporary = lstatIfExists(tempPath);
22
+ if (temporary?.isFile() && !temporary.isSymbolicLink())
23
+ rmSync(tempPath, { force: true });
24
+ throw error;
25
+ }
26
+ }
27
+ export function ensureGeneratedDirectory(root) {
28
+ return ensureGeneratedDirectoryPath(root, ['.eap']);
29
+ }
30
+ /**
31
+ * Creates or validates simple directory components below a real directory root.
32
+ * Every component is checked with lstat and realpath before it can be used.
33
+ */
34
+ export function ensureGeneratedDirectoryPath(root, components) {
35
+ const realRoot = assertRegularDirectory(root, '生成状态根目录');
36
+ let current = realRoot;
37
+ for (const component of components) {
38
+ assertDirectoryComponent(component);
39
+ const candidate = resolve(current, component);
40
+ assertInside(current, candidate, '生成状态目录');
41
+ const existing = lstatIfExists(candidate);
42
+ if (!existing)
43
+ mkdirSync(candidate);
44
+ current = assertRegularDirectory(candidate, '生成状态目录');
45
+ assertInside(realRoot, current, '生成状态目录');
46
+ }
47
+ return current;
48
+ }
49
+ export function validateDirectoryChild(parent, child) {
50
+ const realParent = assertRegularDirectory(parent, '生成状态父目录');
51
+ assertDirectoryComponent(child);
52
+ const path = resolve(realParent, child);
53
+ assertInside(realParent, path, '生成状态子目录');
54
+ if (!lstatIfExists(path))
55
+ return undefined;
56
+ const realChild = assertRegularDirectory(path, '生成状态子目录');
57
+ if (realpathSync(dirname(path)) !== realParent || !isInside(realParent, realChild)) {
58
+ throw new Error(`生成状态子目录越出了父目录:${path}`);
59
+ }
60
+ return realChild;
61
+ }
62
+ export function removeDirectoryChild(parent, child) {
63
+ const directory = validateDirectoryChild(parent, child);
64
+ if (!directory)
65
+ return;
66
+ rmSync(directory, { recursive: true, force: true });
67
+ }
68
+ function assertRegularDirectory(path, label) {
69
+ const stat = lstatIfExists(path);
70
+ if (!stat)
71
+ throw new Error(`${label}不存在:${path}`);
72
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
73
+ throw new Error(`${label}必须是非符号链接的普通目录:${path}`);
74
+ }
75
+ return realpathSync(path);
76
+ }
77
+ function assertDirectoryComponent(component) {
78
+ if (!component || component === '.' || component === '..' || /[\\/]/.test(component)) {
79
+ throw new Error(`生成状态目录名无效:${component}`);
80
+ }
81
+ }
82
+ function assertInside(root, target, label) {
83
+ if (!isInside(root, target))
84
+ throw new Error(`${label}越出了根目录:${target}`);
85
+ }
86
+ function isInside(root, target) {
87
+ const relativePath = relative(resolve(root), resolve(target));
88
+ return relativePath === '' || (relativePath !== '..' && !relativePath.startsWith(`..${sep}`));
89
+ }
90
+ function lstatIfExists(path) {
91
+ try {
92
+ return lstatSync(path);
93
+ }
94
+ catch (error) {
95
+ if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT')
96
+ return undefined;
97
+ throw error;
98
+ }
99
+ }
100
+ //# sourceMappingURL=resource-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-files.js","sourceRoot":"","sources":["../../src/resources/resource-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ParsedSkillIdentity {
2
+ code?: string;
3
+ name?: string;
4
+ version?: string;
5
+ }
6
+ /**
7
+ * Align a downloaded Skill's identity field with the Registry code.
8
+ * The downloaded package is the SDK-owned cache, so normalizing it here does
9
+ * not mutate a developer's local Skill source directory.
10
+ */
11
+ export declare function normalizeSkillMdFile(path: string, code: string): void;
12
+ export declare function normalizeSkillMdContent(content: string, code: string): string;
13
+ /** Parse only the SDK-owned identity fields from SKILL.md frontmatter. */
14
+ export declare function parseSkillMdIdentity(content: string): ParsedSkillIdentity | null;
15
+ //# 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":"AAKA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIrE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB7E;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAoBhF"}
@@ -0,0 +1,63 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { parse, parseDocument } from 'yaml';
3
+ import { writeFileAtomically } from './resource-files.js';
4
+ /**
5
+ * Align a downloaded Skill's identity field with the Registry code.
6
+ * The downloaded package is the SDK-owned cache, so normalizing it here does
7
+ * not mutate a developer's local Skill source directory.
8
+ */
9
+ export function normalizeSkillMdFile(path, code) {
10
+ const content = readFileSync(path, 'utf8');
11
+ const normalized = normalizeSkillMdContent(content, code);
12
+ if (normalized !== content)
13
+ writeFileAtomically(path, normalized);
14
+ }
15
+ export function normalizeSkillMdContent(content, code) {
16
+ const lines = content.split(/\r?\n/);
17
+ if (lines[0]?.trim() !== '---')
18
+ return content;
19
+ const closing = lines.findIndex((line, index) => index > 0 && line.trim() === '---');
20
+ if (closing < 0)
21
+ return content;
22
+ const document = parseDocument(lines.slice(1, closing).join('\n'));
23
+ if (document.errors.length > 0)
24
+ return content;
25
+ const frontmatter = document.toJS();
26
+ if (!frontmatter || typeof frontmatter !== 'object' || Array.isArray(frontmatter))
27
+ return content;
28
+ const record = frontmatter;
29
+ const key = Object.hasOwn(record, 'code') ? 'code' : Object.hasOwn(record, 'name') ? 'name' : undefined;
30
+ if (!key)
31
+ return content;
32
+ document.set(key, code);
33
+ const newline = content.includes('\r\n') ? '\r\n' : '\n';
34
+ const serializedFrontmatter = document.toString().trimEnd();
35
+ return ['---', serializedFrontmatter, lines[closing], ...lines.slice(closing + 1)].join(newline);
36
+ }
37
+ /** Parse only the SDK-owned identity fields from SKILL.md frontmatter. */
38
+ export function parseSkillMdIdentity(content) {
39
+ const lines = content.split(/\r?\n/);
40
+ if (lines[0]?.trim() !== '---')
41
+ return null;
42
+ const closing = lines.findIndex((line, index) => index > 0 && line.trim() === '---');
43
+ if (closing < 0)
44
+ return null;
45
+ let value;
46
+ try {
47
+ value = parse(lines.slice(1, closing).join('\n'));
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ if (!value || typeof value !== 'object' || Array.isArray(value))
53
+ return null;
54
+ const record = value;
55
+ const result = {};
56
+ for (const key of ['code', 'name', 'version']) {
57
+ const raw = record[key];
58
+ if (typeof raw === 'string' && raw.trim())
59
+ result[key] = raw.trim();
60
+ }
61
+ return result.code || result.name ? result : null;
62
+ }
63
+ //# 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,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAAY;IAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,UAAU,KAAK,OAAO;QAAE,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,IAAY;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,OAAO,CAAC;IAC/C,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,OAAO,CAAC;IAEhC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAa,CAAC;IAC/C,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,OAAO,CAAC;IAClG,MAAM,MAAM,GAAG,WAAsC,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnG,CAAC;AAED,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"}
@@ -0,0 +1,36 @@
1
+ import { type LockSkillResource } from '../schema/index.js';
2
+ import type { ResourceInstallFailure } from './types.js';
3
+ export interface SkillToolDependency {
4
+ code: string;
5
+ version?: string;
6
+ }
7
+ export interface EnsureSkillToolDependenciesOptions {
8
+ root: string;
9
+ skillCode: string;
10
+ dependencies: SkillToolDependency[];
11
+ installRegistryTool: (dependency: Required<SkillToolDependency>) => Promise<void>;
12
+ installLocalTool: (dependency: SkillToolDependency) => void;
13
+ hasRegistryCredentials?: boolean;
14
+ }
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[];
29
+ export interface InstalledSkillToolReference {
30
+ skillCode: string;
31
+ skillVersion: string;
32
+ }
33
+ /** Find declared Skills that still reference a Tool code from the lock. */
34
+ export declare function findInstalledSkillToolReferences(root: string, toolCode: string): InstalledSkillToolReference[];
35
+ export declare function ensureSkillToolDependencies(options: EnsureSkillToolDependenciesOptions): Promise<ResourceInstallFailure[]>;
36
+ //# 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":"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"}
@@ -0,0 +1,118 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { resolveAgentProject } from '../discovery/index.js';
3
+ import { readEapLock } from '../lockfile/index.js';
4
+ import { updateAgentManifest } from '../project/index.js';
5
+ import { AgentManifestSchema, LockedSkillToolRefSchema } from '../schema/index.js';
6
+ export function normalizePlatformSkillToolRefs(value) {
7
+ const errors = [];
8
+ if (!Array.isArray(value))
9
+ return { refs: [], errors: ['平台 Skill toolRefs 必须是数组'] };
10
+ const refs = [];
11
+ for (const [index, ref] of value.entries()) {
12
+ if (!ref || typeof ref !== 'object' || Array.isArray(ref)) {
13
+ errors.push(`平台 Skill toolRefs[${index}] 必须是对象`);
14
+ continue;
15
+ }
16
+ const record = ref;
17
+ const toolId = typeof record.toolId === 'string' ? record.toolId.trim() : '';
18
+ const name = typeof record.name === 'string' ? record.name.trim() : '';
19
+ const version = typeof record.version === 'string' ? record.version.trim() : '';
20
+ const parsed = LockedSkillToolRefSchema.safeParse({ toolId, name, version });
21
+ if (!parsed.success) {
22
+ errors.push(`平台 Skill toolRefs[${index}] 无效: ${parsed.error.issues.map((issue) => issue.message).join('; ')}`);
23
+ continue;
24
+ }
25
+ refs.push(parsed.data);
26
+ }
27
+ return { refs, errors };
28
+ }
29
+ /** Read Tool dependencies only from platform-owned Skill lock metadata. */
30
+ export function readSkillToolDependencies(skill) {
31
+ const refs = Array.isArray(skill) ? skill : skill?.toolRefs ?? [];
32
+ const dependencies = [];
33
+ const seen = new Map();
34
+ for (const ref of refs) {
35
+ const dependency = { code: ref.toolId, version: ref.version };
36
+ const previous = seen.get(dependency.code);
37
+ if (previous) {
38
+ if (previous.version && dependency.version && previous.version !== dependency.version) {
39
+ throw new Error(`Skill 声明的 Tool ${dependency.code} 存在冲突版本:${previous.version} 与 ${dependency.version}`);
40
+ }
41
+ continue;
42
+ }
43
+ seen.set(dependency.code, dependency);
44
+ dependencies.push(dependency);
45
+ }
46
+ return dependencies;
47
+ }
48
+ /** Find declared Skills that still reference a Tool code from the lock. */
49
+ export function findInstalledSkillToolReferences(root, toolCode) {
50
+ const project = resolveAgentProject({ root });
51
+ const manifest = AgentManifestSchema.parse(JSON.parse(readFileSync(project.manifestPath, 'utf8')));
52
+ const lock = readEapLock(project.root);
53
+ const references = [];
54
+ for (const skillRef of manifest.skillRefs) {
55
+ const locked = lock?.resources.skills.find((entry) => entry.code === skillRef.code);
56
+ if (!locked || !readSkillToolDependencies(locked).some((dependency) => dependency.code === toolCode))
57
+ continue;
58
+ references.push({ skillCode: skillRef.code, skillVersion: locked.version });
59
+ }
60
+ return references.sort((left, right) => left.skillCode.localeCompare(right.skillCode));
61
+ }
62
+ export async function ensureSkillToolDependencies(options) {
63
+ const failures = [];
64
+ if (options.dependencies.length === 0)
65
+ return failures;
66
+ const project = resolveAgentProject({ root: options.root });
67
+ for (const dependency of options.dependencies) {
68
+ try {
69
+ await ensureSkillToolDependency(options, project.root, dependency);
70
+ }
71
+ catch (error) {
72
+ failures.push({
73
+ kind: 'tool',
74
+ code: dependency.code,
75
+ version: dependency.version,
76
+ dependencyOf: options.skillCode,
77
+ reason: error instanceof Error ? error.message : String(error),
78
+ });
79
+ }
80
+ }
81
+ return failures;
82
+ }
83
+ async function ensureSkillToolDependency(options, root, dependency) {
84
+ const project = resolveAgentProject({ root });
85
+ const manifest = AgentManifestSchema.parse(JSON.parse(readFileSync(project.manifestPath, 'utf8')));
86
+ const existing = manifest.toolRefs.find((ref) => ref.code === dependency.code);
87
+ const lock = readEapLock(project.root);
88
+ const locked = lock?.resources.tools.find((entry) => entry.code === dependency.code);
89
+ const localDirectory = `${project.root}/tools/${dependency.code}`;
90
+ const version = existing?.version ?? locked?.version ?? dependency.version;
91
+ if (locked?.source === 'local' && existsSync(localDirectory)) {
92
+ addAgentToolRef(project.root, dependency.code, version ?? locked.version);
93
+ return;
94
+ }
95
+ if (locked?.source === 'registry' && locked.version === version && existsSync(`${project.root}/${locked.path}`)) {
96
+ addAgentToolRef(project.root, dependency.code, version);
97
+ return;
98
+ }
99
+ if (existsSync(localDirectory)) {
100
+ options.installLocalTool({ code: dependency.code, ...(version ? { version } : {}) });
101
+ return;
102
+ }
103
+ if (!version)
104
+ throw new Error(`Skill ${options.skillCode} 声明的 Tool ${dependency.code} 缺少版本号。`);
105
+ if (options.hasRegistryCredentials === false) {
106
+ throw new Error(`Skill ${options.skillCode} 依赖平台 Tool ${dependency.code}@${version}。请先执行 eap install ${dependency.code} --type tool --version ${version}。`);
107
+ }
108
+ await options.installRegistryTool({ code: dependency.code, version });
109
+ }
110
+ function addAgentToolRef(root, code, version) {
111
+ updateAgentManifest({
112
+ root,
113
+ update: (manifest) => manifest.toolRefs.some((ref) => ref.code === code)
114
+ ? manifest
115
+ : { ...manifest, toolRefs: [...manifest.toolRefs, { code, version }] },
116
+ });
117
+ }
118
+ //# 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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"}
@@ -0,0 +1,46 @@
1
+ export type AgentResourceKind = 'tool' | 'skill';
2
+ export interface InstallAgentResourceOptions {
3
+ root?: string;
4
+ kind: AgentResourceKind;
5
+ code: string;
6
+ version: string;
7
+ enabledTools?: string[];
8
+ autoApprove?: string[];
9
+ endpoint?: string;
10
+ token?: string;
11
+ fetch?: typeof globalThis.fetch;
12
+ }
13
+ export interface InstallAgentDependenciesOptions {
14
+ root?: string;
15
+ endpoint?: string;
16
+ token?: string;
17
+ fetch?: typeof globalThis.fetch;
18
+ }
19
+ export interface InstalledAgentResource {
20
+ root: string;
21
+ kind: AgentResourceKind;
22
+ code: string;
23
+ version: string;
24
+ path: string;
25
+ failures: ResourceInstallFailure[];
26
+ }
27
+ export interface MissingAgentResource {
28
+ kind: AgentResourceKind;
29
+ code: string;
30
+ }
31
+ export interface InstalledAgentDependencies {
32
+ root: string;
33
+ restoredRegistryResources: number;
34
+ refreshedLocalResources: number;
35
+ removedUndeclaredResources: number;
36
+ missingResources: MissingAgentResource[];
37
+ failures: ResourceInstallFailure[];
38
+ }
39
+ export interface ResourceInstallFailure {
40
+ kind: AgentResourceKind;
41
+ code: string;
42
+ version?: string;
43
+ reason: string;
44
+ dependencyOf?: string;
45
+ }
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB,EAAE,MAAM,CAAC;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,0BAA0B,EAAE,MAAM,CAAC;IACnC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { AgentResourceKind } from './types.js';
2
+ export interface UninstallAgentResourceOptions {
3
+ root?: string;
4
+ code: string;
5
+ kind?: AgentResourceKind;
6
+ }
7
+ export interface UninstalledAgentResource {
8
+ root: string;
9
+ kind: AgentResourceKind;
10
+ code: string;
11
+ version: string;
12
+ source: 'registry' | 'local';
13
+ path: string;
14
+ }
15
+ export declare function uninstallAgentResource(options: UninstallAgentResourceOptions): UninstalledAgentResource;
16
+ //# sourceMappingURL=uninstall-agent-resource.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,74 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { readEapLock, writeEapLock } from '../lockfile/index.js';
4
+ import { updateAgentManifest } from '../project/index.js';
5
+ import { ResourceCodeSchema } from '../schema/index.js';
6
+ import { resolveAgentProject } from '../discovery/index.js';
7
+ import { removeDirectoryChild } from './resource-files.js';
8
+ import { readLocalAgentResource } from './local-resource.js';
9
+ import { findInstalledSkillToolReferences } from './skill-tool-dependencies.js';
10
+ export function uninstallAgentResource(options) {
11
+ const code = ResourceCodeSchema.parse(options.code);
12
+ const project = resolveAgentProject(options.root ? { root: options.root } : {});
13
+ const lock = readEapLock(project.root) ?? emptyLock();
14
+ const candidates = (options.kind ? [options.kind] : ['tool', 'skill'])
15
+ .map((kind) => findCandidate(project.root, lock, kind, code))
16
+ .filter((candidate) => Boolean(candidate));
17
+ if (candidates.length === 0) {
18
+ throw new Error(`当前 Agent 项目未安装资源 ${code}`);
19
+ }
20
+ if (candidates.length > 1) {
21
+ throw new Error(`资源 ${code} 同时以多个类型安装,请使用 --type tool 或 --type skill 指定类型`);
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
+ }
33
+ const kind = candidate.kind === 'tool' ? 'tools' : 'skills';
34
+ const nextLock = {
35
+ ...lock,
36
+ resources: {
37
+ ...lock.resources,
38
+ [kind]: lock.resources[kind].filter((entry) => entry.code !== code),
39
+ },
40
+ };
41
+ updateAgentManifest({
42
+ root: project.root,
43
+ update: (manifest) => ({
44
+ ...manifest,
45
+ ...(candidate.kind === 'tool'
46
+ ? { toolRefs: manifest.toolRefs.filter((ref) => ref.code !== code) }
47
+ : {
48
+ skillRefs: manifest.skillRefs.filter((ref) => ref.code !== code),
49
+ }),
50
+ }),
51
+ });
52
+ writeEapLock(project.root, nextLock);
53
+ const parent = candidate.source === 'local'
54
+ ? resolve(project.root, kind)
55
+ : resolve(project.root, '.eap', 'remote', kind);
56
+ if (existsSync(parent))
57
+ removeDirectoryChild(parent, code);
58
+ return { ...candidate, root: project.root };
59
+ }
60
+ function findCandidate(root, lock, kind, code) {
61
+ const lockKind = kind === 'tool' ? 'tools' : 'skills';
62
+ const entry = lock.resources[lockKind].find((resource) => resource.code === code);
63
+ if (entry)
64
+ return { kind, code, version: entry.version, source: entry.source, path: entry.path };
65
+ const localDirectory = resolve(root, lockKind, code);
66
+ if (!existsSync(localDirectory))
67
+ return undefined;
68
+ const local = readLocalAgentResource(localDirectory, kind, code);
69
+ return { kind, code, version: local.version, source: 'local', path: `${lockKind}/${code}` };
70
+ }
71
+ function emptyLock() {
72
+ return { lockfileVersion: 2, resources: { tools: [], skills: [], subagents: [] } };
73
+ }
74
+ //# sourceMappingURL=uninstall-agent-resource.js.map