primitive-admin 1.1.0-alpha.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +523 -109
  2. package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +372 -21
  5. package/dist/bin/primitive.js.map +1 -1
  6. package/dist/src/commands/admins.d.ts +2 -0
  7. package/dist/src/commands/admins.js +136 -30
  8. package/dist/src/commands/admins.js.map +1 -1
  9. package/dist/src/commands/analytics.d.ts +2 -0
  10. package/dist/src/commands/analytics.js +713 -55
  11. package/dist/src/commands/analytics.js.map +1 -1
  12. package/dist/src/commands/apps.d.ts +2 -0
  13. package/dist/src/commands/apps.js +65 -100
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth-sessions.d.ts +7 -0
  16. package/dist/src/commands/auth-sessions.js +144 -0
  17. package/dist/src/commands/auth-sessions.js.map +1 -0
  18. package/dist/src/commands/auth.d.ts +2 -0
  19. package/dist/src/commands/auth.js +238 -108
  20. package/dist/src/commands/auth.js.map +1 -1
  21. package/dist/src/commands/blob-buckets.d.ts +2 -0
  22. package/dist/src/commands/blob-buckets.js +331 -0
  23. package/dist/src/commands/blob-buckets.js.map +1 -0
  24. package/dist/src/commands/catalog.d.ts +2 -0
  25. package/dist/src/commands/catalog.js +63 -48
  26. package/dist/src/commands/catalog.js.map +1 -1
  27. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  28. package/dist/src/commands/collection-type-configs.js +85 -0
  29. package/dist/src/commands/collection-type-configs.js.map +1 -0
  30. package/dist/src/commands/collections.d.ts +2 -0
  31. package/dist/src/commands/collections.js +1282 -0
  32. package/dist/src/commands/collections.js.map +1 -0
  33. package/dist/src/commands/comparisons.d.ts +2 -0
  34. package/dist/src/commands/comparisons.js +6 -6
  35. package/dist/src/commands/comparisons.js.map +1 -1
  36. package/dist/src/commands/config.d.ts +46 -0
  37. package/dist/src/commands/config.js +465 -0
  38. package/dist/src/commands/config.js.map +1 -0
  39. package/dist/src/commands/connections.d.ts +2 -0
  40. package/dist/src/commands/connections.js +99 -0
  41. package/dist/src/commands/connections.js.map +1 -0
  42. package/dist/src/commands/cron-triggers.d.ts +2 -0
  43. package/dist/src/commands/cron-triggers.js +266 -0
  44. package/dist/src/commands/cron-triggers.js.map +1 -0
  45. package/dist/src/commands/database-type-configs.d.ts +2 -0
  46. package/dist/src/commands/database-type-configs.js +164 -0
  47. package/dist/src/commands/database-type-configs.js.map +1 -0
  48. package/dist/src/commands/database-types.d.ts +2 -0
  49. package/dist/src/commands/database-types.js +471 -0
  50. package/dist/src/commands/database-types.js.map +1 -0
  51. package/dist/src/commands/databases.d.ts +65 -0
  52. package/dist/src/commands/databases.js +1887 -243
  53. package/dist/src/commands/databases.js.map +1 -1
  54. package/dist/src/commands/documents.d.ts +60 -0
  55. package/dist/src/commands/documents.js +2888 -22
  56. package/dist/src/commands/documents.js.map +1 -1
  57. package/dist/src/commands/email-templates.d.ts +2 -0
  58. package/dist/src/commands/email-templates.js +175 -0
  59. package/dist/src/commands/email-templates.js.map +1 -0
  60. package/dist/src/commands/env.d.ts +23 -0
  61. package/dist/src/commands/env.js +395 -0
  62. package/dist/src/commands/env.js.map +1 -0
  63. package/dist/src/commands/feature-flags.d.ts +14 -0
  64. package/dist/src/commands/feature-flags.js +117 -0
  65. package/dist/src/commands/feature-flags.js.map +1 -0
  66. package/dist/src/commands/functions.d.ts +20 -0
  67. package/dist/src/commands/functions.js +1630 -0
  68. package/dist/src/commands/functions.js.map +1 -0
  69. package/dist/src/commands/group-type-configs.d.ts +2 -0
  70. package/dist/src/commands/group-type-configs.js +87 -0
  71. package/dist/src/commands/group-type-configs.js.map +1 -0
  72. package/dist/src/commands/groups.d.ts +2 -0
  73. package/dist/src/commands/groups.js +65 -113
  74. package/dist/src/commands/groups.js.map +1 -1
  75. package/dist/src/commands/guides.d.ts +223 -0
  76. package/dist/src/commands/guides.js +627 -69
  77. package/dist/src/commands/guides.js.map +1 -1
  78. package/dist/src/commands/init.d.ts +37 -0
  79. package/dist/src/commands/init.js +1693 -208
  80. package/dist/src/commands/init.js.map +1 -1
  81. package/dist/src/commands/integrations.d.ts +2 -0
  82. package/dist/src/commands/integrations.js +428 -187
  83. package/dist/src/commands/integrations.js.map +1 -1
  84. package/dist/src/commands/llm.d.ts +2 -0
  85. package/dist/src/commands/llm.js +4 -2
  86. package/dist/src/commands/llm.js.map +1 -1
  87. package/dist/src/commands/locks.d.ts +8 -0
  88. package/dist/src/commands/locks.js +175 -0
  89. package/dist/src/commands/locks.js.map +1 -0
  90. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  91. package/dist/src/commands/metadata-category-configs.js +113 -0
  92. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  93. package/dist/src/commands/metadata.d.ts +2 -0
  94. package/dist/src/commands/metadata.js +288 -0
  95. package/dist/src/commands/metadata.js.map +1 -0
  96. package/dist/src/commands/prompts.d.ts +2 -0
  97. package/dist/src/commands/prompts.js +322 -634
  98. package/dist/src/commands/prompts.js.map +1 -1
  99. package/dist/src/commands/rule-sets.d.ts +3 -0
  100. package/dist/src/commands/rule-sets.js +139 -148
  101. package/dist/src/commands/rule-sets.js.map +1 -1
  102. package/dist/src/commands/scripts.d.ts +30 -0
  103. package/dist/src/commands/scripts.js +688 -0
  104. package/dist/src/commands/scripts.js.map +1 -0
  105. package/dist/src/commands/secrets.d.ts +2 -0
  106. package/dist/src/commands/secrets.js +109 -0
  107. package/dist/src/commands/secrets.js.map +1 -0
  108. package/dist/src/commands/sessions.d.ts +2 -0
  109. package/dist/src/commands/sessions.js +76 -0
  110. package/dist/src/commands/sessions.js.map +1 -0
  111. package/dist/src/commands/skill.d.ts +2 -0
  112. package/dist/src/commands/skill.js +29 -0
  113. package/dist/src/commands/skill.js.map +1 -0
  114. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  115. package/dist/src/commands/sync-app-settings.js +328 -0
  116. package/dist/src/commands/sync-app-settings.js.map +1 -0
  117. package/dist/src/commands/sync.d.ts +2670 -0
  118. package/dist/src/commands/sync.js +17144 -834
  119. package/dist/src/commands/sync.js.map +1 -1
  120. package/dist/src/commands/tokens.d.ts +2 -0
  121. package/dist/src/commands/tokens.js +132 -22
  122. package/dist/src/commands/tokens.js.map +1 -1
  123. package/dist/src/commands/users.d.ts +2 -0
  124. package/dist/src/commands/users.js +542 -24
  125. package/dist/src/commands/users.js.map +1 -1
  126. package/dist/src/commands/vars.d.ts +8 -0
  127. package/dist/src/commands/vars.js +97 -0
  128. package/dist/src/commands/vars.js.map +1 -0
  129. package/dist/src/commands/waitlist.d.ts +2 -0
  130. package/dist/src/commands/waitlist.js +12 -11
  131. package/dist/src/commands/waitlist.js.map +1 -1
  132. package/dist/src/commands/webhooks.d.ts +31 -0
  133. package/dist/src/commands/webhooks.js +633 -0
  134. package/dist/src/commands/webhooks.js.map +1 -0
  135. package/dist/src/commands/workflows.d.ts +88 -0
  136. package/dist/src/commands/workflows.js +1568 -742
  137. package/dist/src/commands/workflows.js.map +1 -1
  138. package/dist/src/lib/access-rule-display.d.ts +21 -0
  139. package/dist/src/lib/access-rule-display.js +34 -0
  140. package/dist/src/lib/access-rule-display.js.map +1 -0
  141. package/dist/src/lib/api-client.d.ts +2550 -0
  142. package/dist/src/lib/api-client.js +2503 -160
  143. package/dist/src/lib/api-client.js.map +1 -1
  144. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  145. package/dist/src/lib/app-settings-descriptor.js +583 -0
  146. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  147. package/dist/src/lib/auth-flow.d.ts +8 -0
  148. package/dist/src/lib/batch.d.ts +26 -0
  149. package/dist/src/lib/batch.js +32 -0
  150. package/dist/src/lib/batch.js.map +1 -0
  151. package/dist/src/lib/block-layout.d.ts +160 -0
  152. package/dist/src/lib/block-layout.js +451 -0
  153. package/dist/src/lib/block-layout.js.map +1 -0
  154. package/dist/src/lib/block-selector.d.ts +58 -0
  155. package/dist/src/lib/block-selector.js +92 -0
  156. package/dist/src/lib/block-selector.js.map +1 -0
  157. package/dist/src/lib/canonical-json.d.ts +12 -0
  158. package/dist/src/lib/canonical-json.js +35 -0
  159. package/dist/src/lib/canonical-json.js.map +1 -0
  160. package/dist/src/lib/channel.d.ts +30 -0
  161. package/dist/src/lib/channel.js +68 -0
  162. package/dist/src/lib/channel.js.map +1 -0
  163. package/dist/src/lib/cli-manifest.d.ts +68 -0
  164. package/dist/src/lib/cli-manifest.js +71 -0
  165. package/dist/src/lib/cli-manifest.js.map +1 -0
  166. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  167. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  168. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  169. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  170. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  171. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  172. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
  173. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
  174. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  175. package/dist/src/lib/collection-export.d.ts +184 -0
  176. package/dist/src/lib/collection-export.js +252 -0
  177. package/dist/src/lib/collection-export.js.map +1 -0
  178. package/dist/src/lib/config-json-field.d.ts +28 -0
  179. package/dist/src/lib/config-json-field.js +56 -0
  180. package/dist/src/lib/config-json-field.js.map +1 -0
  181. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  182. package/dist/src/lib/config-object-descriptor.js +740 -0
  183. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  184. package/dist/src/lib/config-payload.d.ts +92 -0
  185. package/dist/src/lib/config-payload.js +161 -0
  186. package/dist/src/lib/config-payload.js.map +1 -0
  187. package/dist/src/lib/config-surface.d.ts +141 -0
  188. package/dist/src/lib/config-surface.js +368 -0
  189. package/dist/src/lib/config-surface.js.map +1 -0
  190. package/dist/src/lib/config-toml.d.ts +10 -0
  191. package/dist/src/lib/config-toml.js +42 -0
  192. package/dist/src/lib/config-toml.js.map +1 -0
  193. package/dist/src/lib/config.d.ts +71 -0
  194. package/dist/src/lib/config.js +71 -68
  195. package/dist/src/lib/config.js.map +1 -1
  196. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  197. package/dist/src/lib/confirm-prompt.js +110 -0
  198. package/dist/src/lib/confirm-prompt.js.map +1 -0
  199. package/dist/src/lib/constants.d.ts +11 -0
  200. package/dist/src/lib/constants.js +12 -0
  201. package/dist/src/lib/constants.js.map +1 -0
  202. package/dist/src/lib/crash-handlers.d.ts +20 -0
  203. package/dist/src/lib/crash-handlers.js +49 -0
  204. package/dist/src/lib/crash-handlers.js.map +1 -0
  205. package/dist/src/lib/credentials-store.d.ts +104 -0
  206. package/dist/src/lib/credentials-store.js +336 -0
  207. package/dist/src/lib/credentials-store.js.map +1 -0
  208. package/dist/src/lib/csv.d.ts +47 -0
  209. package/dist/src/lib/csv.js +172 -0
  210. package/dist/src/lib/csv.js.map +1 -0
  211. package/dist/src/lib/data-input.d.ts +23 -0
  212. package/dist/src/lib/data-input.js +50 -0
  213. package/dist/src/lib/data-input.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  215. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  216. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  217. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  218. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  219. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  220. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  221. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  222. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  223. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  224. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  225. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  226. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  227. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  228. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  229. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  230. package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
  231. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  232. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  233. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  234. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  235. package/dist/src/lib/deprecation.d.ts +22 -0
  236. package/dist/src/lib/deprecation.js +43 -0
  237. package/dist/src/lib/deprecation.js.map +1 -0
  238. package/dist/src/lib/document-export-permissions.d.ts +30 -0
  239. package/dist/src/lib/document-export-permissions.js +54 -0
  240. package/dist/src/lib/document-export-permissions.js.map +1 -0
  241. package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
  242. package/dist/src/lib/document-ingest-artifact.js +505 -0
  243. package/dist/src/lib/document-ingest-artifact.js.map +1 -0
  244. package/dist/src/lib/document-ingest-input.d.ts +51 -0
  245. package/dist/src/lib/document-ingest-input.js +132 -0
  246. package/dist/src/lib/document-ingest-input.js.map +1 -0
  247. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  248. package/dist/src/lib/document-ingest-rows.js +181 -0
  249. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  250. package/dist/src/lib/document-ingest.d.ts +101 -0
  251. package/dist/src/lib/document-ingest.js +384 -0
  252. package/dist/src/lib/document-ingest.js.map +1 -0
  253. package/dist/src/lib/env-resolver-core.d.ts +258 -0
  254. package/dist/src/lib/env-resolver-core.js +447 -0
  255. package/dist/src/lib/env-resolver-core.js.map +1 -0
  256. package/dist/src/lib/env-resolver.d.ts +99 -0
  257. package/dist/src/lib/env-resolver.js +153 -0
  258. package/dist/src/lib/env-resolver.js.map +1 -0
  259. package/dist/src/lib/fetch.d.ts +5 -0
  260. package/dist/src/lib/function-bundle.d.ts +147 -0
  261. package/dist/src/lib/function-bundle.js +341 -0
  262. package/dist/src/lib/function-bundle.js.map +1 -0
  263. package/dist/src/lib/function-collect.d.ts +123 -0
  264. package/dist/src/lib/function-collect.js +610 -0
  265. package/dist/src/lib/function-collect.js.map +1 -0
  266. package/dist/src/lib/function-db-types.d.ts +202 -0
  267. package/dist/src/lib/function-db-types.js +870 -0
  268. package/dist/src/lib/function-db-types.js.map +1 -0
  269. package/dist/src/lib/function-document-types.d.ts +144 -0
  270. package/dist/src/lib/function-document-types.js +370 -0
  271. package/dist/src/lib/function-document-types.js.map +1 -0
  272. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  273. package/dist/src/lib/function-grants-preflight.js +105 -0
  274. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  275. package/dist/src/lib/function-log-lines.d.ts +76 -0
  276. package/dist/src/lib/function-log-lines.js +160 -0
  277. package/dist/src/lib/function-log-lines.js.map +1 -0
  278. package/dist/src/lib/function-log-row.d.ts +29 -0
  279. package/dist/src/lib/function-log-row.js +73 -0
  280. package/dist/src/lib/function-log-row.js.map +1 -0
  281. package/dist/src/lib/function-log-tail.d.ts +132 -0
  282. package/dist/src/lib/function-log-tail.js +262 -0
  283. package/dist/src/lib/function-log-tail.js.map +1 -0
  284. package/dist/src/lib/function-run.d.ts +289 -0
  285. package/dist/src/lib/function-run.js +389 -0
  286. package/dist/src/lib/function-run.js.map +1 -0
  287. package/dist/src/lib/function-schema-codegen.d.ts +143 -0
  288. package/dist/src/lib/function-schema-codegen.js +420 -0
  289. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  290. package/dist/src/lib/function-sync.d.ts +459 -0
  291. package/dist/src/lib/function-sync.js +1258 -0
  292. package/dist/src/lib/function-sync.js.map +1 -0
  293. package/dist/src/lib/function-trigger-listing.d.ts +27 -0
  294. package/dist/src/lib/function-trigger-listing.js +70 -0
  295. package/dist/src/lib/function-trigger-listing.js.map +1 -0
  296. package/dist/src/lib/function-typecheck.d.ts +86 -0
  297. package/dist/src/lib/function-typecheck.js +370 -0
  298. package/dist/src/lib/function-typecheck.js.map +1 -0
  299. package/dist/src/lib/function-versions.d.ts +122 -0
  300. package/dist/src/lib/function-versions.js +182 -0
  301. package/dist/src/lib/function-versions.js.map +1 -0
  302. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  303. package/dist/src/lib/generated-allowlist.js +281 -0
  304. package/dist/src/lib/generated-allowlist.js.map +1 -0
  305. package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
  306. package/dist/src/lib/generated-config-surfaces.js +10569 -0
  307. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  308. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  309. package/dist/src/lib/generated-sdk-types.js +13 -0
  310. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  311. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  312. package/dist/src/lib/generated-template-lint.js +624 -0
  313. package/dist/src/lib/generated-template-lint.js.map +1 -0
  314. package/dist/src/lib/init-adopt.d.ts +16 -0
  315. package/dist/src/lib/init-adopt.js +34 -0
  316. package/dist/src/lib/init-adopt.js.map +1 -0
  317. package/dist/src/lib/init-assets.d.ts +39 -0
  318. package/dist/src/lib/init-assets.js +97 -0
  319. package/dist/src/lib/init-assets.js.map +1 -0
  320. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  321. package/dist/src/lib/init-client-platforms.js +71 -0
  322. package/dist/src/lib/init-client-platforms.js.map +1 -0
  323. package/dist/src/lib/init-config.d.ts +98 -0
  324. package/dist/src/lib/init-config.js +186 -0
  325. package/dist/src/lib/init-config.js.map +1 -0
  326. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  327. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  328. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  329. package/dist/src/lib/init-ios-links.d.ts +91 -0
  330. package/dist/src/lib/init-ios-links.js +219 -0
  331. package/dist/src/lib/init-ios-links.js.map +1 -0
  332. package/dist/src/lib/init-plan.d.ts +80 -0
  333. package/dist/src/lib/init-plan.js +95 -0
  334. package/dist/src/lib/init-plan.js.map +1 -0
  335. package/dist/src/lib/init-production-env.d.ts +48 -0
  336. package/dist/src/lib/init-production-env.js +59 -0
  337. package/dist/src/lib/init-production-env.js.map +1 -0
  338. package/dist/src/lib/init-schema.d.ts +74 -0
  339. package/dist/src/lib/init-schema.js +358 -0
  340. package/dist/src/lib/init-schema.js.map +1 -0
  341. package/dist/src/lib/init-xcode.d.ts +34 -0
  342. package/dist/src/lib/init-xcode.js +138 -0
  343. package/dist/src/lib/init-xcode.js.map +1 -0
  344. package/dist/src/lib/integration-request-config.d.ts +30 -0
  345. package/dist/src/lib/integration-request-config.js +145 -0
  346. package/dist/src/lib/integration-request-config.js.map +1 -0
  347. package/dist/src/lib/integration-selector.d.ts +42 -0
  348. package/dist/src/lib/integration-selector.js +46 -0
  349. package/dist/src/lib/integration-selector.js.map +1 -0
  350. package/dist/src/lib/ios-app-id.d.ts +34 -0
  351. package/dist/src/lib/ios-app-id.js +69 -0
  352. package/dist/src/lib/ios-app-id.js.map +1 -0
  353. package/dist/src/lib/list-options.d.ts +68 -0
  354. package/dist/src/lib/list-options.js +89 -0
  355. package/dist/src/lib/list-options.js.map +1 -0
  356. package/dist/src/lib/local-state.d.ts +55 -0
  357. package/dist/src/lib/local-state.js +167 -0
  358. package/dist/src/lib/local-state.js.map +1 -0
  359. package/dist/src/lib/local-test-cases.d.ts +63 -0
  360. package/dist/src/lib/local-test-cases.js +136 -0
  361. package/dist/src/lib/local-test-cases.js.map +1 -0
  362. package/dist/src/lib/log-inspection.d.ts +715 -0
  363. package/dist/src/lib/log-inspection.js +816 -0
  364. package/dist/src/lib/log-inspection.js.map +1 -0
  365. package/dist/src/lib/logout-admin-session.d.ts +33 -0
  366. package/dist/src/lib/logout-admin-session.js +70 -0
  367. package/dist/src/lib/logout-admin-session.js.map +1 -0
  368. package/dist/src/lib/migration-nag.d.ts +49 -0
  369. package/dist/src/lib/migration-nag.js +163 -0
  370. package/dist/src/lib/migration-nag.js.map +1 -0
  371. package/dist/src/lib/object-status-filter.d.ts +22 -0
  372. package/dist/src/lib/object-status-filter.js +45 -0
  373. package/dist/src/lib/object-status-filter.js.map +1 -0
  374. package/dist/src/lib/output.d.ts +124 -0
  375. package/dist/src/lib/output.js +219 -8
  376. package/dist/src/lib/output.js.map +1 -1
  377. package/dist/src/lib/package-manager.d.ts +140 -0
  378. package/dist/src/lib/package-manager.js +305 -0
  379. package/dist/src/lib/package-manager.js.map +1 -0
  380. package/dist/src/lib/paginate.d.ts +98 -0
  381. package/dist/src/lib/paginate.js +112 -0
  382. package/dist/src/lib/paginate.js.map +1 -0
  383. package/dist/src/lib/platform-owned.d.ts +63 -0
  384. package/dist/src/lib/platform-owned.js +85 -0
  385. package/dist/src/lib/platform-owned.js.map +1 -0
  386. package/dist/src/lib/project-config.d.ts +122 -0
  387. package/dist/src/lib/project-config.js +244 -0
  388. package/dist/src/lib/project-config.js.map +1 -0
  389. package/dist/src/lib/prompt-cost-format.d.ts +11 -0
  390. package/dist/src/lib/prompt-cost-format.js +41 -0
  391. package/dist/src/lib/prompt-cost-format.js.map +1 -0
  392. package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
  393. package/dist/src/lib/prompt-schema-codegen.js +462 -0
  394. package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
  395. package/dist/src/lib/query-operators.d.ts +43 -0
  396. package/dist/src/lib/query-operators.js +80 -0
  397. package/dist/src/lib/query-operators.js.map +1 -0
  398. package/dist/src/lib/record-filter.d.ts +18 -0
  399. package/dist/src/lib/record-filter.js +55 -0
  400. package/dist/src/lib/record-filter.js.map +1 -0
  401. package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
  402. package/dist/src/lib/refresh-admin-credentials.js +123 -0
  403. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  404. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  405. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  406. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  407. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  408. package/dist/src/lib/resolve-init-server.js +77 -0
  409. package/dist/src/lib/resolve-init-server.js.map +1 -0
  410. package/dist/src/lib/resolve-owner.d.ts +19 -0
  411. package/dist/src/lib/resolve-owner.js +20 -0
  412. package/dist/src/lib/resolve-owner.js.map +1 -0
  413. package/dist/src/lib/resolve-platform.d.ts +74 -0
  414. package/dist/src/lib/resolve-platform.js +105 -0
  415. package/dist/src/lib/resolve-platform.js.map +1 -0
  416. package/dist/src/lib/run-status.d.ts +19 -0
  417. package/dist/src/lib/run-status.generated.d.ts +39 -0
  418. package/dist/src/lib/run-status.generated.js +66 -0
  419. package/dist/src/lib/run-status.generated.js.map +1 -0
  420. package/dist/src/lib/run-status.js +19 -0
  421. package/dist/src/lib/run-status.js.map +1 -0
  422. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  423. package/dist/src/lib/server-text-normalization.js +90 -0
  424. package/dist/src/lib/server-text-normalization.js.map +1 -0
  425. package/dist/src/lib/server-url.d.ts +22 -0
  426. package/dist/src/lib/server-url.js +33 -0
  427. package/dist/src/lib/server-url.js.map +1 -0
  428. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  429. package/dist/src/lib/signing-secret-status.js +116 -0
  430. package/dist/src/lib/signing-secret-status.js.map +1 -0
  431. package/dist/src/lib/skill-installer.d.ts +71 -0
  432. package/dist/src/lib/skill-installer.js +441 -0
  433. package/dist/src/lib/skill-installer.js.map +1 -0
  434. package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
  435. package/dist/src/lib/snapshot-audit-source.js +58 -0
  436. package/dist/src/lib/snapshot-audit-source.js.map +1 -0
  437. package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
  438. package/dist/src/lib/snapshot-audit-store.js +196 -0
  439. package/dist/src/lib/snapshot-audit-store.js.map +1 -0
  440. package/dist/src/lib/snapshot-audit.d.ts +207 -0
  441. package/dist/src/lib/snapshot-audit.js +431 -0
  442. package/dist/src/lib/snapshot-audit.js.map +1 -0
  443. package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
  444. package/dist/src/lib/snapshot-build-rows.js +87 -0
  445. package/dist/src/lib/snapshot-build-rows.js.map +1 -0
  446. package/dist/src/lib/snapshot-build.d.ts +50 -0
  447. package/dist/src/lib/snapshot-build.js +111 -0
  448. package/dist/src/lib/snapshot-build.js.map +1 -0
  449. package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
  450. package/dist/src/lib/snapshot-manifest-layout.js +70 -0
  451. package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
  452. package/dist/src/lib/snapshots.d.ts +98 -0
  453. package/dist/src/lib/snapshots.js +294 -0
  454. package/dist/src/lib/snapshots.js.map +1 -0
  455. package/dist/src/lib/step-run-table.d.ts +43 -0
  456. package/dist/src/lib/step-run-table.js +129 -0
  457. package/dist/src/lib/step-run-table.js.map +1 -0
  458. package/dist/src/lib/storage-pending-retry.d.ts +26 -0
  459. package/dist/src/lib/storage-pending-retry.js +42 -0
  460. package/dist/src/lib/storage-pending-retry.js.map +1 -0
  461. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
  462. package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
  463. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
  464. package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
  465. package/dist/src/lib/swift-codegen/banners.js +25 -0
  466. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  467. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  468. package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
  469. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  470. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  471. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  472. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  473. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
  474. package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
  475. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  476. package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
  477. package/dist/src/lib/swift-codegen/generator.js +457 -0
  478. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  479. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
  480. package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
  481. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  482. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  483. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  484. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  485. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  486. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  487. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  488. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  489. package/dist/src/lib/sync-dir-selector.js +30 -0
  490. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  491. package/dist/src/lib/sync-paths.d.ts +128 -0
  492. package/dist/src/lib/sync-paths.js +195 -0
  493. package/dist/src/lib/sync-paths.js.map +1 -0
  494. package/dist/src/lib/sync-resource-types.d.ts +563 -0
  495. package/dist/src/lib/sync-resource-types.js +1073 -0
  496. package/dist/src/lib/sync-resource-types.js.map +1 -0
  497. package/dist/src/lib/sync-selectors.d.ts +138 -0
  498. package/dist/src/lib/sync-selectors.js +289 -0
  499. package/dist/src/lib/sync-selectors.js.map +1 -0
  500. package/dist/src/lib/template.d.ts +170 -0
  501. package/dist/src/lib/template.js +484 -68
  502. package/dist/src/lib/template.js.map +1 -1
  503. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  504. package/dist/src/lib/test-case-file-names.js +91 -0
  505. package/dist/src/lib/test-case-file-names.js.map +1 -0
  506. package/dist/src/lib/test-case-keys.d.ts +29 -0
  507. package/dist/src/lib/test-case-keys.js +55 -0
  508. package/dist/src/lib/test-case-keys.js.map +1 -0
  509. package/dist/src/lib/test-case-variables.d.ts +29 -0
  510. package/dist/src/lib/test-case-variables.js +71 -0
  511. package/dist/src/lib/test-case-variables.js.map +1 -0
  512. package/dist/src/lib/token-inject.d.ts +56 -0
  513. package/dist/src/lib/token-inject.js +204 -0
  514. package/dist/src/lib/token-inject.js.map +1 -0
  515. package/dist/src/lib/toml-database-config.d.ts +123 -0
  516. package/dist/src/lib/toml-database-config.js +544 -0
  517. package/dist/src/lib/toml-database-config.js.map +1 -0
  518. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  519. package/dist/src/lib/toml-metadata-config.js +476 -0
  520. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  521. package/dist/src/lib/toml-native-form.d.ts +46 -0
  522. package/dist/src/lib/toml-native-form.js +78 -0
  523. package/dist/src/lib/toml-native-form.js.map +1 -0
  524. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  525. package/dist/src/lib/toml-params-validator.js +298 -0
  526. package/dist/src/lib/toml-params-validator.js.map +1 -0
  527. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  528. package/dist/src/lib/toml-scalar-edit.js +283 -0
  529. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  530. package/dist/src/lib/user-selector.d.ts +24 -0
  531. package/dist/src/lib/user-selector.js +33 -0
  532. package/dist/src/lib/user-selector.js.map +1 -0
  533. package/dist/src/lib/version-check.d.ts +35 -0
  534. package/dist/src/lib/version-check.js +241 -0
  535. package/dist/src/lib/version-check.js.map +1 -0
  536. package/dist/src/lib/watch.d.ts +121 -0
  537. package/dist/src/lib/watch.js +169 -0
  538. package/dist/src/lib/watch.js.map +1 -0
  539. package/dist/src/lib/web-url.d.ts +40 -0
  540. package/dist/src/lib/web-url.js +76 -0
  541. package/dist/src/lib/web-url.js.map +1 -0
  542. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  543. package/dist/src/lib/webhook-deliver.js +519 -0
  544. package/dist/src/lib/webhook-deliver.js.map +1 -0
  545. package/dist/src/lib/workflow-apply.d.ts +110 -0
  546. package/dist/src/lib/workflow-apply.js +164 -0
  547. package/dist/src/lib/workflow-apply.js.map +1 -0
  548. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  549. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  550. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  551. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  552. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  553. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  554. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  555. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  556. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  557. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  558. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  559. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  560. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  561. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  562. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  563. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  564. package/dist/src/lib/workflow-config-apply.js +137 -0
  565. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  566. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  567. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  568. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  569. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  570. package/dist/src/lib/workflow-defaults.js +41 -0
  571. package/dist/src/lib/workflow-defaults.js.map +1 -0
  572. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  573. package/dist/src/lib/workflow-fragments.js +342 -0
  574. package/dist/src/lib/workflow-fragments.js.map +1 -0
  575. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  576. package/dist/src/lib/workflow-include-preserve.js +286 -0
  577. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  578. package/dist/src/lib/workflow-payload.d.ts +98 -0
  579. package/dist/src/lib/workflow-payload.js +178 -0
  580. package/dist/src/lib/workflow-payload.js.map +1 -0
  581. package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
  582. package/dist/src/lib/workflow-toml-validator.js +770 -0
  583. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  584. package/dist/src/lib/workflow-usage.d.ts +196 -0
  585. package/dist/src/lib/workflow-usage.js +310 -0
  586. package/dist/src/lib/workflow-usage.js.map +1 -0
  587. package/dist/src/types/index.d.ts +591 -0
  588. package/dist/src/validators.d.ts +65 -0
  589. package/dist/src/validators.js +64 -0
  590. package/dist/src/validators.js.map +1 -0
  591. package/package.json +34 -9
@@ -0,0 +1,441 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from "fs";
2
+ import { readFile } from "fs/promises";
3
+ import { createHash } from "crypto";
4
+ import { homedir } from "os";
5
+ import { join, dirname } from "path";
6
+ import { fileURLToPath } from "url";
7
+ import chalk from "chalk";
8
+ /**
9
+ * `~/.claude`, or `PRIMITIVE_CLAUDE_DIR` when set. The override exists for the
10
+ * unit tests: `os.homedir()` reads the real process environment, which a
11
+ * vitest worker's `process.env` does not reach, so a test cannot stage a
12
+ * home directory by moving HOME.
13
+ */
14
+ function claudeDir() {
15
+ return process.env.PRIMITIVE_CLAUDE_DIR || join(homedir(), ".claude");
16
+ }
17
+ function skillsDir() {
18
+ return join(claudeDir(), "skills");
19
+ }
20
+ // The public skill, bundled with the CLI.
21
+ const PUBLIC_SKILL_NAME = "primitive-platform";
22
+ function publicSkillDir() {
23
+ return join(skillsDir(), PUBLIC_SKILL_NAME);
24
+ }
25
+ function publicSkillFile() {
26
+ return join(publicSkillDir(), "SKILL.md");
27
+ }
28
+ function publicHashFile() {
29
+ return join(publicSkillDir(), ".version");
30
+ }
31
+ const INTERNAL_SKILL_NAME = "primitive-platform-internal";
32
+ const FILE_ISSUE_SKILL_NAME = "file-issue";
33
+ // file-issue runs `_shared` scripts and reads `_shared` templates. In the
34
+ // repo `_shared` is a sibling of the skill (.claude/skills/_shared); in user
35
+ // space it is installed inside the skill directory, which the skill's own
36
+ // `$SHARED` resolution expects. check-filing.sh carries its section lists
37
+ // inline (it does not read the templates), but the skill drafts from the
38
+ // templates, so they ship too. linked-issue.sh sources closing-refs.sh.
39
+ const SHARED = ".claude/skills/_shared";
40
+ const FILE_ISSUE_SHARED_FILES = [
41
+ "check-filing.sh",
42
+ "resolve-sponsor.sh",
43
+ "linked-issue.sh",
44
+ "closing-refs.sh",
45
+ "filing-conventions.md",
46
+ "templates/bug-filing.md",
47
+ "templates/feature-filing.md",
48
+ "templates/docs-filing.md",
49
+ ];
50
+ export const FETCHED_SKILLS = [
51
+ {
52
+ name: INTERNAL_SKILL_NAME,
53
+ files: [
54
+ {
55
+ repoPath: `internal-skills/${INTERNAL_SKILL_NAME}/SKILL.md`,
56
+ localPath: "SKILL.md",
57
+ },
58
+ ],
59
+ },
60
+ {
61
+ name: FILE_ISSUE_SKILL_NAME,
62
+ files: [
63
+ { repoPath: `.claude/skills/${FILE_ISSUE_SKILL_NAME}/SKILL.md`, localPath: "SKILL.md" },
64
+ ...FILE_ISSUE_SHARED_FILES.map((f) => ({
65
+ repoPath: `${SHARED}/${f}`,
66
+ localPath: `_shared/${f}`,
67
+ })),
68
+ ],
69
+ },
70
+ ];
71
+ function fetchedSkillDir(skill) {
72
+ return join(skillsDir(), skill.name);
73
+ }
74
+ /**
75
+ * One stamp for all fetched skills, kept where the first fetched skill's
76
+ * stamp has always lived (`primitive-platform-internal/.version`) so installs
77
+ * made before file-issue was added upgrade in place: an old-format stamp has
78
+ * no `skills` map, and the next per-version refresh fills it in.
79
+ */
80
+ function membersStampFile() {
81
+ return join(skillsDir(), INTERNAL_SKILL_NAME, ".version");
82
+ }
83
+ const __dirname = dirname(fileURLToPath(import.meta.url));
84
+ function getBundledSkillPath() {
85
+ // In dist: dist/src/lib/skill-installer.js -> ../../../assets/...
86
+ // In source (tsx): src/lib/skill-installer.ts -> ../../assets/...
87
+ const distPath = fileURLToPath(new URL("../../../assets/skill/skills/primitive-platform/SKILL.md", import.meta.url));
88
+ if (existsSync(distPath))
89
+ return distPath;
90
+ return fileURLToPath(new URL("../../assets/skill/skills/primitive-platform/SKILL.md", import.meta.url));
91
+ }
92
+ export function getCliVersion() {
93
+ // Same dual-path layout as getBundledSkillPath: dist/src/lib -> package root
94
+ // is three levels up; src/lib (tsx) -> two levels up.
95
+ // Both candidates can exist (from source, ../../../ is the repo root), so
96
+ // require the CLI's package name to pick the right one.
97
+ for (const rel of ["../../../package.json", "../../package.json"]) {
98
+ try {
99
+ const path = fileURLToPath(new URL(rel, import.meta.url));
100
+ if (!existsSync(path))
101
+ continue;
102
+ const pkg = JSON.parse(readFileSync(path, "utf-8"));
103
+ if (pkg.name === "primitive-admin" && typeof pkg.version === "string") {
104
+ return pkg.version;
105
+ }
106
+ }
107
+ catch {
108
+ // try next path
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ function computeHash(content) {
114
+ return createHash("sha256").update(content).digest("hex").slice(0, 12);
115
+ }
116
+ function getInstalledHash() {
117
+ try {
118
+ if (!existsSync(publicHashFile()))
119
+ return null;
120
+ return readFileSync(publicHashFile(), "utf-8").trim();
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ /**
127
+ * Returns true if the skill is currently installed.
128
+ */
129
+ export function isSkillInstalled() {
130
+ return getInstalledHash() !== null;
131
+ }
132
+ function getMembersStamp() {
133
+ try {
134
+ const file = membersStampFile();
135
+ if (!existsSync(file))
136
+ return null;
137
+ const stamp = JSON.parse(readFileSync(file, "utf-8"));
138
+ if (typeof stamp.cliVersion === "string" && typeof stamp.hash === "string") {
139
+ return stamp;
140
+ }
141
+ return null;
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ }
147
+ function writeMembersStamp(stamp) {
148
+ mkdirSync(dirname(membersStampFile()), { recursive: true });
149
+ writeFileSync(membersStampFile(), JSON.stringify(stamp, null, 2));
150
+ }
151
+ /** The installed hash of a fetched skill, from the stamp; null when absent. */
152
+ function installedFetchedHash(skill, stamp) {
153
+ if (!stamp)
154
+ return null;
155
+ if (!existsSync(join(fetchedSkillDir(skill), "SKILL.md")))
156
+ return null;
157
+ if (skill.name === INTERNAL_SKILL_NAME && !stamp.skills)
158
+ return stamp.hash;
159
+ return stamp.skills?.[skill.name] ?? null;
160
+ }
161
+ /**
162
+ * Read one file of the private js-bao-wss repo (main branch) via the GitHub
163
+ * contents API through `gh`. Returns null if gh is missing, unauthenticated,
164
+ * or the caller lacks access to the repo — access failure is how non-members
165
+ * are gated.
166
+ *
167
+ * `PRIMITIVE_SKILL_SOURCE_DIR` reads the same repo paths from a local
168
+ * checkout instead, to try a skill edit before it is merged (and for the
169
+ * unit tests, which install from this repo's own files).
170
+ */
171
+ export async function fetchRepoFile(repoPath) {
172
+ const sourceDir = process.env.PRIMITIVE_SKILL_SOURCE_DIR;
173
+ if (sourceDir) {
174
+ try {
175
+ return await readFile(join(sourceDir, repoPath), "utf-8");
176
+ }
177
+ catch {
178
+ return null;
179
+ }
180
+ }
181
+ try {
182
+ const { execFile } = await import("child_process");
183
+ const { promisify } = await import("util");
184
+ const { stdout } = await promisify(execFile)("gh", ["api", "-H", "Accept: application/vnd.github.raw", `repos/Primitive-Labs/js-bao-wss/contents/${repoPath}`], { timeout: 15000, maxBuffer: 4 * 1024 * 1024 });
185
+ return stdout;
186
+ }
187
+ catch {
188
+ return null;
189
+ }
190
+ }
191
+ /**
192
+ * Fetch every file of a members' skill. Null if any file is unavailable, so
193
+ * a partial skill is never written over a complete one.
194
+ */
195
+ async function fetchSkill(skill) {
196
+ const files = new Map();
197
+ for (const file of skill.files) {
198
+ const content = await fetchRepoFile(file.repoPath);
199
+ if (content === null || content.length === 0)
200
+ return null;
201
+ // Sanity check the skill file itself: must be a skill, not an error payload.
202
+ if (file.localPath === "SKILL.md" && (!content.startsWith("---") || !content.includes(`name: ${skill.name}`))) {
203
+ return null;
204
+ }
205
+ files.set(file.localPath, content);
206
+ }
207
+ return files;
208
+ }
209
+ /** Hash of a fetched skill: every file's path and content, in manifest order. */
210
+ function hashSkillFiles(skill, files) {
211
+ const h = createHash("sha256");
212
+ for (const file of skill.files) {
213
+ h.update(file.localPath).update("\0").update(files.get(file.localPath) ?? "").update("\0");
214
+ }
215
+ return h.digest("hex").slice(0, 12);
216
+ }
217
+ function writeFetchedSkill(skill, files) {
218
+ const dir = fetchedSkillDir(skill);
219
+ for (const [localPath, content] of files) {
220
+ const target = join(dir, localPath);
221
+ mkdirSync(dirname(target), { recursive: true });
222
+ writeFileSync(target, content);
223
+ }
224
+ return hashSkillFiles(skill, files);
225
+ }
226
+ /**
227
+ * Fetch and write every members' skill. Returns the per-skill hash of what
228
+ * is now installed (a skill whose fetch failed keeps its previous hash, or
229
+ * is absent from the result when it was never installed).
230
+ */
231
+ async function installFetchedSkills(previous) {
232
+ const installed = {};
233
+ const fetched = [];
234
+ const failed = [];
235
+ for (const skill of FETCHED_SKILLS) {
236
+ const files = await fetchSkill(skill);
237
+ if (files) {
238
+ installed[skill.name] = writeFetchedSkill(skill, files);
239
+ fetched.push(skill.name);
240
+ }
241
+ else {
242
+ const kept = installedFetchedHash(skill, previous);
243
+ if (kept)
244
+ installed[skill.name] = kept;
245
+ failed.push(skill.name);
246
+ }
247
+ }
248
+ return { installed, fetched, failed };
249
+ }
250
+ function stampFrom(cliVersion, installed) {
251
+ return {
252
+ cliVersion,
253
+ hash: installed[INTERNAL_SKILL_NAME] ?? "",
254
+ skills: installed,
255
+ };
256
+ }
257
+ /**
258
+ * Refresh the members' skills if the CLI version changed since the last
259
+ * attempt. One fetch per CLI release: the stamp is advanced even when the
260
+ * fetch fails, so an offline or revoked user isn't retried on every command
261
+ * (an explicit `primitive skill install` always refetches). Only runs when
262
+ * a members' skill is already installed — a first install is explicit only.
263
+ */
264
+ async function refreshFetchedSkills() {
265
+ const stamp = getMembersStamp();
266
+ if (!stamp)
267
+ return; // not installed — explicit install only
268
+ const cliVersion = getCliVersion();
269
+ if (!cliVersion || stamp.cliVersion === cliVersion)
270
+ return;
271
+ const { installed, fetched } = await installFetchedSkills(stamp);
272
+ if (fetched.length === 0) {
273
+ writeMembersStamp({ ...stamp, cliVersion });
274
+ return;
275
+ }
276
+ const changed = fetched.filter((name) => installed[name] !== installedFetchedHash(FETCHED_SKILLS.find((s) => s.name === name), stamp));
277
+ writeMembersStamp(stampFrom(cliVersion, installed));
278
+ if (changed.length > 0) {
279
+ // Diagnostic, not payload: post-command notices must stay off stdout so
280
+ // `primitive <verb> --json | jq .` parses (#2357). Same stream choice as
281
+ // the update banner in version-check.ts.
282
+ console.error(chalk.dim(`Updated Primitive members' skills for Claude Code (${changed.join(", ")})`));
283
+ }
284
+ }
285
+ /**
286
+ * Auto-update an already-installed skill if a newer version is bundled.
287
+ * Called after command execution for non-init, non-skill commands.
288
+ * If the skill is not installed, shows a non-blocking hint instead.
289
+ * Never throws — fails silently like version-check.
290
+ */
291
+ export async function checkSkillStatus() {
292
+ try {
293
+ const bundledPath = getBundledSkillPath();
294
+ if (!existsSync(bundledPath))
295
+ return;
296
+ if (!existsSync(claudeDir()))
297
+ return;
298
+ const bundledContent = await readFile(bundledPath, "utf-8");
299
+ const bundledHash = computeHash(bundledContent);
300
+ const installedHash = getInstalledHash();
301
+ if (installedHash) {
302
+ // Already installed — silently auto-update if needed
303
+ if (installedHash !== bundledHash) {
304
+ mkdirSync(publicSkillDir(), { recursive: true });
305
+ writeFileSync(publicSkillFile(), bundledContent);
306
+ writeFileSync(publicHashFile(), bundledHash);
307
+ console.error(chalk.dim("Updated Primitive platform skill for Claude Code"));
308
+ }
309
+ // Members' skills (if installed) refresh from the private repo, at
310
+ // most once per CLI release.
311
+ await refreshFetchedSkills();
312
+ }
313
+ else {
314
+ // Not installed — show a non-blocking hint
315
+ console.error(chalk.dim(`Claude Code skill available — run ${chalk.cyan("primitive skill install")} to set up`));
316
+ }
317
+ }
318
+ catch {
319
+ // Never let skill check affect CLI operation
320
+ }
321
+ }
322
+ /**
323
+ * Explicitly install or reinstall the skill. Shows output.
324
+ * Also installs the members' skills (primitive-platform-internal and
325
+ * file-issue) when the caller has access to the private repo
326
+ * (Primitive-Labs members); silently skipped otherwise.
327
+ */
328
+ export async function installSkillExplicit() {
329
+ const bundledPath = getBundledSkillPath();
330
+ if (!existsSync(bundledPath)) {
331
+ console.error(chalk.red("Skill assets not found. Reinstall the CLI."));
332
+ return false;
333
+ }
334
+ if (!existsSync(claudeDir())) {
335
+ console.error(chalk.red("Claude Code not found (~/.claude does not exist)."));
336
+ console.error(chalk.dim("Install Claude Code first: https://claude.ai/code"));
337
+ return false;
338
+ }
339
+ const bundledContent = readFileSync(bundledPath, "utf-8");
340
+ const bundledHash = computeHash(bundledContent);
341
+ mkdirSync(publicSkillDir(), { recursive: true });
342
+ writeFileSync(publicSkillFile(), bundledContent);
343
+ writeFileSync(publicHashFile(), bundledHash);
344
+ console.log(chalk.green("Primitive platform skill installed for Claude Code."));
345
+ console.log(chalk.dim(`Location: ${publicSkillFile()}`));
346
+ console.log(chalk.dim(`Version: ${bundledHash}`));
347
+ const previous = getMembersStamp();
348
+ const { installed, fetched, failed } = await installFetchedSkills(previous);
349
+ if (Object.keys(installed).length > 0) {
350
+ writeMembersStamp(stampFrom(getCliVersion() ?? "unknown", installed));
351
+ }
352
+ for (const skill of FETCHED_SKILLS) {
353
+ if (fetched.includes(skill.name)) {
354
+ console.log(chalk.green(`Primitive ${skill.name} skill installed (Primitive-Labs members).`));
355
+ console.log(chalk.dim(`Location: ${fetchedSkillDir(skill)}`));
356
+ console.log(chalk.dim(`Version: ${installed[skill.name]}`));
357
+ }
358
+ else if (installed[skill.name]) {
359
+ // Keep the existing copy; just tell the user the refresh didn't happen.
360
+ console.log(chalk.yellow(`Could not refresh the ${skill.name} skill (gh unavailable or no repo access); keeping the installed copy.`));
361
+ }
362
+ }
363
+ // A member with one skill installed and another that failed to fetch
364
+ // (a transient error) is told; a non-member (nothing fetched, nothing
365
+ // installed) is told nothing.
366
+ if (fetched.length > 0 && failed.length > 0) {
367
+ console.log(chalk.yellow(`Could not fetch: ${failed.join(", ")}. Run primitive skill install again to retry.`));
368
+ }
369
+ return true;
370
+ }
371
+ /**
372
+ * Uninstall the skill (and the members' skills, if present).
373
+ */
374
+ export function uninstallSkill() {
375
+ const fetchedDirs = FETCHED_SKILLS.map((skill) => ({ skill, dir: fetchedSkillDir(skill) }));
376
+ if (!existsSync(publicSkillDir()) && !fetchedDirs.some(({ dir }) => existsSync(dir))) {
377
+ console.log(chalk.dim("Skill is not installed."));
378
+ return true;
379
+ }
380
+ if (existsSync(publicSkillDir())) {
381
+ rmSync(publicSkillDir(), { recursive: true });
382
+ console.log(chalk.green("Primitive platform skill uninstalled."));
383
+ }
384
+ for (const { skill, dir } of fetchedDirs) {
385
+ if (existsSync(dir)) {
386
+ rmSync(dir, { recursive: true });
387
+ console.log(chalk.green(`Primitive ${skill.name} skill uninstalled.`));
388
+ }
389
+ }
390
+ return true;
391
+ }
392
+ /** The data `skillStatus()` prints; exported so tests can read it directly. */
393
+ export function getSkillStatus() {
394
+ const bundledPath = getBundledSkillPath();
395
+ const stamp = getMembersStamp();
396
+ const fetched = {};
397
+ for (const skill of FETCHED_SKILLS) {
398
+ const hash = installedFetchedHash(skill, stamp);
399
+ fetched[skill.name] = hash && stamp
400
+ ? { hash, cliVersion: stamp.cliVersion, location: fetchedSkillDir(skill) }
401
+ : null;
402
+ }
403
+ return {
404
+ installedHash: getInstalledHash(),
405
+ bundledHash: existsSync(bundledPath) ? computeHash(readFileSync(bundledPath, "utf-8")) : null,
406
+ location: publicSkillFile(),
407
+ fetched,
408
+ };
409
+ }
410
+ /**
411
+ * Show current skill installation status.
412
+ */
413
+ export function skillStatus() {
414
+ const status = getSkillStatus();
415
+ if (!status.installedHash) {
416
+ console.log(chalk.yellow("Skill is not installed."));
417
+ }
418
+ else {
419
+ console.log(chalk.green("Skill is installed."));
420
+ console.log(chalk.dim(` Location: ${status.location}`));
421
+ console.log(chalk.dim(` Version: ${status.installedHash}`));
422
+ }
423
+ if (status.bundledHash) {
424
+ console.log(chalk.dim(` Bundled: ${status.bundledHash}`));
425
+ if (status.installedHash && status.installedHash !== status.bundledHash) {
426
+ console.log(chalk.yellow(" Update available — run: primitive skill install"));
427
+ }
428
+ }
429
+ for (const skill of FETCHED_SKILLS) {
430
+ const entry = status.fetched[skill.name];
431
+ if (entry) {
432
+ console.log(chalk.green(`${skill.name} skill is installed (Primitive-Labs members).`));
433
+ console.log(chalk.dim(` Location: ${entry.location}`));
434
+ console.log(chalk.dim(` Version: ${entry.hash} (fetched for CLI ${entry.cliVersion})`));
435
+ }
436
+ else {
437
+ console.log(chalk.dim(`${skill.name} skill is not installed (Primitive-Labs members: primitive skill install).`));
438
+ }
439
+ }
440
+ }
441
+ //# sourceMappingURL=skill-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../../src/lib/skill-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The audit's source, wired to the app API (#3433, criterion 10).
3
+ *
4
+ * `auditSnapshotChain` takes its reads as a port so its decision — the fence,
5
+ * the model union, the comparison — is gradeable against a source a test can
6
+ * move between calls. This is the one the command runs: four routes, and one
7
+ * rule about how often each is asked.
8
+ *
9
+ * ## Why nothing is remembered between attempts (3433-C09)
10
+ *
11
+ * The schema answers two of the audit's questions — which models the table
12
+ * holds, and which of their fields are stringsets — and remembering its answer
13
+ * for the whole run made both of them statements about the FIRST attempt. A
14
+ * field declared while an attempt was running is exactly what moves the fence
15
+ * and discards it, so the remembered answer would be read on the one attempt
16
+ * that needed a fresh one: both sides hold the same members, the declaration
17
+ * that says they are a set is on the server, and the audit reports corruption.
18
+ * Each attempt asks again. Two extra reads of a bounded route are nothing
19
+ * beside the chain the same attempt downloads.
20
+ *
21
+ * The declarations are read AFTER the chain is captured, so they cover the
22
+ * state being compared; the table's model list is read BEFORE it, because that
23
+ * read is also the permission check that refuses a caller who could not finish
24
+ * (3433-C08). A model that appears between the two is in the captured overlay
25
+ * and therefore in the reconstruction, which the union takes the other half
26
+ * from; one that appears after it moves the fence and the attempt is retried.
27
+ */
28
+ import { type AuditSource } from "./snapshot-audit.js";
29
+ /** The four reads the audit makes of the server, as `ApiClient` answers them. */
30
+ export interface AuditApiClient {
31
+ exportDocumentChain(appId: string, documentId: string): Promise<any>;
32
+ downloadDocumentArtifact(appId: string, path: string): Promise<Uint8Array>;
33
+ getDocumentSchema(appId: string, documentId: string): Promise<any>;
34
+ queryDocumentRecords(appId: string, documentId: string, model: string, options: {
35
+ limit?: number;
36
+ cursor?: string;
37
+ }): Promise<any>;
38
+ }
39
+ export interface AuditApiSourceOptions {
40
+ appId: string;
41
+ documentId: string;
42
+ /** Records per page. One page is the audit's whole server-side working set. */
43
+ pageSize: number;
44
+ }
45
+ export declare function createAuditApiSource(client: AuditApiClient, options: AuditApiSourceOptions): AuditSource;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The audit's source, wired to the app API (#3433, criterion 10).
3
+ *
4
+ * `auditSnapshotChain` takes its reads as a port so its decision — the fence,
5
+ * the model union, the comparison — is gradeable against a source a test can
6
+ * move between calls. This is the one the command runs: four routes, and one
7
+ * rule about how often each is asked.
8
+ *
9
+ * ## Why nothing is remembered between attempts (3433-C09)
10
+ *
11
+ * The schema answers two of the audit's questions — which models the table
12
+ * holds, and which of their fields are stringsets — and remembering its answer
13
+ * for the whole run made both of them statements about the FIRST attempt. A
14
+ * field declared while an attempt was running is exactly what moves the fence
15
+ * and discards it, so the remembered answer would be read on the one attempt
16
+ * that needed a fresh one: both sides hold the same members, the declaration
17
+ * that says they are a set is on the server, and the audit reports corruption.
18
+ * Each attempt asks again. Two extra reads of a bounded route are nothing
19
+ * beside the chain the same attempt downloads.
20
+ *
21
+ * The declarations are read AFTER the chain is captured, so they cover the
22
+ * state being compared; the table's model list is read BEFORE it, because that
23
+ * read is also the permission check that refuses a caller who could not finish
24
+ * (3433-C08). A model that appears between the two is in the captured overlay
25
+ * and therefore in the reconstruction, which the union takes the other half
26
+ * from; one that appears after it moves the fence and the attempt is retried.
27
+ */
28
+ import { stringSetFieldsFromSchema, } from "./snapshot-audit.js";
29
+ export function createAuditApiSource(client, options) {
30
+ const { appId, documentId, pageSize } = options;
31
+ return {
32
+ async chain() {
33
+ return await client.exportDocumentChain(appId, documentId);
34
+ },
35
+ async download(grantedPath) {
36
+ const body = await client.downloadDocumentArtifact(appId, grantedPath);
37
+ return new Uint8Array(body.buffer, body.byteOffset, body.byteLength);
38
+ },
39
+ async tableModels() {
40
+ const answer = await client.getDocumentSchema(appId, documentId);
41
+ return Array.isArray(answer?.tableModels) ? answer.tableModels : [];
42
+ },
43
+ async stringSetFields() {
44
+ return stringSetFieldsFromSchema(await client.getDocumentSchema(appId, documentId));
45
+ },
46
+ async readPage(model, cursor) {
47
+ const page = await client.queryDocumentRecords(appId, documentId, model, {
48
+ limit: pageSize,
49
+ ...(cursor ? { cursor } : {}),
50
+ });
51
+ return {
52
+ items: (page?.items ?? []),
53
+ nextCursor: page?.nextCursor ?? null,
54
+ };
55
+ },
56
+ };
57
+ }
58
+ //# sourceMappingURL=snapshot-audit-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-audit-source.js","sourceRoot":"","sources":["../../../src/lib/snapshot-audit-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,yBAAyB,GAG1B,MAAM,qBAAqB,CAAC;AAsB7B,MAAM,UAAU,oBAAoB,CAClC,MAAsB,EACtB,OAA8B;IAE9B,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAChD,OAAO;QACL,KAAK,CAAC,KAAK;YACT,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,WAAmB;YAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACvE,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,CAAC,WAAW;YACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC;QAED,KAAK,CAAC,eAAe;YACnB,OAAO,yBAAyB,CAC9B,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAClD,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,MAAe;YAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;gBACvE,KAAK,EAAE,QAAQ;gBACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B,CAAC,CAAC;YACH,OAAO;gBACL,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAmC;gBAC5D,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI;aACrC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * The audit's local reconstruction, over js-bao's own Node SQLite store
3
+ * (#3433, criterion 10).
4
+ *
5
+ * This is the half of the audit that must NOT be a reimplementation: the base
6
+ * is materialised by the checked-in loader and the overlays are folded by the
7
+ * client's own fold, so what the audit compares with the table is what a
8
+ * browser would have computed from the same artifacts. A hand-rolled fold here
9
+ * would make the audit agree with itself rather than with a client.
10
+ *
11
+ * Everything lives in one throwaway SQLite file, removed when the audit ends —
12
+ * including the `audit_seen` table, which is what keeps memory to one page
13
+ * plus the store: the ids the table has already shown are marked rather than
14
+ * held.
15
+ */
16
+ import type { AuditLocalStore } from "./snapshot-audit.js";
17
+ import type { ManifestLike } from "./snapshot-manifest-layout.js";
18
+ /**
19
+ * The fence's reader: how far one overlay update has got, deletions included.
20
+ *
21
+ * A state vector alone is NOT that. It carries one clock per client and a Yjs
22
+ * deletion creates no struct, so removing a key leaves it exactly where it
23
+ * was — and a legacy nested-map record deleted between the audit's capture and
24
+ * its comparison would then pass the fence and be reported as a record only
25
+ * the recomputed chain holds, which is corruption's own signature (finding
26
+ * 3433-C05; the deletion shape is pinned by `large-document-snapshot-verify`'s
27
+ * E4 case). So the fingerprint is the state vector AND a digest of the
28
+ * update's delete set: every client's deleted ranges, in a fixed order.
29
+ *
30
+ * Yjs is loaded once and handed back as a synchronous function, so the audit's
31
+ * fence stays a plain comparison rather than an awaited one — and so the
32
+ * library itself never has to import Yjs.
33
+ */
34
+ export declare function createChainFingerprintReader(): Promise<(update: Uint8Array) => string>;
35
+ /**
36
+ * The stringset fields a base manifest records, per model.
37
+ *
38
+ * A Map rather than an object because a model's name is data: an undeclared
39
+ * model is whatever `_type` the records route was handed, so `constructor` and
40
+ * `toString` are names this can be asked for, and on a plain object either
41
+ * answers a function off the prototype rather than nothing at all (3433-C11).
42
+ * The manifest is the only record of what a model declares for a model no
43
+ * later overlay touched, which is exactly where these have to come from.
44
+ */
45
+ export declare function stringSetFieldsFromManifest(manifest: ManifestLike): Map<string, Set<string>>;
46
+ /**
47
+ * Build a local store for one audit attempt.
48
+ *
49
+ * A fresh database per attempt by design: an attempt the fence discards must
50
+ * leave nothing behind for the next one to read.
51
+ */
52
+ export declare function createAuditLocalStore(documentId: string): Promise<AuditLocalStore>;