primitive-admin 1.1.0-alpha.6 → 1.1.0-alpha.60

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 (387) hide show
  1. package/README.md +389 -71
  2. package/assets/skill/skills/primitive-platform/SKILL.md +670 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +287 -17
  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 +138 -19
  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 +554 -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 +27 -80
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth.d.ts +2 -0
  16. package/dist/src/commands/auth.js +177 -7
  17. package/dist/src/commands/auth.js.map +1 -1
  18. package/dist/src/commands/blob-buckets.d.ts +2 -0
  19. package/dist/src/commands/blob-buckets.js +330 -0
  20. package/dist/src/commands/blob-buckets.js.map +1 -0
  21. package/dist/src/commands/catalog.d.ts +2 -0
  22. package/dist/src/commands/catalog.js +37 -38
  23. package/dist/src/commands/catalog.js.map +1 -1
  24. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  25. package/dist/src/commands/collection-type-configs.js +92 -0
  26. package/dist/src/commands/collection-type-configs.js.map +1 -0
  27. package/dist/src/commands/collections.d.ts +2 -0
  28. package/dist/src/commands/collections.js +526 -0
  29. package/dist/src/commands/collections.js.map +1 -0
  30. package/dist/src/commands/comparisons.d.ts +2 -0
  31. package/dist/src/commands/comparisons.js +6 -6
  32. package/dist/src/commands/comparisons.js.map +1 -1
  33. package/dist/src/commands/config.d.ts +35 -0
  34. package/dist/src/commands/config.js +437 -0
  35. package/dist/src/commands/config.js.map +1 -0
  36. package/dist/src/commands/connections.d.ts +2 -0
  37. package/dist/src/commands/connections.js +100 -0
  38. package/dist/src/commands/connections.js.map +1 -0
  39. package/dist/src/commands/cron-triggers.d.ts +2 -0
  40. package/dist/src/commands/cron-triggers.js +204 -0
  41. package/dist/src/commands/cron-triggers.js.map +1 -0
  42. package/dist/src/commands/database-types.d.ts +2 -0
  43. package/dist/src/commands/database-types.js +171 -0
  44. package/dist/src/commands/database-types.js.map +1 -0
  45. package/dist/src/commands/databases.d.ts +65 -0
  46. package/dist/src/commands/databases.js +2153 -96
  47. package/dist/src/commands/databases.js.map +1 -1
  48. package/dist/src/commands/documents.d.ts +2 -0
  49. package/dist/src/commands/documents.js +1230 -19
  50. package/dist/src/commands/documents.js.map +1 -1
  51. package/dist/src/commands/email-templates.d.ts +2 -0
  52. package/dist/src/commands/email-templates.js +174 -0
  53. package/dist/src/commands/email-templates.js.map +1 -0
  54. package/dist/src/commands/env.d.ts +12 -0
  55. package/dist/src/commands/env.js +260 -0
  56. package/dist/src/commands/env.js.map +1 -0
  57. package/dist/src/commands/group-type-configs.d.ts +2 -0
  58. package/dist/src/commands/group-type-configs.js +86 -0
  59. package/dist/src/commands/group-type-configs.js.map +1 -0
  60. package/dist/src/commands/groups.d.ts +2 -0
  61. package/dist/src/commands/groups.js +38 -99
  62. package/dist/src/commands/groups.js.map +1 -1
  63. package/dist/src/commands/guides.d.ts +223 -0
  64. package/dist/src/commands/guides.js +617 -65
  65. package/dist/src/commands/guides.js.map +1 -1
  66. package/dist/src/commands/init.d.ts +17 -0
  67. package/dist/src/commands/init.js +964 -202
  68. package/dist/src/commands/init.js.map +1 -1
  69. package/dist/src/commands/integrations.d.ts +2 -0
  70. package/dist/src/commands/integrations.js +484 -205
  71. package/dist/src/commands/integrations.js.map +1 -1
  72. package/dist/src/commands/llm.d.ts +2 -0
  73. package/dist/src/commands/llm.js +13 -8
  74. package/dist/src/commands/llm.js.map +1 -1
  75. package/dist/src/commands/locks.d.ts +8 -0
  76. package/dist/src/commands/locks.js +160 -0
  77. package/dist/src/commands/locks.js.map +1 -0
  78. package/dist/src/commands/metadata.d.ts +2 -0
  79. package/dist/src/commands/metadata.js +406 -0
  80. package/dist/src/commands/metadata.js.map +1 -0
  81. package/dist/src/commands/prompts.d.ts +2 -0
  82. package/dist/src/commands/prompts.js +135 -355
  83. package/dist/src/commands/prompts.js.map +1 -1
  84. package/dist/src/commands/rule-sets.d.ts +3 -0
  85. package/dist/src/commands/rule-sets.js +271 -0
  86. package/dist/src/commands/rule-sets.js.map +1 -0
  87. package/dist/src/commands/scripts.d.ts +20 -0
  88. package/dist/src/commands/scripts.js +739 -0
  89. package/dist/src/commands/scripts.js.map +1 -0
  90. package/dist/src/commands/secrets.d.ts +2 -0
  91. package/dist/src/commands/secrets.js +108 -0
  92. package/dist/src/commands/secrets.js.map +1 -0
  93. package/dist/src/commands/sessions.d.ts +2 -0
  94. package/dist/src/commands/sessions.js +75 -0
  95. package/dist/src/commands/sessions.js.map +1 -0
  96. package/dist/src/commands/settings.d.ts +18 -0
  97. package/dist/src/commands/settings.js +54 -0
  98. package/dist/src/commands/settings.js.map +1 -0
  99. package/dist/src/commands/skill.d.ts +2 -0
  100. package/dist/src/commands/skill.js +29 -0
  101. package/dist/src/commands/skill.js.map +1 -0
  102. package/dist/src/commands/sync-app-settings.d.ts +125 -0
  103. package/dist/src/commands/sync-app-settings.js +380 -0
  104. package/dist/src/commands/sync-app-settings.js.map +1 -0
  105. package/dist/src/commands/sync.d.ts +958 -0
  106. package/dist/src/commands/sync.js +8954 -812
  107. package/dist/src/commands/sync.js.map +1 -1
  108. package/dist/src/commands/tokens.d.ts +2 -0
  109. package/dist/src/commands/tokens.js +130 -21
  110. package/dist/src/commands/tokens.js.map +1 -1
  111. package/dist/src/commands/users.d.ts +2 -0
  112. package/dist/src/commands/users.js +440 -22
  113. package/dist/src/commands/users.js.map +1 -1
  114. package/dist/src/commands/vars.d.ts +8 -0
  115. package/dist/src/commands/vars.js +96 -0
  116. package/dist/src/commands/vars.js.map +1 -0
  117. package/dist/src/commands/waitlist.d.ts +2 -0
  118. package/dist/src/commands/waitlist.js +10 -10
  119. package/dist/src/commands/waitlist.js.map +1 -1
  120. package/dist/src/commands/webhooks.d.ts +2 -0
  121. package/dist/src/commands/webhooks.js +442 -0
  122. package/dist/src/commands/webhooks.js.map +1 -0
  123. package/dist/src/commands/workflows.d.ts +94 -0
  124. package/dist/src/commands/workflows.js +1581 -448
  125. package/dist/src/commands/workflows.js.map +1 -1
  126. package/dist/src/lib/api-client.d.ts +1814 -0
  127. package/dist/src/lib/api-client.js +1655 -103
  128. package/dist/src/lib/api-client.js.map +1 -1
  129. package/dist/src/lib/app-settings-descriptor.d.ts +130 -0
  130. package/dist/src/lib/app-settings-descriptor.js +262 -0
  131. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  132. package/dist/src/lib/auth-flow.d.ts +8 -0
  133. package/dist/src/lib/batch.d.ts +26 -0
  134. package/dist/src/lib/batch.js +32 -0
  135. package/dist/src/lib/batch.js.map +1 -0
  136. package/dist/src/lib/block-layout.d.ts +160 -0
  137. package/dist/src/lib/block-layout.js +451 -0
  138. package/dist/src/lib/block-layout.js.map +1 -0
  139. package/dist/src/lib/canonical-json.d.ts +12 -0
  140. package/dist/src/lib/canonical-json.js +35 -0
  141. package/dist/src/lib/canonical-json.js.map +1 -0
  142. package/dist/src/lib/channel.d.ts +30 -0
  143. package/dist/src/lib/channel.js +68 -0
  144. package/dist/src/lib/channel.js.map +1 -0
  145. package/dist/src/lib/cli-manifest.d.ts +68 -0
  146. package/dist/src/lib/cli-manifest.js +71 -0
  147. package/dist/src/lib/cli-manifest.js.map +1 -0
  148. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +97 -0
  149. package/dist/src/lib/codegen-shared/generatedFiles.js +184 -0
  150. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  151. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  152. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  153. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  154. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
  155. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
  156. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  157. package/dist/src/lib/config-object-descriptor.d.ts +108 -0
  158. package/dist/src/lib/config-object-descriptor.js +607 -0
  159. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  160. package/dist/src/lib/config-payload.d.ts +85 -0
  161. package/dist/src/lib/config-payload.js +105 -0
  162. package/dist/src/lib/config-payload.js.map +1 -0
  163. package/dist/src/lib/config-surface.d.ts +93 -0
  164. package/dist/src/lib/config-surface.js +178 -0
  165. package/dist/src/lib/config-surface.js.map +1 -0
  166. package/dist/src/lib/config-toml.d.ts +10 -0
  167. package/dist/src/lib/config-toml.js +42 -0
  168. package/dist/src/lib/config-toml.js.map +1 -0
  169. package/dist/src/lib/config.d.ts +53 -0
  170. package/dist/src/lib/config.js +92 -53
  171. package/dist/src/lib/config.js.map +1 -1
  172. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  173. package/dist/src/lib/confirm-prompt.js +110 -0
  174. package/dist/src/lib/confirm-prompt.js.map +1 -0
  175. package/dist/src/lib/constants.d.ts +11 -0
  176. package/dist/src/lib/constants.js +12 -0
  177. package/dist/src/lib/constants.js.map +1 -0
  178. package/dist/src/lib/crash-handlers.d.ts +20 -0
  179. package/dist/src/lib/crash-handlers.js +49 -0
  180. package/dist/src/lib/crash-handlers.js.map +1 -0
  181. package/dist/src/lib/credentials-store.d.ts +89 -0
  182. package/dist/src/lib/credentials-store.js +330 -0
  183. package/dist/src/lib/credentials-store.js.map +1 -0
  184. package/dist/src/lib/csv.d.ts +47 -0
  185. package/dist/src/lib/csv.js +172 -0
  186. package/dist/src/lib/csv.js.map +1 -0
  187. package/dist/src/lib/data-input.d.ts +23 -0
  188. package/dist/src/lib/data-input.js +50 -0
  189. package/dist/src/lib/data-input.js.map +1 -0
  190. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  191. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  192. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  193. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  194. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  195. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  196. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  197. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  198. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  199. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  200. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  201. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  202. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  203. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  204. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  205. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  206. package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
  207. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  208. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  209. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  210. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  211. package/dist/src/lib/env-resolver.d.ts +62 -0
  212. package/dist/src/lib/env-resolver.js +121 -0
  213. package/dist/src/lib/env-resolver.js.map +1 -0
  214. package/dist/src/lib/fetch.d.ts +5 -0
  215. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  216. package/dist/src/lib/generated-allowlist.js +266 -0
  217. package/dist/src/lib/generated-allowlist.js.map +1 -0
  218. package/dist/src/lib/generated-config-surfaces.d.ts +578 -0
  219. package/dist/src/lib/generated-config-surfaces.js +3630 -0
  220. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  221. package/dist/src/lib/generated-template-lint.d.ts +206 -0
  222. package/dist/src/lib/generated-template-lint.js +589 -0
  223. package/dist/src/lib/generated-template-lint.js.map +1 -0
  224. package/dist/src/lib/generated-workflow-model-fields.d.ts +20 -0
  225. package/dist/src/lib/generated-workflow-model-fields.js +53 -0
  226. package/dist/src/lib/generated-workflow-model-fields.js.map +1 -0
  227. package/dist/src/lib/google-client-secret-status.d.ts +35 -0
  228. package/dist/src/lib/google-client-secret-status.js +56 -0
  229. package/dist/src/lib/google-client-secret-status.js.map +1 -0
  230. package/dist/src/lib/init-config.d.ts +81 -0
  231. package/dist/src/lib/init-config.js +149 -0
  232. package/dist/src/lib/init-config.js.map +1 -0
  233. package/dist/src/lib/log-inspection.d.ts +568 -0
  234. package/dist/src/lib/log-inspection.js +639 -0
  235. package/dist/src/lib/log-inspection.js.map +1 -0
  236. package/dist/src/lib/migration-nag.d.ts +49 -0
  237. package/dist/src/lib/migration-nag.js +163 -0
  238. package/dist/src/lib/migration-nag.js.map +1 -0
  239. package/dist/src/lib/output.d.ts +109 -0
  240. package/dist/src/lib/output.js +191 -8
  241. package/dist/src/lib/output.js.map +1 -1
  242. package/dist/src/lib/package-manager.d.ts +140 -0
  243. package/dist/src/lib/package-manager.js +305 -0
  244. package/dist/src/lib/package-manager.js.map +1 -0
  245. package/dist/src/lib/paginate.d.ts +83 -0
  246. package/dist/src/lib/paginate.js +95 -0
  247. package/dist/src/lib/paginate.js.map +1 -0
  248. package/dist/src/lib/platform-owned.d.ts +51 -0
  249. package/dist/src/lib/platform-owned.js +64 -0
  250. package/dist/src/lib/platform-owned.js.map +1 -0
  251. package/dist/src/lib/project-config.d.ts +97 -0
  252. package/dist/src/lib/project-config.js +219 -0
  253. package/dist/src/lib/project-config.js.map +1 -0
  254. package/dist/src/lib/query-operators.d.ts +43 -0
  255. package/dist/src/lib/query-operators.js +80 -0
  256. package/dist/src/lib/query-operators.js.map +1 -0
  257. package/dist/src/lib/record-filter.d.ts +18 -0
  258. package/dist/src/lib/record-filter.js +55 -0
  259. package/dist/src/lib/record-filter.js.map +1 -0
  260. package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
  261. package/dist/src/lib/refresh-admin-credentials.js +103 -0
  262. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  263. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  264. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  265. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  266. package/dist/src/lib/resolve-init-server.d.ts +71 -0
  267. package/dist/src/lib/resolve-init-server.js +94 -0
  268. package/dist/src/lib/resolve-init-server.js.map +1 -0
  269. package/dist/src/lib/resolve-platform.d.ts +45 -0
  270. package/dist/src/lib/resolve-platform.js +43 -0
  271. package/dist/src/lib/resolve-platform.js.map +1 -0
  272. package/dist/src/lib/run-status.d.ts +19 -0
  273. package/dist/src/lib/run-status.generated.d.ts +39 -0
  274. package/dist/src/lib/run-status.generated.js +66 -0
  275. package/dist/src/lib/run-status.generated.js.map +1 -0
  276. package/dist/src/lib/run-status.js +19 -0
  277. package/dist/src/lib/run-status.js.map +1 -0
  278. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  279. package/dist/src/lib/signing-secret-status.js +116 -0
  280. package/dist/src/lib/signing-secret-status.js.map +1 -0
  281. package/dist/src/lib/skill-installer.d.ts +25 -0
  282. package/dist/src/lib/skill-installer.js +266 -0
  283. package/dist/src/lib/skill-installer.js.map +1 -0
  284. package/dist/src/lib/snapshots.d.ts +99 -0
  285. package/dist/src/lib/snapshots.js +357 -0
  286. package/dist/src/lib/snapshots.js.map +1 -0
  287. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +100 -0
  288. package/dist/src/lib/swift-codegen/dbGenerator.js +682 -0
  289. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  290. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  291. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  292. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  293. package/dist/src/lib/swift-codegen/generator.d.ts +85 -0
  294. package/dist/src/lib/swift-codegen/generator.js +266 -0
  295. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  296. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
  297. package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
  298. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  299. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +90 -0
  300. package/dist/src/lib/swift-codegen/siblingSymbols.js +152 -0
  301. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  302. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  303. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  304. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  305. package/dist/src/lib/sync-paths.d.ts +72 -0
  306. package/dist/src/lib/sync-paths.js +130 -0
  307. package/dist/src/lib/sync-paths.js.map +1 -0
  308. package/dist/src/lib/sync-resource-types.d.ts +445 -0
  309. package/dist/src/lib/sync-resource-types.js +812 -0
  310. package/dist/src/lib/sync-resource-types.js.map +1 -0
  311. package/dist/src/lib/sync-selectors.d.ts +95 -0
  312. package/dist/src/lib/sync-selectors.js +228 -0
  313. package/dist/src/lib/sync-selectors.js.map +1 -0
  314. package/dist/src/lib/template.d.ts +121 -0
  315. package/dist/src/lib/template.js +447 -67
  316. package/dist/src/lib/template.js.map +1 -1
  317. package/dist/src/lib/token-inject.d.ts +56 -0
  318. package/dist/src/lib/token-inject.js +204 -0
  319. package/dist/src/lib/token-inject.js.map +1 -0
  320. package/dist/src/lib/toml-database-config.d.ts +123 -0
  321. package/dist/src/lib/toml-database-config.js +527 -0
  322. package/dist/src/lib/toml-database-config.js.map +1 -0
  323. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  324. package/dist/src/lib/toml-metadata-config.js +476 -0
  325. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  326. package/dist/src/lib/toml-native-form.d.ts +46 -0
  327. package/dist/src/lib/toml-native-form.js +78 -0
  328. package/dist/src/lib/toml-native-form.js.map +1 -0
  329. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  330. package/dist/src/lib/toml-params-validator.js +298 -0
  331. package/dist/src/lib/toml-params-validator.js.map +1 -0
  332. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  333. package/dist/src/lib/toml-scalar-edit.js +283 -0
  334. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  335. package/dist/src/lib/user-selector.d.ts +24 -0
  336. package/dist/src/lib/user-selector.js +33 -0
  337. package/dist/src/lib/user-selector.js.map +1 -0
  338. package/dist/src/lib/version-check.d.ts +35 -0
  339. package/dist/src/lib/version-check.js +241 -0
  340. package/dist/src/lib/version-check.js.map +1 -0
  341. package/dist/src/lib/watch.d.ts +121 -0
  342. package/dist/src/lib/watch.js +169 -0
  343. package/dist/src/lib/watch.js.map +1 -0
  344. package/dist/src/lib/workflow-apply.d.ts +51 -0
  345. package/dist/src/lib/workflow-apply.js +89 -0
  346. package/dist/src/lib/workflow-apply.js.map +1 -0
  347. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  348. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  349. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  350. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  351. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  352. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  353. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +83 -0
  354. package/dist/src/lib/workflow-codegen/invokerIR.js +71 -0
  355. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  356. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  357. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  358. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  359. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  360. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  361. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  362. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  363. package/dist/src/lib/workflow-config-apply.js +137 -0
  364. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  365. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  366. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  367. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  368. package/dist/src/lib/workflow-field-descriptor.d.ts +91 -0
  369. package/dist/src/lib/workflow-field-descriptor.js +153 -0
  370. package/dist/src/lib/workflow-field-descriptor.js.map +1 -0
  371. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  372. package/dist/src/lib/workflow-fragments.js +342 -0
  373. package/dist/src/lib/workflow-fragments.js.map +1 -0
  374. package/dist/src/lib/workflow-include-preserve.d.ts +71 -0
  375. package/dist/src/lib/workflow-include-preserve.js +153 -0
  376. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  377. package/dist/src/lib/workflow-payload.d.ts +86 -0
  378. package/dist/src/lib/workflow-payload.js +168 -0
  379. package/dist/src/lib/workflow-payload.js.map +1 -0
  380. package/dist/src/lib/workflow-toml-validator.d.ts +199 -0
  381. package/dist/src/lib/workflow-toml-validator.js +754 -0
  382. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  383. package/dist/src/types/index.d.ts +533 -0
  384. package/dist/src/validators.d.ts +65 -0
  385. package/dist/src/validators.js +64 -0
  386. package/dist/src/validators.js.map +1 -0
  387. package/package.json +32 -6
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `primitive config` — the local TOML authoring surface (issue #2645).
3
+ *
4
+ * Server-side configuration is authored in TOML and applied with `sync push`,
5
+ * so the commands that replaced the eleven config-setting flags are these
6
+ * three: `fields` documents the surface that per-flag `--help` used to, `new`
7
+ * scaffolds an object, and `set` edits one key from a script.
8
+ *
9
+ * They live under `config` rather than under `sync` because none of them
10
+ * touches the network. `sync` is reconciliation — `pull`, `diff`, `status`,
11
+ * `push` all talk to the server — and a local file edit spelled as a `sync`
12
+ * verb reads as one. The three-way split the spec settles on is: the
13
+ * per-surface groups (`workflows`, `webhooks`, …) read and operate, `config`
14
+ * authors the local files, `sync` reconciles repo and server.
15
+ */
16
+ import { Command } from "commander";
17
+ import { type ConfigObjectDescriptor } from "../lib/config-object-descriptor.js";
18
+ /**
19
+ * Why `value` cannot be what `path` declares, or `null` when it can.
20
+ *
21
+ * `config set` used to check only that a path was DECLARED, so
22
+ * `integration.timeoutMs=fast` wrote a string into a number field and the
23
+ * mistake surfaced as a server error on the next push. The descriptor exists to
24
+ * carry what per-flag `--help` used to carry (criterion 7), and that has to
25
+ * include the type — otherwise removing the flags traded a fast local error for
26
+ * a slow remote one.
27
+ *
28
+ * Deliberately silent about anything it cannot judge: an undeclared path (the
29
+ * declared-path check owns that message — two errors for one mistake is worse
30
+ * than one), the interior of a `table` / `table[]` / `json` field, and a var
31
+ * file's own keys. Those shapes belong to the server, and mirroring them here
32
+ * would be a second copy that goes stale.
33
+ */
34
+ export declare function fieldTypeMismatch(descriptor: ConfigObjectDescriptor, path: string, value: string | number | boolean): string | null;
35
+ export declare function registerConfigCommands(program: Command): void;
@@ -0,0 +1,437 @@
1
+ /**
2
+ * `primitive config` — the local TOML authoring surface (issue #2645).
3
+ *
4
+ * Server-side configuration is authored in TOML and applied with `sync push`,
5
+ * so the commands that replaced the eleven config-setting flags are these
6
+ * three: `fields` documents the surface that per-flag `--help` used to, `new`
7
+ * scaffolds an object, and `set` edits one key from a script.
8
+ *
9
+ * They live under `config` rather than under `sync` because none of them
10
+ * touches the network. `sync` is reconciliation — `pull`, `diff`, `status`,
11
+ * `push` all talk to the server — and a local file edit spelled as a `sync`
12
+ * verb reads as one. The three-way split the spec settles on is: the
13
+ * per-surface groups (`workflows`, `webhooks`, …) read and operate, `config`
14
+ * authors the local files, `sync` reconciles repo and server.
15
+ */
16
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
17
+ import { join, basename } from "path";
18
+ import chalk from "chalk";
19
+ import { resolveAppId } from "../lib/config.js";
20
+ import { resolveSyncDir, isAutoResolvedSyncDir } from "../lib/sync-paths.js";
21
+ import { CONFIG_OBJECT_DESCRIPTORS, getConfigObjectDescriptor, } from "../lib/config-object-descriptor.js";
22
+ import { PUSH_PRUNE_SPECS, isSafeSyncFilename, } from "../lib/sync-resource-types.js";
23
+ import { platformOwnedAuthoringError } from "../lib/platform-owned.js";
24
+ import { filesDeclaringKey } from "../lib/sync-selectors.js";
25
+ import { setTomlScalar, parseScalarLiteral, TomlEditError, } from "../lib/toml-scalar-edit.js";
26
+ import { success, error, info, keyValue, divider, json } from "../lib/output.js";
27
+ function ensureDir(dirPath) {
28
+ if (!existsSync(dirPath)) {
29
+ mkdirSync(dirPath, { recursive: true });
30
+ }
31
+ }
32
+ /**
33
+ * The sync slot for a LOCAL command (issue #2645).
34
+ *
35
+ * `config new`, `config set` and `config fields` never call the API, so an explicit
36
+ * `--dir` is enough on its own — resolving an app id first would make them
37
+ * require a login they do not need. Without `--dir` they fall back to the same
38
+ * per-environment slot every other sync command uses.
39
+ */
40
+ function resolveLocalSyncDir(appId, options) {
41
+ if (options.dir)
42
+ return options.dir;
43
+ // Outside a project there is no per-app slot: `resolveSyncDir` answers
44
+ // `./config` whatever the app id is. Resolving one anyway would exit these
45
+ // commands with "No app specified" for want of a login they never use — and
46
+ // scaffolding a file before you have an app is exactly the order the
47
+ // TOML-only path asks for (`config new`, edit, `sync push`).
48
+ if (!isAutoResolvedSyncDir(undefined)) {
49
+ return resolveSyncDir({ appId: "", userDir: undefined });
50
+ }
51
+ const resolvedAppId = resolveAppId(appId, options);
52
+ const configDir = resolveSyncDir({ appId: resolvedAppId, userDir: undefined });
53
+ info(`Using per-environment sync directory: ${configDir}`);
54
+ return configDir;
55
+ }
56
+ /**
57
+ * The `--only` selector key for a file — the key `sync push` itself derives.
58
+ *
59
+ * Not always the file name: a metadata-category config lives at
60
+ * `<resourceType>.<category>.toml` but is keyed by the `resourceType#category`
61
+ * pair, so telling the user to push `--only metadata-category-config/<basename>`
62
+ * would print a command that resolves to nothing.
63
+ */
64
+ function pushSelectorKey(descriptor, filePath) {
65
+ const spec = PUSH_PRUNE_SPECS.find((s) => s.resourceType.label === descriptor.type);
66
+ return spec ? spec.keyFromFile(filePath) : basename(filePath, ".toml");
67
+ }
68
+ /** Every configurable type name, for an error message. */
69
+ function configTypeList() {
70
+ return CONFIG_OBJECT_DESCRIPTORS.map((d) => d.type).join(", ");
71
+ }
72
+ function requireConfigDescriptor(type) {
73
+ const descriptor = getConfigObjectDescriptor(type);
74
+ if (!descriptor) {
75
+ error(`Unknown configuration type '${type}'. Configurable types: ${configTypeList()}`);
76
+ process.exit(1);
77
+ }
78
+ return descriptor;
79
+ }
80
+ /**
81
+ * Whether `path` names something the type declares.
82
+ *
83
+ * An exact field match is obvious. A declared `table` / `table[]` / `json`
84
+ * field also covers everything BELOW it — `requestConfig.method`,
85
+ * `verification.jwt.header`, `vars.API_BASE_URL` — because those subtrees are
86
+ * free-form by design and enumerating them would be a second, always-stale
87
+ * copy of the server's shape.
88
+ */
89
+ function isDeclaredFieldPath(descriptor, path) {
90
+ // `vars.toml` is a flat table of the app's own keys — every root-level key is
91
+ // legitimate, and the key format is validated by the push preflight.
92
+ if (descriptor.freeFormRootKeys && !path.includes("."))
93
+ return true;
94
+ for (const field of descriptor.fields) {
95
+ if (field.path === path)
96
+ return true;
97
+ if ((field.type === "table" || field.type === "table[]" || field.type === "json") &&
98
+ path.startsWith(`${field.path}.`)) {
99
+ return true;
100
+ }
101
+ }
102
+ return false;
103
+ }
104
+ /**
105
+ * Why `value` cannot be what `path` declares, or `null` when it can.
106
+ *
107
+ * `config set` used to check only that a path was DECLARED, so
108
+ * `integration.timeoutMs=fast` wrote a string into a number field and the
109
+ * mistake surfaced as a server error on the next push. The descriptor exists to
110
+ * carry what per-flag `--help` used to carry (criterion 7), and that has to
111
+ * include the type — otherwise removing the flags traded a fast local error for
112
+ * a slow remote one.
113
+ *
114
+ * Deliberately silent about anything it cannot judge: an undeclared path (the
115
+ * declared-path check owns that message — two errors for one mistake is worse
116
+ * than one), the interior of a `table` / `table[]` / `json` field, and a var
117
+ * file's own keys. Those shapes belong to the server, and mirroring them here
118
+ * would be a second copy that goes stale.
119
+ */
120
+ export function fieldTypeMismatch(descriptor, path, value) {
121
+ const field = descriptor.fields.find((f) => f.path === path);
122
+ if (!field)
123
+ return null;
124
+ const expected = field.type === "number" || field.type === "boolean" || field.type === "string"
125
+ ? field.type
126
+ : null;
127
+ if (!expected || typeof value === expected)
128
+ return null;
129
+ return (`'${path}' is declared ${expected}, but '${value}' is a ${typeof value}. ` +
130
+ `Run 'primitive config fields ${descriptor.type}' to see the surface.`);
131
+ }
132
+ /**
133
+ * Resolve a `config set` target to the file it edits.
134
+ *
135
+ * Accepts `<type>/<key>` for the 13 per-entity types, plus the two root
136
+ * singletons by name: `app` (`app.toml`) and `vars` (`vars.toml`, whose keys
137
+ * are addressed as `vars.<KEY>`).
138
+ *
139
+ * The key is resolved the way `sync push --only` resolves it — by the identity
140
+ * the local files DECLARE, falling back to the conventional file name when no
141
+ * file declares it. `config set` and the push that follows it have to agree about
142
+ * which object `<type>/<key>` is; resolving by file name alone meant a renamed
143
+ * file (`custom.toml` declaring `workflow.key = "greeting"`) could not be
144
+ * edited as `workflow/greeting` at all, while `workflow/custom` edited a file
145
+ * push would apply under a different key (issue #2645, review follow-up).
146
+ */
147
+ function resolveSetTarget(selector, configDir) {
148
+ if (selector === "app") {
149
+ return {
150
+ descriptor: requireConfigDescriptor("app"),
151
+ filePath: join(configDir, "app.toml"),
152
+ };
153
+ }
154
+ if (selector === "vars" || selector === "var") {
155
+ return {
156
+ descriptor: requireConfigDescriptor("var"),
157
+ filePath: join(configDir, "vars.toml"),
158
+ };
159
+ }
160
+ const slash = selector.indexOf("/");
161
+ if (slash === -1) {
162
+ error(`'${selector}' is not a configuration object. Use <type>/<key>, app, or vars. Types: ${configTypeList()}`);
163
+ process.exit(1);
164
+ }
165
+ const type = selector.slice(0, slash);
166
+ const key = selector.slice(slash + 1);
167
+ const descriptor = requireConfigDescriptor(type);
168
+ if (!descriptor.resourceType) {
169
+ error(`'${type}' is a single file — use '${type === "app" ? "app" : "vars"}' with no key`);
170
+ process.exit(1);
171
+ }
172
+ if (!key) {
173
+ error(`'${selector}': name the object, e.g. ${type}/<key>`);
174
+ process.exit(1);
175
+ }
176
+ const platformOwned = platformOwnedAuthoringError(type, key);
177
+ if (platformOwned) {
178
+ error(platformOwned);
179
+ process.exit(1);
180
+ }
181
+ const filename = descriptor.resourceType.fileFromKey(key);
182
+ // The key is a command-line argument, so it must never be able to steer the
183
+ // edit out of the type's directory — `workflow/../app` would otherwise let
184
+ // `config set` rewrite a file the operator did not name. Same guard `config new`
185
+ // applies before a write and prune applies before an unlink. Checked before
186
+ // the directory scan below so a traversing key never reaches the filesystem.
187
+ if (!isSafeSyncFilename(filename)) {
188
+ error(`'${key}' is not a usable key — it would edit outside ${descriptor.resourceType.dir}/.`);
189
+ process.exit(1);
190
+ }
191
+ const declaring = filesDeclaringKey(configDir, descriptor.type, key);
192
+ if (declaring.length > 1) {
193
+ error(`'${selector}' is declared by ${declaring.length} files (${declaring
194
+ .map((p) => basename(p))
195
+ .join(", ")}) — one key, one file. Remove or re-key the duplicates, then retry.`);
196
+ process.exit(1);
197
+ }
198
+ // No local file declares the key: fall back to the conventional path, so the
199
+ // "no local file at …" error names where `sync pull` / `config new` would put it.
200
+ const filePath = declaring[0] ?? join(configDir, descriptor.resourceType.dir, filename);
201
+ // A file may declare a key other than its name, including a platform-owned
202
+ // one. Push skips those (#1660), so editing one is an edit that can never be
203
+ // applied — refuse it by the key the file DECLARES, not only by the one the
204
+ // operator typed.
205
+ const declaredKey = pushSelectorKey(descriptor, filePath);
206
+ const declaredPlatformOwned = declaredKey === key
207
+ ? null
208
+ : platformOwnedAuthoringError(descriptor.type, declaredKey);
209
+ if (declaredPlatformOwned) {
210
+ error(declaredPlatformOwned);
211
+ process.exit(1);
212
+ }
213
+ return { descriptor, filePath };
214
+ }
215
+ export function registerConfigCommands(program) {
216
+ const config = program
217
+ .command("config")
218
+ .description("Author configuration files locally (no API call)")
219
+ .addHelpText("after", `
220
+ Configuration is authored in TOML and applied with 'primitive sync push'.
221
+ These commands only read and write local files — nothing here contacts the
222
+ server, so they work before you have an app, and a script can edit a file
223
+ without a login.
224
+
225
+ Examples:
226
+ $ primitive config fields workflow
227
+ $ primitive config new workflow order-intake
228
+ $ primitive config set workflow/order-intake workflow.status=active
229
+ $ primitive sync push --only workflow/order-intake
230
+ `);
231
+ // ── The TOML authoring surface (issue #2645) ─────────────────────────────
232
+ //
233
+ // Server-side configuration is authored in TOML and applied with `sync push`.
234
+ // These three commands are what replaced the config-setting flags: `fields`
235
+ // documents the surface that per-flag `--help` used to, `new` scaffolds an
236
+ // object without an API call, and `set` edits one key from a script. None of
237
+ // them touches the network.
238
+ config
239
+ .command("fields")
240
+ .description("List a configuration type's TOML keys, types, required and default")
241
+ .argument("<type>", `Configuration type (${CONFIG_OBJECT_DESCRIPTORS.length} available)`)
242
+ .option("--json", "Output as JSON")
243
+ .addHelpText("after", `
244
+ Types:
245
+ ${CONFIG_OBJECT_DESCRIPTORS.map((d) => `${d.type} — ${d.description}`).join("\n ")}
246
+
247
+ Examples:
248
+ $ primitive config fields workflow
249
+ $ primitive config fields webhook --json
250
+ `)
251
+ .action(async (type, options) => {
252
+ const descriptor = requireConfigDescriptor(type);
253
+ const asJson = (f) => ({
254
+ path: f.path,
255
+ type: f.type,
256
+ required: f.required,
257
+ default: f.default ?? null,
258
+ description: f.description,
259
+ });
260
+ if (options.json) {
261
+ json({
262
+ type: descriptor.type,
263
+ file: descriptor.fileHint,
264
+ description: descriptor.description,
265
+ identity: descriptor.identity ?? null,
266
+ fields: descriptor.fields.map(asJson),
267
+ // A type authored across more than one file reports the other files
268
+ // too — the workflow's named-config sidecars are the whole of what
269
+ // the removed `workflows configs` verbs used to set (issue #2645).
270
+ companionFiles: (descriptor.companionFiles ?? []).map((companion) => ({
271
+ file: companion.fileHint,
272
+ description: companion.description,
273
+ fields: companion.fields.map(asJson),
274
+ })),
275
+ });
276
+ return;
277
+ }
278
+ keyValue("Type", descriptor.type);
279
+ keyValue("File", descriptor.fileHint);
280
+ keyValue("About", descriptor.description);
281
+ divider();
282
+ if (descriptor.freeFormRootKeys) {
283
+ info(`${descriptor.fileHint} is a flat table of your own keys — KEY = "value" at the root, matching ^[A-Z][A-Z0-9_]{0,63}$. There is no fixed field surface.`);
284
+ return;
285
+ }
286
+ if (descriptor.fields.length === 0) {
287
+ info(`${descriptor.fileHint} is a script body, not a table of keys — there is no field surface to list.`);
288
+ return;
289
+ }
290
+ const printField = (field) => {
291
+ const flags = [
292
+ field.required ? "required" : "optional",
293
+ field.default === undefined ? null : `default ${JSON.stringify(field.default)}`,
294
+ ]
295
+ .filter(Boolean)
296
+ .join(", ");
297
+ console.log(` ${chalk.cyan(field.path)} ${chalk.dim(field.type)} ${chalk.dim(`(${flags})`)}`);
298
+ console.log(` ${field.description}`);
299
+ };
300
+ for (const field of descriptor.fields) {
301
+ printField(field);
302
+ }
303
+ // The rest of the object's surface, where it spans more than one file.
304
+ // `config set` addresses the main file only, so these are listed rather
305
+ // than folded in — but leaving them out would under-report exactly what
306
+ // the removed `workflows configs` flags used to document (issue #2645).
307
+ for (const companion of descriptor.companionFiles ?? []) {
308
+ divider();
309
+ keyValue("File", companion.fileHint);
310
+ info(companion.description);
311
+ for (const field of companion.fields) {
312
+ printField(field);
313
+ }
314
+ }
315
+ divider();
316
+ info(`Edit ${descriptor.fileHint}, then run 'primitive sync push'.`);
317
+ });
318
+ config
319
+ .command("new")
320
+ .description("Scaffold a configuration file locally (no API call)")
321
+ .argument("<type>", "Configuration type — see 'primitive config fields'")
322
+ .argument("<key>", "The object's key; it becomes the file name")
323
+ .option("--app <app-id>", "App ID")
324
+ .option("--dir <path>", "Config directory (overrides the auto-resolved per-env path)")
325
+ .addHelpText("after", `
326
+ Creates the file from the type's defaults and stops there — nothing is sent to
327
+ the server until you edit the file and run 'primitive sync push'.
328
+
329
+ Examples:
330
+ $ primitive config new workflow order-intake
331
+ $ primitive config new webhook stripe-events
332
+ $ primitive sync push --only workflow/order-intake
333
+ `)
334
+ .action(async (type, key, options) => {
335
+ const descriptor = requireConfigDescriptor(type);
336
+ if (!descriptor.resourceType) {
337
+ error(`${descriptor.type} is a root singleton (${descriptor.fileHint}) — it is not created per key. Run 'primitive sync pull' to write it.`);
338
+ process.exit(1);
339
+ }
340
+ const platformOwned = platformOwnedAuthoringError(descriptor.type, key);
341
+ if (platformOwned) {
342
+ error(platformOwned);
343
+ process.exit(1);
344
+ }
345
+ const configDir = resolveLocalSyncDir(undefined, options);
346
+ const dir = join(configDir, descriptor.resourceType.dir);
347
+ const filename = descriptor.resourceType.fileFromKey(key);
348
+ // The key comes from the command line, so it must never be able to steer
349
+ // a write out of the slot — the same guard the prune path applies before
350
+ // an unlink.
351
+ if (!isSafeSyncFilename(filename)) {
352
+ error(`'${key}' is not a usable key — it would write outside ${dir}.`);
353
+ process.exit(1);
354
+ }
355
+ const filePath = join(dir, filename);
356
+ if (existsSync(filePath)) {
357
+ error(`${descriptor.resourceType.dir}/${descriptor.resourceType.fileFromKey(key)} already exists — edit it, or pick another key.`);
358
+ process.exit(1);
359
+ }
360
+ ensureDir(dir);
361
+ writeFileSync(filePath, descriptor.scaffold(key));
362
+ success(`Created ${filePath}`);
363
+ info(`Next: edit it, then 'primitive sync push --only ${descriptor.type}/${pushSelectorKey(descriptor, filePath)}'.`);
364
+ });
365
+ config
366
+ .command("set")
367
+ .description("Set a field in a configuration file locally (no API call)")
368
+ .argument("<object>", "<type>/<key>, app, or vars")
369
+ .argument("<assignments...>", "One or more <path>=<value>, e.g. workflow.status=active")
370
+ .option("--app <app-id>", "App ID")
371
+ .option("--dir <path>", "Config directory (overrides the auto-resolved per-env path)")
372
+ .addHelpText("after", `
373
+ Edits the file in place, preserving comments and key order, and writes nothing
374
+ to the server. Only scalars are settable — a table or an array is edited in the
375
+ file directly.
376
+
377
+ 'true'/'false' and numeric values are written with those types; wrap a value in
378
+ double quotes to force a string.
379
+
380
+ Examples:
381
+ $ primitive config set workflow/order-intake workflow.status=active
382
+ $ primitive sync push --only workflow/order-intake
383
+ `)
384
+ .action(async (object, assignments, options) => {
385
+ const configDir = resolveLocalSyncDir(undefined, options);
386
+ const { descriptor, filePath } = resolveSetTarget(object, configDir);
387
+ if (!existsSync(filePath)) {
388
+ error(`No local file at ${filePath}. Run 'primitive sync pull' to fetch it, or 'primitive config new ${descriptor.type} <key>' to create one.`);
389
+ process.exit(1);
390
+ }
391
+ let text = readFileSync(filePath, "utf-8");
392
+ const applied = [];
393
+ for (const assignment of assignments) {
394
+ const eq = assignment.indexOf("=");
395
+ if (eq <= 0) {
396
+ error(`'${assignment}' is not <path>=<value>, e.g. workflow.status=active`);
397
+ process.exit(1);
398
+ }
399
+ const path = assignment.slice(0, eq).trim();
400
+ const raw = assignment.slice(eq + 1);
401
+ if (!isDeclaredFieldPath(descriptor, path)) {
402
+ error(`'${path}' is not a ${descriptor.type} field. Run 'primitive config fields ${descriptor.type}' to see the surface.`);
403
+ process.exit(1);
404
+ }
405
+ const value = parseScalarLiteral(raw);
406
+ const typeError = fieldTypeMismatch(descriptor, path, value);
407
+ if (typeError) {
408
+ error(typeError);
409
+ process.exit(1);
410
+ }
411
+ try {
412
+ text = setTomlScalar(text, path, value);
413
+ }
414
+ catch (e) {
415
+ if (e instanceof TomlEditError) {
416
+ error(`${filePath}: ${e.message}`);
417
+ process.exit(1);
418
+ }
419
+ throw e;
420
+ }
421
+ applied.push(path);
422
+ }
423
+ writeFileSync(filePath, text);
424
+ success(`Updated ${filePath} (${applied.join(", ")})`);
425
+ // The follow-up has to be a command that actually runs: `--only` takes
426
+ // `app`, `var/<KEY>` per var, or `<type>/<key>` where the key is the one
427
+ // push derives from the file — for a metadata-category config that is the
428
+ // `resourceType#category` pair, not the file name.
429
+ const pushTargets = descriptor.type === "app"
430
+ ? ["app"]
431
+ : descriptor.type === "var"
432
+ ? applied.map((path) => `var/${path}`)
433
+ : [`${descriptor.type}/${pushSelectorKey(descriptor, filePath)}`];
434
+ info(`Next: 'primitive sync push --only ${pushTargets.join(",")}' to apply it.`);
435
+ });
436
+ }
437
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerConnectionsCommands(program: Command): void;
@@ -0,0 +1,100 @@
1
+ import { Option } from "commander";
2
+ import { ApiClient } from "../lib/api-client.js";
3
+ import { resolveAppId } from "../lib/config.js";
4
+ import { error, info, formatTable, formatDate, json, } from "../lib/output.js";
5
+ import { resolveUserSelector } from "../lib/user-selector.js";
6
+ export function registerConnectionsCommands(program) {
7
+ const connections = program
8
+ .command("connections")
9
+ .description("Inspect the live WebSocket connections the server believes exist")
10
+ .addHelpText("after", `
11
+ Freshness: these are the connections the server believes are live — exact when a
12
+ client disconnects gracefully, otherwise bounded by each row's EXPIRES time.
13
+
14
+ Each row is a single connection-to-subscription binding, so the same CONNECTION
15
+ can appear on more than one row (one per document/database subscription plus the
16
+ user notification channel).
17
+
18
+ Examples:
19
+ $ primitive connections list --document 01HXY...
20
+ $ primitive connections list --user-id 01HXY...
21
+ $ primitive connections list --database 01HXY... --limit 50
22
+ $ primitive connections list --user-id 01HXY... --json
23
+ `);
24
+ connections
25
+ .command("list")
26
+ .description("List live connections for exactly one of a document, user, or database")
27
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
28
+ .option("--document <document-id>", "List connections for this document")
29
+ .option("--user-id <user-id>", "List connections for this user")
30
+ // Deprecated alias of --user-id, kept accepted but out of --help (#2357).
31
+ .addOption(new Option("--user <user-id>", "Deprecated alias of --user-id").hideHelp())
32
+ .option("--database <database-id>", "List database subscriptions for this database")
33
+ .option("--limit <n>", "Maximum rows to return (default 25, max 100)")
34
+ .option("--cursor <cursor>", "Pagination cursor from a previous page")
35
+ .option("--json", "Output as JSON")
36
+ .action(async (options) => {
37
+ const userId = resolveUserSelector(options, "connections list");
38
+ const selectors = [
39
+ options.document ? "document" : null,
40
+ userId ? "user" : null,
41
+ options.database ? "database" : null,
42
+ ].filter(Boolean);
43
+ if (selectors.length === 0) {
44
+ error("Provide exactly one selector: --document, --user-id, or --database.");
45
+ process.exit(1);
46
+ }
47
+ if (selectors.length > 1) {
48
+ error("Provide only one selector: --document, --user-id, or --database (not more than one).");
49
+ process.exit(1);
50
+ }
51
+ const resolvedAppId = resolveAppId(undefined, options);
52
+ const client = new ApiClient();
53
+ const limit = options.limit ? Number(options.limit) : undefined;
54
+ if (options.limit !== undefined && (!Number.isInteger(limit) || limit <= 0)) {
55
+ error("--limit must be a positive integer.");
56
+ process.exit(1);
57
+ }
58
+ try {
59
+ const { items, nextCursor } = await client.listConnections(resolvedAppId, {
60
+ documentId: options.document,
61
+ userId,
62
+ databaseId: options.database,
63
+ }, { limit, cursor: options.cursor });
64
+ if (options.json) {
65
+ json({ items, nextCursor });
66
+ return;
67
+ }
68
+ if (!items || items.length === 0) {
69
+ info("No live connections found.");
70
+ return;
71
+ }
72
+ // `formatTable`'s per-column `format` receives only the cell value, so
73
+ // derive the composite TARGET column onto each display row up front.
74
+ const rows = items.map((row) => ({
75
+ ...row,
76
+ target: row.kind === "document"
77
+ ? row.documentId
78
+ : row.kind === "database-subscription"
79
+ ? `${row.databaseId} / ${row.subscriptionKey}`
80
+ : "(user channel)",
81
+ }));
82
+ console.log(formatTable(rows, [
83
+ { header: "CONNECTION", key: "connectionId" },
84
+ { header: "KIND", key: "kind" },
85
+ { header: "USER", key: "userId" },
86
+ { header: "TARGET", key: "target" },
87
+ { header: "CONNECTED", key: "connectedAt", format: formatDate },
88
+ { header: "EXPIRES", key: "expiresAt", format: formatDate },
89
+ ]));
90
+ if (nextCursor) {
91
+ info(`More results available. Re-run with --cursor ${nextCursor}`);
92
+ }
93
+ }
94
+ catch (err) {
95
+ error(err.message);
96
+ process.exit(1);
97
+ }
98
+ });
99
+ }
100
+ //# sourceMappingURL=connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/commands/connections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerCronTriggersCommands(program: Command): void;