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
@@ -1,58 +0,0 @@
1
- ---
2
- summary: 'Skill folder format, required files, allowed file types, limits.'
3
- read_when:
4
- - Publishing skills
5
- - Debugging publish/sync failures
6
- ---
7
-
8
- # Skill format
9
-
10
- ## On disk
11
-
12
- A skill is a folder.
13
-
14
- Required:
15
-
16
- - `SKILL.md` (or `skill.md`)
17
-
18
- Optional:
19
-
20
- - any supporting *text-based* files (see “Allowed files”)
21
- - `.pilothubignore` (ignore patterns for publish/sync)
22
- - `.gitignore` (also honored)
23
-
24
- Local install metadata (written by the CLI):
25
-
26
- - `<skill>/.pilothub/origin.json`
27
-
28
- Workdir install state (written by the CLI):
29
-
30
- - `<workdir>/.pilothub/lock.json`
31
-
32
- ## `SKILL.md`
33
-
34
- - Markdown with optional YAML frontmatter.
35
- - The server extracts metadata from frontmatter during publish.
36
- - `description` is used as the skill summary in the UI/search.
37
-
38
- ## Allowed files
39
-
40
- Only “text-based” files are accepted by publish.
41
-
42
- - Extension allowlist is in `packages/schema/src/textFiles.ts` (`TEXT_FILE_EXTENSIONS`).
43
- - Content types starting with `text/` are treated as text; plus a small allowlist (JSON/YAML/TOML/JS/TS/Markdown/SVG).
44
-
45
- Limits (server-side):
46
-
47
- - Total bundle size: 50MB.
48
- - Embedding text includes `SKILL.md` + up to ~40 non-`.md` files (best-effort cap).
49
-
50
- ## Slugs
51
-
52
- - Derived from folder name by default.
53
- - Must be lowercase and URL-safe: `^[a-z0-9][a-z0-9-]*$`.
54
-
55
- ## Versioning + tags
56
-
57
- - Each publish creates a new version (semver).
58
- - Tags are string pointers to a version; `latest` is commonly used.
@@ -1,37 +0,0 @@
1
- ---
2
- summary: 'Soul bundle format, required files, limits.'
3
- read_when:
4
- - Publishing souls
5
- - Debugging soul publish failures
6
- ---
7
-
8
- # Soul format
9
-
10
- ## On disk
11
-
12
- A soul is a single file:
13
-
14
- - `SOUL.md` (or `soul.md`)
15
-
16
- For now, onlycrabs.ai rejects any extra files.
17
-
18
- ## `SOUL.md`
19
-
20
- - Markdown with optional YAML frontmatter.
21
- - The server extracts metadata from frontmatter during publish.
22
- - `description` is used as the soul summary in the UI/search.
23
-
24
- ## Limits
25
-
26
- - Total bundle size: 50MB.
27
- - Embedding text includes `SOUL.md` only.
28
-
29
- ## Slugs
30
-
31
- - Derived from folder name by default.
32
- - Must be lowercase and URL-safe: `^[a-z0-9][a-z0-9-]*$`.
33
-
34
- ## Versioning + tags
35
-
36
- - Each publish creates a new version (semver).
37
- - Tags are string pointers to a version; `latest` is commonly used.
package/docs/spec.md DELETED
@@ -1,177 +0,0 @@
1
- ---
2
- summary: "PilotHub spec: skills registry, versioning, vector search, moderation"
3
- read_when:
4
- - Bootstrapping PilotHub
5
- - Implementing schema/auth/search/versioning
6
- - Reviewing API and upload/download flows
7
- ---
8
-
9
- # PilotHub — product + implementation spec (v1)
10
-
11
- ## Goals
12
- - onlycrabs.ai mode for sharing `SOUL.md` bundles (host-based entry point).
13
- - Minimal, fast SPA for browsing and publishing agent skills.
14
- - Skills stored in Convex (files + metadata + versions + stats).
15
- - GitHub OAuth login; GitHub App backs up skills to `pilotbot/skills`.
16
- - Vector-based search over skill text + metadata.
17
- - Versioning, tags (`latest` + user tags), changelog, rollback (tag movement).
18
- - Public read access; upload requires auth.
19
- - Moderation: badges + comment delete; audit everything.
20
-
21
- ## Non-goals (v1)
22
- - Paid features, private skills, or binary assets.
23
- - GitHub App sync beyond backups (future phase).
24
-
25
- ## Core objects
26
-
27
- ### User
28
- - `authId` (from Convex Auth provider)
29
- - `handle` (GitHub login)
30
- - `name`, `bio`
31
- - `avatarUrl` (GitHub, fallback gravatar)
32
- - `role`: `admin | moderator | user` (moderators can soft-delete and flag; admins can hard-delete + change owners)
33
- - `createdAt`, `updatedAt`
34
-
35
- ### Skill
36
- - `slug` (unique)
37
- - `displayName`
38
- - `ownerUserId`
39
- - `summary` (from SKILL.md frontmatter `description`)
40
- - `latestVersionId`
41
- - `latestTagVersionId` (for `latest` tag)
42
- - `tags` map: `{ tag -> versionId }`
43
- - `badges`: `{ redactionApproved?: { byUserId, at }, highlighted?: { byUserId, at }, official?: { byUserId, at }, deprecated?: { byUserId, at } }`
44
- - `official` marks admin-verified/official skills.
45
- - `deprecated` marks skills that should not be used for new integrations.
46
- - `moderationStatus`: `active | hidden | removed`
47
- - `moderationFlags`: `string[]` (automatic detection)
48
- - `moderationNotes`, `moderationReason`
49
- - `hiddenAt`, `hiddenBy`, `lastReviewedAt`, `reportCount`
50
- - `stats`: `{ downloads, stars, versions, comments }`
51
- - `createdAt`, `updatedAt`
52
-
53
- ### SkillVersion
54
- - `skillId`
55
- - `version` (semver string)
56
- - `tag` (string, optional; `latest` always maintained separately)
57
- - `changelog` (required)
58
- - `files`: list of file metadata
59
- - `path`, `size`, `storageId`, `sha256`
60
- - `parsed` (metadata extracted from SKILL.md)
61
- - `vectorDocId` (if using RAG component) OR `embeddingId`
62
- - `createdBy`, `createdAt`
63
- - `softDeletedAt` (nullable)
64
-
65
- ### Parsed Skill Metadata
66
- From SKILL.md frontmatter + AgentSkills + Pilotbot extensions:
67
- - `name`, `description`, `homepage`, `website`, `url`, `emoji`
68
- - `metadata.pilotbot`: `always`, `skillKey`, `primaryEnv`, `emoji`, `homepage`, `os`,
69
- `requires` (`bins`, `anyBins`, `env`, `config`), `install[]`, `nix` (`plugin`, `systems`),
70
- `config` (`requiredEnv`, `stateDirs`, `example`), `cliHelp` (string; `cli --help` output)
71
- - `metadata.pilotbot`: alias of `metadata.pilotbot` (preferred for nix-pilotbot plugin pointers)
72
- - Nix plugins are different from regular skills; they bundle the skill pack, the CLI binary, and config flags/requirements together.
73
- - `metadata` in frontmatter is YAML (object) preferred; legacy JSON-string accepted.
74
-
75
-
76
-
77
- ### Soul
78
- - `slug` (unique)
79
- - `displayName`
80
- - `ownerUserId`
81
- - `summary` (from SOUL.md frontmatter `description`)
82
- - `latestVersionId`
83
- - `tags` map: `{ tag -> versionId }`
84
- - `stats`: `{ downloads, stars, versions, comments }`
85
- - `status`: `active` only (soft-delete on version/comment only)
86
- - `createdAt`, `updatedAt`
87
-
88
- ### SoulVersion
89
- - `soulId`
90
- - `version` (semver string)
91
- - `tag` (string, optional; `latest` always maintained separately)
92
- - `changelog` (required)
93
- - `files`: list of file metadata (SOUL.md only)
94
- - `path`, `size`, `storageId`, `sha256`
95
- - `parsed` (metadata extracted from SOUL.md)
96
- - `vectorDocId` (if using RAG component) OR `embeddingId`
97
- - `createdBy`, `createdAt`
98
- - `softDeletedAt` (nullable)
99
-
100
- ### SoulComment
101
- - `soulId`, `userId`, `body`
102
- - `softDeletedAt`, `deletedBy`
103
- - `createdAt`
104
-
105
- ### SoulStar
106
- - `soulId`, `userId`, `createdAt`
107
-
108
- ### Comment
109
- - `skillId`, `userId`, `body`
110
- - `softDeletedAt`, `deletedBy`
111
- - `createdAt`
112
-
113
- ### Star
114
- - `skillId`, `userId`, `createdAt`
115
-
116
- ### AuditLog
117
- - `actorUserId`
118
- - `action` (enum: `badge.set`, `badge.unset`, `comment.delete`, `role.change`)
119
- - `targetType` / `targetId`
120
- - `metadata` (json)
121
- - `createdAt`
122
-
123
- ## Auth + roles
124
- - Convex Auth with GitHub OAuth App.
125
- - Default role `user`; bootstrap `steipete` to `admin` on first login.
126
- - Management console: moderators can hide/restore skills + mark duplicates; admins can change owners, approve badges, and hard-delete.
127
- - Role changes are admin-only and audited.
128
-
129
- ## Upload flow (50MB per version)
130
- 1) Client requests upload session.
131
- 2) Client uploads each file via Convex upload URLs (no binaries, text only).
132
- 3) Client submits metadata + file list + changelog + version + tags.
133
- 4) Server validates:
134
- - total size ≤ 50MB
135
- - file extensions/text content
136
- - SKILL.md exists and frontmatter parseable
137
- - version uniqueness
138
- 5) Server stores files + metadata, sets `latest` tag, updates stats.
139
-
140
- Soul upload flow: same as skills, but only `SOUL.md` is allowed in the bundle.
141
- Seed data lives in `convex/seed.ts` for local dev.
142
-
143
- ## Versioning + tags
144
- - Each upload is a new `SkillVersion`.
145
- - `latest` tag always points to most recent version unless user re-tags.
146
- - Rollback: move `latest` (and optionally other tags) to an older version.
147
- - Changelog is optional.
148
-
149
- ## Search
150
- - Vector search over: SKILL.md + other text files + metadata summary (souls index SOUL.md).
151
- - Convex embeddings + vector index.
152
- - Filters: tag, owner, `redactionApproved` only, min stars, updatedAt.
153
-
154
- ## Download API
155
- - JSON API for skill metadata + versions.
156
- - Download endpoint returns zip of a version (HTTP action).
157
- - Soft-delete versions; downloads remain for non-deleted versions only.
158
-
159
- ## UI (SPA)
160
- - Home: search + filters + trending/featured + “Highlighted” badge.
161
- - Skill detail: README render, files list, version history, tags, stats, badges.
162
- - Upload/edit: file picker + version + tag + changelog.
163
- - Account settings: name + delete account (soft delete).
164
- - Admin: user role management + badge approvals + audit log.
165
-
166
- ## Testing + quality
167
- - Vitest 4 with >=70% global coverage.
168
- - Lint: Biome + Oxlint (type-aware).
169
-
170
- ## Vercel
171
- - Env vars: Convex deployment URLs + GitHub OAuth client + OpenAI key (if used) + GitHub App backup credentials.
172
- - SPA feel: client-side transitions, prefetching, optimistic UI.
173
-
174
- ## Open questions (carry forward)
175
- - Embeddings provider key + rate limits.
176
- - Zip generation memory limits (optimize with streaming if needed).
177
- - GitHub App repo sync (phase 2).
package/docs/telemetry.md DELETED
@@ -1,91 +0,0 @@
1
- ---
2
- summary: 'Install telemetry collected via `pilothub sync` + opt-out.'
3
- read_when:
4
- - Working on telemetry / privacy controls
5
- - Questions about what data is collected
6
- ---
7
-
8
- # Telemetry
9
-
10
- PilotHub uses **minimal telemetry** to compute **install counts** (what’s actually in use) and to power better sorting/filtering.
11
- This is based on the CLI `pilothub sync` command.
12
-
13
- ## When telemetry is collected
14
-
15
- Telemetry is only sent when:
16
-
17
- - You are **logged in** in the CLI (we already require auth for sync/publish flows).
18
- - You run `pilothub sync`.
19
- - Telemetry is **not disabled** (see “How to disable” below).
20
-
21
- If you are not logged in, nothing is reported.
22
-
23
- ## What we collect
24
-
25
- On each `pilothub sync`, the CLI reports a **full snapshot** of what it found, grouped by scan root (“folder/root”).
26
-
27
- For each root we store:
28
-
29
- - `rootId`: a **SHA-256 hash** of the canonical root path (server never sees the raw path).
30
- - `label`: a human-readable label derived from the last two path segments (home paths are shown with `~`).
31
- - `firstSeenAt`, `lastSeenAt`, optional `expiredAt`.
32
-
33
- For each skill found under a root we store:
34
-
35
- - `skillId` (resolved by slug; only skills that exist in the registry are tracked).
36
- - `firstSeenAt`, `lastSeenAt`.
37
- - `lastVersion` (best-effort; currently the registry-matched version if known).
38
- - optional `removedAt` when a previously-reported install disappears from a root.
39
-
40
- ### What we do *not* collect
41
-
42
- - No raw absolute folder paths (only hashed `rootId` + a short display label).
43
- - No file contents.
44
- - No per-run logs, prompts, or other CLI output.
45
- - No tracking for skills that aren’t uploaded to the registry (unknown slugs are ignored).
46
-
47
- ## Install counts
48
-
49
- We maintain two counters per skill:
50
-
51
- - `installsCurrent`: unique users who currently have the skill installed in at least one active root.
52
- - `installsAllTime`: unique users who have ever reported the skill installed.
53
-
54
- ### Multiple roots
55
-
56
- If you sync from multiple folders, we treat each scan root independently. A skill is “currently installed” if it exists in **any** active root.
57
-
58
- ### Uninstall detection
59
-
60
- Because `sync` reports the full set per root:
61
-
62
- - If a skill disappears from a root on the next sync, we mark it removed for that root.
63
- - If the skill is removed from all of your roots, it no longer counts toward `installsCurrent`.
64
- - `installsAllTime` never decreases unless you delete telemetry (see below).
65
-
66
- ### Staleness (120 days)
67
-
68
- Roots that don’t report telemetry for **120 days** are marked stale and their installs stop counting toward `installsCurrent`.
69
- This is evaluated lazily (on the next telemetry report) to avoid background jobs.
70
-
71
- ## Transparency + user controls
72
-
73
- PilotHub provides a private “Installed” tab on your own profile:
74
-
75
- - Shows the exact roots + installed skills we store.
76
- - Includes a **JSON export** view.
77
- - Includes a **Delete telemetry** action to remove all stored telemetry for your account.
78
-
79
- Everyone else only sees **aggregated install counters**; no one else can see your roots/folders.
80
-
81
- Deleting your account also deletes your telemetry data.
82
-
83
- ## How to disable telemetry
84
-
85
- Set the environment variable:
86
-
87
- ```bash
88
- export PILOTHUB_DISABLE_TELEMETRY=1
89
- ```
90
-
91
- With this set, the CLI will not send telemetry during `pilothub sync`.
@@ -1,49 +0,0 @@
1
- ---
2
- summary: 'Common setup/runtime issues (CLI + backend) and fixes.'
3
- read_when:
4
- - Something is broken and you need a fix-fast checklist
5
- ---
6
-
7
- # Troubleshooting
8
-
9
- ## `pilothub login` opens browser but never completes
10
-
11
- - Ensure your browser can reach `http://127.0.0.1:<port>/callback` (local firewalls/VPNs can interfere).
12
- - Use headless mode:
13
- - create a token in the web UI (Settings → API tokens)
14
- - `pilothub login --token clh_...`
15
-
16
- ## `whoami` / `publish` returns `Unauthorized` (401)
17
-
18
- - Token missing or revoked: check your config file (`PILOTHUB_CONFIG_PATH` override?).
19
- - Ensure requests include `Authorization: Bearer ...` (CLI does this automatically).
20
-
21
- ## `publish` fails with `OPENAI_API_KEY is not configured`
22
-
23
- - Set `OPENAI_API_KEY` in the Convex environment (not only locally).
24
- - Re-run `bunx convex dev` / `bunx convex deploy` after setting env.
25
-
26
- ## `sync` says “No skills found”
27
-
28
- - `sync` looks for folders containing `SKILL.md` (or `skill.md`).
29
- - It scans:
30
- - workdir first
31
- - then fallback roots (legacy `~/pilotbot/skills`, `~/pilotbot/skills`, etc.)
32
- - Provide explicit roots:
33
-
34
- ```bash
35
- pilothub sync --root /path/to/skills
36
- ```
37
-
38
- ## `update` refuses due to “local changes (no match)”
39
-
40
- - Your local files don’t match any published fingerprint.
41
- - Options:
42
- - keep local edits; skip updating
43
- - overwrite: `pilothub update <slug> --force`
44
- - publish as fork: copy to new folder/slug then `pilothub publish ... --fork-of upstream@version`
45
-
46
- ## `GET /api/*` works locally but not on Vercel
47
-
48
- - Check `vercel.json` rewrite destination points at your Convex site URL.
49
- - Ensure `VITE_CONVEX_SITE_URL` and `CONVEX_SITE_URL` match your deployment.
package/docs/webhook.md DELETED
@@ -1,51 +0,0 @@
1
- ---
2
- summary: 'Discord webhook events/payloads for skill publish + highlight.'
3
- read_when:
4
- - Working on webhooks/integrations
5
- ---
6
-
7
- # Webhooks (Discord)
8
-
9
- PilotHub can post Discord embeds when skills are published or highlighted.
10
-
11
- ## Setup
12
-
13
- Set the webhook URL in the Convex environment:
14
-
15
- - `DISCORD_WEBHOOK_URL` (required): Discord webhook URL.
16
- - `DISCORD_WEBHOOK_HIGHLIGHTED_ONLY` (optional): `true` to only send for highlighted skills.
17
- - `SITE_URL` (optional): Base site URL for links (default `https://pilothub.com`).
18
-
19
- ## Events
20
-
21
- - `skill.publish`: fires on every publish (new or updated version).
22
- - `skill.highlighted`: fires when a skill is newly highlighted.
23
-
24
- ### Highlight-only filter
25
-
26
- When `DISCORD_WEBHOOK_HIGHLIGHTED_ONLY=true`:
27
-
28
- - `skill.publish` only sends if the skill is highlighted.
29
- - `skill.highlighted` always sends.
30
-
31
- ## Payload (Discord)
32
-
33
- Discord receives a JSON payload with a single embed:
34
-
35
- ```json
36
- {
37
- "embeds": [
38
- {
39
- "title": "Demo Skill",
40
- "description": "Nice skill",
41
- "url": "https://pilothub.com/owner/demo-skill",
42
- "fields": [
43
- { "name": "Version", "value": "v1.2.3", "inline": true },
44
- { "name": "Owner", "value": "@owner", "inline": true },
45
- { "name": "Tags", "value": "latest, discord", "inline": false }
46
- ],
47
- "footer": { "text": "PilotHub" }
48
- }
49
- ]
50
- }
51
- ```
@@ -1,49 +0,0 @@
1
- import { expect, test } from '@playwright/test'
2
-
3
- const navLabels = ['Skills', 'Upload', 'Import', 'Search']
4
-
5
- test('skills loads without error', async ({ page }) => {
6
- await page.goto('/skills', { waitUntil: 'domcontentloaded' })
7
- await expect(page.locator('text=Something went wrong!')).toHaveCount(0)
8
- await expect(page.locator('h1', { hasText: 'Skills' })).toBeVisible()
9
- })
10
-
11
- test('souls loads without error', async ({ page }) => {
12
- await page.goto('/souls', { waitUntil: 'domcontentloaded' })
13
- await expect(page.locator('text=Something went wrong!')).toHaveCount(0)
14
- await expect(page.locator('h1', { hasText: 'Souls' })).toBeVisible()
15
- })
16
-
17
- test('header menu routes render', async ({ page }) => {
18
- await page.goto('/', { waitUntil: 'domcontentloaded' })
19
-
20
- for (const label of navLabels) {
21
- const link = page.getByRole('link', { name: label }).first()
22
- await expect(link).toBeVisible()
23
- await link.click()
24
-
25
- if (label === 'Skills') {
26
- await expect(page).toHaveURL(/\/skills/)
27
- await expect(page.locator('h1', { hasText: 'Skills' })).toBeVisible()
28
- }
29
-
30
- if (label === 'Upload') {
31
- await expect(page).toHaveURL(/\/upload/)
32
- const heading = page.locator('h1.section-title', { hasText: /^Publish a /i })
33
- const signInCard = page.locator('text=Sign in to upload')
34
- await expect(heading.or(signInCard)).toBeVisible()
35
- }
36
-
37
- if (label === 'Import') {
38
- await expect(page).toHaveURL(/\/import/)
39
- const heading = page.getByRole('heading', { name: 'Import from GitHub' })
40
- const signInCard = page.locator('text=Sign in to import and publish skills.')
41
- await expect(heading.or(signInCard)).toBeVisible()
42
- }
43
-
44
- if (label === 'Search') {
45
- await expect(page).toHaveURL(/\/?(\?|$)/)
46
- await expect(page.locator('h1', { hasText: 'PilotHub' })).toBeVisible()
47
- }
48
- }
49
- })