pilothub 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +36 -129
  3. package/dist/browserAuth.d.ts +20 -0
  4. package/dist/browserAuth.js +156 -0
  5. package/dist/browserAuth.js.map +1 -0
  6. package/dist/browserAuth.test.d.ts +1 -0
  7. package/dist/browserAuth.test.js +83 -0
  8. package/dist/browserAuth.test.js.map +1 -0
  9. package/dist/cli/buildInfo.d.ts +3 -0
  10. package/dist/cli/buildInfo.js +103 -0
  11. package/dist/cli/buildInfo.js.map +1 -0
  12. package/dist/cli/commands/auth.d.ts +9 -0
  13. package/dist/cli/commands/auth.js +75 -0
  14. package/dist/cli/commands/auth.js.map +1 -0
  15. package/dist/cli/commands/delete.d.ts +11 -0
  16. package/dist/cli/commands/delete.js +67 -0
  17. package/dist/cli/commands/delete.js.map +1 -0
  18. package/dist/cli/commands/delete.test.d.ts +1 -0
  19. package/dist/cli/commands/delete.test.js +52 -0
  20. package/dist/cli/commands/delete.test.js.map +1 -0
  21. package/dist/cli/commands/publish.d.ts +9 -0
  22. package/dist/cli/commands/publish.js +87 -0
  23. package/dist/cli/commands/publish.js.map +1 -0
  24. package/dist/cli/commands/publish.test.d.ts +1 -0
  25. package/dist/cli/commands/publish.test.js +104 -0
  26. package/dist/cli/commands/publish.test.js.map +1 -0
  27. package/dist/cli/commands/skills.d.ts +23 -0
  28. package/dist/cli/commands/skills.js +298 -0
  29. package/dist/cli/commands/skills.js.map +1 -0
  30. package/dist/cli/commands/skills.test.d.ts +1 -0
  31. package/dist/cli/commands/skills.test.js +156 -0
  32. package/dist/cli/commands/skills.test.js.map +1 -0
  33. package/dist/cli/commands/star.d.ts +8 -0
  34. package/dist/cli/commands/star.js +38 -0
  35. package/dist/cli/commands/star.js.map +1 -0
  36. package/dist/cli/commands/sync.d.ts +3 -0
  37. package/dist/cli/commands/sync.js +160 -0
  38. package/dist/cli/commands/sync.js.map +1 -0
  39. package/dist/cli/commands/sync.test.d.ts +1 -0
  40. package/dist/cli/commands/sync.test.js +277 -0
  41. package/dist/cli/commands/sync.test.js.map +1 -0
  42. package/dist/cli/commands/syncHelpers.d.ts +76 -0
  43. package/dist/cli/commands/syncHelpers.js +349 -0
  44. package/dist/cli/commands/syncHelpers.js.map +1 -0
  45. package/dist/cli/commands/syncHelpers.test.d.ts +1 -0
  46. package/dist/cli/commands/syncHelpers.test.js +22 -0
  47. package/dist/cli/commands/syncHelpers.test.js.map +1 -0
  48. package/dist/cli/commands/syncTypes.d.ts +24 -0
  49. package/dist/cli/commands/syncTypes.js +2 -0
  50. package/dist/cli/commands/syncTypes.js.map +1 -0
  51. package/dist/cli/commands/unstar.d.ts +8 -0
  52. package/dist/cli/commands/unstar.js +38 -0
  53. package/dist/cli/commands/unstar.js.map +1 -0
  54. package/dist/cli/helpStyle.d.ts +13 -0
  55. package/dist/cli/helpStyle.js +38 -0
  56. package/dist/cli/helpStyle.js.map +1 -0
  57. package/dist/cli/pilotbotConfig.d.ts +6 -0
  58. package/dist/cli/pilotbotConfig.js +110 -0
  59. package/dist/cli/pilotbotConfig.js.map +1 -0
  60. package/dist/cli/pilotbotConfig.test.d.ts +1 -0
  61. package/dist/cli/pilotbotConfig.test.js +133 -0
  62. package/dist/cli/pilotbotConfig.test.js.map +1 -0
  63. package/dist/cli/registry.d.ts +7 -0
  64. package/dist/cli/registry.js +42 -0
  65. package/dist/cli/registry.js.map +1 -0
  66. package/dist/cli/registry.test.d.ts +1 -0
  67. package/dist/cli/registry.test.js +48 -0
  68. package/dist/cli/registry.test.js.map +1 -0
  69. package/dist/cli/scanSkills.d.ts +7 -0
  70. package/dist/cli/scanSkills.js +75 -0
  71. package/dist/cli/scanSkills.js.map +1 -0
  72. package/dist/cli/scanSkills.test.d.ts +1 -0
  73. package/dist/cli/scanSkills.test.js +60 -0
  74. package/dist/cli/scanSkills.test.js.map +1 -0
  75. package/dist/cli/slug.d.ts +2 -0
  76. package/dist/cli/slug.js +16 -0
  77. package/dist/cli/slug.js.map +1 -0
  78. package/dist/cli/types.d.ts +15 -0
  79. package/dist/cli/types.js +2 -0
  80. package/dist/cli/types.js.map +1 -0
  81. package/dist/cli/ui.d.ts +7 -0
  82. package/dist/cli/ui.js +72 -0
  83. package/dist/cli/ui.js.map +1 -0
  84. package/dist/cli.d.ts +2 -0
  85. package/dist/cli.js +268 -0
  86. package/dist/cli.js.map +1 -0
  87. package/dist/config.d.ts +4 -0
  88. package/dist/config.js +38 -0
  89. package/dist/config.js.map +1 -0
  90. package/dist/discovery.d.ts +5 -0
  91. package/dist/discovery.js +21 -0
  92. package/dist/discovery.js.map +1 -0
  93. package/dist/discovery.test.d.ts +1 -0
  94. package/dist/discovery.test.js +46 -0
  95. package/dist/discovery.test.js.map +1 -0
  96. package/dist/http.d.ts +32 -0
  97. package/dist/http.js +261 -0
  98. package/dist/http.js.map +1 -0
  99. package/dist/http.test.d.ts +1 -0
  100. package/dist/http.test.js +135 -0
  101. package/dist/http.test.js.map +1 -0
  102. package/dist/schema/ark.js.map +1 -0
  103. package/dist/schema/index.js.map +1 -0
  104. package/dist/schema/routes.js.map +1 -0
  105. package/{packages/schema/dist → dist/schema}/schemas.d.ts +0 -39
  106. package/{packages/schema/dist → dist/schema}/schemas.js +0 -22
  107. package/dist/schema/schemas.js.map +1 -0
  108. package/dist/schema/textFiles.js.map +1 -0
  109. package/dist/schema/textFiles.test.d.ts +1 -0
  110. package/dist/schema/textFiles.test.js +20 -0
  111. package/dist/schema/textFiles.test.js.map +1 -0
  112. package/dist/skills.d.ts +43 -0
  113. package/dist/skills.js +163 -0
  114. package/dist/skills.js.map +1 -0
  115. package/dist/skills.test.d.ts +1 -0
  116. package/dist/skills.test.js +144 -0
  117. package/dist/skills.test.js.map +1 -0
  118. package/dist/types.d.ts +7 -0
  119. package/dist/types.js +2 -0
  120. package/dist/types.js.map +1 -0
  121. package/package.json +27 -70
  122. package/.env.local.example +0 -19
  123. package/.github/workflows/ci.yml +0 -40
  124. package/.oxlintrc.json +0 -3
  125. package/AGENTS.md +0 -45
  126. package/CHANGELOG.md +0 -138
  127. package/DEPRECATIONS.md +0 -7
  128. package/biome.json +0 -41
  129. package/convex/_generated/api.d.ts +0 -153
  130. package/convex/_generated/api.js +0 -23
  131. package/convex/_generated/dataModel.d.ts +0 -60
  132. package/convex/_generated/server.d.ts +0 -143
  133. package/convex/_generated/server.js +0 -93
  134. package/convex/auth.config.ts +0 -8
  135. package/convex/auth.ts +0 -19
  136. package/convex/comments.ts +0 -88
  137. package/convex/crons.ts +0 -34
  138. package/convex/devSeed.ts +0 -459
  139. package/convex/devSeedExtra.ts +0 -541
  140. package/convex/downloads.ts +0 -78
  141. package/convex/githubBackups.ts +0 -170
  142. package/convex/githubBackupsNode.ts +0 -183
  143. package/convex/githubImport.ts +0 -317
  144. package/convex/githubSoulBackups.ts +0 -170
  145. package/convex/githubSoulBackupsNode.ts +0 -186
  146. package/convex/http.ts +0 -194
  147. package/convex/httpApi.handlers.test.ts +0 -488
  148. package/convex/httpApi.test.ts +0 -70
  149. package/convex/httpApi.ts +0 -305
  150. package/convex/httpApiV1.handlers.test.ts +0 -584
  151. package/convex/httpApiV1.ts +0 -1172
  152. package/convex/leaderboards.ts +0 -39
  153. package/convex/lib/access.ts +0 -36
  154. package/convex/lib/apiTokenAuth.ts +0 -36
  155. package/convex/lib/badges.ts +0 -50
  156. package/convex/lib/changelog.test.ts +0 -34
  157. package/convex/lib/changelog.ts +0 -278
  158. package/convex/lib/embeddings.ts +0 -38
  159. package/convex/lib/githubBackup.ts +0 -443
  160. package/convex/lib/githubImport.test.ts +0 -247
  161. package/convex/lib/githubImport.ts +0 -425
  162. package/convex/lib/githubSoulBackup.ts +0 -443
  163. package/convex/lib/leaderboards.ts +0 -103
  164. package/convex/lib/moderation.ts +0 -42
  165. package/convex/lib/public.ts +0 -89
  166. package/convex/lib/searchText.test.ts +0 -46
  167. package/convex/lib/searchText.ts +0 -27
  168. package/convex/lib/skillBackfill.test.ts +0 -34
  169. package/convex/lib/skillBackfill.ts +0 -67
  170. package/convex/lib/skillPublish.test.ts +0 -28
  171. package/convex/lib/skillPublish.ts +0 -284
  172. package/convex/lib/skillStats.ts +0 -80
  173. package/convex/lib/skills.test.ts +0 -197
  174. package/convex/lib/skills.ts +0 -273
  175. package/convex/lib/soulChangelog.ts +0 -273
  176. package/convex/lib/soulPublish.ts +0 -236
  177. package/convex/lib/tokens.test.ts +0 -33
  178. package/convex/lib/tokens.ts +0 -51
  179. package/convex/lib/webhooks.test.ts +0 -91
  180. package/convex/lib/webhooks.ts +0 -112
  181. package/convex/maintenance.test.ts +0 -270
  182. package/convex/maintenance.ts +0 -840
  183. package/convex/rateLimits.ts +0 -50
  184. package/convex/schema.ts +0 -472
  185. package/convex/search.test.ts +0 -12
  186. package/convex/search.ts +0 -254
  187. package/convex/seed.test.ts +0 -37
  188. package/convex/seed.ts +0 -254
  189. package/convex/seedSouls.ts +0 -111
  190. package/convex/skillStatEvents.ts +0 -568
  191. package/convex/skills.ts +0 -1606
  192. package/convex/soulComments.ts +0 -88
  193. package/convex/soulDownloads.ts +0 -14
  194. package/convex/soulStars.ts +0 -71
  195. package/convex/souls.ts +0 -570
  196. package/convex/stars.ts +0 -108
  197. package/convex/statsMaintenance.ts +0 -205
  198. package/convex/telemetry.ts +0 -434
  199. package/convex/tokens.ts +0 -88
  200. package/convex/tsconfig.json +0 -7
  201. package/convex/uploads.ts +0 -20
  202. package/convex/users.ts +0 -122
  203. package/convex/webhooks.ts +0 -50
  204. package/convex.json +0 -3
  205. package/docs/README.md +0 -32
  206. package/docs/api.md +0 -51
  207. package/docs/architecture.md +0 -61
  208. package/docs/auth.md +0 -54
  209. package/docs/cli.md +0 -117
  210. package/docs/deploy.md +0 -78
  211. package/docs/diffing.md +0 -84
  212. package/docs/github-import.md +0 -171
  213. package/docs/http-api.md +0 -187
  214. package/docs/manual-testing.md +0 -64
  215. package/docs/mintlify.md +0 -43
  216. package/docs/quickstart.md +0 -120
  217. package/docs/skill-format.md +0 -58
  218. package/docs/soul-format.md +0 -37
  219. package/docs/spec.md +0 -177
  220. package/docs/telemetry.md +0 -91
  221. package/docs/troubleshooting.md +0 -49
  222. package/docs/webhook.md +0 -51
  223. package/e2e/menu-smoke.pw.test.ts +0 -49
  224. package/e2e/pilothub.e2e.test.ts +0 -494
  225. package/e2e/search-exact.pw.test.ts +0 -97
  226. package/packages/pilothub/LICENSE +0 -22
  227. package/packages/pilothub/README.md +0 -57
  228. package/packages/pilothub/package.json +0 -41
  229. package/packages/pilothub/src/browserAuth.test.ts +0 -96
  230. package/packages/pilothub/src/browserAuth.ts +0 -174
  231. package/packages/pilothub/src/cli/buildInfo.ts +0 -94
  232. package/packages/pilothub/src/cli/commands/auth.ts +0 -97
  233. package/packages/pilothub/src/cli/commands/delete.test.ts +0 -73
  234. package/packages/pilothub/src/cli/commands/delete.ts +0 -83
  235. package/packages/pilothub/src/cli/commands/publish.test.ts +0 -122
  236. package/packages/pilothub/src/cli/commands/publish.ts +0 -108
  237. package/packages/pilothub/src/cli/commands/skills.test.ts +0 -191
  238. package/packages/pilothub/src/cli/commands/skills.ts +0 -380
  239. package/packages/pilothub/src/cli/commands/star.ts +0 -46
  240. package/packages/pilothub/src/cli/commands/sync.test.ts +0 -310
  241. package/packages/pilothub/src/cli/commands/sync.ts +0 -200
  242. package/packages/pilothub/src/cli/commands/syncHelpers.test.ts +0 -26
  243. package/packages/pilothub/src/cli/commands/syncHelpers.ts +0 -427
  244. package/packages/pilothub/src/cli/commands/syncTypes.ts +0 -27
  245. package/packages/pilothub/src/cli/commands/unstar.ts +0 -48
  246. package/packages/pilothub/src/cli/helpStyle.ts +0 -45
  247. package/packages/pilothub/src/cli/pilotbotConfig.test.ts +0 -159
  248. package/packages/pilothub/src/cli/pilotbotConfig.ts +0 -147
  249. package/packages/pilothub/src/cli/registry.test.ts +0 -63
  250. package/packages/pilothub/src/cli/registry.ts +0 -43
  251. package/packages/pilothub/src/cli/scanSkills.test.ts +0 -64
  252. package/packages/pilothub/src/cli/scanSkills.ts +0 -84
  253. package/packages/pilothub/src/cli/slug.ts +0 -16
  254. package/packages/pilothub/src/cli/types.ts +0 -12
  255. package/packages/pilothub/src/cli/ui.ts +0 -75
  256. package/packages/pilothub/src/cli.ts +0 -311
  257. package/packages/pilothub/src/config.ts +0 -36
  258. package/packages/pilothub/src/discovery.test.ts +0 -75
  259. package/packages/pilothub/src/discovery.ts +0 -19
  260. package/packages/pilothub/src/http.test.ts +0 -156
  261. package/packages/pilothub/src/http.ts +0 -301
  262. package/packages/pilothub/src/schema/ark.ts +0 -29
  263. package/packages/pilothub/src/schema/index.ts +0 -5
  264. package/packages/pilothub/src/schema/routes.ts +0 -22
  265. package/packages/pilothub/src/schema/schemas.ts +0 -260
  266. package/packages/pilothub/src/schema/textFiles.test.ts +0 -23
  267. package/packages/pilothub/src/schema/textFiles.ts +0 -66
  268. package/packages/pilothub/src/skills.test.ts +0 -191
  269. package/packages/pilothub/src/skills.ts +0 -172
  270. package/packages/pilothub/src/types.ts +0 -10
  271. package/packages/pilothub/tsconfig.json +0 -14
  272. package/packages/schema/README.md +0 -3
  273. package/packages/schema/dist/ark.js.map +0 -1
  274. package/packages/schema/dist/index.js.map +0 -1
  275. package/packages/schema/dist/routes.js.map +0 -1
  276. package/packages/schema/dist/schemas.js.map +0 -1
  277. package/packages/schema/dist/textFiles.js.map +0 -1
  278. package/packages/schema/package.json +0 -26
  279. package/packages/schema/src/ark.ts +0 -29
  280. package/packages/schema/src/index.ts +0 -5
  281. package/packages/schema/src/routes.ts +0 -22
  282. package/packages/schema/src/schemas.test.ts +0 -123
  283. package/packages/schema/src/schemas.ts +0 -287
  284. package/packages/schema/src/textFiles.test.ts +0 -23
  285. package/packages/schema/src/textFiles.ts +0 -66
  286. package/packages/schema/tsconfig.json +0 -15
  287. package/pilothub +0 -46
  288. package/playwright.config.ts +0 -33
  289. package/public/.well-known/pilothub.json +0 -6
  290. package/public/api/v1/openapi.json +0 -379
  291. package/public/favicon.ico +0 -0
  292. package/public/logo192.png +0 -0
  293. package/public/logo512.png +0 -0
  294. package/public/manifest.json +0 -25
  295. package/public/og.png +0 -0
  296. package/public/og.svg +0 -98
  297. package/public/pilot-logo.png +0 -0
  298. package/public/pilot-mark.png +0 -0
  299. package/public/robots.txt +0 -3
  300. package/public/tanstack-circle-logo.png +0 -0
  301. package/public/tanstack-word-logo-white.svg +0 -1
  302. package/scripts/check-peer-deps.ts +0 -56
  303. package/scripts/docs-list.ts +0 -148
  304. package/scripts/run-playwright-local.sh +0 -14
  305. package/server/og/fetchSkillOgMeta.ts +0 -27
  306. package/server/og/fetchSoulOgMeta.ts +0 -27
  307. package/server/og/ogAssets.ts +0 -80
  308. package/server/og/skillOgSvg.test.ts +0 -59
  309. package/server/og/skillOgSvg.ts +0 -258
  310. package/server/og/soulOgSvg.ts +0 -209
  311. package/server/routes/og/skill.png.ts +0 -103
  312. package/server/routes/og/soul.png.ts +0 -111
  313. package/src/__tests__/skill-detail-page.test.tsx +0 -86
  314. package/src/__tests__/skills-index.test.tsx +0 -145
  315. package/src/__tests__/upload.route.test.tsx +0 -228
  316. package/src/components/AppProviders.tsx +0 -19
  317. package/src/components/ClientOnly.tsx +0 -18
  318. package/src/components/Footer.tsx +0 -29
  319. package/src/components/Header.tsx +0 -295
  320. package/src/components/InstallSwitcher.tsx +0 -53
  321. package/src/components/SkillCard.tsx +0 -36
  322. package/src/components/SkillDetailPage.tsx +0 -817
  323. package/src/components/SkillDiffCard.tsx +0 -485
  324. package/src/components/SoulCard.tsx +0 -19
  325. package/src/components/SoulDetailPage.tsx +0 -263
  326. package/src/components/UserBootstrap.tsx +0 -18
  327. package/src/components/ui/dropdown-menu.tsx +0 -67
  328. package/src/components/ui/toggle-group.tsx +0 -35
  329. package/src/convex/client.ts +0 -3
  330. package/src/lib/badges.ts +0 -29
  331. package/src/lib/diffing.test.ts +0 -163
  332. package/src/lib/diffing.ts +0 -106
  333. package/src/lib/gravatar.test.ts +0 -9
  334. package/src/lib/gravatar.ts +0 -158
  335. package/src/lib/og.test.ts +0 -142
  336. package/src/lib/og.ts +0 -156
  337. package/src/lib/publicUser.ts +0 -39
  338. package/src/lib/roles.ts +0 -19
  339. package/src/lib/site.test.ts +0 -130
  340. package/src/lib/site.ts +0 -84
  341. package/src/lib/theme-transition.test.ts +0 -134
  342. package/src/lib/theme-transition.ts +0 -134
  343. package/src/lib/theme.test.tsx +0 -88
  344. package/src/lib/theme.ts +0 -43
  345. package/src/lib/uploadFiles.jsdom.test.ts +0 -33
  346. package/src/lib/uploadFiles.test.ts +0 -123
  347. package/src/lib/uploadFiles.ts +0 -245
  348. package/src/lib/uploadUtils.test.ts +0 -78
  349. package/src/lib/uploadUtils.ts +0 -93
  350. package/src/lib/useAuthStatus.ts +0 -12
  351. package/src/lib/utils.test.ts +0 -9
  352. package/src/lib/utils.ts +0 -6
  353. package/src/logo.svg +0 -12
  354. package/src/routeTree.gen.ts +0 -345
  355. package/src/router.tsx +0 -17
  356. package/src/routes/$owner/$slug.tsx +0 -55
  357. package/src/routes/__root.tsx +0 -136
  358. package/src/routes/admin.tsx +0 -11
  359. package/src/routes/cli/auth.tsx +0 -168
  360. package/src/routes/dashboard.tsx +0 -97
  361. package/src/routes/import.tsx +0 -415
  362. package/src/routes/index.tsx +0 -252
  363. package/src/routes/management.tsx +0 -529
  364. package/src/routes/settings.tsx +0 -203
  365. package/src/routes/skills/index.tsx +0 -422
  366. package/src/routes/souls/$slug.tsx +0 -55
  367. package/src/routes/souls/index.tsx +0 -243
  368. package/src/routes/stars.tsx +0 -68
  369. package/src/routes/u/$handle.tsx +0 -307
  370. package/src/routes/upload/utils.ts +0 -81
  371. package/src/routes/upload.tsx +0 -499
  372. package/src/styles.css +0 -2718
  373. package/tsconfig.json +0 -24
  374. package/tsconfig.oxlint.json +0 -16
  375. package/vercel.json +0 -8
  376. package/vite.config.ts +0 -48
  377. package/vitest.config.ts +0 -47
  378. package/vitest.e2e.config.ts +0 -11
  379. package/vitest.setup.ts +0 -1
  380. /package/{packages/pilothub/bin → bin}/pilothub.js +0 -0
  381. /package/{packages/schema/dist → dist/schema}/ark.d.ts +0 -0
  382. /package/{packages/schema/dist → dist/schema}/ark.js +0 -0
  383. /package/{packages/schema/dist → dist/schema}/index.d.ts +0 -0
  384. /package/{packages/schema/dist → dist/schema}/index.js +0 -0
  385. /package/{packages/schema/dist → dist/schema}/routes.d.ts +0 -0
  386. /package/{packages/schema/dist → dist/schema}/routes.js +0 -0
  387. /package/{packages/schema/dist → dist/schema}/textFiles.d.ts +0 -0
  388. /package/{packages/schema/dist → dist/schema}/textFiles.js +0 -0
@@ -0,0 +1,349 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { realpath } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { resolve } from 'node:path';
5
+ import { isCancel, multiselect } from '@clack/prompts';
6
+ import semver from 'semver';
7
+ import { apiRequest, downloadZip } from '../../http.js';
8
+ import { ApiCliTelemetrySyncResponseSchema, ApiRoutes, ApiV1SkillResolveResponseSchema, ApiV1SkillResponseSchema, ApiV1WhoamiResponseSchema, LegacyApiRoutes, } from '../../schema/index.js';
9
+ import { hashSkillZip } from '../../skills.js';
10
+ import { getRegistry } from '../registry.js';
11
+ import { findSkillFolders } from '../scanSkills.js';
12
+ import { fail, formatError } from '../ui.js';
13
+ export async function reportTelemetryIfEnabled(params) {
14
+ if (isTelemetryDisabled())
15
+ return;
16
+ const versionBySlug = new Map();
17
+ for (const candidate of params.candidates) {
18
+ versionBySlug.set(candidate.slug, candidate.matchVersion ?? null);
19
+ }
20
+ const roots = params.scan.roots.map((root) => ({
21
+ rootId: rootTelemetryId(root),
22
+ label: formatRootLabel(root),
23
+ skills: (params.scan.skillsByRoot[root] ?? []).map((skill) => ({
24
+ slug: skill.slug,
25
+ version: versionBySlug.get(skill.slug) ?? null,
26
+ })),
27
+ }));
28
+ try {
29
+ await apiRequest(params.registry, {
30
+ method: 'POST',
31
+ path: LegacyApiRoutes.cliTelemetrySync,
32
+ token: params.token,
33
+ body: { roots },
34
+ }, ApiCliTelemetrySyncResponseSchema);
35
+ }
36
+ catch {
37
+ // ignore telemetry failures
38
+ }
39
+ }
40
+ function isTelemetryDisabled() {
41
+ const raw = process.env.PILOTHUB_DISABLE_TELEMETRY;
42
+ if (!raw)
43
+ return false;
44
+ return ['1', 'true', 'yes', 'on'].includes(raw.trim().toLowerCase());
45
+ }
46
+ export function buildScanRoots(opts, extraRoots) {
47
+ const roots = [opts.workdir, opts.dir, ...(extraRoots ?? [])];
48
+ return Array.from(new Set(roots.map((root) => resolve(root))));
49
+ }
50
+ export function normalizeConcurrency(value) {
51
+ const raw = typeof value === 'number' ? value : 4;
52
+ const rounded = Number.isFinite(raw) ? Math.round(raw) : 4;
53
+ return Math.min(32, Math.max(1, rounded));
54
+ }
55
+ export async function mapWithConcurrency(items, limit, fn) {
56
+ const results = Array.from({ length: items.length });
57
+ let nextIndex = 0;
58
+ const workerCount = Math.min(Math.max(1, limit), items.length || 1);
59
+ async function worker() {
60
+ while (true) {
61
+ const index = nextIndex;
62
+ nextIndex += 1;
63
+ if (index >= items.length)
64
+ return;
65
+ results[index] = await fn(items[index]);
66
+ }
67
+ }
68
+ await Promise.all(Array.from({ length: workerCount }, () => worker()));
69
+ return results;
70
+ }
71
+ export async function checkRegistrySyncState(registry, skill, resolveSupport) {
72
+ if (resolveSupport.value !== false) {
73
+ try {
74
+ const resolved = await apiRequest(registry, {
75
+ method: 'GET',
76
+ path: `${ApiRoutes.resolve}?slug=${encodeURIComponent(skill.slug)}&hash=${encodeURIComponent(skill.fingerprint)}`,
77
+ }, ApiV1SkillResolveResponseSchema);
78
+ resolveSupport.value = true;
79
+ const latestVersion = resolved.latestVersion?.version ?? null;
80
+ const matchVersion = resolved.match?.version ?? null;
81
+ if (!latestVersion) {
82
+ return {
83
+ ...skill,
84
+ status: 'new',
85
+ matchVersion: null,
86
+ latestVersion: null,
87
+ };
88
+ }
89
+ return {
90
+ ...skill,
91
+ status: matchVersion ? 'synced' : 'update',
92
+ matchVersion,
93
+ latestVersion,
94
+ };
95
+ }
96
+ catch (error) {
97
+ const message = formatError(error);
98
+ if (/skill not found/i.test(message) || /HTTP 404/i.test(message)) {
99
+ resolveSupport.value = true;
100
+ return {
101
+ ...skill,
102
+ status: 'new',
103
+ matchVersion: null,
104
+ latestVersion: null,
105
+ };
106
+ }
107
+ if (/no matching routes found/i.test(message)) {
108
+ resolveSupport.value = false;
109
+ }
110
+ else {
111
+ throw error;
112
+ }
113
+ }
114
+ }
115
+ const meta = await apiRequest(registry, { method: 'GET', path: `${ApiRoutes.skills}/${encodeURIComponent(skill.slug)}` }, ApiV1SkillResponseSchema).catch(() => null);
116
+ const latestVersion = meta?.latestVersion?.version ?? null;
117
+ if (!latestVersion) {
118
+ return {
119
+ ...skill,
120
+ status: 'new',
121
+ matchVersion: null,
122
+ latestVersion: null,
123
+ };
124
+ }
125
+ const zip = await downloadZip(registry, { slug: skill.slug, version: latestVersion });
126
+ const remote = hashSkillZip(zip).fingerprint;
127
+ const matchVersion = remote === skill.fingerprint ? latestVersion : null;
128
+ return {
129
+ ...skill,
130
+ status: matchVersion ? 'synced' : 'update',
131
+ matchVersion,
132
+ latestVersion,
133
+ };
134
+ }
135
+ export async function scanRoots(roots) {
136
+ const result = await scanRootsWithLabels(roots);
137
+ return {
138
+ roots: result.roots,
139
+ skillsByRoot: result.skillsByRoot,
140
+ skills: result.skills,
141
+ rootsWithSkills: result.rootsWithSkills,
142
+ };
143
+ }
144
+ export async function scanRootsWithLabels(roots, labels) {
145
+ const all = [];
146
+ const rootsWithSkills = [];
147
+ const uniqueRoots = await dedupeRoots(roots);
148
+ const skillsByRoot = {};
149
+ const rootLabels = {};
150
+ for (const root of uniqueRoots) {
151
+ const found = await findSkillFolders(root);
152
+ skillsByRoot[root] = found;
153
+ if (found.length > 0)
154
+ rootsWithSkills.push(root);
155
+ all.push(...found);
156
+ if (labels?.[root])
157
+ rootLabels[root] = labels[root];
158
+ }
159
+ const byFolder = new Map();
160
+ for (const folder of all) {
161
+ byFolder.set(folder.folder, folder);
162
+ }
163
+ return {
164
+ roots: uniqueRoots,
165
+ skillsByRoot,
166
+ skills: Array.from(byFolder.values()),
167
+ rootsWithSkills,
168
+ rootLabels,
169
+ };
170
+ }
171
+ export function mergeScan(left, right) {
172
+ const mergedRoots = Array.from(new Set([...left.roots, ...right.roots]));
173
+ const skillsByRoot = {};
174
+ for (const root of mergedRoots) {
175
+ skillsByRoot[root] = right.skillsByRoot[root] ?? left.skillsByRoot[root] ?? [];
176
+ }
177
+ const rootLabels = { ...left.rootLabels, ...right.rootLabels };
178
+ const byFolder = new Map();
179
+ for (const entry of [...left.skills, ...right.skills]) {
180
+ byFolder.set(entry.folder, entry);
181
+ }
182
+ const skills = Array.from(byFolder.values());
183
+ const rootsWithSkills = mergedRoots.filter((root) => (skillsByRoot[root]?.length ?? 0) > 0);
184
+ return { roots: mergedRoots, skillsByRoot, skills, rootsWithSkills, rootLabels };
185
+ }
186
+ async function dedupeRoots(roots) {
187
+ const seen = new Set();
188
+ const unique = [];
189
+ for (const root of roots) {
190
+ const resolved = resolve(root);
191
+ const canonical = await realpath(resolved).catch(() => null);
192
+ const key = canonical ?? resolved;
193
+ if (seen.has(key))
194
+ continue;
195
+ seen.add(key);
196
+ unique.push(key);
197
+ }
198
+ return unique;
199
+ }
200
+ export async function selectToUpload(candidates, params) {
201
+ if (params.all || !params.allowPrompt)
202
+ return candidates;
203
+ const valueByKey = new Map();
204
+ const choices = candidates.map((candidate) => {
205
+ const key = candidate.folder;
206
+ valueByKey.set(key, candidate);
207
+ return {
208
+ value: key,
209
+ label: `${candidate.slug} ${formatActionableStatus(candidate, params.bump)}`,
210
+ hint: `${abbreviatePath(candidate.folder)} | ${candidate.fileCount} files`,
211
+ };
212
+ });
213
+ const picked = await multiselect({
214
+ message: 'Select skills to upload',
215
+ options: choices,
216
+ initialValues: choices.map((choice) => choice.value),
217
+ required: false,
218
+ });
219
+ if (isCancel(picked))
220
+ fail('Canceled');
221
+ const selected = picked.map((key) => valueByKey.get(String(key))).filter(Boolean);
222
+ return selected;
223
+ }
224
+ export async function resolvePublishMeta(skill, params) {
225
+ if (skill.status === 'new') {
226
+ return { publishVersion: '1.0.0', changelog: '' };
227
+ }
228
+ const latest = skill.latestVersion;
229
+ if (!latest)
230
+ fail(`Could not resolve latest version for ${skill.slug}`);
231
+ const publishVersion = semver.inc(latest, params.bump);
232
+ if (!publishVersion)
233
+ fail(`Could not bump version for ${skill.slug}`);
234
+ const fromFlag = params.changelogFlag?.trim();
235
+ if (fromFlag)
236
+ return { publishVersion, changelog: fromFlag };
237
+ return { publishVersion, changelog: '' };
238
+ }
239
+ export async function getRegistryWithAuth(opts, token) {
240
+ const registry = await getRegistry(opts, { cache: true });
241
+ await apiRequest(registry, { method: 'GET', path: ApiRoutes.whoami, token }, ApiV1WhoamiResponseSchema);
242
+ return registry;
243
+ }
244
+ export function formatList(values, max) {
245
+ if (values.length === 0)
246
+ return '';
247
+ const shown = values.map(abbreviatePath);
248
+ if (shown.length <= max)
249
+ return shown.join('\n');
250
+ const head = shown.slice(0, Math.max(1, max - 1));
251
+ const rest = values.length - head.length;
252
+ return [...head, `… +${rest} more`].join('\n');
253
+ }
254
+ export function printSection(title, body) {
255
+ const trimmed = body?.trim();
256
+ if (!trimmed) {
257
+ console.log(title);
258
+ return;
259
+ }
260
+ if (trimmed.includes('\n')) {
261
+ console.log(`\n${title}\n${trimmed}`);
262
+ return;
263
+ }
264
+ console.log(`${title}: ${trimmed}`);
265
+ }
266
+ function abbreviatePath(value) {
267
+ const home = homedir();
268
+ if (value.startsWith(home))
269
+ return `~${value.slice(home.length)}`;
270
+ return value;
271
+ }
272
+ function rootTelemetryId(value) {
273
+ return createHash('sha256').update(value).digest('hex');
274
+ }
275
+ function formatRootLabel(value) {
276
+ const home = homedir();
277
+ if (value === home)
278
+ return '~';
279
+ const normalized = value.replaceAll('\\', '/');
280
+ const normalizedHome = home.replaceAll('\\', '/');
281
+ const isHome = normalized === normalizedHome || normalized.startsWith(`${normalizedHome}/`);
282
+ const stripped = isHome ? normalized.slice(normalizedHome.length).replace(/^\//, '') : normalized;
283
+ const parts = stripped.split('/').filter(Boolean);
284
+ const tail = parts.slice(-2).join('/');
285
+ if (!tail)
286
+ return isHome ? '~' : '…';
287
+ return isHome ? `~/${tail}` : `…/${tail}`;
288
+ }
289
+ export function dedupeSkillsBySlug(skills) {
290
+ const bySlug = new Map();
291
+ for (const skill of skills) {
292
+ const existing = bySlug.get(skill.slug);
293
+ if (existing)
294
+ existing.push(skill);
295
+ else
296
+ bySlug.set(skill.slug, [skill]);
297
+ }
298
+ const unique = [];
299
+ const duplicates = [];
300
+ for (const [slug, entries] of bySlug.entries()) {
301
+ unique.push(entries[0]);
302
+ if (entries.length > 1)
303
+ duplicates.push(`${slug} (${entries.length})`);
304
+ }
305
+ return { skills: unique, duplicates };
306
+ }
307
+ export function formatActionableStatus(candidate, bump) {
308
+ if (candidate.status === 'new')
309
+ return 'NEW';
310
+ const latest = candidate.latestVersion;
311
+ const next = latest ? semver.inc(latest, bump) : null;
312
+ if (latest && next)
313
+ return `UPDATE ${latest} → ${next}`;
314
+ return 'UPDATE';
315
+ }
316
+ export function formatActionableLine(candidate, bump) {
317
+ return `${candidate.slug} ${formatActionableStatus(candidate, bump)} (${candidate.fileCount} files)`;
318
+ }
319
+ function formatSyncedLine(candidate) {
320
+ const version = candidate.matchVersion ?? candidate.latestVersion ?? 'unknown';
321
+ return `${candidate.slug} synced (${version})`;
322
+ }
323
+ export function formatSyncedSummary(candidate) {
324
+ const version = candidate.matchVersion ?? candidate.latestVersion;
325
+ return version ? `${candidate.slug}@${version}` : candidate.slug;
326
+ }
327
+ export function formatBulletList(lines, max) {
328
+ if (lines.length <= max)
329
+ return lines.map((line) => `- ${line}`).join('\n');
330
+ const head = lines.slice(0, max);
331
+ const rest = lines.length - head.length;
332
+ return [...head, `... +${rest} more`].map((line) => `- ${line}`).join('\n');
333
+ }
334
+ export function formatSyncedDisplay(synced) {
335
+ const lines = synced.map(formatSyncedLine);
336
+ if (lines.length <= 12)
337
+ return formatBulletList(lines, 12);
338
+ return formatCommaList(synced.map(formatSyncedSummary), 24);
339
+ }
340
+ export function formatCommaList(values, max) {
341
+ if (values.length === 0)
342
+ return '';
343
+ if (values.length <= max)
344
+ return values.join(', ');
345
+ const head = values.slice(0, Math.max(1, max - 1));
346
+ const rest = values.length - head.length;
347
+ return `${head.join(', ')}, ... +${rest} more`;
348
+ }
349
+ //# sourceMappingURL=syncHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncHelpers.js","sourceRoot":"","sources":["../../../src/cli/commands/syncHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ /* @vitest-environment node */
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ vi.mock('../scanSkills.js', () => ({
4
+ findSkillFolders: vi.fn(async (root) => {
5
+ if (root.endsWith('/with-skill')) {
6
+ return [{ folder: `${root}/demo`, slug: 'demo', displayName: 'Demo' }];
7
+ }
8
+ return [];
9
+ }),
10
+ }));
11
+ const { scanRootsWithLabels } = await import('./syncHelpers.js');
12
+ describe('scanRootsWithLabels', () => {
13
+ it('attaches labels to roots with skills', async () => {
14
+ const roots = ['/tmp/with-skill', '/tmp/empty', '/tmp/with-skill'];
15
+ const labels = { '/tmp/with-skill': 'Agent: Work' };
16
+ const result = await scanRootsWithLabels(roots, labels);
17
+ expect(result.rootsWithSkills).toEqual(['/tmp/with-skill']);
18
+ expect(result.rootLabels).toEqual({ '/tmp/with-skill': 'Agent: Work' });
19
+ expect(result.skills.map((skill) => skill.slug)).toEqual(['demo']);
20
+ });
21
+ });
22
+ //# sourceMappingURL=syncHelpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncHelpers.test.js","sourceRoot":"","sources":["../../../src/cli/commands/syncHelpers.test.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAC;CACH,CAAC,CAAC,CAAA;AAEH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAEhE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAA;QAClE,MAAM,MAAM,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAA;QAEnD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC,CAAA;QACvE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import type { SkillOrigin } from '../../skills.js';
2
+ import type { SkillFolder } from '../scanSkills.js';
3
+ export type SyncOptions = {
4
+ root?: string[];
5
+ all?: boolean;
6
+ dryRun?: boolean;
7
+ bump?: 'patch' | 'minor' | 'major';
8
+ changelog?: string;
9
+ tags?: string;
10
+ concurrency?: number;
11
+ };
12
+ export type Candidate = SkillFolder & {
13
+ fingerprint: string;
14
+ fileCount: number;
15
+ origin: SkillOrigin | null;
16
+ status: 'synced' | 'new' | 'update';
17
+ matchVersion: string | null;
18
+ latestVersion: string | null;
19
+ };
20
+ export type LocalSkill = SkillFolder & {
21
+ fingerprint: string;
22
+ fileCount: number;
23
+ origin: SkillOrigin | null;
24
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=syncTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncTypes.js","sourceRoot":"","sources":["../../../src/cli/commands/syncTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { GlobalOpts } from '../types.js';
2
+ export declare function cmdUnstarSkill(opts: GlobalOpts, slugArg: string, options: {
3
+ yes?: boolean;
4
+ }, inputAllowed: boolean): Promise<{
5
+ ok: true;
6
+ unstarred: boolean;
7
+ alreadyUnstarred: boolean;
8
+ } | undefined>;
@@ -0,0 +1,38 @@
1
+ import { readGlobalConfig } from '../../config.js';
2
+ import { apiRequest } from '../../http.js';
3
+ import { ApiRoutes, ApiV1UnstarResponseSchema } from '../../schema/index.js';
4
+ import { getRegistry } from '../registry.js';
5
+ import { createSpinner, fail, formatError, isInteractive, promptConfirm } from '../ui.js';
6
+ async function requireToken() {
7
+ const cfg = await readGlobalConfig();
8
+ const token = cfg?.token;
9
+ if (!token)
10
+ fail('Not logged in. Run: pilothub login');
11
+ return token;
12
+ }
13
+ export async function cmdUnstarSkill(opts, slugArg, options, inputAllowed) {
14
+ const slug = slugArg.trim().toLowerCase();
15
+ if (!slug)
16
+ fail('Slug required');
17
+ const allowPrompt = isInteractive() && inputAllowed !== false;
18
+ if (!options.yes) {
19
+ if (!allowPrompt)
20
+ fail('Pass --yes (no input)');
21
+ const ok = await promptConfirm(`Unstar ${slug}?`);
22
+ if (!ok)
23
+ return;
24
+ }
25
+ const token = await requireToken();
26
+ const registry = await getRegistry(opts, { cache: true });
27
+ const spinner = createSpinner(`Unstarring ${slug}`);
28
+ try {
29
+ const result = await apiRequest(registry, { method: 'DELETE', path: `${ApiRoutes.stars}/${encodeURIComponent(slug)}`, token }, ApiV1UnstarResponseSchema);
30
+ spinner.succeed(result.alreadyUnstarred ? `OK. ${slug} already unstarred.` : `OK. Unstarred ${slug}`);
31
+ return result;
32
+ }
33
+ catch (error) {
34
+ spinner.fail(formatError(error));
35
+ throw error;
36
+ }
37
+ }
38
+ //# sourceMappingURL=unstar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unstar.js","sourceRoot":"","sources":["../../../src/cli/commands/unstar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAEzF,KAAK,UAAU,YAAY;IACzB,MAAM,GAAG,GAAG,MAAM,gBAAgB,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAA;IACxB,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,oCAAoC,CAAC,CAAA;IACtD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAgB,EAChB,OAAe,EACf,OAA0B,EAC1B,YAAqB;IAErB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACzC,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,eAAe,CAAC,CAAA;IAChC,MAAM,WAAW,GAAG,aAAa,EAAE,IAAI,YAAY,KAAK,KAAK,CAAA;IAE7D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAC/C,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,UAAU,IAAI,GAAG,CAAC,CAAA;QACjD,IAAI,CAAC,EAAE;YAAE,OAAM;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,QAAQ,EACR,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EACnF,yBAAyB,CAC1B,CAAA;QACD,OAAO,CAAC,OAAO,CACb,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CACrF,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function styleTitle(value: string): string;
2
+ export declare function configureCommanderHelp(program: {
3
+ configureHelp: (config: {
4
+ sectionTitle?: (title: string) => string;
5
+ optionTerm?: (option: {
6
+ flags: string;
7
+ }) => string;
8
+ commandTerm?: (cmd: {
9
+ name: () => string;
10
+ }) => string;
11
+ }) => unknown;
12
+ }): void;
13
+ export declare function styleEnvBlock(value: string): string;
@@ -0,0 +1,38 @@
1
+ function wrap(start, end = '\x1b[0m') {
2
+ return (value) => `${start}${value}${end}`;
3
+ }
4
+ const ansi = {
5
+ reset: '\x1b[0m',
6
+ bold: wrap('\x1b[1m'),
7
+ dim: wrap('\x1b[2m'),
8
+ cyan: wrap('\x1b[36m'),
9
+ green: wrap('\x1b[32m'),
10
+ yellow: wrap('\x1b[33m'),
11
+ };
12
+ function isColorEnabled() {
13
+ if (!process.stdout.isTTY)
14
+ return false;
15
+ if (process.env.NO_COLOR)
16
+ return false;
17
+ return true;
18
+ }
19
+ export function styleTitle(value) {
20
+ if (!isColorEnabled())
21
+ return value;
22
+ return `${ansi.bold(ansi.cyan(value))}${ansi.reset}`;
23
+ }
24
+ export function configureCommanderHelp(program) {
25
+ if (!isColorEnabled())
26
+ return;
27
+ program.configureHelp({
28
+ sectionTitle: (title) => ansi.bold(ansi.cyan(title)),
29
+ optionTerm: (option) => ansi.yellow(option.flags),
30
+ commandTerm: (cmd) => ansi.green(cmd.name()),
31
+ });
32
+ }
33
+ export function styleEnvBlock(value) {
34
+ if (!isColorEnabled())
35
+ return value;
36
+ return `${ansi.dim(value)}${ansi.reset}`;
37
+ }
38
+ //# sourceMappingURL=helpStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpStyle.js","sourceRoot":"","sources":["../../src/cli/helpStyle.ts"],"names":[],"mappings":"AAEA,SAAS,IAAI,CAAC,KAAa,EAAE,GAAG,GAAG,SAAS;IAC1C,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE,CAAA;AAC5C,CAAC;AAED,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;IACrB,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACtB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;CACzB,CAAA;AAED,SAAS,cAAc;IACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IACtC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,KAAK,CAAA;IACnC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAMtC;IACC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAM;IAC7B,OAAO,CAAC,aAAa,CAAC;QACpB,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACjD,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KAC7C,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,KAAK,CAAA;IACnC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type PilotbotSkillRoots = {
2
+ roots: string[];
3
+ labels: Record<string, string>;
4
+ };
5
+ export declare function resolvePilotbotSkillRoots(): Promise<PilotbotSkillRoots>;
6
+ export declare function resolvePilotbotDefaultWorkspace(): Promise<string | null>;