primitive-admin 1.1.0-alpha.9 → 1.2.0-alpha.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 (609) hide show
  1. package/README.md +530 -116
  2. package/assets/skill/skills/primitive-platform/SKILL.md +295 -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 +1285 -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 +171 -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 +1868 -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 +81 -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 +13 -8
  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/settings.d.ts +18 -0
  112. package/dist/src/commands/settings.js +54 -0
  113. package/dist/src/commands/settings.js.map +1 -0
  114. package/dist/src/commands/skill.d.ts +2 -0
  115. package/dist/src/commands/skill.js +29 -0
  116. package/dist/src/commands/skill.js.map +1 -0
  117. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  118. package/dist/src/commands/sync-app-settings.js +328 -0
  119. package/dist/src/commands/sync-app-settings.js.map +1 -0
  120. package/dist/src/commands/sync.d.ts +2667 -0
  121. package/dist/src/commands/sync.js +17141 -834
  122. package/dist/src/commands/sync.js.map +1 -1
  123. package/dist/src/commands/tokens.d.ts +2 -0
  124. package/dist/src/commands/tokens.js +132 -22
  125. package/dist/src/commands/tokens.js.map +1 -1
  126. package/dist/src/commands/users.d.ts +2 -0
  127. package/dist/src/commands/users.js +542 -24
  128. package/dist/src/commands/users.js.map +1 -1
  129. package/dist/src/commands/vars.d.ts +8 -0
  130. package/dist/src/commands/vars.js +97 -0
  131. package/dist/src/commands/vars.js.map +1 -0
  132. package/dist/src/commands/waitlist.d.ts +2 -0
  133. package/dist/src/commands/waitlist.js +12 -11
  134. package/dist/src/commands/waitlist.js.map +1 -1
  135. package/dist/src/commands/webhooks.d.ts +31 -0
  136. package/dist/src/commands/webhooks.js +633 -0
  137. package/dist/src/commands/webhooks.js.map +1 -0
  138. package/dist/src/commands/workflows.d.ts +88 -0
  139. package/dist/src/commands/workflows.js +1568 -742
  140. package/dist/src/commands/workflows.js.map +1 -1
  141. package/dist/src/lib/access-rule-display.d.ts +21 -0
  142. package/dist/src/lib/access-rule-display.js +34 -0
  143. package/dist/src/lib/access-rule-display.js.map +1 -0
  144. package/dist/src/lib/api-client.d.ts +2513 -0
  145. package/dist/src/lib/api-client.js +2456 -162
  146. package/dist/src/lib/api-client.js.map +1 -1
  147. package/dist/src/lib/app-match-guard.d.ts +44 -0
  148. package/dist/src/lib/app-match-guard.js +72 -0
  149. package/dist/src/lib/app-match-guard.js.map +1 -0
  150. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  151. package/dist/src/lib/app-settings-descriptor.js +583 -0
  152. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  153. package/dist/src/lib/auth-flow.d.ts +8 -0
  154. package/dist/src/lib/batch.d.ts +26 -0
  155. package/dist/src/lib/batch.js +32 -0
  156. package/dist/src/lib/batch.js.map +1 -0
  157. package/dist/src/lib/block-layout.d.ts +160 -0
  158. package/dist/src/lib/block-layout.js +451 -0
  159. package/dist/src/lib/block-layout.js.map +1 -0
  160. package/dist/src/lib/block-selector.d.ts +58 -0
  161. package/dist/src/lib/block-selector.js +92 -0
  162. package/dist/src/lib/block-selector.js.map +1 -0
  163. package/dist/src/lib/canonical-json.d.ts +12 -0
  164. package/dist/src/lib/canonical-json.js +35 -0
  165. package/dist/src/lib/canonical-json.js.map +1 -0
  166. package/dist/src/lib/channel.d.ts +30 -0
  167. package/dist/src/lib/channel.js +68 -0
  168. package/dist/src/lib/channel.js.map +1 -0
  169. package/dist/src/lib/cli-manifest.d.ts +68 -0
  170. package/dist/src/lib/cli-manifest.js +71 -0
  171. package/dist/src/lib/cli-manifest.js.map +1 -0
  172. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  173. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  174. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  175. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  176. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  177. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  178. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
  179. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
  180. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  181. package/dist/src/lib/collection-export.d.ts +212 -0
  182. package/dist/src/lib/collection-export.js +288 -0
  183. package/dist/src/lib/collection-export.js.map +1 -0
  184. package/dist/src/lib/config-json-field.d.ts +28 -0
  185. package/dist/src/lib/config-json-field.js +56 -0
  186. package/dist/src/lib/config-json-field.js.map +1 -0
  187. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  188. package/dist/src/lib/config-object-descriptor.js +740 -0
  189. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  190. package/dist/src/lib/config-payload.d.ts +92 -0
  191. package/dist/src/lib/config-payload.js +161 -0
  192. package/dist/src/lib/config-payload.js.map +1 -0
  193. package/dist/src/lib/config-surface.d.ts +141 -0
  194. package/dist/src/lib/config-surface.js +368 -0
  195. package/dist/src/lib/config-surface.js.map +1 -0
  196. package/dist/src/lib/config-toml.d.ts +10 -0
  197. package/dist/src/lib/config-toml.js +42 -0
  198. package/dist/src/lib/config-toml.js.map +1 -0
  199. package/dist/src/lib/config.d.ts +71 -0
  200. package/dist/src/lib/config.js +71 -68
  201. package/dist/src/lib/config.js.map +1 -1
  202. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  203. package/dist/src/lib/confirm-prompt.js +110 -0
  204. package/dist/src/lib/confirm-prompt.js.map +1 -0
  205. package/dist/src/lib/constants.d.ts +11 -0
  206. package/dist/src/lib/constants.js +12 -0
  207. package/dist/src/lib/constants.js.map +1 -0
  208. package/dist/src/lib/crash-handlers.d.ts +20 -0
  209. package/dist/src/lib/crash-handlers.js +49 -0
  210. package/dist/src/lib/crash-handlers.js.map +1 -0
  211. package/dist/src/lib/credentials-store.d.ts +104 -0
  212. package/dist/src/lib/credentials-store.js +336 -0
  213. package/dist/src/lib/credentials-store.js.map +1 -0
  214. package/dist/src/lib/csv.d.ts +47 -0
  215. package/dist/src/lib/csv.js +172 -0
  216. package/dist/src/lib/csv.js.map +1 -0
  217. package/dist/src/lib/data-input.d.ts +23 -0
  218. package/dist/src/lib/data-input.js +50 -0
  219. package/dist/src/lib/data-input.js.map +1 -0
  220. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  221. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  222. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  223. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  224. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  225. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  226. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  227. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  228. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  229. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  230. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  231. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  232. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  233. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  234. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  235. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  236. package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
  237. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  238. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  239. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  240. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  241. package/dist/src/lib/deprecation.d.ts +22 -0
  242. package/dist/src/lib/deprecation.js +43 -0
  243. package/dist/src/lib/deprecation.js.map +1 -0
  244. package/dist/src/lib/document-export-permissions.d.ts +30 -0
  245. package/dist/src/lib/document-export-permissions.js +54 -0
  246. package/dist/src/lib/document-export-permissions.js.map +1 -0
  247. package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
  248. package/dist/src/lib/document-ingest-artifact.js +505 -0
  249. package/dist/src/lib/document-ingest-artifact.js.map +1 -0
  250. package/dist/src/lib/document-ingest-input.d.ts +51 -0
  251. package/dist/src/lib/document-ingest-input.js +132 -0
  252. package/dist/src/lib/document-ingest-input.js.map +1 -0
  253. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  254. package/dist/src/lib/document-ingest-rows.js +181 -0
  255. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  256. package/dist/src/lib/document-ingest.d.ts +101 -0
  257. package/dist/src/lib/document-ingest.js +384 -0
  258. package/dist/src/lib/document-ingest.js.map +1 -0
  259. package/dist/src/lib/env-resolver-core.d.ts +258 -0
  260. package/dist/src/lib/env-resolver-core.js +447 -0
  261. package/dist/src/lib/env-resolver-core.js.map +1 -0
  262. package/dist/src/lib/env-resolver.d.ts +99 -0
  263. package/dist/src/lib/env-resolver.js +153 -0
  264. package/dist/src/lib/env-resolver.js.map +1 -0
  265. package/dist/src/lib/fetch.d.ts +5 -0
  266. package/dist/src/lib/function-bundle.d.ts +147 -0
  267. package/dist/src/lib/function-bundle.js +341 -0
  268. package/dist/src/lib/function-bundle.js.map +1 -0
  269. package/dist/src/lib/function-collect.d.ts +123 -0
  270. package/dist/src/lib/function-collect.js +610 -0
  271. package/dist/src/lib/function-collect.js.map +1 -0
  272. package/dist/src/lib/function-db-types.d.ts +202 -0
  273. package/dist/src/lib/function-db-types.js +870 -0
  274. package/dist/src/lib/function-db-types.js.map +1 -0
  275. package/dist/src/lib/function-document-types.d.ts +144 -0
  276. package/dist/src/lib/function-document-types.js +370 -0
  277. package/dist/src/lib/function-document-types.js.map +1 -0
  278. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  279. package/dist/src/lib/function-grants-preflight.js +105 -0
  280. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  281. package/dist/src/lib/function-log-lines.d.ts +76 -0
  282. package/dist/src/lib/function-log-lines.js +160 -0
  283. package/dist/src/lib/function-log-lines.js.map +1 -0
  284. package/dist/src/lib/function-log-row.d.ts +29 -0
  285. package/dist/src/lib/function-log-row.js +73 -0
  286. package/dist/src/lib/function-log-row.js.map +1 -0
  287. package/dist/src/lib/function-log-tail.d.ts +132 -0
  288. package/dist/src/lib/function-log-tail.js +262 -0
  289. package/dist/src/lib/function-log-tail.js.map +1 -0
  290. package/dist/src/lib/function-run.d.ts +289 -0
  291. package/dist/src/lib/function-run.js +389 -0
  292. package/dist/src/lib/function-run.js.map +1 -0
  293. package/dist/src/lib/function-schema-codegen.d.ts +143 -0
  294. package/dist/src/lib/function-schema-codegen.js +420 -0
  295. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  296. package/dist/src/lib/function-sync.d.ts +459 -0
  297. package/dist/src/lib/function-sync.js +1258 -0
  298. package/dist/src/lib/function-sync.js.map +1 -0
  299. package/dist/src/lib/function-trigger-listing.d.ts +27 -0
  300. package/dist/src/lib/function-trigger-listing.js +70 -0
  301. package/dist/src/lib/function-trigger-listing.js.map +1 -0
  302. package/dist/src/lib/function-triggers.d.ts +66 -0
  303. package/dist/src/lib/function-triggers.js +285 -0
  304. package/dist/src/lib/function-triggers.js.map +1 -0
  305. package/dist/src/lib/function-typecheck.d.ts +86 -0
  306. package/dist/src/lib/function-typecheck.js +370 -0
  307. package/dist/src/lib/function-typecheck.js.map +1 -0
  308. package/dist/src/lib/function-versions.d.ts +122 -0
  309. package/dist/src/lib/function-versions.js +182 -0
  310. package/dist/src/lib/function-versions.js.map +1 -0
  311. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  312. package/dist/src/lib/generated-allowlist.js +280 -0
  313. package/dist/src/lib/generated-allowlist.js.map +1 -0
  314. package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
  315. package/dist/src/lib/generated-config-surfaces.js +10593 -0
  316. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  317. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  318. package/dist/src/lib/generated-sdk-types.js +13 -0
  319. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  320. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  321. package/dist/src/lib/generated-template-lint.js +624 -0
  322. package/dist/src/lib/generated-template-lint.js.map +1 -0
  323. package/dist/src/lib/generated-workflow-model-fields.d.ts +20 -0
  324. package/dist/src/lib/generated-workflow-model-fields.js +53 -0
  325. package/dist/src/lib/generated-workflow-model-fields.js.map +1 -0
  326. package/dist/src/lib/google-client-secret-status.d.ts +35 -0
  327. package/dist/src/lib/google-client-secret-status.js +56 -0
  328. package/dist/src/lib/google-client-secret-status.js.map +1 -0
  329. package/dist/src/lib/init-adopt.d.ts +16 -0
  330. package/dist/src/lib/init-adopt.js +34 -0
  331. package/dist/src/lib/init-adopt.js.map +1 -0
  332. package/dist/src/lib/init-assets.d.ts +39 -0
  333. package/dist/src/lib/init-assets.js +97 -0
  334. package/dist/src/lib/init-assets.js.map +1 -0
  335. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  336. package/dist/src/lib/init-client-platforms.js +71 -0
  337. package/dist/src/lib/init-client-platforms.js.map +1 -0
  338. package/dist/src/lib/init-config.d.ts +98 -0
  339. package/dist/src/lib/init-config.js +186 -0
  340. package/dist/src/lib/init-config.js.map +1 -0
  341. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  342. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  343. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  344. package/dist/src/lib/init-ios-links.d.ts +91 -0
  345. package/dist/src/lib/init-ios-links.js +219 -0
  346. package/dist/src/lib/init-ios-links.js.map +1 -0
  347. package/dist/src/lib/init-plan.d.ts +80 -0
  348. package/dist/src/lib/init-plan.js +95 -0
  349. package/dist/src/lib/init-plan.js.map +1 -0
  350. package/dist/src/lib/init-production-env.d.ts +48 -0
  351. package/dist/src/lib/init-production-env.js +59 -0
  352. package/dist/src/lib/init-production-env.js.map +1 -0
  353. package/dist/src/lib/init-schema.d.ts +74 -0
  354. package/dist/src/lib/init-schema.js +358 -0
  355. package/dist/src/lib/init-schema.js.map +1 -0
  356. package/dist/src/lib/init-xcode.d.ts +34 -0
  357. package/dist/src/lib/init-xcode.js +138 -0
  358. package/dist/src/lib/init-xcode.js.map +1 -0
  359. package/dist/src/lib/integration-request-config.d.ts +30 -0
  360. package/dist/src/lib/integration-request-config.js +145 -0
  361. package/dist/src/lib/integration-request-config.js.map +1 -0
  362. package/dist/src/lib/integration-selector.d.ts +42 -0
  363. package/dist/src/lib/integration-selector.js +46 -0
  364. package/dist/src/lib/integration-selector.js.map +1 -0
  365. package/dist/src/lib/ios-app-id.d.ts +34 -0
  366. package/dist/src/lib/ios-app-id.js +69 -0
  367. package/dist/src/lib/ios-app-id.js.map +1 -0
  368. package/dist/src/lib/list-options.d.ts +68 -0
  369. package/dist/src/lib/list-options.js +89 -0
  370. package/dist/src/lib/list-options.js.map +1 -0
  371. package/dist/src/lib/local-state.d.ts +55 -0
  372. package/dist/src/lib/local-state.js +167 -0
  373. package/dist/src/lib/local-state.js.map +1 -0
  374. package/dist/src/lib/local-test-cases.d.ts +63 -0
  375. package/dist/src/lib/local-test-cases.js +136 -0
  376. package/dist/src/lib/local-test-cases.js.map +1 -0
  377. package/dist/src/lib/log-inspection.d.ts +710 -0
  378. package/dist/src/lib/log-inspection.js +814 -0
  379. package/dist/src/lib/log-inspection.js.map +1 -0
  380. package/dist/src/lib/logout-admin-session.d.ts +33 -0
  381. package/dist/src/lib/logout-admin-session.js +70 -0
  382. package/dist/src/lib/logout-admin-session.js.map +1 -0
  383. package/dist/src/lib/migration-nag.d.ts +49 -0
  384. package/dist/src/lib/migration-nag.js +164 -0
  385. package/dist/src/lib/migration-nag.js.map +1 -0
  386. package/dist/src/lib/object-status-filter.d.ts +22 -0
  387. package/dist/src/lib/object-status-filter.js +45 -0
  388. package/dist/src/lib/object-status-filter.js.map +1 -0
  389. package/dist/src/lib/output.d.ts +124 -0
  390. package/dist/src/lib/output.js +219 -8
  391. package/dist/src/lib/output.js.map +1 -1
  392. package/dist/src/lib/package-manager.d.ts +140 -0
  393. package/dist/src/lib/package-manager.js +305 -0
  394. package/dist/src/lib/package-manager.js.map +1 -0
  395. package/dist/src/lib/paginate.d.ts +82 -0
  396. package/dist/src/lib/paginate.js +99 -0
  397. package/dist/src/lib/paginate.js.map +1 -0
  398. package/dist/src/lib/platform-owned.d.ts +63 -0
  399. package/dist/src/lib/platform-owned.js +85 -0
  400. package/dist/src/lib/platform-owned.js.map +1 -0
  401. package/dist/src/lib/project-config.d.ts +122 -0
  402. package/dist/src/lib/project-config.js +244 -0
  403. package/dist/src/lib/project-config.js.map +1 -0
  404. package/dist/src/lib/prompt-cost-format.d.ts +11 -0
  405. package/dist/src/lib/prompt-cost-format.js +41 -0
  406. package/dist/src/lib/prompt-cost-format.js.map +1 -0
  407. package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
  408. package/dist/src/lib/prompt-schema-codegen.js +462 -0
  409. package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
  410. package/dist/src/lib/query-operators.d.ts +43 -0
  411. package/dist/src/lib/query-operators.js +80 -0
  412. package/dist/src/lib/query-operators.js.map +1 -0
  413. package/dist/src/lib/record-filter.d.ts +18 -0
  414. package/dist/src/lib/record-filter.js +55 -0
  415. package/dist/src/lib/record-filter.js.map +1 -0
  416. package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
  417. package/dist/src/lib/refresh-admin-credentials.js +123 -0
  418. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  419. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  420. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  421. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  422. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  423. package/dist/src/lib/resolve-init-server.js +77 -0
  424. package/dist/src/lib/resolve-init-server.js.map +1 -0
  425. package/dist/src/lib/resolve-owner.d.ts +19 -0
  426. package/dist/src/lib/resolve-owner.js +20 -0
  427. package/dist/src/lib/resolve-owner.js.map +1 -0
  428. package/dist/src/lib/resolve-platform.d.ts +74 -0
  429. package/dist/src/lib/resolve-platform.js +105 -0
  430. package/dist/src/lib/resolve-platform.js.map +1 -0
  431. package/dist/src/lib/run-status.d.ts +19 -0
  432. package/dist/src/lib/run-status.generated.d.ts +39 -0
  433. package/dist/src/lib/run-status.generated.js +66 -0
  434. package/dist/src/lib/run-status.generated.js.map +1 -0
  435. package/dist/src/lib/run-status.js +19 -0
  436. package/dist/src/lib/run-status.js.map +1 -0
  437. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  438. package/dist/src/lib/server-text-normalization.js +90 -0
  439. package/dist/src/lib/server-text-normalization.js.map +1 -0
  440. package/dist/src/lib/server-url.d.ts +22 -0
  441. package/dist/src/lib/server-url.js +33 -0
  442. package/dist/src/lib/server-url.js.map +1 -0
  443. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  444. package/dist/src/lib/signing-secret-status.js +116 -0
  445. package/dist/src/lib/signing-secret-status.js.map +1 -0
  446. package/dist/src/lib/skill-installer.d.ts +71 -0
  447. package/dist/src/lib/skill-installer.js +441 -0
  448. package/dist/src/lib/skill-installer.js.map +1 -0
  449. package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
  450. package/dist/src/lib/snapshot-audit-source.js +58 -0
  451. package/dist/src/lib/snapshot-audit-source.js.map +1 -0
  452. package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
  453. package/dist/src/lib/snapshot-audit-store.js +196 -0
  454. package/dist/src/lib/snapshot-audit-store.js.map +1 -0
  455. package/dist/src/lib/snapshot-audit.d.ts +207 -0
  456. package/dist/src/lib/snapshot-audit.js +431 -0
  457. package/dist/src/lib/snapshot-audit.js.map +1 -0
  458. package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
  459. package/dist/src/lib/snapshot-build-rows.js +87 -0
  460. package/dist/src/lib/snapshot-build-rows.js.map +1 -0
  461. package/dist/src/lib/snapshot-build.d.ts +50 -0
  462. package/dist/src/lib/snapshot-build.js +111 -0
  463. package/dist/src/lib/snapshot-build.js.map +1 -0
  464. package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
  465. package/dist/src/lib/snapshot-manifest-layout.js +70 -0
  466. package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
  467. package/dist/src/lib/snapshots.d.ts +98 -0
  468. package/dist/src/lib/snapshots.js +294 -0
  469. package/dist/src/lib/snapshots.js.map +1 -0
  470. package/dist/src/lib/step-run-table.d.ts +43 -0
  471. package/dist/src/lib/step-run-table.js +129 -0
  472. package/dist/src/lib/step-run-table.js.map +1 -0
  473. package/dist/src/lib/storage-pending-retry.d.ts +26 -0
  474. package/dist/src/lib/storage-pending-retry.js +42 -0
  475. package/dist/src/lib/storage-pending-retry.js.map +1 -0
  476. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
  477. package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
  478. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
  479. package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
  480. package/dist/src/lib/swift-codegen/banners.js +25 -0
  481. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  482. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  483. package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
  484. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  485. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  486. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  487. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  488. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
  489. package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
  490. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  491. package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
  492. package/dist/src/lib/swift-codegen/generator.js +457 -0
  493. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  494. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
  495. package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
  496. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  497. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  498. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  499. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  500. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  501. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  502. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  503. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  504. package/dist/src/lib/sync-dir-selector.js +30 -0
  505. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  506. package/dist/src/lib/sync-paths.d.ts +128 -0
  507. package/dist/src/lib/sync-paths.js +195 -0
  508. package/dist/src/lib/sync-paths.js.map +1 -0
  509. package/dist/src/lib/sync-resource-types.d.ts +563 -0
  510. package/dist/src/lib/sync-resource-types.js +1073 -0
  511. package/dist/src/lib/sync-resource-types.js.map +1 -0
  512. package/dist/src/lib/sync-selectors.d.ts +138 -0
  513. package/dist/src/lib/sync-selectors.js +289 -0
  514. package/dist/src/lib/sync-selectors.js.map +1 -0
  515. package/dist/src/lib/template.d.ts +170 -0
  516. package/dist/src/lib/template.js +484 -68
  517. package/dist/src/lib/template.js.map +1 -1
  518. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  519. package/dist/src/lib/test-case-file-names.js +91 -0
  520. package/dist/src/lib/test-case-file-names.js.map +1 -0
  521. package/dist/src/lib/test-case-keys.d.ts +29 -0
  522. package/dist/src/lib/test-case-keys.js +55 -0
  523. package/dist/src/lib/test-case-keys.js.map +1 -0
  524. package/dist/src/lib/test-case-variables.d.ts +29 -0
  525. package/dist/src/lib/test-case-variables.js +71 -0
  526. package/dist/src/lib/test-case-variables.js.map +1 -0
  527. package/dist/src/lib/token-inject.d.ts +56 -0
  528. package/dist/src/lib/token-inject.js +204 -0
  529. package/dist/src/lib/token-inject.js.map +1 -0
  530. package/dist/src/lib/toml-database-config.d.ts +123 -0
  531. package/dist/src/lib/toml-database-config.js +544 -0
  532. package/dist/src/lib/toml-database-config.js.map +1 -0
  533. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  534. package/dist/src/lib/toml-metadata-config.js +476 -0
  535. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  536. package/dist/src/lib/toml-native-form.d.ts +46 -0
  537. package/dist/src/lib/toml-native-form.js +78 -0
  538. package/dist/src/lib/toml-native-form.js.map +1 -0
  539. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  540. package/dist/src/lib/toml-params-validator.js +298 -0
  541. package/dist/src/lib/toml-params-validator.js.map +1 -0
  542. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  543. package/dist/src/lib/toml-scalar-edit.js +283 -0
  544. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  545. package/dist/src/lib/user-selector.d.ts +24 -0
  546. package/dist/src/lib/user-selector.js +33 -0
  547. package/dist/src/lib/user-selector.js.map +1 -0
  548. package/dist/src/lib/version-check.d.ts +35 -0
  549. package/dist/src/lib/version-check.js +241 -0
  550. package/dist/src/lib/version-check.js.map +1 -0
  551. package/dist/src/lib/watch.d.ts +121 -0
  552. package/dist/src/lib/watch.js +169 -0
  553. package/dist/src/lib/watch.js.map +1 -0
  554. package/dist/src/lib/web-url.d.ts +40 -0
  555. package/dist/src/lib/web-url.js +76 -0
  556. package/dist/src/lib/web-url.js.map +1 -0
  557. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  558. package/dist/src/lib/webhook-deliver.js +519 -0
  559. package/dist/src/lib/webhook-deliver.js.map +1 -0
  560. package/dist/src/lib/workflow-apply.d.ts +110 -0
  561. package/dist/src/lib/workflow-apply.js +164 -0
  562. package/dist/src/lib/workflow-apply.js.map +1 -0
  563. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  564. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  565. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  566. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  567. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  568. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  569. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  570. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  571. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  572. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  573. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  574. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  575. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  576. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  577. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  578. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  579. package/dist/src/lib/workflow-config-apply.js +137 -0
  580. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  581. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  582. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  583. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  584. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  585. package/dist/src/lib/workflow-defaults.js +41 -0
  586. package/dist/src/lib/workflow-defaults.js.map +1 -0
  587. package/dist/src/lib/workflow-field-descriptor.d.ts +91 -0
  588. package/dist/src/lib/workflow-field-descriptor.js +153 -0
  589. package/dist/src/lib/workflow-field-descriptor.js.map +1 -0
  590. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  591. package/dist/src/lib/workflow-fragments.js +342 -0
  592. package/dist/src/lib/workflow-fragments.js.map +1 -0
  593. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  594. package/dist/src/lib/workflow-include-preserve.js +286 -0
  595. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  596. package/dist/src/lib/workflow-payload.d.ts +98 -0
  597. package/dist/src/lib/workflow-payload.js +178 -0
  598. package/dist/src/lib/workflow-payload.js.map +1 -0
  599. package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
  600. package/dist/src/lib/workflow-toml-validator.js +770 -0
  601. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  602. package/dist/src/lib/workflow-usage.d.ts +196 -0
  603. package/dist/src/lib/workflow-usage.js +310 -0
  604. package/dist/src/lib/workflow-usage.js.map +1 -0
  605. package/dist/src/types/index.d.ts +591 -0
  606. package/dist/src/validators.d.ts +65 -0
  607. package/dist/src/validators.js +64 -0
  608. package/dist/src/validators.js.map +1 -0
  609. package/package.json +34 -9
@@ -0,0 +1,305 @@
1
+ import { existsSync, readdirSync, realpathSync } from "fs";
2
+ import { dirname, join } from "path";
3
+ import { fileURLToPath } from "url";
4
+ /** The npm package name of this CLI. */
5
+ export const PRIMITIVE_CLI_PACKAGE = "primitive-admin";
6
+ /** Normalize separators and drop a trailing slash so path matching is uniform. */
7
+ export function normalize(p) {
8
+ return p.replace(/\\/g, "/").replace(/\/+$/, "");
9
+ }
10
+ /** The entries of PATH, split on the separator this environment uses. */
11
+ function pathEntries(env) {
12
+ const pathVar = env.PATH || env.Path || "";
13
+ if (!pathVar)
14
+ return [];
15
+ const separator = pathVar.includes(";") && !pathVar.includes(":/") ? ";" : ":";
16
+ return pathVar.split(separator).filter(Boolean);
17
+ }
18
+ /**
19
+ * Classifies an already-resolved absolute path to a file inside the installed
20
+ * package. Pure over (path, env) — no filesystem access, no child processes.
21
+ */
22
+ export function classifyInstallPath(realPath, env) {
23
+ const p = normalize(realPath);
24
+ if (!p)
25
+ return { kind: "unknown" };
26
+ const lower = p.toLowerCase();
27
+ // Global roots we deliberately do not support (yarn, bun): classify as
28
+ // unknown so the caller renders the safe fallback command instead of an
29
+ // invalid yarn/bun one.
30
+ const bunInstall = env.BUN_INSTALL ? normalize(env.BUN_INSTALL) : null;
31
+ if (lower.includes("/yarn/global/") ||
32
+ lower.includes("/.config/yarn/") ||
33
+ lower.includes("/.yarn/") ||
34
+ lower.includes("/.bun/") ||
35
+ (bunInstall && lower.startsWith(`${bunInstall.toLowerCase()}/`))) {
36
+ return { kind: "unknown" };
37
+ }
38
+ // pnpm global: $PNPM_HOME, or one of the well-known pnpm global roots.
39
+ // (A bare `/.pnpm/` virtual-store segment is not a global signal on its own
40
+ // — a project's own node_modules/.pnpm store has one too — so it falls
41
+ // through to the "local" branch below.)
42
+ const pnpmHome = env.PNPM_HOME ? normalize(env.PNPM_HOME) : null;
43
+ if ((pnpmHome && lower.startsWith(`${pnpmHome.toLowerCase()}/`)) ||
44
+ lower.includes("/pnpm/global/")) {
45
+ return { kind: "global", manager: "pnpm" };
46
+ }
47
+ // npm global: `<prefix>/lib/node_modules` on POSIX, `<AppData>/npm/node_modules`
48
+ // on Windows. Covers homebrew, /usr/local, nvm, and volta-style prefixes.
49
+ if (lower.includes("/lib/node_modules/") || lower.includes("/npm/node_modules/")) {
50
+ return { kind: "global", manager: "npm" };
51
+ }
52
+ // Anything else under a node_modules directory is a project dependency.
53
+ if (lower.includes("/node_modules/")) {
54
+ return { kind: "local" };
55
+ }
56
+ // No node_modules segment at all — running from a git checkout.
57
+ return { kind: "source" };
58
+ }
59
+ /**
60
+ * Picks the manager for a project-local install from the nearest lockfile,
61
+ * walking up from the installed file. Touches the filesystem, so it lives
62
+ * outside the pure classifier.
63
+ */
64
+ function managerFromNearestLockfile(startPath) {
65
+ let dir = dirname(startPath);
66
+ for (let i = 0; i < 64; i++) {
67
+ if (existsSync(join(dir, "pnpm-lock.yaml")))
68
+ return "pnpm";
69
+ if (existsSync(join(dir, "package-lock.json")))
70
+ return "npm";
71
+ const parent = dirname(dir);
72
+ if (parent === dir)
73
+ break;
74
+ dir = parent;
75
+ }
76
+ return "npm";
77
+ }
78
+ /** Classifies the copy of the CLI that is executing right now. */
79
+ export function detectInstall(opts = {}) {
80
+ const env = opts.env ?? process.env;
81
+ try {
82
+ const selfPath = realpathSync(opts.selfPath ?? fileURLToPath(import.meta.url));
83
+ const classification = classifyInstallPath(selfPath, env);
84
+ if (classification.kind === "local") {
85
+ return { kind: "local", manager: managerFromNearestLockfile(selfPath) };
86
+ }
87
+ return classification;
88
+ }
89
+ catch {
90
+ return { kind: "unknown" };
91
+ }
92
+ }
93
+ /**
94
+ * True when a `pnpm` executable is found on PATH (no child process spawned).
95
+ *
96
+ * `template.ts` has a separate `isPnpmInstalled` that shells out to
97
+ * `pnpm --version`. Both exist on purpose: this module must not spawn child
98
+ * processes (it runs on every command, inside the version check), while
99
+ * `template.ts` needs to know pnpm actually *runs*, not just that a file with
100
+ * that name is on PATH. The two can therefore disagree — a broken pnpm binary
101
+ * satisfies this one and not that one.
102
+ */
103
+ export function isPnpmOnPath(env = process.env) {
104
+ const entries = pathEntries(env);
105
+ if (entries.length === 0)
106
+ return false;
107
+ const candidates = process.platform === "win32" ? ["pnpm.cmd", "pnpm.exe", "pnpm"] : ["pnpm"];
108
+ for (const entry of entries) {
109
+ for (const candidate of candidates) {
110
+ try {
111
+ if (existsSync(join(entry, candidate)))
112
+ return true;
113
+ }
114
+ catch {
115
+ // Unreadable PATH entry — keep looking.
116
+ }
117
+ }
118
+ }
119
+ return false;
120
+ }
121
+ /**
122
+ * True when pnpm has somewhere to put a global install.
123
+ *
124
+ * `pnpm add -g` fails with `ERR_PNPM_NO_GLOBAL_BIN_DIR` when pnpm has no
125
+ * global bin directory — the state a machine is in when pnpm was installed
126
+ * with `npm install -g pnpm` and `pnpm setup` was never run, which is exactly
127
+ * what `primitive init` does when it bootstraps pnpm. A `pnpm` binary on PATH
128
+ * is therefore not enough to conclude that pnpm can install globally.
129
+ *
130
+ * Two signals count:
131
+ * - `PNPM_HOME` is set *and* on PATH. `pnpm setup` sets both together; when
132
+ * the directory is set but not on PATH the install succeeds and leaves a
133
+ * binary the user can't run.
134
+ * - A pnpm global root already exists on disk — pnpm has installed globals
135
+ * here before, so it has a working global bin directory.
136
+ */
137
+ export function canPnpmInstallGlobally(env, execPath) {
138
+ const home = env.PNPM_HOME ? normalize(env.PNPM_HOME).toLowerCase() : null;
139
+ if (home && pathEntries(env).some((entry) => normalize(entry).toLowerCase() === home)) {
140
+ return true;
141
+ }
142
+ return globalRootCandidates(env, execPath).pnpm.some((root) => existingDir(join(root, "global")));
143
+ }
144
+ /**
145
+ * The manager to use when nothing else identifies one: pnpm when it is on
146
+ * PATH *and* able to install globally, else npm. Never suggest or run a
147
+ * command the user's machine can't carry out.
148
+ */
149
+ function pathFallbackManager(opts) {
150
+ const env = opts.env ?? process.env;
151
+ const execPath = opts.execPath ?? process.execPath;
152
+ return isPnpmOnPath(env) && canPnpmInstallGlobally(env, execPath) ? "pnpm" : "npm";
153
+ }
154
+ /**
155
+ * The manager to install `pkg` globally with: whichever one already owns a
156
+ * global copy (so we upgrade that copy instead of creating a second one),
157
+ * else the PATH fallback.
158
+ */
159
+ function installManager(pkg, opts) {
160
+ const existing = findDuplicateGlobalInstalls(pkg, opts);
161
+ if (existing.some((e) => e.manager === "pnpm"))
162
+ return "pnpm";
163
+ if (existing.some((e) => e.manager === "npm"))
164
+ return "npm";
165
+ return pathFallbackManager(opts);
166
+ }
167
+ function globalUpgrade(manager, spec) {
168
+ return manager === "pnpm" ? `pnpm add -g ${spec}` : `npm i -g ${spec}`;
169
+ }
170
+ /**
171
+ * The command that upgrades this install to `distTag` ("latest", "alpha", …),
172
+ * or null when there is nothing sensible to suggest (a source checkout).
173
+ */
174
+ export function upgradeCommand(install, pkg, distTag, opts = {}) {
175
+ const spec = `${pkg}@${distTag}`;
176
+ switch (install.kind) {
177
+ case "global":
178
+ return globalUpgrade(install.manager, spec);
179
+ case "local":
180
+ return install.manager === "pnpm" ? `pnpm up ${spec}` : `npm i ${spec}`;
181
+ case "source":
182
+ // A git checkout can't be upgraded by a package manager, and suggesting
183
+ // one there is how a user ends up with an extra copy.
184
+ return null;
185
+ case "unknown":
186
+ return globalUpgrade(pathFallbackManager(opts), spec);
187
+ }
188
+ }
189
+ /** The argv for a first-time global install of `pkg`. */
190
+ export function installArgv(pkg, opts = {}) {
191
+ const manager = installManager(pkg, opts);
192
+ return manager === "pnpm"
193
+ ? { command: "pnpm", args: ["add", "-g", pkg] }
194
+ : { command: "npm", args: ["install", "-g", pkg] };
195
+ }
196
+ /** The command a user should run for a first-time global install of `pkg`. */
197
+ export function installCommand(pkg, opts = {}) {
198
+ const { command, args } = installArgv(pkg, opts);
199
+ return [command, ...args].join(" ");
200
+ }
201
+ /**
202
+ * The install's location with symlinks resolved, or the path itself when it
203
+ * can't be resolved. pnpm's global `node_modules/<pkg>` is a link into
204
+ * `<root>/global/<version>/.pnpm/<pkg>@<version>/node_modules/<pkg>`, and only
205
+ * the resolved form matches the resolved path of the running CLI file.
206
+ */
207
+ function resolveLink(path) {
208
+ try {
209
+ return realpathSync(path);
210
+ }
211
+ catch {
212
+ return path;
213
+ }
214
+ }
215
+ function existingDir(path) {
216
+ try {
217
+ return existsSync(path);
218
+ }
219
+ catch {
220
+ return false;
221
+ }
222
+ }
223
+ /** pnpm keeps its global installs under `<root>/global/<version>/node_modules`. */
224
+ function pnpmGlobalPackagePaths(root, pkg) {
225
+ const globalRoot = join(root, "global");
226
+ let versions = [];
227
+ try {
228
+ versions = readdirSync(globalRoot);
229
+ }
230
+ catch {
231
+ return [];
232
+ }
233
+ return versions
234
+ .map((v) => join(globalRoot, v, "node_modules", pkg))
235
+ .filter(existingDir);
236
+ }
237
+ /**
238
+ * The directories each manager could hold a global install in, derived from
239
+ * the environment and the running node executable. Pure — it only builds
240
+ * candidate paths; `findDuplicateGlobalInstalls` decides which ones exist.
241
+ *
242
+ * - pnpm keeps globals under `<pnpm root>/global/<version>/node_modules`.
243
+ * - npm keeps them under `<prefix>/lib/node_modules` (or
244
+ * `<AppData>/npm/node_modules` on Windows). The prefix is derived from the
245
+ * node executable and from every `.../bin` entry on PATH, which is what
246
+ * catches layouts like homebrew's, where the executable lives in a
247
+ * versioned Cellar directory but globals land in `/opt/homebrew`.
248
+ */
249
+ export function globalRootCandidates(env, execPath) {
250
+ const pnpm = [
251
+ env.PNPM_HOME,
252
+ env.HOME ? join(env.HOME, "Library", "pnpm") : undefined,
253
+ env.HOME ? join(env.HOME, ".local", "share", "pnpm") : undefined,
254
+ env.LOCALAPPDATA ? join(env.LOCALAPPDATA, "pnpm") : undefined,
255
+ ].filter((r) => !!r);
256
+ const prefixes = [dirname(dirname(execPath))];
257
+ if (env.npm_config_prefix)
258
+ prefixes.push(env.npm_config_prefix);
259
+ for (const entry of (env.PATH || env.Path || "").split(/[:;]/)) {
260
+ if (entry && /[\\/]bin$/.test(entry))
261
+ prefixes.push(dirname(entry));
262
+ }
263
+ const npm = prefixes.map((prefix) => join(prefix, "lib", "node_modules"));
264
+ if (env.APPDATA)
265
+ npm.push(join(env.APPDATA, "npm", "node_modules"));
266
+ return { pnpm: unique(pnpm), npm: unique(npm) };
267
+ }
268
+ function unique(paths) {
269
+ const seen = new Set();
270
+ return paths.filter((p) => {
271
+ const key = normalize(p);
272
+ if (seen.has(key))
273
+ return false;
274
+ seen.add(key);
275
+ return true;
276
+ });
277
+ }
278
+ /**
279
+ * Finds global copies of `pkg` in the global roots of each supported manager.
280
+ * Path checks only — no child processes.
281
+ */
282
+ export function findDuplicateGlobalInstalls(pkg, opts = {}) {
283
+ const roots = opts.roots ?? globalRootCandidates(opts.env ?? process.env, opts.execPath ?? process.execPath);
284
+ const found = [];
285
+ const seen = new Set();
286
+ const add = (manager, path) => {
287
+ const key = normalize(path);
288
+ if (seen.has(key))
289
+ return;
290
+ seen.add(key);
291
+ found.push({ manager, path, realPath: resolveLink(path) });
292
+ };
293
+ for (const root of roots.pnpm) {
294
+ for (const path of pnpmGlobalPackagePaths(root, pkg)) {
295
+ add("pnpm", path);
296
+ }
297
+ }
298
+ for (const root of roots.npm) {
299
+ const path = join(root, pkg);
300
+ if (existingDir(path))
301
+ add("npm", path);
302
+ }
303
+ return found;
304
+ }
305
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/lib/package-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Cursor-pagination helper used by the CLI's API client.
3
+ *
4
+ * The server exposes cursor-paginated endpoints (e.g. GET /admin/api/admins/me/apps)
5
+ * that return `{ items, nextCursor? }` pages. Callers historically only fetched
6
+ * the first page, silently truncating results (see issue #436). This helper
7
+ * walks every page and aggregates the items in order.
8
+ *
9
+ * Exported separately so the looping contract can be unit-tested without
10
+ * stubbing the full ApiClient.
11
+ */
12
+ export interface PaginatedPage<T> {
13
+ items: T[];
14
+ nextCursor?: string | null;
15
+ }
16
+ /**
17
+ * The one list envelope the CLI prints (issue #2357).
18
+ *
19
+ * `nextCursor` is present only when there is a next page.
20
+ */
21
+ export interface ListEnvelope<T = any> {
22
+ items: T[];
23
+ hasMore: boolean;
24
+ nextCursor?: string;
25
+ }
26
+ /**
27
+ * Normalize an endpoint's list response into the CLI's own output contract.
28
+ *
29
+ * The records read paths speak two different wire shapes: js-bao's Durable
30
+ * Object envelope (`{ data, hasMore, nextCursor?, prevCursor? }`) and the
31
+ * server's unified list payload (`{ items, hasMore, nextCursor? }`). Both are
32
+ * collapsed here to `{ items, hasMore, nextCursor? }` so like verbs print like
33
+ * envelopes.
34
+ *
35
+ * Accepts `items` or `data` as the array key and reads the continuation from
36
+ * `nextCursor` only. Throws when neither array key is present so an error body
37
+ * is never coerced into an empty result.
38
+ *
39
+ * Named `normalizeCliListEnvelope` to keep it distinct from the JS client's
40
+ * `normalizeListEnvelope` (`src/client/internal/listEnvelope.ts`). The two are
41
+ * unrelated — the client helper is not re-exported from `src/client/index.ts`
42
+ * and the CLI does not depend on the client package.
43
+ *
44
+ * `databases operations execute` routes through here too, but conditionally: a
45
+ * registered operation is only sometimes a list, so
46
+ * `normalizeDatabaseOperationResult()` (`api-client.ts`) tests the result shape
47
+ * first and calls this helper only for a Durable Object query page (#2440).
48
+ */
49
+ export declare function normalizeCliListEnvelope<T = any>(raw: unknown): ListEnvelope<T>;
50
+ /**
51
+ * The envelope for a list whose route does not paginate (#3646).
52
+ *
53
+ * Every `<noun> list --json` prints the same three keys, so the two kinds of
54
+ * list differ only in what they say, not in what a script has to read: a paged
55
+ * route's page goes through `normalizeCliListEnvelope()` and reports the
56
+ * server's `hasMore`/`nextCursor`; an unpaged route's whole set comes through
57
+ * here and says `hasMore: false`. A cursor a caller has no flag to spend is
58
+ * never surfaced.
59
+ *
60
+ * Accepts the array itself, or `null`/`undefined` from a route that answers an
61
+ * empty body — an empty list prints `{ items: [], hasMore: false }`, never
62
+ * `null` and never a bare `[]`.
63
+ */
64
+ export declare function wholeListEnvelope<T = any>(items: readonly T[] | null | undefined): ListEnvelope<T>;
65
+ export type PageFetcher<T> = (cursor: string | undefined) => Promise<PaginatedPage<T>>;
66
+ export interface PaginateOptions {
67
+ /**
68
+ * Safety net: if the server hands out a non-advancing cursor (same cursor
69
+ * returned repeatedly, or an implausibly long chain), stop after this many
70
+ * pages and throw. Default: 1000.
71
+ */
72
+ maxPages?: number;
73
+ }
74
+ /**
75
+ * Walk every cursor page from `fetchPage` and return the concatenated items.
76
+ *
77
+ * Detects two failure modes that would otherwise hang the CLI:
78
+ * - A cursor that repeats (server returned the same `nextCursor` twice).
79
+ * - A cursor chain longer than `maxPages` (default 1000).
80
+ * Both throw so the caller fails loudly rather than looping forever.
81
+ */
82
+ export declare function paginateAll<T>(fetchPage: PageFetcher<T>, options?: PaginateOptions): Promise<T[]>;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Cursor-pagination helper used by the CLI's API client.
3
+ *
4
+ * The server exposes cursor-paginated endpoints (e.g. GET /admin/api/admins/me/apps)
5
+ * that return `{ items, nextCursor? }` pages. Callers historically only fetched
6
+ * the first page, silently truncating results (see issue #436). This helper
7
+ * walks every page and aggregates the items in order.
8
+ *
9
+ * Exported separately so the looping contract can be unit-tested without
10
+ * stubbing the full ApiClient.
11
+ */
12
+ /**
13
+ * Normalize an endpoint's list response into the CLI's own output contract.
14
+ *
15
+ * The records read paths speak two different wire shapes: js-bao's Durable
16
+ * Object envelope (`{ data, hasMore, nextCursor?, prevCursor? }`) and the
17
+ * server's unified list payload (`{ items, hasMore, nextCursor? }`). Both are
18
+ * collapsed here to `{ items, hasMore, nextCursor? }` so like verbs print like
19
+ * envelopes.
20
+ *
21
+ * Accepts `items` or `data` as the array key and reads the continuation from
22
+ * `nextCursor` only. Throws when neither array key is present so an error body
23
+ * is never coerced into an empty result.
24
+ *
25
+ * Named `normalizeCliListEnvelope` to keep it distinct from the JS client's
26
+ * `normalizeListEnvelope` (`src/client/internal/listEnvelope.ts`). The two are
27
+ * unrelated — the client helper is not re-exported from `src/client/index.ts`
28
+ * and the CLI does not depend on the client package.
29
+ *
30
+ * `databases operations execute` routes through here too, but conditionally: a
31
+ * registered operation is only sometimes a list, so
32
+ * `normalizeDatabaseOperationResult()` (`api-client.ts`) tests the result shape
33
+ * first and calls this helper only for a Durable Object query page (#2440).
34
+ */
35
+ export function normalizeCliListEnvelope(raw) {
36
+ const page = raw;
37
+ const rawItems = page && typeof page === "object" && !Array.isArray(page)
38
+ ? (page.items ?? page.data)
39
+ : undefined;
40
+ if (!Array.isArray(rawItems)) {
41
+ throw new Error("Unexpected list response: expected an object with an `items` or `data` array.");
42
+ }
43
+ const nextCursor = page.nextCursor ?? undefined;
44
+ const envelope = {
45
+ items: rawItems,
46
+ hasMore: typeof page.hasMore === "boolean" ? page.hasMore : Boolean(nextCursor),
47
+ };
48
+ if (nextCursor)
49
+ envelope.nextCursor = nextCursor;
50
+ return envelope;
51
+ }
52
+ /**
53
+ * The envelope for a list whose route does not paginate (#3646).
54
+ *
55
+ * Every `<noun> list --json` prints the same three keys, so the two kinds of
56
+ * list differ only in what they say, not in what a script has to read: a paged
57
+ * route's page goes through `normalizeCliListEnvelope()` and reports the
58
+ * server's `hasMore`/`nextCursor`; an unpaged route's whole set comes through
59
+ * here and says `hasMore: false`. A cursor a caller has no flag to spend is
60
+ * never surfaced.
61
+ *
62
+ * Accepts the array itself, or `null`/`undefined` from a route that answers an
63
+ * empty body — an empty list prints `{ items: [], hasMore: false }`, never
64
+ * `null` and never a bare `[]`.
65
+ */
66
+ export function wholeListEnvelope(items) {
67
+ return { items: Array.isArray(items) ? [...items] : [], hasMore: false };
68
+ }
69
+ /**
70
+ * Walk every cursor page from `fetchPage` and return the concatenated items.
71
+ *
72
+ * Detects two failure modes that would otherwise hang the CLI:
73
+ * - A cursor that repeats (server returned the same `nextCursor` twice).
74
+ * - A cursor chain longer than `maxPages` (default 1000).
75
+ * Both throw so the caller fails loudly rather than looping forever.
76
+ */
77
+ export async function paginateAll(fetchPage, options = {}) {
78
+ const maxPages = options.maxPages ?? 1000;
79
+ const all = [];
80
+ const seenCursors = new Set();
81
+ let cursor;
82
+ for (let page = 0; page < maxPages; page++) {
83
+ const resp = await fetchPage(cursor);
84
+ if (Array.isArray(resp.items)) {
85
+ all.push(...resp.items);
86
+ }
87
+ const next = resp.nextCursor ?? undefined;
88
+ if (!next) {
89
+ return all;
90
+ }
91
+ if (seenCursors.has(next)) {
92
+ throw new Error(`Pagination cursor did not advance (cursor ${next} repeated); aborting to avoid an infinite loop.`);
93
+ }
94
+ seenCursors.add(next);
95
+ cursor = next;
96
+ }
97
+ throw new Error(`Pagination exceeded ${maxPages} pages without terminating; server cursor may not be advancing.`);
98
+ }
99
+ //# sourceMappingURL=paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../../src/lib/paginate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkBH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,wBAAwB,CAAU,GAAY;IAC5D,MAAM,IAAI,GAAG,GAA6C,CAAC;IAC3D,MAAM,QAAQ,GACZ,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACjD,MAAM,QAAQ,GAAoB;QAChC,KAAK,EAAE,QAAe;QACtB,OAAO,EACL,OAAO,IAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;KAC3E,CAAC;IACF,IAAI,UAAU;QAAE,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAsC;IAEtC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3E,CAAC;AAaD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAyB,EACzB,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,MAA0B,CAAC;IAE/B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,iDAAiD,CACnG,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,iEAAiE,CACjG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Shared predicate for platform-owned workflows (#1660).
3
+ *
4
+ * The platform owns workflow keys in the reserved `__internal.` namespace (see
5
+ * the server's `src/workflows/reserved-workflow-keys.ts`). These rows are
6
+ * created and managed by the platform, never authored in an app's config tree:
7
+ *
8
+ * - `config pull` must not export them (they have no local TOML),
9
+ * - `config diff` must not report them (they are not app config),
10
+ * - `config push` must not upload them (the hollow export can't round-trip),
11
+ * - `workflows codegen` must not generate an invoker for them.
12
+ *
13
+ * The CLI cannot import from `src/`, so this module mirrors the server's prefix
14
+ * policy in ONE place. The codegen skip and the sync filters both call it, so
15
+ * they can never drift from each other or from the server.
16
+ *
17
+ * The generic cross-resource `isPlatformOwnedEntity` abstraction is deliberately
18
+ * NOT here — it is deferred until a second resource type has a platform-owned
19
+ * contract (human decision, 2026-07-17).
20
+ */
21
+ /** Prefix marking a platform-owned workflow key (mirrors the server). */
22
+ export declare const INTERNAL_WORKFLOW_KEY_PREFIX = "__internal.";
23
+ /**
24
+ * True when `key` is in the platform-owned `__internal.` namespace. Trims and
25
+ * lowercases first (mirrors the server's `isReservedWorkflowKey`) so a padded
26
+ * or upper-cased value such as ` __Internal.Foo ` can't slip past the filter.
27
+ */
28
+ export declare function isPlatformOwnedWorkflowKey(key: unknown): boolean;
29
+ /**
30
+ * True when a workflow list/detail item is platform-owned.
31
+ *
32
+ * Prefers the server's derived `platformOwned` flag (#1660) when present, then
33
+ * falls back to the key prefix so an older server that doesn't emit the flag is
34
+ * still filtered (edge case 1). `workflowKey` is the admin list-item field;
35
+ * `key` covers a locally-parsed `[workflow]` table.
36
+ */
37
+ export declare function isPlatformOwnedWorkflow(item: any): boolean;
38
+ /**
39
+ * Why the authoring surface refuses a platform-owned key (#2645).
40
+ *
41
+ * `config create`, `config set` and `config push --only` all name an object by
42
+ * `<type>/<key>`, and `config push` skips the reserved namespace — so scaffolding
43
+ * or selecting one produces a file that is never uploaded, or a push that
44
+ * reports success having applied nothing. With configuration authored in TOML
45
+ * only, those are the two failures the surface has to make impossible: a flag
46
+ * that was rejected was visible, a file that is silently ignored is not.
47
+ *
48
+ * Returns the operator-facing reason, or `undefined` when the key is authorable.
49
+ * Pure, so every caller can be unit-tested without a live server.
50
+ */
51
+ export declare function platformOwnedAuthoringError(type: string, key: string): string | undefined;
52
+ /**
53
+ * Why the authoring surface refuses `<type>/<key>` — or `undefined` when it
54
+ * doesn't.
55
+ *
56
+ * The same question `config create`, `config set` and `config push --only`
57
+ * each ask before touching a file, now with two answers: a platform-owned
58
+ * workflow key (#1660/#2645) and a retired email type (#2884). Both fail the
59
+ * same way if unchecked — a file that is written locally and then either
60
+ * skipped silently or refused at the far end of a push — so both are refused
61
+ * at the point the key is named, with the sentence that says what to do.
62
+ */
63
+ export declare function configAuthoringError(type: string, key: string): string | undefined;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Shared predicate for platform-owned workflows (#1660).
3
+ *
4
+ * The platform owns workflow keys in the reserved `__internal.` namespace (see
5
+ * the server's `src/workflows/reserved-workflow-keys.ts`). These rows are
6
+ * created and managed by the platform, never authored in an app's config tree:
7
+ *
8
+ * - `config pull` must not export them (they have no local TOML),
9
+ * - `config diff` must not report them (they are not app config),
10
+ * - `config push` must not upload them (the hollow export can't round-trip),
11
+ * - `workflows codegen` must not generate an invoker for them.
12
+ *
13
+ * The CLI cannot import from `src/`, so this module mirrors the server's prefix
14
+ * policy in ONE place. The codegen skip and the sync filters both call it, so
15
+ * they can never drift from each other or from the server.
16
+ *
17
+ * The generic cross-resource `isPlatformOwnedEntity` abstraction is deliberately
18
+ * NOT here — it is deferred until a second resource type has a platform-owned
19
+ * contract (human decision, 2026-07-17).
20
+ */
21
+ import { isRetiredEmailType, retiredEmailTypeGuidance, } from "./generated-config-surfaces.js";
22
+ /** Prefix marking a platform-owned workflow key (mirrors the server). */
23
+ export const INTERNAL_WORKFLOW_KEY_PREFIX = "__internal.";
24
+ /**
25
+ * True when `key` is in the platform-owned `__internal.` namespace. Trims and
26
+ * lowercases first (mirrors the server's `isReservedWorkflowKey`) so a padded
27
+ * or upper-cased value such as ` __Internal.Foo ` can't slip past the filter.
28
+ */
29
+ export function isPlatformOwnedWorkflowKey(key) {
30
+ return (typeof key === "string" &&
31
+ key.trim().toLowerCase().startsWith(INTERNAL_WORKFLOW_KEY_PREFIX));
32
+ }
33
+ /**
34
+ * True when a workflow list/detail item is platform-owned.
35
+ *
36
+ * Prefers the server's derived `platformOwned` flag (#1660) when present, then
37
+ * falls back to the key prefix so an older server that doesn't emit the flag is
38
+ * still filtered (edge case 1). `workflowKey` is the admin list-item field;
39
+ * `key` covers a locally-parsed `[workflow]` table.
40
+ */
41
+ export function isPlatformOwnedWorkflow(item) {
42
+ if (item && item.platformOwned === true)
43
+ return true;
44
+ const key = item?.workflowKey ?? item?.key;
45
+ return isPlatformOwnedWorkflowKey(key);
46
+ }
47
+ /**
48
+ * Why the authoring surface refuses a platform-owned key (#2645).
49
+ *
50
+ * `config create`, `config set` and `config push --only` all name an object by
51
+ * `<type>/<key>`, and `config push` skips the reserved namespace — so scaffolding
52
+ * or selecting one produces a file that is never uploaded, or a push that
53
+ * reports success having applied nothing. With configuration authored in TOML
54
+ * only, those are the two failures the surface has to make impossible: a flag
55
+ * that was rejected was visible, a file that is silently ignored is not.
56
+ *
57
+ * Returns the operator-facing reason, or `undefined` when the key is authorable.
58
+ * Pure, so every caller can be unit-tested without a live server.
59
+ */
60
+ export function platformOwnedAuthoringError(type, key) {
61
+ if (type !== "workflow" || !isPlatformOwnedWorkflowKey(key))
62
+ return undefined;
63
+ return `'${key}' is a platform-owned workflow — the reserved '${INTERNAL_WORKFLOW_KEY_PREFIX}' namespace is managed by the platform. 'config pull' does not export these and 'config push' skips them, so a file here would never reach the server.`;
64
+ }
65
+ /**
66
+ * Why the authoring surface refuses `<type>/<key>` — or `undefined` when it
67
+ * doesn't.
68
+ *
69
+ * The same question `config create`, `config set` and `config push --only`
70
+ * each ask before touching a file, now with two answers: a platform-owned
71
+ * workflow key (#1660/#2645) and a retired email type (#2884). Both fail the
72
+ * same way if unchecked — a file that is written locally and then either
73
+ * skipped silently or refused at the far end of a push — so both are refused
74
+ * at the point the key is named, with the sentence that says what to do.
75
+ */
76
+ export function configAuthoringError(type, key) {
77
+ const platformOwned = platformOwnedAuthoringError(type, key);
78
+ if (platformOwned)
79
+ return platformOwned;
80
+ if (type === "email-template" && isRetiredEmailType(key)) {
81
+ return retiredEmailTypeGuidance(key);
82
+ }
83
+ return undefined;
84
+ }
85
+ //# sourceMappingURL=platform-owned.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-owned.js","sourceRoot":"","sources":["../../../src/lib/platform-owned.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AAExC,yEAAyE;AACzE,MAAM,CAAC,MAAM,4BAA4B,GAAG,aAAa,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAY;IACrD,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAClE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAS;IAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,GAAG,CAAC;IAC3C,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,GAAW;IAEX,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO,IAAI,GAAG,kDAAkD,4BAA4B,wJAAwJ,CAAC;AACvP,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,GAAW;IAEX,MAAM,aAAa,GAAG,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,IAAI,KAAK,gBAAgB,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}