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

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 (283) hide show
  1. package/CHANGELOG.md +35 -2
  2. package/dist/builtin/cursor/package.json +2 -2
  3. package/dist/builtin/intercom/CHANGELOG.md +17 -0
  4. package/dist/builtin/intercom/README.md +27 -21
  5. package/dist/builtin/intercom/broker/broker.ts +3 -6
  6. package/dist/builtin/intercom/broker/paths.ts +42 -5
  7. package/dist/builtin/intercom/broker/spawn.ts +78 -10
  8. package/dist/builtin/intercom/config.ts +6 -3
  9. package/dist/builtin/intercom/contact-supervisor-tool.ts +6 -4
  10. package/dist/builtin/intercom/index-heavy.ts +1 -1
  11. package/dist/builtin/intercom/index.ts +162 -130
  12. package/dist/builtin/intercom/intercom-tool.ts +9 -3
  13. package/dist/builtin/intercom/package.json +10 -1
  14. package/dist/builtin/intercom/result-renderers.ts +1 -1
  15. package/dist/builtin/intercom/ui/compose.ts +2 -2
  16. package/dist/builtin/intercom/ui/inline-message.ts +2 -2
  17. package/dist/builtin/intercom/ui/session-list.ts +2 -2
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  20. package/dist/builtin/subagents/package.json +1 -1
  21. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +15 -48
  22. package/dist/builtin/subagents/src/tui/render-layout.ts +9 -0
  23. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +27 -25
  24. package/dist/builtin/subagents/src/tui/render-widget.ts +46 -69
  25. package/dist/builtin/subagents/src/tui/render.ts +1 -1
  26. package/dist/builtin/web-access/package.json +1 -1
  27. package/dist/builtin/workflows/CHANGELOG.md +11 -0
  28. package/dist/builtin/workflows/README.md +3 -1
  29. package/dist/builtin/workflows/builtin/goal-artifacts.ts +3 -1
  30. package/dist/builtin/workflows/builtin/goal-prompts.ts +23 -2
  31. package/dist/builtin/workflows/builtin/goal-reducer.ts +21 -0
  32. package/dist/builtin/workflows/builtin/goal-review.ts +60 -6
  33. package/dist/builtin/workflows/builtin/goal-runner.ts +32 -21
  34. package/dist/builtin/workflows/builtin/goal-types.ts +7 -1
  35. package/dist/builtin/workflows/builtin/ralph-core.ts +52 -4
  36. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +10 -3
  37. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +23 -2
  38. package/dist/builtin/workflows/builtin/ralph-runner.ts +38 -16
  39. package/dist/builtin/workflows/builtin/review-convergence.ts +111 -0
  40. package/dist/builtin/workflows/package.json +1 -1
  41. package/dist/builtin/workflows/skills/create-spec/SKILL.md +2 -0
  42. package/dist/builtin/workflows/src/durable/child-primitive.ts +12 -8
  43. package/dist/builtin/workflows/src/durable/dbos-backend.ts +47 -2
  44. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +28 -0
  45. package/dist/builtin/workflows/src/durable/stage-primitive.ts +165 -27
  46. package/dist/builtin/workflows/src/durable/types.ts +14 -1
  47. package/dist/builtin/workflows/src/engine/run.ts +12 -13
  48. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +2 -0
  49. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +13 -3
  50. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +1 -1
  51. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +18 -19
  52. package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +38 -0
  53. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +18 -1
  54. package/dist/builtin/workflows/src/shared/persistence-restore.ts +23 -5
  55. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
  56. package/dist/bun/internal-intercom-broker.d.ts +6 -0
  57. package/dist/bun/internal-intercom-broker.d.ts.map +1 -0
  58. package/dist/bun/internal-intercom-broker.js +39 -0
  59. package/dist/bun/internal-intercom-broker.js.map +1 -0
  60. package/dist/bun/split-loader.d.ts +2 -0
  61. package/dist/bun/split-loader.d.ts.map +1 -0
  62. package/dist/bun/split-loader.js +50 -0
  63. package/dist/bun/split-loader.js.map +1 -0
  64. package/dist/config.d.ts.map +1 -1
  65. package/dist/config.js +6 -4
  66. package/dist/config.js.map +1 -1
  67. package/dist/core/agent-session-auto-compaction.d.ts +7 -7
  68. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  69. package/dist/core/agent-session-auto-compaction.js +62 -16
  70. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  71. package/dist/core/agent-session-events.d.ts.map +1 -1
  72. package/dist/core/agent-session-events.js +3 -1
  73. package/dist/core/agent-session-events.js.map +1 -1
  74. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  75. package/dist/core/agent-session-extension-bindings.js +1 -1
  76. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  77. package/dist/core/agent-session-methods.d.ts +10 -4
  78. package/dist/core/agent-session-methods.d.ts.map +1 -1
  79. package/dist/core/agent-session-methods.js.map +1 -1
  80. package/dist/core/agent-session-models.d.ts +2 -2
  81. package/dist/core/agent-session-models.d.ts.map +1 -1
  82. package/dist/core/agent-session-models.js.map +1 -1
  83. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  84. package/dist/core/agent-session-prompt.js +1 -0
  85. package/dist/core/agent-session-prompt.js.map +1 -1
  86. package/dist/core/agent-session-retry.d.ts +2 -0
  87. package/dist/core/agent-session-retry.d.ts.map +1 -1
  88. package/dist/core/agent-session-retry.js +152 -4
  89. package/dist/core/agent-session-retry.js.map +1 -1
  90. package/dist/core/agent-session-services.d.ts +1 -0
  91. package/dist/core/agent-session-services.d.ts.map +1 -1
  92. package/dist/core/agent-session-services.js +1 -0
  93. package/dist/core/agent-session-services.js.map +1 -1
  94. package/dist/core/agent-session-types.d.ts +15 -1
  95. package/dist/core/agent-session-types.d.ts.map +1 -1
  96. package/dist/core/agent-session-types.js.map +1 -1
  97. package/dist/core/agent-session.d.ts +4 -0
  98. package/dist/core/agent-session.d.ts.map +1 -1
  99. package/dist/core/agent-session.js +4 -0
  100. package/dist/core/agent-session.js.map +1 -1
  101. package/dist/core/builtin-packages.d.ts.map +1 -1
  102. package/dist/core/builtin-packages.js +8 -4
  103. package/dist/core/builtin-packages.js.map +1 -1
  104. package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
  105. package/dist/core/compaction/context-compaction-runner.js +36 -20
  106. package/dist/core/compaction/context-compaction-runner.js.map +1 -1
  107. package/dist/core/copilot-anthropic-sse-repair.d.ts +23 -0
  108. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -0
  109. package/dist/core/copilot-anthropic-sse-repair.js +340 -0
  110. package/dist/core/copilot-anthropic-sse-repair.js.map +1 -0
  111. package/dist/core/copilot-gemini-reasoning.d.ts +16 -8
  112. package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
  113. package/dist/core/copilot-gemini-reasoning.js +27 -22
  114. package/dist/core/copilot-gemini-reasoning.js.map +1 -1
  115. package/dist/core/copilot-hosts.d.ts +12 -0
  116. package/dist/core/copilot-hosts.d.ts.map +1 -0
  117. package/dist/core/copilot-hosts.js +33 -0
  118. package/dist/core/copilot-hosts.js.map +1 -0
  119. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  120. package/dist/core/copilot-model-catalog.js +3 -2
  121. package/dist/core/copilot-model-catalog.js.map +1 -1
  122. package/dist/core/extensions/agent-events.d.ts +1 -1
  123. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  124. package/dist/core/extensions/agent-events.js.map +1 -1
  125. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  126. package/dist/core/extensions/loader-virtual-modules.js +8 -3
  127. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  128. package/dist/core/http-dispatcher.d.ts.map +1 -1
  129. package/dist/core/http-dispatcher.js +5 -5
  130. package/dist/core/http-dispatcher.js.map +1 -1
  131. package/dist/core/openai-responses-payload-sanitizer.d.ts +6 -0
  132. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
  133. package/dist/core/openai-responses-payload-sanitizer.js +59 -0
  134. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
  135. package/dist/core/package-manager-auto-resources.d.ts +2 -2
  136. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  137. package/dist/core/package-manager-auto-resources.js +32 -52
  138. package/dist/core/package-manager-auto-resources.js.map +1 -1
  139. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  140. package/dist/core/package-manager-resolver.js +23 -14
  141. package/dist/core/package-manager-resolver.js.map +1 -1
  142. package/dist/core/package-manager-resource-collector.d.ts +3 -3
  143. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  144. package/dist/core/package-manager-resource-collector.js +76 -73
  145. package/dist/core/package-manager-resource-collector.js.map +1 -1
  146. package/dist/core/package-manager-resource-files.d.ts +9 -8
  147. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  148. package/dist/core/package-manager-resource-files.js +92 -81
  149. package/dist/core/package-manager-resource-files.js.map +1 -1
  150. package/dist/core/prompt-templates-async.d.ts +3 -0
  151. package/dist/core/prompt-templates-async.d.ts.map +1 -0
  152. package/dist/core/prompt-templates-async.js +118 -0
  153. package/dist/core/prompt-templates-async.js.map +1 -0
  154. package/dist/core/provider-context-usage.d.ts +11 -0
  155. package/dist/core/provider-context-usage.d.ts.map +1 -0
  156. package/dist/core/provider-context-usage.js +58 -0
  157. package/dist/core/provider-context-usage.js.map +1 -0
  158. package/dist/core/resource-loader-assets.d.ts +3 -3
  159. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  160. package/dist/core/resource-loader-assets.js +66 -83
  161. package/dist/core/resource-loader-assets.js.map +1 -1
  162. package/dist/core/resource-loader-core.d.ts +1 -1
  163. package/dist/core/resource-loader-core.d.ts.map +1 -1
  164. package/dist/core/resource-loader-core.js +5 -5
  165. package/dist/core/resource-loader-core.js.map +1 -1
  166. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  167. package/dist/core/resource-loader-reload.js +43 -7
  168. package/dist/core/resource-loader-reload.js.map +1 -1
  169. package/dist/core/resource-loader-types.d.ts +7 -1
  170. package/dist/core/resource-loader-types.d.ts.map +1 -1
  171. package/dist/core/resource-loader-types.js.map +1 -1
  172. package/dist/core/sdk-types.d.ts +2 -0
  173. package/dist/core/sdk-types.d.ts.map +1 -1
  174. package/dist/core/sdk-types.js.map +1 -1
  175. package/dist/core/sdk.d.ts.map +1 -1
  176. package/dist/core/sdk.js +7 -4
  177. package/dist/core/sdk.js.map +1 -1
  178. package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
  179. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  180. package/dist/core/settings-manager-basic-accessors.js +6 -0
  181. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  182. package/dist/core/settings-types.d.ts +1 -0
  183. package/dist/core/settings-types.d.ts.map +1 -1
  184. package/dist/core/settings-types.js.map +1 -1
  185. package/dist/core/skills-async.d.ts +3 -0
  186. package/dist/core/skills-async.d.ts.map +1 -0
  187. package/dist/core/skills-async.js +269 -0
  188. package/dist/core/skills-async.js.map +1 -0
  189. package/dist/index-extensions.d.ts +1 -1
  190. package/dist/index-extensions.d.ts.map +1 -1
  191. package/dist/index-extensions.js.map +1 -1
  192. package/dist/main-deferred-startup.d.ts +14 -0
  193. package/dist/main-deferred-startup.d.ts.map +1 -1
  194. package/dist/main-deferred-startup.js +23 -0
  195. package/dist/main-deferred-startup.js.map +1 -1
  196. package/dist/main-early-input.d.ts +41 -0
  197. package/dist/main-early-input.d.ts.map +1 -0
  198. package/dist/main-early-input.js +147 -0
  199. package/dist/main-early-input.js.map +1 -0
  200. package/dist/main.d.ts +0 -6
  201. package/dist/main.d.ts.map +1 -1
  202. package/dist/main.js +23 -17
  203. package/dist/main.js.map +1 -1
  204. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  205. package/dist/modes/interactive/components/chat-session-host-events.js +15 -0
  206. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  207. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  208. package/dist/modes/interactive/interactive-agent-events.js +34 -1
  209. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  210. package/dist/modes/interactive/interactive-deferred-startup.d.ts +6 -0
  211. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  212. package/dist/modes/interactive/interactive-deferred-startup.js +27 -13
  213. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  214. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  215. package/dist/modes/interactive/interactive-editor-actions.js +13 -13
  216. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  217. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  218. package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
  219. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  220. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  221. package/dist/modes/interactive/interactive-input-handling.js +324 -178
  222. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  223. package/dist/modes/interactive/interactive-mode-base.d.ts +14 -0
  224. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  225. package/dist/modes/interactive/interactive-mode-base.js +41 -0
  226. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  227. package/dist/modes/interactive/interactive-mode-surface.d.ts +22 -6
  228. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  229. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  230. package/dist/modes/interactive/interactive-mode-types.d.ts +3 -0
  231. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  232. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  233. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  234. package/dist/modes/interactive/interactive-model-routing.js +3 -3
  235. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  236. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  237. package/dist/modes/interactive/interactive-onboarding.js +1 -0
  238. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  239. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  240. package/dist/modes/interactive/interactive-process-lifecycle.js +43 -6
  241. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  242. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  243. package/dist/modes/interactive/interactive-render-chat.js +78 -9
  244. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  245. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  246. package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
  247. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  248. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  249. package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
  250. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  251. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  252. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  253. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  254. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  255. package/dist/modes/interactive/interactive-startup.js +65 -53
  256. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  257. package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
  258. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  259. package/dist/modes/interactive/theme/theme-loading.js +3 -0
  260. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  261. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  262. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  263. package/dist/modes/interactive/theme/theme.js +1 -1
  264. package/dist/modes/interactive/theme/theme.js.map +1 -1
  265. package/dist/utils/module-require.d.ts +11 -0
  266. package/dist/utils/module-require.d.ts.map +1 -1
  267. package/dist/utils/module-require.js +14 -1
  268. package/dist/utils/module-require.js.map +1 -1
  269. package/dist/utils/split-launcher.d.ts +38 -0
  270. package/dist/utils/split-launcher.d.ts.map +1 -0
  271. package/dist/utils/split-launcher.js +63 -0
  272. package/dist/utils/split-launcher.js.map +1 -0
  273. package/docs/compaction.md +7 -0
  274. package/docs/json.md +3 -1
  275. package/docs/keybindings.md +2 -2
  276. package/docs/providers.md +2 -1
  277. package/docs/rpc.md +3 -1
  278. package/docs/settings.md +28 -2
  279. package/docs/terminal-setup.md +4 -0
  280. package/docs/usage.md +3 -3
  281. package/docs/workflows.md +13 -3
  282. package/npm-shrinkwrap.json +513 -23
  283. package/package.json +5 -4
@@ -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":"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","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
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-resource-collector.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-collector.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,MAAM,4BAA4B,CAAC;AAEpC,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CA0CT;AAqGD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,GACb,IAAI,CAWN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAc3F","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { globSync } from \"glob\";\nimport { resolve } from \"node:path\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport { collectResourceFiles } from \"./package-manager-resource-files.ts\";\nimport { conventionDirsForResource, manifestEntriesForResource, readPiManifest } from \"./package-manager-manifest.ts\";\nimport {\n\tapplyPatterns,\n\thasGlobPattern,\n\tisOverridePattern,\n\tsplitPatterns,\n} from \"./package-manager-resource-patterns.ts\";\nimport { resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport type {\n\tPackageFilter,\n\tPathMetadata,\n\tResourceAccumulator,\n\tResourceMap,\n\tResourceType,\n} from \"./package-manager-types.ts\";\n\nexport function collectPackageResources(\n\tpackageRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): boolean {\n\tif (filter) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst patterns = filter[resourceType as keyof PackageFilter];\n\t\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\t\tif (patterns !== undefined) {\n\t\t\t\tapplyPackageFilter(packageRoot, patterns, resourceType, target, metadata);\n\t\t\t} else {\n\t\t\t\tcollectDefaultResources(packageRoot, resourceType, target, metadata);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst manifest = readPiManifest(packageRoot);\n\tif (manifest) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\t\t\tif (entries !== undefined) {\n\t\t\t\taddManifestEntries(entries, packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (resourceType === \"workflows\") {\n\t\t\t\tcollectDefaultResources(packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tlet hasAnyDir = false;\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\t\tif (existsSync(dir)) {\n\t\t\t\tconst files = collectResourceFiles(dir, resourceType);\n\t\t\t\tfor (const f of files) {\n\t\t\t\t\taddResource(getTargetMap(accumulator, resourceType), f, metadata, true);\n\t\t\t\t}\n\t\t\t\thasAnyDir = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn hasAnyDir;\n}\n\nfunction collectDefaultResources(\n\tpackageRoot: string,\n\tresourceType: ResourceType,\n\ttarget: ResourceMap,\n\tmetadata: PathMetadata,\n): void {\n\tconst manifest = readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries !== undefined) {\n\t\taddManifestEntries(entries, packageRoot, resourceType, target, metadata);\n\t\treturn;\n\t}\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (existsSync(dir)) {\n\t\t\tconst files = collectResourceFiles(dir, resourceType);\n\t\t\tfor (const f of files) {\n\t\t\t\taddResource(target, f, metadata, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction applyPackageFilter(\n\tpackageRoot: string,\n\tuserPatterns: string[],\n\tresourceType: ResourceType,\n\ttarget: ResourceMap,\n\tmetadata: PathMetadata,\n): void {\n\tconst { allFiles } = collectManifestFiles(packageRoot, resourceType);\n\tif (userPatterns.length === 0) {\n\t\tfor (const f of allFiles) {\n\t\t\taddResource(target, f, metadata, false);\n\t\t}\n\t\treturn;\n\t}\n\n\tconst enabledByUser = applyPatterns(allFiles, userPatterns, packageRoot);\n\tfor (const f of allFiles) {\n\t\taddResource(target, f, metadata, enabledByUser.has(f));\n\t}\n}\n\nfunction collectManifestFiles(\n\tpackageRoot: string,\n\tresourceType: ResourceType,\n): { allFiles: string[]; enabledByManifest: Set<string> } {\n\tconst manifest = readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries && entries.length > 0) {\n\t\tconst allFiles = collectFilesFromManifestEntries(entries, packageRoot, resourceType);\n\t\tconst manifestPatterns = entries.filter(isOverridePattern);\n\t\tconst enabledByManifest =\n\t\t\tmanifestPatterns.length > 0 ? applyPatterns(allFiles, manifestPatterns, packageRoot) : new Set(allFiles);\n\t\treturn { allFiles: Array.from(enabledByManifest), enabledByManifest };\n\t}\n\n\tconst allFiles = conventionDirsForResource(packageRoot, resourceType).flatMap((dir) =>\n\t\texistsSync(dir) ? collectResourceFiles(dir, resourceType) : [],\n\t);\n\treturn { allFiles, enabledByManifest: new Set(allFiles) };\n}\n\nfunction addManifestEntries(\n\tentries: string[] | undefined,\n\troot: string,\n\tresourceType: ResourceType,\n\ttarget: ResourceMap,\n\tmetadata: PathMetadata,\n): void {\n\tif (!entries) return;\n\n\tconst allFiles = collectFilesFromManifestEntries(entries, root, resourceType);\n\tconst patterns = entries.filter(isOverridePattern);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, root);\n\n\tfor (const f of allFiles) {\n\t\tif (enabledPaths.has(f)) {\n\t\t\taddResource(target, f, metadata, true);\n\t\t}\n\t}\n}\n\nfunction collectFilesFromManifestEntries(entries: string[], root: string, resourceType: ResourceType): string[] {\n\tconst sourceEntries = entries.filter((entry) => !isOverridePattern(entry));\n\tconst resolved = sourceEntries.flatMap((entry) => {\n\t\tif (!hasGlobPattern(entry)) {\n\t\t\treturn [resolve(root, entry)];\n\t\t}\n\t\treturn globSync(entry, {\n\t\t\tcwd: root,\n\t\t\tabsolute: true,\n\t\t\tdot: false,\n\t\t\tnodir: false,\n\t\t}).map((match) => resolve(match));\n\t});\n\treturn collectFilesFromPaths(resolved, resourceType);\n}\n\nexport function resolveLocalEntries(\n\tentries: string[],\n\tresourceType: ResourceType,\n\ttarget: ResourceMap,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n): void {\n\tif (entries.length === 0) return;\n\n\tconst { plain, patterns } = splitPatterns(entries);\n\tconst resolvedPlain = plain.map((p) => resolvePathFromBase(p, baseDir));\n\tconst allFiles = collectFilesFromPaths(resolvedPlain, resourceType);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, baseDir);\n\n\tfor (const f of allFiles) {\n\t\taddResource(target, f, metadata, enabledPaths.has(f));\n\t}\n}\n\nexport function collectFilesFromPaths(paths: string[], resourceType: ResourceType): string[] {\n\tconst files: string[] = [];\n\tfor (const p of paths) {\n\t\tif (!existsSync(p)) continue;\n\t\ttry {\n\t\t\tconst stats = statSync(p);\n\t\t\tif (stats.isFile()) {\n\t\t\t\tfiles.push(p);\n\t\t\t} else if (stats.isDirectory()) {\n\t\t\t\tfiles.push(...collectResourceFiles(p, resourceType));\n\t\t\t}\n\t\t} catch {}\n\t}\n\treturn files;\n}\n"]}
1
+ {"version":3,"file":"package-manager-resource-collector.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-collector.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe9H,wBAAsB,uBAAuB,CAC5C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,OAAO,CAAC,CA+BlB;AA0DD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpK;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW1G","sourcesContent":["import { access, readFile, stat } from \"node:fs/promises\";\nimport { glob } from \"glob\";\nimport { resolve } from \"node:path\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport { collectResourceFiles } from \"./package-manager-resource-files.ts\";\nimport { conventionDirsForResource, getManifestFromPackageJson, manifestEntriesForResource } from \"./package-manager-manifest.ts\";\nimport { applyPatterns, hasGlobPattern, isOverridePattern, splitPatterns } from \"./package-manager-resource-patterns.ts\";\nimport { resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport type { PackageFilter, PathMetadata, ResourceAccumulator, ResourceMap, ResourceType } from \"./package-manager-types.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\nasync function readPiManifest(packageRoot: string): Promise<ReturnType<typeof getManifestFromPackageJson> | null> {\n\ttry {\n\t\tconst content = await readFile(resolve(packageRoot, \"package.json\"), \"utf-8\");\n\t\treturn getManifestFromPackageJson(JSON.parse(content) as Record<string, unknown>);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport async function collectPackageResources(\n\tpackageRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): Promise<boolean> {\n\tif (filter) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst patterns = filter[resourceType as keyof PackageFilter];\n\t\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\t\tif (patterns !== undefined) await applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);\n\t\t\telse await collectDefaultResources(packageRoot, resourceType, target, metadata);\n\t\t}\n\t\treturn true;\n\t}\n\tconst manifest = await readPiManifest(packageRoot);\n\tif (manifest) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\t\t\tif (entries !== undefined) {\n\t\t\t\tawait addManifestEntries(entries, packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (resourceType === \"workflows\") await collectDefaultResources(packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t}\n\t\treturn true;\n\t}\n\tlet hasAnyDir = false;\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\t\tif (!(await exists(dir))) continue;\n\t\t\tfor (const f of await collectResourceFiles(dir, resourceType)) addResource(getTargetMap(accumulator, resourceType), f, metadata, true);\n\t\t\thasAnyDir = true;\n\t\t}\n\t}\n\treturn hasAnyDir;\n}\n\nasync function collectDefaultResources(packageRoot: string, resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tconst manifest = await readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries !== undefined) {\n\t\tawait addManifestEntries(entries, packageRoot, resourceType, target, metadata);\n\t\treturn;\n\t}\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (!(await exists(dir))) continue;\n\t\tfor (const f of await collectResourceFiles(dir, resourceType)) addResource(target, f, metadata, true);\n\t}\n}\n\nasync function applyPackageFilter(packageRoot: string, userPatterns: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tconst { allFiles } = await collectManifestFiles(packageRoot, resourceType);\n\tif (userPatterns.length === 0) {\n\t\tfor (const f of allFiles) addResource(target, f, metadata, false);\n\t\treturn;\n\t}\n\tconst enabledByUser = applyPatterns(allFiles, userPatterns, packageRoot);\n\tfor (const f of allFiles) addResource(target, f, metadata, enabledByUser.has(f));\n}\n\nasync function collectManifestFiles(packageRoot: string, resourceType: ResourceType): Promise<{ allFiles: string[]; enabledByManifest: Set<string> }> {\n\tconst manifest = await readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries && entries.length > 0) {\n\t\tconst allFiles = await collectFilesFromManifestEntries(entries, packageRoot, resourceType);\n\t\tconst manifestPatterns = entries.filter(isOverridePattern);\n\t\tconst enabledByManifest = manifestPatterns.length > 0 ? applyPatterns(allFiles, manifestPatterns, packageRoot) : new Set(allFiles);\n\t\treturn { allFiles: Array.from(enabledByManifest), enabledByManifest };\n\t}\n\tconst allFiles: string[] = [];\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (await exists(dir)) allFiles.push(...await collectResourceFiles(dir, resourceType));\n\t}\n\treturn { allFiles, enabledByManifest: new Set(allFiles) };\n}\n\nasync function addManifestEntries(entries: string[] | undefined, root: string, resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tif (!entries) return;\n\tconst allFiles = await collectFilesFromManifestEntries(entries, root, resourceType);\n\tconst patterns = entries.filter(isOverridePattern);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, root);\n\tfor (const f of allFiles) if (enabledPaths.has(f)) addResource(target, f, metadata, true);\n}\n\nasync function collectFilesFromManifestEntries(entries: string[], root: string, resourceType: ResourceType): Promise<string[]> {\n\tconst resolved: string[] = [];\n\tfor (const entry of entries.filter((entry) => !isOverridePattern(entry))) {\n\t\tif (!hasGlobPattern(entry)) resolved.push(resolve(root, entry));\n\t\telse resolved.push(...(await glob(entry, { cwd: root, absolute: true, dot: false, nodir: false })).map((match) => resolve(match)));\n\t}\n\treturn collectFilesFromPaths(resolved, resourceType);\n}\n\nexport async function resolveLocalEntries(entries: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata, baseDir: string): Promise<void> {\n\tif (entries.length === 0) return;\n\tconst { plain, patterns } = splitPatterns(entries);\n\tconst resolvedPlain = plain.map((p) => resolvePathFromBase(p, baseDir));\n\tconst allFiles = await collectFilesFromPaths(resolvedPlain, resourceType);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, baseDir);\n\tfor (const f of allFiles) addResource(target, f, metadata, enabledPaths.has(f));\n}\n\nexport async function collectFilesFromPaths(paths: string[], resourceType: ResourceType): Promise<string[]> {\n\tconst files: string[] = [];\n\tfor (const p of paths) {\n\t\tif (!(await exists(p))) continue;\n\t\ttry {\n\t\t\tconst stats = await stat(p);\n\t\t\tif (stats.isFile()) files.push(p);\n\t\t\telse if (stats.isDirectory()) files.push(...await collectResourceFiles(p, resourceType));\n\t\t} catch {}\n\t}\n\treturn files;\n}\n"]}