@salesforce/b2c-tooling-sdk 0.1.0 → 0.2.0

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 (281) hide show
  1. package/dist/cjs/auth/index.d.ts +2 -0
  2. package/dist/cjs/auth/index.js +2 -0
  3. package/dist/cjs/auth/index.js.map +1 -1
  4. package/dist/cjs/auth/middleware.d.ts +196 -0
  5. package/dist/cjs/auth/middleware.js +190 -0
  6. package/dist/cjs/auth/middleware.js.map +1 -0
  7. package/dist/cjs/auth/oauth.js +21 -9
  8. package/dist/cjs/auth/oauth.js.map +1 -1
  9. package/dist/cjs/cli/base-command.d.ts +15 -0
  10. package/dist/cjs/cli/base-command.js +58 -2
  11. package/dist/cjs/cli/base-command.js.map +1 -1
  12. package/dist/cjs/cli/hooks.d.ts +98 -5
  13. package/dist/cjs/cli/hooks.js.map +1 -1
  14. package/dist/cjs/cli/instance-command.d.ts +1 -0
  15. package/dist/cjs/cli/mrt-command.d.ts +2 -1
  16. package/dist/cjs/cli/mrt-command.js +3 -2
  17. package/dist/cjs/cli/mrt-command.js.map +1 -1
  18. package/dist/cjs/cli/oauth-command.d.ts +1 -0
  19. package/dist/cjs/cli/oauth-command.js +6 -0
  20. package/dist/cjs/cli/oauth-command.js.map +1 -1
  21. package/dist/cjs/cli/ods-command.d.ts +1 -0
  22. package/dist/cjs/cli/webdav-command.d.ts +1 -0
  23. package/dist/cjs/clients/cdn-zones.d.ts +154 -0
  24. package/dist/cjs/clients/cdn-zones.generated.d.ts +8330 -0
  25. package/dist/cjs/clients/cdn-zones.generated.js +6 -0
  26. package/dist/cjs/clients/cdn-zones.generated.js.map +1 -0
  27. package/dist/cjs/clients/cdn-zones.js +100 -0
  28. package/dist/cjs/clients/cdn-zones.js.map +1 -0
  29. package/dist/cjs/clients/error-utils.d.ts +35 -0
  30. package/dist/cjs/clients/error-utils.js +69 -0
  31. package/dist/cjs/clients/error-utils.js.map +1 -0
  32. package/dist/cjs/clients/index.d.ts +8 -2
  33. package/dist/cjs/clients/index.js +6 -1
  34. package/dist/cjs/clients/index.js.map +1 -1
  35. package/dist/cjs/clients/middleware-registry.d.ts +1 -1
  36. package/dist/cjs/clients/middleware-registry.js.map +1 -1
  37. package/dist/cjs/clients/middleware.d.ts +25 -0
  38. package/dist/cjs/clients/middleware.js +16 -10
  39. package/dist/cjs/clients/middleware.js.map +1 -1
  40. package/dist/cjs/clients/mrt-b2c.d.ts +114 -0
  41. package/dist/cjs/clients/mrt-b2c.generated.d.ts +176 -0
  42. package/dist/cjs/clients/mrt-b2c.generated.js +6 -0
  43. package/dist/cjs/clients/mrt-b2c.generated.js.map +1 -0
  44. package/dist/cjs/clients/mrt-b2c.js +86 -0
  45. package/dist/cjs/clients/mrt-b2c.js.map +1 -0
  46. package/dist/cjs/clients/user-agent.d.ts +43 -0
  47. package/dist/cjs/clients/user-agent.js +87 -0
  48. package/dist/cjs/clients/user-agent.js.map +1 -0
  49. package/dist/cjs/config/dw-json.d.ts +6 -0
  50. package/dist/cjs/config/dw-json.js.map +1 -1
  51. package/dist/cjs/config/mapping.js +3 -0
  52. package/dist/cjs/config/mapping.js.map +1 -1
  53. package/dist/cjs/config/resolver.d.ts +2 -1
  54. package/dist/cjs/config/resolver.js +14 -7
  55. package/dist/cjs/config/resolver.js.map +1 -1
  56. package/dist/cjs/config/sources/dw-json-source.d.ts +1 -0
  57. package/dist/cjs/config/sources/dw-json-source.js +1 -0
  58. package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
  59. package/dist/cjs/config/sources/index.d.ts +1 -0
  60. package/dist/cjs/config/sources/index.js +1 -0
  61. package/dist/cjs/config/sources/index.js.map +1 -1
  62. package/dist/cjs/config/sources/mobify-source.d.ts +1 -0
  63. package/dist/cjs/config/sources/mobify-source.js +1 -0
  64. package/dist/cjs/config/sources/mobify-source.js.map +1 -1
  65. package/dist/cjs/config/sources/package-json-source.d.ts +14 -0
  66. package/dist/cjs/config/sources/package-json-source.js +86 -0
  67. package/dist/cjs/config/sources/package-json-source.js.map +1 -0
  68. package/dist/cjs/config/types.d.ts +14 -0
  69. package/dist/cjs/index.d.ts +3 -2
  70. package/dist/cjs/index.js +3 -1
  71. package/dist/cjs/index.js.map +1 -1
  72. package/dist/cjs/operations/code/deploy.js +9 -3
  73. package/dist/cjs/operations/code/deploy.js.map +1 -1
  74. package/dist/cjs/operations/mrt/access-control.d.ts +192 -0
  75. package/dist/cjs/operations/mrt/access-control.js +152 -0
  76. package/dist/cjs/operations/mrt/access-control.js.map +1 -0
  77. package/dist/cjs/operations/mrt/b2c-config.d.ts +201 -0
  78. package/dist/cjs/operations/mrt/b2c-config.js +195 -0
  79. package/dist/cjs/operations/mrt/b2c-config.js.map +1 -0
  80. package/dist/cjs/operations/mrt/cache.d.ts +80 -0
  81. package/dist/cjs/operations/mrt/cache.js +65 -0
  82. package/dist/cjs/operations/mrt/cache.js.map +1 -0
  83. package/dist/cjs/operations/mrt/deployment.d.ts +157 -0
  84. package/dist/cjs/operations/mrt/deployment.js +109 -0
  85. package/dist/cjs/operations/mrt/deployment.js.map +1 -0
  86. package/dist/cjs/operations/mrt/env.d.ts +141 -0
  87. package/dist/cjs/operations/mrt/env.js +119 -0
  88. package/dist/cjs/operations/mrt/env.js.map +1 -1
  89. package/dist/cjs/operations/mrt/index.d.ts +24 -4
  90. package/dist/cjs/operations/mrt/index.js +23 -3
  91. package/dist/cjs/operations/mrt/index.js.map +1 -1
  92. package/dist/cjs/operations/mrt/member.d.ts +281 -0
  93. package/dist/cjs/operations/mrt/member.js +244 -0
  94. package/dist/cjs/operations/mrt/member.js.map +1 -0
  95. package/dist/cjs/operations/mrt/notification.d.ts +252 -0
  96. package/dist/cjs/operations/mrt/notification.js +206 -0
  97. package/dist/cjs/operations/mrt/notification.js.map +1 -0
  98. package/dist/cjs/operations/mrt/organization.d.ts +80 -0
  99. package/dist/cjs/operations/mrt/organization.js +53 -0
  100. package/dist/cjs/operations/mrt/organization.js.map +1 -0
  101. package/dist/cjs/operations/mrt/project.d.ts +261 -0
  102. package/dist/cjs/operations/mrt/project.js +232 -0
  103. package/dist/cjs/operations/mrt/project.js.map +1 -0
  104. package/dist/cjs/operations/mrt/push.d.ts +122 -8
  105. package/dist/cjs/operations/mrt/push.js +83 -10
  106. package/dist/cjs/operations/mrt/push.js.map +1 -1
  107. package/dist/cjs/operations/mrt/redirect.d.ts +337 -0
  108. package/dist/cjs/operations/mrt/redirect.js +256 -0
  109. package/dist/cjs/operations/mrt/redirect.js.map +1 -0
  110. package/dist/cjs/operations/mrt/user.d.ts +135 -0
  111. package/dist/cjs/operations/mrt/user.js +153 -0
  112. package/dist/cjs/operations/mrt/user.js.map +1 -0
  113. package/dist/cjs/skills/agents.d.ts +41 -0
  114. package/dist/cjs/skills/agents.js +159 -0
  115. package/dist/cjs/skills/agents.js.map +1 -0
  116. package/dist/cjs/skills/github.d.ts +47 -0
  117. package/dist/cjs/skills/github.js +246 -0
  118. package/dist/cjs/skills/github.js.map +1 -0
  119. package/dist/cjs/skills/index.d.ts +42 -0
  120. package/dist/cjs/skills/index.js +14 -0
  121. package/dist/cjs/skills/index.js.map +1 -0
  122. package/dist/cjs/skills/installer.d.ts +34 -0
  123. package/dist/cjs/skills/installer.js +181 -0
  124. package/dist/cjs/skills/installer.js.map +1 -0
  125. package/dist/cjs/skills/parser.d.ts +39 -0
  126. package/dist/cjs/skills/parser.js +131 -0
  127. package/dist/cjs/skills/parser.js.map +1 -0
  128. package/dist/cjs/skills/types.d.ts +134 -0
  129. package/dist/cjs/skills/types.js +7 -0
  130. package/dist/cjs/skills/types.js.map +1 -0
  131. package/dist/cjs/test-utils/config-isolation.d.ts +2 -0
  132. package/dist/cjs/test-utils/config-isolation.js +41 -0
  133. package/dist/cjs/test-utils/config-isolation.js.map +1 -0
  134. package/dist/cjs/test-utils/index.d.ts +1 -0
  135. package/dist/cjs/test-utils/index.js +7 -0
  136. package/dist/cjs/test-utils/index.js.map +1 -0
  137. package/dist/cjs/version.d.ts +14 -0
  138. package/dist/cjs/version.js +29 -0
  139. package/dist/cjs/version.js.map +1 -0
  140. package/dist/esm/auth/index.d.ts +2 -0
  141. package/dist/esm/auth/index.js +2 -0
  142. package/dist/esm/auth/index.js.map +1 -1
  143. package/dist/esm/auth/middleware.d.ts +196 -0
  144. package/dist/esm/auth/middleware.js +190 -0
  145. package/dist/esm/auth/middleware.js.map +1 -0
  146. package/dist/esm/auth/oauth.js +21 -9
  147. package/dist/esm/auth/oauth.js.map +1 -1
  148. package/dist/esm/cli/base-command.d.ts +15 -0
  149. package/dist/esm/cli/base-command.js +58 -2
  150. package/dist/esm/cli/base-command.js.map +1 -1
  151. package/dist/esm/cli/hooks.d.ts +98 -5
  152. package/dist/esm/cli/hooks.js.map +1 -1
  153. package/dist/esm/cli/instance-command.d.ts +1 -0
  154. package/dist/esm/cli/mrt-command.d.ts +2 -1
  155. package/dist/esm/cli/mrt-command.js +3 -2
  156. package/dist/esm/cli/mrt-command.js.map +1 -1
  157. package/dist/esm/cli/oauth-command.d.ts +1 -0
  158. package/dist/esm/cli/oauth-command.js +6 -0
  159. package/dist/esm/cli/oauth-command.js.map +1 -1
  160. package/dist/esm/cli/ods-command.d.ts +1 -0
  161. package/dist/esm/cli/webdav-command.d.ts +1 -0
  162. package/dist/esm/clients/cdn-zones.d.ts +154 -0
  163. package/dist/esm/clients/cdn-zones.generated.d.ts +8330 -0
  164. package/dist/esm/clients/cdn-zones.generated.js +6 -0
  165. package/dist/esm/clients/cdn-zones.generated.js.map +1 -0
  166. package/dist/esm/clients/cdn-zones.js +100 -0
  167. package/dist/esm/clients/cdn-zones.js.map +1 -0
  168. package/dist/esm/clients/error-utils.d.ts +35 -0
  169. package/dist/esm/clients/error-utils.js +69 -0
  170. package/dist/esm/clients/error-utils.js.map +1 -0
  171. package/dist/esm/clients/index.d.ts +8 -2
  172. package/dist/esm/clients/index.js +6 -1
  173. package/dist/esm/clients/index.js.map +1 -1
  174. package/dist/esm/clients/middleware-registry.d.ts +1 -1
  175. package/dist/esm/clients/middleware-registry.js.map +1 -1
  176. package/dist/esm/clients/middleware.d.ts +25 -0
  177. package/dist/esm/clients/middleware.js +16 -10
  178. package/dist/esm/clients/middleware.js.map +1 -1
  179. package/dist/esm/clients/mrt-b2c.d.ts +114 -0
  180. package/dist/esm/clients/mrt-b2c.generated.d.ts +176 -0
  181. package/dist/esm/clients/mrt-b2c.generated.js +6 -0
  182. package/dist/esm/clients/mrt-b2c.generated.js.map +1 -0
  183. package/dist/esm/clients/mrt-b2c.js +86 -0
  184. package/dist/esm/clients/mrt-b2c.js.map +1 -0
  185. package/dist/esm/clients/user-agent.d.ts +43 -0
  186. package/dist/esm/clients/user-agent.js +87 -0
  187. package/dist/esm/clients/user-agent.js.map +1 -0
  188. package/dist/esm/config/dw-json.d.ts +6 -0
  189. package/dist/esm/config/dw-json.js.map +1 -1
  190. package/dist/esm/config/mapping.js +3 -0
  191. package/dist/esm/config/mapping.js.map +1 -1
  192. package/dist/esm/config/resolver.d.ts +2 -1
  193. package/dist/esm/config/resolver.js +14 -7
  194. package/dist/esm/config/resolver.js.map +1 -1
  195. package/dist/esm/config/sources/dw-json-source.d.ts +1 -0
  196. package/dist/esm/config/sources/dw-json-source.js +1 -0
  197. package/dist/esm/config/sources/dw-json-source.js.map +1 -1
  198. package/dist/esm/config/sources/index.d.ts +1 -0
  199. package/dist/esm/config/sources/index.js +1 -0
  200. package/dist/esm/config/sources/index.js.map +1 -1
  201. package/dist/esm/config/sources/mobify-source.d.ts +1 -0
  202. package/dist/esm/config/sources/mobify-source.js +1 -0
  203. package/dist/esm/config/sources/mobify-source.js.map +1 -1
  204. package/dist/esm/config/sources/package-json-source.d.ts +14 -0
  205. package/dist/esm/config/sources/package-json-source.js +86 -0
  206. package/dist/esm/config/sources/package-json-source.js.map +1 -0
  207. package/dist/esm/config/types.d.ts +14 -0
  208. package/dist/esm/index.d.ts +3 -2
  209. package/dist/esm/index.js +3 -1
  210. package/dist/esm/index.js.map +1 -1
  211. package/dist/esm/operations/code/deploy.js +9 -3
  212. package/dist/esm/operations/code/deploy.js.map +1 -1
  213. package/dist/esm/operations/mrt/access-control.d.ts +192 -0
  214. package/dist/esm/operations/mrt/access-control.js +152 -0
  215. package/dist/esm/operations/mrt/access-control.js.map +1 -0
  216. package/dist/esm/operations/mrt/b2c-config.d.ts +201 -0
  217. package/dist/esm/operations/mrt/b2c-config.js +195 -0
  218. package/dist/esm/operations/mrt/b2c-config.js.map +1 -0
  219. package/dist/esm/operations/mrt/cache.d.ts +80 -0
  220. package/dist/esm/operations/mrt/cache.js +65 -0
  221. package/dist/esm/operations/mrt/cache.js.map +1 -0
  222. package/dist/esm/operations/mrt/deployment.d.ts +157 -0
  223. package/dist/esm/operations/mrt/deployment.js +109 -0
  224. package/dist/esm/operations/mrt/deployment.js.map +1 -0
  225. package/dist/esm/operations/mrt/env.d.ts +141 -0
  226. package/dist/esm/operations/mrt/env.js +119 -0
  227. package/dist/esm/operations/mrt/env.js.map +1 -1
  228. package/dist/esm/operations/mrt/index.d.ts +24 -4
  229. package/dist/esm/operations/mrt/index.js +23 -3
  230. package/dist/esm/operations/mrt/index.js.map +1 -1
  231. package/dist/esm/operations/mrt/member.d.ts +281 -0
  232. package/dist/esm/operations/mrt/member.js +244 -0
  233. package/dist/esm/operations/mrt/member.js.map +1 -0
  234. package/dist/esm/operations/mrt/notification.d.ts +252 -0
  235. package/dist/esm/operations/mrt/notification.js +206 -0
  236. package/dist/esm/operations/mrt/notification.js.map +1 -0
  237. package/dist/esm/operations/mrt/organization.d.ts +80 -0
  238. package/dist/esm/operations/mrt/organization.js +53 -0
  239. package/dist/esm/operations/mrt/organization.js.map +1 -0
  240. package/dist/esm/operations/mrt/project.d.ts +261 -0
  241. package/dist/esm/operations/mrt/project.js +232 -0
  242. package/dist/esm/operations/mrt/project.js.map +1 -0
  243. package/dist/esm/operations/mrt/push.d.ts +122 -8
  244. package/dist/esm/operations/mrt/push.js +83 -10
  245. package/dist/esm/operations/mrt/push.js.map +1 -1
  246. package/dist/esm/operations/mrt/redirect.d.ts +337 -0
  247. package/dist/esm/operations/mrt/redirect.js +256 -0
  248. package/dist/esm/operations/mrt/redirect.js.map +1 -0
  249. package/dist/esm/operations/mrt/user.d.ts +135 -0
  250. package/dist/esm/operations/mrt/user.js +153 -0
  251. package/dist/esm/operations/mrt/user.js.map +1 -0
  252. package/dist/esm/skills/agents.d.ts +41 -0
  253. package/dist/esm/skills/agents.js +159 -0
  254. package/dist/esm/skills/agents.js.map +1 -0
  255. package/dist/esm/skills/github.d.ts +47 -0
  256. package/dist/esm/skills/github.js +246 -0
  257. package/dist/esm/skills/github.js.map +1 -0
  258. package/dist/esm/skills/index.d.ts +42 -0
  259. package/dist/esm/skills/index.js +14 -0
  260. package/dist/esm/skills/index.js.map +1 -0
  261. package/dist/esm/skills/installer.d.ts +34 -0
  262. package/dist/esm/skills/installer.js +181 -0
  263. package/dist/esm/skills/installer.js.map +1 -0
  264. package/dist/esm/skills/parser.d.ts +39 -0
  265. package/dist/esm/skills/parser.js +131 -0
  266. package/dist/esm/skills/parser.js.map +1 -0
  267. package/dist/esm/skills/types.d.ts +134 -0
  268. package/dist/esm/skills/types.js +7 -0
  269. package/dist/esm/skills/types.js.map +1 -0
  270. package/dist/esm/test-utils/config-isolation.d.ts +2 -0
  271. package/dist/esm/test-utils/config-isolation.js +41 -0
  272. package/dist/esm/test-utils/config-isolation.js.map +1 -0
  273. package/dist/esm/test-utils/index.d.ts +1 -0
  274. package/dist/esm/test-utils/index.js +7 -0
  275. package/dist/esm/test-utils/index.js.map +1 -0
  276. package/dist/esm/version.d.ts +14 -0
  277. package/dist/esm/version.js +29 -0
  278. package/dist/esm/version.js.map +1 -0
  279. package/package.json +24 -2
  280. package/specs/cdn-zones-v1.yaml +9324 -0
  281. package/specs/mrt-b2c.json +384 -0
@@ -0,0 +1,159 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as os from 'node:os';
8
+ import * as path from 'node:path';
9
+ const home = os.homedir();
10
+ /**
11
+ * IDE configurations with paths and detection logic.
12
+ */
13
+ export const IDE_CONFIGS = {
14
+ 'claude-code': {
15
+ id: 'claude-code',
16
+ displayName: 'Claude Code',
17
+ paths: {
18
+ projectDir: '.claude/skills',
19
+ globalDir: path.join(home, '.claude/skills'),
20
+ },
21
+ detectInstalled: async () => {
22
+ return fs.existsSync(path.join(home, '.claude'));
23
+ },
24
+ docsUrl: 'https://docs.anthropic.com/en/docs/claude-code',
25
+ },
26
+ cursor: {
27
+ id: 'cursor',
28
+ displayName: 'Cursor',
29
+ paths: {
30
+ projectDir: '.cursor/skills',
31
+ globalDir: path.join(home, '.cursor/skills'),
32
+ },
33
+ detectInstalled: async () => {
34
+ return fs.existsSync(path.join(home, '.cursor'));
35
+ },
36
+ docsUrl: 'https://cursor.com/docs/context/skills',
37
+ },
38
+ windsurf: {
39
+ id: 'windsurf',
40
+ displayName: 'Windsurf',
41
+ paths: {
42
+ projectDir: '.windsurf/skills',
43
+ globalDir: path.join(home, '.codeium/windsurf/skills'),
44
+ },
45
+ detectInstalled: async () => {
46
+ return fs.existsSync(path.join(home, '.codeium/windsurf'));
47
+ },
48
+ docsUrl: 'https://docs.windsurf.com/',
49
+ },
50
+ vscode: {
51
+ id: 'vscode',
52
+ displayName: 'VS Code / GitHub Copilot',
53
+ paths: {
54
+ projectDir: '.github/skills',
55
+ globalDir: path.join(home, '.copilot/skills'),
56
+ },
57
+ detectInstalled: async () => {
58
+ // Check for either .github directory (project-based) or ~/.copilot
59
+ return fs.existsSync(path.join(home, '.copilot'));
60
+ },
61
+ docsUrl: 'https://code.visualstudio.com/docs/copilot/customization/agent-skills',
62
+ },
63
+ codex: {
64
+ id: 'codex',
65
+ displayName: 'OpenAI Codex CLI',
66
+ paths: {
67
+ projectDir: '.codex/skills',
68
+ globalDir: path.join(home, '.codex/skills'),
69
+ },
70
+ detectInstalled: async () => {
71
+ return fs.existsSync(path.join(home, '.codex'));
72
+ },
73
+ docsUrl: 'https://github.com/openai/codex',
74
+ },
75
+ opencode: {
76
+ id: 'opencode',
77
+ displayName: 'OpenCode',
78
+ paths: {
79
+ projectDir: '.opencode/skills',
80
+ globalDir: path.join(home, '.config/opencode/skills'),
81
+ },
82
+ detectInstalled: async () => {
83
+ return fs.existsSync(path.join(home, '.config/opencode'));
84
+ },
85
+ docsUrl: 'https://opencode.ai/',
86
+ },
87
+ manual: {
88
+ id: 'manual',
89
+ displayName: 'Manual Installation',
90
+ paths: {
91
+ // Manual mode uses same paths as Claude Code
92
+ projectDir: '.claude/skills',
93
+ globalDir: path.join(home, '.claude/skills'),
94
+ },
95
+ detectInstalled: async () => {
96
+ // Manual is always "available" as a fallback
97
+ return true;
98
+ },
99
+ },
100
+ };
101
+ /**
102
+ * All supported IDE types in display order.
103
+ */
104
+ export const ALL_IDE_TYPES = ['claude-code', 'cursor', 'windsurf', 'vscode', 'codex', 'opencode', 'manual'];
105
+ /**
106
+ * Detect which IDEs are installed on the system.
107
+ *
108
+ * @returns Array of IDE types that appear to be installed
109
+ */
110
+ export async function detectInstalledIdes() {
111
+ const installed = [];
112
+ for (const ideType of ALL_IDE_TYPES) {
113
+ // Skip 'manual' from auto-detection since it's always available
114
+ if (ideType === 'manual') {
115
+ continue;
116
+ }
117
+ const config = IDE_CONFIGS[ideType];
118
+ const isInstalled = await config.detectInstalled();
119
+ if (isInstalled) {
120
+ installed.push(ideType);
121
+ }
122
+ }
123
+ return installed;
124
+ }
125
+ /**
126
+ * Get the installation path for a skill.
127
+ *
128
+ * @param ide - Target IDE
129
+ * @param skillName - Name of the skill
130
+ * @param options - Installation options
131
+ * @returns Absolute path where the skill would be installed
132
+ */
133
+ export function getSkillInstallPath(ide, skillName, options) {
134
+ const config = IDE_CONFIGS[ide];
135
+ if (options.global) {
136
+ return path.join(config.paths.globalDir, skillName);
137
+ }
138
+ const projectRoot = options.projectRoot || process.cwd();
139
+ return path.join(projectRoot, config.paths.projectDir, skillName);
140
+ }
141
+ /**
142
+ * Get the display name for an IDE.
143
+ *
144
+ * @param ide - IDE type
145
+ * @returns Human-readable display name
146
+ */
147
+ export function getIdeDisplayName(ide) {
148
+ return IDE_CONFIGS[ide].displayName;
149
+ }
150
+ /**
151
+ * Get the documentation URL for an IDE.
152
+ *
153
+ * @param ide - IDE type
154
+ * @returns Documentation URL or undefined if not available
155
+ */
156
+ export function getIdeDocsUrl(ide) {
157
+ return IDE_CONFIGS[ide].docsUrl;
158
+ }
159
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/skills/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { CachedArtifact, DownloadSkillsOptions, ReleaseInfo, SkillSet } from './types.js';
2
+ /**
3
+ * Get the cache directory for skills.
4
+ * Uses XDG_CACHE_HOME on Linux, ~/.cache otherwise.
5
+ *
6
+ * @returns Absolute path to cache directory
7
+ */
8
+ export declare function getCacheDir(): string;
9
+ /**
10
+ * Fetch release information from GitHub API.
11
+ *
12
+ * @param version - 'latest' or specific version (e.g., 'v0.1.0')
13
+ * @returns Release information
14
+ * @throws Error if release not found or API request fails
15
+ */
16
+ export declare function getRelease(version?: string): Promise<ReleaseInfo>;
17
+ /**
18
+ * List available releases with skills artifacts.
19
+ *
20
+ * @param limit - Maximum number of releases to return (default: 10)
21
+ * @returns Array of release information
22
+ */
23
+ export declare function listReleases(limit?: number): Promise<ReleaseInfo[]>;
24
+ /**
25
+ * Get cached artifact metadata if available.
26
+ *
27
+ * @param version - Release version
28
+ * @param skillSet - Skill set to check
29
+ * @returns Cached artifact info or null if not cached
30
+ */
31
+ export declare function getCachedArtifact(version: string, skillSet: SkillSet): CachedArtifact | null;
32
+ /**
33
+ * Download and extract skills artifact.
34
+ * Uses direct download URLs to avoid GitHub API rate limits.
35
+ *
36
+ * @param skillSet - Which skill set to download ('b2c' or 'b2c-cli')
37
+ * @param options - Download options
38
+ * @returns Path to extracted skills directory
39
+ * @throws Error if download fails or artifact not available
40
+ */
41
+ export declare function downloadSkillsArtifact(skillSet: SkillSet, options?: DownloadSkillsOptions): Promise<string>;
42
+ /**
43
+ * Clear the skills cache.
44
+ *
45
+ * @param version - Optional specific version to clear (default: all)
46
+ */
47
+ export declare function clearCache(version?: string): Promise<void>;
@@ -0,0 +1,246 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as os from 'node:os';
8
+ import * as path from 'node:path';
9
+ import JSZip from 'jszip';
10
+ import { getLogger } from '../logging/logger.js';
11
+ const GITHUB_REPO = 'SalesforceCommerceCloud/b2c-developer-tooling';
12
+ const GITHUB_API_BASE = 'https://api.github.com';
13
+ const GITHUB_DOWNLOAD_BASE = 'https://github.com';
14
+ /**
15
+ * Asset filename patterns for skill archives.
16
+ */
17
+ const ASSET_NAMES = {
18
+ b2c: 'b2c-skills.zip',
19
+ 'b2c-cli': 'b2c-cli-skills.zip',
20
+ };
21
+ /**
22
+ * Build direct download URL for a release asset.
23
+ * These URLs don't require API calls and avoid rate limiting.
24
+ *
25
+ * @param version - 'latest' or specific version tag
26
+ * @param assetName - Name of the asset file
27
+ * @returns Direct download URL
28
+ */
29
+ function getDirectDownloadUrl(version, assetName) {
30
+ if (version === 'latest') {
31
+ return `${GITHUB_DOWNLOAD_BASE}/${GITHUB_REPO}/releases/latest/download/${assetName}`;
32
+ }
33
+ const tag = version.startsWith('v') ? version : `v${version}`;
34
+ return `${GITHUB_DOWNLOAD_BASE}/${GITHUB_REPO}/releases/download/${tag}/${assetName}`;
35
+ }
36
+ /**
37
+ * Get the cache directory for skills.
38
+ * Uses XDG_CACHE_HOME on Linux, ~/.cache otherwise.
39
+ *
40
+ * @returns Absolute path to cache directory
41
+ */
42
+ export function getCacheDir() {
43
+ const xdgCache = process.env.XDG_CACHE_HOME;
44
+ const baseCache = xdgCache || path.join(os.homedir(), '.cache');
45
+ return path.join(baseCache, 'b2c-cli', 'skills');
46
+ }
47
+ /**
48
+ * Parse GitHub API release response into ReleaseInfo.
49
+ */
50
+ function parseRelease(release) {
51
+ const b2cAsset = release.assets.find((a) => a.name === ASSET_NAMES['b2c']);
52
+ const b2cCliAsset = release.assets.find((a) => a.name === ASSET_NAMES['b2c-cli']);
53
+ return {
54
+ tagName: release.tag_name,
55
+ version: release.tag_name.replace(/^v/, ''),
56
+ publishedAt: release.published_at,
57
+ b2cSkillsAssetUrl: b2cAsset?.browser_download_url ?? null,
58
+ b2cCliSkillsAssetUrl: b2cCliAsset?.browser_download_url ?? null,
59
+ };
60
+ }
61
+ /**
62
+ * Fetch release information from GitHub API.
63
+ *
64
+ * @param version - 'latest' or specific version (e.g., 'v0.1.0')
65
+ * @returns Release information
66
+ * @throws Error if release not found or API request fails
67
+ */
68
+ export async function getRelease(version = 'latest') {
69
+ const logger = getLogger();
70
+ const endpoint = version === 'latest'
71
+ ? `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases/latest`
72
+ : `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases/tags/${version.startsWith('v') ? version : `v${version}`}`;
73
+ logger.debug({ endpoint }, 'Fetching release info');
74
+ const response = await fetch(endpoint, {
75
+ headers: {
76
+ Accept: 'application/vnd.github.v3+json',
77
+ 'User-Agent': 'b2c-cli',
78
+ },
79
+ });
80
+ if (!response.ok) {
81
+ if (response.status === 404) {
82
+ throw new Error(`Release not found: ${version}`);
83
+ }
84
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
85
+ }
86
+ const data = (await response.json());
87
+ return parseRelease(data);
88
+ }
89
+ /**
90
+ * List available releases with skills artifacts.
91
+ *
92
+ * @param limit - Maximum number of releases to return (default: 10)
93
+ * @returns Array of release information
94
+ */
95
+ export async function listReleases(limit = 10) {
96
+ const logger = getLogger();
97
+ const endpoint = `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases?per_page=${limit}`;
98
+ logger.debug({ endpoint }, 'Listing releases');
99
+ const response = await fetch(endpoint, {
100
+ headers: {
101
+ Accept: 'application/vnd.github.v3+json',
102
+ 'User-Agent': 'b2c-cli',
103
+ },
104
+ });
105
+ if (!response.ok) {
106
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
107
+ }
108
+ const data = (await response.json());
109
+ // Only return releases that have at least one skills artifact
110
+ return data.map(parseRelease).filter((r) => r.b2cSkillsAssetUrl || r.b2cCliSkillsAssetUrl);
111
+ }
112
+ /**
113
+ * Get cached artifact metadata if available.
114
+ *
115
+ * @param version - Release version
116
+ * @param skillSet - Skill set to check
117
+ * @returns Cached artifact info or null if not cached
118
+ */
119
+ export function getCachedArtifact(version, skillSet) {
120
+ const cacheDir = getCacheDir();
121
+ const manifestPath = path.join(cacheDir, version, skillSet, 'manifest.json');
122
+ if (!fs.existsSync(manifestPath)) {
123
+ return null;
124
+ }
125
+ try {
126
+ const content = fs.readFileSync(manifestPath, 'utf-8');
127
+ return JSON.parse(content);
128
+ }
129
+ catch {
130
+ return null;
131
+ }
132
+ }
133
+ /**
134
+ * Extract version tag from a GitHub release download URL.
135
+ * URLs follow pattern: .../releases/download/{tag}/...
136
+ *
137
+ * @param url - The final URL after redirects
138
+ * @returns Version tag or null if not found
139
+ */
140
+ function extractVersionFromUrl(url) {
141
+ const match = url.match(/\/releases\/download\/([^/]+)\//);
142
+ return match ? match[1] : null;
143
+ }
144
+ /**
145
+ * Download and extract skills artifact.
146
+ * Uses direct download URLs to avoid GitHub API rate limits.
147
+ *
148
+ * @param skillSet - Which skill set to download ('b2c' or 'b2c-cli')
149
+ * @param options - Download options
150
+ * @returns Path to extracted skills directory
151
+ * @throws Error if download fails or artifact not available
152
+ */
153
+ export async function downloadSkillsArtifact(skillSet, options = {}) {
154
+ const logger = getLogger();
155
+ const { version = 'latest', forceDownload = false } = options;
156
+ const assetName = ASSET_NAMES[skillSet];
157
+ // For specific versions, check cache first (before any network calls)
158
+ if (version !== 'latest' && !forceDownload) {
159
+ const versionTag = version.startsWith('v') ? version : `v${version}`;
160
+ const cached = getCachedArtifact(versionTag, skillSet);
161
+ if (cached && fs.existsSync(cached.path)) {
162
+ logger.debug({ version: versionTag, skillSet, path: cached.path }, 'Using cached skills');
163
+ return cached.path;
164
+ }
165
+ }
166
+ // Build direct download URL (avoids API rate limits)
167
+ const downloadUrl = getDirectDownloadUrl(version, assetName);
168
+ logger.debug({ url: downloadUrl, skillSet }, 'Downloading skills artifact');
169
+ // Download artifact - GitHub will redirect to the actual file
170
+ const response = await fetch(downloadUrl, {
171
+ headers: {
172
+ 'User-Agent': 'b2c-cli',
173
+ },
174
+ redirect: 'follow',
175
+ });
176
+ if (!response.ok) {
177
+ if (response.status === 404) {
178
+ throw new Error(`Skills artifact '${assetName}' not found for ${version === 'latest' ? 'latest release' : `version ${version}`}`);
179
+ }
180
+ throw new Error(`Failed to download skills: ${response.status} ${response.statusText}`);
181
+ }
182
+ // Extract actual version from the final URL (after redirects)
183
+ const actualVersion = extractVersionFromUrl(response.url) || version;
184
+ // Check cache for the resolved version (for 'latest' which we now know)
185
+ if (version === 'latest' && !forceDownload) {
186
+ const cached = getCachedArtifact(actualVersion, skillSet);
187
+ if (cached && fs.existsSync(cached.path)) {
188
+ logger.debug({ version: actualVersion, skillSet, path: cached.path }, 'Using cached skills (resolved latest)');
189
+ return cached.path;
190
+ }
191
+ }
192
+ const zipBuffer = Buffer.from(await response.arrayBuffer());
193
+ logger.debug({ size: zipBuffer.length, version: actualVersion }, 'Downloaded skills archive');
194
+ // Extract to cache directory
195
+ const cacheDir = options.cacheDir || getCacheDir();
196
+ const extractDir = path.join(cacheDir, actualVersion, skillSet);
197
+ // Clean existing extraction if present
198
+ if (fs.existsSync(extractDir)) {
199
+ await fs.promises.rm(extractDir, { recursive: true });
200
+ }
201
+ await fs.promises.mkdir(extractDir, { recursive: true });
202
+ // Extract zip contents
203
+ const zip = await JSZip.loadAsync(zipBuffer);
204
+ let extractedCount = 0;
205
+ for (const [relativePath, zipEntry] of Object.entries(zip.files)) {
206
+ if (zipEntry.dir) {
207
+ await fs.promises.mkdir(path.join(extractDir, relativePath), { recursive: true });
208
+ continue;
209
+ }
210
+ const targetPath = path.join(extractDir, relativePath);
211
+ const targetDir = path.dirname(targetPath);
212
+ // Ensure parent directory exists
213
+ await fs.promises.mkdir(targetDir, { recursive: true });
214
+ // Write file
215
+ const content = await zipEntry.async('nodebuffer');
216
+ await fs.promises.writeFile(targetPath, content);
217
+ extractedCount++;
218
+ }
219
+ logger.debug({ extractDir, fileCount: extractedCount }, 'Extracted skills');
220
+ // Write cache manifest
221
+ const manifest = {
222
+ version: actualVersion,
223
+ path: extractDir,
224
+ downloadedAt: new Date().toISOString(),
225
+ };
226
+ await fs.promises.writeFile(path.join(extractDir, 'manifest.json'), JSON.stringify(manifest, null, 2));
227
+ return extractDir;
228
+ }
229
+ /**
230
+ * Clear the skills cache.
231
+ *
232
+ * @param version - Optional specific version to clear (default: all)
233
+ */
234
+ export async function clearCache(version) {
235
+ const cacheDir = getCacheDir();
236
+ if (version) {
237
+ const versionDir = path.join(cacheDir, version);
238
+ if (fs.existsSync(versionDir)) {
239
+ await fs.promises.rm(versionDir, { recursive: true });
240
+ }
241
+ }
242
+ else if (fs.existsSync(cacheDir)) {
243
+ await fs.promises.rm(cacheDir, { recursive: true });
244
+ }
245
+ }
246
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/skills/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Skills management module for downloading and installing agent skills.
3
+ *
4
+ * This module provides functionality to:
5
+ * - Download skills artifacts from GitHub releases
6
+ * - Detect installed IDEs
7
+ * - Install skills to various IDE configurations
8
+ * - Manage skills cache
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import {
13
+ * downloadSkillsArtifact,
14
+ * scanSkills,
15
+ * installSkills,
16
+ * detectInstalledIdes,
17
+ * } from '@salesforce/b2c-tooling-sdk/skills';
18
+ *
19
+ * // Download and extract skills
20
+ * const skillsDir = await downloadSkillsArtifact('b2c');
21
+ *
22
+ * // Scan for available skills
23
+ * const skills = await scanSkills(skillsDir, 'b2c');
24
+ *
25
+ * // Detect installed IDEs
26
+ * const ides = await detectInstalledIdes();
27
+ *
28
+ * // Install skills
29
+ * const result = await installSkills(skills, skillsDir, {
30
+ * ides: ['cursor'],
31
+ * global: true,
32
+ * update: false,
33
+ * });
34
+ * ```
35
+ *
36
+ * @module skills
37
+ */
38
+ export type { IdeType, SkillSet, IdePaths, IdeConfig, SkillMetadata, ReleaseInfo, DownloadSkillsOptions, InstallSkillsOptions, SkillInstallation, SkillSkipped, SkillError, InstallSkillsResult, CachedArtifact, } from './types.js';
39
+ export { IDE_CONFIGS, ALL_IDE_TYPES, detectInstalledIdes, getSkillInstallPath, getIdeDisplayName, getIdeDocsUrl, } from './agents.js';
40
+ export { getCacheDir, getRelease, listReleases, getCachedArtifact, downloadSkillsArtifact, clearCache, } from './github.js';
41
+ export { parseSkillFrontmatter, scanSkills, filterSkillsByName, findSkillsByName } from './parser.js';
42
+ export { isSkillInstalled, installSkills, removeSkill } from './installer.js';
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ // Agent/IDE utilities
7
+ export { IDE_CONFIGS, ALL_IDE_TYPES, detectInstalledIdes, getSkillInstallPath, getIdeDisplayName, getIdeDocsUrl, } from './agents.js';
8
+ // GitHub/download utilities
9
+ export { getCacheDir, getRelease, listReleases, getCachedArtifact, downloadSkillsArtifact, clearCache, } from './github.js';
10
+ // Skill parsing
11
+ export { parseSkillFrontmatter, scanSkills, filterSkillsByName, findSkillsByName } from './parser.js';
12
+ // Installation
13
+ export { isSkillInstalled, installSkills, removeSkill } from './installer.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyDH,sBAAsB;AACtB,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAC,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAEpG,eAAe;AACf,OAAO,EAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { IdeType, InstallSkillsOptions, InstallSkillsResult, SkillMetadata } from './types.js';
2
+ /**
3
+ * Check if a skill is already installed.
4
+ *
5
+ * @param skillName - Name of the skill
6
+ * @param ide - Target IDE
7
+ * @param options - Installation options
8
+ * @returns true if skill is installed, false otherwise
9
+ */
10
+ export declare function isSkillInstalled(skillName: string, ide: IdeType, options: {
11
+ global: boolean;
12
+ projectRoot?: string;
13
+ }): boolean;
14
+ /**
15
+ * Install skills to target IDE directories.
16
+ *
17
+ * @param skills - Skills to install
18
+ * @param sourceDir - Directory containing extracted skills
19
+ * @param options - Installation options
20
+ * @returns Installation results
21
+ */
22
+ export declare function installSkills(skills: SkillMetadata[], sourceDir: string, options: InstallSkillsOptions): Promise<InstallSkillsResult>;
23
+ /**
24
+ * Remove an installed skill.
25
+ *
26
+ * @param skillName - Name of the skill to remove
27
+ * @param ide - Target IDE
28
+ * @param options - Installation options
29
+ * @returns true if removed, false if not found
30
+ */
31
+ export declare function removeSkill(skillName: string, ide: IdeType, options: {
32
+ global: boolean;
33
+ projectRoot?: string;
34
+ }): Promise<boolean>;