@bastani/atomic 0.9.53-alpha.1 → 0.9.54-alpha.1

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 (170) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/package.json +1 -1
  5. package/dist/builtin/web-access/package.json +1 -1
  6. package/dist/builtin/workflows/package.json +1 -1
  7. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  8. package/dist/core/agent-session-auto-compaction.js +2 -1
  9. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  10. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  11. package/dist/core/agent-session-compaction.js +2 -1
  12. package/dist/core/agent-session-compaction.js.map +1 -1
  13. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  14. package/dist/core/agent-session-extension-bindings.js +2 -1
  15. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  16. package/dist/core/agent-session-models.d.ts +17 -1
  17. package/dist/core/agent-session-models.d.ts.map +1 -1
  18. package/dist/core/agent-session-models.js +19 -0
  19. package/dist/core/agent-session-models.js.map +1 -1
  20. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  21. package/dist/core/agent-session-post-tool-compaction.js +2 -1
  22. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  23. package/dist/core/agent-session-summary.d.ts.map +1 -1
  24. package/dist/core/agent-session-summary.js +2 -1
  25. package/dist/core/agent-session-summary.js.map +1 -1
  26. package/dist/core/agent-session-tree.d.ts.map +1 -1
  27. package/dist/core/agent-session-tree.js +2 -1
  28. package/dist/core/agent-session-tree.js.map +1 -1
  29. package/dist/core/exec.d.ts +9 -1
  30. package/dist/core/exec.d.ts.map +1 -1
  31. package/dist/core/exec.js +109 -74
  32. package/dist/core/exec.js.map +1 -1
  33. package/dist/core/extensions/loader-virtual-modules.js +2 -2
  34. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  35. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  36. package/dist/core/model-resolver-patterns.js +15 -9
  37. package/dist/core/model-resolver-patterns.js.map +1 -1
  38. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  39. package/dist/core/package-manager-auto-resources.js +3 -2
  40. package/dist/core/package-manager-auto-resources.js.map +1 -1
  41. package/dist/core/package-manager-git.d.ts +1 -1
  42. package/dist/core/package-manager-git.d.ts.map +1 -1
  43. package/dist/core/package-manager-git.js +12 -1
  44. package/dist/core/package-manager-git.js.map +1 -1
  45. package/dist/core/package-manager-npm.d.ts +1 -1
  46. package/dist/core/package-manager-npm.d.ts.map +1 -1
  47. package/dist/core/package-manager-npm.js +8 -4
  48. package/dist/core/package-manager-npm.js.map +1 -1
  49. package/dist/core/package-manager-operations.d.ts.map +1 -1
  50. package/dist/core/package-manager-operations.js +33 -8
  51. package/dist/core/package-manager-operations.js.map +1 -1
  52. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  53. package/dist/core/package-manager-resolver.js +22 -4
  54. package/dist/core/package-manager-resolver.js.map +1 -1
  55. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
  56. package/dist/core/package-manager-resource-accumulator.js +4 -4
  57. package/dist/core/package-manager-resource-accumulator.js.map +1 -1
  58. package/dist/core/package-manager-source.js +5 -5
  59. package/dist/core/package-manager-source.js.map +1 -1
  60. package/dist/core/package-manager-types.d.ts +5 -1
  61. package/dist/core/package-manager-types.d.ts.map +1 -1
  62. package/dist/core/package-manager-types.js.map +1 -1
  63. package/dist/core/package-manager.d.ts.map +1 -1
  64. package/dist/core/package-manager.js +3 -3
  65. package/dist/core/package-manager.js.map +1 -1
  66. package/dist/core/project-trust.d.ts.map +1 -1
  67. package/dist/core/project-trust.js +2 -1
  68. package/dist/core/project-trust.js.map +1 -1
  69. package/dist/core/prompt-templates-async.d.ts.map +1 -1
  70. package/dist/core/prompt-templates-async.js +4 -9
  71. package/dist/core/prompt-templates-async.js.map +1 -1
  72. package/dist/core/prompt-templates.d.ts.map +1 -1
  73. package/dist/core/prompt-templates.js +4 -12
  74. package/dist/core/prompt-templates.js.map +1 -1
  75. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  76. package/dist/core/resource-loader-extensions.js +8 -7
  77. package/dist/core/resource-loader-extensions.js.map +1 -1
  78. package/dist/core/resource-loader-paths.js +5 -5
  79. package/dist/core/resource-loader-paths.js.map +1 -1
  80. package/dist/core/resource-loader-source-info.d.ts +0 -1
  81. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  82. package/dist/core/resource-loader-source-info.js +6 -17
  83. package/dist/core/resource-loader-source-info.js.map +1 -1
  84. package/dist/core/sdk.d.ts.map +1 -1
  85. package/dist/core/sdk.js +3 -0
  86. package/dist/core/sdk.js.map +1 -1
  87. package/dist/core/session-manager-core.js +2 -2
  88. package/dist/core/session-manager-core.js.map +1 -1
  89. package/dist/core/session-manager-list.js +2 -2
  90. package/dist/core/session-manager-list.js.map +1 -1
  91. package/dist/core/skills-async.d.ts.map +1 -1
  92. package/dist/core/skills-async.js +5 -10
  93. package/dist/core/skills-async.js.map +1 -1
  94. package/dist/core/skills.d.ts.map +1 -1
  95. package/dist/core/skills.js +5 -13
  96. package/dist/core/skills.js.map +1 -1
  97. package/dist/core/source-info.d.ts +2 -0
  98. package/dist/core/source-info.d.ts.map +1 -1
  99. package/dist/core/source-info.js +5 -0
  100. package/dist/core/source-info.js.map +1 -1
  101. package/dist/core/tool-loadout.d.ts +4 -0
  102. package/dist/core/tool-loadout.d.ts.map +1 -1
  103. package/dist/core/tool-loadout.js +7 -1
  104. package/dist/core/tool-loadout.js.map +1 -1
  105. package/dist/core/tools/render-utils.d.ts.map +1 -1
  106. package/dist/core/tools/render-utils.js +2 -7
  107. package/dist/core/tools/render-utils.js.map +1 -1
  108. package/dist/core/trust-manager.d.ts.map +1 -1
  109. package/dist/core/trust-manager.js +15 -9
  110. package/dist/core/trust-manager.js.map +1 -1
  111. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  112. package/dist/extensions/codemode/tool.js +33 -8
  113. package/dist/extensions/codemode/tool.js.map +1 -1
  114. package/dist/main.d.ts.map +1 -1
  115. package/dist/main.js +20 -3
  116. package/dist/main.js.map +1 -1
  117. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  118. package/dist/modes/interactive/components/config-selector-list.js +2 -13
  119. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  120. package/dist/modes/interactive/components/session-selector-list.js +2 -2
  121. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  122. package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -1
  123. package/dist/modes/interactive/components/session-selector-tree.js +4 -6
  124. package/dist/modes/interactive/components/session-selector-tree.js.map +1 -1
  125. package/dist/modes/interactive/components/session-selector-utils.d.ts +2 -1
  126. package/dist/modes/interactive/components/session-selector-utils.d.ts.map +1 -1
  127. package/dist/modes/interactive/components/session-selector-utils.js +5 -13
  128. package/dist/modes/interactive/components/session-selector-utils.js.map +1 -1
  129. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
  130. package/dist/modes/interactive/components/tree-selector-content.js +2 -6
  131. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
  132. package/dist/modes/interactive/interactive-mode-base.d.ts +2 -0
  133. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  134. package/dist/modes/interactive/interactive-mode-base.js +4 -0
  135. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  136. package/dist/modes/interactive/interactive-mode-surface.d.ts +1 -0
  137. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  138. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  139. package/dist/modes/interactive/interactive-mode-types.d.ts +6 -0
  140. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  141. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  142. package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
  143. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  144. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  145. package/dist/modes/interactive/interactive-startup.js +15 -8
  146. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  147. package/dist/modes/interactive/interactive-tui.d.ts +1 -0
  148. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  149. package/dist/modes/interactive/interactive-tui.js +1 -1
  150. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  151. package/dist/package-manager-cli.d.ts.map +1 -1
  152. package/dist/package-manager-cli.js +3 -0
  153. package/dist/package-manager-cli.js.map +1 -1
  154. package/dist/utils/ansi.d.ts.map +1 -1
  155. package/dist/utils/ansi.js +5 -2
  156. package/dist/utils/ansi.js.map +1 -1
  157. package/dist/utils/git.d.ts +1 -1
  158. package/dist/utils/git.d.ts.map +1 -1
  159. package/dist/utils/git.js.map +1 -1
  160. package/dist/utils/image-resize-core.d.ts.map +1 -1
  161. package/dist/utils/image-resize-core.js +5 -3
  162. package/dist/utils/image-resize-core.js.map +1 -1
  163. package/dist/utils/paths.d.ts +14 -0
  164. package/dist/utils/paths.d.ts.map +1 -1
  165. package/dist/utils/paths.js +39 -1
  166. package/dist/utils/paths.js.map +1 -1
  167. package/docs/extensions/api-reference.md +4 -2
  168. package/docs/packages.md +2 -0
  169. package/npm-shrinkwrap.json +32 -32
  170. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver-patterns.js","sourceRoot":"","sources":["../../src/core/model-resolver-patterns.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { isValidThinkingLevel } from \"../cli/args.ts\";\nimport { normalizeModelReference } from \"./azure-provider-compat.js\";\nimport { defaultModelPerProvider } from \"./model-resolver-defaults.ts\";\n\n/*\n * Model reference resolution. Candidates are collected before a provider is chosen, so catalog order\n * never decides the provider and an ambiguous match is reported instead of falling through to a\n * weaker one.\n */\n\nexport interface ModelReferenceRequest {\n\t/** Bare model id or `provider/id`, optionally followed by `:<thinking>`. */\n\ttext: string;\n\t/** Only consider models from this provider. */\n\tprovider?: string;\n\t/**\n\t * A trailing `:<suffix>` is only considered when the full text matches no model, since ids such as\n\t * OpenRouter's `qwen/qwen3-coder:exacto` contain colons.\n\t * - `none`: the suffix stays part of the id\n\t * - `strict`: a valid thinking level is parsed; any other suffix stays part of the id\n\t * - `lenient`: like `strict`, but an invalid suffix is dropped with a warning\n\t */\n\tthinkingSuffix: \"none\" | \"strict\" | \"lenient\";\n\t/** Match id and name substrings when no exact match exists. */\n\tfuzzy: boolean;\n}\n\nexport type ModelReferenceResult =\n\t| { status: \"resolved\"; model: Model<Api>; thinkingLevel?: ThinkingLevel; warning?: string }\n\t| {\n\t\t\tstatus: \"ambiguous\";\n\t\t\tcandidates: Model<Api>[];\n\t\t\tusableCount: number;\n\t\t\tthinkingLevel?: ThinkingLevel;\n\t\t\twarning?: string;\n\t }\n\t| {\n\t\t\tstatus: \"not-found\";\n\t\t\t/** Set when a provider is explicit or named by a `provider/` prefix, for building a custom model id. */\n\t\t\ttarget?: ModelReferenceTarget;\n\t };\n\nexport interface ModelReferenceTarget {\n\tprovider: string;\n\tproviderModels: [Model<Api>, ...Model<Api>[]];\n\t/** Text after the provider prefix as typed, including any `:<suffix>`. */\n\tmodelText: string;\n\t/** `modelText` without a valid thinking suffix (unless `thinkingSuffix` is `none`). */\n\tmodelId: string;\n\tthinkingLevel?: ThinkingLevel;\n}\n\ntype ResolvedOrAmbiguous = Exclude<ModelReferenceResult, { status: \"not-found\" }>;\n\nfunction splitThinkingSuffix(text: string): { base: string; thinkingLevel: ThinkingLevel } | undefined {\n\tconst colonIndex = text.lastIndexOf(\":\");\n\tconst suffix = text.substring(colonIndex + 1);\n\tif (colonIndex <= 0 || !isValidThinkingLevel(suffix)) return undefined;\n\treturn { base: text.substring(0, colonIndex), thinkingLevel: suffix };\n}\n\nfunction splitProviderPrefix(\n\ttext: string,\n\tmodels: readonly Model<Api>[],\n): { provider: string; modelText: string } | undefined {\n\tconst slashIndex = text.indexOf(\"/\");\n\tif (slashIndex === -1) return undefined;\n\tconst prefix = text.substring(0, slashIndex).trim().toLowerCase();\n\tconst modelText = text.substring(slashIndex + 1).trim();\n\tif (!prefix || !modelText) return undefined;\n\tconst provider = models.find((model) => model.provider.toLowerCase() === prefix)?.provider;\n\treturn provider ? { provider, modelText } : undefined;\n}\n\n/** Duplicate entries from one provider must not look like several providers. */\nfunction uniqueByReference(models: readonly Model<Api>[]): Model<Api>[] {\n\tconst seen = new Set<string>();\n\treturn models.filter((model) => {\n\t\tconst key = `${model.provider.toLowerCase()}/${model.id.toLowerCase()}`;\n\t\tif (seen.has(key)) return false;\n\t\tseen.add(key);\n\t\treturn true;\n\t});\n}\n\n/**\n * `usable` only breaks ties between providers, so a unique match resolves even without credentials\n * (`--api-key` first-time setup).\n */\nexport function resolveModelReference(\n\trequest: ModelReferenceRequest,\n\tmodels: readonly Model<Api>[],\n\tusable: (provider: string) => boolean,\n): ModelReferenceResult {\n\tconst text = normalizeModelReference(request.text.trim());\n\tif (!text) return { status: \"not-found\" };\n\tconst constraint = request.provider?.toLowerCase();\n\tconst pool = constraint ? models.filter((model) => model.provider.toLowerCase() === constraint) : models;\n\tconst result = resolveText(text, request, pool, usable);\n\tif (result.status !== \"not-found\") return result;\n\n\tconst split = splitProviderPrefix(text, pool);\n\tconst anchor = constraint ? pool[0] : pool.find((model) => model.provider === split?.provider);\n\tif (!anchor) return result;\n\tconst modelText = split?.modelText ?? text;\n\tconst suffix = request.thinkingSuffix === \"none\" ? undefined : splitThinkingSuffix(modelText);\n\treturn {\n\t\tstatus: \"not-found\",\n\t\ttarget: {\n\t\t\tprovider: anchor.provider,\n\t\t\tproviderModels: [anchor, ...pool.filter((model) => model.provider === anchor.provider && model !== anchor)],\n\t\t\tmodelText,\n\t\t\tmodelId: suffix?.base ?? modelText,\n\t\t\tthinkingLevel: suffix?.thinkingLevel,\n\t\t},\n\t};\n}\n\n/** Exact `provider/id` or bare id lookup without thinking suffixes or fuzzy matching. */\nexport function findExactModelReferenceMatch(\n\tmodelReference: string,\n\tmodels: readonly Model<Api>[],\n): Model<Api> | undefined {\n\tconst result = resolveModelReference(\n\t\t{ text: modelReference, thinkingSuffix: \"none\", fuzzy: false },\n\t\tmodels,\n\t\t() => true,\n\t);\n\treturn result.status === \"resolved\" ? result.model : undefined;\n}\n\nfunction resolveText(\n\ttext: string,\n\trequest: ModelReferenceRequest,\n\tpool: readonly Model<Api>[],\n\tusable: (provider: string) => boolean,\n): ModelReferenceResult {\n\tconst reference = selectReference(text, pool, request.fuzzy, usable);\n\tif (reference) return reference;\n\n\tif (request.fuzzy) {\n\t\tconst fuzzy = selectFuzzy(fuzzyMatches(text, pool), usable);\n\t\tif (fuzzy) return fuzzy;\n\t}\n\n\tif (request.thinkingSuffix === \"none\") return { status: \"not-found\" };\n\tconst thinking = splitThinkingSuffix(text);\n\tif (thinking) {\n\t\tconst inner = resolveText(thinking.base, request, pool, usable);\n\t\tif (inner.status === \"not-found\") return inner;\n\t\t// An inner warning means an invalid inner suffix, which discards the thinking level\n\t\treturn { ...inner, thinkingLevel: inner.warning ? undefined : thinking.thinkingLevel };\n\t}\n\t// Keep an invalid suffix as part of the id and fail, rather than resolve a different model\n\tif (request.thinkingSuffix === \"strict\") return { status: \"not-found\" };\n\tconst colonIndex = text.lastIndexOf(\":\");\n\tif (colonIndex <= 0) return { status: \"not-found\" };\n\n\tconst suffix = text.substring(colonIndex + 1);\n\tconst inner = resolveText(text.substring(0, colonIndex), request, pool, usable);\n\tif (inner.status === \"not-found\") return inner;\n\treturn {\n\t\t...inner,\n\t\tthinkingLevel: undefined,\n\t\twarning: `Invalid thinking level \"${suffix}\" in pattern \"${text}\". Using default instead.`,\n\t};\n}\n\n/**\n * `provider/rest` is only a hint: the whole text may also be a model id on another provider, such as\n * gateway id `zai/glm-5` or commandcode id `xiaomi/mimo-v2.5-pro`. The named provider wins when usable,\n * since that is what the syntax usually means; otherwise a sole usable raw match wins, since the named\n * provider could not serve the request. An unusable named match is still preferred over unusable raw\n * matches, so `--api-key` can set up the named provider.\n */\nfunction selectReference(\n\ttext: string,\n\tpool: readonly Model<Api>[],\n\tfuzzy: boolean,\n\tusable: (provider: string) => boolean,\n): ResolvedOrAmbiguous | undefined {\n\tconst lowerText = text.toLowerCase();\n\tconst raw = uniqueByReference(pool.filter((model) => model.id.toLowerCase() === lowerText));\n\tconst split = splitProviderPrefix(text, pool);\n\tlet named: Model<Api> | undefined;\n\tif (split) {\n\t\tconst providerModels = pool.filter((model) => model.provider === split.provider);\n\t\tconst lowerModelText = split.modelText.toLowerCase();\n\t\t// The provider's own literal id (OpenRouter's `openrouter/free`) beats its fuzzy matches\n\t\tnamed =\n\t\t\tproviderModels.find((model) => model.id.toLowerCase() === lowerModelText) ??\n\t\t\traw.find((model) => model.provider === split.provider) ??\n\t\t\t(fuzzy ? bestFuzzyMatch(fuzzyMatches(split.modelText, providerModels)) : undefined);\n\t}\n\n\tconst others = raw.filter((model) => model !== named);\n\tconst candidates = named ? [named, ...others] : others;\n\tif (candidates.length === 0) return undefined;\n\tif (new Set(candidates.map((model) => model.provider)).size === 1) {\n\t\treturn { status: \"resolved\", model: candidates[0] };\n\t}\n\tif (named && usable(named.provider)) return { status: \"resolved\", model: named };\n\tconst usableOthers = others.filter((model) => usable(model.provider));\n\tif (usableOthers.length === 1) return { status: \"resolved\", model: usableOthers[0] };\n\tif (usableOthers.length === 0 && named) return { status: \"resolved\", model: named };\n\treturn { status: \"ambiguous\", candidates, usableCount: usableOthers.length };\n}\n\nfunction fuzzyMatches(text: string, models: readonly Model<Api>[]): Model<Api>[] {\n\tconst lowerText = text.toLowerCase();\n\treturn models.filter(\n\t\t(model) => model.id.toLowerCase().includes(lowerText) || model.name?.toLowerCase().includes(lowerText),\n\t);\n}\n\nfunction selectFuzzy(matches: Model<Api>[], usable: (provider: string) => boolean): ResolvedOrAmbiguous | undefined {\n\tif (matches.length === 0) return undefined;\n\tconst multipleProviders = new Set(matches.map((model) => model.provider)).size > 1;\n\tconst usableMatches = multipleProviders ? matches.filter((model) => usable(model.provider)) : [];\n\tconst pool = usableMatches.length > 0 ? usableMatches : matches;\n\tconst best = bestFuzzyMatch(pool);\n\tif (!best) return undefined;\n\t// The same id on several providers would otherwise be decided by catalog order\n\tconst tied = uniqueByReference(pool.filter((model) => model.id === best.id));\n\tif (new Set(tied.map((model) => model.provider)).size === 1) return { status: \"resolved\", model: best };\n\treturn {\n\t\tstatus: \"ambiguous\",\n\t\tcandidates: tied,\n\t\tusableCount: usableMatches.length > 0 ? tied.length : 0,\n\t};\n}\n\n/** Prefer aliases (`claude-sonnet-4-5`) over dated versions (`claude-sonnet-4-5-20250929`), then the latest. */\nfunction bestFuzzyMatch(matches: readonly Model<Api>[]): Model<Api> | undefined {\n\tconst aliases = matches.filter((model) => isAlias(model.id));\n\treturn [...(aliases.length > 0 ? aliases : matches)].sort((a, b) => b.id.localeCompare(a.id))[0];\n}\n\nfunction isAlias(id: string): boolean {\n\treturn id.endsWith(\"-latest\") || !/-\\d{8}$/.test(id);\n}\n\nexport function buildFallbackModel(\n\tprovider: string,\n\tmodelId: string,\n\tavailableModels: readonly Model<Api>[],\n): Model<Api> | undefined {\n\tconst providerModels = availableModels.filter((m) => m.provider === provider);\n\tif (providerModels.length === 0) return undefined;\n\n\tconst defaultId = defaultModelPerProvider[provider];\n\tconst baseModel = defaultId\n\t\t? (providerModels.find((m) => m.id === defaultId) ?? providerModels[0])\n\t\t: providerModels[0];\n\tconst fallbackContextWindow = baseModel.contextWindow;\n\n\treturn {\n\t\t...baseModel,\n\t\tid: modelId,\n\t\tname: modelId,\n\t\tcontextWindow: fallbackContextWindow,\n\t};\n}\n"]}
1
+ {"version":3,"file":"model-resolver-patterns.js","sourceRoot":"","sources":["../../src/core/model-resolver-patterns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAoDvE,SAAS,mBAAmB,CAAC,IAAY;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACvE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,mBAAmB,CAC3B,IAAY,EACZ,MAA6B;IAE7B,oGAAoG;IACpG,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,IAAyD,CAAC;IAC9D,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QAC3E,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YAAE,SAAS;QACxF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,SAAS;YAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,MAA6B;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACpC,OAA8B,EAC9B,MAA6B,EAC7B,MAAqC;IAErC,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzG,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IAEjD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/F,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9F,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC;YAC3G,SAAS;YACT,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS;YAClC,aAAa,EAAE,MAAM,EAAE,aAAa;SACpC;KACD,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,4BAA4B,CAC3C,cAAsB,EACtB,MAA6B;IAE7B,MAAM,MAAM,GAAG,qBAAqB,CACnC,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAC9D,MAAM,EACN,GAAG,EAAE,CAAC,IAAI,CACV,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED,SAAS,WAAW,CACnB,IAAY,EACZ,OAA8B,EAC9B,IAA2B,EAC3B,MAAqC;IAErC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/C,oFAAoF;QACpF,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACxF,CAAC;IACD,2FAA2F;IAC3F,IAAI,OAAO,CAAC,cAAc,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO;QACN,GAAG,KAAK;QACR,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,2BAA2B,MAAM,iBAAiB,IAAI,2BAA2B;KAC1F,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CACvB,IAAY,EACZ,IAA2B,EAC3B,KAAc,EACd,MAAqC;IAErC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,KAA6B,CAAC;IAClC,IAAI,KAAK,EAAE,CAAC;QACX,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjF,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACrD,yFAAyF;QACzF,KAAK;YACJ,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC;gBACtD,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACpF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAA6B;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CACtG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAqB,EAAE,MAAqC;IAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,+EAA+E;IAC/E,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxG,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACvD,CAAC;AACH,CAAC;AAED,gHAAgH;AAChH,SAAS,cAAc,CAAC,OAA8B;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,OAAO,CAAC,EAAU;IAC1B,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,QAAgB,EAChB,OAAe,EACf,eAAsC;IAEtC,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC9E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAElD,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,SAAS;QAC1B,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,qBAAqB,GAAG,SAAS,CAAC,aAAa,CAAC;IAEtD,OAAO;QACN,GAAG,SAAS;QACZ,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,aAAa,EAAE,qBAAqB;KACpC,CAAC;AACH,CAAC","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { isValidThinkingLevel } from \"../cli/args.ts\";\nimport { normalizeModelReference } from \"./azure-provider-compat.js\";\nimport { defaultModelPerProvider } from \"./model-resolver-defaults.ts\";\n\n/*\n * Model reference resolution. Candidates are collected before a provider is chosen, so catalog order\n * never decides the provider and an ambiguous match is reported instead of falling through to a\n * weaker one.\n */\n\nexport interface ModelReferenceRequest {\n\t/** Bare model id or `provider/id`, optionally followed by `:<thinking>`. */\n\ttext: string;\n\t/** Only consider models from this provider. */\n\tprovider?: string;\n\t/**\n\t * A trailing `:<suffix>` is only considered when the full text matches no model, since ids such as\n\t * OpenRouter's `qwen/qwen3-coder:exacto` contain colons.\n\t * - `none`: the suffix stays part of the id\n\t * - `strict`: a valid thinking level is parsed; any other suffix stays part of the id\n\t * - `lenient`: like `strict`, but an invalid suffix is dropped with a warning\n\t */\n\tthinkingSuffix: \"none\" | \"strict\" | \"lenient\";\n\t/** Match id and name substrings when no exact match exists. */\n\tfuzzy: boolean;\n}\n\nexport type ModelReferenceResult =\n\t| { status: \"resolved\"; model: Model<Api>; thinkingLevel?: ThinkingLevel; warning?: string }\n\t| {\n\t\t\tstatus: \"ambiguous\";\n\t\t\tcandidates: Model<Api>[];\n\t\t\tusableCount: number;\n\t\t\tthinkingLevel?: ThinkingLevel;\n\t\t\twarning?: string;\n\t }\n\t| {\n\t\t\tstatus: \"not-found\";\n\t\t\t/** Set when a provider is explicit or named by a `provider/` prefix, for building a custom model id. */\n\t\t\ttarget?: ModelReferenceTarget;\n\t };\n\nexport interface ModelReferenceTarget {\n\tprovider: string;\n\tproviderModels: [Model<Api>, ...Model<Api>[]];\n\t/** Text after the provider prefix as typed, including any `:<suffix>`. */\n\tmodelText: string;\n\t/** `modelText` without a valid thinking suffix (unless `thinkingSuffix` is `none`). */\n\tmodelId: string;\n\tthinkingLevel?: ThinkingLevel;\n}\n\ntype ResolvedOrAmbiguous = Exclude<ModelReferenceResult, { status: \"not-found\" }>;\n\nfunction splitThinkingSuffix(text: string): { base: string; thinkingLevel: ThinkingLevel } | undefined {\n\tconst colonIndex = text.lastIndexOf(\":\");\n\tconst suffix = text.substring(colonIndex + 1);\n\tif (colonIndex <= 0 || !isValidThinkingLevel(suffix)) return undefined;\n\treturn { base: text.substring(0, colonIndex), thinkingLevel: suffix };\n}\n\nfunction splitProviderPrefix(\n\ttext: string,\n\tmodels: readonly Model<Api>[],\n): { provider: string; modelText: string } | undefined {\n\t// Provider ids may contain \"/\" themselves (e.g. URL-derived ids), so match known ids, longest first\n\tconst lowerText = text.toLowerCase();\n\tlet best: { provider: string; modelText: string } | undefined;\n\tfor (const { provider } of models) {\n\t\tconst prefix = provider.trim().toLowerCase();\n\t\tif (!prefix || (best && best.provider.length >= provider.length)) continue;\n\t\tconst slashIndex = lowerText.indexOf(\"/\", prefix.length);\n\t\tif (slashIndex === -1 || lowerText.substring(0, slashIndex).trim() !== prefix) continue;\n\t\tconst modelText = text.substring(slashIndex + 1).trim();\n\t\tif (modelText) best = { provider, modelText };\n\t}\n\treturn best;\n}\n\n/** Duplicate entries from one provider must not look like several providers. */\nfunction uniqueByReference(models: readonly Model<Api>[]): Model<Api>[] {\n\tconst seen = new Set<string>();\n\treturn models.filter((model) => {\n\t\tconst key = `${model.provider.toLowerCase()}/${model.id.toLowerCase()}`;\n\t\tif (seen.has(key)) return false;\n\t\tseen.add(key);\n\t\treturn true;\n\t});\n}\n\n/**\n * `usable` only breaks ties between providers, so a unique match resolves even without credentials\n * (`--api-key` first-time setup).\n */\nexport function resolveModelReference(\n\trequest: ModelReferenceRequest,\n\tmodels: readonly Model<Api>[],\n\tusable: (provider: string) => boolean,\n): ModelReferenceResult {\n\tconst text = normalizeModelReference(request.text.trim());\n\tif (!text) return { status: \"not-found\" };\n\tconst constraint = request.provider?.toLowerCase();\n\tconst pool = constraint ? models.filter((model) => model.provider.toLowerCase() === constraint) : models;\n\tconst result = resolveText(text, request, pool, usable);\n\tif (result.status !== \"not-found\") return result;\n\n\tconst split = splitProviderPrefix(text, pool);\n\tconst anchor = constraint ? pool[0] : pool.find((model) => model.provider === split?.provider);\n\tif (!anchor) return result;\n\tconst modelText = split?.modelText ?? text;\n\tconst suffix = request.thinkingSuffix === \"none\" ? undefined : splitThinkingSuffix(modelText);\n\treturn {\n\t\tstatus: \"not-found\",\n\t\ttarget: {\n\t\t\tprovider: anchor.provider,\n\t\t\tproviderModels: [anchor, ...pool.filter((model) => model.provider === anchor.provider && model !== anchor)],\n\t\t\tmodelText,\n\t\t\tmodelId: suffix?.base ?? modelText,\n\t\t\tthinkingLevel: suffix?.thinkingLevel,\n\t\t},\n\t};\n}\n\n/** Exact `provider/id` or bare id lookup without thinking suffixes or fuzzy matching. */\nexport function findExactModelReferenceMatch(\n\tmodelReference: string,\n\tmodels: readonly Model<Api>[],\n): Model<Api> | undefined {\n\tconst result = resolveModelReference(\n\t\t{ text: modelReference, thinkingSuffix: \"none\", fuzzy: false },\n\t\tmodels,\n\t\t() => true,\n\t);\n\treturn result.status === \"resolved\" ? result.model : undefined;\n}\n\nfunction resolveText(\n\ttext: string,\n\trequest: ModelReferenceRequest,\n\tpool: readonly Model<Api>[],\n\tusable: (provider: string) => boolean,\n): ModelReferenceResult {\n\tconst reference = selectReference(text, pool, request.fuzzy, usable);\n\tif (reference) return reference;\n\n\tif (request.fuzzy) {\n\t\tconst fuzzy = selectFuzzy(fuzzyMatches(text, pool), usable);\n\t\tif (fuzzy) return fuzzy;\n\t}\n\n\tif (request.thinkingSuffix === \"none\") return { status: \"not-found\" };\n\tconst thinking = splitThinkingSuffix(text);\n\tif (thinking) {\n\t\tconst inner = resolveText(thinking.base, request, pool, usable);\n\t\tif (inner.status === \"not-found\") return inner;\n\t\t// An inner warning means an invalid inner suffix, which discards the thinking level\n\t\treturn { ...inner, thinkingLevel: inner.warning ? undefined : thinking.thinkingLevel };\n\t}\n\t// Keep an invalid suffix as part of the id and fail, rather than resolve a different model\n\tif (request.thinkingSuffix === \"strict\") return { status: \"not-found\" };\n\tconst colonIndex = text.lastIndexOf(\":\");\n\tif (colonIndex <= 0) return { status: \"not-found\" };\n\n\tconst suffix = text.substring(colonIndex + 1);\n\tconst inner = resolveText(text.substring(0, colonIndex), request, pool, usable);\n\tif (inner.status === \"not-found\") return inner;\n\treturn {\n\t\t...inner,\n\t\tthinkingLevel: undefined,\n\t\twarning: `Invalid thinking level \"${suffix}\" in pattern \"${text}\". Using default instead.`,\n\t};\n}\n\n/**\n * `provider/rest` is only a hint: the whole text may also be a model id on another provider, such as\n * gateway id `zai/glm-5` or commandcode id `xiaomi/mimo-v2.5-pro`. The named provider wins when usable,\n * since that is what the syntax usually means; otherwise a sole usable raw match wins, since the named\n * provider could not serve the request. An unusable named match is still preferred over unusable raw\n * matches, so `--api-key` can set up the named provider.\n */\nfunction selectReference(\n\ttext: string,\n\tpool: readonly Model<Api>[],\n\tfuzzy: boolean,\n\tusable: (provider: string) => boolean,\n): ResolvedOrAmbiguous | undefined {\n\tconst lowerText = text.toLowerCase();\n\tconst raw = uniqueByReference(pool.filter((model) => model.id.toLowerCase() === lowerText));\n\tconst split = splitProviderPrefix(text, pool);\n\tlet named: Model<Api> | undefined;\n\tif (split) {\n\t\tconst providerModels = pool.filter((model) => model.provider === split.provider);\n\t\tconst lowerModelText = split.modelText.toLowerCase();\n\t\t// The provider's own literal id (OpenRouter's `openrouter/free`) beats its fuzzy matches\n\t\tnamed =\n\t\t\tproviderModels.find((model) => model.id.toLowerCase() === lowerModelText) ??\n\t\t\traw.find((model) => model.provider === split.provider) ??\n\t\t\t(fuzzy ? bestFuzzyMatch(fuzzyMatches(split.modelText, providerModels)) : undefined);\n\t}\n\n\tconst others = raw.filter((model) => model !== named);\n\tconst candidates = named ? [named, ...others] : others;\n\tif (candidates.length === 0) return undefined;\n\tif (new Set(candidates.map((model) => model.provider)).size === 1) {\n\t\treturn { status: \"resolved\", model: candidates[0] };\n\t}\n\tif (named && usable(named.provider)) return { status: \"resolved\", model: named };\n\tconst usableOthers = others.filter((model) => usable(model.provider));\n\tif (usableOthers.length === 1) return { status: \"resolved\", model: usableOthers[0] };\n\tif (usableOthers.length === 0 && named) return { status: \"resolved\", model: named };\n\treturn { status: \"ambiguous\", candidates, usableCount: usableOthers.length };\n}\n\nfunction fuzzyMatches(text: string, models: readonly Model<Api>[]): Model<Api>[] {\n\tconst lowerText = text.toLowerCase();\n\treturn models.filter(\n\t\t(model) => model.id.toLowerCase().includes(lowerText) || model.name?.toLowerCase().includes(lowerText),\n\t);\n}\n\nfunction selectFuzzy(matches: Model<Api>[], usable: (provider: string) => boolean): ResolvedOrAmbiguous | undefined {\n\tif (matches.length === 0) return undefined;\n\tconst multipleProviders = new Set(matches.map((model) => model.provider)).size > 1;\n\tconst usableMatches = multipleProviders ? matches.filter((model) => usable(model.provider)) : [];\n\tconst pool = usableMatches.length > 0 ? usableMatches : matches;\n\tconst best = bestFuzzyMatch(pool);\n\tif (!best) return undefined;\n\t// The same id on several providers would otherwise be decided by catalog order\n\tconst tied = uniqueByReference(pool.filter((model) => model.id === best.id));\n\tif (new Set(tied.map((model) => model.provider)).size === 1) return { status: \"resolved\", model: best };\n\treturn {\n\t\tstatus: \"ambiguous\",\n\t\tcandidates: tied,\n\t\tusableCount: usableMatches.length > 0 ? tied.length : 0,\n\t};\n}\n\n/** Prefer aliases (`claude-sonnet-4-5`) over dated versions (`claude-sonnet-4-5-20250929`), then the latest. */\nfunction bestFuzzyMatch(matches: readonly Model<Api>[]): Model<Api> | undefined {\n\tconst aliases = matches.filter((model) => isAlias(model.id));\n\treturn [...(aliases.length > 0 ? aliases : matches)].sort((a, b) => b.id.localeCompare(a.id))[0];\n}\n\nfunction isAlias(id: string): boolean {\n\treturn id.endsWith(\"-latest\") || !/-\\d{8}$/.test(id);\n}\n\nexport function buildFallbackModel(\n\tprovider: string,\n\tmodelId: string,\n\tavailableModels: readonly Model<Api>[],\n): Model<Api> | undefined {\n\tconst providerModels = availableModels.filter((m) => m.provider === provider);\n\tif (providerModels.length === 0) return undefined;\n\n\tconst defaultId = defaultModelPerProvider[provider];\n\tconst baseModel = defaultId\n\t\t? (providerModels.find((m) => m.id === defaultId) ?? providerModels[0])\n\t\t: providerModels[0];\n\tconst fallbackContextWindow = baseModel.contextWindow;\n\n\treturn {\n\t\t...baseModel,\n\t\tid: modelId,\n\t\tname: modelId,\n\t\tcontextWindow: fallbackContextWindow,\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-auto-resources.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACX,aAAa,EACb,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,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,CAwDlB;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,CAqJf"}
1
+ {"version":3,"file":"package-manager-auto-resources.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,aAAa,EACb,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,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,CAwDlB;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,CAmJf"}
@@ -1,5 +1,6 @@
1
- import { dirname, join, resolve } from "node:path";
1
+ import { dirname, join } from "node:path";
2
2
  import { getProjectConfigDirs } from "../config.js";
3
+ import { pathsEqual } from "../utils/paths.js";
3
4
  import { getBaseDirsForScope, getHomeDir } from "./package-manager-paths.js";
4
5
  import { addResource, getTargetMap } from "./package-manager-resource-accumulator.js";
5
6
  import { collectAncestorAgentsSkillDirs, collectAutoExtensionEntries, collectAutoPromptEntries, collectAutoSkillEntries, collectAutoThemeEntries, collectResourceFiles, } from "./package-manager-resource-files.js";
@@ -63,7 +64,7 @@ export async function addAutoDiscoveredResources(context, accumulator, globalSet
63
64
  const userAgentsSkillsDir = join(getHomeDir(), ".agents", "skills");
64
65
  const projectTrusted = context.settingsManager.isProjectTrusted();
65
66
  const projectAgentsSkillDirs = projectTrusted
66
- ? (await collectAncestorAgentsSkillDirs(context.cwd)).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))
67
+ ? (await collectAncestorAgentsSkillDirs(context.cwd)).filter((dir) => !pathsEqual(dir, userAgentsSkillsDir))
67
68
  : [];
68
69
  const addResources = (resourceType, paths, metadata, overrides, baseDir) => {
69
70
  const target = getTargetMap(accumulator, resourceType);
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-auto-resources.js","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.js\";\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 {\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResourceAccumulator,\n\tResourceType,\n} from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport 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 = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tresourceMetadata: PathMetadata,\n\t\tpatterns: string[] | undefined,\n\t): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst enabledPaths =\n\t\t\tpatterns === undefined\n\t\t\t\t? new Set(paths)\n\t\t\t\t: patterns.length === 0\n\t\t\t\t\t? new Set<string>()\n\t\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(\n\t\t\t\"extensions\",\n\t\t\tawait collectAutoExtensionEntries(join(configDir, \"extensions\")),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.extensions,\n\t\t);\n\t\taddResources(\n\t\t\t\"skills\",\n\t\t\tawait collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.skills,\n\t\t);\n\t\taddResources(\n\t\t\t\"prompts\",\n\t\t\tawait collectAutoPromptEntries(join(configDir, \"prompts\")),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.prompts,\n\t\t);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\n\t\t\t\"workflows\",\n\t\t\tawait collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.workflows,\n\t\t);\n\t}\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\n\t\t\"skills\",\n\t\tawait collectAutoSkillEntries(agentsSkillsDir, \"agents\"),\n\t\t{ ...projectMetadata, baseDir: dirname(agentsSkillsDir) },\n\t\tfilter?.skills,\n\t);\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 = {\n\t\tsource: \"auto\",\n\t\tscope: \"project\",\n\t\torigin: \"top-level\",\n\t\tbaseDir: projectBaseDir,\n\t};\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: Array.isArray(globalSettings.workflows)\n\t\t\t? globalSettings.workflows\n\t\t\t: (globalSettings.workflows?.paths ?? []),\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: Array.isArray(projectSettings.workflows)\n\t\t\t? projectSettings.workflows\n\t\t\t: (projectSettings.workflows?.paths ?? []),\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(\n\t\t\t\t(dir) => resolve(dir) !== resolve(userAgentsSkillsDir),\n\t\t\t)\n\t\t: [];\n\tconst addResources = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tmetadata: PathMetadata,\n\t\toverrides: string[],\n\t\tbaseDir: string,\n\t): 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 [index, configDir] of projectConfigDirs.entries()) {\n\t\t\tconst metadata: PathMetadata = {\n\t\t\t\t...projectMetadata,\n\t\t\t\tbaseDir: configDir,\n\t\t\t\tconfigurationOrigin: index === 0 ? \"atomic\" : \"inherited-pi\",\n\t\t\t};\n\t\t\taddResources(\n\t\t\t\t\"extensions\",\n\t\t\t\tawait collectAutoExtensionEntries(join(configDir, \"extensions\")),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.extensions,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"skills\",\n\t\t\t\tawait collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.skills,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"prompts\",\n\t\t\t\tawait collectAutoPromptEntries(join(configDir, \"prompts\")),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.prompts,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"themes\",\n\t\t\t\tawait collectAutoThemeEntries(join(configDir, \"themes\")),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.themes,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"workflows\",\n\t\t\t\tawait collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.workflows,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t}\n\t}\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\taddResources(\n\t\t\t\"skills\",\n\t\t\tawait collectAutoSkillEntries(agentsSkillsDir, \"agents\"),\n\t\t\t{ ...projectMetadata, baseDir: agentsBaseDir },\n\t\t\tprojectOverrides.skills,\n\t\t\tagentsBaseDir,\n\t\t);\n\t}\n\tfor (const [index, configDir] of userConfigDirs.entries()) {\n\t\tconst metadata: PathMetadata = {\n\t\t\t...userMetadata,\n\t\t\tbaseDir: configDir,\n\t\t\tconfigurationOrigin: index === 0 ? \"atomic\" : \"inherited-pi\",\n\t\t};\n\t\taddResources(\n\t\t\t\"extensions\",\n\t\t\tawait collectAutoExtensionEntries(join(configDir, \"extensions\")),\n\t\t\tmetadata,\n\t\t\tuserOverrides.extensions,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"skills\",\n\t\t\tawait collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"),\n\t\t\tmetadata,\n\t\t\tuserOverrides.skills,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"prompts\",\n\t\t\tawait collectAutoPromptEntries(join(configDir, \"prompts\")),\n\t\t\tmetadata,\n\t\t\tuserOverrides.prompts,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"themes\",\n\t\t\tawait collectAutoThemeEntries(join(configDir, \"themes\")),\n\t\t\tmetadata,\n\t\t\tuserOverrides.themes,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"workflows\",\n\t\t\tawait collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"),\n\t\t\tmetadata,\n\t\t\tuserOverrides.workflows,\n\t\t\tconfigDir,\n\t\t);\n\t}\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\taddResources(\n\t\t\"skills\",\n\t\tawait collectAutoSkillEntries(userAgentsSkillsDir, \"agents\"),\n\t\t{ ...userMetadata, baseDir: userAgentsBaseDir },\n\t\tuserOverrides.skills,\n\t\tuserAgentsBaseDir,\n\t);\n}\n"]}
1
+ {"version":3,"file":"package-manager-auto-resources.js","sourceRoot":"","sources":["../../src/core/package-manager-auto-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, join } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.js\";\nimport { pathsEqual } from \"../utils/paths.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 {\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResourceAccumulator,\n\tResourceType,\n} from \"./package-manager-types.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport 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 = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tresourceMetadata: PathMetadata,\n\t\tpatterns: string[] | undefined,\n\t): void => {\n\t\tif (paths.length === 0) return;\n\t\tfound = true;\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst enabledPaths =\n\t\t\tpatterns === undefined\n\t\t\t\t? new Set(paths)\n\t\t\t\t: patterns.length === 0\n\t\t\t\t\t? new Set<string>()\n\t\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(\n\t\t\t\"extensions\",\n\t\t\tawait collectAutoExtensionEntries(join(configDir, \"extensions\")),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.extensions,\n\t\t);\n\t\taddResources(\n\t\t\t\"skills\",\n\t\t\tawait collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.skills,\n\t\t);\n\t\taddResources(\n\t\t\t\"prompts\",\n\t\t\tawait collectAutoPromptEntries(join(configDir, \"prompts\")),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.prompts,\n\t\t);\n\t\taddResources(\"themes\", await collectAutoThemeEntries(join(configDir, \"themes\")), configMetadata, filter?.themes);\n\t\taddResources(\n\t\t\t\"workflows\",\n\t\t\tawait collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"),\n\t\t\tconfigMetadata,\n\t\t\tfilter?.workflows,\n\t\t);\n\t}\n\tconst agentsSkillsDir = join(sourceRoot, \".agents\", \"skills\");\n\taddResources(\n\t\t\"skills\",\n\t\tawait collectAutoSkillEntries(agentsSkillsDir, \"agents\"),\n\t\t{ ...projectMetadata, baseDir: dirname(agentsSkillsDir) },\n\t\tfilter?.skills,\n\t);\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 = {\n\t\tsource: \"auto\",\n\t\tscope: \"project\",\n\t\torigin: \"top-level\",\n\t\tbaseDir: projectBaseDir,\n\t};\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: Array.isArray(globalSettings.workflows)\n\t\t\t? globalSettings.workflows\n\t\t\t: (globalSettings.workflows?.paths ?? []),\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: Array.isArray(projectSettings.workflows)\n\t\t\t? projectSettings.workflows\n\t\t\t: (projectSettings.workflows?.paths ?? []),\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) => !pathsEqual(dir, userAgentsSkillsDir))\n\t\t: [];\n\tconst addResources = (\n\t\tresourceType: ResourceType,\n\t\tpaths: string[],\n\t\tmetadata: PathMetadata,\n\t\toverrides: string[],\n\t\tbaseDir: string,\n\t): 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 [index, configDir] of projectConfigDirs.entries()) {\n\t\t\tconst metadata: PathMetadata = {\n\t\t\t\t...projectMetadata,\n\t\t\t\tbaseDir: configDir,\n\t\t\t\tconfigurationOrigin: index === 0 ? \"atomic\" : \"inherited-pi\",\n\t\t\t};\n\t\t\taddResources(\n\t\t\t\t\"extensions\",\n\t\t\t\tawait collectAutoExtensionEntries(join(configDir, \"extensions\")),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.extensions,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"skills\",\n\t\t\t\tawait collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.skills,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"prompts\",\n\t\t\t\tawait collectAutoPromptEntries(join(configDir, \"prompts\")),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.prompts,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"themes\",\n\t\t\t\tawait collectAutoThemeEntries(join(configDir, \"themes\")),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.themes,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\t\"workflows\",\n\t\t\t\tawait collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"),\n\t\t\t\tmetadata,\n\t\t\t\tprojectOverrides.workflows,\n\t\t\t\tconfigDir,\n\t\t\t);\n\t\t}\n\t}\n\tfor (const agentsSkillsDir of projectAgentsSkillDirs) {\n\t\tconst agentsBaseDir = dirname(agentsSkillsDir);\n\t\taddResources(\n\t\t\t\"skills\",\n\t\t\tawait collectAutoSkillEntries(agentsSkillsDir, \"agents\"),\n\t\t\t{ ...projectMetadata, baseDir: agentsBaseDir },\n\t\t\tprojectOverrides.skills,\n\t\t\tagentsBaseDir,\n\t\t);\n\t}\n\tfor (const [index, configDir] of userConfigDirs.entries()) {\n\t\tconst metadata: PathMetadata = {\n\t\t\t...userMetadata,\n\t\t\tbaseDir: configDir,\n\t\t\tconfigurationOrigin: index === 0 ? \"atomic\" : \"inherited-pi\",\n\t\t};\n\t\taddResources(\n\t\t\t\"extensions\",\n\t\t\tawait collectAutoExtensionEntries(join(configDir, \"extensions\")),\n\t\t\tmetadata,\n\t\t\tuserOverrides.extensions,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"skills\",\n\t\t\tawait collectAutoSkillEntries(join(configDir, \"skills\"), \"pi\"),\n\t\t\tmetadata,\n\t\t\tuserOverrides.skills,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"prompts\",\n\t\t\tawait collectAutoPromptEntries(join(configDir, \"prompts\")),\n\t\t\tmetadata,\n\t\t\tuserOverrides.prompts,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"themes\",\n\t\t\tawait collectAutoThemeEntries(join(configDir, \"themes\")),\n\t\t\tmetadata,\n\t\t\tuserOverrides.themes,\n\t\t\tconfigDir,\n\t\t);\n\t\taddResources(\n\t\t\t\"workflows\",\n\t\t\tawait collectResourceFiles(join(configDir, \"workflows\"), \"workflows\"),\n\t\t\tmetadata,\n\t\t\tuserOverrides.workflows,\n\t\t\tconfigDir,\n\t\t);\n\t}\n\tconst userAgentsBaseDir = dirname(userAgentsSkillsDir);\n\taddResources(\n\t\t\"skills\",\n\t\tawait collectAutoSkillEntries(userAgentsSkillsDir, \"agents\"),\n\t\t{ ...userMetadata, baseDir: userAgentsBaseDir },\n\t\tuserOverrides.skills,\n\t\tuserAgentsBaseDir,\n\t);\n}\n"]}
@@ -3,7 +3,7 @@ import type { GitUpdateTargetInfo, PackageLocationContext, PackageManagerContext
3
3
  export declare function getExistingGitInstallPath(context: PackageLocationContext, source: GitSource, scope: SourceScope): string | undefined;
4
4
  export declare function installGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): Promise<void>;
5
5
  export declare function updateGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): Promise<void>;
6
- export declare function refreshTemporaryGitSource(context: PackageManagerContext, source: GitSource, sourceStr: string): Promise<void>;
6
+ export declare function refreshTemporaryGitSource(context: PackageManagerContext, source: GitSource, sourceStr: string, installedPath: string): Promise<void>;
7
7
  export declare function removeGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): Promise<void>;
8
8
  export declare function gitHasAvailableUpdate(context: PackageManagerContext, installedPath: string): Promise<boolean>;
9
9
  export declare function getLocalGitUpdateTarget(context: PackageManagerContext, installedPath: string): Promise<GitUpdateTargetInfo>;
@@ -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;AAQjD,OAAO,KAAK,EACX,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,MAAM,4BAA4B,CAAC;AA4CpC,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAepB;AA+CD,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CrH;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAepH;AAkCD,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpH;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,CAmD9B"}
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;AAQjD,OAAO,KAAK,EACX,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,MAAM,4BAA4B,CAAC;AA4CpC,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAepB;AA+CD,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CrH;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAepH;AAkCD,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpH;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,CAmD9B"}
@@ -185,11 +185,22 @@ async function ensureGitRef(context, targetDir, fetchArgs, ref) {
185
185
  await runGitProcess(context, "git", ["reset", "--hard", commitRef], { cwd: targetDir });
186
186
  await cleanAndInstallGitDependencies(context, targetDir, markerPath);
187
187
  }
188
- export async function refreshTemporaryGitSource(context, source, sourceStr) {
188
+ export async function refreshTemporaryGitSource(context, source, sourceStr, installedPath) {
189
189
  if (isOfflineModeEnabled()) {
190
190
  return;
191
191
  }
192
192
  try {
193
+ // A ref can name a moving branch, so refresh refs too. Skip the network call only when the
194
+ // ref is a commit hash that is already checked out.
195
+ if (source.ref && /^[0-9a-f]{7,64}$/i.test(source.ref)) {
196
+ const head = await captureGitProcess(context, "git", ["rev-parse", "HEAD"], {
197
+ cwd: installedPath,
198
+ timeoutMs: NETWORK_TIMEOUT_MS,
199
+ });
200
+ if (head.trim().toLowerCase().startsWith(source.ref.toLowerCase())) {
201
+ return;
202
+ }
203
+ }
193
204
  await withProgress(context, "pull", sourceStr, `Refreshing ${sourceStr}...`, async () => {
194
205
  await updateGit(context, source, "temporary");
195
206
  });
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-git.js","sourceRoot":"","sources":["../../src/core/package-manager-git.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve, sep } from \"node:path\";\nimport { APP_NAME, getProjectConfigDirs } from \"../config.js\";\nimport type { GitSource } from \"../utils/git.ts\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { runCommand, runCommandCapture } from \"./package-manager-command.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { ensureGitIgnore, getGitDependencyInstallArgs, runNpmCommand } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, getGitInstallPath, getGitInstallRoot } from \"./package-manager-paths.ts\";\nimport { withProgress } from \"./package-manager-progress.ts\";\nimport type {\n\tGitUpdateTargetInfo,\n\tPackageLocationContext,\n\tPackageManagerContext,\n\tSourceScope,\n} 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: PackageLocationContext,\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\nfunction getGitUpdateMarkerPath(targetDir: string): string {\n\treturn join(dirname(targetDir), `.${basename(targetDir)}.${APP_NAME}-update-incomplete`);\n}\n\nfunction hasMissingGitDependencies(targetDir: string): boolean {\n\tconst packageJsonPath = join(targetDir, \"package.json\");\n\tif (!existsSync(packageJsonPath)) return false;\n\ttry {\n\t\tconst manifest = JSON.parse(stripBom(readFileSync(packageJsonPath, \"utf-8\"))) as { dependencies?: unknown };\n\t\tif (!manifest.dependencies || typeof manifest.dependencies !== \"object\" || Array.isArray(manifest.dependencies)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst nodeModulesDir = resolve(targetDir, \"node_modules\");\n\t\treturn Object.keys(manifest.dependencies).some((name) => {\n\t\t\tconst dependencyPath = resolve(nodeModulesDir, name);\n\t\t\tif (!dependencyPath.startsWith(`${nodeModulesDir}${sep}`)) return false;\n\t\t\treturn !existsSync(dependencyPath);\n\t\t});\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function repairMissingGitDependencies(context: PackageManagerContext, targetDir: string): Promise<void> {\n\tif (!hasMissingGitDependencies(targetDir)) return;\n\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n}\n\nasync function cleanAndInstallGitDependencies(\n\tcontext: PackageManagerContext,\n\ttargetDir: string,\n\tmarkerPath: string,\n): Promise<void> {\n\ttry {\n\t\tawait runGitProcess(context, \"git\", [\"clean\", \"-fdx\"], { cwd: targetDir });\n\t} catch (error) {\n\t\tawait repairMissingGitDependencies(context, targetDir).catch(() => {});\n\t\tthrow error;\n\t}\n\tif (existsSync(join(targetDir, \"package.json\"))) {\n\t\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n\t}\n\trmSync(markerPath, { force: true });\n}\n\nexport async function installGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): 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\trmSync(getGitUpdateMarkerPath(targetDir), { force: 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\ttry {\n\t\tawait runGitProcess(context, \"git\", [\"clone\", \"--\", cloneUrl, targetDir]);\n\t\tif (safeRef) {\n\t\t\tawait runGitProcess(context, \"git\", [\"checkout\", safeRef], { cwd: targetDir });\n\t\t}\n\t\tconst packageJsonPath = join(targetDir, \"package.json\");\n\t\tif (existsSync(packageJsonPath)) {\n\t\t\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n\t\t}\n\t} catch (error) {\n\t\t// A half-written clone would otherwise be treated as installed by the\n\t\t// `existsSync(targetDir)` check above, so the next install silently skips\n\t\t// the repair. Remove it, then drop the now-empty host/owner directories.\n\t\trmSync(targetDir, { recursive: true, force: true });\n\t\tpruneEmptyGitParents(targetDir, gitRoot);\n\t\tthrow error;\n\t}\n}\n\nexport async function updateGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): 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\tconst markerPath = getGitUpdateMarkerPath(targetDir);\n\tif (localHead.trim() === targetHead.trim()) {\n\t\tif (existsSync(markerPath)) {\n\t\t\tawait cleanAndInstallGitDependencies(context, targetDir, markerPath);\n\t\t} else {\n\t\t\tawait repairMissingGitDependencies(context, targetDir);\n\t\t}\n\t\treturn;\n\t}\n\n\twriteFileSync(markerPath, \"\", \"utf-8\");\n\tawait runGitProcess(context, \"git\", [\"reset\", \"--hard\", commitRef], { cwd: targetDir });\n\tawait cleanAndInstallGitDependencies(context, targetDir, markerPath);\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(context: PackageManagerContext, source: GitSource, scope: SourceScope): Promise<void> {\n\tconst targetDir = getGitInstallPath(context, source, scope);\n\trmSync(targetDir, { recursive: true, force: true });\n\trmSync(getGitUpdateMarkerPath(targetDir), { 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\t\t() => {},\n\t\t);\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: [\n\t\t\t\t\t\"fetch\",\n\t\t\t\t\t\"--prune\",\n\t\t\t\t\t\"--no-tags\",\n\t\t\t\t\t\"origin\",\n\t\t\t\t\t`+refs/heads/${branch}:refs/remotes/origin/${branch}`,\n\t\t\t\t],\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"]}
1
+ {"version":3,"file":"package-manager-git.js","sourceRoot":"","sources":["../../src/core/package-manager-git.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve, sep } from \"node:path\";\nimport { APP_NAME, getProjectConfigDirs } from \"../config.js\";\nimport type { GitSource } from \"../utils/git.ts\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { runCommand, runCommandCapture } from \"./package-manager-command.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { ensureGitIgnore, getGitDependencyInstallArgs, runNpmCommand } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, getGitInstallPath, getGitInstallRoot } from \"./package-manager-paths.ts\";\nimport { withProgress } from \"./package-manager-progress.ts\";\nimport type {\n\tGitUpdateTargetInfo,\n\tPackageLocationContext,\n\tPackageManagerContext,\n\tSourceScope,\n} 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: PackageLocationContext,\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\nfunction getGitUpdateMarkerPath(targetDir: string): string {\n\treturn join(dirname(targetDir), `.${basename(targetDir)}.${APP_NAME}-update-incomplete`);\n}\n\nfunction hasMissingGitDependencies(targetDir: string): boolean {\n\tconst packageJsonPath = join(targetDir, \"package.json\");\n\tif (!existsSync(packageJsonPath)) return false;\n\ttry {\n\t\tconst manifest = JSON.parse(stripBom(readFileSync(packageJsonPath, \"utf-8\"))) as { dependencies?: unknown };\n\t\tif (!manifest.dependencies || typeof manifest.dependencies !== \"object\" || Array.isArray(manifest.dependencies)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst nodeModulesDir = resolve(targetDir, \"node_modules\");\n\t\treturn Object.keys(manifest.dependencies).some((name) => {\n\t\t\tconst dependencyPath = resolve(nodeModulesDir, name);\n\t\t\tif (!dependencyPath.startsWith(`${nodeModulesDir}${sep}`)) return false;\n\t\t\treturn !existsSync(dependencyPath);\n\t\t});\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function repairMissingGitDependencies(context: PackageManagerContext, targetDir: string): Promise<void> {\n\tif (!hasMissingGitDependencies(targetDir)) return;\n\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n}\n\nasync function cleanAndInstallGitDependencies(\n\tcontext: PackageManagerContext,\n\ttargetDir: string,\n\tmarkerPath: string,\n): Promise<void> {\n\ttry {\n\t\tawait runGitProcess(context, \"git\", [\"clean\", \"-fdx\"], { cwd: targetDir });\n\t} catch (error) {\n\t\tawait repairMissingGitDependencies(context, targetDir).catch(() => {});\n\t\tthrow error;\n\t}\n\tif (existsSync(join(targetDir, \"package.json\"))) {\n\t\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n\t}\n\trmSync(markerPath, { force: true });\n}\n\nexport async function installGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): 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\trmSync(getGitUpdateMarkerPath(targetDir), { force: 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\ttry {\n\t\tawait runGitProcess(context, \"git\", [\"clone\", \"--\", cloneUrl, targetDir]);\n\t\tif (safeRef) {\n\t\t\tawait runGitProcess(context, \"git\", [\"checkout\", safeRef], { cwd: targetDir });\n\t\t}\n\t\tconst packageJsonPath = join(targetDir, \"package.json\");\n\t\tif (existsSync(packageJsonPath)) {\n\t\t\tawait runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });\n\t\t}\n\t} catch (error) {\n\t\t// A half-written clone would otherwise be treated as installed by the\n\t\t// `existsSync(targetDir)` check above, so the next install silently skips\n\t\t// the repair. Remove it, then drop the now-empty host/owner directories.\n\t\trmSync(targetDir, { recursive: true, force: true });\n\t\tpruneEmptyGitParents(targetDir, gitRoot);\n\t\tthrow error;\n\t}\n}\n\nexport async function updateGit(context: PackageManagerContext, source: GitSource, scope: SourceScope): 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\tconst markerPath = getGitUpdateMarkerPath(targetDir);\n\tif (localHead.trim() === targetHead.trim()) {\n\t\tif (existsSync(markerPath)) {\n\t\t\tawait cleanAndInstallGitDependencies(context, targetDir, markerPath);\n\t\t} else {\n\t\t\tawait repairMissingGitDependencies(context, targetDir);\n\t\t}\n\t\treturn;\n\t}\n\n\twriteFileSync(markerPath, \"\", \"utf-8\");\n\tawait runGitProcess(context, \"git\", [\"reset\", \"--hard\", commitRef], { cwd: targetDir });\n\tawait cleanAndInstallGitDependencies(context, targetDir, markerPath);\n}\n\nexport async function refreshTemporaryGitSource(\n\tcontext: PackageManagerContext,\n\tsource: GitSource,\n\tsourceStr: string,\n\tinstalledPath: string,\n): Promise<void> {\n\tif (isOfflineModeEnabled()) {\n\t\treturn;\n\t}\n\ttry {\n\t\t// A ref can name a moving branch, so refresh refs too. Skip the network call only when the\n\t\t// ref is a commit hash that is already checked out.\n\t\tif (source.ref && /^[0-9a-f]{7,64}$/i.test(source.ref)) {\n\t\t\tconst head = await captureGitProcess(context, \"git\", [\"rev-parse\", \"HEAD\"], {\n\t\t\t\tcwd: installedPath,\n\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t});\n\t\t\tif (head.trim().toLowerCase().startsWith(source.ref.toLowerCase())) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\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(context: PackageManagerContext, source: GitSource, scope: SourceScope): Promise<void> {\n\tconst targetDir = getGitInstallPath(context, source, scope);\n\trmSync(targetDir, { recursive: true, force: true });\n\trmSync(getGitUpdateMarkerPath(targetDir), { 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\t\t() => {},\n\t\t);\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: [\n\t\t\t\t\t\"fetch\",\n\t\t\t\t\t\"--prune\",\n\t\t\t\t\t\"--no-tags\",\n\t\t\t\t\t\"origin\",\n\t\t\t\t\t`+refs/heads/${branch}:refs/remotes/origin/${branch}`,\n\t\t\t\t],\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"]}
@@ -9,7 +9,7 @@ export declare function runNpmCommand(context: PackageManagerContext, args: stri
9
9
  }): Promise<void>;
10
10
  export declare function runNpmCommandSync(context: PackageManagerContext, args: string[]): string;
11
11
  export declare function getGitDependencyInstallArgs(context: PackageManagerContext): string[];
12
- export declare function getNpmInstallArgs(context: PackageManagerContext, specs: string[], installRoot: string): string[];
12
+ export declare function getNpmInstallArgs(context: PackageManagerContext, specs: string[], root: string): string[];
13
13
  export declare function installNpm(context: PackageManagerContext, source: NpmSource, scope: SourceScope, temporary: boolean): Promise<void>;
14
14
  export declare function uninstallNpm(context: PackageManagerContext, source: NpmSource, scope: SourceScope): Promise<void>;
15
15
  export declare function installNpmBatch(context: PackageManagerContext, specs: string[], scope: InstalledSourceScope): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-npm.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,oBAAoB,EACpB,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,MAAM,4BAA4B,CAAC;AAEpC,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,CAmB5E;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,CAiBpF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBhH;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,CAYf;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,sBAAsB,EAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAcvE;AA4BD,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,CAclB;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,CAyBjB"}
1
+ {"version":3,"file":"package-manager-npm.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,oBAAoB,EACpB,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,MAAM,4BAA4B,CAAC;AAEpC,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,CAmB5E;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,CAiBpF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBzG;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,CAcf;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,sBAAsB,EAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAcvE;AA4BD,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,CAclB;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,CAyBjB"}
@@ -1,4 +1,4 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
1
+ import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
2
2
  import { basename, dirname, join } from "node:path";
3
3
  import { gt, maxSatisfying, rcompare, satisfies } from "semver";
4
4
  import { APP_NAME, CONFIG_DIR_NAME, getProjectConfigDirs } from "../config.js";
@@ -72,7 +72,9 @@ export function getGitDependencyInstallArgs(context) {
72
72
  return ["install"];
73
73
  }
74
74
  }
75
- export function getNpmInstallArgs(context, specs, installRoot) {
75
+ export function getNpmInstallArgs(context, specs, root) {
76
+ // npm writes broken nested package-lock.json paths when --prefix goes through a symlink.
77
+ const installRoot = existsSync(root) ? realpathSync(root) : root;
76
78
  const packageManagerName = getPackageManagerName(context);
77
79
  if (packageManagerName === "bun") {
78
80
  return ["install", ...specs, "--cwd", installRoot, "--omit=peer"];
@@ -97,10 +99,12 @@ export async function installNpm(context, source, scope, temporary) {
97
99
  await runNpmCommand(context, getNpmInstallArgs(context, [source.spec], installRoot));
98
100
  }
99
101
  export async function uninstallNpm(context, source, scope) {
100
- const installRoot = getNpmInstallRoot(context, scope, false);
101
- if (!existsSync(installRoot)) {
102
+ const root = getNpmInstallRoot(context, scope, false);
103
+ if (!existsSync(root)) {
102
104
  return;
103
105
  }
106
+ // npm writes broken nested package-lock.json paths when --prefix goes through a symlink.
107
+ const installRoot = realpathSync(root);
104
108
  if (getPackageManagerName(context) === "bun") {
105
109
  await runNpmCommand(context, ["uninstall", source.name, "--cwd", installRoot]);
106
110
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-npm.js","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { gt, maxSatisfying, rcompare, satisfies } from \"semver\";\nimport { APP_NAME, CONFIG_DIR_NAME, getProjectConfigDirs } from \"../config.js\";\nimport { markPathIgnoredByCloudSync } from \"../utils/paths.ts\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { runCommand, runCommandCapture, runCommandSync } from \"./package-manager-command.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getNpmInstallRoot } from \"./package-manager-paths.ts\";\nimport type {\n\tInstalledSourceScope,\n\tNpmSource,\n\tPackageLocationContext,\n\tPackageManagerContext,\n\tSourceScope,\n} 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 normalizeCommandName = (command: string): string => basename(command).replace(/\\.(cmd|exe)$/i, \"\");\n\tconst supportedPackageManagers = new Set([\"npm\", \"pnpm\", \"bun\"]);\n\tconst directCommand = normalizeCommandName(npmCommand.command);\n\tconst separatorIndex = npmCommand.args.lastIndexOf(\"--\");\n\tif (separatorIndex >= 0) {\n\t\tconst wrappedCommand = npmCommand.args[separatorIndex + 1];\n\t\treturn wrappedCommand ? normalizeCommandName(wrappedCommand) : directCommand;\n\t}\n\tif (supportedPackageManagers.has(directCommand)) return directCommand;\n\n\tconst wrappedPackageManagers = [\n\t\t...new Set(npmCommand.args.map(normalizeCommandName).filter((command) => supportedPackageManagers.has(command))),\n\t];\n\tif (wrappedPackageManagers.length > 1) {\n\t\tthrow new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(\", \")}`);\n\t}\n\treturn wrappedPackageManagers[0] ?? directCommand;\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\tswitch (getPackageManagerName(context)) {\n\t\tcase \"bun\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--omit=peer\"];\n\t\tcase \"pnpm\":\n\t\t\treturn [\n\t\t\t\t\"install\",\n\t\t\t\t\"--prod\",\n\t\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\t\"--config.strict-dep-builds=false\",\n\t\t\t];\n\t\tcase \"npm\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--legacy-peer-deps\", \"--no-audit\", \"--no-fund\"];\n\t\tdefault:\n\t\t\treturn [\"install\"];\n\t}\n}\n\nexport function getNpmInstallArgs(context: PackageManagerContext, specs: string[], installRoot: string): 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\t// npm audit fix would run without --legacy-peer-deps and install Atomic peers, so skip audit advice.\n\treturn [\"install\", ...specs, \"--prefix\", installRoot, \"--legacy-peer-deps\", \"--no-audit\", \"--no-fund\"];\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\tconst args = [\"uninstall\", source.name, \"--prefix\", installRoot];\n\tif (getPackageManagerName(context) !== \"pnpm\") args.push(\"--no-audit\", \"--no-fund\");\n\tawait runNpmCommand(context, args);\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: PackageLocationContext,\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\n\t\t\t? context.driver.getGlobalNpmRoot()\n\t\t\t: 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(\n\t\t\tcontext,\n\t\t\tsource.version ? source.spec : source.name,\n\t\t\tsource.range,\n\t\t);\n\t\treturn gt(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(stripBom(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(\n\t\t\t\tnpmCommand.command,\n\t\t\t\t[...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"],\n\t\t\t\t{\n\t\t\t\t\tcwd: context.cwd,\n\t\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t\t},\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.js","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { gt, maxSatisfying, rcompare, satisfies } from \"semver\";\nimport { APP_NAME, CONFIG_DIR_NAME, getProjectConfigDirs } from \"../config.js\";\nimport { markPathIgnoredByCloudSync } from \"../utils/paths.ts\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { runCommand, runCommandCapture, runCommandSync } from \"./package-manager-command.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getNpmInstallRoot } from \"./package-manager-paths.ts\";\nimport type {\n\tInstalledSourceScope,\n\tNpmSource,\n\tPackageLocationContext,\n\tPackageManagerContext,\n\tSourceScope,\n} 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 normalizeCommandName = (command: string): string => basename(command).replace(/\\.(cmd|exe)$/i, \"\");\n\tconst supportedPackageManagers = new Set([\"npm\", \"pnpm\", \"bun\"]);\n\tconst directCommand = normalizeCommandName(npmCommand.command);\n\tconst separatorIndex = npmCommand.args.lastIndexOf(\"--\");\n\tif (separatorIndex >= 0) {\n\t\tconst wrappedCommand = npmCommand.args[separatorIndex + 1];\n\t\treturn wrappedCommand ? normalizeCommandName(wrappedCommand) : directCommand;\n\t}\n\tif (supportedPackageManagers.has(directCommand)) return directCommand;\n\n\tconst wrappedPackageManagers = [\n\t\t...new Set(npmCommand.args.map(normalizeCommandName).filter((command) => supportedPackageManagers.has(command))),\n\t];\n\tif (wrappedPackageManagers.length > 1) {\n\t\tthrow new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(\", \")}`);\n\t}\n\treturn wrappedPackageManagers[0] ?? directCommand;\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\tswitch (getPackageManagerName(context)) {\n\t\tcase \"bun\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--omit=peer\"];\n\t\tcase \"pnpm\":\n\t\t\treturn [\n\t\t\t\t\"install\",\n\t\t\t\t\"--prod\",\n\t\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\t\"--config.strict-dep-builds=false\",\n\t\t\t];\n\t\tcase \"npm\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--legacy-peer-deps\", \"--no-audit\", \"--no-fund\"];\n\t\tdefault:\n\t\t\treturn [\"install\"];\n\t}\n}\n\nexport function getNpmInstallArgs(context: PackageManagerContext, specs: string[], root: string): string[] {\n\t// npm writes broken nested package-lock.json paths when --prefix goes through a symlink.\n\tconst installRoot = existsSync(root) ? realpathSync(root) : root;\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\t// npm audit fix would run without --legacy-peer-deps and install Atomic peers, so skip audit advice.\n\treturn [\"install\", ...specs, \"--prefix\", installRoot, \"--legacy-peer-deps\", \"--no-audit\", \"--no-fund\"];\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 root = getNpmInstallRoot(context, scope, false);\n\tif (!existsSync(root)) {\n\t\treturn;\n\t}\n\t// npm writes broken nested package-lock.json paths when --prefix goes through a symlink.\n\tconst installRoot = realpathSync(root);\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tawait runNpmCommand(context, [\"uninstall\", source.name, \"--cwd\", installRoot]);\n\t\treturn;\n\t}\n\tconst args = [\"uninstall\", source.name, \"--prefix\", installRoot];\n\tif (getPackageManagerName(context) !== \"pnpm\") args.push(\"--no-audit\", \"--no-fund\");\n\tawait runNpmCommand(context, args);\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: PackageLocationContext,\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\n\t\t\t? context.driver.getGlobalNpmRoot()\n\t\t\t: 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(\n\t\t\tcontext,\n\t\t\tsource.version ? source.spec : source.name,\n\t\t\tsource.range,\n\t\t);\n\t\treturn gt(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(stripBom(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(\n\t\t\t\tnpmCommand.command,\n\t\t\t\t[...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"],\n\t\t\t\t{\n\t\t\t\t\tcwd: context.cwd,\n\t\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t\t},\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 +1 @@
1
- {"version":3,"file":"package-manager-operations.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-operations.ts"],"names":[],"mappings":"AAgCA,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;AAmFD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAoCvG"}
1
+ {"version":3,"file":"package-manager-operations.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-operations.ts"],"names":[],"mappings":"AAgCA,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;AAgHD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAoCvG"}