@bastani/atomic 0.9.8 → 0.9.9-alpha.2

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 (814) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/builtin/cursor/CHANGELOG.md +12 -0
  3. package/dist/builtin/cursor/package.json +3 -3
  4. package/dist/builtin/intercom/CHANGELOG.md +13 -0
  5. package/dist/builtin/intercom/package.json +3 -3
  6. package/dist/builtin/mcp/CHANGELOG.md +13 -0
  7. package/dist/builtin/mcp/package.json +4 -4
  8. package/dist/builtin/subagents/CHANGELOG.md +13 -0
  9. package/dist/builtin/subagents/package.json +5 -5
  10. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +2 -0
  11. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +7 -1
  12. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +2 -0
  13. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +8 -2
  14. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +2 -0
  15. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +2 -0
  16. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +2 -1
  17. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +2 -0
  18. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
  19. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
  20. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -0
  21. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +6 -0
  22. package/dist/builtin/subagents/src/shared/types-config.ts +4 -0
  23. package/dist/builtin/subagents/src/shared/types-depth.ts +29 -2
  24. package/dist/builtin/web-access/CHANGELOG.md +13 -0
  25. package/dist/builtin/web-access/package.json +3 -3
  26. package/dist/builtin/web-access/web-search-tool.ts +1 -2
  27. package/dist/builtin/workflows/CHANGELOG.md +29 -0
  28. package/dist/builtin/workflows/README.md +17 -8
  29. package/dist/builtin/workflows/builtin/goal-prompts.ts +8 -2
  30. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +26 -9
  31. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +1 -1
  32. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +8 -3
  33. package/dist/builtin/workflows/builtin/ralph-runner.ts +2 -0
  34. package/dist/builtin/workflows/builtin/shared-prompts.ts +24 -1
  35. package/dist/builtin/workflows/package.json +3 -3
  36. package/dist/builtin/workflows/src/durable/backend.ts +53 -15
  37. package/dist/builtin/workflows/src/durable/completed-catalog.ts +245 -0
  38. package/dist/builtin/workflows/src/durable/completed-inspection.ts +213 -0
  39. package/dist/builtin/workflows/src/durable/dbos-backend.ts +120 -170
  40. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +84 -8
  41. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +98 -0
  42. package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +27 -0
  43. package/dist/builtin/workflows/src/durable/factory.ts +1 -1
  44. package/dist/builtin/workflows/src/durable/file-backend.ts +247 -241
  45. package/dist/builtin/workflows/src/durable/file-lock.ts +153 -0
  46. package/dist/builtin/workflows/src/durable/file-state.ts +104 -0
  47. package/dist/builtin/workflows/src/durable/format-version.ts +12 -0
  48. package/dist/builtin/workflows/src/durable/index.ts +12 -0
  49. package/dist/builtin/workflows/src/durable/resume-catalog.ts +16 -27
  50. package/dist/builtin/workflows/src/durable/resume-eligibility.ts +20 -0
  51. package/dist/builtin/workflows/src/durable/resume-runtime.ts +29 -29
  52. package/dist/builtin/workflows/src/durable/scoped-backend.ts +20 -3
  53. package/dist/builtin/workflows/src/durable/stage-primitive.ts +29 -8
  54. package/dist/builtin/workflows/src/durable/types.ts +3 -0
  55. package/dist/builtin/workflows/src/engine/primitives/task.ts +1 -0
  56. package/dist/builtin/workflows/src/engine/run.ts +14 -14
  57. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +39 -9
  58. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +10 -0
  59. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +133 -0
  60. package/dist/builtin/workflows/src/extension/runtime.ts +15 -40
  61. package/dist/builtin/workflows/src/extension/wiring.ts +9 -6
  62. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +226 -0
  63. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +1 -0
  64. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +66 -112
  65. package/dist/builtin/workflows/src/extension/workflow-schema.ts +5 -5
  66. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +16 -1
  67. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +50 -43
  68. package/dist/builtin/workflows/src/runs/foreground/executor-direct-output.ts +91 -0
  69. package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +95 -46
  70. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +3 -1
  71. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +1 -1
  72. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +3 -0
  73. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +1 -1
  74. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +36 -7
  75. package/dist/builtin/workflows/src/runs/shared/worktree-cache-lifecycle.ts +25 -0
  76. package/dist/builtin/workflows/src/runs/shared/worktree-cwd.ts +103 -0
  77. package/dist/builtin/workflows/src/runs/shared/worktree-generation.ts +57 -0
  78. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +134 -8
  79. package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -0
  80. package/dist/builtin/workflows/src/shared/resumable-workflow-notices.ts +43 -0
  81. package/dist/builtin/workflows/src/shared/serializable.ts +1 -1
  82. package/dist/builtin/workflows/src/shared/timing.ts +4 -0
  83. package/dist/builtin/workflows/src/shared/types.ts +5 -3
  84. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +1 -0
  85. package/dist/builtin/workflows/src/tui/graph-view-input.ts +24 -14
  86. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +43 -13
  87. package/dist/bun/cli.d.ts.map +1 -1
  88. package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
  89. package/dist/bun/register-bedrock.d.ts.map +1 -1
  90. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  91. package/dist/bun/split-loader.d.ts.map +1 -1
  92. package/dist/cli/args.d.ts.map +1 -1
  93. package/dist/cli/config-selector.d.ts.map +1 -1
  94. package/dist/cli/file-processor.d.ts.map +1 -1
  95. package/dist/cli/initial-message.d.ts.map +1 -1
  96. package/dist/cli/list-models.d.ts.map +1 -1
  97. package/dist/cli/project-trust.d.ts.map +1 -1
  98. package/dist/cli/session-picker.d.ts.map +1 -1
  99. package/dist/cli/startup-ui.d.ts.map +1 -1
  100. package/dist/cli.d.ts.map +1 -1
  101. package/dist/config-self-update.d.ts.map +1 -1
  102. package/dist/config.d.ts.map +1 -1
  103. package/dist/core/agent-session-accessors.d.ts.map +1 -1
  104. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  105. package/dist/core/agent-session-auto-compaction.js +5 -7
  106. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  107. package/dist/core/agent-session-bash.d.ts.map +1 -1
  108. package/dist/core/agent-session-compaction.d.ts +6 -34
  109. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  110. package/dist/core/agent-session-compaction.js +95 -233
  111. package/dist/core/agent-session-compaction.js.map +1 -1
  112. package/dist/core/agent-session-events.d.ts.map +1 -1
  113. package/dist/core/agent-session-export.d.ts.map +1 -1
  114. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  115. package/dist/core/agent-session-message-queue.d.ts +0 -4
  116. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  117. package/dist/core/agent-session-message-queue.js +1 -5
  118. package/dist/core/agent-session-message-queue.js.map +1 -1
  119. package/dist/core/agent-session-methods.d.ts +5 -6
  120. package/dist/core/agent-session-methods.d.ts.map +1 -1
  121. package/dist/core/agent-session-methods.js.map +1 -1
  122. package/dist/core/agent-session-models.d.ts.map +1 -1
  123. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  124. package/dist/core/agent-session-retry.d.ts.map +1 -1
  125. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  126. package/dist/core/agent-session-services.d.ts.map +1 -1
  127. package/dist/core/agent-session-skill-block.d.ts.map +1 -1
  128. package/dist/core/agent-session-state.d.ts.map +1 -1
  129. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  130. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  131. package/dist/core/agent-session-tree.d.ts.map +1 -1
  132. package/dist/core/agent-session-types.d.ts +2 -12
  133. package/dist/core/agent-session-types.d.ts.map +1 -1
  134. package/dist/core/agent-session-types.js.map +1 -1
  135. package/dist/core/agent-session.d.ts.map +1 -1
  136. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  137. package/dist/core/async/format.d.ts.map +1 -1
  138. package/dist/core/async/job-manager.d.ts.map +1 -1
  139. package/dist/core/async/session-manager.d.ts.map +1 -1
  140. package/dist/core/async/types.d.ts.map +1 -1
  141. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  142. package/dist/core/auth-guidance.d.ts.map +1 -1
  143. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  144. package/dist/core/auth-storage.d.ts +4 -0
  145. package/dist/core/auth-storage.d.ts.map +1 -1
  146. package/dist/core/bash-executor.d.ts.map +1 -1
  147. package/dist/core/builtin-packages.d.ts.map +1 -1
  148. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  149. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  150. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  151. package/dist/core/compaction/branch-summarization.js +1 -2
  152. package/dist/core/compaction/branch-summarization.js.map +1 -1
  153. package/dist/core/compaction/compaction-boundary.d.ts +9 -0
  154. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -0
  155. package/dist/core/compaction/compaction-boundary.js +115 -0
  156. package/dist/core/compaction/compaction-boundary.js.map +1 -0
  157. package/dist/core/compaction/compaction-parameters.d.ts +5 -0
  158. package/dist/core/compaction/compaction-parameters.d.ts.map +1 -0
  159. package/dist/core/compaction/compaction-parameters.js +27 -0
  160. package/dist/core/compaction/compaction-parameters.js.map +1 -0
  161. package/dist/core/compaction/compaction-runner.d.ts +14 -0
  162. package/dist/core/compaction/compaction-runner.d.ts.map +1 -0
  163. package/dist/core/compaction/compaction-runner.js +29 -0
  164. package/dist/core/compaction/compaction-runner.js.map +1 -0
  165. package/dist/core/compaction/compaction-types.d.ts +79 -0
  166. package/dist/core/compaction/compaction-types.d.ts.map +1 -0
  167. package/dist/core/compaction/compaction-types.js +6 -0
  168. package/dist/core/compaction/compaction-types.js.map +1 -0
  169. package/dist/core/compaction/compaction.d.ts.map +1 -1
  170. package/dist/core/compaction/deleted-ranges.d.ts +6 -0
  171. package/dist/core/compaction/deleted-ranges.d.ts.map +1 -0
  172. package/dist/core/compaction/deleted-ranges.js +134 -0
  173. package/dist/core/compaction/deleted-ranges.js.map +1 -0
  174. package/dist/core/compaction/index.d.ts +7 -1
  175. package/dist/core/compaction/index.d.ts.map +1 -1
  176. package/dist/core/compaction/index.js +7 -1
  177. package/dist/core/compaction/index.js.map +1 -1
  178. package/dist/core/compaction/range-planner.d.ts +21 -0
  179. package/dist/core/compaction/range-planner.d.ts.map +1 -0
  180. package/dist/core/compaction/range-planner.js +145 -0
  181. package/dist/core/compaction/range-planner.js.map +1 -0
  182. package/dist/core/compaction/transcript-serialization.d.ts +11 -0
  183. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -0
  184. package/dist/core/compaction/transcript-serialization.js +104 -0
  185. package/dist/core/compaction/transcript-serialization.js.map +1 -0
  186. package/dist/core/compaction/utils.d.ts.map +1 -1
  187. package/dist/core/context-window.d.ts.map +1 -1
  188. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -1
  189. package/dist/core/copilot-errors.d.ts.map +1 -1
  190. package/dist/core/copilot-gemini-payload-sanitizer.d.ts.map +1 -1
  191. package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
  192. package/dist/core/copilot-gemini-tool-arguments.d.ts.map +1 -1
  193. package/dist/core/copilot-hosts.d.ts.map +1 -1
  194. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  195. package/dist/core/copilot-model-static-fallbacks.d.ts.map +1 -1
  196. package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
  197. package/dist/core/defaults.d.ts.map +1 -1
  198. package/dist/core/diagnostics.d.ts.map +1 -1
  199. package/dist/core/event-bus.d.ts.map +1 -1
  200. package/dist/core/exec.d.ts.map +1 -1
  201. package/dist/core/experimental.d.ts.map +1 -1
  202. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  203. package/dist/core/export-html/index.d.ts.map +1 -1
  204. package/dist/core/export-html/template-script.d.ts.map +1 -1
  205. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  206. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  207. package/dist/core/extensions/api-types.d.ts.map +1 -1
  208. package/dist/core/extensions/command-types.d.ts.map +1 -1
  209. package/dist/core/extensions/context-types.d.ts +2 -2
  210. package/dist/core/extensions/context-types.d.ts.map +1 -1
  211. package/dist/core/extensions/context-types.js.map +1 -1
  212. package/dist/core/extensions/event-results.d.ts +2 -2
  213. package/dist/core/extensions/event-results.d.ts.map +1 -1
  214. package/dist/core/extensions/event-results.js.map +1 -1
  215. package/dist/core/extensions/event-types.d.ts.map +1 -1
  216. package/dist/core/extensions/index.d.ts.map +1 -1
  217. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  218. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  219. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  220. package/dist/core/extensions/loader-resources.d.ts.map +1 -1
  221. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  222. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  223. package/dist/core/extensions/loader.d.ts.map +1 -1
  224. package/dist/core/extensions/message-types.d.ts.map +1 -1
  225. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  226. package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
  227. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  228. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  229. package/dist/core/extensions/runner-handlers.d.ts.map +1 -1
  230. package/dist/core/extensions/runner-project-trust.d.ts.map +1 -1
  231. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  232. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  233. package/dist/core/extensions/runner-ui.d.ts.map +1 -1
  234. package/dist/core/extensions/runner.d.ts.map +1 -1
  235. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  236. package/dist/core/extensions/session-events.d.ts +7 -7
  237. package/dist/core/extensions/session-events.d.ts.map +1 -1
  238. package/dist/core/extensions/session-events.js.map +1 -1
  239. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  240. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  241. package/dist/core/extensions/types.d.ts.map +1 -1
  242. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  243. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  244. package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
  245. package/dist/core/footer-data-provider.d.ts.map +1 -1
  246. package/dist/core/http-dispatcher.d.ts.map +1 -1
  247. package/dist/core/index.d.ts +1 -1
  248. package/dist/core/index.d.ts.map +1 -1
  249. package/dist/core/index.js.map +1 -1
  250. package/dist/core/keybindings.d.ts.map +1 -1
  251. package/dist/core/messages.d.ts +4 -0
  252. package/dist/core/messages.d.ts.map +1 -1
  253. package/dist/core/messages.js +11 -0
  254. package/dist/core/messages.js.map +1 -1
  255. package/dist/core/model-registry-auth.d.ts.map +1 -1
  256. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  257. package/dist/core/model-registry-builtins.js.map +1 -1
  258. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  259. package/dist/core/model-registry-custom-loader.js.map +1 -1
  260. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  261. package/dist/core/model-registry-loader.d.ts.map +1 -1
  262. package/dist/core/model-registry-schemas.d.ts +65 -13
  263. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  264. package/dist/core/model-registry-schemas.js +5 -1
  265. package/dist/core/model-registry-schemas.js.map +1 -1
  266. package/dist/core/model-registry-types.d.ts.map +1 -1
  267. package/dist/core/model-registry.d.ts.map +1 -1
  268. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  269. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  270. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  271. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  272. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  273. package/dist/core/model-resolver-types.d.ts.map +1 -1
  274. package/dist/core/model-resolver.d.ts.map +1 -1
  275. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  276. package/dist/core/output-guard.d.ts.map +1 -1
  277. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  278. package/dist/core/package-manager-command.d.ts.map +1 -1
  279. package/dist/core/package-manager-constants.d.ts.map +1 -1
  280. package/dist/core/package-manager-env.d.ts.map +1 -1
  281. package/dist/core/package-manager-git.d.ts.map +1 -1
  282. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  283. package/dist/core/package-manager-npm.d.ts.map +1 -1
  284. package/dist/core/package-manager-operations.d.ts.map +1 -1
  285. package/dist/core/package-manager-paths.d.ts.map +1 -1
  286. package/dist/core/package-manager-progress.d.ts.map +1 -1
  287. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  288. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
  289. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  290. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  291. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  292. package/dist/core/package-manager-settings.d.ts.map +1 -1
  293. package/dist/core/package-manager-source.d.ts.map +1 -1
  294. package/dist/core/package-manager-types.d.ts.map +1 -1
  295. package/dist/core/package-manager.d.ts.map +1 -1
  296. package/dist/core/project-trust.d.ts.map +1 -1
  297. package/dist/core/prompt-templates-async.d.ts.map +1 -1
  298. package/dist/core/prompt-templates.d.ts.map +1 -1
  299. package/dist/core/provider-attribution.d.ts.map +1 -1
  300. package/dist/core/provider-context-usage.d.ts.map +1 -1
  301. package/dist/core/provider-context-usage.js +1 -2
  302. package/dist/core/provider-context-usage.js.map +1 -1
  303. package/dist/core/provider-display-names.d.ts.map +1 -1
  304. package/dist/core/resolve-config-value.d.ts.map +1 -1
  305. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  306. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  307. package/dist/core/resource-loader-core.d.ts.map +1 -1
  308. package/dist/core/resource-loader-discovery.d.ts.map +1 -1
  309. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  310. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  311. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  312. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  313. package/dist/core/resource-loader-paths.d.ts.map +1 -1
  314. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  315. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  316. package/dist/core/resource-loader-types.d.ts.map +1 -1
  317. package/dist/core/resource-loader.d.ts.map +1 -1
  318. package/dist/core/sdk-exports.d.ts.map +1 -1
  319. package/dist/core/sdk-types.d.ts.map +1 -1
  320. package/dist/core/sdk.d.ts.map +1 -1
  321. package/dist/core/session-cwd.d.ts.map +1 -1
  322. package/dist/core/session-entry-normalization.d.ts.map +1 -1
  323. package/dist/core/session-manager-archive.d.ts +2 -1
  324. package/dist/core/session-manager-archive.d.ts.map +1 -1
  325. package/dist/core/session-manager-archive.js +2 -2
  326. package/dist/core/session-manager-archive.js.map +1 -1
  327. package/dist/core/session-manager-classification.d.ts +9 -0
  328. package/dist/core/session-manager-classification.d.ts.map +1 -0
  329. package/dist/core/session-manager-classification.js +37 -0
  330. package/dist/core/session-manager-classification.js.map +1 -0
  331. package/dist/core/session-manager-core.d.ts +4 -4
  332. package/dist/core/session-manager-core.d.ts.map +1 -1
  333. package/dist/core/session-manager-core.js +13 -8
  334. package/dist/core/session-manager-core.js.map +1 -1
  335. package/dist/core/session-manager-entries.d.ts +4 -3
  336. package/dist/core/session-manager-entries.d.ts.map +1 -1
  337. package/dist/core/session-manager-entries.js +12 -10
  338. package/dist/core/session-manager-entries.js.map +1 -1
  339. package/dist/core/session-manager-history.d.ts +6 -23
  340. package/dist/core/session-manager-history.d.ts.map +1 -1
  341. package/dist/core/session-manager-history.js +23 -256
  342. package/dist/core/session-manager-history.js.map +1 -1
  343. package/dist/core/session-manager-list.d.ts.map +1 -1
  344. package/dist/core/session-manager-list.js +3 -3
  345. package/dist/core/session-manager-list.js.map +1 -1
  346. package/dist/core/session-manager-migrations.d.ts.map +1 -1
  347. package/dist/core/session-manager-paths.d.ts.map +1 -1
  348. package/dist/core/session-manager-storage.d.ts +1 -1
  349. package/dist/core/session-manager-storage.d.ts.map +1 -1
  350. package/dist/core/session-manager-storage.js +3 -2
  351. package/dist/core/session-manager-storage.js.map +1 -1
  352. package/dist/core/session-manager-types.d.ts +14 -15
  353. package/dist/core/session-manager-types.d.ts.map +1 -1
  354. package/dist/core/session-manager-types.js.map +1 -1
  355. package/dist/core/session-manager-validation.d.ts.map +1 -1
  356. package/dist/core/session-manager.d.ts +3 -2
  357. package/dist/core/session-manager.d.ts.map +1 -1
  358. package/dist/core/session-manager.js +1 -1
  359. package/dist/core/session-manager.js.map +1 -1
  360. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  361. package/dist/core/settings-manager-core.d.ts.map +1 -1
  362. package/dist/core/settings-manager-internals.d.ts.map +1 -1
  363. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  364. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  365. package/dist/core/settings-manager.d.ts.map +1 -1
  366. package/dist/core/settings-merge.d.ts.map +1 -1
  367. package/dist/core/settings-storage.d.ts.map +1 -1
  368. package/dist/core/settings-types.d.ts.map +1 -1
  369. package/dist/core/skills-async.d.ts.map +1 -1
  370. package/dist/core/skills.d.ts.map +1 -1
  371. package/dist/core/slash-commands.d.ts.map +1 -1
  372. package/dist/core/slash-commands.js +1 -1
  373. package/dist/core/slash-commands.js.map +1 -1
  374. package/dist/core/source-info.d.ts.map +1 -1
  375. package/dist/core/system-prompt.d.ts.map +1 -1
  376. package/dist/core/telemetry.d.ts.map +1 -1
  377. package/dist/core/thinking-blocks.d.ts.map +1 -1
  378. package/dist/core/timings.d.ts.map +1 -1
  379. package/dist/core/tools/artifact-protocol.d.ts.map +1 -1
  380. package/dist/core/tools/artifacts.d.ts.map +1 -1
  381. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  382. package/dist/core/tools/ask-user-question/config.d.ts.map +1 -1
  383. package/dist/core/tools/ask-user-question/index.d.ts.map +1 -1
  384. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts.map +1 -1
  385. package/dist/core/tools/ask-user-question/state/inline-input.d.ts.map +1 -1
  386. package/dist/core/tools/ask-user-question/state/key-router.d.ts.map +1 -1
  387. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  388. package/dist/core/tools/ask-user-question/state/row-intent.d.ts.map +1 -1
  389. package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts.map +1 -1
  390. package/dist/core/tools/ask-user-question/state/selectors/derivations.d.ts.map +1 -1
  391. package/dist/core/tools/ask-user-question/state/selectors/focus.d.ts.map +1 -1
  392. package/dist/core/tools/ask-user-question/state/selectors/projections.d.ts.map +1 -1
  393. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
  394. package/dist/core/tools/ask-user-question/state/state.d.ts.map +1 -1
  395. package/dist/core/tools/ask-user-question/tool/format-answer.d.ts.map +1 -1
  396. package/dist/core/tools/ask-user-question/tool/response-envelope.d.ts.map +1 -1
  397. package/dist/core/tools/ask-user-question/tool/types.d.ts.map +1 -1
  398. package/dist/core/tools/ask-user-question/tool/validate-questionnaire.d.ts.map +1 -1
  399. package/dist/core/tools/ask-user-question/view/body-residual-spacer.d.ts.map +1 -1
  400. package/dist/core/tools/ask-user-question/view/component-binding.d.ts.map +1 -1
  401. package/dist/core/tools/ask-user-question/view/components/chat-row-view.d.ts.map +1 -1
  402. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
  403. package/dist/core/tools/ask-user-question/view/components/option-list-view.d.ts.map +1 -1
  404. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts.map +1 -1
  405. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts.map +1 -1
  406. package/dist/core/tools/ask-user-question/view/components/preview/preview-box-renderer.d.ts.map +1 -1
  407. package/dist/core/tools/ask-user-question/view/components/preview/preview-layout-decider.d.ts.map +1 -1
  408. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.d.ts.map +1 -1
  409. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
  410. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts.map +1 -1
  411. package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
  412. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts.map +1 -1
  413. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
  414. package/dist/core/tools/ask-user-question/view/stateful-view.d.ts.map +1 -1
  415. package/dist/core/tools/ask-user-question/view/tab-components.d.ts.map +1 -1
  416. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts.map +1 -1
  417. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  418. package/dist/core/tools/bash-async-jobs.d.ts.map +1 -1
  419. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  420. package/dist/core/tools/bash-interceptor.d.ts.map +1 -1
  421. package/dist/core/tools/bash-leading-cd.d.ts.map +1 -1
  422. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  423. package/dist/core/tools/bash.d.ts.map +1 -1
  424. package/dist/core/tools/block-resolver.d.ts.map +1 -1
  425. package/dist/core/tools/conflict-registry.d.ts.map +1 -1
  426. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  427. package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -1
  428. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  429. package/dist/core/tools/edit.d.ts.map +1 -1
  430. package/dist/core/tools/fetch-url.d.ts.map +1 -1
  431. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  432. package/dist/core/tools/find.d.ts.map +1 -1
  433. package/dist/core/tools/glob-path-utils.d.ts.map +1 -1
  434. package/dist/core/tools/grep.d.ts.map +1 -1
  435. package/dist/core/tools/hashline-engine/apply.d.ts.map +1 -1
  436. package/dist/core/tools/hashline-engine/block.d.ts.map +1 -1
  437. package/dist/core/tools/hashline-engine/diff-preview.d.ts.map +1 -1
  438. package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
  439. package/dist/core/tools/hashline-engine/fs.d.ts.map +1 -1
  440. package/dist/core/tools/hashline-engine/index.d.ts.map +1 -1
  441. package/dist/core/tools/hashline-engine/input.d.ts.map +1 -1
  442. package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
  443. package/dist/core/tools/hashline-engine/mismatch.d.ts.map +1 -1
  444. package/dist/core/tools/hashline-engine/normalize.d.ts.map +1 -1
  445. package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
  446. package/dist/core/tools/hashline-engine/patcher.d.ts.map +1 -1
  447. package/dist/core/tools/hashline-engine/prefixes.d.ts.map +1 -1
  448. package/dist/core/tools/hashline-engine/recovery.d.ts.map +1 -1
  449. package/dist/core/tools/hashline-engine/snapshots.d.ts.map +1 -1
  450. package/dist/core/tools/hashline-engine/stream.d.ts.map +1 -1
  451. package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
  452. package/dist/core/tools/hashline-engine/types.d.ts.map +1 -1
  453. package/dist/core/tools/hashline.d.ts.map +1 -1
  454. package/dist/core/tools/index.d.ts.map +1 -1
  455. package/dist/core/tools/ls.d.ts.map +1 -1
  456. package/dist/core/tools/notebook.d.ts.map +1 -1
  457. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  458. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
  459. package/dist/core/tools/path-utils.d.ts.map +1 -1
  460. package/dist/core/tools/read-document-extract.d.ts.map +1 -1
  461. package/dist/core/tools/read-selectors.d.ts.map +1 -1
  462. package/dist/core/tools/read-url.d.ts.map +1 -1
  463. package/dist/core/tools/read.d.ts.map +1 -1
  464. package/dist/core/tools/render-utils.d.ts.map +1 -1
  465. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  466. package/dist/core/tools/search-details.d.ts.map +1 -1
  467. package/dist/core/tools/search-line-ranges.d.ts.map +1 -1
  468. package/dist/core/tools/search-native.d.ts.map +1 -1
  469. package/dist/core/tools/search.d.ts.map +1 -1
  470. package/dist/core/tools/structured-output.d.ts.map +1 -1
  471. package/dist/core/tools/todos-execute.d.ts.map +1 -1
  472. package/dist/core/tools/todos-locks.d.ts.map +1 -1
  473. package/dist/core/tools/todos-model.d.ts.map +1 -1
  474. package/dist/core/tools/todos-mutations.d.ts.map +1 -1
  475. package/dist/core/tools/todos-paths.d.ts.map +1 -1
  476. package/dist/core/tools/todos-render.d.ts.map +1 -1
  477. package/dist/core/tools/todos-storage.d.ts.map +1 -1
  478. package/dist/core/tools/todos-types.d.ts.map +1 -1
  479. package/dist/core/tools/todos-types.js +1 -1
  480. package/dist/core/tools/todos-types.js.map +1 -1
  481. package/dist/core/tools/todos.d.ts.map +1 -1
  482. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  483. package/dist/core/tools/tool-definition-wrapper.js +6 -2
  484. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  485. package/dist/core/tools/tool-limits.d.ts.map +1 -1
  486. package/dist/core/tools/truncate.d.ts.map +1 -1
  487. package/dist/core/tools/url-ip-guards.d.ts.map +1 -1
  488. package/dist/core/tools/write.d.ts.map +1 -1
  489. package/dist/core/trust-manager.d.ts.map +1 -1
  490. package/dist/core/typebox-compat.d.ts +12 -0
  491. package/dist/core/typebox-compat.d.ts.map +1 -0
  492. package/dist/core/typebox-compat.js +10 -0
  493. package/dist/core/typebox-compat.js.map +1 -0
  494. package/dist/index-extensions.d.ts.map +1 -1
  495. package/dist/index.d.ts +4 -2
  496. package/dist/index.d.ts.map +1 -1
  497. package/dist/index.js +3 -1
  498. package/dist/index.js.map +1 -1
  499. package/dist/main-app-mode.d.ts.map +1 -1
  500. package/dist/main-deferred-startup.d.ts.map +1 -1
  501. package/dist/main-early-input.d.ts.map +1 -1
  502. package/dist/main-session-options.d.ts.map +1 -1
  503. package/dist/main-session.d.ts +1 -0
  504. package/dist/main-session.d.ts.map +1 -1
  505. package/dist/main-session.js +7 -0
  506. package/dist/main-session.js.map +1 -1
  507. package/dist/main-stdio.d.ts.map +1 -1
  508. package/dist/main.d.ts.map +1 -1
  509. package/dist/main.js +2 -2
  510. package/dist/main.js.map +1 -1
  511. package/dist/migrations-config-values.d.ts.map +1 -1
  512. package/dist/migrations.d.ts.map +1 -1
  513. package/dist/modes/index.d.ts.map +1 -1
  514. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  516. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  517. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  519. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  520. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/chat-message-renderer.d.ts +4 -1
  522. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  523. package/dist/modes/interactive/components/chat-message-renderer.js +12 -22
  524. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  525. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  526. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -1
  527. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/chat-session-host-events.js +5 -11
  529. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  530. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  531. package/dist/modes/interactive/components/chat-session-host-rendering.js +3 -0
  532. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  533. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  534. package/dist/modes/interactive/components/chat-session-host-state.d.ts +1 -0
  535. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
  537. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  538. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts.map +1 -1
  539. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  540. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  541. package/dist/modes/interactive/components/chat-session-host-utils.js +1 -1
  542. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  543. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  544. package/dist/modes/interactive/components/chat-session-host.js +1 -0
  545. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  546. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  547. package/dist/modes/interactive/components/compaction-boundary-message.d.ts +20 -0
  548. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -0
  549. package/dist/modes/interactive/components/compaction-boundary-message.js +48 -0
  550. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -0
  551. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  552. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  553. package/dist/modes/interactive/components/context-window-selector.d.ts.map +1 -1
  554. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  555. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  556. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  557. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  558. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  559. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  560. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  561. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  562. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  563. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  564. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +1 -1
  565. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/index.d.ts +1 -1
  567. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  568. package/dist/modes/interactive/components/index.js +1 -1
  569. package/dist/modes/interactive/components/index.js.map +1 -1
  570. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  571. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  572. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  574. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  575. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -1
  576. package/dist/modes/interactive/components/session-selector-header.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  578. package/dist/modes/interactive/components/session-selector-list.js +3 -0
  579. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  580. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  581. package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -1
  582. package/dist/modes/interactive/components/session-selector-types.d.ts.map +1 -1
  583. package/dist/modes/interactive/components/session-selector-utils.d.ts.map +1 -1
  584. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  585. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  586. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  587. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  589. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  590. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  594. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  596. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
  598. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -1
  599. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -1
  602. package/dist/modes/interactive/components/tree-selector-types.d.ts.map +1 -1
  603. package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  606. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  607. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  608. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/working-status.d.ts.map +1 -1
  610. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  611. package/dist/modes/interactive/interactive-agent-events.js +3 -47
  612. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  613. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
  614. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  615. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  616. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  617. package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -1
  618. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  619. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  620. package/dist/modes/interactive/interactive-extension-context.d.ts.map +1 -1
  621. package/dist/modes/interactive/interactive-extension-custom-ui.d.ts.map +1 -1
  622. package/dist/modes/interactive/interactive-extension-dialogs.d.ts.map +1 -1
  623. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  624. package/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  625. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
  626. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  627. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  628. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
  629. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  630. package/dist/modes/interactive/interactive-mode-deps.js +1 -1
  631. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  632. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  633. package/dist/modes/interactive/interactive-mode-surface.d.ts +5 -3
  634. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  635. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  636. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  637. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  638. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  639. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  640. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  641. package/dist/modes/interactive/interactive-queueing.d.ts.map +1 -1
  642. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  643. package/dist/modes/interactive/interactive-render-chat.js +21 -12
  644. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  645. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  646. package/dist/modes/interactive/interactive-resource-paths.d.ts.map +1 -1
  647. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  648. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  649. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
  650. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  651. package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -1
  652. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  653. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  654. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  655. package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -1
  656. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  657. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  658. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  659. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  660. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  661. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -1
  662. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  663. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  664. package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -1
  665. package/dist/modes/interactive/whimsical-messages.d.ts.map +1 -1
  666. package/dist/modes/print-mode.d.ts.map +1 -1
  667. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  668. package/dist/modes/rpc/rpc-client.d.ts +3 -5
  669. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  670. package/dist/modes/rpc/rpc-client.js +1 -6
  671. package/dist/modes/rpc/rpc-client.js.map +1 -1
  672. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  673. package/dist/modes/rpc/rpc-command-handler.js +0 -4
  674. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  675. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  676. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  677. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  678. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  679. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  680. package/dist/modes/rpc/rpc-types.d.ts +2 -11
  681. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  682. package/dist/modes/rpc/rpc-types.js.map +1 -1
  683. package/dist/package-manager-cli-parser.d.ts.map +1 -1
  684. package/dist/package-manager-cli.d.ts.map +1 -1
  685. package/dist/rpc-entry.d.ts.map +1 -1
  686. package/dist/utils/ansi.d.ts.map +1 -1
  687. package/dist/utils/changelog.d.ts.map +1 -1
  688. package/dist/utils/child-process.d.ts.map +1 -1
  689. package/dist/utils/clipboard-image.d.ts.map +1 -1
  690. package/dist/utils/clipboard-native.d.ts.map +1 -1
  691. package/dist/utils/clipboard.d.ts.map +1 -1
  692. package/dist/utils/deprecation.d.ts.map +1 -1
  693. package/dist/utils/event-loop.d.ts.map +1 -1
  694. package/dist/utils/exif-orientation.d.ts.map +1 -1
  695. package/dist/utils/frontmatter.d.ts.map +1 -1
  696. package/dist/utils/fs-watch.d.ts.map +1 -1
  697. package/dist/utils/git-env.d.ts.map +1 -1
  698. package/dist/utils/git.d.ts.map +1 -1
  699. package/dist/utils/html.d.ts.map +1 -1
  700. package/dist/utils/image-convert.d.ts.map +1 -1
  701. package/dist/utils/image-process.d.ts.map +1 -1
  702. package/dist/utils/image-resize-core.d.ts.map +1 -1
  703. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  704. package/dist/utils/image-resize.d.ts.map +1 -1
  705. package/dist/utils/json.d.ts.map +1 -1
  706. package/dist/utils/markit.d.ts.map +1 -1
  707. package/dist/utils/mime.d.ts.map +1 -1
  708. package/dist/utils/module-require.d.ts.map +1 -1
  709. package/dist/utils/open-browser.d.ts.map +1 -1
  710. package/dist/utils/paths.d.ts.map +1 -1
  711. package/dist/utils/photon.d.ts.map +1 -1
  712. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  713. package/dist/utils/shell.d.ts.map +1 -1
  714. package/dist/utils/sleep.d.ts.map +1 -1
  715. package/dist/utils/split-launcher.d.ts.map +1 -1
  716. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  717. package/dist/utils/tools-manager.d.ts.map +1 -1
  718. package/dist/utils/version-check.d.ts.map +1 -1
  719. package/dist/utils/windows-self-update.d.ts.map +1 -1
  720. package/docs/compaction.md +97 -772
  721. package/docs/custom-provider.md +7 -1
  722. package/docs/extensions.md +31 -33
  723. package/docs/json.md +2 -2
  724. package/docs/rpc.md +32 -24
  725. package/docs/sdk.md +3 -3
  726. package/docs/session-format.md +49 -30
  727. package/docs/sessions.md +5 -3
  728. package/docs/settings.md +14 -4
  729. package/docs/usage.md +1 -1
  730. package/docs/workflows.md +30 -15
  731. package/examples/extensions/README.md +3 -1
  732. package/examples/extensions/custom-compaction.ts +14 -58
  733. package/examples/extensions/handoff.ts +2 -3
  734. package/examples/extensions/subagent/schemas.ts +1 -1
  735. package/examples/extensions/tic-tac-toe.ts +1 -2
  736. package/examples/extensions/todo.ts +1 -2
  737. package/npm-shrinkwrap.json +214 -98
  738. package/package.json +12 -12
  739. package/dist/core/compaction/context-assistant-turns.d.ts +0 -42
  740. package/dist/core/compaction/context-assistant-turns.d.ts.map +0 -1
  741. package/dist/core/compaction/context-assistant-turns.js +0 -87
  742. package/dist/core/compaction/context-assistant-turns.js.map +0 -1
  743. package/dist/core/compaction/context-compaction-critical.d.ts +0 -15
  744. package/dist/core/compaction/context-compaction-critical.d.ts.map +0 -1
  745. package/dist/core/compaction/context-compaction-critical.js +0 -57
  746. package/dist/core/compaction/context-compaction-critical.js.map +0 -1
  747. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +0 -18
  748. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +0 -1
  749. package/dist/core/compaction/context-compaction-eviction-alternates.js +0 -186
  750. package/dist/core/compaction/context-compaction-eviction-alternates.js.map +0 -1
  751. package/dist/core/compaction/context-compaction-eviction.d.ts +0 -12
  752. package/dist/core/compaction/context-compaction-eviction.d.ts.map +0 -1
  753. package/dist/core/compaction/context-compaction-eviction.js +0 -222
  754. package/dist/core/compaction/context-compaction-eviction.js.map +0 -1
  755. package/dist/core/compaction/context-compaction-metrics.d.ts +0 -28
  756. package/dist/core/compaction/context-compaction-metrics.d.ts.map +0 -1
  757. package/dist/core/compaction/context-compaction-metrics.js +0 -107
  758. package/dist/core/compaction/context-compaction-metrics.js.map +0 -1
  759. package/dist/core/compaction/context-compaction-prompt.d.ts +0 -9
  760. package/dist/core/compaction/context-compaction-prompt.d.ts.map +0 -1
  761. package/dist/core/compaction/context-compaction-prompt.js +0 -163
  762. package/dist/core/compaction/context-compaction-prompt.js.map +0 -1
  763. package/dist/core/compaction/context-compaction-runner.d.ts +0 -11
  764. package/dist/core/compaction/context-compaction-runner.d.ts.map +0 -1
  765. package/dist/core/compaction/context-compaction-runner.js +0 -273
  766. package/dist/core/compaction/context-compaction-runner.js.map +0 -1
  767. package/dist/core/compaction/context-compaction-strategy.d.ts +0 -5
  768. package/dist/core/compaction/context-compaction-strategy.d.ts.map +0 -1
  769. package/dist/core/compaction/context-compaction-strategy.js +0 -27
  770. package/dist/core/compaction/context-compaction-strategy.js.map +0 -1
  771. package/dist/core/compaction/context-compaction-types.d.ts +0 -75
  772. package/dist/core/compaction/context-compaction-types.d.ts.map +0 -1
  773. package/dist/core/compaction/context-compaction-types.js +0 -6
  774. package/dist/core/compaction/context-compaction-types.js.map +0 -1
  775. package/dist/core/compaction/context-compaction.d.ts +0 -10
  776. package/dist/core/compaction/context-compaction.d.ts.map +0 -1
  777. package/dist/core/compaction/context-compaction.js +0 -8
  778. package/dist/core/compaction/context-compaction.js.map +0 -1
  779. package/dist/core/compaction/context-deletion-application.d.ts +0 -14
  780. package/dist/core/compaction/context-deletion-application.d.ts.map +0 -1
  781. package/dist/core/compaction/context-deletion-application.js +0 -261
  782. package/dist/core/compaction/context-deletion-application.js.map +0 -1
  783. package/dist/core/compaction/context-deletion-store.d.ts +0 -78
  784. package/dist/core/compaction/context-deletion-store.d.ts.map +0 -1
  785. package/dist/core/compaction/context-deletion-store.js +0 -162
  786. package/dist/core/compaction/context-deletion-store.js.map +0 -1
  787. package/dist/core/compaction/context-deletion-targets.d.ts +0 -43
  788. package/dist/core/compaction/context-deletion-targets.d.ts.map +0 -1
  789. package/dist/core/compaction/context-deletion-targets.js +0 -292
  790. package/dist/core/compaction/context-deletion-targets.js.map +0 -1
  791. package/dist/core/compaction/context-deletion-tool-definitions.d.ts +0 -193
  792. package/dist/core/compaction/context-deletion-tool-definitions.d.ts.map +0 -1
  793. package/dist/core/compaction/context-deletion-tool-definitions.js +0 -98
  794. package/dist/core/compaction/context-deletion-tool-definitions.js.map +0 -1
  795. package/dist/core/compaction/context-deletion-tool-helpers.d.ts +0 -19
  796. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +0 -1
  797. package/dist/core/compaction/context-deletion-tool-helpers.js +0 -210
  798. package/dist/core/compaction/context-deletion-tool-helpers.js.map +0 -1
  799. package/dist/core/compaction/context-deletion-tools.d.ts +0 -4
  800. package/dist/core/compaction/context-deletion-tools.d.ts.map +0 -1
  801. package/dist/core/compaction/context-deletion-tools.js +0 -403
  802. package/dist/core/compaction/context-deletion-tools.js.map +0 -1
  803. package/dist/core/compaction/context-transcript-analysis.d.ts +0 -11
  804. package/dist/core/compaction/context-transcript-analysis.d.ts.map +0 -1
  805. package/dist/core/compaction/context-transcript-analysis.js +0 -228
  806. package/dist/core/compaction/context-transcript-analysis.js.map +0 -1
  807. package/dist/core/session-manager-tool-dependencies.d.ts +0 -10
  808. package/dist/core/session-manager-tool-dependencies.d.ts.map +0 -1
  809. package/dist/core/session-manager-tool-dependencies.js +0 -133
  810. package/dist/core/session-manager-tool-dependencies.js.map +0 -1
  811. package/dist/modes/interactive/components/context-compaction-summary-message.d.ts +0 -17
  812. package/dist/modes/interactive/components/context-compaction-summary-message.d.ts.map +0 -1
  813. package/dist/modes/interactive/components/context-compaction-summary-message.js +0 -83
  814. package/dist/modes/interactive/components/context-compaction-summary-message.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver-scope.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver-scope.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAoBD;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CA0ClC;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAMhH","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { modelsAreEqual } from \"@earendil-works/pi-ai/compat\";\nimport chalk from \"chalk\";\nimport { minimatch } from \"minimatch\";\nimport { isValidThinkingLevel } from \"../cli/args.ts\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport { parseModelPattern } from \"./model-resolver-patterns.ts\";\nimport type { ScopedModel } from \"./model-resolver-types.ts\";\n\nexport interface ModelScopeDiagnostic {\n type: \"warning\";\n message: string;\n}\n\nexport interface ResolveModelScopeResult {\n scopedModels: ScopedModel[];\n diagnostics: ModelScopeDiagnostic[];\n}\n\nfunction hasGlobCharacters(pattern: string): boolean {\n return pattern.includes(\"*\") || pattern.includes(\"?\") || pattern.includes(\"[\");\n}\n\nfunction parseGlobThinkingLevel(pattern: string): { globPattern: string; thinkingLevel?: ThinkingLevel } {\n const colonIdx = pattern.lastIndexOf(\":\");\n if (colonIdx === -1) {\n return { globPattern: pattern };\n }\n\n const suffix = pattern.substring(colonIdx + 1);\n if (!isValidThinkingLevel(suffix)) {\n return { globPattern: pattern };\n }\n\n return { globPattern: pattern.substring(0, colonIdx), thinkingLevel: suffix };\n}\n\n/**\n * Resolve model patterns to actual Model objects with optional thinking levels\n * Format: \"pattern:level\" where :level is optional\n * For each pattern, finds all matching models and picks the best version:\n * 1. Prefer alias (e.g., claude-sonnet-4-5) over dated versions (claude-sonnet-4-5-20250929)\n * 2. If no alias, pick the latest dated version\n *\n * Supports models with colons in their IDs (e.g., OpenRouter's model:exacto).\n * The algorithm tries to match the full pattern first, then progressively\n * strips colon-suffixes to find a match.\n */\nexport async function resolveModelScopeWithDiagnostics(\n patterns: string[],\n modelRegistry: ModelRegistry,\n): Promise<ResolveModelScopeResult> {\n const availableModels = await modelRegistry.getAvailable();\n const scopedModels: ScopedModel[] = [];\n const diagnostics: ModelScopeDiagnostic[] = [];\n for (const pattern of patterns) {\n if (hasGlobCharacters(pattern)) {\n const { globPattern, thinkingLevel } = parseGlobThinkingLevel(pattern);\n const matchingModels = availableModels.filter((m) => {\n const fullId = `${m.provider}/${m.id}`;\n return minimatch(fullId, globPattern, { nocase: true }) || minimatch(m.id, globPattern, { nocase: true });\n });\n\n if (matchingModels.length === 0) {\n diagnostics.push({ type: \"warning\", message: `No models match pattern \"${pattern}\"` });\n continue;\n }\n\n for (const model of matchingModels) {\n if (!scopedModels.find((sm) => modelsAreEqual(sm.model, model))) {\n scopedModels.push({ model, thinkingLevel });\n }\n }\n continue;\n }\n\n const { model, thinkingLevel, warning } = parseModelPattern(pattern, availableModels);\n\n if (warning) {\n diagnostics.push({ type: \"warning\", message: warning });\n }\n\n if (!model) {\n diagnostics.push({ type: \"warning\", message: `No models match pattern \"${pattern}\"` });\n continue;\n }\n\n if (!scopedModels.find((sm) => modelsAreEqual(sm.model, model))) {\n scopedModels.push({ model, thinkingLevel });\n }\n }\n\n return { scopedModels, diagnostics };\n}\n\nexport async function resolveModelScope(patterns: string[], modelRegistry: ModelRegistry): Promise<ScopedModel[]> {\n const { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(patterns, modelRegistry);\n for (const diagnostic of diagnostics) {\n console.warn(chalk.yellow(`Warning: ${diagnostic.message}`));\n }\n return scopedModels;\n}\n"]}
1
+ {"version":3,"file":"model-resolver-scope.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver-scope.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAoBD;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CA0ClC;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAMhH"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver-types.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,kGAAkG;IAClG,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\nexport interface ScopedModel {\n model: Model<Api>;\n /** Thinking level if explicitly specified in pattern (e.g., \"model:high\"), undefined otherwise */\n thinkingLevel?: ThinkingLevel;\n}\n\nexport interface ParsedModelResult {\n model: Model<Api> | undefined;\n /** Thinking level if explicitly specified in pattern, undefined otherwise */\n thinkingLevel?: ThinkingLevel;\n warning: string | undefined;\n}\n\nexport interface ResolveCliModelResult {\n model: Model<Api> | undefined;\n thinkingLevel?: ThinkingLevel;\n warning: string | undefined;\n /**\n * Error message suitable for CLI display.\n * When set, model will be undefined.\n */\n error: string | undefined;\n}\n\nexport interface InitialModelResult {\n model: Model<Api> | undefined;\n thinkingLevel: ThinkingLevel;\n fallbackMessage: string | undefined;\n}\n"]}
1
+ {"version":3,"file":"model-resolver-types.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,kGAAkG;IAClG,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACvH,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAChG,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["/**\n * Model resolution, scoping, and initial selection\n */\n\nexport { defaultModelPerProvider } from \"./model-resolver-defaults.ts\";\nexport { resolveCliModel } from \"./model-resolver-cli.ts\";\nexport { findInitialModel, resolveRestoredModelReference, restoreModelFromSession } from \"./model-resolver-initial.ts\";\nexport { findExactModelReferenceMatch, parseModelPattern } from \"./model-resolver-patterns.ts\";\nexport { resolveModelScope, resolveModelScopeWithDiagnostics } from \"./model-resolver-scope.ts\";\nexport type { ModelScopeDiagnostic, ResolveModelScopeResult } from \"./model-resolver-scope.ts\";\nexport type { InitialModelResult, ParsedModelResult, ResolveCliModelResult, ScopedModel } from \"./model-resolver-types.ts\";\n"]}
1
+ {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACvH,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAChG,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses-payload-sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAQ/D,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAMlD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAExE;AAUD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUpF;AAeD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CA+BxG","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;\n\nconst RESPONSES_FUNCTION_CALL_ID = /^fc_[A-Za-z0-9_-]{1,61}$/;\nconst RESPONSES_FUNCTION_CALL_ID_PREFIX = \"fc_\";\nconst MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 64;\nexport const MIN_RESPONSES_MAX_OUTPUT_TOKENS = 16;\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isOpenAIResponsesModel(model: Pick<Model<Api>, \"api\">): boolean {\n return model.api === \"openai-responses\";\n}\n\nexport function isValidResponsesFunctionCallId(id: unknown): id is string {\n return typeof id === \"string\" && RESPONSES_FUNCTION_CALL_ID.test(id);\n}\n\nfunction sha256Base64Url(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"base64url\");\n}\n\nfunction sanitizedCallIdFragment(callId: string): string {\n return callId.replace(/[^A-Za-z0-9_-]/g, \"_\").replace(/^_+|_+$/g, \"\");\n}\n\nexport function responsesFunctionCallIdForCallId(callId: unknown): string | undefined {\n if (typeof callId !== \"string\" || callId.length === 0) return undefined;\n const direct = `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${callId}`;\n if (isValidResponsesFunctionCallId(direct)) return direct;\n\n const sanitized = sanitizedCallIdFragment(callId);\n const hash = sha256Base64Url(callId).slice(0, 16);\n const suffixBudget = MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length;\n const suffix = sanitized.length > 0 ? `${sanitized.slice(0, suffixBudget - hash.length - 1)}_${hash}` : hash;\n return `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${suffix}`;\n}\n\nfunction sanitizeResponsesFunctionCall(item: JsonObject): boolean {\n if (item.type !== \"function_call\") return false;\n if (isValidResponsesFunctionCallId(item.id)) return false;\n\n const synthesized = responsesFunctionCallIdForCallId(item.call_id);\n if (synthesized) {\n item.id = synthesized;\n } else {\n delete item.id;\n }\n return true;\n}\n\nexport function sanitizeOpenAIResponsesPayload(payload: unknown, model: Pick<Model<Api>, \"api\">): unknown {\n if (!isOpenAIResponsesModel(model) || !isPlainObject(payload)) return payload;\n\n let changed = false;\n let sanitizedPayload: JsonObject = payload;\n\n if (\n typeof payload.max_output_tokens === \"number\" &&\n Number.isFinite(payload.max_output_tokens) &&\n payload.max_output_tokens < MIN_RESPONSES_MAX_OUTPUT_TOKENS\n ) {\n changed = true;\n sanitizedPayload = { ...sanitizedPayload, max_output_tokens: MIN_RESPONSES_MAX_OUTPUT_TOKENS };\n }\n\n if (Array.isArray(payload.input)) {\n let inputChanged = false;\n const input = payload.input.map((item) => {\n if (!isPlainObject(item)) return item;\n const cloned = { ...item };\n inputChanged = sanitizeResponsesFunctionCall(cloned) || inputChanged;\n return cloned;\n });\n\n if (inputChanged) {\n changed = true;\n sanitizedPayload = { ...sanitizedPayload, input };\n }\n }\n\n return changed ? sanitizedPayload : payload;\n}\n"]}
1
+ {"version":3,"file":"openai-responses-payload-sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAQ/D,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAMlD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAExE;AAUD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUpF;AAeD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CA+BxG"}
@@ -1 +1 @@
1
- {"version":3,"file":"output-guard.d.ts","sourceRoot":"","sources":["../../src/core/output-guard.ts"],"names":[],"mappings":"AAkDA,wBAAgB,cAAc,IAAI,IAAI,CAmDrC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAWpC;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAQlE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpD","sourcesContent":["interface StdoutTakeoverState {\n\trawStdoutWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean;\n\trawStderrWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean;\n\toriginalStdoutWrite: typeof process.stdout.write;\n\toriginalConsole: {\n\t\tlog: typeof console.log;\n\t\tinfo: typeof console.info;\n\t\tdebug: typeof console.debug;\n\t\tdir: typeof console.dir;\n\t};\n}\n\nlet stdoutTakeoverState: StdoutTakeoverState | undefined;\n\nconst RAW_STDOUT_RETRY_DELAY_MS = 10;\n\nlet rawStdoutWriteTail: Promise<void> = Promise.resolve();\n\nfunction getRawStdoutWrite(): StdoutTakeoverState[\"rawStdoutWrite\"] {\n\tif (stdoutTakeoverState) {\n\t\treturn stdoutTakeoverState.rawStdoutWrite;\n\t}\n\treturn process.stdout.write.bind(process.stdout) as StdoutTakeoverState[\"rawStdoutWrite\"];\n}\n\nasync function writeRawStdoutChunk(text: string): Promise<void> {\n\twhile (true) {\n\t\ttry {\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\ttry {\n\t\t\t\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\t\t\t\tif (error) reject(error);\n\t\t\t\t\t\telse resolve();\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tconst writeError = error instanceof Error ? error : new Error(String(error));\n\t\t\tconst code = (writeError as Error & { code?: unknown }).code;\n\t\t\tif (code !== \"ENOBUFS\" && code !== \"EAGAIN\" && code !== \"EWOULDBLOCK\") {\n\t\t\t\tthrow writeError;\n\t\t\t}\n\t\t\tawait new Promise<void>((resolve) => setTimeout(resolve, RAW_STDOUT_RETRY_DELAY_MS));\n\t\t}\n\t}\n}\n\nexport function takeOverStdout(): void {\n\tif (stdoutTakeoverState) {\n\t\treturn;\n\t}\n\n\tconst rawStdoutWrite = process.stdout.write.bind(process.stdout) as StdoutTakeoverState[\"rawStdoutWrite\"];\n\tconst rawStderrWrite = process.stderr.write.bind(process.stderr) as StdoutTakeoverState[\"rawStderrWrite\"];\n\tconst originalStdoutWrite = process.stdout.write;\n\n\tprocess.stdout.write = ((\n\t\tchunk: string | Uint8Array,\n\t\tencodingOrCallback?: BufferEncoding | ((error?: Error | null) => void),\n\t\tcallback?: (error?: Error | null) => void,\n\t): boolean => {\n\t\tif (typeof encodingOrCallback === \"function\") {\n\t\t\treturn rawStderrWrite(String(chunk), encodingOrCallback);\n\t\t}\n\t\treturn rawStderrWrite(String(chunk), callback);\n\t}) as typeof process.stdout.write;\n\n\t// Some runtimes (notably Bun) implement console.log/info/debug/dir natively and\n\t// write directly to the stdout file descriptor, bypassing the patched\n\t// process.stdout.write above. Redirect the stdout-bound console methods to\n\t// stderr (via console.error, which formats identically) so non-interactive\n\t// modes keep real stdout clean for machine-readable output across runtimes.\n\tconst originalConsole = {\n\t\tlog: console.log.bind(console),\n\t\tinfo: console.info.bind(console),\n\t\tdebug: console.debug.bind(console),\n\t\tdir: console.dir.bind(console),\n\t};\n\tconst errorConsole = console.error.bind(console);\n\tconsole.log = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.log;\n\tconsole.info = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.info;\n\tconsole.debug = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.debug;\n\tconsole.dir = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.dir;\n\n\tstdoutTakeoverState = {\n\t\trawStdoutWrite,\n\t\trawStderrWrite,\n\t\toriginalStdoutWrite,\n\t\toriginalConsole,\n\t};\n}\n\nexport function restoreStdout(): void {\n\tif (!stdoutTakeoverState) {\n\t\treturn;\n\t}\n\n\tprocess.stdout.write = stdoutTakeoverState.originalStdoutWrite;\n\tconsole.log = stdoutTakeoverState.originalConsole.log;\n\tconsole.info = stdoutTakeoverState.originalConsole.info;\n\tconsole.debug = stdoutTakeoverState.originalConsole.debug;\n\tconsole.dir = stdoutTakeoverState.originalConsole.dir;\n\tstdoutTakeoverState = undefined;\n}\n\nexport function isStdoutTakenOver(): boolean {\n\treturn stdoutTakeoverState !== undefined;\n}\n\nexport function writeRawStdout(text: string): void {\n\tif (text.length === 0) {\n\t\treturn;\n\t}\n\trawStdoutWriteTail = rawStdoutWriteTail.then(() => writeRawStdoutChunk(text));\n\tvoid rawStdoutWriteTail.catch(() => {\n\t\tprocess.exit(1);\n\t});\n}\n\nexport async function waitForRawStdoutBackpressure(): Promise<void> {\n\twhile (true) {\n\t\tconst tail = rawStdoutWriteTail;\n\t\tawait tail;\n\t\tif (tail === rawStdoutWriteTail) {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nexport async function flushRawStdout(): Promise<void> {\n\tawait waitForRawStdoutBackpressure();\n\tawait writeRawStdoutChunk(\"\");\n}\n"]}
1
+ {"version":3,"file":"output-guard.d.ts","sourceRoot":"","sources":["../../src/core/output-guard.ts"],"names":[],"mappings":"AAkDA,wBAAgB,cAAc,IAAI,IAAI,CAmDrC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAWpC;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAQlE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-auto-resources.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAgB,MAAM,4BAA4B,CAAC;AACxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAsB,4BAA4B,CACjD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAChE,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAClE,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAoDf","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.ts\";\nimport { getBaseDirsForScope, getHomeDir } from \"./package-manager-paths.ts\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport {\n\tcollectAncestorAgentsSkillDirs,\n\tcollectAutoExtensionEntries,\n\tcollectAutoPromptEntries,\n\tcollectAutoSkillEntries,\n\tcollectAutoThemeEntries,\n\tcollectResourceFiles,\n} from \"./package-manager-resource-files.ts\";\nimport { applyPatterns, isEnabledByOverrides } from \"./package-manager-resource-patterns.ts\";\nimport type { PackageFilter, PackageManagerContext, PathMetadata, ResourceAccumulator, ResourceType } from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport async function collectProjectLocalResources(\n\tsourceRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): Promise<boolean> {\n\tlet found = false;\n\tconst projectMetadata: PathMetadata = { ...metadata, origin: \"top-level\", borrowedProjectLocal: true };\n\tconst addResources = (resourceType: ResourceType, paths: string[], resourceMetadata: PathMetadata, patterns: string[] | undefined): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst enabledPaths = patterns === undefined\n\t\t\t? new Set(paths)\n\t\t\t: patterns.length === 0\n\t\t\t\t? new Set<string>()\n\t\t\t\t: applyPatterns(paths, patterns, sourceRoot);\n\t\tfor (const path of paths) addResource(target, path, resourceMetadata, enabledPaths.has(path));\n\t};\n\tfor (const configDir of getProjectConfigDirs(sourceRoot)) {\n\t\tconst configMetadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), configMetadata, filter?.extensions);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), configMetadata, filter?.skills);\n\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), configMetadata, filter?.prompts);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), configMetadata, filter?.workflows);\n\t}\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\"skills\", await collectAutoSkillEntries(agentsSkillsDir, \"agents\"), { ...projectMetadata, baseDir: dirname(agentsSkillsDir) }, filter?.skills);\n\treturn found;\n}\n\nexport async function addAutoDiscoveredResources(\n\tcontext: PackageManagerContext,\n\taccumulator: ResourceAccumulator,\n\tglobalSettings: ReturnType<SettingsManager[\"getGlobalSettings\"]>,\n\tprojectSettings: ReturnType<SettingsManager[\"getProjectSettings\"]>,\n\tglobalBaseDir: string,\n\tprojectBaseDir: string,\n): Promise<void> {\n\tconst userMetadata: PathMetadata = { source: \"auto\", scope: \"user\", origin: \"top-level\", baseDir: globalBaseDir };\n\tconst projectMetadata: PathMetadata = { source: \"auto\", scope: \"project\", origin: \"top-level\", baseDir: projectBaseDir };\n\tconst userOverrides = {\n\t\textensions: (globalSettings.extensions ?? []) as string[],\n\t\tskills: (globalSettings.skills ?? []) as string[],\n\t\tprompts: (globalSettings.prompts ?? []) as string[],\n\t\tthemes: (globalSettings.themes ?? []) as string[],\n\t\tworkflows: (globalSettings.workflows ?? []) as string[],\n\t};\n\tconst projectOverrides = {\n\t\textensions: (projectSettings.extensions ?? []) as string[],\n\t\tskills: (projectSettings.skills ?? []) as string[],\n\t\tprompts: (projectSettings.prompts ?? []) as string[],\n\t\tthemes: (projectSettings.themes ?? []) as string[],\n\t\tworkflows: (projectSettings.workflows ?? []) as string[],\n\t};\n\tconst userConfigDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectConfigDirs = getBaseDirsForScope(context, \"project\");\n\tconst userAgentsSkillsDir = join(getHomeDir(), \".agents\", \"skills\");\n\tconst projectTrusted = context.settingsManager.isProjectTrusted();\n\tconst projectAgentsSkillDirs = projectTrusted\n\t\t? (await collectAncestorAgentsSkillDirs(context.cwd)).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))\n\t\t: [];\n\tconst addResources = (resourceType: ResourceType, paths: string[], metadata: PathMetadata, overrides: string[], baseDir: string): void => {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tfor (const path of paths) addResource(target, path, metadata, isEnabledByOverrides(path, overrides, baseDir));\n\t};\n\tif (projectTrusted) {\n\t\tfor (const configDir of projectConfigDirs) {\n\t\t\tconst metadata: PathMetadata = { ...projectMetadata, baseDir: configDir };\n\t\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, projectOverrides.extensions, configDir);\n\t\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, projectOverrides.skills, configDir);\n\t\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, projectOverrides.prompts, configDir);\n\t\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), metadata, projectOverrides.themes, configDir);\n\t\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, projectOverrides.workflows, configDir);\n\t\t}\n\t}\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(agentsSkillsDir, \"agents\"), { ...projectMetadata, baseDir: agentsBaseDir }, projectOverrides.skills, agentsBaseDir);\n\t}\n\tfor (const configDir of userConfigDirs) {\n\t\tconst metadata: PathMetadata = { ...userMetadata, baseDir: configDir };\n\t\taddResources(\"extensions\", await collectAutoExtensionEntries(join(configDir, \"extensions\")), metadata, userOverrides.extensions, configDir);\n\t\taddResources(\"skills\", await collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"), metadata, userOverrides.skills, configDir);\n\t\taddResources(\"prompts\", await collectAutoPromptEntries(join(configDir, \"prompts\")), metadata, userOverrides.prompts, configDir);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), metadata, userOverrides.themes, configDir);\n\t\taddResources(\"workflows\", await collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"), metadata, userOverrides.workflows, configDir);\n\t}\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\taddResources(\"skills\", await collectAutoSkillEntries(userAgentsSkillsDir, \"agents\"), { ...userMetadata, baseDir: userAgentsBaseDir }, userOverrides.skills, userAgentsBaseDir);\n}\n"]}
1
+ {"version":3,"file":"package-manager-auto-resources.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAgB,MAAM,4BAA4B,CAAC;AACxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAsB,4BAA4B,CACjD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAChE,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,EAClE,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-command.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-command.ts"],"names":[],"mappings":"AA0BA,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1E,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAYtE;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAsBvG","sourcesContent":["import type { ChildProcess, ChildProcessByStdio } from \"node:child_process\";\nimport type { Readable } from \"node:stream\";\nimport { spawnProcess, spawnProcessSync } from \"../utils/child-process.ts\";\nimport { isStdoutTakenOver } from \"./output-guard.ts\";\nimport { getCommandEnv } from \"./package-manager-env.ts\";\n\nfunction spawnCommand(command: string, args: string[], options?: { cwd?: string }): ChildProcess {\n\treturn spawnProcess(command, args, {\n\t\tcwd: options?.cwd,\n\t\tstdio: isStdoutTakenOver() ? [\"ignore\", 2, 2] : \"inherit\",\n\t\tenv: getCommandEnv(command),\n\t});\n}\n\nfunction spawnCaptureCommand(\n\tcommand: string,\n\targs: string[],\n\toptions?: { cwd?: string; env?: Record<string, string> },\n): ChildProcessByStdio<null, Readable, Readable> {\n\treturn spawnProcess(command, args, {\n\t\tcwd: options?.cwd,\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\tenv: getCommandEnv(command, options?.env),\n\t});\n}\n\nexport function runCommandCapture(\n\tcommand: string,\n\targs: string[],\n\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n): Promise<string> {\n\treturn new Promise((resolvePromise, reject) => {\n\t\tconst child = spawnCaptureCommand(command, args, options);\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tlet timedOut = false;\n\t\tconst timeout =\n\t\t\ttypeof options?.timeoutMs === \"number\"\n\t\t\t\t? setTimeout(() => {\n\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\tchild.kill();\n\t\t\t\t\t}, options.timeoutMs)\n\t\t\t\t: undefined;\n\n\t\tchild.stdout?.on(\"data\", (data) => {\n\t\t\tstdout += data.toString();\n\t\t});\n\t\tchild.stderr?.on(\"data\", (data) => {\n\t\t\tstderr += data.toString();\n\t\t});\n\t\tchild.once(\"error\", (error) => {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\treject(error);\n\t\t});\n\t\tchild.once(\"close\", (code, signal) => {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\tif (timedOut) {\n\t\t\t\treject(new Error(`${command} ${args.join(\" \")} timed out after ${options?.timeoutMs}ms`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (code === 0) {\n\t\t\t\tresolvePromise(stdout.trim());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst exitStatus = code === null ? `signal ${signal ?? \"unknown\"}` : `code ${code}`;\n\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with ${exitStatus}: ${stderr || stdout}`));\n\t\t});\n\t});\n}\n\nexport function runCommand(command: string, args: string[], options?: { cwd?: string }): Promise<void> {\n\treturn new Promise((resolvePromise, reject) => {\n\t\tconst child = spawnCommand(command, args, options);\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"exit\", (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tresolvePromise();\n\t\t\t} else {\n\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with code ${code}`));\n\t\t\t}\n\t\t});\n\t});\n}\n\nexport function runCommandSync(command: string, args: string[]): string {\n\tconst result = spawnProcessSync(command, args, {\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\tencoding: \"utf-8\",\n\t\tenv: getCommandEnv(command),\n\t});\n\tif (result.error || result.status !== 0) {\n\t\tthrow new Error(\n\t\t\t`Failed to run ${command} ${args.join(\" \")}: ${result.error?.message || result.stderr || result.stdout}`,\n\t\t);\n\t}\n\treturn (result.stdout || result.stderr || \"\").trim();\n}\n\nexport async function runWithConcurrency<T>(tasks: Array<() => Promise<T>>, limit: number): Promise<T[]> {\n\tif (tasks.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst results: T[] = new Array(tasks.length);\n\tlet nextIndex = 0;\n\tconst workerCount = Math.max(1, Math.min(limit, tasks.length));\n\n\tconst worker = async () => {\n\t\twhile (true) {\n\t\t\tconst index = nextIndex;\n\t\t\tnextIndex += 1;\n\t\t\tif (index >= tasks.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresults[index] = await tasks[index]();\n\t\t}\n\t};\n\n\tawait Promise.all(Array.from({ length: workerCount }, () => worker()));\n\treturn results;\n}\n"]}
1
+ {"version":3,"file":"package-manager-command.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-command.ts"],"names":[],"mappings":"AA0BA,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1E,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAYtE;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAsBvG"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-constants.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,sBAAsB,IAAI,CAAC","sourcesContent":["export const NETWORK_TIMEOUT_MS = 10000;\nexport const UPDATE_CHECK_CONCURRENCY = 4;\nexport const GIT_UPDATE_CONCURRENCY = 4;\n"]}
1
+ {"version":3,"file":"package-manager-constants.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,sBAAsB,IAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-env.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-env.ts"],"names":[],"mappings":"AAKA,wBAAgB,MAAM,IAAI,MAAM,CAAC,UAAU,CAiB1C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAOD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAIpG","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport { ENV_OFFLINE, getEnvValue } from \"../config.ts\";\nimport { createGitEnvironment } from \"../utils/git-env.ts\";\n\nexport function getEnv(): NodeJS.ProcessEnv {\n\tif (process.platform !== \"linux\" || Object.keys(process.env).length > 0) {\n\t\treturn process.env;\n\t}\n\ttry {\n\t\tconst data = readFileSync(\"/proc/self/environ\", \"utf-8\");\n\t\tconst env: NodeJS.ProcessEnv = {};\n\t\tfor (const entry of data.split(\"\\0\")) {\n\t\t\tconst idx = entry.indexOf(\"=\");\n\t\t\tif (idx > 0) {\n\t\t\t\tenv[entry.slice(0, idx)] = entry.slice(idx + 1);\n\t\t\t}\n\t\t}\n\t\treturn env;\n\t} catch {\n\t\treturn process.env;\n\t}\n}\n\nexport function isOfflineModeEnabled(): boolean {\n\tconst value = getEnvValue(ENV_OFFLINE);\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n\nfunction isGitCommand(command: string): boolean {\n\tconst commandName = basename(command).toLowerCase();\n\treturn commandName === \"git\" || commandName === \"git.exe\";\n}\n\nexport function getCommandEnv(command: string, overrides?: Record<string, string>): NodeJS.ProcessEnv {\n\tconst baseEnv = getEnv();\n\tif (isGitCommand(command)) return createGitEnvironment(overrides, baseEnv);\n\treturn overrides ? { ...baseEnv, ...overrides } : baseEnv;\n}\n"]}
1
+ {"version":3,"file":"package-manager-env.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-env.ts"],"names":[],"mappings":"AAKA,wBAAgB,MAAM,IAAI,MAAM,CAAC,UAAU,CAiB1C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAOD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAIpG"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-git.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-git.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA4C1G,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAepB;AAED,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAsB,SAAS,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAgCD,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,SAAS,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAKf;AAsBD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnH;AAkBD,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC,CA2C9B","sourcesContent":["import { existsSync, mkdirSync, readdirSync, rmSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.ts\";\nimport type { GitSource } from \"../utils/git.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { runCommand, runCommandCapture } from \"./package-manager-command.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getBaseDirsForScope, getGitInstallPath, getGitInstallRoot } from \"./package-manager-paths.ts\";\nimport { withProgress } from \"./package-manager-progress.ts\";\nimport { ensureGitIgnore, getGitDependencyInstallArgs, runNpmCommand } from \"./package-manager-npm.ts\";\nimport type { GitUpdateTargetInfo, PackageManagerContext, SourceScope } from \"./package-manager-types.ts\";\n\nfunction runGitProcess(\n\tcontext: PackageManagerContext,\n\tcommand: string,\n\targs: string[],\n\toptions?: { cwd?: string },\n): Promise<void> {\n\treturn context.driver ? context.driver.runCommand(command, args, options) : runCommand(command, args, options);\n}\n\nfunction captureGitProcess(\n\tcontext: PackageManagerContext,\n\tcommand: string,\n\targs: string[],\n\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n): Promise<string> {\n\treturn context.driver\n\t\t? context.driver.runCommandCapture(command, args, options)\n\t\t: runCommandCapture(command, args, options);\n}\n\nfunction getSafeGitRef(ref: string): string {\n\tif (!isSafeGitRef(ref)) {\n\t\tthrow new Error(`Invalid git ref: ${JSON.stringify(ref)}`);\n\t}\n\treturn ref;\n}\n\nfunction isSafeGitRef(ref: string): boolean {\n\tif (!ref || ref === \"@\" || ref.startsWith(\"-\") || ref.endsWith(\".\") || ref.endsWith(\"/\")) {\n\t\treturn false;\n\t}\n\tif (/[\\x00-\\x1f\\x7f\\s~^:?*\\[\\]\\\\]/u.test(ref)) {\n\t\treturn false;\n\t}\n\tif (ref.includes(\"..\") || ref.includes(\"@{\") || ref.includes(\"//\")) {\n\t\treturn false;\n\t}\n\treturn ref\n\t\t.split(\"/\")\n\t\t.every((part) => part && part !== \".\" && part !== \"..\" && !part.startsWith(\".\") && !part.endsWith(\".lock\"));\n}\n\nexport function getExistingGitInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: GitSource,\n\tscope: SourceScope,\n): string | undefined {\n\tconst candidates = [getGitInstallPath(context, source, scope)];\n\tif (scope === \"project\") {\n\t\tfor (const configDir of getProjectConfigDirs(context.cwd)) {\n\t\t\tcandidates.push(join(configDir, \"git\", source.host, source.path));\n\t\t}\n\t} else if (scope === \"user\") {\n\t\tfor (const agentDir of getBaseDirsForScope(context, \"user\")) {\n\t\t\tcandidates.push(join(agentDir, \"git\", source.host, source.path));\n\t\t}\n\t}\n\tfor (const candidate of Array.from(new Set(candidates))) {\n\t\tif (existsSync(candidate)) return candidate;\n\t}\n\treturn undefined;\n}\n\nexport async function installGit(\n\tcontext: PackageManagerContext,\n\tsource: GitSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tconst safeRef = source.ref ? getSafeGitRef(source.ref) : undefined;\n\tconst targetDir = getGitInstallPath(context, source, scope);\n\tif (existsSync(targetDir)) {\n\t\tif (safeRef) {\n\t\t\tawait ensureGitRef(context, targetDir, [\"fetch\", \"origin\", \"--\", safeRef], \"FETCH_HEAD\");\n\t\t\treturn;\n\t\t}\n\t\tconst target = context.driver\n\t\t\t? await context.driver.getLocalGitUpdateTarget(targetDir)\n\t\t\t: await getLocalGitUpdateTarget(context, targetDir);\n\t\tawait ensureGitRef(context, targetDir, target.fetchArgs, target.ref);\n\t\treturn;\n\t}\n\tconst gitRoot = getGitInstallRoot(context, scope);\n\tif (gitRoot) {\n\t\tensureGitIgnore(gitRoot);\n\t}\n\tmkdirSync(dirname(targetDir), { recursive: true });\n\n\t// Defense-in-depth: the clone URL is already parsed/validated upstream, but\n\t// assert it contains only shell-safe characters immediately before it reaches\n\t// `git clone`, so no metacharacter can ever reach a shell even on platforms\n\t// that wrap process spawns. Capture the validated value in a local so the\n\t// guard sanitizes exactly the binding handed to the spawn.\n\tconst cloneUrl = source.repo;\n\tif (!/^[A-Za-z0-9._~:@\\/%+-]+$/.test(cloneUrl)) {\n\t\tthrow new Error(`Refusing to clone repository with unsafe URL: ${cloneUrl}`);\n\t}\n\tawait runGitProcess(context, \"git\", [\"clone\", \"--\", cloneUrl, targetDir]);\n\tif (safeRef) {\n\t\tawait runGitProcess(context, \"git\", [\"checkout\", safeRef], { cwd: targetDir });\n\t}\n\tconst packageJsonPath = join(targetDir, \"package.json\");\n\tif (existsSync(packageJsonPath)) {\n\t\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n\t}\n}\n\nexport async function updateGit(\n\tcontext: PackageManagerContext,\n\tsource: GitSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tconst safeRef = source.ref ? getSafeGitRef(source.ref) : undefined;\n\tconst targetDir = getExistingGitInstallPath(context, source, scope) ?? getGitInstallPath(context, source, scope);\n\tif (!existsSync(targetDir)) {\n\t\tawait installGit(context, source, scope);\n\t\treturn;\n\t}\n\tif (safeRef) {\n\t\tawait ensureGitRef(context, targetDir, [\"fetch\", \"origin\", \"--\", safeRef], \"FETCH_HEAD\");\n\t\treturn;\n\t}\n\tconst target = context.driver\n\t\t? await context.driver.getLocalGitUpdateTarget(targetDir)\n\t\t: await getLocalGitUpdateTarget(context, targetDir);\n\tawait ensureGitRef(context, targetDir, target.fetchArgs, target.ref);\n}\n\nasync function ensureGitRef(\n\tcontext: PackageManagerContext,\n\ttargetDir: string,\n\tfetchArgs: string[],\n\tref: string,\n): Promise<void> {\n\tawait runGitProcess(context, \"git\", fetchArgs, { cwd: targetDir });\n\n\tconst localHead = await captureGitProcess(context, \"git\", [\"rev-parse\", \"HEAD\"], {\n\t\tcwd: targetDir,\n\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t});\n\tconst commitRef = `${ref}^{commit}`;\n\tconst targetHead = await captureGitProcess(context, \"git\", [\"rev-parse\", commitRef], {\n\t\tcwd: targetDir,\n\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t});\n\tif (localHead.trim() === targetHead.trim()) {\n\t\treturn;\n\t}\n\n\tawait runGitProcess(context, \"git\", [\"reset\", \"--hard\", commitRef], { cwd: targetDir });\n\tawait runGitProcess(context, \"git\", [\"clean\", \"-fdx\"], { cwd: targetDir });\n\n\tconst packageJsonPath = join(targetDir, \"package.json\");\n\tif (existsSync(packageJsonPath)) {\n\t\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n\t}\n}\n\nexport async function refreshTemporaryGitSource(\n\tcontext: PackageManagerContext,\n\tsource: GitSource,\n\tsourceStr: string,\n): Promise<void> {\n\tif (isOfflineModeEnabled()) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait withProgress(context, \"pull\", sourceStr, `Refreshing ${sourceStr}...`, async () => {\n\t\t\tawait updateGit(context, source, \"temporary\");\n\t\t});\n\t} catch {}\n}\n\nexport async function removeGit(\n\tcontext: PackageManagerContext,\n\tsource: GitSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tconst targetDir = getGitInstallPath(context, source, scope);\n\tif (!existsSync(targetDir)) return;\n\trmSync(targetDir, { recursive: true, force: true });\n\tpruneEmptyGitParents(targetDir, getGitInstallRoot(context, scope));\n}\n\nfunction pruneEmptyGitParents(targetDir: string, installRoot: string | undefined): void {\n\tif (!installRoot) return;\n\tconst resolvedRoot = resolve(installRoot);\n\tlet current = dirname(targetDir);\n\twhile (current.startsWith(resolvedRoot) && current !== resolvedRoot) {\n\t\tif (!existsSync(current)) {\n\t\t\tcurrent = dirname(current);\n\t\t\tcontinue;\n\t\t}\n\t\tconst entries = readdirSync(current);\n\t\tif (entries.length > 0) break;\n\t\ttry {\n\t\t\trmSync(current, { recursive: true, force: true });\n\t\t} catch {\n\t\t\tbreak;\n\t\t}\n\t\tcurrent = dirname(current);\n\t}\n}\n\nexport async function gitHasAvailableUpdate(context: PackageManagerContext, installedPath: string): Promise<boolean> {\n\tif (isOfflineModeEnabled()) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst localHead = await captureGitProcess(context, \"git\", [\"rev-parse\", \"HEAD\"], {\n\t\t\tcwd: installedPath,\n\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t});\n\t\tconst remoteHead = await getRemoteGitHead(context, installedPath);\n\t\treturn localHead.trim() !== remoteHead.trim();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function getRemoteGitHead(context: PackageManagerContext, installedPath: string): Promise<string> {\n\tconst upstreamRef = await getGitUpstreamRef(context, installedPath);\n\tif (upstreamRef) {\n\t\tconst remoteHead = await runGitRemoteCommand(context, installedPath, [\"ls-remote\", \"origin\", upstreamRef]);\n\t\tconst match = remoteHead.match(/^([0-9a-f]{40})\\s+/m);\n\t\tif (match?.[1]) return match[1];\n\t}\n\n\tconst remoteHead = await runGitRemoteCommand(context, installedPath, [\"ls-remote\", \"origin\", \"HEAD\"]);\n\tconst match = remoteHead.match(/^([0-9a-f]{40})\\s+HEAD$/m);\n\tif (!match?.[1]) {\n\t\tthrow new Error(\"Failed to determine remote HEAD\");\n\t}\n\treturn match[1];\n}\n\nexport async function getLocalGitUpdateTarget(\n\tcontext: PackageManagerContext,\n\tinstalledPath: string,\n): Promise<GitUpdateTargetInfo> {\n\ttry {\n\t\tconst upstream = await captureGitProcess(context, \"git\", [\"rev-parse\", \"--abbrev-ref\", \"@{upstream}\"], {\n\t\t\tcwd: installedPath,\n\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t});\n\t\tconst trimmedUpstream = upstream.trim();\n\t\tif (!trimmedUpstream.startsWith(\"origin/\")) throw new Error(`Unsupported upstream remote: ${trimmedUpstream}`);\n\t\tconst branch = trimmedUpstream.slice(\"origin/\".length);\n\t\tif (!branch) throw new Error(\"Missing upstream branch name\");\n\t\tconst head = await captureGitProcess(context, \"git\", [\"rev-parse\", \"@{upstream}\"], {\n\t\t\tcwd: installedPath,\n\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t});\n\t\treturn {\n\t\t\tref: \"@{upstream}\",\n\t\t\thead,\n\t\t\tfetchArgs: [\"fetch\", \"--prune\", \"--no-tags\", \"origin\", `+refs/heads/${branch}:refs/remotes/origin/${branch}`],\n\t\t};\n\t} catch {\n\t\tawait runGitProcess(context, \"git\", [\"remote\", \"set-head\", \"origin\", \"-a\"], { cwd: installedPath }).catch(() => {});\n\t\tconst head = await captureGitProcess(context, \"git\", [\"rev-parse\", \"origin/HEAD\"], {\n\t\t\tcwd: installedPath,\n\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t});\n\t\tconst originHeadRef = await captureGitProcess(context, \"git\", [\"symbolic-ref\", \"refs/remotes/origin/HEAD\"], {\n\t\t\tcwd: installedPath,\n\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t}).catch(() => \"\");\n\t\tconst branch = originHeadRef.trim().replace(/^refs\\/remotes\\/origin\\//, \"\");\n\t\tif (branch) {\n\t\t\treturn {\n\t\t\t\tref: \"origin/HEAD\",\n\t\t\t\thead,\n\t\t\t\tfetchArgs: [\"fetch\", \"--prune\", \"--no-tags\", \"origin\", `+refs/heads/${branch}:refs/remotes/origin/${branch}`],\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tref: \"origin/HEAD\",\n\t\t\thead,\n\t\t\tfetchArgs: [\"fetch\", \"--prune\", \"--no-tags\", \"origin\", \"+HEAD:refs/remotes/origin/HEAD\"],\n\t\t};\n\t}\n}\n\nasync function getGitUpstreamRef(context: PackageManagerContext, installedPath: string): Promise<string | undefined> {\n\ttry {\n\t\tconst upstream = await captureGitProcess(context, \"git\", [\"rev-parse\", \"--abbrev-ref\", \"@{upstream}\"], {\n\t\t\tcwd: installedPath,\n\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t});\n\t\tconst trimmed = upstream.trim();\n\t\tif (!trimmed.startsWith(\"origin/\")) return undefined;\n\t\tconst branch = trimmed.slice(\"origin/\".length);\n\t\treturn branch ? `refs/heads/${branch}` : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction runGitRemoteCommand(context: PackageManagerContext, installedPath: string, args: string[]): Promise<string> {\n\treturn captureGitProcess(context, \"git\", args, {\n\t\tcwd: installedPath,\n\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\tenv: { GIT_TERMINAL_PROMPT: \"0\" },\n\t});\n}\n\n"]}
1
+ {"version":3,"file":"package-manager-git.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-git.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA4C1G,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAepB;AAED,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAsB,SAAS,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAgCD,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,SAAS,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAKf;AAsBD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnH;AAkBD,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-manifest.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE3E,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,GAAG,IAAI,CAU1F;AAED,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQ7E;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAMrE;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAKnG;AAED,wBAAgB,0BAA0B,CACzC,QAAQ,EAAE,UAAU,GAAG,IAAI,EAC3B,YAAY,EAAE,YAAY,GACxB,MAAM,EAAE,GAAG,SAAS,CAItB","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { APP_NAME } from \"../config.ts\";\nimport type { PiManifest, ResourceType } from \"./package-manager-types.ts\";\n\nexport function getManifestFromPackageJson(pkg: Record<string, unknown>): PiManifest | null {\n\tconst appManifest = pkg[APP_NAME];\n\tif (appManifest && typeof appManifest === \"object\" && !Array.isArray(appManifest)) {\n\t\treturn appManifest as PiManifest;\n\t}\n\tconst legacyManifest = pkg.pi;\n\tif (legacyManifest && typeof legacyManifest === \"object\" && !Array.isArray(legacyManifest)) {\n\t\treturn legacyManifest as PiManifest;\n\t}\n\treturn null;\n}\n\nexport function readPiManifestFile(packageJsonPath: string): PiManifest | null {\n\ttry {\n\t\tconst content = readFileSync(packageJsonPath, \"utf-8\");\n\t\tconst pkg = JSON.parse(content) as Record<string, unknown>;\n\t\treturn getManifestFromPackageJson(pkg);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function readPiManifest(packageRoot: string): PiManifest | null {\n\tconst packageJsonPath = join(packageRoot, \"package.json\");\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\treturn readPiManifestFile(packageJsonPath);\n}\n\nexport function conventionDirsForResource(packageRoot: string, resourceType: ResourceType): string[] {\n\tif (resourceType === \"workflows\") {\n\t\treturn [join(packageRoot, \"workflows\"), join(packageRoot, \"workflow\")];\n\t}\n\treturn [join(packageRoot, resourceType)];\n}\n\nexport function manifestEntriesForResource(\n\tmanifest: PiManifest | null,\n\tresourceType: ResourceType,\n): string[] | undefined {\n\tif (!manifest) return undefined;\n\tif (resourceType === \"workflows\") return manifest.workflows ?? manifest.workflow;\n\treturn manifest[resourceType];\n}\n"]}
1
+ {"version":3,"file":"package-manager-manifest.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE3E,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,GAAG,IAAI,CAU1F;AAED,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQ7E;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAMrE;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAKnG;AAED,wBAAgB,0BAA0B,CACzC,QAAQ,EAAE,UAAU,GAAG,IAAI,EAC3B,YAAY,EAAE,YAAY,GACxB,MAAM,EAAE,GAAG,SAAS,CAItB"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-npm.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEtH,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAUjG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAM5E;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAMxF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAMpF;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,GACjB,MAAM,EAAE,CAiBV;AAED,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAeD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAcvE;AA0BD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAO/G;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAWpB;AAED,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,qBAAqB,CAC1C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhF;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAqBjB","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { maxSatisfying, rcompare, satisfies } from \"semver\";\nimport { APP_NAME, CONFIG_DIR_NAME, getProjectConfigDirs } from \"../config.ts\";\nimport { markPathIgnoredByCloudSync } from \"../utils/paths.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { runCommand, runCommandCapture, runCommandSync } from \"./package-manager-command.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getNpmInstallRoot } from \"./package-manager-paths.ts\";\nimport type { InstalledSourceScope, NpmSource, PackageManagerContext, SourceScope } from \"./package-manager-types.ts\";\n\nexport function getNpmCommand(context: PackageManagerContext): { command: string; args: string[] } {\n\tconst configuredCommand = context.settingsManager.getNpmCommand();\n\tif (!configuredCommand || configuredCommand.length === 0) {\n\t\treturn { command: \"npm\", args: [] };\n\t}\n\tconst [command, ...args] = configuredCommand;\n\tif (!command) {\n\t\tthrow new Error(\"Invalid npmCommand: first array entry must be a non-empty command\");\n\t}\n\treturn { command, args };\n}\n\nexport function getPackageManagerName(context: PackageManagerContext): string {\n\tconst npmCommand = getNpmCommand(context);\n\tconst commandParts = [npmCommand.command, ...npmCommand.args];\n\tconst separatorIndex = commandParts.lastIndexOf(\"--\");\n\tconst packageManagerCommand = separatorIndex >= 0 ? commandParts[separatorIndex + 1] : npmCommand.command;\n\treturn packageManagerCommand ? basename(packageManagerCommand).replace(/\\.(cmd|exe)$/i, \"\") : \"\";\n}\n\nexport async function runNpmCommand(\n\tcontext: PackageManagerContext,\n\targs: string[],\n\toptions?: { cwd?: string },\n): Promise<void> {\n\tconst npmCommand = getNpmCommand(context);\n\tif (context.driver) {\n\t\tawait context.driver.runCommand(npmCommand.command, [...npmCommand.args, ...args], options);\n\t\treturn;\n\t}\n\tawait runCommand(npmCommand.command, [...npmCommand.args, ...args], options);\n}\n\nexport function runNpmCommandSync(context: PackageManagerContext, args: string[]): string {\n\tconst npmCommand = getNpmCommand(context);\n\tif (context.driver) {\n\t\treturn context.driver.runCommandSync(npmCommand.command, [...npmCommand.args, ...args]);\n\t}\n\treturn runCommandSync(npmCommand.command, [...npmCommand.args, ...args]);\n}\n\nexport function getGitDependencyInstallArgs(context: PackageManagerContext): string[] {\n\tconst configuredCommand = context.settingsManager.getNpmCommand();\n\tif (configuredCommand && configuredCommand.length > 0) {\n\t\treturn [\"install\"];\n\t}\n\treturn [\"install\", \"--omit=dev\"];\n}\n\nexport function getNpmInstallArgs(\n\tcontext: PackageManagerContext,\n\tspecs: string[],\n\tinstallRoot: string,\n): string[] {\n\tconst packageManagerName = getPackageManagerName(context);\n\tif (packageManagerName === \"bun\") {\n\t\treturn [\"install\", ...specs, \"--cwd\", installRoot, \"--omit=peer\"];\n\t}\n\tif (packageManagerName === \"pnpm\") {\n\t\treturn [\n\t\t\t\"install\",\n\t\t\t...specs,\n\t\t\t\"--prefix\",\n\t\t\tinstallRoot,\n\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\"--config.strict-dep-builds=false\",\n\t\t];\n\t}\n\treturn [\"install\", ...specs, \"--prefix\", installRoot, \"--legacy-peer-deps\"];\n}\n\nexport async function installNpm(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n\ttemporary: boolean,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, temporary);\n\tensureNpmProject(installRoot);\n\tawait runNpmCommand(context, getNpmInstallArgs(context, [source.spec], installRoot));\n}\n\nexport async function uninstallNpm(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, false);\n\tif (!existsSync(installRoot)) {\n\t\treturn;\n\t}\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tawait runNpmCommand(context, [\"uninstall\", source.name, \"--cwd\", installRoot]);\n\t\treturn;\n\t}\n\tawait runNpmCommand(context, [\"uninstall\", source.name, \"--prefix\", installRoot]);\n}\n\nexport async function installNpmBatch(\n\tcontext: PackageManagerContext,\n\tspecs: string[],\n\tscope: InstalledSourceScope,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, false);\n\tensureNpmProject(installRoot);\n\tawait runNpmCommand(context, getNpmInstallArgs(context, specs, installRoot));\n}\n\nfunction ensureNpmProject(installRoot: string): void {\n\tif (!existsSync(installRoot)) {\n\t\tmkdirSync(installRoot, { recursive: true });\n\t}\n\tmarkPathIgnoredByCloudSync(installRoot);\n\tensureGitIgnore(installRoot);\n\tconst packageJsonPath = join(installRoot, \"package.json\");\n\tif (!existsSync(packageJsonPath)) {\n\t\tconst pkgJson = { name: `${APP_NAME}-extensions`, private: true };\n\t\twriteFileSync(packageJsonPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t}\n}\n\nexport function ensureGitIgnore(dir: string): void {\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true });\n\t}\n\tconst ignorePath = join(dir, \".gitignore\");\n\tif (!existsSync(ignorePath)) {\n\t\twriteFileSync(ignorePath, \"*\\n!.gitignore\\n\", \"utf-8\");\n\t}\n}\n\nexport function getManagedNpmInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): string {\n\tif (scope === \"temporary\") {\n\t\treturn join(getNpmInstallRoot(context, scope, true), \"node_modules\", source.name);\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"npm\", \"node_modules\", source.name);\n\t}\n\treturn join(context.agentDir, \"npm\", \"node_modules\", source.name);\n}\n\nexport function getGlobalNpmRoot(context: PackageManagerContext): string {\n\tconst npmCommand = getNpmCommand(context);\n\tconst commandKey = [npmCommand.command, ...npmCommand.args].join(\"\\0\");\n\tif (context.globalNpmRoot && context.globalNpmRootCommandKey === commandKey) {\n\t\treturn context.globalNpmRoot;\n\t}\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tconst binDir = runNpmCommandSync(context, [\"pm\", \"bin\", \"-g\"]).trim();\n\t\tcontext.globalNpmRoot = join(dirname(binDir), \"install\", \"global\", \"node_modules\");\n\t} else {\n\t\tcontext.globalNpmRoot = runNpmCommandSync(context, [\"root\", \"-g\"]).trim();\n\t}\n\tcontext.globalNpmRootCommandKey = commandKey;\n\treturn context.globalNpmRoot;\n}\n\nfunction getPnpmGlobalPackagePath(context: PackageManagerContext, packageName: string): string | undefined {\n\tif (getPackageManagerName(context) !== \"pnpm\") {\n\t\treturn undefined;\n\t}\n\tconst output = runNpmCommandSync(context, [\"list\", \"-g\", \"--depth\", \"0\", \"--json\"]);\n\tconst entries = JSON.parse(output) as Array<{ dependencies?: Record<string, { path?: string }> }>;\n\tfor (const entry of entries) {\n\t\tconst path = entry.dependencies?.[packageName]?.path;\n\t\tif (path) return path;\n\t}\n\treturn undefined;\n}\n\nfunction getLegacyGlobalNpmInstallPath(context: PackageManagerContext, source: NpmSource): string | undefined {\n\ttry {\n\t\tconst pnpmPath = getPnpmGlobalPackagePath(context, source.name);\n\t\tif (pnpmPath) return pnpmPath;\n\t\tconst globalRoot = context.driver?.getGlobalNpmRoot ? context.driver.getGlobalNpmRoot() : getGlobalNpmRoot(context);\n\t\treturn join(globalRoot, source.name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function getNpmInstallPath(context: PackageManagerContext, source: NpmSource, scope: SourceScope): string {\n\tconst managedPath = getManagedNpmInstallPath(context, source, scope);\n\tif (scope !== \"user\" || existsSync(managedPath)) {\n\t\treturn managedPath;\n\t}\n\tconst legacyPath = getLegacyGlobalNpmInstallPath(context, source);\n\treturn legacyPath && existsSync(legacyPath) ? legacyPath : managedPath;\n}\n\nexport function getExistingNpmInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): string | undefined {\n\tconst candidates = [getNpmInstallPath(context, source, scope)];\n\tif (scope === \"project\") {\n\t\tfor (const configDir of getProjectConfigDirs(context.cwd)) {\n\t\t\tcandidates.push(join(configDir, \"npm\", \"node_modules\", source.name));\n\t\t}\n\t}\n\tfor (const candidate of Array.from(new Set(candidates))) {\n\t\tif (existsSync(candidate)) return candidate;\n\t}\n\treturn undefined;\n}\n\nexport async function installedNpmMatchesConfiguredVersion(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tinstalledPath: string,\n): Promise<boolean> {\n\tconst installedVersion = getInstalledNpmVersion(installedPath);\n\tif (!installedVersion) return false;\n\tif (source.range) return satisfies(installedVersion, source.range);\n\tif (source.version !== undefined) {\n\t\tif (isOfflineModeEnabled()) return true;\n\t\ttry {\n\t\t\tconst targetVersion = await getLatestNpmVersion(context, source.spec);\n\t\t\treturn installedVersion === targetVersion;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport async function npmHasAvailableUpdate(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tinstalledPath: string,\n): Promise<boolean> {\n\tif (isOfflineModeEnabled()) return false;\n\tconst installedVersion = getInstalledNpmVersion(installedPath);\n\tif (!installedVersion) return false;\n\ttry {\n\t\tconst targetVersion = await getLatestNpmVersion(context, source.version ? source.spec : source.name, source.range);\n\t\treturn targetVersion !== installedVersion;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function getInstalledNpmVersion(installedPath: string): string | undefined {\n\tconst packageJsonPath = join(installedPath, \"package.json\");\n\tif (!existsSync(packageJsonPath)) return undefined;\n\ttry {\n\t\tconst content = readFileSync(packageJsonPath, \"utf-8\");\n\t\tconst pkg = JSON.parse(content) as { version?: string };\n\t\treturn pkg.version;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport async function getLatestNpmVersion(\n\tcontext: PackageManagerContext,\n\tpackageSpec: string,\n\trange?: string,\n): Promise<string> {\n\tconst npmCommand = getNpmCommand(context);\n\tconst stdout = context.driver\n\t\t? await context.driver.runCommandCapture(npmCommand.command, [...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"], {\n\t\t\t\tcwd: context.cwd,\n\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t})\n\t\t: await runCommandCapture(npmCommand.command, [...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"], {\n\t\t\t\tcwd: context.cwd,\n\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t});\n\tconst raw = stdout.trim();\n\tif (!raw) throw new Error(\"Empty response from npm view\");\n\tconst parsed = JSON.parse(raw) as string | string[];\n\tif (typeof parsed === \"string\") return parsed;\n\tif (Array.isArray(parsed)) {\n\t\tconst versions = parsed.filter((value) => typeof value === \"string\" && value.length > 0);\n\t\tconst latest = range ? maxSatisfying(versions, range) : [...versions].sort(rcompare)[0];\n\t\tif (latest) return latest;\n\t}\n\tthrow new Error(\"Unexpected response from npm view\");\n}\n"]}
1
+ {"version":3,"file":"package-manager-npm.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEtH,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAUjG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAM5E;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAMxF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAMpF;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,GACjB,MAAM,EAAE,CAiBV;AAED,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAeD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAcvE;AA0BD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAO/G;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAWpB;AAED,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,qBAAqB,CAC1C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhF;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-operations.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-operations.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAMX,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,MAAM,4BAA4B,CAAC;AAEpC,wBAAsB,OAAO,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,MAAM,CAC3B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B3F;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf;AA+ED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAoCvG","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { runWithConcurrency } from \"./package-manager-command.ts\";\nimport { GIT_UPDATE_CONCURRENCY, UPDATE_CHECK_CONCURRENCY } from \"./package-manager-constants.ts\";\nimport { getExistingGitInstallPath, gitHasAvailableUpdate, installGit, removeGit, updateGit } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport {\n\tgetInstalledNpmVersion,\n\tgetManagedNpmInstallPath,\n\tgetLatestNpmVersion,\n\tgetNpmInstallPath,\n\tinstallNpm,\n\tinstallNpmBatch,\n\tnpmHasAvailableUpdate,\n\tuninstallNpm,\n} from \"./package-manager-npm.ts\";\nimport { resolveManagerPath } from \"./package-manager-paths.ts\";\nimport { withProgress } from \"./package-manager-progress.ts\";\nimport {\n\tassertProjectTrustedForScope,\n\tbuildNoMatchingPackageMessage,\n\tdedupePackages,\n\tgetPackageIdentity,\n\tgetPackageSourceString,\n\tparseSource,\n} from \"./package-manager-source.ts\";\nimport type {\n\tConfiguredUpdateSource,\n\tGitUpdateTarget,\n\tInstalledSourceScope,\n\tNpmSource,\n\tNpmUpdateTarget,\n\tPackageManagerContext,\n\tPackageUpdate,\n\tParsedSource,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\n\nexport async function install(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\toptions?: { local?: boolean },\n): Promise<void> {\n\tconst parsed = parseSource(source);\n\tconst scope: SourceScope = options?.local ? \"project\" : \"user\";\n\tassertProjectTrustedForScope(context, scope);\n\tawait withProgress(context, \"install\", source, `Installing ${source}...`, async () => {\n\t\tif (parsed.type === \"npm\") {\n\t\t\tawait installNpm(context, parsed, scope, false);\n\t\t\treturn;\n\t\t}\n\t\tif (parsed.type === \"git\") {\n\t\t\tawait installGit(context, parsed, scope);\n\t\t\treturn;\n\t\t}\n\t\tif (parsed.type === \"local\") {\n\t\t\tconst resolved = resolveManagerPath(context, parsed.path);\n\t\t\tif (!existsSync(resolved)) {\n\t\t\t\tthrow new Error(`Path does not exist: ${resolved}`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`Unsupported install source: ${source}`);\n\t});\n}\n\nexport async function remove(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\toptions?: { local?: boolean },\n): Promise<void> {\n\tconst parsed = parseSource(source);\n\tconst scope: SourceScope = options?.local ? \"project\" : \"user\";\n\tassertProjectTrustedForScope(context, scope);\n\tawait withProgress(context, \"remove\", source, `Removing ${source}...`, async () => {\n\t\tif (parsed.type === \"npm\") {\n\t\t\tawait uninstallNpm(context, parsed, scope);\n\t\t\treturn;\n\t\t}\n\t\tif (parsed.type === \"git\") {\n\t\t\tawait removeGit(context, parsed, scope);\n\t\t\treturn;\n\t\t}\n\t\tif (parsed.type === \"local\") return;\n\t\tthrow new Error(`Unsupported remove source: ${source}`);\n\t});\n}\n\nexport async function update(context: PackageManagerContext, source?: string): Promise<void> {\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst identity = source ? getPackageIdentity(context, source) : undefined;\n\tlet matched = false;\n\tconst updateSources: ConfiguredUpdateSource[] = [];\n\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tif (identity && getPackageIdentity(context, sourceStr, \"user\") !== identity) continue;\n\t\tmatched = true;\n\t\tupdateSources.push({ source: sourceStr, scope: \"user\" });\n\t}\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tif (identity && getPackageIdentity(context, sourceStr, \"project\") !== identity) continue;\n\t\tmatched = true;\n\t\tupdateSources.push({ source: sourceStr, scope: \"project\" });\n\t}\n\n\tif (source && !matched) {\n\t\tthrow new Error(\n\t\t\tbuildNoMatchingPackageMessage(context, source, [\n\t\t\t\t...(globalSettings.packages ?? []),\n\t\t\t\t...(projectSettings.packages ?? []),\n\t\t\t]),\n\t\t);\n\t}\n\tawait updateConfiguredSources(context, updateSources);\n}\n\nexport async function installParsedSource(\n\tcontext: PackageManagerContext,\n\tparsed: ParsedSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tif (parsed.type === \"npm\") {\n\t\tawait installNpm(context, parsed, scope, scope === \"temporary\");\n\t\treturn;\n\t}\n\tif (parsed.type === \"git\") {\n\t\tawait installGit(context, parsed, scope);\n\t}\n}\n\nasync function updateConfiguredSources(\n\tcontext: PackageManagerContext,\n\tsources: ConfiguredUpdateSource[],\n): Promise<void> {\n\tif (isOfflineModeEnabled() || sources.length === 0) return;\n\n\tconst npmCandidates: NpmUpdateTarget[] = [];\n\tconst gitCandidates: GitUpdateTarget[] = [];\n\tfor (const entry of sources) {\n\t\tconst parsed = parseSource(entry.source);\n\t\tif (parsed.type === \"npm\") {\n\t\t\tif (!parsed.pinned) npmCandidates.push({ ...entry, parsed });\n\t\t} else if (parsed.type === \"git\") {\n\t\t\tgitCandidates.push({ ...entry, parsed });\n\t\t}\n\t}\n\n\tconst npmCheckTasks = npmCandidates.map((entry) => async () => ({\n\t\tentry,\n\t\tshouldUpdate: await shouldUpdateNpmSource(context, entry.parsed, entry.scope),\n\t}));\n\tconst npmCheckResults = await runWithConcurrency(npmCheckTasks, UPDATE_CHECK_CONCURRENCY);\n\tconst userNpmUpdates: NpmUpdateTarget[] = [];\n\tconst projectNpmUpdates: NpmUpdateTarget[] = [];\n\tfor (const result of npmCheckResults) {\n\t\tif (!result.shouldUpdate) continue;\n\t\tif (result.entry.scope === \"user\") userNpmUpdates.push(result.entry);\n\t\telse projectNpmUpdates.push(result.entry);\n\t}\n\n\tconst tasks: Promise<void>[] = [];\n\tif (userNpmUpdates.length > 0) tasks.push(updateNpmBatch(context, userNpmUpdates, \"user\"));\n\tif (projectNpmUpdates.length > 0) tasks.push(updateNpmBatch(context, projectNpmUpdates, \"project\"));\n\tif (gitCandidates.length > 0) {\n\t\tconst gitTasks = gitCandidates.map(\n\t\t\t(entry) => async () =>\n\t\t\t\twithProgress(context, \"update\", entry.source, `Updating ${entry.source}...`, async () => {\n\t\t\t\t\tif (context.driver) await context.driver.updateGit(entry.parsed, entry.scope);\n\t\t\t\t\telse await updateGit(context, entry.parsed, entry.scope);\n\t\t\t\t}),\n\t\t);\n\t\ttasks.push(runWithConcurrency(gitTasks, GIT_UPDATE_CONCURRENCY).then(() => {}));\n\t}\n\tawait Promise.all(tasks);\n}\n\nasync function shouldUpdateNpmSource(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: InstalledSourceScope,\n): Promise<boolean> {\n\tconst installedPath = getManagedNpmInstallPath(context, source, scope);\n\tconst installedVersion = existsSync(installedPath) ? getInstalledNpmVersion(installedPath) : undefined;\n\tif (!installedVersion) return true;\n\ttry {\n\t\tconst targetVersion = await getLatestNpmVersion(context, source.version ? source.spec : source.name, source.range);\n\t\treturn targetVersion !== installedVersion;\n\t} catch {\n\t\treturn true;\n\t}\n}\n\nasync function updateNpmBatch(\n\tcontext: PackageManagerContext,\n\tsources: NpmUpdateTarget[],\n\tscope: InstalledSourceScope,\n): Promise<void> {\n\tif (sources.length === 0) return;\n\tconst sourceLabel = sources.length === 1 ? sources[0].source : `${scope} npm packages`;\n\tconst message = sources.length === 1 ? `Updating ${sources[0].source}...` : `Updating ${scope} npm packages...`;\n\tconst specs = sources.map((entry) => (entry.parsed.version ? entry.parsed.spec : `${entry.parsed.name}@latest`));\n\n\tawait withProgress(context, \"update\", sourceLabel, message, async () => {\n\t\tawait installNpmBatch(context, specs, scope);\n\t});\n}\n\nexport async function checkForAvailableUpdates(context: PackageManagerContext): Promise<PackageUpdate[]> {\n\tif (isOfflineModeEnabled()) return [];\n\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages = [\n\t\t...(projectSettings.packages ?? []).map((pkg) => ({ pkg, scope: \"project\" as const })),\n\t\t...(globalSettings.packages ?? []).map((pkg) => ({ pkg, scope: \"user\" as const })),\n\t];\n\tconst packageSources = dedupePackages(context, allPackages);\n\tconst checks = packageSources\n\t\t.filter((entry): entry is { pkg: typeof entry.pkg; scope: InstalledSourceScope } => entry.scope !== \"temporary\")\n\t\t.map((entry) => async (): Promise<PackageUpdate | undefined> => {\n\t\t\tconst source = getPackageSourceString(entry.pkg);\n\t\t\tconst parsed = parseSource(source);\n\t\t\tif (parsed.type === \"local\" || parsed.pinned) return undefined;\n\n\t\t\tif (parsed.type === \"npm\") {\n\t\t\t\tconst installedPath = getNpmInstallPath(context, parsed, entry.scope);\n\t\t\t\tif (!existsSync(installedPath)) return undefined;\n\t\t\t\tconst hasUpdate = await npmHasAvailableUpdate(context, parsed, installedPath);\n\t\t\t\tif (!hasUpdate) return undefined;\n\t\t\t\treturn { source, displayName: parsed.name, type: \"npm\", scope: entry.scope };\n\t\t\t}\n\n\t\t\tconst installedPath = getExistingGitInstallPath(context, parsed, entry.scope);\n\t\t\tif (!installedPath) return undefined;\n\t\t\tconst hasUpdate = context.driver\n\t\t\t\t? await context.driver.gitHasAvailableUpdate(installedPath)\n\t\t\t\t: await gitHasAvailableUpdate(context, installedPath);\n\t\t\tif (!hasUpdate) return undefined;\n\t\t\treturn { source, displayName: `${parsed.host}/${parsed.path}`, type: \"git\", scope: entry.scope };\n\t\t});\n\n\tconst results = await runWithConcurrency(checks, UPDATE_CHECK_CONCURRENCY);\n\treturn results.filter((result): result is PackageUpdate => result !== undefined);\n}\n"]}
1
+ {"version":3,"file":"package-manager-operations.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-operations.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAMX,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,MAAM,4BAA4B,CAAC;AAEpC,wBAAsB,OAAO,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,MAAM,CAC3B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B3F;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf;AA+ED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAoCvG"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-paths.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-paths.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAQhG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GAChB,MAAM,CAQR;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAQpI;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAQxG","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { APP_NAME, CONFIG_DIR_NAME, getAgentDir, getAgentDirs, getProjectConfigDirs } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { PackageManagerContext, SourceScope } from \"./package-manager-types.ts\";\n\nexport function getHomeDir(): string {\n\treturn process.env.HOME || homedir();\n}\n\nexport function getTemporaryDir(prefix: string, suffix?: string): string {\n\tconst hash = createHash(\"sha256\")\n\t\t.update(`${prefix}-${suffix ?? \"\"}`)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 8);\n\treturn join(tmpdir(), `${APP_NAME}-extensions`, prefix, hash, suffix ?? \"\");\n}\n\nexport function getBaseDirsForScope(context: PackageManagerContext, scope: SourceScope): string[] {\n\tif (scope === \"project\") {\n\t\treturn getProjectConfigDirs(context.cwd);\n\t}\n\tif (scope === \"user\") {\n\t\treturn context.agentDir === getAgentDir() ? getAgentDirs() : [context.agentDir];\n\t}\n\treturn [context.cwd];\n}\n\nexport function getBaseDirForScope(context: PackageManagerContext, scope: SourceScope): string {\n\treturn getBaseDirsForScope(context, scope)[0]!;\n}\n\nexport function resolveManagerPath(context: PackageManagerContext, input: string): string {\n\treturn resolvePath(input, context.cwd, { homeDir: getHomeDir(), trim: true });\n}\n\nexport function resolvePathFromBase(input: string, baseDir: string): string {\n\treturn resolvePath(input, baseDir, { homeDir: getHomeDir(), trim: true });\n}\n\nexport function getNpmInstallRoot(\n\tcontext: PackageManagerContext,\n\tscope: SourceScope,\n\ttemporary: boolean,\n): string {\n\tif (temporary) {\n\t\treturn getTemporaryDir(\"npm\");\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"npm\");\n\t}\n\treturn join(context.agentDir, \"npm\");\n}\n\nexport function getGitInstallPath(context: PackageManagerContext, source: { host: string; path: string }, scope: SourceScope): string {\n\tif (scope === \"temporary\") {\n\t\treturn getTemporaryDir(`git-${source.host}`, source.path);\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"git\", source.host, source.path);\n\t}\n\treturn join(context.agentDir, \"git\", source.host, source.path);\n}\n\nexport function getGitInstallRoot(context: PackageManagerContext, scope: SourceScope): string | undefined {\n\tif (scope === \"temporary\") {\n\t\treturn undefined;\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"git\");\n\t}\n\treturn join(context.agentDir, \"git\");\n}\n"]}
1
+ {"version":3,"file":"package-manager-paths.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-paths.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAQhG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GAChB,MAAM,CAQR;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAQpI;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAQxG"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-progress.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEvF,wBAAgB,YAAY,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAEvF;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAUf","sourcesContent":["import type { PackageManagerContext, ProgressEvent } from \"./package-manager-types.ts\";\n\nexport function emitProgress(context: PackageManagerContext, event: ProgressEvent): void {\n\tcontext.progressCallback?.(event);\n}\n\nexport async function withProgress(\n\tcontext: PackageManagerContext,\n\taction: ProgressEvent[\"action\"],\n\tsource: string,\n\tmessage: string,\n\toperation: () => Promise<void>,\n): Promise<void> {\n\temitProgress(context, { type: \"start\", action, source, message });\n\ttry {\n\t\tawait operation();\n\t\temitProgress(context, { type: \"complete\", action, source });\n\t} catch (error) {\n\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\temitProgress(context, { type: \"error\", action, source, message: errorMessage });\n\t\tthrow error;\n\t}\n}\n"]}
1
+ {"version":3,"file":"package-manager-progress.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEvF,wBAAgB,YAAY,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAEvF;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -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;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
+ {"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-resource-accumulator.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-accumulator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,YAAY,EACZ,aAAa,EAEb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,MAAM,4BAA4B,CAAC;AASpC,wBAAgB,YAAY,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,GAAG,WAAW,CAetG;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAK1G;AAED,wBAAgB,iBAAiB,IAAI,mBAAmB,CAQvD;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,aAAa,CAyB/E","sourcesContent":["import { canonicalizePath } from \"../utils/paths.ts\";\nimport type {\n\tPathMetadata,\n\tResolvedPaths,\n\tResolvedResource,\n\tResourceAccumulator,\n\tResourceMap,\n\tResourceType,\n} from \"./package-manager-types.ts\";\n\nfunction resourcePrecedenceRank(m: PathMetadata): number {\n\tif (m.origin === \"package\") return 4;\n\tif (m.borrowedProjectLocal) return 5;\n\tconst scopeBase = m.scope === \"project\" ? 0 : 2;\n\treturn scopeBase + (m.source === \"local\" ? 0 : 1);\n}\n\nexport function getTargetMap(accumulator: ResourceAccumulator, resourceType: ResourceType): ResourceMap {\n\tswitch (resourceType) {\n\t\tcase \"extensions\":\n\t\t\treturn accumulator.extensions;\n\t\tcase \"skills\":\n\t\t\treturn accumulator.skills;\n\t\tcase \"prompts\":\n\t\t\treturn accumulator.prompts;\n\t\tcase \"themes\":\n\t\t\treturn accumulator.themes;\n\t\tcase \"workflows\":\n\t\t\treturn accumulator.workflows;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown resource type: ${resourceType}`);\n\t}\n}\n\nexport function addResource(map: ResourceMap, path: string, metadata: PathMetadata, enabled: boolean): void {\n\tif (!path) return;\n\tif (!map.has(path)) {\n\t\tmap.set(path, { metadata, enabled });\n\t}\n}\n\nexport function createAccumulator(): ResourceAccumulator {\n\treturn {\n\t\textensions: new Map(),\n\t\tskills: new Map(),\n\t\tprompts: new Map(),\n\t\tthemes: new Map(),\n\t\tworkflows: new Map(),\n\t};\n}\n\nexport function toResolvedPaths(accumulator: ResourceAccumulator): ResolvedPaths {\n\tconst mapToResolved = (entries: ResourceMap): ResolvedResource[] => {\n\t\tconst resolved = Array.from(entries.entries()).map(([path, { metadata, enabled }]) => ({\n\t\t\tpath,\n\t\t\tenabled,\n\t\t\tmetadata,\n\t\t}));\n\t\tresolved.sort((a, b) => resourcePrecedenceRank(a.metadata) - resourcePrecedenceRank(b.metadata));\n\n\t\tconst seen = new Set<string>();\n\t\treturn resolved.filter((entry) => {\n\t\t\tconst canonicalPath = canonicalizePath(entry.path);\n\t\t\tif (seen.has(canonicalPath)) return false;\n\t\t\tseen.add(canonicalPath);\n\t\t\treturn true;\n\t\t});\n\t};\n\n\treturn {\n\t\textensions: mapToResolved(accumulator.extensions),\n\t\tskills: mapToResolved(accumulator.skills),\n\t\tprompts: mapToResolved(accumulator.prompts),\n\t\tthemes: mapToResolved(accumulator.themes),\n\t\tworkflows: mapToResolved(accumulator.workflows),\n\t};\n}\n"]}
1
+ {"version":3,"file":"package-manager-resource-accumulator.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-accumulator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,YAAY,EACZ,aAAa,EAEb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,MAAM,4BAA4B,CAAC;AASpC,wBAAgB,YAAY,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,GAAG,WAAW,CAetG;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAK1G;AAED,wBAAgB,iBAAiB,IAAI,mBAAmB,CAQvD;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,aAAa,CAyB/E"}
@@ -1 +1 @@
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"]}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-resource-files.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-files.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI9E,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AAC/C,KAAK,kBAAkB,GAAG,IAAI,GAAG,QAAQ,CAAC;AAqD1C,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,UAAO,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB/J;AAmCD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEtG;AAYD,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAaxF;AAuBD,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7E;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE5E;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAqBnF;AAED,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BhF;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIrG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIjE","sourcesContent":["import { access, readdir, readFile, stat } from \"node:fs/promises\";\nimport { dirname, join, relative, resolve, sep } from \"node:path\";\nimport ignore from \"ignore\";\nimport { yieldToEventLoopIfSlow } from \"../utils/event-loop.ts\";\nimport { getManifestFromPackageJson } from \"./package-manager-manifest.ts\";\nimport { toPosixPath } from \"./package-manager-resource-patterns.ts\";\nimport { FILE_PATTERNS, type ResourceType } from \"./package-manager-types.ts\";\n\nconst IGNORE_FILE_NAMES = [\".gitignore\", \".ignore\", \".fdignore\"];\nconst RESOURCE_DISCOVERY_YIELD_AFTER_MS = 8;\ntype IgnoreMatcher = ReturnType<typeof ignore>;\ntype SkillDiscoveryMode = \"pi\" | \"agents\";\n\ntype DirEntryInfo = {\n\tfullPath: string;\n\tisDir: boolean;\n\tisFile: boolean;\n};\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\nfunction prefixIgnorePattern(line: string, prefix: string): string | null {\n\tconst trimmed = line.trim();\n\tif (!trimmed || (trimmed.startsWith(\"#\") && !trimmed.startsWith(\"\\\\#\"))) return null;\n\tlet pattern = line;\n\tlet negated = false;\n\tif (pattern.startsWith(\"!\")) { negated = true; pattern = pattern.slice(1); }\n\telse if (pattern.startsWith(\"\\\\!\")) pattern = pattern.slice(1);\n\tif (pattern.startsWith(\"/\")) pattern = pattern.slice(1);\n\tconst prefixed = prefix ? `${prefix}${pattern}` : pattern;\n\treturn negated ? `!${prefixed}` : prefixed;\n}\n\nasync function addIgnoreRules(ig: IgnoreMatcher, dir: string, rootDir: string): Promise<void> {\n\tconst relativeDir = relative(rootDir, dir);\n\tconst prefix = relativeDir ? `${toPosixPath(relativeDir)}/` : \"\";\n\tfor (const filename of IGNORE_FILE_NAMES) {\n\t\ttry {\n\t\t\tconst content = await readFile(join(dir, filename), \"utf-8\");\n\t\t\tconst patterns = content\n\t\t\t\t.split(/\\r?\\n/)\n\t\t\t\t.map((line) => prefixIgnorePattern(line, prefix))\n\t\t\t\t.filter((line): line is string => Boolean(line));\n\t\t\tif (patterns.length > 0) ig.add(patterns);\n\t\t} catch {}\n\t}\n}\n\nasync function getEntryInfo(dir: string, name: string, isDirectory: boolean, isFileEntry: boolean, isSymlink: boolean): Promise<DirEntryInfo | null> {\n\tconst fullPath = join(dir, name);\n\tlet isDir = isDirectory;\n\tlet isFile = isFileEntry;\n\tif (isSymlink) {\n\t\ttry {\n\t\t\tconst stats = await stat(fullPath);\n\t\t\tisDir = stats.isDirectory();\n\t\t\tisFile = stats.isFile();\n\t\t} catch { return null; }\n\t}\n\treturn { fullPath, isDir, isFile };\n}\n\nexport async function collectFiles(dir: string, filePattern: RegExp, skipNodeModules = true, ignoreMatcher?: IgnoreMatcher, rootDir?: string): Promise<string[]> {\n\tconst files: string[] = [];\n\tif (!(await exists(dir))) return files;\n\tconst root = rootDir ?? dir;\n\tconst ig = ignoreMatcher ?? ignore();\n\tawait addIgnoreRules(ig, dir, root);\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_DISCOVERY_YIELD_AFTER_MS);\n\t\t\tif (entry.name.startsWith(\".\") || (skipNodeModules && entry.name === \"node_modules\")) continue;\n\t\t\tconst info = await getEntryInfo(dir, entry.name, entry.isDirectory(), entry.isFile(), entry.isSymbolicLink());\n\t\t\tif (!info) continue;\n\t\t\tconst relPath = toPosixPath(relative(root, info.fullPath));\n\t\t\tconst ignorePath = info.isDir ? `${relPath}/` : relPath;\n\t\t\tif (ig.ignores(ignorePath)) continue;\n\t\t\tif (info.isDir) files.push(...await collectFiles(info.fullPath, filePattern, skipNodeModules, ig, root));\n\t\t\telse if (info.isFile && filePattern.test(entry.name)) files.push(info.fullPath);\n\t\t}\n\t} catch {}\n\treturn files;\n}\n\nasync function collectSkillEntries(dir: string, mode: SkillDiscoveryMode, ignoreMatcher?: IgnoreMatcher, rootDir?: string): Promise<string[]> {\n\tconst entries: string[] = [];\n\tif (!(await exists(dir))) return entries;\n\tconst root = rootDir ?? dir;\n\tconst ig = ignoreMatcher ?? ignore();\n\tawait addIgnoreRules(ig, dir, root);\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst dirEntries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of dirEntries) {\n\t\t\tif (entry.name !== \"SKILL.md\") continue;\n\t\t\tconst info = await getEntryInfo(dir, entry.name, entry.isDirectory(), entry.isFile(), entry.isSymbolicLink());\n\t\t\tif (!info) continue;\n\t\t\tconst relPath = toPosixPath(relative(root, info.fullPath));\n\t\t\tif (info.isFile && !ig.ignores(relPath)) { entries.push(info.fullPath); return entries; }\n\t\t}\n\t\tfor (const entry of dirEntries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_DISCOVERY_YIELD_AFTER_MS);\n\t\t\tif (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\t\t\tconst info = await getEntryInfo(dir, entry.name, entry.isDirectory(), entry.isFile(), entry.isSymbolicLink());\n\t\t\tif (!info) continue;\n\t\t\tconst relPath = toPosixPath(relative(root, info.fullPath));\n\t\t\tif (mode === \"pi\" && dir === root && info.isFile && entry.name.endsWith(\".md\") && !ig.ignores(relPath)) {\n\t\t\t\tentries.push(info.fullPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!info.isDir || ig.ignores(`${relPath}/`)) continue;\n\t\t\tentries.push(...await collectSkillEntries(info.fullPath, mode, ig, root));\n\t\t}\n\t} catch {}\n\treturn entries;\n}\n\nexport async function collectAutoSkillEntries(dir: string, mode: SkillDiscoveryMode): Promise<string[]> {\n\treturn collectSkillEntries(dir, mode);\n}\n\nasync function findGitRepoRoot(startDir: string): Promise<string | null> {\n\tlet dir = resolve(startDir);\n\twhile (true) {\n\t\tif (await exists(join(dir, \".git\"))) return dir;\n\t\tconst parent = dirname(dir);\n\t\tif (parent === dir) return null;\n\t\tdir = parent;\n\t}\n}\n\nexport async function collectAncestorAgentsSkillDirs(startDir: string): Promise<string[]> {\n\tconst skillDirs: string[] = [];\n\tconst resolvedStartDir = resolve(startDir);\n\tconst gitRepoRoot = await findGitRepoRoot(resolvedStartDir);\n\tlet dir = resolvedStartDir;\n\twhile (true) {\n\t\tskillDirs.push(join(dir, \".agents\", \"skills\"));\n\t\tif (gitRepoRoot && dir === gitRepoRoot) break;\n\t\tconst parent = dirname(dir);\n\t\tif (parent === dir) break;\n\t\tdir = parent;\n\t}\n\treturn skillDirs;\n}\n\nasync function collectFlatEntries(dir: string, extension: string): Promise<string[]> {\n\tconst entries: string[] = [];\n\tif (!(await exists(dir))) return entries;\n\tconst ig = ignore();\n\tawait addIgnoreRules(ig, dir, dir);\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst dirEntries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of dirEntries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_DISCOVERY_YIELD_AFTER_MS);\n\t\t\tif (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\t\t\tconst info = await getEntryInfo(dir, entry.name, entry.isDirectory(), entry.isFile(), entry.isSymbolicLink());\n\t\t\tif (!info) continue;\n\t\t\tconst relPath = toPosixPath(relative(dir, info.fullPath));\n\t\t\tif (ig.ignores(relPath)) continue;\n\t\t\tif (info.isFile && entry.name.endsWith(extension)) entries.push(info.fullPath);\n\t\t}\n\t} catch {}\n\treturn entries;\n}\n\nexport async function collectAutoPromptEntries(dir: string): Promise<string[]> {\n\treturn collectFlatEntries(dir, \".md\");\n}\n\nexport async function collectAutoThemeEntries(dir: string): Promise<string[]> {\n\treturn collectFlatEntries(dir, \".json\");\n}\n\nexport async function resolveExtensionEntries(dir: string): Promise<string[] | null> {\n\tconst packageJsonPath = join(dir, \"package.json\");\n\tif (await exists(packageJsonPath)) {\n\t\ttry {\n\t\t\tconst pkg = JSON.parse(await readFile(packageJsonPath, \"utf-8\")) as Record<string, unknown>;\n\t\t\tconst manifest = getManifestFromPackageJson(pkg);\n\t\t\tif (manifest?.extensions?.length) {\n\t\t\t\tconst entries: string[] = [];\n\t\t\t\tfor (const extPath of manifest.extensions) {\n\t\t\t\t\tconst resolvedExtPath = resolve(dir, extPath);\n\t\t\t\t\tif (await exists(resolvedExtPath)) entries.push(resolvedExtPath);\n\t\t\t\t}\n\t\t\t\tif (entries.length > 0) return entries;\n\t\t\t}\n\t\t} catch {}\n\t}\n\tconst indexTs = join(dir, \"index.ts\");\n\tconst indexJs = join(dir, \"index.js\");\n\tif (await exists(indexTs)) return [indexTs];\n\tif (await exists(indexJs)) return [indexJs];\n\treturn null;\n}\n\nexport async function collectAutoExtensionEntries(dir: string): Promise<string[]> {\n\tconst entries: string[] = [];\n\tif (!(await exists(dir))) return entries;\n\tconst rootEntries = await resolveExtensionEntries(dir);\n\tif (rootEntries) return rootEntries;\n\tconst ig = ignore();\n\tawait addIgnoreRules(ig, dir, dir);\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst dirEntries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of dirEntries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_DISCOVERY_YIELD_AFTER_MS);\n\t\t\tif (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\t\t\tconst info = await getEntryInfo(dir, entry.name, entry.isDirectory(), entry.isFile(), entry.isSymbolicLink());\n\t\t\tif (!info) continue;\n\t\t\tconst relPath = toPosixPath(relative(dir, info.fullPath));\n\t\t\tconst ignorePath = info.isDir ? `${relPath}/` : relPath;\n\t\t\tif (ig.ignores(ignorePath)) continue;\n\t\t\tif (info.isFile && (entry.name.endsWith(\".ts\") || entry.name.endsWith(\".js\"))) entries.push(info.fullPath);\n\t\t\telse if (info.isDir) {\n\t\t\t\tconst resolvedEntries = await resolveExtensionEntries(info.fullPath);\n\t\t\t\tif (resolvedEntries) entries.push(...resolvedEntries);\n\t\t\t}\n\t\t}\n\t} catch {}\n\treturn entries;\n}\n\nexport async function collectResourceFiles(dir: string, resourceType: ResourceType): Promise<string[]> {\n\tif (resourceType === \"skills\") return collectSkillEntries(dir, \"pi\");\n\tif (resourceType === \"extensions\") return collectAutoExtensionEntries(dir);\n\treturn collectFiles(dir, FILE_PATTERNS[resourceType]);\n}\n\nexport function isPathUnder(target: string, root: string): boolean {\n\tconst resolvedRoot = resolve(root);\n\tconst resolvedTarget = resolve(target);\n\treturn resolvedTarget === resolvedRoot || resolvedTarget.startsWith(resolvedRoot.endsWith(sep) ? resolvedRoot : `${resolvedRoot}${sep}`);\n}\n"]}
1
+ {"version":3,"file":"package-manager-resource-files.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-files.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI9E,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AAC/C,KAAK,kBAAkB,GAAG,IAAI,GAAG,QAAQ,CAAC;AAqD1C,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,UAAO,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB/J;AAmCD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEtG;AAYD,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAaxF;AAuBD,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7E;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE5E;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAqBnF;AAED,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BhF;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIrG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-resource-patterns.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-patterns.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAWxF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA0BhG;AA+BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAiBnG;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAuClG","sourcesContent":["import { basename, dirname, relative, sep } from \"node:path\";\nimport { minimatch } from \"minimatch\";\n\nexport function toPosixPath(p: string): string {\n\treturn p.split(sep).join(\"/\");\n}\n\nexport function isPattern(s: string): boolean {\n\treturn s.startsWith(\"!\") || s.startsWith(\"+\") || s.startsWith(\"-\") || s.includes(\"*\") || s.includes(\"?\");\n}\n\nexport function isOverridePattern(s: string): boolean {\n\treturn s.startsWith(\"!\") || s.startsWith(\"+\") || s.startsWith(\"-\");\n}\n\nexport function hasGlobPattern(s: string): boolean {\n\treturn s.includes(\"*\") || s.includes(\"?\");\n}\n\nexport function splitPatterns(entries: string[]): { plain: string[]; patterns: string[] } {\n\tconst plain: string[] = [];\n\tconst patterns: string[] = [];\n\tfor (const entry of entries) {\n\t\tif (isPattern(entry)) {\n\t\t\tpatterns.push(entry);\n\t\t} else {\n\t\t\tplain.push(entry);\n\t\t}\n\t}\n\treturn { plain, patterns };\n}\n\nexport function matchesAnyPattern(filePath: string, patterns: string[], baseDir: string): boolean {\n\tconst rel = toPosixPath(relative(baseDir, filePath));\n\tconst name = basename(filePath);\n\tconst filePathPosix = toPosixPath(filePath);\n\tconst isSkillFile = name === \"SKILL.md\";\n\tconst parentDir = isSkillFile ? dirname(filePath) : undefined;\n\tconst parentRel = isSkillFile ? toPosixPath(relative(baseDir, parentDir!)) : undefined;\n\tconst parentName = isSkillFile ? basename(parentDir!) : undefined;\n\tconst parentDirPosix = isSkillFile ? toPosixPath(parentDir!) : undefined;\n\n\treturn patterns.some((pattern) => {\n\t\tconst normalizedPattern = toPosixPath(pattern);\n\t\tif (\n\t\t\tminimatch(rel, normalizedPattern) ||\n\t\t\tminimatch(name, normalizedPattern) ||\n\t\t\tminimatch(filePathPosix, normalizedPattern)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!isSkillFile) return false;\n\t\treturn (\n\t\t\tminimatch(parentRel!, normalizedPattern) ||\n\t\t\tminimatch(parentName!, normalizedPattern) ||\n\t\t\tminimatch(parentDirPosix!, normalizedPattern)\n\t\t);\n\t});\n}\n\nfunction normalizeExactPattern(pattern: string): string {\n\tconst normalized = pattern.startsWith(\"./\") || pattern.startsWith(\".\\\\\") ? pattern.slice(2) : pattern;\n\treturn toPosixPath(normalized);\n}\n\nfunction matchesAnyExactPattern(filePath: string, patterns: string[], baseDir: string): boolean {\n\tif (patterns.length === 0) return false;\n\tconst rel = toPosixPath(relative(baseDir, filePath));\n\tconst name = basename(filePath);\n\tconst filePathPosix = toPosixPath(filePath);\n\tconst isSkillFile = name === \"SKILL.md\";\n\tconst parentDir = isSkillFile ? dirname(filePath) : undefined;\n\tconst parentRel = isSkillFile ? toPosixPath(relative(baseDir, parentDir!)) : undefined;\n\tconst parentDirPosix = isSkillFile ? toPosixPath(parentDir!) : undefined;\n\n\treturn patterns.some((pattern) => {\n\t\tconst normalized = normalizeExactPattern(pattern);\n\t\tif (normalized === rel || normalized === filePathPosix) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!isSkillFile) return false;\n\t\treturn normalized === parentRel || normalized === parentDirPosix;\n\t});\n}\n\nfunction getOverridePatterns(entries: string[]): string[] {\n\treturn entries.filter((pattern) => pattern.startsWith(\"!\") || pattern.startsWith(\"+\") || pattern.startsWith(\"-\"));\n}\n\nexport function isEnabledByOverrides(filePath: string, patterns: string[], baseDir: string): boolean {\n\tconst overrides = getOverridePatterns(patterns);\n\tconst excludes = overrides.filter((pattern) => pattern.startsWith(\"!\")).map((pattern) => pattern.slice(1));\n\tconst forceIncludes = overrides.filter((pattern) => pattern.startsWith(\"+\")).map((pattern) => pattern.slice(1));\n\tconst forceExcludes = overrides.filter((pattern) => pattern.startsWith(\"-\")).map((pattern) => pattern.slice(1));\n\n\tlet enabled = true;\n\tif (excludes.length > 0 && matchesAnyPattern(filePath, excludes, baseDir)) {\n\t\tenabled = false;\n\t}\n\tif (forceIncludes.length > 0 && matchesAnyExactPattern(filePath, forceIncludes, baseDir)) {\n\t\tenabled = true;\n\t}\n\tif (forceExcludes.length > 0 && matchesAnyExactPattern(filePath, forceExcludes, baseDir)) {\n\t\tenabled = false;\n\t}\n\treturn enabled;\n}\n\nexport function applyPatterns(allPaths: string[], patterns: string[], baseDir: string): Set<string> {\n\tconst includes: string[] = [];\n\tconst excludes: string[] = [];\n\tconst forceIncludes: string[] = [];\n\tconst forceExcludes: string[] = [];\n\n\tfor (const p of patterns) {\n\t\tif (p.startsWith(\"+\")) {\n\t\t\tforceIncludes.push(p.slice(1));\n\t\t} else if (p.startsWith(\"-\")) {\n\t\t\tforceExcludes.push(p.slice(1));\n\t\t} else if (p.startsWith(\"!\")) {\n\t\t\texcludes.push(p.slice(1));\n\t\t} else {\n\t\t\tincludes.push(p);\n\t\t}\n\t}\n\n\tlet result: string[];\n\tif (includes.length === 0) {\n\t\tresult = [...allPaths];\n\t} else {\n\t\tresult = allPaths.filter((filePath) => matchesAnyPattern(filePath, includes, baseDir));\n\t}\n\tif (excludes.length > 0) {\n\t\tresult = result.filter((filePath) => !matchesAnyPattern(filePath, excludes, baseDir));\n\t}\n\tif (forceIncludes.length > 0) {\n\t\tfor (const filePath of allPaths) {\n\t\t\tif (!result.includes(filePath) && matchesAnyExactPattern(filePath, forceIncludes, baseDir)) {\n\t\t\t\tresult.push(filePath);\n\t\t\t}\n\t\t}\n\t}\n\tif (forceExcludes.length > 0) {\n\t\tresult = result.filter((filePath) => !matchesAnyExactPattern(filePath, forceExcludes, baseDir));\n\t}\n\n\treturn new Set(result);\n}\n"]}
1
+ {"version":3,"file":"package-manager-resource-patterns.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-patterns.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAWxF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA0BhG;AA+BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAiBnG;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAuClG"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-settings.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-settings.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAe,MAAM,4BAA4B,CAAC;AAExG,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CA6BT;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAcT;AAED,wBAAgB,gBAAgB,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CA0B1F","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { getExistingGitInstallPath } from \"./package-manager-git.ts\";\nimport { getExistingNpmInstallPath } from \"./package-manager-npm.ts\";\nimport {\n\tgetPackageSourceString,\n\tnormalizePackageSourceForSettings,\n\tpackageSourcesMatch,\n\tparseSource,\n} from \"./package-manager-source.ts\";\nimport type { ConfiguredPackage, PackageManagerContext, SourceScope } from \"./package-manager-types.ts\";\n\nexport function addSourceToSettings(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\toptions?: { local?: boolean },\n): boolean {\n\tconst scope: SourceScope = options?.local ? \"project\" : \"user\";\n\tconst currentSettings =\n\t\tscope === \"project\" ? context.settingsManager.getProjectSettings() : context.settingsManager.getGlobalSettings();\n\tconst currentPackages = currentSettings.packages ?? [];\n\tconst normalizedSource = normalizePackageSourceForSettings(context, source, scope);\n\tconst matchIndex = currentPackages.findIndex((existing) => packageSourcesMatch(context, existing, source, scope));\n\tif (matchIndex !== -1) {\n\t\tconst existing = currentPackages[matchIndex];\n\t\tif (getPackageSourceString(existing) === normalizedSource) {\n\t\t\treturn false;\n\t\t}\n\t\tconst nextPackages = [...currentPackages];\n\t\tnextPackages[matchIndex] = typeof existing === \"string\" ? normalizedSource : { ...existing, source: normalizedSource };\n\t\tif (scope === \"project\") {\n\t\t\tcontext.settingsManager.setProjectPackages(nextPackages);\n\t\t} else {\n\t\t\tcontext.settingsManager.setPackages(nextPackages);\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst nextPackages = [...currentPackages, normalizedSource];\n\tif (scope === \"project\") {\n\t\tcontext.settingsManager.setProjectPackages(nextPackages);\n\t} else {\n\t\tcontext.settingsManager.setPackages(nextPackages);\n\t}\n\treturn true;\n}\n\nexport function removeSourceFromSettings(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\toptions?: { local?: boolean },\n): boolean {\n\tconst scope: SourceScope = options?.local ? \"project\" : \"user\";\n\tconst currentSettings =\n\t\tscope === \"project\" ? context.settingsManager.getProjectSettings() : context.settingsManager.getGlobalSettings();\n\tconst currentPackages = currentSettings.packages ?? [];\n\tconst nextPackages = currentPackages.filter((existing) => !packageSourcesMatch(context, existing, source, scope));\n\tconst changed = nextPackages.length !== currentPackages.length;\n\tif (!changed) return false;\n\tif (scope === \"project\") {\n\t\tcontext.settingsManager.setProjectPackages(nextPackages);\n\t} else {\n\t\tcontext.settingsManager.setPackages(nextPackages);\n\t}\n\treturn true;\n}\n\nexport function getInstalledPath(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\tscope: \"user\" | \"project\",\n): string | undefined {\n\tconst parsed = parseSource(source);\n\tif (parsed.type === \"npm\") {\n\t\treturn getExistingNpmInstallPath(context, parsed, scope);\n\t}\n\tif (parsed.type === \"git\") {\n\t\treturn getExistingGitInstallPath(context, parsed, scope);\n\t}\n\tfor (const baseDir of getBaseDirsForScope(context, scope)) {\n\t\tconst path = resolvePathFromBase(parsed.path, baseDir);\n\t\tif (existsSync(path)) return path;\n\t}\n\treturn undefined;\n}\n\nexport function listConfiguredPackages(context: PackageManagerContext): ConfiguredPackage[] {\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst configuredPackages: ConfiguredPackage[] = [];\n\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tconst source = getPackageSourceString(pkg);\n\t\tconfiguredPackages.push({\n\t\t\tsource,\n\t\t\tscope: \"user\",\n\t\t\tfiltered: typeof pkg === \"object\",\n\t\t\tinstalledPath: getInstalledPath(context, source, \"user\"),\n\t\t});\n\t}\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tconst source = getPackageSourceString(pkg);\n\t\tconfiguredPackages.push({\n\t\t\tsource,\n\t\t\tscope: \"project\",\n\t\t\tfiltered: typeof pkg === \"object\",\n\t\t\tinstalledPath: getInstalledPath(context, source, \"project\"),\n\t\t});\n\t}\n\n\treturn configuredPackages;\n}\n\n"]}
1
+ {"version":3,"file":"package-manager-settings.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-settings.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAe,MAAM,4BAA4B,CAAC;AAExG,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CA6BT;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAcT;AAED,wBAAgB,gBAAgB,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CA0B1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-source.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAU3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAS7E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAwBxD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAEjE;AA6BD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,WAAW,GAChB,OAAO,CAIT;AAED,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GAChB,MAAM,CASR;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAa9G;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,GACzD,KAAK,CAAC;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAenD;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,aAAa,EAAE,GACjC,MAAM,CAMR;AA+BD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAIrG","sourcesContent":["import { relative } from \"node:path\";\nimport { valid, validRange } from \"semver\";\nimport { isLocalPath } from \"../utils/paths.ts\";\nimport { parseGitUrl } from \"../utils/git.ts\";\nimport { getBaseDirForScope, resolveManagerPath, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport type { PackageManagerContext, ParsedSource, SourceScope } from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nfunction isExactNpmVersion(version: string | undefined): boolean {\n\treturn valid(version ?? \"\") !== null;\n}\n\nfunction getNpmVersionRange(version: string | undefined): string | undefined {\n\treturn version ? (validRange(version) ?? undefined) : undefined;\n}\n\nexport function parseNpmSpec(spec: string): { name: string; version?: string } {\n\tconst versionSeparator = spec.startsWith(\"@\") ? spec.indexOf(\"@\", spec.indexOf(\"/\") + 1) : spec.indexOf(\"@\");\n\tif (versionSeparator <= 0) {\n\t\treturn { name: spec };\n\t}\n\treturn {\n\t\tname: spec.slice(0, versionSeparator),\n\t\tversion: spec.slice(versionSeparator + 1),\n\t};\n}\n\nexport function parseSource(source: string): ParsedSource {\n\tif (source.startsWith(\"npm:\")) {\n\t\tconst spec = source.slice(\"npm:\".length).trim();\n\t\tconst { name, version } = parseNpmSpec(spec);\n\t\treturn {\n\t\t\ttype: \"npm\",\n\t\t\tspec,\n\t\t\tname,\n\t\t\tversion,\n\t\t\trange: getNpmVersionRange(version),\n\t\t\tpinned: isExactNpmVersion(version),\n\t\t};\n\t}\n\n\tif (isLocalPath(source)) {\n\t\treturn { type: \"local\", path: source };\n\t}\n\n\tconst gitParsed = parseGitUrl(source);\n\tif (gitParsed) {\n\t\treturn gitParsed;\n\t}\n\n\treturn { type: \"local\", path: source };\n}\n\nexport function getPackageSourceString(pkg: PackageSource): string {\n\treturn typeof pkg === \"string\" ? pkg : pkg.source;\n}\n\nfunction getSourceMatchKeyForInput(context: PackageManagerContext, source: string): string {\n\tconst parsed = parseSource(source);\n\tif (parsed.type === \"npm\") {\n\t\treturn `npm:${parsed.name}`;\n\t}\n\tif (parsed.type === \"git\") {\n\t\treturn `git:${parsed.host}/${parsed.path}`;\n\t}\n\treturn `local:${resolveManagerPath(context, parsed.path)}`;\n}\n\nfunction getSourceMatchKeyForSettings(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\tscope: SourceScope,\n): string {\n\tconst parsed = parseSource(source);\n\tif (parsed.type === \"npm\") {\n\t\treturn `npm:${parsed.name}`;\n\t}\n\tif (parsed.type === \"git\") {\n\t\treturn `git:${parsed.host}/${parsed.path}`;\n\t}\n\tconst baseDir = getBaseDirForScope(context, scope);\n\treturn `local:${resolvePathFromBase(parsed.path, baseDir)}`;\n}\n\nexport function packageSourcesMatch(\n\tcontext: PackageManagerContext,\n\texisting: PackageSource,\n\tinputSource: string,\n\tscope: SourceScope,\n): boolean {\n\tconst left = getSourceMatchKeyForSettings(context, getPackageSourceString(existing), scope);\n\tconst right = getSourceMatchKeyForInput(context, inputSource);\n\treturn left === right;\n}\n\nexport function normalizePackageSourceForSettings(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\tscope: SourceScope,\n): string {\n\tconst parsed = parseSource(source);\n\tif (parsed.type !== \"local\") {\n\t\treturn source;\n\t}\n\tconst baseDir = getBaseDirForScope(context, scope);\n\tconst resolved = resolveManagerPath(context, parsed.path);\n\tconst rel = relative(baseDir, resolved);\n\treturn rel || \".\";\n}\n\nexport function getPackageIdentity(context: PackageManagerContext, source: string, scope?: SourceScope): string {\n\tconst parsed = parseSource(source);\n\tif (parsed.type === \"npm\") {\n\t\treturn `npm:${parsed.name}`;\n\t}\n\tif (parsed.type === \"git\") {\n\t\treturn `git:${parsed.host}/${parsed.path}`;\n\t}\n\tif (scope) {\n\t\tconst baseDir = getBaseDirForScope(context, scope);\n\t\treturn `local:${resolvePathFromBase(parsed.path, baseDir)}`;\n\t}\n\treturn `local:${resolveManagerPath(context, parsed.path)}`;\n}\n\nexport function dedupePackages(\n\tcontext: PackageManagerContext,\n\tpackages: Array<{ pkg: PackageSource; scope: SourceScope }>,\n): Array<{ pkg: PackageSource; scope: SourceScope }> {\n\tconst seen = new Map<string, { pkg: PackageSource; scope: SourceScope }>();\n\n\tfor (const entry of packages) {\n\t\tconst sourceStr = getPackageSourceString(entry.pkg);\n\t\tconst identity = getPackageIdentity(context, sourceStr, entry.scope);\n\t\tconst existing = seen.get(identity);\n\t\tif (!existing) {\n\t\t\tseen.set(identity, entry);\n\t\t} else if (entry.scope === \"project\" && existing.scope === \"user\") {\n\t\t\tseen.set(identity, entry);\n\t\t}\n\t}\n\n\treturn Array.from(seen.values());\n}\n\nexport function buildNoMatchingPackageMessage(\n\tcontext: PackageManagerContext,\n\tsource: string,\n\tconfiguredPackages: PackageSource[],\n): string {\n\tconst suggestion = findSuggestedConfiguredSource(context, source, configuredPackages);\n\tif (!suggestion) {\n\t\treturn `No matching package found for ${source}`;\n\t}\n\treturn `No matching package found for ${source}. Did you mean ${suggestion}?`;\n}\n\nfunction findSuggestedConfiguredSource(\n\t_context: PackageManagerContext,\n\tsource: string,\n\tconfiguredPackages: PackageSource[],\n): string | undefined {\n\tconst trimmedSource = source.trim();\n\tconst suggestions = new Set<string>();\n\n\tfor (const pkg of configuredPackages) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst parsed = parseSource(sourceStr);\n\t\tif (parsed.type === \"npm\") {\n\t\t\tif (trimmedSource === parsed.name || trimmedSource === parsed.spec) {\n\t\t\t\tsuggestions.add(sourceStr);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (parsed.type === \"git\") {\n\t\t\tconst shorthand = `${parsed.host}/${parsed.path}`;\n\t\t\tconst shorthandWithRef = parsed.ref ? `${shorthand}@${parsed.ref}` : undefined;\n\t\t\tif (trimmedSource === shorthand || (shorthandWithRef && trimmedSource === shorthandWithRef)) {\n\t\t\t\tsuggestions.add(sourceStr);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn suggestions.values().next().value;\n}\n\nexport function assertProjectTrustedForScope(context: PackageManagerContext, scope: SourceScope): void {\n\tif (scope === \"project\" && !context.settingsManager.isProjectTrusted()) {\n\t\tthrow new Error(\"Project is not trusted; refusing to access project package storage\");\n\t}\n}\n\n"]}
1
+ {"version":3,"file":"package-manager-source.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAU3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAS7E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAwBxD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAEjE;AA6BD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,WAAW,GAChB,OAAO,CAIT;AAED,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GAChB,MAAM,CASR;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAa9G;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,GACzD,KAAK,CAAC;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAenD;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,aAAa,EAAE,GACjC,MAAM,CAMR;AA+BD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAIrG"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-types.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GitSource } from \"../utils/git.ts\";\nimport type { PackageSource, SettingsManager } from \"./settings-manager.ts\";\n\nexport interface PathMetadata {\n\tsource: string;\n\tscope: SourceScope;\n\torigin: \"package\" | \"top-level\";\n\tbaseDir?: string;\n\t/** True for project-local resources borrowed from an explicit temporary extension source. */\n\tborrowedProjectLocal?: true;\n}\n\nexport interface ResolvedResource {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n}\n\nexport interface ResolvedPaths {\n\textensions: ResolvedResource[];\n\tskills: ResolvedResource[];\n\tprompts: ResolvedResource[];\n\tthemes: ResolvedResource[];\n\tworkflows: ResolvedResource[];\n}\n\nexport type MissingSourceAction = \"install\" | \"skip\" | \"error\";\n\nexport interface ProgressEvent {\n\ttype: \"start\" | \"progress\" | \"complete\" | \"error\";\n\taction: \"install\" | \"remove\" | \"update\" | \"clone\" | \"pull\";\n\tsource: string;\n\tmessage?: string;\n}\n\nexport type ProgressCallback = (event: ProgressEvent) => void;\n\nexport interface PackageUpdate {\n\tsource: string;\n\tdisplayName: string;\n\ttype: \"npm\" | \"git\";\n\tscope: Exclude<SourceScope, \"temporary\">;\n}\n\nexport interface ConfiguredPackage {\n\tsource: string;\n\tscope: \"user\" | \"project\";\n\tfiltered: boolean;\n\tinstalledPath?: string;\n}\n\nexport interface PackageManager {\n\tresolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths>;\n\tinstall(source: string, options?: { local?: boolean }): Promise<void>;\n\tinstallAndPersist(source: string, options?: { local?: boolean }): Promise<void>;\n\tremove(source: string, options?: { local?: boolean }): Promise<void>;\n\tremoveAndPersist(source: string, options?: { local?: boolean }): Promise<boolean>;\n\tupdate(source?: string): Promise<void>;\n\tlistConfiguredPackages(): ConfiguredPackage[];\n\tresolveExtensionSources(sources: PackageSource[], options?: ResolveExtensionSourcesOptions): Promise<ResolvedPaths>;\n\taddSourceToSettings(source: string, options?: { local?: boolean }): boolean;\n\tremoveSourceFromSettings(source: string, options?: { local?: boolean }): boolean;\n\tsetProgressCallback(callback: ProgressCallback | undefined): void;\n\tgetInstalledPath(source: string, scope: \"user\" | \"project\"): string | undefined;\n}\n\nexport interface PackageManagerOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n}\n\nexport interface GitUpdateTargetInfo {\n\tref: string;\n\thead: string;\n\tfetchArgs: string[];\n}\n\nexport interface PackageManagerDriver {\n\trunCommand(command: string, args: string[], options?: { cwd?: string }): Promise<void>;\n\trunCommandCapture(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n\t): Promise<string>;\n\trunCommandSync(command: string, args: string[]): string;\n\tinstallParsedSource(parsed: ParsedSource, scope: SourceScope): Promise<void>;\n\tupdateGit(source: GitSource, scope: SourceScope): Promise<void>;\n\tgitHasAvailableUpdate(installedPath: string): Promise<boolean>;\n\trefreshTemporaryGitSource(source: GitSource, sourceStr: string): Promise<void>;\n\tgetLocalGitUpdateTarget(installedPath: string): Promise<GitUpdateTargetInfo>;\n\tgetGlobalNpmRoot(): string;\n\tparseSource(source: string): ParsedSource;\n\tgetPackageIdentity(source: string, scope?: SourceScope): string;\n\tgetGitInstallPath(source: GitSource, scope: SourceScope): string;\n\tgetLatestNpmVersion(packageSpec: string, range?: string): Promise<string>;\n}\n\nexport interface PackageManagerContext {\n\tcwd: string;\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n\tglobalNpmRoot?: string;\n\tglobalNpmRootCommandKey?: string;\n\tprogressCallback?: ProgressCallback;\n\tdriver?: PackageManagerDriver;\n}\n\nexport type SourceScope = \"user\" | \"project\" | \"temporary\";\n\nexport type NpmSource = {\n\ttype: \"npm\";\n\tspec: string;\n\tname: string;\n\tversion?: string;\n\trange?: string;\n\tpinned: boolean;\n};\n\nexport type LocalSource = {\n\ttype: \"local\";\n\tpath: string;\n};\n\nexport type ParsedSource = NpmSource | GitSource | LocalSource;\n\nexport type InstalledSourceScope = Exclude<SourceScope, \"temporary\">;\n\nexport interface ConfiguredUpdateSource {\n\tsource: string;\n\tscope: InstalledSourceScope;\n}\n\nexport interface NpmUpdateTarget extends ConfiguredUpdateSource {\n\tparsed: NpmSource;\n}\n\nexport interface GitUpdateTarget extends ConfiguredUpdateSource {\n\tparsed: GitSource;\n}\n\nexport interface PiManifest {\n\textensions?: string[];\n\tskills?: string[];\n\tprompts?: string[];\n\tthemes?: string[];\n\tworkflows?: string[];\n\tworkflow?: string[];\n}\n\nexport type ResourceType = \"extensions\" | \"skills\" | \"prompts\" | \"themes\" | \"workflows\";\n\nexport const RESOURCE_TYPES: ResourceType[] = [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"];\n\nexport const FILE_PATTERNS: Record<ResourceType, RegExp> = {\n\textensions: /\\.(ts|js)$/,\n\tskills: /\\.md$/,\n\tprompts: /\\.md$/,\n\tthemes: /\\.json$/,\n\tworkflows: /\\.(ts|js|mjs|cjs)$/,\n};\n\nexport type ResourceEntry = { metadata: PathMetadata; enabled: boolean };\nexport type ResourceMap = Map<string, ResourceEntry>;\n\nexport interface ResourceAccumulator {\n\textensions: ResourceMap;\n\tskills: ResourceMap;\n\tprompts: ResourceMap;\n\tthemes: ResourceMap;\n\tworkflows: ResourceMap;\n}\n\nexport interface PackageFilter {\n\textensions?: string[];\n\tskills?: string[];\n\tprompts?: string[];\n\tthemes?: string[];\n\tworkflows?: string[];\n}\n\nexport interface ResolveExtensionSourcesOptions {\n\tlocal?: boolean;\n\ttemporary?: boolean;\n\tincludeProjectLocalResources?: boolean;\n}\n"]}
1
+ {"version":3,"file":"package-manager-types.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/core/package-manager.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EACX,iBAAiB,EAEjB,mBAAmB,EACnB,cAAc,EAEd,qBAAqB,EACrB,aAAa,EAEb,gBAAgB,EAChB,aAAa,EACb,8BAA8B,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,YAAY,EACX,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,8BAA8B,GAC9B,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,qBAAsB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,YAAY,OAAO,EAAE,qBAAqB,EAqBzC;IAED,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAEhE;IAED,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAE1E;IAED,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAE/E;IAED,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9E;IAEK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAElG;IAEK,uBAAuB,CAC5B,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE,8BAA8B,GACtC,OAAO,CAAC,aAAa,CAAC,CAExB;IAED,sBAAsB,IAAI,iBAAiB,EAAE,CAE5C;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;IAEK,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;IAEK,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtF;IAEK,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3C;IAEK,wBAAwB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAEzD;IAED,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,iBAAiB;YAIX,mBAAmB;YAInB,SAAS;YAIT,qBAAqB;YAIrB,yBAAyB;YAIzB,uBAAuB;IAIrC,OAAO,CAAC,gBAAgB;YAIV,mBAAmB;IAIjC,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,iBAAiB;IA4CzB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;CAatB","sourcesContent":["import type { ChildProcess, ChildProcessByStdio } from \"node:child_process\";\nimport type { Readable } from \"node:stream\";\nimport { spawnProcess, spawnProcessSync } from \"../utils/child-process.ts\";\nimport type { GitSource } from \"../utils/git.ts\";\nimport { resolvePath as resolveAbsolutePath } from \"../utils/paths.ts\";\nimport { isStdoutTakenOver } from \"./output-guard.ts\";\nimport { getCommandEnv } from \"./package-manager-env.ts\";\nimport { getLocalGitUpdateTarget as getLocalGitUpdateTargetFromContext } from \"./package-manager-git.ts\";\nimport {\n\tgetGitInstallPath as getGitInstallPathFromContext,\n} from \"./package-manager-paths.ts\";\nimport {\n\tgetGlobalNpmRoot as getGlobalNpmRootFromContext,\n\tgetLatestNpmVersion as getLatestNpmVersionFromContext,\n} from \"./package-manager-npm.ts\";\nimport {\n\tcheckForAvailableUpdates as checkForAvailableUpdatesFromContext,\n\tinstall as installFromContext,\n\tinstallParsedSource as installParsedSourceFromContext,\n\tremove as removeFromContext,\n\tupdate as updateFromContext,\n} from \"./package-manager-operations.ts\";\nimport {\n\tresolveExtensionSources as resolveExtensionSourcesFromContext,\n\tresolvePackages,\n} from \"./package-manager-resolver.ts\";\nimport {\n\taddSourceToSettings as addSourceToSettingsInContext,\n\tgetInstalledPath as getInstalledPathFromContext,\n\tlistConfiguredPackages as listConfiguredPackagesFromContext,\n\tremoveSourceFromSettings as removeSourceFromSettingsInContext,\n} from \"./package-manager-settings.ts\";\nimport {\n\tgetPackageIdentity as getPackageIdentityFromContext,\n\tparseSource as parsePackageSource,\n} from \"./package-manager-source.ts\";\nimport {\n\tgitHasAvailableUpdate as gitHasAvailableUpdateFromContext,\n\trefreshTemporaryGitSource as refreshTemporaryGitSourceFromContext,\n\tupdateGit as updateGitFromContext,\n} from \"./package-manager-git.ts\";\nimport type {\n\tConfiguredPackage,\n\tGitUpdateTargetInfo,\n\tMissingSourceAction,\n\tPackageManager,\n\tPackageManagerContext,\n\tPackageManagerOptions,\n\tPackageUpdate,\n\tParsedSource,\n\tProgressCallback,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nexport type {\n\tConfiguredPackage,\n\tMissingSourceAction,\n\tPackageManager,\n\tPackageManagerOptions,\n\tPackageUpdate,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n\tResolveExtensionSourcesOptions,\n} from \"./package-manager-types.ts\";\n\nexport class DefaultPackageManager implements PackageManager {\n\tprivate readonly context: PackageManagerContext;\n\n\tconstructor(options: PackageManagerOptions) {\n\t\tthis.context = {\n\t\t\tcwd: resolveAbsolutePath(options.cwd),\n\t\t\tagentDir: resolveAbsolutePath(options.agentDir),\n\t\t\tsettingsManager: options.settingsManager,\n\t\t};\n\t\tthis.context.driver = {\n\t\t\trunCommand: (command, args, runOptions) => this.runCommand(command, args, runOptions),\n\t\t\trunCommandCapture: (command, args, runOptions) => this.runCommandCapture(command, args, runOptions),\n\t\t\trunCommandSync: (command, args) => this.runCommandSync(command, args),\n\t\t\tinstallParsedSource: (parsed, scope) => this.installParsedSource(parsed, scope),\n\t\t\tupdateGit: (source, scope) => this.updateGit(source, scope),\n\t\t\tgitHasAvailableUpdate: (installedPath) => this.gitHasAvailableUpdate(installedPath),\n\t\t\trefreshTemporaryGitSource: (source, sourceStr) => this.refreshTemporaryGitSource(source, sourceStr),\n\t\t\tgetLocalGitUpdateTarget: (installedPath) => this.getLocalGitUpdateTarget(installedPath),\n\t\t\tgetGlobalNpmRoot: () => this.getGlobalNpmRoot(),\n\t\t\tparseSource: (source) => this.parseSource(source),\n\t\t\tgetPackageIdentity: (source, scope) => this.getPackageIdentity(source, scope),\n\t\t\tgetGitInstallPath: (source, scope) => this.getGitInstallPath(source, scope),\n\t\t\tgetLatestNpmVersion: (packageSpec, range) => this.getLatestNpmVersion(packageSpec, range),\n\t\t};\n\t}\n\n\tsetProgressCallback(callback: ProgressCallback | undefined): void {\n\t\tthis.context.progressCallback = callback;\n\t}\n\n\taddSourceToSettings(source: string, options?: { local?: boolean }): boolean {\n\t\treturn addSourceToSettingsInContext(this.context, source, options);\n\t}\n\n\tremoveSourceFromSettings(source: string, options?: { local?: boolean }): boolean {\n\t\treturn removeSourceFromSettingsInContext(this.context, source, options);\n\t}\n\n\tgetInstalledPath(source: string, scope: \"user\" | \"project\"): string | undefined {\n\t\treturn getInstalledPathFromContext(this.context, source, scope);\n\t}\n\n\tasync resolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths> {\n\t\treturn resolvePackages(this.context, onMissing);\n\t}\n\n\tasync resolveExtensionSources(\n\t\tsources: PackageSource[],\n\t\toptions?: ResolveExtensionSourcesOptions,\n\t): Promise<ResolvedPaths> {\n\t\treturn resolveExtensionSourcesFromContext(this.context, sources, options);\n\t}\n\n\tlistConfiguredPackages(): ConfiguredPackage[] {\n\t\treturn listConfiguredPackagesFromContext(this.context);\n\t}\n\n\tasync install(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait installFromContext(this.context, source, options);\n\t}\n\n\tasync installAndPersist(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait this.install(source, options);\n\t\tthis.addSourceToSettings(source, options);\n\t}\n\n\tasync remove(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait removeFromContext(this.context, source, options);\n\t}\n\n\tasync removeAndPersist(source: string, options?: { local?: boolean }): Promise<boolean> {\n\t\tawait this.remove(source, options);\n\t\treturn this.removeSourceFromSettings(source, options);\n\t}\n\n\tasync update(source?: string): Promise<void> {\n\t\tawait updateFromContext(this.context, source);\n\t}\n\n\tasync checkForAvailableUpdates(): Promise<PackageUpdate[]> {\n\t\treturn checkForAvailableUpdatesFromContext(this.context);\n\t}\n\n\tprivate parseSource(source: string): ParsedSource {\n\t\treturn parsePackageSource(source);\n\t}\n\n\tprivate getPackageIdentity(source: string, scope?: SourceScope): string {\n\t\treturn getPackageIdentityFromContext(this.context, source, scope);\n\t}\n\n\tprivate getGitInstallPath(source: GitSource, scope: SourceScope): string {\n\t\treturn getGitInstallPathFromContext(this.context, source, scope);\n\t}\n\n\tprivate async installParsedSource(parsed: ParsedSource, scope: SourceScope): Promise<void> {\n\t\tawait installParsedSourceFromContext(this.context, parsed, scope);\n\t}\n\n\tprivate async updateGit(source: GitSource, scope: SourceScope): Promise<void> {\n\t\tawait updateGitFromContext(this.context, source, scope);\n\t}\n\n\tprivate async gitHasAvailableUpdate(installedPath: string): Promise<boolean> {\n\t\treturn gitHasAvailableUpdateFromContext(this.context, installedPath);\n\t}\n\n\tprivate async refreshTemporaryGitSource(source: GitSource, sourceStr: string): Promise<void> {\n\t\tawait refreshTemporaryGitSourceFromContext(this.context, source, sourceStr);\n\t}\n\n\tprivate async getLocalGitUpdateTarget(installedPath: string): Promise<GitUpdateTargetInfo> {\n\t\treturn getLocalGitUpdateTargetFromContext(this.context, installedPath);\n\t}\n\n\tprivate getGlobalNpmRoot(): string {\n\t\treturn getGlobalNpmRootFromContext(this.context);\n\t}\n\n\tprivate async getLatestNpmVersion(packageSpec: string, range?: string): Promise<string> {\n\t\treturn getLatestNpmVersionFromContext(this.context, packageSpec, range);\n\t}\n\n\tprivate spawnCommand(command: string, args: string[], options?: { cwd?: string }): ChildProcess {\n\t\treturn spawnProcess(command, args, {\n\t\t\tcwd: options?.cwd,\n\t\t\tstdio: isStdoutTakenOver() ? [\"ignore\", 2, 2] : \"inherit\",\n\t\t\tenv: getCommandEnv(command),\n\t\t});\n\t}\n\n\tprivate spawnCaptureCommand(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; env?: Record<string, string> },\n\t): ChildProcessByStdio<null, Readable, Readable> {\n\t\treturn spawnProcess(command, args, {\n\t\t\tcwd: options?.cwd,\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\tenv: getCommandEnv(command, options?.env),\n\t\t});\n\t}\n\n\tprivate runCommandCapture(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n\t): Promise<string> {\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tconst child = this.spawnCaptureCommand(command, args, options);\n\t\t\tlet stdout = \"\";\n\t\t\tlet stderr = \"\";\n\t\t\tlet timedOut = false;\n\t\t\tconst timeout =\n\t\t\t\ttypeof options?.timeoutMs === \"number\"\n\t\t\t\t\t? setTimeout(() => {\n\t\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\t\tchild.kill();\n\t\t\t\t\t\t}, options.timeoutMs)\n\t\t\t\t\t: undefined;\n\n\t\t\tchild.stdout?.on(\"data\", (data) => {\n\t\t\t\tstdout += data.toString();\n\t\t\t});\n\t\t\tchild.stderr?.on(\"data\", (data) => {\n\t\t\t\tstderr += data.toString();\n\t\t\t});\n\t\t\tchild.once(\"error\", (error) => {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t\tchild.once(\"close\", (code, signal) => {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\tif (timedOut) {\n\t\t\t\t\treject(new Error(`${command} ${args.join(\" \")} timed out after ${options?.timeoutMs}ms`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (code === 0) {\n\t\t\t\t\tresolvePromise(stdout.trim());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst exitStatus = code === null ? `signal ${signal ?? \"unknown\"}` : `code ${code}`;\n\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with ${exitStatus}: ${stderr || stdout}`));\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate runCommand(command: string, args: string[], options?: { cwd?: string }): Promise<void> {\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tconst child = this.spawnCommand(command, args, options);\n\t\t\tchild.on(\"error\", reject);\n\t\t\tchild.on(\"exit\", (code) => {\n\t\t\t\tif (code === 0) {\n\t\t\t\t\tresolvePromise();\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with code ${code}`));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate runCommandSync(command: string, args: string[]): string {\n\t\tconst result = spawnProcessSync(command, args, {\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\tencoding: \"utf-8\",\n\t\t\tenv: getCommandEnv(command),\n\t\t});\n\t\tif (result.error || result.status !== 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to run ${command} ${args.join(\" \")}: ${result.error?.message || result.stderr || result.stdout}`,\n\t\t\t);\n\t\t}\n\t\treturn (result.stdout || result.stderr || \"\").trim();\n\t}\n}\n"]}
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/core/package-manager.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EACX,iBAAiB,EAEjB,mBAAmB,EACnB,cAAc,EAEd,qBAAqB,EACrB,aAAa,EAEb,gBAAgB,EAChB,aAAa,EACb,8BAA8B,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,YAAY,EACX,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,8BAA8B,GAC9B,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,qBAAsB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,YAAY,OAAO,EAAE,qBAAqB,EAqBzC;IAED,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAEhE;IAED,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAE1E;IAED,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAE/E;IAED,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9E;IAEK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAElG;IAEK,uBAAuB,CAC5B,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE,8BAA8B,GACtC,OAAO,CAAC,aAAa,CAAC,CAExB;IAED,sBAAsB,IAAI,iBAAiB,EAAE,CAE5C;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;IAEK,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;IAEK,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtF;IAEK,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3C;IAEK,wBAAwB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAEzD;IAED,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,iBAAiB;YAIX,mBAAmB;YAInB,SAAS;YAIT,qBAAqB;YAIrB,yBAAyB;YAIzB,uBAAuB;IAIrC,OAAO,CAAC,gBAAgB;YAIV,mBAAmB;IAIjC,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,iBAAiB;IA4CzB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;CAatB"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-trust.d.ts","sourceRoot":"","sources":["../../src/core/project-trust.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAIN,KAAK,iBAAiB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,4BAA4B;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAyBD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,CAkDnG","sourcesContent":["import { APP_TITLE, CONFIG_DIR_NAME } from \"../config.ts\";\nimport { emitProjectTrustEvent } from \"./extensions/runner.ts\";\nimport type { LoadExtensionsResult, ProjectTrustContext } from \"./extensions/types.ts\";\nimport type { DefaultProjectTrust } from \"./settings-manager.ts\";\nimport {\n\tgetProjectTrustOptions,\n\thasProjectTrustInputs,\n\ttype ProjectTrustOption,\n\ttype ProjectTrustStore,\n} from \"./trust-manager.ts\";\n\nexport type AppMode = \"interactive\" | \"print\" | \"json\" | \"rpc\";\n\nexport interface ResolveProjectTrustedOptions {\n\tcwd: string;\n\ttrustStore: ProjectTrustStore;\n\ttrustOverride?: boolean;\n\tdefaultProjectTrust?: DefaultProjectTrust;\n\textensionsResult?: LoadExtensionsResult;\n\tprojectTrustContext: ProjectTrustContext;\n\tpromptMessage?: string;\n\tonExtensionError?: (message: string) => void;\n}\n\nfunction formatProjectTrustPrompt(cwd: string): string {\n\treturn `Trust project folder?\\n${cwd}\\n\\nThis allows ${APP_TITLE} to load ${CONFIG_DIR_NAME} settings and resources, install missing project packages, and execute project extensions.`;\n}\n\nasync function selectProjectTrustOption(\n\tcwd: string,\n\tctx: ProjectTrustContext,\n\tpromptMessage?: string,\n): Promise<ProjectTrustOption | undefined> {\n\tconst options = getProjectTrustOptions(cwd, { includeSessionOnly: true });\n\tconst selected = await ctx.ui.select(\n\t\tpromptMessage ?? formatProjectTrustPrompt(cwd),\n\t\toptions.map((option) => option.label),\n\t);\n\treturn options.find((option) => option.label === selected);\n}\n\nfunction saveProjectTrustPromptResult(trustStore: ProjectTrustStore, result: ProjectTrustOption): void {\n\tif (result.updates.length > 0) {\n\t\ttrustStore.setMany(result.updates);\n\t}\n}\n\nexport async function resolveProjectTrusted(options: ResolveProjectTrustedOptions): Promise<boolean> {\n\tif (options.trustOverride !== undefined) {\n\t\treturn options.trustOverride;\n\t}\n\tif (!hasProjectTrustInputs(options.cwd)) {\n\t\treturn true;\n\t}\n\n\tif (options.extensionsResult) {\n\t\tconst { result, errors } = await emitProjectTrustEvent(\n\t\t\toptions.extensionsResult,\n\t\t\t{ type: \"project_trust\", cwd: options.cwd },\n\t\t\toptions.projectTrustContext,\n\t\t);\n\t\tfor (const error of errors) {\n\t\t\toptions.onExtensionError?.(`Extension \"${error.extensionPath}\" project_trust error: ${error.error}`);\n\t\t}\n\t\tif (result) {\n\t\t\tconst trusted = result.trusted === \"yes\";\n\t\t\tif (result.remember === true) {\n\t\t\t\toptions.trustStore.set(options.cwd, trusted);\n\t\t\t}\n\t\t\treturn trusted;\n\t\t}\n\t}\n\n\tconst decision = options.trustStore.get(options.cwd);\n\tif (decision !== null) {\n\t\treturn decision;\n\t}\n\n\tswitch (options.defaultProjectTrust ?? \"ask\") {\n\t\tcase \"always\":\n\t\t\treturn true;\n\t\tcase \"never\":\n\t\t\treturn false;\n\t\tcase \"ask\":\n\t\t\tbreak;\n\t}\n\n\tif (!options.projectTrustContext.hasUI) {\n\t\treturn false;\n\t}\n\n\tconst selected = await selectProjectTrustOption(options.cwd, options.projectTrustContext, options.promptMessage);\n\tif (selected !== undefined) {\n\t\tsaveProjectTrustPromptResult(options.trustStore, selected);\n\t\treturn selected.trusted;\n\t}\n\treturn false;\n}\n"]}
1
+ {"version":3,"file":"project-trust.d.ts","sourceRoot":"","sources":["../../src/core/project-trust.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAIN,KAAK,iBAAiB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,4BAA4B;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAyBD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,CAkDnG"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-templates-async.d.ts","sourceRoot":"","sources":["../../src/core/prompt-templates-async.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAuDxF,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0C7G","sourcesContent":["import { access, readdir, readFile, stat } from \"node:fs/promises\";\nimport { basename, dirname, join, resolve, sep } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { parseFrontmatter } from \"../utils/frontmatter.ts\";\nimport { yieldToEventLoopIfSlow } from \"../utils/event-loop.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { createSyntheticSourceInfo, type SourceInfo } from \"./source-info.ts\";\nimport type { LoadPromptTemplatesOptions, PromptTemplate } from \"./prompt-templates.ts\";\n\nconst YIELD_AFTER_MS = 8;\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\nasync function loadTemplateFromFile(filePath: string, sourceInfo: SourceInfo): Promise<PromptTemplate | null> {\n\ttry {\n\t\tconst rawContent = await readFile(filePath, \"utf-8\");\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(rawContent);\n\t\tconst name = basename(filePath).replace(/\\.md$/, \"\");\n\t\tlet description = frontmatter.description || \"\";\n\t\tif (!description) {\n\t\t\tconst firstLine = body.split(\"\\n\").find((line) => line.trim());\n\t\t\tif (firstLine) description = firstLine.length > 60 ? `${firstLine.slice(0, 60)}...` : firstLine;\n\t\t}\n\t\treturn {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\t...(frontmatter[\"argument-hint\"] && { argumentHint: frontmatter[\"argument-hint\"] }),\n\t\t\tcontent: body,\n\t\t\tsourceInfo,\n\t\t\tfilePath,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function loadTemplatesFromDir(\n\tdir: string,\n\tgetSourceInfo: (filePath: string) => Promise<SourceInfo>,\n): Promise<PromptTemplate[]> {\n\tconst templates: PromptTemplate[] = [];\n\tif (!(await exists(dir))) return templates;\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, YIELD_AFTER_MS);\n\t\t\tconst fullPath = join(dir, entry.name);\n\t\t\tlet isFile = entry.isFile();\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry { isFile = (await stat(fullPath)).isFile(); } catch { continue; }\n\t\t\t}\n\t\t\tif (!isFile || !entry.name.endsWith(\".md\")) continue;\n\t\t\tconst template = await loadTemplateFromFile(fullPath, await getSourceInfo(fullPath));\n\t\t\tif (template) templates.push(template);\n\t\t}\n\t} catch {}\n\treturn templates;\n}\n\nexport async function loadPromptTemplatesAsync(options: LoadPromptTemplatesOptions): Promise<PromptTemplate[]> {\n\tconst resolvedCwd = resolvePath(options.cwd);\n\tconst resolvedAgentDir = resolvePath(options.agentDir);\n\tconst promptPaths = options.promptPaths ?? [];\n\tconst includeDefaults = options.includeDefaults ?? true;\n\tconst templates: PromptTemplate[] = [];\n\tconst globalPromptsDir = join(resolvedAgentDir, \"prompts\");\n\tconst projectPromptsDir = resolve(resolvedCwd, CONFIG_DIR_NAME, \"prompts\");\n\tconst isUnderPath = (target: string, root: string): boolean => {\n\t\tconst normalizedRoot = resolve(root);\n\t\treturn target === normalizedRoot || target.startsWith(normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`);\n\t};\n\tconst getSourceInfo = async (resolvedPath: string): Promise<SourceInfo> => {\n\t\tif (isUnderPath(resolvedPath, globalPromptsDir)) {\n\t\t\treturn createSyntheticSourceInfo(resolvedPath, { source: \"local\", scope: \"user\", baseDir: globalPromptsDir });\n\t\t}\n\t\tif (isUnderPath(resolvedPath, projectPromptsDir)) {\n\t\t\treturn createSyntheticSourceInfo(resolvedPath, { source: \"local\", scope: \"project\", baseDir: projectPromptsDir });\n\t\t}\n\t\tconst stats = await stat(resolvedPath);\n\t\treturn createSyntheticSourceInfo(resolvedPath, { source: \"local\", baseDir: stats.isDirectory() ? resolvedPath : dirname(resolvedPath) });\n\t};\n\tif (includeDefaults) {\n\t\ttemplates.push(...await loadTemplatesFromDir(globalPromptsDir, getSourceInfo));\n\t\ttemplates.push(...await loadTemplatesFromDir(projectPromptsDir, getSourceInfo));\n\t}\n\tconst startedAt = Date.now();\n\tfor (const rawPath of promptPaths) {\n\t\tawait yieldToEventLoopIfSlow(startedAt, YIELD_AFTER_MS);\n\t\tconst resolvedPath = resolvePath(rawPath, resolvedCwd, { trim: true });\n\t\tif (!(await exists(resolvedPath))) continue;\n\t\ttry {\n\t\t\tconst stats = await stat(resolvedPath);\n\t\t\tif (stats.isDirectory()) {\n\t\t\t\ttemplates.push(...await loadTemplatesFromDir(resolvedPath, getSourceInfo));\n\t\t\t} else if (stats.isFile() && resolvedPath.endsWith(\".md\")) {\n\t\t\t\tconst template = await loadTemplateFromFile(resolvedPath, await getSourceInfo(resolvedPath));\n\t\t\t\tif (template) templates.push(template);\n\t\t\t}\n\t\t} catch {}\n\t}\n\treturn templates;\n}\n"]}
1
+ {"version":3,"file":"prompt-templates-async.d.ts","sourceRoot":"","sources":["../../src/core/prompt-templates-async.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAuDxF,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0C7G"}