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
package/docs/diffing.md DELETED
@@ -1,84 +0,0 @@
1
- ---
2
- summary: "Skill version diffing mode (Monaco-backed)"
3
- read_when:
4
- - Implementing skill diff UI
5
- - Adding version comparisons
6
- ---
7
-
8
- # Diffing mode
9
-
10
- ## Goals
11
- - Compare any file between two versions.
12
- - Default compare: `latest` vs `previous` (SemVer precedence).
13
- - UX feels native to PilotHub (theme + typography + motion).
14
- - Inline or side-by-side toggle.
15
- - Public access.
16
-
17
- ## UX
18
- - Diff card on skill detail page.
19
- - Two selectors: Left/Right.
20
- - Items: version strings, plus tags (e.g. `latest`), plus `previous`.
21
- - Default: Left = `previous`, Right = `latest`.
22
- - File list with status: added / removed / changed / same.
23
- - Default file: `SKILL.md` if present; else first changed file.
24
- - Toggle: Inline vs Side-by-side.
25
- - Show size guard message when file > 200KB.
26
-
27
- ## SemVer ordering
28
- - Use SemVer precedence to sort versions.
29
- - `previous` = immediate predecessor of `latest` by SemVer.
30
- - If `latest` missing or only one version:
31
- - Disable `previous` and show empty-state copy.
32
-
33
- ## Data sources
34
- - Versions: `api.skills.listVersions` (all, not just latest 10).
35
- - Tags: `skill.tags` map.
36
- - File list: `version.files` with `path`, `sha256`, `size`.
37
-
38
- ## API
39
- Add action:
40
- - `skills.getFileText({ versionId, path }) -> { text, size, sha256 }`
41
- - Validate version exists + file path exists in version.
42
- - Enforce size <= 200KB (both in action and client).
43
- - Use `fetchText` from `convex/lib/skillPublish.ts`.
44
-
45
- Optional helper action:
46
- - `skills.getVersionFiles({ versionId }) -> files[]`
47
- - If we want lightweight fetch without full version object.
48
-
49
- ## Client flow
50
- 1. Fetch versions + tags.
51
- 2. Resolve default compare pair:
52
- - Right = tag `latest` if present else highest SemVer.
53
- - Left = `previous` (SemVer predecessor).
54
- 3. Build file union by path.
55
- 4. For selected file:
56
- - Fetch left/right text (guard by size).
57
- - Feed into Monaco diff editor.
58
-
59
- ## Monaco theming
60
- - Define `pilothub-light` / `pilothub-dark` via `monaco.editor.defineTheme`.
61
- - Derive colors from CSS variables on `document.documentElement`:
62
- - `--surface`, `--surface-muted`, `--ink`, `--ink-soft`, `--line`, `--accent`.
63
- - Apply theme on load + when theme changes (`data-theme`).
64
- - Match font: `var(--font-mono)`.
65
- - Set diff options:
66
- - `renderSideBySide` toggle
67
- - `diffAlgorithm: 'advanced'`
68
- - `renderSideBySideInlineBreakpoint` for mobile
69
- - `wordWrap: 'on'`
70
-
71
- ## Edge cases
72
- - File removed/added: show empty buffer on missing side + label.
73
- - Non-text file should not exist (upload rejects), but still guard.
74
- - Large file: show size warning + disable fetch.
75
- - Missing version: show error state.
76
-
77
- ## Perf
78
- - Cache file text per version+path in client state.
79
- - Debounce selector changes (100-200ms).
80
- - Limit concurrent fetches to 2.
81
-
82
- ## Tests
83
- - Unit: SemVer ordering + `previous` selection.
84
- - Component: default selectors, tag inclusion, size guard.
@@ -1,171 +0,0 @@
1
- ---
2
- summary: 'Feature spec: import a skill from a public GitHub URL (auto-detect SKILL.md, selective file upload, provenance).'
3
- read_when:
4
- - Adding GitHub import (web + API)
5
- - Reviewing safety limits (SSRF/zip-bombs)
6
- - Implementing provenance + canonical-claim flows
7
- ---
8
-
9
- # GitHub import (public repos)
10
-
11
- Goal: paste a GitHub URL → auto-detect skill → preview files → publish (selective) → persist provenance.
12
-
13
- Non-goal (v1): private repos (no OAuth/PAT support).
14
-
15
- Related:
16
- - `docs/skill-format.md` (what counts as a skill; text-only limits)
17
- - `docs/api.md` / `docs/http-api.md` (REST patterns + auth)
18
-
19
- ## UX
20
-
21
- Upload page: “Import from GitHub” mode.
22
-
23
- Flow:
24
- 1) URL input
25
- 2) Detect skill candidates (SKILL.md)
26
- 3) If multiple candidates: choose one
27
- 4) File picker: check/uncheck; smart-select referenced files
28
- 5) Confirm slug/name/version/tags
29
- 6) Import → publish
30
-
31
- ## Accepted URLs
32
-
33
- Allowlist: `https://github.com/...` only.
34
-
35
- Supported shapes:
36
- - Repo root: `https://github.com/<owner>/<repo>`
37
- - Tree path: `https://github.com/<owner>/<repo>/tree/<ref>/<path>`
38
- - Blob path (file): `https://github.com/<owner>/<repo>/blob/<ref>/<path>`
39
-
40
- Normalization:
41
- - Strip query/hash for fetch.
42
- - From `blob/.../SKILL.md` derive `path` as parent folder.
43
- - If `ref` missing: use `HEAD`.
44
-
45
- Reject:
46
- - Non-GitHub hosts.
47
- - Unknown URL patterns.
48
- - Paths containing `..` after normalization.
49
-
50
- ## Fetch strategy (public)
51
-
52
- Download archive:
53
- - `https://github.com/<owner>/<repo>/archive/<ref>.zip`
54
- - Follow redirects. Final redirect usually pins a commit via `codeload.github.com/.../zip/<sha-or-branch>`.
55
-
56
- Unzip server-side (Node or Convex node action). Scan for skill candidates.
57
-
58
- Skill candidate definition:
59
- - Any folder containing `SKILL.md` or `skill.md` (also accept `skills.md` for compatibility).
60
- - Treat repo root as a folder too.
61
-
62
- Multiple skills:
63
- - Return candidate list: `{ path, frontmatter.name, frontmatter.description }`.
64
- - User chooses one.
65
-
66
- ## Smart file selection
67
-
68
- Defaults:
69
- - Always select `SKILL.md` (or chosen readme file).
70
- - Prefer selecting only within chosen skill folder; allow “include out-of-folder refs” if explicitly toggled.
71
-
72
- Referenced file expansion:
73
- - Parse Markdown links/images from selected `.md` files:
74
- - `[](<rel>)`, `![](<rel>)`, `<rel>` only when relative.
75
- - Ignore `http(s):`, `mailto:`, `#anchors`.
76
- - Strip query/hash from relative targets.
77
- - Resolve against the current file’s directory.
78
- - Normalize, reject escapes (`..`).
79
- - Add referenced file if present in archive and is text-allowed.
80
- - Recurse for newly added `.md` files.
81
-
82
- Hard caps:
83
- - Max recursion depth (e.g. 4).
84
- - Max referenced additions (e.g. 200).
85
-
86
- UI affordances:
87
- - “Select referenced”
88
- - “Select all text”
89
- - “Clear”
90
- - Search/filter by path
91
-
92
- ## Publish behavior
93
-
94
- Server publishes using existing pipeline:
95
- - Text-only enforced (see `docs/skill-format.md`).
96
- - Total ≤ 50MB (selected set).
97
- - Must include `SKILL.md` (or accepted variant).
98
-
99
- Suggested defaults (UI):
100
- - `displayName`: frontmatter `name` else folder basename → title case.
101
- - `slug`: sanitize folder basename; if collision, suffix (`-2`, `-3`, …).
102
- - `version`: if new skill → `0.1.0`; if updating own existing skill → bump patch.
103
- - `tags`: default `latest`.
104
-
105
- ## Provenance (persist source)
106
-
107
- Persist on each published version (server-side injection; no mutation of imported files):
108
- - Store in `skillVersions.parsed.metadata.source`:
109
-
110
- Example:
111
- ```json
112
- {
113
- "kind": "github",
114
- "url": "https://github.com/visionik/ouracli",
115
- "repo": "visionik/ouracli",
116
- "ref": "HEAD",
117
- "commit": "66ac8fb266b7c5ff6519431862be6a375bbfb883",
118
- "path": "",
119
- "importedAt": 1767930000000
120
- }
121
- ```
122
-
123
- Why `parsed.metadata`:
124
- - Already optional and stored with each version.
125
- - No schema churn for v1.
126
-
127
- Future: canonical-claim
128
- - “claim canonical” can key off `{ kind:'github', repo, path }`.
129
- - Prefer commit-pinned provenance for auditability; allow UI to show “Imported from …”.
130
-
131
- ## API sketch (internal actions)
132
-
133
- Two-step (recommended):
134
- - `previewGitHubImport(url)` → `{ commit, candidates:[...], files:[...], defaults:{...} }`
135
- - `importGitHubSkill({ url, commit, candidatePath, selectedPaths, slug, displayName, version, tags })`
136
-
137
- Notes:
138
- - `importGitHubSkill` should re-fetch by pinned `commit` (not floating branch), to avoid TOCTOU.
139
- - Validate `selectedPaths` subset of fetched archive manifest.
140
-
141
- ## Security / abuse controls
142
-
143
- SSRF:
144
- - Only `github.com` (+ `codeload.github.com` during redirect follow).
145
- - No arbitrary redirects to other hosts.
146
-
147
- Zip safety:
148
- - Max compressed bytes (from `Content-Length` if present; else streaming cap).
149
- - Max uncompressed total bytes.
150
- - Max file count.
151
- - Max single file size.
152
- - Reject symlinks; reject absolute paths; reject `..` segments.
153
-
154
- Rate limits:
155
- - Tie to existing write limits (import == publish).
156
- - Cache preview results briefly (e.g. 60s) keyed by `{repo, commit}`.
157
-
158
- Error UX:
159
- - “No SKILL.md found.”
160
- - “Multiple skills found; pick one.”
161
- - “Repo too large / too many files.”
162
- - “Selected files exceed 50MB.”
163
-
164
- ## Manual test checklist
165
-
166
- - Repo root skill (`SKILL.md` at root).
167
- - Nested skill (`skills/foo/SKILL.md`).
168
- - Multi-skill repo (two SKILL.md).
169
- - SKILL.md references `docs/usage.md` + images; smart-select picks `.md` and referenced text files; ignores external links.
170
- - Huge repo → clean “too large” error.
171
- - Redirect pinning → import stores commit sha in provenance.
package/docs/http-api.md DELETED
@@ -1,187 +0,0 @@
1
- ---
2
- summary: 'HTTP API reference (public + CLI endpoints + auth).'
3
- read_when:
4
- - Adding/changing endpoints
5
- - Debugging CLI ↔ registry requests
6
- ---
7
-
8
- # HTTP API
9
-
10
- Base URL: `https://pilothub.com` (default).
11
-
12
- All v1 paths are under `/api/v1/...` and implemented by Convex HTTP routes (`convex/http.ts`).
13
- Legacy `/api/...` and `/api/cli/...` remain for compatibility (see `DEPRECATIONS.md`).
14
- OpenAPI: `/api/v1/openapi.json`.
15
-
16
- ## Rate limits
17
-
18
- Enforced per IP + per API key:
19
-
20
- - Read: 120/min per IP, 600/min per key
21
- - Write: 30/min per IP, 120/min per key
22
-
23
- Headers:
24
-
25
- - `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, `Retry-After` (when limited)
26
-
27
- ## Public endpoints (no auth)
28
-
29
- ### `GET /api/v1/search`
30
-
31
- Query params:
32
-
33
- - `q` (required): query string
34
- - `limit` (optional): integer
35
- - `highlightedOnly` (optional): `true` to filter to highlighted skills
36
-
37
- Response:
38
-
39
- ```json
40
- { "results": [{ "score": 0.123, "slug": "gifgrep", "displayName": "GifGrep", "summary": "…", "version": "1.2.3", "updatedAt": 1730000000000 }] }
41
- ```
42
-
43
- ### `GET /api/v1/skills`
44
-
45
- Query params:
46
-
47
- - `limit` (optional): integer (1–200)
48
- - `cursor` (optional): pagination cursor (only for `sort=updated`)
49
- - `sort` (optional): `updated` (default), `downloads`, `stars` (alias: `rating`), `installsCurrent` (alias: `installs`), `installsAllTime`, `trending`
50
-
51
- Notes:
52
-
53
- - `trending` ranks by installs in the last 7 days (telemetry-based).
54
-
55
- Response:
56
-
57
- ```json
58
- { "items": [{ "slug": "gifgrep", "displayName": "GifGrep", "summary": "…", "tags": { "latest": "1.2.3" }, "stats": {}, "createdAt": 0, "updatedAt": 0, "latestVersion": { "version": "1.2.3", "createdAt": 0, "changelog": "…" } }], "nextCursor": null }
59
- ```
60
-
61
- ### `GET /api/v1/skills/{slug}`
62
-
63
- Response:
64
-
65
- ```json
66
- { "skill": { "slug": "gifgrep", "displayName": "GifGrep", "summary": "…", "tags": { "latest": "1.2.3" }, "stats": {}, "createdAt": 0, "updatedAt": 0 }, "latestVersion": { "version": "1.2.3", "createdAt": 0, "changelog": "…" }, "owner": { "handle": "steipete", "displayName": "Peter", "image": null } }
67
- ```
68
-
69
- ### `GET /api/v1/skills/{slug}/versions`
70
-
71
- Query params:
72
-
73
- - `limit` (optional): integer
74
- - `cursor` (optional): pagination cursor
75
-
76
- ### `GET /api/v1/skills/{slug}/versions/{version}`
77
-
78
- Returns version metadata + files list.
79
-
80
- ### `GET /api/v1/skills/{slug}/file`
81
-
82
- Returns raw text content.
83
-
84
- Query params:
85
-
86
- - `path` (required)
87
- - `version` (optional)
88
- - `tag` (optional)
89
-
90
- Notes:
91
-
92
- - Defaults to latest version.
93
- - File size limit: 200KB.
94
-
95
- ### `GET /api/v1/resolve`
96
-
97
- Used by the CLI to map a local fingerprint to a known version.
98
-
99
- Query params:
100
-
101
- - `slug` (required)
102
- - `hash` (required): 64-char hex sha256 of the bundle fingerprint
103
-
104
- Response:
105
-
106
- ```json
107
- { "slug": "gifgrep", "match": { "version": "1.2.2" }, "latestVersion": { "version": "1.2.3" } }
108
- ```
109
-
110
- ### `GET /api/v1/download`
111
-
112
- Downloads a zip of a skill version.
113
-
114
- Query params:
115
-
116
- - `slug` (required)
117
- - `version` (optional): semver string
118
- - `tag` (optional): tag name (e.g. `latest`)
119
-
120
- Notes:
121
-
122
- - If neither `version` nor `tag` is provided, the latest version is used.
123
- - Soft-deleted versions return `410`.
124
-
125
- ## Auth endpoints (Bearer token)
126
-
127
- All endpoints require:
128
-
129
- ```
130
- Authorization: Bearer clh_...
131
- ```
132
-
133
- ### `GET /api/v1/whoami`
134
-
135
- Validates token and returns the user handle.
136
-
137
- ### `POST /api/v1/skills`
138
-
139
- Publishes a new version.
140
-
141
- - Preferred: `multipart/form-data` with `payload` JSON + `files[]` blobs.
142
- - JSON body with `files` (storageId-based) is also accepted.
143
-
144
- ### `DELETE /api/v1/skills/{slug}` / `POST /api/v1/skills/{slug}/undelete`
145
-
146
- Soft-delete / restore a skill (owner/admin only).
147
-
148
- ### `POST /api/v1/stars/{slug}` / `DELETE /api/v1/stars/{slug}`
149
-
150
- Add/remove a star (highlights). Both endpoints are idempotent.
151
-
152
- Responses:
153
-
154
- ```json
155
- { "ok": true, "starred": true, "alreadyStarred": false }
156
- ```
157
-
158
- ```json
159
- { "ok": true, "unstarred": true, "alreadyUnstarred": false }
160
- ```
161
-
162
- ## Legacy CLI endpoints (deprecated)
163
-
164
- Still supported for older CLI versions:
165
-
166
- - `GET /api/cli/whoami`
167
- - `POST /api/cli/upload-url`
168
- - `POST /api/cli/publish`
169
- - `POST /api/cli/telemetry/sync`
170
- - `POST /api/cli/skill/delete`
171
- - `POST /api/cli/skill/undelete`
172
-
173
- See `DEPRECATIONS.md` for removal plan.
174
-
175
- ## Registry discovery (`/.well-known/pilothub.json`)
176
-
177
- The CLI can discover registry/auth settings from the site:
178
-
179
- - `/.well-known/pilothub.json` (JSON)
180
-
181
- Schema:
182
-
183
- ```json
184
- { "apiBase": "https://pilothub.com", "authBase": "https://pilothub.com", "minCliVersion": "0.0.5" }
185
- ```
186
-
187
- If you self-host, serve this file (or set `PILOTHUB_REGISTRY` explicitly).
@@ -1,64 +0,0 @@
1
- ---
2
- summary: 'Copy/paste CLI smoke checklist for local verification.'
3
- read_when:
4
- - Pre-merge validation
5
- - Reproducing a reported CLI bug
6
- ---
7
-
8
- # Manual testing (CLI)
9
-
10
- ## Setup
11
- - Ensure logged in: `bun pilothub whoami` (or `bun pilothub login`).
12
- - Optional: set env
13
- - `PILOTHUB_SITE=https://pilothub.com`
14
- - `PILOTHUB_REGISTRY=https://pilothub.com`
15
-
16
- ## Smoke
17
- - `bun pilothub --help`
18
- - `bun pilothub --cli-version`
19
- - `bun pilothub whoami`
20
-
21
- ## Search
22
- - `bun pilothub search gif --limit 5`
23
-
24
- ## Install / list / update
25
- - `mkdir -p /tmp/pilothub-manual && cd /tmp/pilothub-manual`
26
- - `bunx pilothub@beta install gifgrep --force`
27
- - `bunx pilothub@beta list`
28
- - `bunx pilothub@beta update gifgrep --force`
29
-
30
- ## Publish (changelog optional)
31
- - `mkdir -p /tmp/pilothub-skill-demo/SKILL && cd /tmp/pilothub-skill-demo`
32
- - Create files:
33
- - `SKILL.md`
34
- - `notes.md`
35
- - Publish:
36
- - `bun pilothub publish . --slug pilothub-manual-<ts> --name "Manual <ts>" --version 1.0.0 --tags latest`
37
- - Publish update with empty changelog:
38
- - `bun pilothub publish . --slug pilothub-manual-<ts> --name "Manual <ts>" --version 1.0.1 --tags latest`
39
-
40
- ## Delete / undelete (owner/admin)
41
- - `bun pilothub delete pilothub-manual-<ts> --yes`
42
- - Verify hidden:
43
- - `curl -i "https://pilothub.com/api/v1/skills/pilothub-manual-<ts>"`
44
- - Restore:
45
- - `bun pilothub undelete pilothub-manual-<ts> --yes`
46
- - Cleanup:
47
- - `bun pilothub delete pilothub-manual-<ts> --yes`
48
-
49
- ## Sync
50
- - `bun pilothub sync --dry-run --all`
51
-
52
- ## Playwright (menu smoke)
53
-
54
- Run against prod:
55
-
56
- ```
57
- PLAYWRIGHT_BASE_URL=https://pilothub.com bun run test:pw
58
- ```
59
-
60
- Run against a local preview server:
61
-
62
- ```
63
- bun run test:e2e:local
64
- ```
package/docs/mintlify.md DELETED
@@ -1,43 +0,0 @@
1
- ---
2
- summary: 'Mintlify setup notes for publishing docs/.'
3
- read_when:
4
- - Setting up docs site
5
- ---
6
-
7
- # Mintlify
8
-
9
- Goal: publish `docs/` as a browsable docs site (nice UX for OSS users).
10
-
11
- This repo does **not** include Mintlify config yet (`mint.json` missing).
12
-
13
- ## Minimal setup
14
-
15
- 1) Install Mintlify CLI (per Mintlify docs).
16
-
17
- 2) Add a `mint.json` at repo root that points to `docs/` pages.
18
-
19
- Example (starter):
20
-
21
- ```json
22
- {
23
- "name": "PilotHub",
24
- "logo": "public/logo.svg",
25
- "navigation": [
26
- { "group": "Start", "pages": ["docs/README", "docs/quickstart"] },
27
- { "group": "Concepts", "pages": ["docs/architecture", "docs/skill-format", "docs/telemetry"] },
28
- { "group": "Reference", "pages": ["docs/cli", "docs/http-api", "docs/auth", "docs/deploy"] }
29
- ]
30
- }
31
- ```
32
-
33
- Notes:
34
-
35
- - Mintlify usually wants page paths without extension; keep files as `.md`.
36
- - If you prefer Mintlify conventions, rename to `.mdx` later (optional).
37
-
38
- ## Recommended “docs UX” additions
39
-
40
- - Add an “Overview” page (use `docs/README.md`).
41
- - Keep “Quickstart” copy/paste friendly.
42
- - Provide CLI + HTTP API reference pages (done here).
43
- - Add a Troubleshooting page for common setup failures.
@@ -1,120 +0,0 @@
1
- ---
2
- summary: 'Local setup + CLI smoke: login, search, install, publish, sync.'
3
- read_when:
4
- - First run / local dev setup
5
- - Verifying end-to-end flows
6
- ---
7
-
8
- # Quickstart
9
-
10
- ## 0) Prereqs
11
-
12
- - Bun
13
- - Convex CLI (`bunx convex ...`)
14
- - GitHub OAuth App (for login)
15
- - OpenAI key (for embeddings/search)
16
-
17
- ## 1) Local dev (web + Convex)
18
-
19
- ```bash
20
- bun install
21
- cp .env.local.example .env.local
22
-
23
- # terminal A
24
- bun run dev
25
-
26
- # terminal B
27
- bunx convex dev
28
- ```
29
-
30
- ## 2) Auth setup (GitHub OAuth + Convex Auth keys)
31
-
32
- Fill in `.env.local`:
33
-
34
- - `AUTH_GITHUB_ID`
35
- - `AUTH_GITHUB_SECRET`
36
- - `VITE_CONVEX_URL`
37
- - `VITE_CONVEX_SITE_URL`
38
- - `CONVEX_SITE_URL` (same as `VITE_CONVEX_SITE_URL`)
39
- - `OPENAI_API_KEY`
40
-
41
- Generate Convex Auth keys for your deployment:
42
-
43
- ```bash
44
- bunx auth --deployment-name <deployment> --web-server-url http://localhost:3000
45
- ```
46
-
47
- Then paste the printed `JWT_PRIVATE_KEY` + `JWKS` into `.env.local` (and ensure the deployment got them too).
48
-
49
- ## 3) CLI: login + basic commands
50
-
51
- From this repo:
52
-
53
- ```bash
54
- bun pilothub --help
55
- bun pilothub login
56
- bun pilothub whoami
57
- bun pilothub search gif --limit 5
58
- ```
59
-
60
- Install a skill into `./skills/<slug>` (if Pilotbot is configured, installs into that workspace instead):
61
-
62
- ```bash
63
- bun pilothub install <slug>
64
- bun pilothub list
65
- ```
66
-
67
- You can also install into any folder:
68
-
69
- ```bash
70
- bun pilothub install <slug> --workdir /tmp/pilothub-demo --dir skills
71
- ```
72
-
73
- Update:
74
-
75
- ```bash
76
- bun pilothub update --all
77
- ```
78
-
79
- ## 4) Publish a skill
80
-
81
- Create a folder containing `SKILL.md` (required) plus any supporting text files:
82
-
83
- ```bash
84
- mkdir -p /tmp/pilothub-skill-demo && cd /tmp/pilothub-skill-demo
85
- cat > SKILL.md <<'EOF'
86
- ---
87
- name: Demo Skill
88
- description: Demo skill for local testing
89
- ---
90
-
91
- # Demo Skill
92
-
93
- Hello.
94
- EOF
95
- ```
96
-
97
- Publish:
98
-
99
- ```bash
100
- bun pilothub publish . \
101
- --slug pilothub-demo-$(date +%s) \
102
- --name "Demo $(date +%s)" \
103
- --version 1.0.0 \
104
- --tags latest \
105
- --changelog "Initial release"
106
- ```
107
-
108
- ## 5) Sync local skills (auto-publish new/changed)
109
-
110
- `sync` scans for local skill folders and publishes the ones that aren’t “synced” yet.
111
-
112
- ```bash
113
- bun pilothub sync
114
- ```
115
-
116
- Dry run + non-interactive:
117
-
118
- ```bash
119
- bun pilothub sync --all --dry-run --no-input
120
- ```