@claudetools/cli 0.13.12 → 0.13.15

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 (368) hide show
  1. package/dist/__tests__/factories.d.ts +173 -0
  2. package/dist/__tests__/factories.d.ts.map +1 -0
  3. package/dist/__tests__/factories.js +150 -0
  4. package/dist/__tests__/factories.js.map +1 -0
  5. package/dist/__tests__/helpers.d.ts +36 -0
  6. package/dist/__tests__/helpers.d.ts.map +1 -0
  7. package/dist/__tests__/helpers.js +52 -0
  8. package/dist/__tests__/helpers.js.map +1 -0
  9. package/dist/analytics/index.d.ts +14 -0
  10. package/dist/analytics/index.d.ts.map +1 -0
  11. package/dist/analytics/index.js +259 -0
  12. package/dist/analytics/index.js.map +1 -0
  13. package/dist/analytics/session.d.ts +17 -0
  14. package/dist/analytics/session.d.ts.map +1 -0
  15. package/dist/analytics/session.js +130 -0
  16. package/dist/analytics/session.js.map +1 -0
  17. package/dist/analytics/token-tracker.d.ts +48 -0
  18. package/dist/analytics/token-tracker.d.ts.map +1 -0
  19. package/dist/analytics/token-tracker.js +269 -0
  20. package/dist/analytics/token-tracker.js.map +1 -0
  21. package/dist/analytics/tracker.d.ts +33 -0
  22. package/dist/analytics/tracker.d.ts.map +1 -0
  23. package/dist/analytics/tracker.js +210 -0
  24. package/dist/analytics/tracker.js.map +1 -0
  25. package/dist/api-keys/index.d.ts +15 -0
  26. package/dist/api-keys/index.d.ts.map +1 -0
  27. package/dist/api-keys/index.js +228 -0
  28. package/dist/api-keys/index.js.map +1 -0
  29. package/dist/auth/config.d.ts +15 -0
  30. package/dist/auth/config.d.ts.map +1 -0
  31. package/dist/auth/config.js +67 -0
  32. package/dist/auth/config.js.map +1 -0
  33. package/dist/auth/index.d.ts +8 -0
  34. package/dist/auth/index.d.ts.map +1 -0
  35. package/dist/auth/index.js +299 -0
  36. package/dist/auth/index.js.map +1 -0
  37. package/dist/auth/keychain.d.ts +21 -0
  38. package/dist/auth/keychain.d.ts.map +1 -0
  39. package/dist/auth/keychain.js +256 -0
  40. package/dist/auth/keychain.js.map +1 -0
  41. package/dist/billing/index.d.ts +7 -0
  42. package/dist/billing/index.d.ts.map +1 -0
  43. package/dist/billing/index.js +233 -0
  44. package/dist/billing/index.js.map +1 -0
  45. package/dist/cli.js +291 -43
  46. package/dist/cli.js.map +1 -1
  47. package/dist/commands/hook.d.ts +12 -0
  48. package/dist/commands/hook.d.ts.map +1 -0
  49. package/dist/commands/hook.js +190 -0
  50. package/dist/commands/hook.js.map +1 -0
  51. package/dist/commands/keys.d.ts +4 -0
  52. package/dist/commands/keys.d.ts.map +1 -0
  53. package/dist/commands/keys.js +43 -0
  54. package/dist/commands/keys.js.map +1 -0
  55. package/dist/commands/mcp.d.ts +4 -0
  56. package/dist/commands/mcp.d.ts.map +1 -0
  57. package/dist/commands/mcp.js +43 -0
  58. package/dist/commands/mcp.js.map +1 -0
  59. package/dist/commands/project.d.ts +4 -0
  60. package/dist/commands/project.d.ts.map +1 -0
  61. package/dist/commands/project.js +68 -0
  62. package/dist/commands/project.js.map +1 -0
  63. package/dist/commands/skill.d.ts +4 -0
  64. package/dist/commands/skill.d.ts.map +1 -0
  65. package/dist/commands/skill.js +37 -0
  66. package/dist/commands/skill.js.map +1 -0
  67. package/dist/commands/stacks.d.ts +4 -0
  68. package/dist/commands/stacks.d.ts.map +1 -0
  69. package/dist/commands/stacks.js +103 -0
  70. package/dist/commands/stacks.js.map +1 -0
  71. package/dist/commands/stats.d.ts +4 -0
  72. package/dist/commands/stats.d.ts.map +1 -0
  73. package/dist/commands/stats.js +6 -0
  74. package/dist/commands/stats.js.map +1 -0
  75. package/dist/commands/sync.d.ts +4 -0
  76. package/dist/commands/sync.d.ts.map +1 -0
  77. package/dist/commands/sync.js +60 -0
  78. package/dist/commands/sync.js.map +1 -0
  79. package/dist/commands/update.d.ts +4 -0
  80. package/dist/commands/update.d.ts.map +1 -0
  81. package/dist/commands/update.js +63 -0
  82. package/dist/commands/update.js.map +1 -0
  83. package/dist/daemon/client.d.ts +107 -0
  84. package/dist/daemon/client.d.ts.map +1 -0
  85. package/dist/daemon/client.js +250 -0
  86. package/dist/daemon/client.js.map +1 -0
  87. package/dist/daemon/health.d.ts +38 -0
  88. package/dist/daemon/health.d.ts.map +1 -0
  89. package/dist/daemon/health.js +212 -0
  90. package/dist/daemon/health.js.map +1 -0
  91. package/dist/daemon/index.d.ts +34 -0
  92. package/dist/daemon/index.d.ts.map +1 -0
  93. package/dist/daemon/index.js +197 -0
  94. package/dist/daemon/index.js.map +1 -0
  95. package/dist/daemon/protocol.d.ts +144 -0
  96. package/dist/daemon/protocol.d.ts.map +1 -0
  97. package/dist/daemon/protocol.js +5 -0
  98. package/dist/daemon/protocol.js.map +1 -0
  99. package/dist/gamification/index.d.ts +13 -0
  100. package/dist/gamification/index.d.ts.map +1 -0
  101. package/dist/gamification/index.js +120 -0
  102. package/dist/gamification/index.js.map +1 -0
  103. package/dist/gamification/types.d.ts +34 -0
  104. package/dist/gamification/types.d.ts.map +1 -0
  105. package/dist/gamification/types.js +5 -0
  106. package/dist/gamification/types.js.map +1 -0
  107. package/dist/hooks/index.d.ts +65 -0
  108. package/dist/hooks/index.d.ts.map +1 -0
  109. package/dist/hooks/index.js +403 -0
  110. package/dist/hooks/index.js.map +1 -0
  111. package/dist/lib/api.d.ts +29 -0
  112. package/dist/lib/api.d.ts.map +1 -0
  113. package/dist/lib/api.js +213 -0
  114. package/dist/lib/api.js.map +1 -0
  115. package/dist/lib/browser.d.ts +6 -0
  116. package/dist/lib/browser.d.ts.map +1 -0
  117. package/dist/lib/browser.js +14 -0
  118. package/dist/lib/browser.js.map +1 -0
  119. package/dist/lib/channel-config.d.ts +10 -0
  120. package/dist/lib/channel-config.d.ts.map +1 -0
  121. package/dist/lib/channel-config.js +48 -0
  122. package/dist/lib/channel-config.js.map +1 -0
  123. package/dist/lib/command-runner.d.ts +16 -0
  124. package/dist/lib/command-runner.d.ts.map +1 -0
  125. package/dist/lib/command-runner.js +59 -0
  126. package/dist/lib/command-runner.js.map +1 -0
  127. package/dist/lib/command-utils.d.ts +22 -0
  128. package/dist/lib/command-utils.d.ts.map +1 -0
  129. package/dist/lib/command-utils.js +88 -0
  130. package/dist/lib/command-utils.js.map +1 -0
  131. package/dist/lib/error-handler.d.ts +13 -0
  132. package/dist/lib/error-handler.d.ts.map +1 -0
  133. package/dist/lib/error-handler.js +70 -0
  134. package/dist/lib/error-handler.js.map +1 -0
  135. package/dist/lib/errors.d.ts +35 -0
  136. package/dist/lib/errors.d.ts.map +1 -0
  137. package/dist/lib/errors.js +70 -0
  138. package/dist/lib/errors.js.map +1 -0
  139. package/dist/lib/exit.d.ts +10 -0
  140. package/dist/lib/exit.d.ts.map +1 -0
  141. package/dist/lib/exit.js +21 -0
  142. package/dist/lib/exit.js.map +1 -0
  143. package/dist/lib/formatters.d.ts +65 -0
  144. package/dist/lib/formatters.d.ts.map +1 -0
  145. package/dist/lib/formatters.js +180 -0
  146. package/dist/lib/formatters.js.map +1 -0
  147. package/dist/lib/hybrid-data.d.ts +47 -0
  148. package/dist/lib/hybrid-data.d.ts.map +1 -0
  149. package/dist/lib/hybrid-data.js +326 -0
  150. package/dist/lib/hybrid-data.js.map +1 -0
  151. package/dist/lib/local-store.d.ts +113 -0
  152. package/dist/lib/local-store.d.ts.map +1 -0
  153. package/dist/lib/local-store.js +220 -0
  154. package/dist/lib/local-store.js.map +1 -0
  155. package/dist/lib/machine-id.d.ts +8 -0
  156. package/dist/lib/machine-id.d.ts.map +1 -0
  157. package/dist/lib/machine-id.js +39 -0
  158. package/dist/lib/machine-id.js.map +1 -0
  159. package/dist/lib/network.d.ts +15 -0
  160. package/dist/lib/network.d.ts.map +1 -0
  161. package/dist/lib/network.js +46 -0
  162. package/dist/lib/network.js.map +1 -0
  163. package/dist/lib/theme.d.ts +77 -0
  164. package/dist/lib/theme.d.ts.map +1 -0
  165. package/dist/lib/theme.js +137 -0
  166. package/dist/lib/theme.js.map +1 -0
  167. package/dist/lib/tool-availability.d.ts +13 -0
  168. package/dist/lib/tool-availability.d.ts.map +1 -0
  169. package/dist/lib/tool-availability.js +48 -0
  170. package/dist/lib/tool-availability.js.map +1 -0
  171. package/dist/lib/update-checker.d.ts +21 -0
  172. package/dist/lib/update-checker.d.ts.map +1 -0
  173. package/dist/lib/update-checker.js +110 -0
  174. package/dist/lib/update-checker.js.map +1 -0
  175. package/dist/lib/validation.d.ts +30 -0
  176. package/dist/lib/validation.d.ts.map +1 -0
  177. package/dist/lib/validation.js +82 -0
  178. package/dist/lib/validation.js.map +1 -0
  179. package/dist/lib/validators.d.ts +18 -0
  180. package/dist/lib/validators.d.ts.map +1 -0
  181. package/dist/lib/validators.js +30 -0
  182. package/dist/lib/validators.js.map +1 -0
  183. package/dist/marketplace/api.d.ts +24 -0
  184. package/dist/marketplace/api.d.ts.map +1 -0
  185. package/dist/marketplace/api.js +92 -0
  186. package/dist/marketplace/api.js.map +1 -0
  187. package/dist/marketplace/index.d.ts +13 -0
  188. package/dist/marketplace/index.d.ts.map +1 -0
  189. package/dist/marketplace/index.js +155 -0
  190. package/dist/marketplace/index.js.map +1 -0
  191. package/dist/marketplace/installer.d.ts +18 -0
  192. package/dist/marketplace/installer.d.ts.map +1 -0
  193. package/dist/marketplace/installer.js +184 -0
  194. package/dist/marketplace/installer.js.map +1 -0
  195. package/dist/mcp/api.d.ts +93 -0
  196. package/dist/mcp/api.d.ts.map +1 -0
  197. package/dist/mcp/api.js +106 -0
  198. package/dist/mcp/api.js.map +1 -0
  199. package/dist/mcp/config.d.ts +72 -0
  200. package/dist/mcp/config.d.ts.map +1 -0
  201. package/dist/mcp/config.js +156 -0
  202. package/dist/mcp/config.js.map +1 -0
  203. package/dist/mcp/index.d.ts +54 -0
  204. package/dist/mcp/index.d.ts.map +1 -0
  205. package/dist/mcp/index.js +381 -0
  206. package/dist/mcp/index.js.map +1 -0
  207. package/dist/mcp/prompt.clean.d.ts +25 -0
  208. package/dist/mcp/prompt.clean.d.ts.map +1 -0
  209. package/dist/mcp/prompt.clean.js +206 -0
  210. package/dist/mcp/prompt.clean.js.map +1 -0
  211. package/dist/mcp/prompt.d.ts +52 -0
  212. package/dist/mcp/prompt.d.ts.map +1 -0
  213. package/dist/mcp/prompt.js +210 -0
  214. package/dist/mcp/prompt.js.map +1 -0
  215. package/dist/mcp/secrets.clean.d.ts +18 -0
  216. package/dist/mcp/secrets.clean.d.ts.map +1 -0
  217. package/dist/mcp/secrets.clean.js +357 -0
  218. package/dist/mcp/secrets.clean.js.map +1 -0
  219. package/dist/mcp/secrets.d.ts +46 -0
  220. package/dist/mcp/secrets.d.ts.map +1 -0
  221. package/dist/mcp/secrets.js +339 -0
  222. package/dist/mcp/secrets.js.map +1 -0
  223. package/dist/memory/index.d.ts +14 -0
  224. package/dist/memory/index.d.ts.map +1 -0
  225. package/dist/memory/index.js +98 -0
  226. package/dist/memory/index.js.map +1 -0
  227. package/dist/onboard/agents-md-builder.d.ts.map +1 -1
  228. package/dist/onboard/agents-md-builder.js +45 -0
  229. package/dist/onboard/agents-md-builder.js.map +1 -1
  230. package/dist/onboard/claude-inference.d.ts.map +1 -1
  231. package/dist/onboard/claude-inference.js +31 -5
  232. package/dist/onboard/claude-inference.js.map +1 -1
  233. package/dist/onboard/context7-fetcher.d.ts +1 -1
  234. package/dist/onboard/context7-fetcher.d.ts.map +1 -1
  235. package/dist/onboard/context7-fetcher.js +50 -16
  236. package/dist/onboard/context7-fetcher.js.map +1 -1
  237. package/dist/onboard/docs-builder.d.ts.map +1 -1
  238. package/dist/onboard/docs-builder.js +523 -50
  239. package/dist/onboard/docs-builder.js.map +1 -1
  240. package/dist/onboard/index.d.ts.map +1 -1
  241. package/dist/onboard/index.js +74 -25
  242. package/dist/onboard/index.js.map +1 -1
  243. package/dist/onboard/stack-detector.d.ts.map +1 -1
  244. package/dist/onboard/stack-detector.js +5 -55
  245. package/dist/onboard/stack-detector.js.map +1 -1
  246. package/dist/project/constants.d.ts +21 -0
  247. package/dist/project/constants.d.ts.map +1 -0
  248. package/dist/project/constants.js +21 -0
  249. package/dist/project/constants.js.map +1 -0
  250. package/dist/project/format.d.ts +16 -0
  251. package/dist/project/format.d.ts.map +1 -0
  252. package/dist/project/format.js +40 -0
  253. package/dist/project/format.js.map +1 -0
  254. package/dist/project/git.d.ts +28 -0
  255. package/dist/project/git.d.ts.map +1 -0
  256. package/dist/project/git.js +93 -0
  257. package/dist/project/git.js.map +1 -0
  258. package/dist/project/index.d.ts +36 -0
  259. package/dist/project/index.d.ts.map +1 -0
  260. package/dist/project/index.js +272 -0
  261. package/dist/project/index.js.map +1 -0
  262. package/dist/project/mapper.d.ts +27 -0
  263. package/dist/project/mapper.d.ts.map +1 -0
  264. package/dist/project/mapper.js +64 -0
  265. package/dist/project/mapper.js.map +1 -0
  266. package/dist/project/storage.d.ts +71 -0
  267. package/dist/project/storage.d.ts.map +1 -0
  268. package/dist/project/storage.js +274 -0
  269. package/dist/project/storage.js.map +1 -0
  270. package/dist/project/sync-bridge.d.ts +33 -0
  271. package/dist/project/sync-bridge.d.ts.map +1 -0
  272. package/dist/project/sync-bridge.js +155 -0
  273. package/dist/project/sync-bridge.js.map +1 -0
  274. package/dist/project/types.d.ts +107 -0
  275. package/dist/project/types.d.ts.map +1 -0
  276. package/dist/project/types.js +77 -0
  277. package/dist/project/types.js.map +1 -0
  278. package/dist/publish/index.d.ts +4 -0
  279. package/dist/publish/index.d.ts.map +1 -0
  280. package/dist/publish/index.js +92 -0
  281. package/dist/publish/index.js.map +1 -0
  282. package/dist/setup.d.ts.map +1 -1
  283. package/dist/setup.js +29 -10
  284. package/dist/setup.js.map +1 -1
  285. package/dist/skills/index.d.ts +51 -0
  286. package/dist/skills/index.d.ts.map +1 -0
  287. package/dist/skills/index.js +509 -0
  288. package/dist/skills/index.js.map +1 -0
  289. package/dist/stacks/check.d.ts +2 -0
  290. package/dist/stacks/check.d.ts.map +1 -0
  291. package/dist/stacks/check.js +144 -0
  292. package/dist/stacks/check.js.map +1 -0
  293. package/dist/stacks/diff.d.ts +11 -0
  294. package/dist/stacks/diff.d.ts.map +1 -0
  295. package/dist/stacks/diff.js +123 -0
  296. package/dist/stacks/diff.js.map +1 -0
  297. package/dist/stacks/index.d.ts +17 -0
  298. package/dist/stacks/index.d.ts.map +1 -0
  299. package/dist/stacks/index.js +525 -0
  300. package/dist/stacks/index.js.map +1 -0
  301. package/dist/stacks/index.refactored.d.ts.map +1 -0
  302. package/dist/stacks/index.refactored.js.map +1 -0
  303. package/dist/stacks/io.d.ts +11 -0
  304. package/dist/stacks/io.d.ts.map +1 -0
  305. package/dist/stacks/io.js +179 -0
  306. package/dist/stacks/io.js.map +1 -0
  307. package/dist/stacks/rollback.d.ts +5 -0
  308. package/dist/stacks/rollback.d.ts.map +1 -0
  309. package/dist/stacks/rollback.js +162 -0
  310. package/dist/stacks/rollback.js.map +1 -0
  311. package/dist/stacks/types.d.ts +70 -0
  312. package/dist/stacks/types.d.ts.map +1 -0
  313. package/dist/stacks/types.js +6 -0
  314. package/dist/stacks/types.js.map +1 -0
  315. package/dist/stacks/utils.d.ts +9 -0
  316. package/dist/stacks/utils.d.ts.map +1 -0
  317. package/dist/stacks/utils.js +11 -0
  318. package/dist/stacks/utils.js.map +1 -0
  319. package/dist/start/index.d.ts +23 -0
  320. package/dist/start/index.d.ts.map +1 -0
  321. package/dist/start/index.js +386 -0
  322. package/dist/start/index.js.map +1 -0
  323. package/dist/sync/index.d.ts +49 -0
  324. package/dist/sync/index.d.ts.map +1 -0
  325. package/dist/sync/index.js +207 -0
  326. package/dist/sync/index.js.map +1 -0
  327. package/dist/sync-engine/__tests__/test-helpers.d.ts +14 -0
  328. package/dist/sync-engine/__tests__/test-helpers.d.ts.map +1 -0
  329. package/dist/sync-engine/__tests__/test-helpers.js +73 -0
  330. package/dist/sync-engine/__tests__/test-helpers.js.map +1 -0
  331. package/dist/sync-engine/client.d.ts +128 -0
  332. package/dist/sync-engine/client.d.ts.map +1 -0
  333. package/dist/sync-engine/client.js +289 -0
  334. package/dist/sync-engine/client.js.map +1 -0
  335. package/dist/sync-engine/health.d.ts +38 -0
  336. package/dist/sync-engine/health.d.ts.map +1 -0
  337. package/dist/sync-engine/health.js +259 -0
  338. package/dist/sync-engine/health.js.map +1 -0
  339. package/dist/sync-engine/index.d.ts +34 -0
  340. package/dist/sync-engine/index.d.ts.map +1 -0
  341. package/dist/sync-engine/index.js +197 -0
  342. package/dist/sync-engine/index.js.map +1 -0
  343. package/dist/sync-engine/protocol.d.ts +153 -0
  344. package/dist/sync-engine/protocol.d.ts.map +1 -0
  345. package/dist/sync-engine/protocol.js +5 -0
  346. package/dist/sync-engine/protocol.js.map +1 -0
  347. package/dist/tasks/index.d.ts +14 -0
  348. package/dist/tasks/index.d.ts.map +1 -0
  349. package/dist/tasks/index.js +109 -0
  350. package/dist/tasks/index.js.map +1 -0
  351. package/dist/team/index.d.ts +12 -0
  352. package/dist/team/index.d.ts.map +1 -0
  353. package/dist/team/index.js +151 -0
  354. package/dist/team/index.js.map +1 -0
  355. package/dist/updater.d.ts +5 -5
  356. package/dist/updater.d.ts.map +1 -1
  357. package/dist/updater.js +24 -88
  358. package/dist/updater.js.map +1 -1
  359. package/dist/usage/index.d.ts +10 -0
  360. package/dist/usage/index.d.ts.map +1 -0
  361. package/dist/usage/index.js +104 -0
  362. package/dist/usage/index.js.map +1 -0
  363. package/dist/webhooks/index.d.ts +7 -0
  364. package/dist/webhooks/index.d.ts.map +1 -0
  365. package/dist/webhooks/index.js +81 -0
  366. package/dist/webhooks/index.js.map +1 -0
  367. package/package.json +26 -15
  368. package/scripts/postinstall.js +282 -0
package/dist/cli.js CHANGED
@@ -7,15 +7,19 @@ import { parseArgs } from 'node:util';
7
7
  import { readFileSync } from 'node:fs';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { dirname, join } from 'node:path';
10
- import { runInit, runCleanup } from './setup.js';
11
- import { runOnboard } from './onboard/index.js';
12
- import { autoUpdate, checkVersionQuiet } from './updater.js';
10
+ import { showUpdateBanner, checkVersionQuiet } from './updater.js';
11
+ import { isLoggedIn, loadConfig } from './auth/config.js';
12
+ import { startSession } from './analytics/session.js';
13
+ import { setCliVersion } from './analytics/tracker.js';
14
+ import { executeCommand, getBool, getString, requireArg } from './lib/command-utils.js';
13
15
  // Get version from package.json
14
16
  const __filename = fileURLToPath(import.meta.url);
15
17
  const __dirname = dirname(__filename);
16
18
  const packagePath = join(__dirname, '..', 'package.json');
17
19
  const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
18
20
  const version = packageJson.version;
21
+ // Set CLI version for analytics
22
+ setCliVersion(version);
19
23
  // Parse command-line arguments
20
24
  const { values, positionals } = parseArgs({
21
25
  options: {
@@ -25,6 +29,18 @@ const { values, positionals } = parseArgs({
25
29
  verbose: { type: 'boolean' },
26
30
  'skip-docs': { type: 'boolean' },
27
31
  'no-update': { type: 'boolean' },
32
+ 'no-browser': { type: 'boolean' },
33
+ channel: { type: 'string' },
34
+ json: { type: 'boolean', short: 'j' },
35
+ type: { type: 'string', short: 't' },
36
+ range: { type: 'string' },
37
+ force: { type: 'boolean', short: 'f' },
38
+ name: { type: 'string' },
39
+ description: { type: 'string' },
40
+ team: { type: 'string' },
41
+ visibility: { type: 'string' },
42
+ follow: { type: 'boolean' },
43
+ lines: { type: 'string' },
28
44
  },
29
45
  allowPositionals: true,
30
46
  strict: false,
@@ -34,7 +50,7 @@ if (values.version) {
34
50
  const newer = await checkVersionQuiet(version);
35
51
  console.log(`claudetools v${version}`);
36
52
  if (newer) {
37
- console.log(` (v${newer} available - run any command to auto-update)`);
53
+ console.log(` (v${newer} available run: claudetools update)`);
38
54
  }
39
55
  process.exit(0);
40
56
  }
@@ -50,72 +66,304 @@ Commands:
50
66
  init Initialize current directory as a project
51
67
  onboard Detect stack, fetch docs, generate AGENTS.md
52
68
  cleanup Remove legacy config and broken hooks
69
+ login Authenticate with ClaudeTools
70
+ logout Sign out of ClaudeTools
71
+ whoami Show current user information
72
+ analytics Show usage statistics (requires auth)
73
+ stats Show gamification progress (level, XP, streak)
74
+ update Check for and install CLI updates
75
+ upgrade [tier] Upgrade to ClaudeTools Pro or Team
76
+ billing Manage your billing and subscription
77
+ sync Sync stacks to/from cloud (Pro/Team only)
78
+ sync start Start the sync engine in the background
79
+ sync stop Stop the running sync engine
80
+ sync status Show sync engine status
81
+ sync pool Show MCP process pool status
82
+ sync reload Reload sync engine configuration
83
+ sync logs Tail the sync engine log file
84
+ project Manage registered projects
85
+ search [query] Search the marketplace for extensions
86
+ install <slug> Install an extension from the marketplace
87
+ uninstall <slug> Remove an installed extension (type auto-detected)
88
+ list List all installed extensions
89
+
90
+ API Keys:
91
+ keys list List all your API keys
92
+ keys create <name> Create a new API key
93
+ keys revoke <id> Revoke an API key
94
+
95
+ Stacks:
96
+ stacks list List all your stacks
97
+ stacks create <name> Create a new stack
98
+ stacks show <name> Show stack details
99
+ stacks add <stack> <ext> Add extension to stack
100
+ stacks remove <stack> <ext> Remove extension from stack
101
+ stacks delete <name> Delete a stack
102
+ stacks apply <name> Apply stack locally (install all extensions)
103
+
104
+ Hooks:
105
+ hook Show hook status
106
+ hook install Install claudetools hooks into Claude Code
107
+ hook uninstall Remove claudetools hooks
108
+
109
+ MCP Servers:
110
+ mcp add <name> Install MCP server from marketplace
111
+ mcp list List installed MCP servers
112
+ mcp show <name> Show MCP server configuration
113
+ mcp remove <name> Remove MCP server
114
+ mcp env <name> Update environment variables
115
+ mcp search [query] Search marketplace for MCP servers
53
116
 
54
117
  Options:
55
118
  -v, --version Show version
56
119
  -h, --help Show this help
57
120
  -r, --refresh Refresh existing documentation (with onboard)
121
+ -j, --json Output in JSON format (with search, list, whoami, analytics)
122
+ -t, --type Filter by type (with search)
123
+ --range Analytics time range: 7, 30, 90 days (with analytics)
58
124
  --verbose Show detailed output
59
125
  --skip-docs Skip documentation generation (with onboard)
60
- --no-update Skip auto-update check
126
+ --no-update Skip update check on startup
127
+ --channel Set release channel: stable, beta, nightly (with update)
61
128
 
62
- Auto-Update:
63
- ClaudeTools automatically checks for updates when run.
64
- Set CLAUDETOOLS_NO_UPDATE=1 to disable, or use --no-update flag.
129
+ Updates:
130
+ claudetools update # Update to latest on your channel
131
+ claudetools update --channel beta # Switch to beta channel and update
132
+ Set CLAUDETOOLS_NO_UPDATE=1 to disable startup update check.
65
133
 
66
134
  Examples:
67
135
  claudetools init # Set up a new project
68
136
  claudetools onboard # Generate documentation and AGENTS.md
69
137
  claudetools onboard --refresh # Re-fetch and regenerate documentation
138
+ claudetools search react # Search for React-related extensions
139
+ claudetools install my-skill # Install an extension
140
+ claudetools list # List installed extensions
70
141
 
71
- Documentation: https://github.com/claudetools/claudetools
142
+ Documentation: https://claudetools.com/docs
72
143
  `);
73
144
  process.exit(0);
74
145
  }
75
- // Auto-update check (runs before commands unless --no-update)
76
- if (!values['no-update']) {
77
- await autoUpdate(version);
146
+ // Show update banner on startup (unless --no-update or running 'update' command)
147
+ if (!values['no-update'] && positionals[0] !== 'update') {
148
+ await showUpdateBanner(version);
78
149
  }
150
+ // Start session tracking (exit handlers registered automatically)
151
+ startSession({
152
+ command: positionals[0] || 'help',
153
+ args: positionals.slice(1),
154
+ });
155
+ // Auto-sync on startup for Pro/Team users (silent, non-blocking)
156
+ isLoggedIn().then((loggedIn) => {
157
+ if (loggedIn) {
158
+ const config = loadConfig();
159
+ if (config.tier && config.tier !== 'free') {
160
+ import('./sync/index.js')
161
+ .then(({ syncStacks }) => syncStacks({ silent: true }))
162
+ .catch((err) => {
163
+ if (process.env.DEBUG) {
164
+ console.error('[auto-sync error]:', err instanceof Error ? err.message : String(err));
165
+ }
166
+ });
167
+ }
168
+ }
169
+ }).catch(() => { });
170
+ // First-run detection
171
+ const { existsSync: fsExists } = await import('node:fs');
172
+ const { homedir } = await import('node:os');
173
+ const claudetoolsConfigDir = join(homedir(), '.claudetools');
174
+ const claudeProjectDir = join(process.cwd(), '.claude');
175
+ const isFirstRun = !fsExists(claudetoolsConfigDir) && !fsExists(claudeProjectDir);
79
176
  // Handle commands
80
177
  const command = positionals[0];
81
- switch (command) {
82
- case 'init':
83
- runInit().catch((error) => {
84
- console.error('Init failed:', error instanceof Error ? error.message : String(error));
85
- process.exit(1);
86
- });
87
- break;
88
- case 'onboard':
89
- runOnboard(process.cwd(), {
90
- refresh: values.refresh,
91
- verbose: values.verbose,
92
- skipDocs: values['skip-docs'],
93
- }).catch((error) => {
94
- console.error('Onboard failed:', error instanceof Error ? error.message : String(error));
95
- process.exit(1);
178
+ // Simple command handlers (no subcommands) - using dynamic imports for faster startup
179
+ const simpleCommands = {
180
+ init: async () => {
181
+ const { runInit } = await import('./setup.js');
182
+ return runInit();
183
+ },
184
+ cleanup: async () => {
185
+ const { runCleanup } = await import('./setup.js');
186
+ return runCleanup();
187
+ },
188
+ onboard: async () => {
189
+ const { runOnboard } = await import('./onboard/index.js');
190
+ return runOnboard(process.cwd(), {
191
+ refresh: getBool(values, 'refresh'),
192
+ verbose: getBool(values, 'verbose'),
193
+ skipDocs: getBool(values, 'skip-docs'),
96
194
  });
97
- break;
98
- case 'cleanup':
99
- runCleanup().catch((error) => {
100
- console.error('Cleanup failed:', error instanceof Error ? error.message : String(error));
101
- process.exit(1);
195
+ },
196
+ login: async () => {
197
+ const { runLogin } = await import('./auth/index.js');
198
+ return runLogin({ noBrowser: getBool(values, 'no-browser') });
199
+ },
200
+ logout: async () => {
201
+ const { runLogout } = await import('./auth/index.js');
202
+ return runLogout();
203
+ },
204
+ whoami: async () => {
205
+ const { runWhoami } = await import('./auth/index.js');
206
+ return runWhoami({ json: getBool(values, 'json') });
207
+ },
208
+ analytics: async () => {
209
+ const subcommand = positionals[1];
210
+ const analyticsModule = await import('./analytics/index.js');
211
+ switch (subcommand) {
212
+ case 'budget':
213
+ return analyticsModule.runBudget({ json: getBool(values, 'json') });
214
+ case 'languages':
215
+ return analyticsModule.runLanguages({ json: getBool(values, 'json') });
216
+ case 'export':
217
+ return analyticsModule.runExport({ filename: positionals[2] });
218
+ default:
219
+ return analyticsModule.runAnalytics({
220
+ range: getString(values, 'range'),
221
+ json: getBool(values, 'json'),
222
+ });
223
+ }
224
+ },
225
+ upgrade: async () => {
226
+ const { runUpgrade } = await import('./billing/index.js');
227
+ return runUpgrade(positionals[1], { noBrowser: getBool(values, 'no-browser') });
228
+ },
229
+ billing: async () => {
230
+ const { runBilling } = await import('./billing/index.js');
231
+ return runBilling({ noBrowser: getBool(values, 'no-browser') });
232
+ },
233
+ search: async () => {
234
+ const { runSearch } = await import('./marketplace/index.js');
235
+ return runSearch(positionals[1], {
236
+ type: getString(values, 'type'),
237
+ json: getBool(values, 'json'),
102
238
  });
103
- break;
104
- default:
105
- // Show help if no command
239
+ },
240
+ install: async () => {
241
+ const slug = requireArg(positionals, 1, 'extension slug', 'claudetools install <slug>');
242
+ const { runInstall } = await import('./marketplace/index.js');
243
+ return runInstall(slug);
244
+ },
245
+ uninstall: async () => {
246
+ const slug = requireArg(positionals, 1, 'extension slug', 'claudetools uninstall <slug> [type]');
247
+ const extensionType = positionals[2]; // optional - will be auto-detected
248
+ const { runUninstall } = await import('./marketplace/index.js');
249
+ return runUninstall(slug, extensionType);
250
+ },
251
+ list: async () => {
252
+ const { runList } = await import('./marketplace/index.js');
253
+ return runList({ json: getBool(values, 'json') });
254
+ },
255
+ // sync moved to complexCommands to support subcommands
256
+ };
257
+ // Complex command handlers (with subcommands) - using dynamic imports
258
+ const complexCommands = {
259
+ keys: async () => {
260
+ const { handleKeysCommand } = await import('./commands/keys.js');
261
+ return handleKeysCommand(positionals, values);
262
+ },
263
+ stacks: async () => {
264
+ const { handleStacksCommand } = await import('./commands/stacks.js');
265
+ return handleStacksCommand(positionals, values);
266
+ },
267
+ project: async () => {
268
+ const { handleProjectCommand } = await import('./commands/project.js');
269
+ return handleProjectCommand(positionals, values);
270
+ },
271
+ mcp: async () => {
272
+ const { handleMcpCommand } = await import('./commands/mcp.js');
273
+ return handleMcpCommand(positionals, values);
274
+ },
275
+ update: async () => {
276
+ const { handleUpdateCommand } = await import('./commands/update.js');
277
+ return handleUpdateCommand(positionals, values, version);
278
+ },
279
+ hook: async () => {
280
+ const { handleHookCommand } = await import('./commands/hook.js');
281
+ return handleHookCommand(positionals, values);
282
+ },
283
+ sync: async () => {
284
+ const { handleSyncCommand } = await import('./commands/sync.js');
285
+ return handleSyncCommand(positionals, values);
286
+ },
287
+ stats: async () => {
288
+ const { handleStatsCommand } = await import('./commands/stats.js');
289
+ return handleStatsCommand(positionals, values);
290
+ },
291
+ skill: async () => {
292
+ const { handleSkillCommand } = await import('./commands/skill.js');
293
+ return handleSkillCommand(positionals, values);
294
+ },
295
+ };
296
+ // Execute command
297
+ if (command && simpleCommands[command]) {
298
+ await executeCommand(command.charAt(0).toUpperCase() + command.slice(1), simpleCommands[command]);
299
+ }
300
+ else if (command && complexCommands[command]) {
301
+ await complexCommands[command]();
302
+ }
303
+ else {
304
+ // Show welcome message for first-time users
305
+ if (!command && isFirstRun) {
106
306
  console.log(`
307
+ Looks like you're new to ClaudeTools.
308
+
309
+ Run: claudetools init -- to set up your project
310
+ Or: claudetools login -- to sign in first
311
+ `);
312
+ }
313
+ // Show grouped command help
314
+ console.log(`
107
315
  claudetools - AI agent project setup for Claude Code
108
316
 
109
- Usage:
110
- claudetools init Initialize project
111
- claudetools onboard Generate documentation and AGENTS.md
112
- claudetools cleanup Remove legacy config
317
+ Getting Started:
318
+ init Initialize project
319
+ onboard Generate documentation and AGENTS.md
320
+ login Authenticate with ClaudeTools
321
+ logout Sign out
322
+ whoami Show current user info
323
+
324
+ Marketplace:
325
+ search [query] Search marketplace for extensions
326
+ install <slug> Install an extension
327
+ uninstall <slug> Remove an extension (type auto-detected)
328
+ list List installed extensions
329
+
330
+ Stacks:
331
+ stacks Manage extension stacks
332
+ sync Sync stacks to/from cloud
333
+
334
+ Sync Engine:
335
+ sync start Start the sync engine
336
+ sync stop Stop the sync engine
337
+ sync pool Show MCP process pool
338
+ sync reload Reload configuration
339
+ sync logs Tail engine logs
340
+
341
+ Account:
342
+ analytics Show usage statistics
343
+ stats Show gamification progress (level, XP, streak)
344
+ upgrade Upgrade to ClaudeTools Pro
345
+ billing Manage billing
346
+ keys Manage API keys
347
+
348
+ Skills:
349
+ skill list List installed skills
350
+ skill add <ref> Install a skill
351
+ skill remove Remove a skill
352
+ skill show Show skill details
353
+ skill validate Validate a skill file
354
+
355
+ Advanced:
356
+ project Manage registered projects
357
+ mcp Manage MCP servers
358
+ hook Manage Claude Code hooks
359
+ cleanup Remove legacy config
360
+ update Check for and install updates
113
361
 
114
362
  Run 'claudetools --help' for more options.
115
363
  `);
116
- if (command) {
117
- console.error(`Unknown command: ${command}`);
118
- process.exit(1);
119
- }
364
+ if (command) {
365
+ console.error(`Unknown command: ${command}`);
366
+ process.exit(1);
367
+ }
120
368
  }
121
369
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Hook command — install/uninstall/status for Claude Code hook configuration.
3
+ *
4
+ * `claudetools hook` — Check hook status
5
+ * `claudetools hook install` — Write hooks to ~/.claude/settings.json
6
+ * `claudetools hook uninstall` — Remove claudetools hooks from settings
7
+ * `claudetools hook status` — Show hook configuration status
8
+ */
9
+ type ParsedValues = Record<string, string | boolean | undefined>;
10
+ export declare function handleHookCommand(positionals: string[], _values: ParsedValues): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AA6LjE,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAoCf"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Hook command — install/uninstall/status for Claude Code hook configuration.
3
+ *
4
+ * `claudetools hook` — Check hook status
5
+ * `claudetools hook install` — Write hooks to ~/.claude/settings.json
6
+ * `claudetools hook uninstall` — Remove claudetools hooks from settings
7
+ * `claudetools hook status` — Show hook configuration status
8
+ */
9
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import { homedir } from 'node:os';
12
+ import { executeCommand } from '../lib/command-utils.js';
13
+ // Hook entries that claudetools manages
14
+ const CLAUDETOOLS_HOOK_MARKER = 'claudetools-sync hook';
15
+ /** Hook definitions that claudetools installs. */
16
+ function claudetoolsHooks() {
17
+ return {
18
+ PreToolUse: [
19
+ {
20
+ matcher: '*',
21
+ hooks: [
22
+ {
23
+ type: 'command',
24
+ command: 'claudetools-sync hook PreToolUse --tool-name $TOOL_NAME',
25
+ },
26
+ ],
27
+ },
28
+ ],
29
+ PostToolUse: [
30
+ {
31
+ matcher: '*',
32
+ hooks: [
33
+ {
34
+ type: 'command',
35
+ command: 'claudetools-sync hook PostToolUse --tool-name $TOOL_NAME',
36
+ },
37
+ ],
38
+ },
39
+ ],
40
+ };
41
+ }
42
+ /** Resolve path to ~/.claude/settings.json */
43
+ function settingsPath() {
44
+ const home = homedir();
45
+ if (!home) {
46
+ throw new Error('Cannot determine home directory — $HOME is not set');
47
+ }
48
+ return join(home, '.claude', 'settings.json');
49
+ }
50
+ /** Read existing settings.json or return empty object. */
51
+ function readSettings() {
52
+ const path = settingsPath();
53
+ if (!existsSync(path)) {
54
+ return {};
55
+ }
56
+ const raw = readFileSync(path, 'utf-8');
57
+ return JSON.parse(raw);
58
+ }
59
+ /** Write settings.json with proper formatting. */
60
+ function writeSettings(settings) {
61
+ const path = settingsPath();
62
+ const home = homedir();
63
+ if (!home) {
64
+ throw new Error('Cannot determine home directory — $HOME is not set');
65
+ }
66
+ const dir = join(home, '.claude');
67
+ if (!existsSync(dir)) {
68
+ mkdirSync(dir, { recursive: true });
69
+ }
70
+ writeFileSync(path, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
71
+ }
72
+ /** Check if a hook matcher entry is a claudetools hook. */
73
+ function isClaudetoolsHook(matcher) {
74
+ return matcher.hooks.some((h) => h.command && h.command.includes(CLAUDETOOLS_HOOK_MARKER));
75
+ }
76
+ /** Install claudetools hooks into settings.json (merge, don't overwrite). */
77
+ async function runHookInstall() {
78
+ const settings = readSettings();
79
+ const ctHooks = claudetoolsHooks();
80
+ if (!settings.hooks) {
81
+ settings.hooks = {};
82
+ }
83
+ let installed = 0;
84
+ for (const [event, matchers] of Object.entries(ctHooks)) {
85
+ if (!settings.hooks[event]) {
86
+ settings.hooks[event] = [];
87
+ }
88
+ // Remove any existing claudetools hooks for this event first
89
+ settings.hooks[event] = settings.hooks[event].filter((m) => !isClaudetoolsHook(m));
90
+ // Add our hooks
91
+ settings.hooks[event].push(...matchers);
92
+ installed += matchers.length;
93
+ }
94
+ writeSettings(settings);
95
+ console.log(`Installed ${installed} hook(s) into ${settingsPath()}`);
96
+ console.log('Events: PreToolUse, PostToolUse');
97
+ }
98
+ /** Remove only claudetools hooks from settings.json (preserve user hooks). */
99
+ async function runHookUninstall() {
100
+ const settings = readSettings();
101
+ if (!settings.hooks) {
102
+ console.log('No hooks configured — nothing to uninstall.');
103
+ return;
104
+ }
105
+ let removed = 0;
106
+ for (const event of Object.keys(settings.hooks)) {
107
+ const eventHooks = settings.hooks[event];
108
+ if (!eventHooks)
109
+ continue;
110
+ const before = eventHooks.length;
111
+ settings.hooks[event] = eventHooks.filter((m) => !isClaudetoolsHook(m));
112
+ removed += before - (settings.hooks[event]?.length ?? 0);
113
+ // Remove empty arrays
114
+ if (settings.hooks[event]?.length === 0) {
115
+ delete settings.hooks[event];
116
+ }
117
+ }
118
+ // Remove empty hooks object
119
+ if (Object.keys(settings.hooks).length === 0) {
120
+ delete settings.hooks;
121
+ }
122
+ writeSettings(settings);
123
+ if (removed > 0) {
124
+ console.log(`Removed ${removed} claudetools hook(s) from ${settingsPath()}`);
125
+ }
126
+ else {
127
+ console.log('No claudetools hooks found — nothing to remove.');
128
+ }
129
+ }
130
+ /** Show hook status. */
131
+ async function runHookStatus() {
132
+ const settings = readSettings();
133
+ const path = settingsPath();
134
+ if (!settings.hooks) {
135
+ console.log(`No hooks configured in ${path}`);
136
+ return;
137
+ }
138
+ let ctCount = 0;
139
+ let userCount = 0;
140
+ for (const [event, matchers] of Object.entries(settings.hooks)) {
141
+ for (const matcher of matchers) {
142
+ if (isClaudetoolsHook(matcher)) {
143
+ ctCount++;
144
+ console.log(` [claudetools] ${event} (matcher: ${matcher.matcher})`);
145
+ }
146
+ else {
147
+ userCount++;
148
+ console.log(` [user] ${event} (matcher: ${matcher.matcher})`);
149
+ }
150
+ }
151
+ }
152
+ console.log();
153
+ console.log(`Claudetools hooks: ${ctCount}`);
154
+ console.log(`User hooks: ${userCount}`);
155
+ console.log(`Settings: ${path}`);
156
+ }
157
+ export async function handleHookCommand(positionals, _values) {
158
+ const subcommand = positionals[1];
159
+ switch (subcommand) {
160
+ case 'install':
161
+ await executeCommand('Hook install', runHookInstall);
162
+ break;
163
+ case 'uninstall':
164
+ await executeCommand('Hook uninstall', runHookUninstall);
165
+ break;
166
+ case 'status':
167
+ case undefined:
168
+ await executeCommand('Hook status', runHookStatus);
169
+ break;
170
+ default:
171
+ console.log(`
172
+ claudetools hook - Manage Claude Code hook configuration
173
+
174
+ Usage:
175
+ claudetools hook Show hook status
176
+ claudetools hook install Install claudetools hooks
177
+ claudetools hook uninstall Remove claudetools hooks
178
+ claudetools hook status Show hook status
179
+
180
+ The install command adds PreToolUse and PostToolUse hooks to
181
+ ~/.claude/settings.json that route through the sync engine.
182
+ Existing user-defined hooks are preserved.
183
+ `);
184
+ if (subcommand) {
185
+ console.error(`Unknown hook command: ${subcommand}`);
186
+ process.exit(1);
187
+ }
188
+ }
189
+ }
190
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ type ParsedValues = Record<string, string | boolean | undefined>;
2
+ export declare function handleKeysCommand(positionals: string[], values: ParsedValues): Promise<void>;
3
+ export {};
4
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AAEjE,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAuDf"}