@bastani/atomic 0.9.5-alpha.6 → 0.9.5-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/builtin/cursor/package.json +2 -2
  3. package/dist/builtin/intercom/package.json +1 -1
  4. package/dist/builtin/mcp/package.json +1 -1
  5. package/dist/builtin/subagents/package.json +1 -1
  6. package/dist/builtin/web-access/package.json +1 -1
  7. package/dist/builtin/workflows/package.json +1 -1
  8. package/dist/bun/split-loader.d.ts +2 -0
  9. package/dist/bun/split-loader.d.ts.map +1 -0
  10. package/dist/bun/split-loader.js +37 -0
  11. package/dist/bun/split-loader.js.map +1 -0
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +6 -4
  14. package/dist/config.js.map +1 -1
  15. package/dist/core/agent-session-auto-compaction.d.ts +5 -4
  16. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  17. package/dist/core/agent-session-auto-compaction.js +15 -9
  18. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  19. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  20. package/dist/core/agent-session-extension-bindings.js +1 -1
  21. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  22. package/dist/core/agent-session-methods.d.ts +1 -1
  23. package/dist/core/agent-session-methods.d.ts.map +1 -1
  24. package/dist/core/agent-session-methods.js.map +1 -1
  25. package/dist/core/builtin-packages.d.ts.map +1 -1
  26. package/dist/core/builtin-packages.js +8 -4
  27. package/dist/core/builtin-packages.js.map +1 -1
  28. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  29. package/dist/core/copilot-model-catalog.js +3 -2
  30. package/dist/core/copilot-model-catalog.js.map +1 -1
  31. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  32. package/dist/core/extensions/loader-virtual-modules.js +8 -3
  33. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  34. package/dist/core/openai-responses-payload-sanitizer.d.ts +6 -0
  35. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
  36. package/dist/core/openai-responses-payload-sanitizer.js +59 -0
  37. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
  38. package/dist/core/package-manager-auto-resources.d.ts +2 -2
  39. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  40. package/dist/core/package-manager-auto-resources.js +32 -52
  41. package/dist/core/package-manager-auto-resources.js.map +1 -1
  42. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  43. package/dist/core/package-manager-resolver.js +23 -14
  44. package/dist/core/package-manager-resolver.js.map +1 -1
  45. package/dist/core/package-manager-resource-collector.d.ts +3 -3
  46. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  47. package/dist/core/package-manager-resource-collector.js +76 -73
  48. package/dist/core/package-manager-resource-collector.js.map +1 -1
  49. package/dist/core/package-manager-resource-files.d.ts +9 -8
  50. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  51. package/dist/core/package-manager-resource-files.js +92 -81
  52. package/dist/core/package-manager-resource-files.js.map +1 -1
  53. package/dist/core/prompt-templates-async.d.ts +3 -0
  54. package/dist/core/prompt-templates-async.d.ts.map +1 -0
  55. package/dist/core/prompt-templates-async.js +118 -0
  56. package/dist/core/prompt-templates-async.js.map +1 -0
  57. package/dist/core/provider-context-usage.d.ts +11 -0
  58. package/dist/core/provider-context-usage.d.ts.map +1 -0
  59. package/dist/core/provider-context-usage.js +58 -0
  60. package/dist/core/provider-context-usage.js.map +1 -0
  61. package/dist/core/resource-loader-assets.d.ts +3 -3
  62. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  63. package/dist/core/resource-loader-assets.js +66 -83
  64. package/dist/core/resource-loader-assets.js.map +1 -1
  65. package/dist/core/resource-loader-core.d.ts +1 -1
  66. package/dist/core/resource-loader-core.d.ts.map +1 -1
  67. package/dist/core/resource-loader-core.js +5 -5
  68. package/dist/core/resource-loader-core.js.map +1 -1
  69. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  70. package/dist/core/resource-loader-reload.js +43 -7
  71. package/dist/core/resource-loader-reload.js.map +1 -1
  72. package/dist/core/resource-loader-types.d.ts +7 -1
  73. package/dist/core/resource-loader-types.d.ts.map +1 -1
  74. package/dist/core/resource-loader-types.js.map +1 -1
  75. package/dist/core/sdk.d.ts.map +1 -1
  76. package/dist/core/sdk.js +6 -4
  77. package/dist/core/sdk.js.map +1 -1
  78. package/dist/core/skills-async.d.ts +3 -0
  79. package/dist/core/skills-async.d.ts.map +1 -0
  80. package/dist/core/skills-async.js +269 -0
  81. package/dist/core/skills-async.js.map +1 -0
  82. package/dist/main-deferred-startup.d.ts +2 -0
  83. package/dist/main-deferred-startup.d.ts.map +1 -1
  84. package/dist/main-deferred-startup.js +2 -0
  85. package/dist/main-deferred-startup.js.map +1 -1
  86. package/dist/main.d.ts.map +1 -1
  87. package/dist/main.js +4 -4
  88. package/dist/main.js.map +1 -1
  89. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  90. package/dist/modes/interactive/interactive-agent-events.js +10 -1
  91. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  92. package/dist/modes/interactive/interactive-deferred-startup.d.ts +6 -0
  93. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  94. package/dist/modes/interactive/interactive-deferred-startup.js +27 -13
  95. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  96. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  97. package/dist/modes/interactive/interactive-editor-actions.js +13 -13
  98. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  99. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  100. package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
  101. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  102. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  103. package/dist/modes/interactive/interactive-input-handling.js +48 -0
  104. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  105. package/dist/modes/interactive/interactive-mode-base.d.ts +5 -0
  106. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  107. package/dist/modes/interactive/interactive-mode-base.js +5 -0
  108. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  109. package/dist/modes/interactive/interactive-mode-surface.d.ts +18 -6
  110. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  111. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  112. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  113. package/dist/modes/interactive/interactive-model-routing.js +3 -3
  114. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  115. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  116. package/dist/modes/interactive/interactive-onboarding.js +1 -0
  117. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  118. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  119. package/dist/modes/interactive/interactive-process-lifecycle.js +43 -6
  120. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  121. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  122. package/dist/modes/interactive/interactive-render-chat.js +57 -0
  123. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  124. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  125. package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
  126. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  127. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  128. package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
  129. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  130. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  131. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  132. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  133. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  134. package/dist/modes/interactive/interactive-startup.js +59 -52
  135. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  136. package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
  137. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  138. package/dist/modes/interactive/theme/theme-loading.js +3 -0
  139. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  140. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  141. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  142. package/dist/modes/interactive/theme/theme.js +1 -1
  143. package/dist/modes/interactive/theme/theme.js.map +1 -1
  144. package/dist/utils/module-require.d.ts +11 -0
  145. package/dist/utils/module-require.d.ts.map +1 -1
  146. package/dist/utils/module-require.js +14 -1
  147. package/dist/utils/module-require.js.map +1 -1
  148. package/dist/utils/split-launcher.d.ts +38 -0
  149. package/dist/utils/split-launcher.d.ts.map +1 -0
  150. package/dist/utils/split-launcher.js +63 -0
  151. package/dist/utils/split-launcher.js.map +1 -0
  152. package/docs/compaction.md +3 -0
  153. package/docs/keybindings.md +2 -2
  154. package/docs/providers.md +1 -1
  155. package/docs/settings.md +2 -2
  156. package/docs/usage.md +1 -1
  157. package/npm-shrinkwrap.json +23 -23
  158. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses-payload-sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAa/D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAExE;AAUD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUpF;AAeD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAYxG","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;\n\nconst RESPONSES_FUNCTION_CALL_ID = /^fc_[A-Za-z0-9_-]{1,61}$/;\nconst RESPONSES_FUNCTION_CALL_ID_PREFIX = \"fc_\";\nconst MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 64;\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isOpenAIResponsesModel(model: Pick<Model<Api>, \"api\">): boolean {\n return model.api === \"openai-responses\";\n}\n\nexport function isValidResponsesFunctionCallId(id: unknown): id is string {\n return typeof id === \"string\" && RESPONSES_FUNCTION_CALL_ID.test(id);\n}\n\nfunction sha256Base64Url(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"base64url\");\n}\n\nfunction sanitizedCallIdFragment(callId: string): string {\n return callId.replace(/[^A-Za-z0-9_-]/g, \"_\").replace(/^_+|_+$/g, \"\");\n}\n\nexport function responsesFunctionCallIdForCallId(callId: unknown): string | undefined {\n if (typeof callId !== \"string\" || callId.length === 0) return undefined;\n const direct = `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${callId}`;\n if (isValidResponsesFunctionCallId(direct)) return direct;\n\n const sanitized = sanitizedCallIdFragment(callId);\n const hash = sha256Base64Url(callId).slice(0, 16);\n const suffixBudget = MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length;\n const suffix = sanitized.length > 0 ? `${sanitized.slice(0, suffixBudget - hash.length - 1)}_${hash}` : hash;\n return `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${suffix}`;\n}\n\nfunction sanitizeResponsesFunctionCall(item: JsonObject): boolean {\n if (item.type !== \"function_call\") return false;\n if (isValidResponsesFunctionCallId(item.id)) return false;\n\n const synthesized = responsesFunctionCallIdForCallId(item.call_id);\n if (synthesized) {\n item.id = synthesized;\n } else {\n delete item.id;\n }\n return true;\n}\n\nexport function sanitizeOpenAIResponsesPayload(payload: unknown, model: Pick<Model<Api>, \"api\">): unknown {\n if (!isOpenAIResponsesModel(model) || !isPlainObject(payload) || !Array.isArray(payload.input)) return payload;\n\n let changed = false;\n const input = payload.input.map((item) => {\n if (!isPlainObject(item)) return item;\n const cloned = { ...item };\n changed = sanitizeResponsesFunctionCall(cloned) || changed;\n return cloned;\n });\n\n return changed ? { ...payload, input } : payload;\n}\n"]}
@@ -0,0 +1,59 @@
1
+ import { createHash } from "node:crypto";
2
+ const RESPONSES_FUNCTION_CALL_ID = /^fc_[A-Za-z0-9_-]{1,61}$/;
3
+ const RESPONSES_FUNCTION_CALL_ID_PREFIX = "fc_";
4
+ const MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 64;
5
+ function isPlainObject(value) {
6
+ return typeof value === "object" && value !== null && !Array.isArray(value);
7
+ }
8
+ export function isOpenAIResponsesModel(model) {
9
+ return model.api === "openai-responses";
10
+ }
11
+ export function isValidResponsesFunctionCallId(id) {
12
+ return typeof id === "string" && RESPONSES_FUNCTION_CALL_ID.test(id);
13
+ }
14
+ function sha256Base64Url(value) {
15
+ return createHash("sha256").update(value).digest("base64url");
16
+ }
17
+ function sanitizedCallIdFragment(callId) {
18
+ return callId.replace(/[^A-Za-z0-9_-]/g, "_").replace(/^_+|_+$/g, "");
19
+ }
20
+ export function responsesFunctionCallIdForCallId(callId) {
21
+ if (typeof callId !== "string" || callId.length === 0)
22
+ return undefined;
23
+ const direct = `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${callId}`;
24
+ if (isValidResponsesFunctionCallId(direct))
25
+ return direct;
26
+ const sanitized = sanitizedCallIdFragment(callId);
27
+ const hash = sha256Base64Url(callId).slice(0, 16);
28
+ const suffixBudget = MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length;
29
+ const suffix = sanitized.length > 0 ? `${sanitized.slice(0, suffixBudget - hash.length - 1)}_${hash}` : hash;
30
+ return `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${suffix}`;
31
+ }
32
+ function sanitizeResponsesFunctionCall(item) {
33
+ if (item.type !== "function_call")
34
+ return false;
35
+ if (isValidResponsesFunctionCallId(item.id))
36
+ return false;
37
+ const synthesized = responsesFunctionCallIdForCallId(item.call_id);
38
+ if (synthesized) {
39
+ item.id = synthesized;
40
+ }
41
+ else {
42
+ delete item.id;
43
+ }
44
+ return true;
45
+ }
46
+ export function sanitizeOpenAIResponsesPayload(payload, model) {
47
+ if (!isOpenAIResponsesModel(model) || !isPlainObject(payload) || !Array.isArray(payload.input))
48
+ return payload;
49
+ let changed = false;
50
+ const input = payload.input.map((item) => {
51
+ if (!isPlainObject(item))
52
+ return item;
53
+ const cloned = { ...item };
54
+ changed = sanitizeResponsesFunctionCall(cloned) || changed;
55
+ return cloned;
56
+ });
57
+ return changed ? { ...payload, input } : payload;
58
+ }
59
+ //# sourceMappingURL=openai-responses-payload-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses-payload-sanitizer.js","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;\n\nconst RESPONSES_FUNCTION_CALL_ID = /^fc_[A-Za-z0-9_-]{1,61}$/;\nconst RESPONSES_FUNCTION_CALL_ID_PREFIX = \"fc_\";\nconst MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 64;\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isOpenAIResponsesModel(model: Pick<Model<Api>, \"api\">): boolean {\n return model.api === \"openai-responses\";\n}\n\nexport function isValidResponsesFunctionCallId(id: unknown): id is string {\n return typeof id === \"string\" && RESPONSES_FUNCTION_CALL_ID.test(id);\n}\n\nfunction sha256Base64Url(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"base64url\");\n}\n\nfunction sanitizedCallIdFragment(callId: string): string {\n return callId.replace(/[^A-Za-z0-9_-]/g, \"_\").replace(/^_+|_+$/g, \"\");\n}\n\nexport function responsesFunctionCallIdForCallId(callId: unknown): string | undefined {\n if (typeof callId !== \"string\" || callId.length === 0) return undefined;\n const direct = `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${callId}`;\n if (isValidResponsesFunctionCallId(direct)) return direct;\n\n const sanitized = sanitizedCallIdFragment(callId);\n const hash = sha256Base64Url(callId).slice(0, 16);\n const suffixBudget = MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length;\n const suffix = sanitized.length > 0 ? `${sanitized.slice(0, suffixBudget - hash.length - 1)}_${hash}` : hash;\n return `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${suffix}`;\n}\n\nfunction sanitizeResponsesFunctionCall(item: JsonObject): boolean {\n if (item.type !== \"function_call\") return false;\n if (isValidResponsesFunctionCallId(item.id)) return false;\n\n const synthesized = responsesFunctionCallIdForCallId(item.call_id);\n if (synthesized) {\n item.id = synthesized;\n } else {\n delete item.id;\n }\n return true;\n}\n\nexport function sanitizeOpenAIResponsesPayload(payload: unknown, model: Pick<Model<Api>, \"api\">): unknown {\n if (!isOpenAIResponsesModel(model) || !isPlainObject(payload) || !Array.isArray(payload.input)) return payload;\n\n let changed = false;\n const input = payload.input.map((item) => {\n if (!isPlainObject(item)) return item;\n const cloned = { ...item };\n changed = sanitizeResponsesFunctionCall(cloned) || changed;\n return cloned;\n });\n\n return changed ? { ...payload, input } : payload;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { PackageFilter, PackageManagerContext, PathMetadata, ResourceAccumulator } from "./package-manager-types.ts";
2
2
  import type { SettingsManager } from "./settings-manager.ts";
3
- export declare function collectProjectLocalResources(sourceRoot: string, accumulator: ResourceAccumulator, filter: PackageFilter | undefined, metadata: PathMetadata): boolean;
4
- export declare function addAutoDiscoveredResources(context: PackageManagerContext, accumulator: ResourceAccumulator, globalSettings: ReturnType<SettingsManager["getGlobalSettings"]>, projectSettings: ReturnType<SettingsManager["getProjectSettings"]>, globalBaseDir: string, projectBaseDir: string): void;
3
+ export declare function collectProjectLocalResources(sourceRoot: string, accumulator: ResourceAccumulator, filter: PackageFilter | undefined, metadata: PathMetadata): Promise<boolean>;
4
+ export declare function addAutoDiscoveredResources(context: PackageManagerContext, accumulator: ResourceAccumulator, globalSettings: ReturnType<SettingsManager["getGlobalSettings"]>, projectSettings: ReturnType<SettingsManager["getProjectSettings"]>, globalBaseDir: string, projectBaseDir: string): Promise<void>;
5
5
  //# sourceMappingURL=package-manager-auto-resources.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-auto-resources.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACX,aAAa,EACb,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAgB,4BAA4B,CAC3C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CA4CT;AAED,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAChE,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAClE,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,IAAI,CAsFN","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.ts\";\nimport { getHomeDir, getBaseDirsForScope } from \"./package-manager-paths.ts\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport {\n\tcollectAncestorAgentsSkillDirs,\n\tcollectAutoExtensionEntries,\n\tcollectAutoPromptEntries,\n\tcollectAutoSkillEntries,\n\tcollectAutoThemeEntries,\n\tcollectResourceFiles,\n} from \"./package-manager-resource-files.ts\";\nimport { applyPatterns, isEnabledByOverrides } from \"./package-manager-resource-patterns.ts\";\nimport type {\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResourceAccumulator,\n\tResourceType,\n} from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport function collectProjectLocalResources(\n\tsourceRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): boolean {\n\tlet found = false;\n\tconst projectMetadata: PathMetadata = { ...metadata, origin: \"top-level\", borrowedProjectLocal: true };\n\n\tconst addResources = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tresourceMetadata: PathMetadata,\n\t\tpatterns: string[] | undefined,\n\t): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tlet enabledPaths: Set<string>;\n\t\tif (patterns === undefined) {\n\t\t\tenabledPaths = new Set(paths);\n\t\t} else if (patterns.length === 0) {\n\t\t\tenabledPaths = new Set();\n\t\t} else {\n\t\t\tenabledPaths = applyPatterns(paths, patterns, sourceRoot);\n\t\t}\n\t\tfor (const path of paths) {\n\t\t\taddResource(target, path, resourceMetadata, enabledPaths.has(path));\n\t\t}\n\t};\n\n\tfor (const configDir of getProjectConfigDirs(sourceRoot)) {\n\t\tconst configMetadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", collectAutoExtensionEntries(join(configDir, \"extensions\")), configMetadata, filter?.extensions);\n\t\taddResources(\"skills\", collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), configMetadata, filter?.skills);\n\t\taddResources(\"prompts\", collectAutoPromptEntries(join(configDir, \"prompts\")), configMetadata, filter?.prompts);\n\t\taddResources(\"themes\", collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\"workflows\", collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), configMetadata, filter?.workflows);\n\t}\n\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\n\t\t\"skills\",\n\t\tcollectAutoSkillEntries(agentsSkillsDir, \"agents\"),\n\t\t{ ...projectMetadata, baseDir: dirname(agentsSkillsDir) },\n\t\tfilter?.skills,\n\t);\n\n\treturn found;\n}\n\nexport function addAutoDiscoveredResources(\n\tcontext: PackageManagerContext,\n\taccumulator: ResourceAccumulator,\n\tglobalSettings: ReturnType<SettingsManager[\"getGlobalSettings\"]>,\n\tprojectSettings: ReturnType<SettingsManager[\"getProjectSettings\"]>,\n\tglobalBaseDir: string,\n\tprojectBaseDir: string,\n): void {\n\tconst userMetadata: PathMetadata = {\n\t\tsource: \"auto\",\n\t\tscope: \"user\",\n\t\torigin: \"top-level\",\n\t\tbaseDir: globalBaseDir,\n\t};\n\tconst projectMetadata: PathMetadata = {\n\t\tsource: \"auto\",\n\t\tscope: \"project\",\n\t\torigin: \"top-level\",\n\t\tbaseDir: projectBaseDir,\n\t};\n\n\tconst userOverrides = {\n\t\textensions: (globalSettings.extensions ?? []) as string[],\n\t\tskills: (globalSettings.skills ?? []) as string[],\n\t\tprompts: (globalSettings.prompts ?? []) as string[],\n\t\tthemes: (globalSettings.themes ?? []) as string[],\n\t\tworkflows: (globalSettings.workflows ?? []) as string[],\n\t};\n\tconst projectOverrides = {\n\t\textensions: (projectSettings.extensions ?? []) as string[],\n\t\tskills: (projectSettings.skills ?? []) as string[],\n\t\tprompts: (projectSettings.prompts ?? []) as string[],\n\t\tthemes: (projectSettings.themes ?? []) as string[],\n\t\tworkflows: (projectSettings.workflows ?? []) as string[],\n\t};\n\n\tconst userConfigDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectConfigDirs = getBaseDirsForScope(context, \"project\");\n\tconst userAgentsSkillsDir = join(getHomeDir(), \".agents\", \"skills\");\n\tconst projectTrusted = context.settingsManager.isProjectTrusted();\n\tconst projectAgentsSkillDirs = projectTrusted\n\t\t? collectAncestorAgentsSkillDirs(context.cwd).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))\n\t\t: [];\n\n\tconst addResources = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tmetadata: PathMetadata,\n\t\toverrides: string[],\n\t\tbaseDir: string,\n\t) => {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tfor (const path of paths) {\n\t\t\tconst enabled = isEnabledByOverrides(path, overrides, baseDir);\n\t\t\taddResource(target, path, metadata, enabled);\n\t\t}\n\t};\n\n\tif (projectTrusted) {\n\t\tfor (const configDir of projectConfigDirs) {\n\t\t\tconst metadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\t\taddResources(\"extensions\", collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, projectOverrides.extensions, configDir);\n\t\t\taddResources(\"skills\", collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, projectOverrides.skills, configDir);\n\t\t\taddResources(\"prompts\", collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, projectOverrides.prompts, configDir);\n\t\t\taddResources(\"themes\", collectAutoThemeEntries(join(configDir, \"themes\")), metadata, projectOverrides.themes, configDir);\n\t\t\taddResources(\"workflows\", collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, projectOverrides.workflows, configDir);\n\t\t}\n\t}\n\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\tconst agentsMetadata: PathMetadata = { ...projectMetadata, baseDir: agentsBaseDir };\n\t\taddResources(\"skills\", collectAutoSkillEntries(agentsSkillsDir, \"agents\"), agentsMetadata, projectOverrides.skills, agentsBaseDir);\n\t}\n\n\tfor (const configDir of userConfigDirs) {\n\t\tconst metadata: PathMetadata = { ...userMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, userOverrides.extensions, configDir);\n\t\taddResources(\"skills\", collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, userOverrides.skills, configDir);\n\t\taddResources(\"prompts\", collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, userOverrides.prompts, configDir);\n\t\taddResources(\"themes\", collectAutoThemeEntries(join(configDir, \"themes\")), metadata, userOverrides.themes, configDir);\n\t\taddResources(\"workflows\", collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, userOverrides.workflows, configDir);\n\t}\n\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\tconst userAgentsMetadata: PathMetadata = { ...userMetadata, baseDir: userAgentsBaseDir };\n\taddResources(\n\t\t\"skills\",\n\t\tcollectAutoSkillEntries(userAgentsSkillsDir, \"agents\"),\n\t\tuserAgentsMetadata,\n\t\tuserOverrides.skills,\n\t\tuserAgentsBaseDir,\n\t);\n}\n"]}
1
+ {"version":3,"file":"package-manager-auto-resources.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAgB,MAAM,4BAA4B,CAAC;AACxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAsB,4BAA4B,CACjD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAChE,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAClE,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAoDf","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.ts\";\nimport { getBaseDirsForScope, getHomeDir } from \"./package-manager-paths.ts\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport {\n\tcollectAncestorAgentsSkillDirs,\n\tcollectAutoExtensionEntries,\n\tcollectAutoPromptEntries,\n\tcollectAutoSkillEntries,\n\tcollectAutoThemeEntries,\n\tcollectResourceFiles,\n} from \"./package-manager-resource-files.ts\";\nimport { applyPatterns, isEnabledByOverrides } from \"./package-manager-resource-patterns.ts\";\nimport type { PackageFilter, PackageManagerContext, PathMetadata, ResourceAccumulator, ResourceType } from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport async function collectProjectLocalResources(\n\tsourceRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): Promise<boolean> {\n\tlet found = false;\n\tconst projectMetadata: PathMetadata = { ...metadata, origin: \"top-level\", borrowedProjectLocal: true };\n\tconst addResources = (resourceType: ResourceType, paths: string[], resourceMetadata: PathMetadata, patterns: string[] | undefined): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst enabledPaths = patterns === undefined\n\t\t\t? new Set(paths)\n\t\t\t: patterns.length === 0\n\t\t\t\t? new Set<string>()\n\t\t\t\t: applyPatterns(paths, patterns, sourceRoot);\n\t\tfor (const path of paths) addResource(target, path, resourceMetadata, enabledPaths.has(path));\n\t};\n\tfor (const configDir of getProjectConfigDirs(sourceRoot)) {\n\t\tconst configMetadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), configMetadata, filter?.extensions);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), configMetadata, filter?.skills);\n\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), configMetadata, filter?.prompts);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), configMetadata, filter?.workflows);\n\t}\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\"skills\", await collectAutoSkillEntries(agentsSkillsDir, \"agents\"), { ...projectMetadata, baseDir: dirname(agentsSkillsDir) }, filter?.skills);\n\treturn found;\n}\n\nexport async function addAutoDiscoveredResources(\n\tcontext: PackageManagerContext,\n\taccumulator: ResourceAccumulator,\n\tglobalSettings: ReturnType<SettingsManager[\"getGlobalSettings\"]>,\n\tprojectSettings: ReturnType<SettingsManager[\"getProjectSettings\"]>,\n\tglobalBaseDir: string,\n\tprojectBaseDir: string,\n): Promise<void> {\n\tconst userMetadata: PathMetadata = { source: \"auto\", scope: \"user\", origin: \"top-level\", baseDir: globalBaseDir };\n\tconst projectMetadata: PathMetadata = { source: \"auto\", scope: \"project\", origin: \"top-level\", baseDir: projectBaseDir };\n\tconst userOverrides = {\n\t\textensions: (globalSettings.extensions ?? []) as string[],\n\t\tskills: (globalSettings.skills ?? []) as string[],\n\t\tprompts: (globalSettings.prompts ?? []) as string[],\n\t\tthemes: (globalSettings.themes ?? []) as string[],\n\t\tworkflows: (globalSettings.workflows ?? []) as string[],\n\t};\n\tconst projectOverrides = {\n\t\textensions: (projectSettings.extensions ?? []) as string[],\n\t\tskills: (projectSettings.skills ?? []) as string[],\n\t\tprompts: (projectSettings.prompts ?? []) as string[],\n\t\tthemes: (projectSettings.themes ?? []) as string[],\n\t\tworkflows: (projectSettings.workflows ?? []) as string[],\n\t};\n\tconst userConfigDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectConfigDirs = getBaseDirsForScope(context, \"project\");\n\tconst userAgentsSkillsDir = join(getHomeDir(), \".agents\", \"skills\");\n\tconst projectTrusted = context.settingsManager.isProjectTrusted();\n\tconst projectAgentsSkillDirs = projectTrusted\n\t\t? (await collectAncestorAgentsSkillDirs(context.cwd)).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))\n\t\t: [];\n\tconst addResources = (resourceType: ResourceType, paths: string[], metadata: PathMetadata, overrides: string[], baseDir: string): void => {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tfor (const path of paths) addResource(target, path, metadata, isEnabledByOverrides(path, overrides, baseDir));\n\t};\n\tif (projectTrusted) {\n\t\tfor (const configDir of projectConfigDirs) {\n\t\t\tconst metadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, projectOverrides.extensions, configDir);\n\t\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, projectOverrides.skills, configDir);\n\t\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, projectOverrides.prompts, configDir);\n\t\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), metadata, projectOverrides.themes, configDir);\n\t\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, projectOverrides.workflows, configDir);\n\t\t}\n\t}\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(agentsSkillsDir, \"agents\"), { ...projectMetadata, baseDir: agentsBaseDir }, projectOverrides.skills, agentsBaseDir);\n\t}\n\tfor (const configDir of userConfigDirs) {\n\t\tconst metadata: PathMetadata = { ...userMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, userOverrides.extensions, configDir);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, userOverrides.skills, configDir);\n\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, userOverrides.prompts, configDir);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), metadata, userOverrides.themes, configDir);\n\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, userOverrides.workflows, configDir);\n\t}\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\taddResources(\"skills\", await collectAutoSkillEntries(userAgentsSkillsDir, \"agents\"), { ...userMetadata, baseDir: userAgentsBaseDir }, userOverrides.skills, userAgentsBaseDir);\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import { dirname, join, resolve } from "node:path";
2
2
  import { getProjectConfigDirs } from "../config.js";
3
- import { getHomeDir, getBaseDirsForScope } from "./package-manager-paths.js";
3
+ import { getBaseDirsForScope, getHomeDir } from "./package-manager-paths.js";
4
4
  import { addResource, getTargetMap } from "./package-manager-resource-accumulator.js";
5
5
  import { collectAncestorAgentsSkillDirs, collectAutoExtensionEntries, collectAutoPromptEntries, collectAutoSkillEntries, collectAutoThemeEntries, collectResourceFiles, } from "./package-manager-resource-files.js";
6
6
  import { applyPatterns, isEnabledByOverrides } from "./package-manager-resource-patterns.js";
7
- export function collectProjectLocalResources(sourceRoot, accumulator, filter, metadata) {
7
+ export async function collectProjectLocalResources(sourceRoot, accumulator, filter, metadata) {
8
8
  let found = false;
9
9
  const projectMetadata = { ...metadata, origin: "top-level", borrowedProjectLocal: true };
10
10
  const addResources = (resourceType, paths, resourceMetadata, patterns) => {
@@ -12,45 +12,29 @@ export function collectProjectLocalResources(sourceRoot, accumulator, filter, me
12
12
  return;
13
13
  found = true;
14
14
  const target = getTargetMap(accumulator, resourceType);
15
- let enabledPaths;
16
- if (patterns === undefined) {
17
- enabledPaths = new Set(paths);
18
- }
19
- else if (patterns.length === 0) {
20
- enabledPaths = new Set();
21
- }
22
- else {
23
- enabledPaths = applyPatterns(paths, patterns, sourceRoot);
24
- }
25
- for (const path of paths) {
15
+ const enabledPaths = patterns === undefined
16
+ ? new Set(paths)
17
+ : patterns.length === 0
18
+ ? new Set()
19
+ : applyPatterns(paths, patterns, sourceRoot);
20
+ for (const path of paths)
26
21
  addResource(target, path, resourceMetadata, enabledPaths.has(path));
27
- }
28
22
  };
29
23
  for (const configDir of getProjectConfigDirs(sourceRoot)) {
30
24
  const configMetadata = { ...projectMetadata, baseDir: configDir };
31
- addResources("extensions", collectAutoExtensionEntries(join(configDir, "extensions")), configMetadata, filter?.extensions);
32
- addResources("skills", collectAutoSkillEntries(join(configDir, "skills"), "pi"), configMetadata, filter?.skills);
33
- addResources("prompts", collectAutoPromptEntries(join(configDir, "prompts")), configMetadata, filter?.prompts);
34
- addResources("themes", collectAutoThemeEntries(join(configDir, "themes")), configMetadata, filter?.themes);
35
- addResources("workflows", collectResourceFiles(join(configDir, "workflows"), "workflows"), configMetadata, filter?.workflows);
25
+ addResources("extensions", await collectAutoExtensionEntries(join(configDir, "extensions")), configMetadata, filter?.extensions);
26
+ addResources("skills", await collectAutoSkillEntries(join(configDir, "skills"), "pi"), configMetadata, filter?.skills);
27
+ addResources("prompts", await collectAutoPromptEntries(join(configDir, "prompts")), configMetadata, filter?.prompts);
28
+ addResources("themes", await collectAutoThemeEntries(join(configDir, "themes")), configMetadata, filter?.themes);
29
+ addResources("workflows", await collectResourceFiles(join(configDir, "workflows"), "workflows"), configMetadata, filter?.workflows);
36
30
  }
37
31
  const agentsSkillsDir = join(sourceRoot, ".agents", "skills");
38
- addResources("skills", collectAutoSkillEntries(agentsSkillsDir, "agents"), { ...projectMetadata, baseDir: dirname(agentsSkillsDir) }, filter?.skills);
32
+ addResources("skills", await collectAutoSkillEntries(agentsSkillsDir, "agents"), { ...projectMetadata, baseDir: dirname(agentsSkillsDir) }, filter?.skills);
39
33
  return found;
40
34
  }
41
- export function addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir) {
42
- const userMetadata = {
43
- source: "auto",
44
- scope: "user",
45
- origin: "top-level",
46
- baseDir: globalBaseDir,
47
- };
48
- const projectMetadata = {
49
- source: "auto",
50
- scope: "project",
51
- origin: "top-level",
52
- baseDir: projectBaseDir,
53
- };
35
+ export async function addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir) {
36
+ const userMetadata = { source: "auto", scope: "user", origin: "top-level", baseDir: globalBaseDir };
37
+ const projectMetadata = { source: "auto", scope: "project", origin: "top-level", baseDir: projectBaseDir };
54
38
  const userOverrides = {
55
39
  extensions: (globalSettings.extensions ?? []),
56
40
  skills: (globalSettings.skills ?? []),
@@ -70,40 +54,36 @@ export function addAutoDiscoveredResources(context, accumulator, globalSettings,
70
54
  const userAgentsSkillsDir = join(getHomeDir(), ".agents", "skills");
71
55
  const projectTrusted = context.settingsManager.isProjectTrusted();
72
56
  const projectAgentsSkillDirs = projectTrusted
73
- ? collectAncestorAgentsSkillDirs(context.cwd).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))
57
+ ? (await collectAncestorAgentsSkillDirs(context.cwd)).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))
74
58
  : [];
75
59
  const addResources = (resourceType, paths, metadata, overrides, baseDir) => {
76
60
  const target = getTargetMap(accumulator, resourceType);
77
- for (const path of paths) {
78
- const enabled = isEnabledByOverrides(path, overrides, baseDir);
79
- addResource(target, path, metadata, enabled);
80
- }
61
+ for (const path of paths)
62
+ addResource(target, path, metadata, isEnabledByOverrides(path, overrides, baseDir));
81
63
  };
82
64
  if (projectTrusted) {
83
65
  for (const configDir of projectConfigDirs) {
84
66
  const metadata = { ...projectMetadata, baseDir: configDir };
85
- addResources("extensions", collectAutoExtensionEntries(join(configDir, "extensions")), metadata, projectOverrides.extensions, configDir);
86
- addResources("skills", collectAutoSkillEntries(join(configDir, "skills"), "pi"), metadata, projectOverrides.skills, configDir);
87
- addResources("prompts", collectAutoPromptEntries(join(configDir, "prompts")), metadata, projectOverrides.prompts, configDir);
88
- addResources("themes", collectAutoThemeEntries(join(configDir, "themes")), metadata, projectOverrides.themes, configDir);
89
- addResources("workflows", collectResourceFiles(join(configDir, "workflows"), "workflows"), metadata, projectOverrides.workflows, configDir);
67
+ addResources("extensions", await collectAutoExtensionEntries(join(configDir, "extensions")), metadata, projectOverrides.extensions, configDir);
68
+ addResources("skills", await collectAutoSkillEntries(join(configDir, "skills"), "pi"), metadata, projectOverrides.skills, configDir);
69
+ addResources("prompts", await collectAutoPromptEntries(join(configDir, "prompts")), metadata, projectOverrides.prompts, configDir);
70
+ addResources("themes", await collectAutoThemeEntries(join(configDir, "themes")), metadata, projectOverrides.themes, configDir);
71
+ addResources("workflows", await collectResourceFiles(join(configDir, "workflows"), "workflows"), metadata, projectOverrides.workflows, configDir);
90
72
  }
91
73
  }
92
74
  for (const agentsSkillsDir of projectAgentsSkillDirs) {
93
75
  const agentsBaseDir = dirname(agentsSkillsDir);
94
- const agentsMetadata = { ...projectMetadata, baseDir: agentsBaseDir };
95
- addResources("skills", collectAutoSkillEntries(agentsSkillsDir, "agents"), agentsMetadata, projectOverrides.skills, agentsBaseDir);
76
+ addResources("skills", await collectAutoSkillEntries(agentsSkillsDir, "agents"), { ...projectMetadata, baseDir: agentsBaseDir }, projectOverrides.skills, agentsBaseDir);
96
77
  }
97
78
  for (const configDir of userConfigDirs) {
98
79
  const metadata = { ...userMetadata, baseDir: configDir };
99
- addResources("extensions", collectAutoExtensionEntries(join(configDir, "extensions")), metadata, userOverrides.extensions, configDir);
100
- addResources("skills", collectAutoSkillEntries(join(configDir, "skills"), "pi"), metadata, userOverrides.skills, configDir);
101
- addResources("prompts", collectAutoPromptEntries(join(configDir, "prompts")), metadata, userOverrides.prompts, configDir);
102
- addResources("themes", collectAutoThemeEntries(join(configDir, "themes")), metadata, userOverrides.themes, configDir);
103
- addResources("workflows", collectResourceFiles(join(configDir, "workflows"), "workflows"), metadata, userOverrides.workflows, configDir);
80
+ addResources("extensions", await collectAutoExtensionEntries(join(configDir, "extensions")), metadata, userOverrides.extensions, configDir);
81
+ addResources("skills", await collectAutoSkillEntries(join(configDir, "skills"), "pi"), metadata, userOverrides.skills, configDir);
82
+ addResources("prompts", await collectAutoPromptEntries(join(configDir, "prompts")), metadata, userOverrides.prompts, configDir);
83
+ addResources("themes", await collectAutoThemeEntries(join(configDir, "themes")), metadata, userOverrides.themes, configDir);
84
+ addResources("workflows", await collectResourceFiles(join(configDir, "workflows"), "workflows"), metadata, userOverrides.workflows, configDir);
104
85
  }
105
86
  const userAgentsBaseDir = dirname(userAgentsSkillsDir);
106
- const userAgentsMetadata = { ...userMetadata, baseDir: userAgentsBaseDir };
107
- addResources("skills", collectAutoSkillEntries(userAgentsSkillsDir, "agents"), userAgentsMetadata, userOverrides.skills, userAgentsBaseDir);
87
+ addResources("skills", await collectAutoSkillEntries(userAgentsSkillsDir, "agents"), { ...userMetadata, baseDir: userAgentsBaseDir }, userOverrides.skills, userAgentsBaseDir);
108
88
  }
109
89
  //# sourceMappingURL=package-manager-auto-resources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-auto-resources.js","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.ts\";\nimport { getHomeDir, getBaseDirsForScope } from \"./package-manager-paths.ts\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport {\n\tcollectAncestorAgentsSkillDirs,\n\tcollectAutoExtensionEntries,\n\tcollectAutoPromptEntries,\n\tcollectAutoSkillEntries,\n\tcollectAutoThemeEntries,\n\tcollectResourceFiles,\n} from \"./package-manager-resource-files.ts\";\nimport { applyPatterns, isEnabledByOverrides } from \"./package-manager-resource-patterns.ts\";\nimport type {\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResourceAccumulator,\n\tResourceType,\n} from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport function collectProjectLocalResources(\n\tsourceRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): boolean {\n\tlet found = false;\n\tconst projectMetadata: PathMetadata = { ...metadata, origin: \"top-level\", borrowedProjectLocal: true };\n\n\tconst addResources = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tresourceMetadata: PathMetadata,\n\t\tpatterns: string[] | undefined,\n\t): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tlet enabledPaths: Set<string>;\n\t\tif (patterns === undefined) {\n\t\t\tenabledPaths = new Set(paths);\n\t\t} else if (patterns.length === 0) {\n\t\t\tenabledPaths = new Set();\n\t\t} else {\n\t\t\tenabledPaths = applyPatterns(paths, patterns, sourceRoot);\n\t\t}\n\t\tfor (const path of paths) {\n\t\t\taddResource(target, path, resourceMetadata, enabledPaths.has(path));\n\t\t}\n\t};\n\n\tfor (const configDir of getProjectConfigDirs(sourceRoot)) {\n\t\tconst configMetadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", collectAutoExtensionEntries(join(configDir, \"extensions\")), configMetadata, filter?.extensions);\n\t\taddResources(\"skills\", collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), configMetadata, filter?.skills);\n\t\taddResources(\"prompts\", collectAutoPromptEntries(join(configDir, \"prompts\")), configMetadata, filter?.prompts);\n\t\taddResources(\"themes\", collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\"workflows\", collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), configMetadata, filter?.workflows);\n\t}\n\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\n\t\t\"skills\",\n\t\tcollectAutoSkillEntries(agentsSkillsDir, \"agents\"),\n\t\t{ ...projectMetadata, baseDir: dirname(agentsSkillsDir) },\n\t\tfilter?.skills,\n\t);\n\n\treturn found;\n}\n\nexport function addAutoDiscoveredResources(\n\tcontext: PackageManagerContext,\n\taccumulator: ResourceAccumulator,\n\tglobalSettings: ReturnType<SettingsManager[\"getGlobalSettings\"]>,\n\tprojectSettings: ReturnType<SettingsManager[\"getProjectSettings\"]>,\n\tglobalBaseDir: string,\n\tprojectBaseDir: string,\n): void {\n\tconst userMetadata: PathMetadata = {\n\t\tsource: \"auto\",\n\t\tscope: \"user\",\n\t\torigin: \"top-level\",\n\t\tbaseDir: globalBaseDir,\n\t};\n\tconst projectMetadata: PathMetadata = {\n\t\tsource: \"auto\",\n\t\tscope: \"project\",\n\t\torigin: \"top-level\",\n\t\tbaseDir: projectBaseDir,\n\t};\n\n\tconst userOverrides = {\n\t\textensions: (globalSettings.extensions ?? []) as string[],\n\t\tskills: (globalSettings.skills ?? []) as string[],\n\t\tprompts: (globalSettings.prompts ?? []) as string[],\n\t\tthemes: (globalSettings.themes ?? []) as string[],\n\t\tworkflows: (globalSettings.workflows ?? []) as string[],\n\t};\n\tconst projectOverrides = {\n\t\textensions: (projectSettings.extensions ?? []) as string[],\n\t\tskills: (projectSettings.skills ?? []) as string[],\n\t\tprompts: (projectSettings.prompts ?? []) as string[],\n\t\tthemes: (projectSettings.themes ?? []) as string[],\n\t\tworkflows: (projectSettings.workflows ?? []) as string[],\n\t};\n\n\tconst userConfigDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectConfigDirs = getBaseDirsForScope(context, \"project\");\n\tconst userAgentsSkillsDir = join(getHomeDir(), \".agents\", \"skills\");\n\tconst projectTrusted = context.settingsManager.isProjectTrusted();\n\tconst projectAgentsSkillDirs = projectTrusted\n\t\t? collectAncestorAgentsSkillDirs(context.cwd).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))\n\t\t: [];\n\n\tconst addResources = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tmetadata: PathMetadata,\n\t\toverrides: string[],\n\t\tbaseDir: string,\n\t) => {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tfor (const path of paths) {\n\t\t\tconst enabled = isEnabledByOverrides(path, overrides, baseDir);\n\t\t\taddResource(target, path, metadata, enabled);\n\t\t}\n\t};\n\n\tif (projectTrusted) {\n\t\tfor (const configDir of projectConfigDirs) {\n\t\t\tconst metadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\t\taddResources(\"extensions\", collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, projectOverrides.extensions, configDir);\n\t\t\taddResources(\"skills\", collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, projectOverrides.skills, configDir);\n\t\t\taddResources(\"prompts\", collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, projectOverrides.prompts, configDir);\n\t\t\taddResources(\"themes\", collectAutoThemeEntries(join(configDir, \"themes\")), metadata, projectOverrides.themes, configDir);\n\t\t\taddResources(\"workflows\", collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, projectOverrides.workflows, configDir);\n\t\t}\n\t}\n\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\tconst agentsMetadata: PathMetadata = { ...projectMetadata, baseDir: agentsBaseDir };\n\t\taddResources(\"skills\", collectAutoSkillEntries(agentsSkillsDir, \"agents\"), agentsMetadata, projectOverrides.skills, agentsBaseDir);\n\t}\n\n\tfor (const configDir of userConfigDirs) {\n\t\tconst metadata: PathMetadata = { ...userMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, userOverrides.extensions, configDir);\n\t\taddResources(\"skills\", collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, userOverrides.skills, configDir);\n\t\taddResources(\"prompts\", collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, userOverrides.prompts, configDir);\n\t\taddResources(\"themes\", collectAutoThemeEntries(join(configDir, \"themes\")), metadata, userOverrides.themes, configDir);\n\t\taddResources(\"workflows\", collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, userOverrides.workflows, configDir);\n\t}\n\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\tconst userAgentsMetadata: PathMetadata = { ...userMetadata, baseDir: userAgentsBaseDir };\n\taddResources(\n\t\t\"skills\",\n\t\tcollectAutoSkillEntries(userAgentsSkillsDir, \"agents\"),\n\t\tuserAgentsMetadata,\n\t\tuserOverrides.skills,\n\t\tuserAgentsBaseDir,\n\t);\n}\n"]}
1
+ {"version":3,"file":"package-manager-auto-resources.js","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EACN,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAI7F,MAAM,CAAC,KAAK,UAAU,4BAA4B,CACjD,UAAkB,EAClB,WAAgC,EAChC,MAAiC,EACjC,QAAsB;IAEtB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,eAAe,GAAiB,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACvG,MAAM,YAAY,GAAG,CAAC,YAA0B,EAAE,KAAe,EAAE,gBAA8B,EAAE,QAA8B,EAAQ,EAAE;QAC1I,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,KAAK,GAAG,IAAI,CAAC;QACb,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS;YAC1C,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;YAChB,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACtB,CAAC,CAAC,IAAI,GAAG,EAAU;gBACnB,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,MAAM,cAAc,GAAiB,EAAE,GAAG,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAChF,YAAY,CAAC,YAAY,EAAE,MAAM,2BAA2B,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACjI,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACvH,YAAY,CAAC,SAAS,EAAE,MAAM,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrH,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjH,YAAY,CAAC,WAAW,EAAE,MAAM,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACrI,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5J,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC/C,OAA8B,EAC9B,WAAgC,EAChC,cAAgE,EAChE,eAAkE,EAClE,aAAqB,EACrB,cAAsB;IAEtB,MAAM,YAAY,GAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAClH,MAAM,eAAe,GAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IACzH,MAAM,aAAa,GAAG;QACrB,UAAU,EAAE,CAAC,cAAc,CAAC,UAAU,IAAI,EAAE,CAAa;QACzD,MAAM,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAa;QACjD,OAAO,EAAE,CAAC,cAAc,CAAC,OAAO,IAAI,EAAE,CAAa;QACnD,MAAM,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAa;QACjD,SAAS,EAAE,CAAC,cAAc,CAAC,SAAS,IAAI,EAAE,CAAa;KACvD,CAAC;IACF,MAAM,gBAAgB,GAAG;QACxB,UAAU,EAAE,CAAC,eAAe,CAAC,UAAU,IAAI,EAAE,CAAa;QAC1D,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,IAAI,EAAE,CAAa;QAClD,OAAO,EAAE,CAAC,eAAe,CAAC,OAAO,IAAI,EAAE,CAAa;QACpD,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,IAAI,EAAE,CAAa;QAClD,SAAS,EAAE,CAAC,eAAe,CAAC,SAAS,IAAI,EAAE,CAAa;KACxD,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAClE,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;IAClE,MAAM,sBAAsB,GAAG,cAAc;QAC5C,CAAC,CAAC,CAAC,MAAM,8BAA8B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACpH,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,YAAY,GAAG,CAAC,YAA0B,EAAE,KAAe,EAAE,QAAsB,EAAE,SAAmB,EAAE,OAAe,EAAQ,EAAE;QACxI,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACpB,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAiB,EAAE,GAAG,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC1E,YAAY,CAAC,YAAY,EAAE,MAAM,2BAA2B,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC/I,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACrI,YAAY,CAAC,SAAS,EAAE,MAAM,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACnI,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC/H,YAAY,CAAC,WAAW,EAAE,MAAM,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnJ,CAAC;IACF,CAAC;IACD,KAAK,MAAM,eAAe,IAAI,sBAAsB,EAAE,CAAC;QACtD,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QAC/C,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1K,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAiB,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvE,YAAY,CAAC,YAAY,EAAE,MAAM,2BAA2B,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC5I,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClI,YAAY,CAAC,SAAS,EAAE,MAAM,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAChI,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5H,YAAY,CAAC,WAAW,EAAE,MAAM,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChJ,CAAC;IACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvD,YAAY,CAAC,QAAQ,EAAE,MAAM,uBAAuB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAChL,CAAC","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.ts\";\nimport { getBaseDirsForScope, getHomeDir } from \"./package-manager-paths.ts\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport {\n\tcollectAncestorAgentsSkillDirs,\n\tcollectAutoExtensionEntries,\n\tcollectAutoPromptEntries,\n\tcollectAutoSkillEntries,\n\tcollectAutoThemeEntries,\n\tcollectResourceFiles,\n} from \"./package-manager-resource-files.ts\";\nimport { applyPatterns, isEnabledByOverrides } from \"./package-manager-resource-patterns.ts\";\nimport type { PackageFilter, PackageManagerContext, PathMetadata, ResourceAccumulator, ResourceType } from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport async function collectProjectLocalResources(\n\tsourceRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): Promise<boolean> {\n\tlet found = false;\n\tconst projectMetadata: PathMetadata = { ...metadata, origin: \"top-level\", borrowedProjectLocal: true };\n\tconst addResources = (resourceType: ResourceType, paths: string[], resourceMetadata: PathMetadata, patterns: string[] | undefined): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst enabledPaths = patterns === undefined\n\t\t\t? new Set(paths)\n\t\t\t: patterns.length === 0\n\t\t\t\t? new Set<string>()\n\t\t\t\t: applyPatterns(paths, patterns, sourceRoot);\n\t\tfor (const path of paths) addResource(target, path, resourceMetadata, enabledPaths.has(path));\n\t};\n\tfor (const configDir of getProjectConfigDirs(sourceRoot)) {\n\t\tconst configMetadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), configMetadata, filter?.extensions);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), configMetadata, filter?.skills);\n\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), configMetadata, filter?.prompts);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), configMetadata, filter?.workflows);\n\t}\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\"skills\", await collectAutoSkillEntries(agentsSkillsDir, \"agents\"), { ...projectMetadata, baseDir: dirname(agentsSkillsDir) }, filter?.skills);\n\treturn found;\n}\n\nexport async function addAutoDiscoveredResources(\n\tcontext: PackageManagerContext,\n\taccumulator: ResourceAccumulator,\n\tglobalSettings: ReturnType<SettingsManager[\"getGlobalSettings\"]>,\n\tprojectSettings: ReturnType<SettingsManager[\"getProjectSettings\"]>,\n\tglobalBaseDir: string,\n\tprojectBaseDir: string,\n): Promise<void> {\n\tconst userMetadata: PathMetadata = { source: \"auto\", scope: \"user\", origin: \"top-level\", baseDir: globalBaseDir };\n\tconst projectMetadata: PathMetadata = { source: \"auto\", scope: \"project\", origin: \"top-level\", baseDir: projectBaseDir };\n\tconst userOverrides = {\n\t\textensions: (globalSettings.extensions ?? []) as string[],\n\t\tskills: (globalSettings.skills ?? []) as string[],\n\t\tprompts: (globalSettings.prompts ?? []) as string[],\n\t\tthemes: (globalSettings.themes ?? []) as string[],\n\t\tworkflows: (globalSettings.workflows ?? []) as string[],\n\t};\n\tconst projectOverrides = {\n\t\textensions: (projectSettings.extensions ?? []) as string[],\n\t\tskills: (projectSettings.skills ?? []) as string[],\n\t\tprompts: (projectSettings.prompts ?? []) as string[],\n\t\tthemes: (projectSettings.themes ?? []) as string[],\n\t\tworkflows: (projectSettings.workflows ?? []) as string[],\n\t};\n\tconst userConfigDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectConfigDirs = getBaseDirsForScope(context, \"project\");\n\tconst userAgentsSkillsDir = join(getHomeDir(), \".agents\", \"skills\");\n\tconst projectTrusted = context.settingsManager.isProjectTrusted();\n\tconst projectAgentsSkillDirs = projectTrusted\n\t\t? (await collectAncestorAgentsSkillDirs(context.cwd)).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))\n\t\t: [];\n\tconst addResources = (resourceType: ResourceType, paths: string[], metadata: PathMetadata, overrides: string[], baseDir: string): void => {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tfor (const path of paths) addResource(target, path, metadata, isEnabledByOverrides(path, overrides, baseDir));\n\t};\n\tif (projectTrusted) {\n\t\tfor (const configDir of projectConfigDirs) {\n\t\t\tconst metadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, projectOverrides.extensions, configDir);\n\t\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, projectOverrides.skills, configDir);\n\t\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, projectOverrides.prompts, configDir);\n\t\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), metadata, projectOverrides.themes, configDir);\n\t\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, projectOverrides.workflows, configDir);\n\t\t}\n\t}\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(agentsSkillsDir, \"agents\"), { ...projectMetadata, baseDir: agentsBaseDir }, projectOverrides.skills, agentsBaseDir);\n\t}\n\tfor (const configDir of userConfigDirs) {\n\t\tconst metadata: PathMetadata = { ...userMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, userOverrides.extensions, configDir);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, userOverrides.skills, configDir);\n\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, userOverrides.prompts, configDir);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), metadata, userOverrides.themes, configDir);\n\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, userOverrides.workflows, configDir);\n\t}\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\taddResources(\"skills\", await collectAutoSkillEntries(userAgentsSkillsDir, \"agents\"), { ...userMetadata, baseDir: userAgentsBaseDir }, userOverrides.skills, userAgentsBaseDir);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-resolver.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resolver.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,mBAAmB,EAEnB,qBAAqB,EAErB,aAAa,EACb,8BAA8B,EAG9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAC1D,OAAO,CAAC,aAAa,CAAC,CA+CxB;AAED,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE,8BAA8B,GACtC,OAAO,CAAC,aAAa,CAAC,CAQxB","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { getGitInstallPath } from \"./package-manager-paths.ts\";\nimport { addAutoDiscoveredResources, collectProjectLocalResources } from \"./package-manager-auto-resources.ts\";\nimport { getExistingGitInstallPath, refreshTemporaryGitSource } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getExistingNpmInstallPath, installedNpmMatchesConfiguredVersion } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { createAccumulator, addResource, getTargetMap, toResolvedPaths } from \"./package-manager-resource-accumulator.ts\";\nimport { collectPackageResources, resolveLocalEntries } from \"./package-manager-resource-collector.ts\";\nimport { resolveExtensionEntries } from \"./package-manager-resource-files.ts\";\nimport { dedupePackages, getPackageSourceString, parseSource } from \"./package-manager-source.ts\";\nimport { installParsedSource } from \"./package-manager-operations.ts\";\nimport type {\n\tMissingSourceAction,\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tResourceAccumulator,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nexport async function resolvePackages(\n\tcontext: PackageManagerContext,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages: Array<{ pkg: PackageSource; scope: SourceScope }> = [];\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"project\" });\n\t}\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"user\" });\n\t}\n\n\tconst packageSources = dedupePackages(context, allPackages);\n\tawait resolvePackageSources(context, packageSources, accumulator, onMissing);\n\n\tconst globalBaseDir = context.agentDir;\n\tconst projectBaseDir = join(context.cwd, CONFIG_DIR_NAME);\n\tconst globalBaseDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectBaseDirs = getBaseDirsForScope(context, \"project\");\n\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst globalEntries = (globalSettings[resourceType] ?? []) as string[];\n\t\tconst projectEntries = (projectSettings[resourceType] ?? []) as string[];\n\t\tfor (const baseDir of projectBaseDirs) {\n\t\t\tresolveLocalEntries(\n\t\t\t\tprojectEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"project\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t\tfor (const baseDir of globalBaseDirs) {\n\t\t\tresolveLocalEntries(\n\t\t\t\tglobalEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"user\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t}\n\n\taddAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);\n\treturn toResolvedPaths(accumulator);\n}\n\nexport async function resolveExtensionSources(\n\tcontext: PackageManagerContext,\n\tsources: PackageSource[],\n\toptions?: ResolveExtensionSourcesOptions,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst scope: SourceScope = options?.temporary ? \"temporary\" : options?.local ? \"project\" : \"user\";\n\tconst packageSources = sources.map((source) => ({ pkg: source, scope }));\n\tawait resolvePackageSources(context, packageSources, accumulator, undefined, {\n\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t});\n\treturn toResolvedPaths(accumulator);\n}\n\nasync function resolvePackageSources(\n\tcontext: PackageManagerContext,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n\taccumulator: ResourceAccumulator,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tfor (const { pkg, scope } of sources) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst filter = typeof pkg === \"object\" ? pkg : undefined;\n\t\tconst parsed = parseSource(sourceStr);\n\t\tconst metadata: PathMetadata = { source: sourceStr, scope, origin: \"package\" };\n\n\t\tif (parsed.type === \"local\") {\n\t\t\tfor (const baseDir of getBaseDirsForScope(context, scope)) {\n\t\t\t\tresolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {\n\t\t\t\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst installMissing = async (): Promise<boolean> => {\n\t\t\tif (isOfflineModeEnabled()) return false;\n\t\t\tif (!onMissing) {\n\t\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst action = await onMissing(sourceStr);\n\t\t\tif (action === \"skip\") return false;\n\t\t\tif (action === \"error\") throw new Error(`Missing source: ${sourceStr}`);\n\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\treturn true;\n\t\t};\n\n\t\tif (parsed.type === \"npm\") {\n\t\t\tlet installedPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\tconst needsInstall =\n\t\t\t\t!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));\n\t\t\tif (needsInstall) {\n\t\t\t\tconst installed = await installMissing();\n\t\t\t\tif (!installed) continue;\n\t\t\t\tinstalledPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\t\tif (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!installedPath) continue;\n\t\t\tmetadata.baseDir = installedPath;\n\t\t\tcollectPackageResources(installedPath, accumulator, filter, metadata);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet installedPath = getExistingGitInstallPath(context, parsed, scope) ?? getGitInstallPath(context, parsed, scope);\n\t\tif (!existsSync(installedPath)) {\n\t\t\tconst installed = await installMissing();\n\t\t\tif (!installed) continue;\n\t\t} else if (scope === \"temporary\" && !parsed.pinned && !isOfflineModeEnabled()) {\n\t\t\tif (context.driver) await context.driver.refreshTemporaryGitSource(parsed, sourceStr);\n\t\t\telse await refreshTemporaryGitSource(context, parsed, sourceStr);\n\t\t}\n\t\tmetadata.baseDir = installedPath;\n\t\tcollectPackageResources(installedPath, accumulator, filter, metadata);\n\t}\n}\n\nfunction resolveLocalExtensionSource(\n\tsource: { type: \"local\"; path: string },\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n\toptions?: { includeProjectLocalResources?: boolean },\n): void {\n\tconst resolved = resolvePathFromBase(source.path, baseDir);\n\tif (!existsSync(resolved)) return;\n\n\ttry {\n\t\tconst stats = statSync(resolved);\n\t\tif (stats.isFile()) {\n\t\t\taddResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst packageMetadata: PathMetadata = { ...metadata, baseDir: resolved };\n\t\t\tconst packageResources = collectPackageResources(resolved, accumulator, filter, packageMetadata);\n\t\t\tconst projectLocalResources = options?.includeProjectLocalResources\n\t\t\t\t? collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)\n\t\t\t\t: false;\n\t\t\tconst extensionEntries = resolveExtensionEntries(resolved);\n\t\t\tconst shouldAddDirectoryFallback =\n\t\t\t\textensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);\n\t\t\tif (!packageResources && shouldAddDirectoryFallback) {\n\t\t\t\taddResource(accumulator.extensions, resolved, packageMetadata, true);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n"]}
1
+ {"version":3,"file":"package-manager-resolver.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resolver.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,mBAAmB,EAEnB,qBAAqB,EAErB,aAAa,EACb,8BAA8B,EAG9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAO3D,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAC1D,OAAO,CAAC,aAAa,CAAC,CA+CxB;AAED,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE,8BAA8B,GACtC,OAAO,CAAC,aAAa,CAAC,CAQxB","sourcesContent":["import { access, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { getGitInstallPath } from \"./package-manager-paths.ts\";\nimport { addAutoDiscoveredResources, collectProjectLocalResources } from \"./package-manager-auto-resources.ts\";\nimport { getExistingGitInstallPath, refreshTemporaryGitSource } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getExistingNpmInstallPath, installedNpmMatchesConfiguredVersion } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { createAccumulator, addResource, getTargetMap, toResolvedPaths } from \"./package-manager-resource-accumulator.ts\";\nimport { collectPackageResources, resolveLocalEntries } from \"./package-manager-resource-collector.ts\";\nimport { resolveExtensionEntries } from \"./package-manager-resource-files.ts\";\nimport { dedupePackages, getPackageSourceString, parseSource } from \"./package-manager-source.ts\";\nimport { installParsedSource } from \"./package-manager-operations.ts\";\nimport type {\n\tMissingSourceAction,\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tResourceAccumulator,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\n\nexport async function resolvePackages(\n\tcontext: PackageManagerContext,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages: Array<{ pkg: PackageSource; scope: SourceScope }> = [];\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"project\" });\n\t}\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"user\" });\n\t}\n\n\tconst packageSources = dedupePackages(context, allPackages);\n\tawait resolvePackageSources(context, packageSources, accumulator, onMissing);\n\n\tconst globalBaseDir = context.agentDir;\n\tconst projectBaseDir = join(context.cwd, CONFIG_DIR_NAME);\n\tconst globalBaseDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectBaseDirs = getBaseDirsForScope(context, \"project\");\n\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst globalEntries = (globalSettings[resourceType] ?? []) as string[];\n\t\tconst projectEntries = (projectSettings[resourceType] ?? []) as string[];\n\t\tfor (const baseDir of projectBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tprojectEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"project\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t\tfor (const baseDir of globalBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tglobalEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"user\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t}\n\n\tawait addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);\n\treturn toResolvedPaths(accumulator);\n}\n\nexport async function resolveExtensionSources(\n\tcontext: PackageManagerContext,\n\tsources: PackageSource[],\n\toptions?: ResolveExtensionSourcesOptions,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst scope: SourceScope = options?.temporary ? \"temporary\" : options?.local ? \"project\" : \"user\";\n\tconst packageSources = sources.map((source) => ({ pkg: source, scope }));\n\tawait resolvePackageSources(context, packageSources, accumulator, undefined, {\n\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t});\n\treturn toResolvedPaths(accumulator);\n}\n\nasync function resolvePackageSources(\n\tcontext: PackageManagerContext,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n\taccumulator: ResourceAccumulator,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tfor (const { pkg, scope } of sources) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst filter = typeof pkg === \"object\" ? pkg : undefined;\n\t\tconst parsed = parseSource(sourceStr);\n\t\tconst metadata: PathMetadata = { source: sourceStr, scope, origin: \"package\" };\n\n\t\tif (parsed.type === \"local\") {\n\t\t\tfor (const baseDir of getBaseDirsForScope(context, scope)) {\n\t\t\t\tawait resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {\n\t\t\t\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst installMissing = async (): Promise<boolean> => {\n\t\t\tif (isOfflineModeEnabled()) return false;\n\t\t\tif (!onMissing) {\n\t\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst action = await onMissing(sourceStr);\n\t\t\tif (action === \"skip\") return false;\n\t\t\tif (action === \"error\") throw new Error(`Missing source: ${sourceStr}`);\n\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\treturn true;\n\t\t};\n\n\t\tif (parsed.type === \"npm\") {\n\t\t\tlet installedPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\tconst needsInstall =\n\t\t\t\t!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));\n\t\t\tif (needsInstall) {\n\t\t\t\tconst installed = await installMissing();\n\t\t\t\tif (!installed) continue;\n\t\t\t\tinstalledPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\t\tif (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!installedPath) continue;\n\t\t\tmetadata.baseDir = installedPath;\n\t\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet installedPath = getExistingGitInstallPath(context, parsed, scope) ?? getGitInstallPath(context, parsed, scope);\n\t\tif (!(await exists(installedPath))) {\n\t\t\tconst installed = await installMissing();\n\t\t\tif (!installed) continue;\n\t\t} else if (scope === \"temporary\" && !parsed.pinned && !isOfflineModeEnabled()) {\n\t\t\tif (context.driver) await context.driver.refreshTemporaryGitSource(parsed, sourceStr);\n\t\t\telse await refreshTemporaryGitSource(context, parsed, sourceStr);\n\t\t}\n\t\tmetadata.baseDir = installedPath;\n\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t}\n}\n\nasync function resolveLocalExtensionSource(\n\tsource: { type: \"local\"; path: string },\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tconst resolved = resolvePathFromBase(source.path, baseDir);\n\tif (!(await exists(resolved))) return;\n\n\ttry {\n\t\tconst stats = await stat(resolved);\n\t\tif (stats.isFile()) {\n\t\t\taddResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst packageMetadata: PathMetadata = { ...metadata, baseDir: resolved };\n\t\t\tconst packageResources = await collectPackageResources(resolved, accumulator, filter, packageMetadata);\n\t\t\tconst projectLocalResources = options?.includeProjectLocalResources\n\t\t\t\t? await collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)\n\t\t\t\t: false;\n\t\t\tconst extensionEntries = await resolveExtensionEntries(resolved);\n\t\t\tconst shouldAddDirectoryFallback =\n\t\t\t\textensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);\n\t\t\tif (!packageResources && shouldAddDirectoryFallback) {\n\t\t\t\taddResource(accumulator.extensions, resolved, packageMetadata, true);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { existsSync, statSync } from "node:fs";
1
+ import { access, stat } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  import { CONFIG_DIR_NAME } from "../config.js";
4
4
  import { getGitInstallPath } from "./package-manager-paths.js";
@@ -12,6 +12,15 @@ import { collectPackageResources, resolveLocalEntries } from "./package-manager-
12
12
  import { resolveExtensionEntries } from "./package-manager-resource-files.js";
13
13
  import { dedupePackages, getPackageSourceString, parseSource } from "./package-manager-source.js";
14
14
  import { installParsedSource } from "./package-manager-operations.js";
15
+ async function exists(path) {
16
+ try {
17
+ await access(path);
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
15
24
  export async function resolvePackages(context, onMissing) {
16
25
  const accumulator = createAccumulator();
17
26
  const globalSettings = context.settingsManager.getGlobalSettings();
@@ -34,13 +43,13 @@ export async function resolvePackages(context, onMissing) {
34
43
  const globalEntries = (globalSettings[resourceType] ?? []);
35
44
  const projectEntries = (projectSettings[resourceType] ?? []);
36
45
  for (const baseDir of projectBaseDirs) {
37
- resolveLocalEntries(projectEntries, resourceType, target, { source: "local", scope: "project", origin: "top-level", baseDir }, baseDir);
46
+ await resolveLocalEntries(projectEntries, resourceType, target, { source: "local", scope: "project", origin: "top-level", baseDir }, baseDir);
38
47
  }
39
48
  for (const baseDir of globalBaseDirs) {
40
- resolveLocalEntries(globalEntries, resourceType, target, { source: "local", scope: "user", origin: "top-level", baseDir }, baseDir);
49
+ await resolveLocalEntries(globalEntries, resourceType, target, { source: "local", scope: "user", origin: "top-level", baseDir }, baseDir);
41
50
  }
42
51
  }
43
- addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);
52
+ await addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);
44
53
  return toResolvedPaths(accumulator);
45
54
  }
46
55
  export async function resolveExtensionSources(context, sources, options) {
@@ -60,7 +69,7 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
60
69
  const metadata = { source: sourceStr, scope, origin: "package" };
61
70
  if (parsed.type === "local") {
62
71
  for (const baseDir of getBaseDirsForScope(context, scope)) {
63
- resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {
72
+ await resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {
64
73
  includeProjectLocalResources: options?.includeProjectLocalResources === true,
65
74
  });
66
75
  }
@@ -102,11 +111,11 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
102
111
  if (!installedPath)
103
112
  continue;
104
113
  metadata.baseDir = installedPath;
105
- collectPackageResources(installedPath, accumulator, filter, metadata);
114
+ await collectPackageResources(installedPath, accumulator, filter, metadata);
106
115
  continue;
107
116
  }
108
117
  let installedPath = getExistingGitInstallPath(context, parsed, scope) ?? getGitInstallPath(context, parsed, scope);
109
- if (!existsSync(installedPath)) {
118
+ if (!(await exists(installedPath))) {
110
119
  const installed = await installMissing();
111
120
  if (!installed)
112
121
  continue;
@@ -118,26 +127,26 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
118
127
  await refreshTemporaryGitSource(context, parsed, sourceStr);
119
128
  }
120
129
  metadata.baseDir = installedPath;
121
- collectPackageResources(installedPath, accumulator, filter, metadata);
130
+ await collectPackageResources(installedPath, accumulator, filter, metadata);
122
131
  }
123
132
  }
124
- function resolveLocalExtensionSource(source, accumulator, filter, metadata, baseDir, options) {
133
+ async function resolveLocalExtensionSource(source, accumulator, filter, metadata, baseDir, options) {
125
134
  const resolved = resolvePathFromBase(source.path, baseDir);
126
- if (!existsSync(resolved))
135
+ if (!(await exists(resolved)))
127
136
  return;
128
137
  try {
129
- const stats = statSync(resolved);
138
+ const stats = await stat(resolved);
130
139
  if (stats.isFile()) {
131
140
  addResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);
132
141
  return;
133
142
  }
134
143
  if (stats.isDirectory()) {
135
144
  const packageMetadata = { ...metadata, baseDir: resolved };
136
- const packageResources = collectPackageResources(resolved, accumulator, filter, packageMetadata);
145
+ const packageResources = await collectPackageResources(resolved, accumulator, filter, packageMetadata);
137
146
  const projectLocalResources = options?.includeProjectLocalResources
138
- ? collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)
147
+ ? await collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)
139
148
  : false;
140
- const extensionEntries = resolveExtensionEntries(resolved);
149
+ const extensionEntries = await resolveExtensionEntries(resolved);
141
150
  const shouldAddDirectoryFallback = extensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);
142
151
  if (!packageResources && shouldAddDirectoryFallback) {
143
152
  addResource(accumulator.extensions, resolved, packageMetadata, true);
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-resolver.js","sourceRoot":"","sources":["../../src/core/package-manager-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { getGitInstallPath } from \"./package-manager-paths.ts\";\nimport { addAutoDiscoveredResources, collectProjectLocalResources } from \"./package-manager-auto-resources.ts\";\nimport { getExistingGitInstallPath, refreshTemporaryGitSource } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getExistingNpmInstallPath, installedNpmMatchesConfiguredVersion } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { createAccumulator, addResource, getTargetMap, toResolvedPaths } from \"./package-manager-resource-accumulator.ts\";\nimport { collectPackageResources, resolveLocalEntries } from \"./package-manager-resource-collector.ts\";\nimport { resolveExtensionEntries } from \"./package-manager-resource-files.ts\";\nimport { dedupePackages, getPackageSourceString, parseSource } from \"./package-manager-source.ts\";\nimport { installParsedSource } from \"./package-manager-operations.ts\";\nimport type {\n\tMissingSourceAction,\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tResourceAccumulator,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nexport async function resolvePackages(\n\tcontext: PackageManagerContext,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages: Array<{ pkg: PackageSource; scope: SourceScope }> = [];\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"project\" });\n\t}\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"user\" });\n\t}\n\n\tconst packageSources = dedupePackages(context, allPackages);\n\tawait resolvePackageSources(context, packageSources, accumulator, onMissing);\n\n\tconst globalBaseDir = context.agentDir;\n\tconst projectBaseDir = join(context.cwd, CONFIG_DIR_NAME);\n\tconst globalBaseDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectBaseDirs = getBaseDirsForScope(context, \"project\");\n\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst globalEntries = (globalSettings[resourceType] ?? []) as string[];\n\t\tconst projectEntries = (projectSettings[resourceType] ?? []) as string[];\n\t\tfor (const baseDir of projectBaseDirs) {\n\t\t\tresolveLocalEntries(\n\t\t\t\tprojectEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"project\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t\tfor (const baseDir of globalBaseDirs) {\n\t\t\tresolveLocalEntries(\n\t\t\t\tglobalEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"user\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t}\n\n\taddAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);\n\treturn toResolvedPaths(accumulator);\n}\n\nexport async function resolveExtensionSources(\n\tcontext: PackageManagerContext,\n\tsources: PackageSource[],\n\toptions?: ResolveExtensionSourcesOptions,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst scope: SourceScope = options?.temporary ? \"temporary\" : options?.local ? \"project\" : \"user\";\n\tconst packageSources = sources.map((source) => ({ pkg: source, scope }));\n\tawait resolvePackageSources(context, packageSources, accumulator, undefined, {\n\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t});\n\treturn toResolvedPaths(accumulator);\n}\n\nasync function resolvePackageSources(\n\tcontext: PackageManagerContext,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n\taccumulator: ResourceAccumulator,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tfor (const { pkg, scope } of sources) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst filter = typeof pkg === \"object\" ? pkg : undefined;\n\t\tconst parsed = parseSource(sourceStr);\n\t\tconst metadata: PathMetadata = { source: sourceStr, scope, origin: \"package\" };\n\n\t\tif (parsed.type === \"local\") {\n\t\t\tfor (const baseDir of getBaseDirsForScope(context, scope)) {\n\t\t\t\tresolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {\n\t\t\t\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst installMissing = async (): Promise<boolean> => {\n\t\t\tif (isOfflineModeEnabled()) return false;\n\t\t\tif (!onMissing) {\n\t\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst action = await onMissing(sourceStr);\n\t\t\tif (action === \"skip\") return false;\n\t\t\tif (action === \"error\") throw new Error(`Missing source: ${sourceStr}`);\n\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\treturn true;\n\t\t};\n\n\t\tif (parsed.type === \"npm\") {\n\t\t\tlet installedPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\tconst needsInstall =\n\t\t\t\t!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));\n\t\t\tif (needsInstall) {\n\t\t\t\tconst installed = await installMissing();\n\t\t\t\tif (!installed) continue;\n\t\t\t\tinstalledPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\t\tif (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!installedPath) continue;\n\t\t\tmetadata.baseDir = installedPath;\n\t\t\tcollectPackageResources(installedPath, accumulator, filter, metadata);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet installedPath = getExistingGitInstallPath(context, parsed, scope) ?? getGitInstallPath(context, parsed, scope);\n\t\tif (!existsSync(installedPath)) {\n\t\t\tconst installed = await installMissing();\n\t\t\tif (!installed) continue;\n\t\t} else if (scope === \"temporary\" && !parsed.pinned && !isOfflineModeEnabled()) {\n\t\t\tif (context.driver) await context.driver.refreshTemporaryGitSource(parsed, sourceStr);\n\t\t\telse await refreshTemporaryGitSource(context, parsed, sourceStr);\n\t\t}\n\t\tmetadata.baseDir = installedPath;\n\t\tcollectPackageResources(installedPath, accumulator, filter, metadata);\n\t}\n}\n\nfunction resolveLocalExtensionSource(\n\tsource: { type: \"local\"; path: string },\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n\toptions?: { includeProjectLocalResources?: boolean },\n): void {\n\tconst resolved = resolvePathFromBase(source.path, baseDir);\n\tif (!existsSync(resolved)) return;\n\n\ttry {\n\t\tconst stats = statSync(resolved);\n\t\tif (stats.isFile()) {\n\t\t\taddResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst packageMetadata: PathMetadata = { ...metadata, baseDir: resolved };\n\t\t\tconst packageResources = collectPackageResources(resolved, accumulator, filter, packageMetadata);\n\t\t\tconst projectLocalResources = options?.includeProjectLocalResources\n\t\t\t\t? collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)\n\t\t\t\t: false;\n\t\t\tconst extensionEntries = resolveExtensionEntries(resolved);\n\t\t\tconst shouldAddDirectoryFallback =\n\t\t\t\textensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);\n\t\t\tif (!packageResources && shouldAddDirectoryFallback) {\n\t\t\t\taddResource(accumulator.extensions, resolved, packageMetadata, true);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n"]}
1
+ {"version":3,"file":"package-manager-resolver.js","sourceRoot":"","sources":["../../src/core/package-manager-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { getGitInstallPath } from \"./package-manager-paths.ts\";\nimport { addAutoDiscoveredResources, collectProjectLocalResources } from \"./package-manager-auto-resources.ts\";\nimport { getExistingGitInstallPath, refreshTemporaryGitSource } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getExistingNpmInstallPath, installedNpmMatchesConfiguredVersion } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { createAccumulator, addResource, getTargetMap, toResolvedPaths } from \"./package-manager-resource-accumulator.ts\";\nimport { collectPackageResources, resolveLocalEntries } from \"./package-manager-resource-collector.ts\";\nimport { resolveExtensionEntries } from \"./package-manager-resource-files.ts\";\nimport { dedupePackages, getPackageSourceString, parseSource } from \"./package-manager-source.ts\";\nimport { installParsedSource } from \"./package-manager-operations.ts\";\nimport type {\n\tMissingSourceAction,\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tResourceAccumulator,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\n\nexport async function resolvePackages(\n\tcontext: PackageManagerContext,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages: Array<{ pkg: PackageSource; scope: SourceScope }> = [];\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"project\" });\n\t}\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"user\" });\n\t}\n\n\tconst packageSources = dedupePackages(context, allPackages);\n\tawait resolvePackageSources(context, packageSources, accumulator, onMissing);\n\n\tconst globalBaseDir = context.agentDir;\n\tconst projectBaseDir = join(context.cwd, CONFIG_DIR_NAME);\n\tconst globalBaseDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectBaseDirs = getBaseDirsForScope(context, \"project\");\n\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst globalEntries = (globalSettings[resourceType] ?? []) as string[];\n\t\tconst projectEntries = (projectSettings[resourceType] ?? []) as string[];\n\t\tfor (const baseDir of projectBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tprojectEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"project\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t\tfor (const baseDir of globalBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tglobalEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"user\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t}\n\n\tawait addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);\n\treturn toResolvedPaths(accumulator);\n}\n\nexport async function resolveExtensionSources(\n\tcontext: PackageManagerContext,\n\tsources: PackageSource[],\n\toptions?: ResolveExtensionSourcesOptions,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst scope: SourceScope = options?.temporary ? \"temporary\" : options?.local ? \"project\" : \"user\";\n\tconst packageSources = sources.map((source) => ({ pkg: source, scope }));\n\tawait resolvePackageSources(context, packageSources, accumulator, undefined, {\n\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t});\n\treturn toResolvedPaths(accumulator);\n}\n\nasync function resolvePackageSources(\n\tcontext: PackageManagerContext,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n\taccumulator: ResourceAccumulator,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tfor (const { pkg, scope } of sources) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst filter = typeof pkg === \"object\" ? pkg : undefined;\n\t\tconst parsed = parseSource(sourceStr);\n\t\tconst metadata: PathMetadata = { source: sourceStr, scope, origin: \"package\" };\n\n\t\tif (parsed.type === \"local\") {\n\t\t\tfor (const baseDir of getBaseDirsForScope(context, scope)) {\n\t\t\t\tawait resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {\n\t\t\t\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst installMissing = async (): Promise<boolean> => {\n\t\t\tif (isOfflineModeEnabled()) return false;\n\t\t\tif (!onMissing) {\n\t\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst action = await onMissing(sourceStr);\n\t\t\tif (action === \"skip\") return false;\n\t\t\tif (action === \"error\") throw new Error(`Missing source: ${sourceStr}`);\n\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\treturn true;\n\t\t};\n\n\t\tif (parsed.type === \"npm\") {\n\t\t\tlet installedPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\tconst needsInstall =\n\t\t\t\t!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));\n\t\t\tif (needsInstall) {\n\t\t\t\tconst installed = await installMissing();\n\t\t\t\tif (!installed) continue;\n\t\t\t\tinstalledPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\t\tif (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!installedPath) continue;\n\t\t\tmetadata.baseDir = installedPath;\n\t\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet installedPath = getExistingGitInstallPath(context, parsed, scope) ?? getGitInstallPath(context, parsed, scope);\n\t\tif (!(await exists(installedPath))) {\n\t\t\tconst installed = await installMissing();\n\t\t\tif (!installed) continue;\n\t\t} else if (scope === \"temporary\" && !parsed.pinned && !isOfflineModeEnabled()) {\n\t\t\tif (context.driver) await context.driver.refreshTemporaryGitSource(parsed, sourceStr);\n\t\t\telse await refreshTemporaryGitSource(context, parsed, sourceStr);\n\t\t}\n\t\tmetadata.baseDir = installedPath;\n\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t}\n}\n\nasync function resolveLocalExtensionSource(\n\tsource: { type: \"local\"; path: string },\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tconst resolved = resolvePathFromBase(source.path, baseDir);\n\tif (!(await exists(resolved))) return;\n\n\ttry {\n\t\tconst stats = await stat(resolved);\n\t\tif (stats.isFile()) {\n\t\t\taddResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst packageMetadata: PathMetadata = { ...metadata, baseDir: resolved };\n\t\t\tconst packageResources = await collectPackageResources(resolved, accumulator, filter, packageMetadata);\n\t\t\tconst projectLocalResources = options?.includeProjectLocalResources\n\t\t\t\t? await collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)\n\t\t\t\t: false;\n\t\t\tconst extensionEntries = await resolveExtensionEntries(resolved);\n\t\t\tconst shouldAddDirectoryFallback =\n\t\t\t\textensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);\n\t\t\tif (!packageResources && shouldAddDirectoryFallback) {\n\t\t\t\taddResource(accumulator.extensions, resolved, packageMetadata, true);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { PackageFilter, PathMetadata, ResourceAccumulator, ResourceMap, ResourceType } from "./package-manager-types.ts";
2
- export declare function collectPackageResources(packageRoot: string, accumulator: ResourceAccumulator, filter: PackageFilter | undefined, metadata: PathMetadata): boolean;
3
- export declare function resolveLocalEntries(entries: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata, baseDir: string): void;
4
- export declare function collectFilesFromPaths(paths: string[], resourceType: ResourceType): string[];
2
+ export declare function collectPackageResources(packageRoot: string, accumulator: ResourceAccumulator, filter: PackageFilter | undefined, metadata: PathMetadata): Promise<boolean>;
3
+ export declare function resolveLocalEntries(entries: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata, baseDir: string): Promise<void>;
4
+ export declare function collectFilesFromPaths(paths: string[], resourceType: ResourceType): Promise<string[]>;
5
5
  //# sourceMappingURL=package-manager-resource-collector.d.ts.map