primitive-admin 1.1.0-alpha.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +523 -109
  2. package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +372 -21
  5. package/dist/bin/primitive.js.map +1 -1
  6. package/dist/src/commands/admins.d.ts +2 -0
  7. package/dist/src/commands/admins.js +136 -30
  8. package/dist/src/commands/admins.js.map +1 -1
  9. package/dist/src/commands/analytics.d.ts +2 -0
  10. package/dist/src/commands/analytics.js +713 -55
  11. package/dist/src/commands/analytics.js.map +1 -1
  12. package/dist/src/commands/apps.d.ts +2 -0
  13. package/dist/src/commands/apps.js +65 -100
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth-sessions.d.ts +7 -0
  16. package/dist/src/commands/auth-sessions.js +144 -0
  17. package/dist/src/commands/auth-sessions.js.map +1 -0
  18. package/dist/src/commands/auth.d.ts +2 -0
  19. package/dist/src/commands/auth.js +238 -108
  20. package/dist/src/commands/auth.js.map +1 -1
  21. package/dist/src/commands/blob-buckets.d.ts +2 -0
  22. package/dist/src/commands/blob-buckets.js +331 -0
  23. package/dist/src/commands/blob-buckets.js.map +1 -0
  24. package/dist/src/commands/catalog.d.ts +2 -0
  25. package/dist/src/commands/catalog.js +63 -48
  26. package/dist/src/commands/catalog.js.map +1 -1
  27. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  28. package/dist/src/commands/collection-type-configs.js +85 -0
  29. package/dist/src/commands/collection-type-configs.js.map +1 -0
  30. package/dist/src/commands/collections.d.ts +2 -0
  31. package/dist/src/commands/collections.js +1282 -0
  32. package/dist/src/commands/collections.js.map +1 -0
  33. package/dist/src/commands/comparisons.d.ts +2 -0
  34. package/dist/src/commands/comparisons.js +6 -6
  35. package/dist/src/commands/comparisons.js.map +1 -1
  36. package/dist/src/commands/config.d.ts +46 -0
  37. package/dist/src/commands/config.js +465 -0
  38. package/dist/src/commands/config.js.map +1 -0
  39. package/dist/src/commands/connections.d.ts +2 -0
  40. package/dist/src/commands/connections.js +99 -0
  41. package/dist/src/commands/connections.js.map +1 -0
  42. package/dist/src/commands/cron-triggers.d.ts +2 -0
  43. package/dist/src/commands/cron-triggers.js +266 -0
  44. package/dist/src/commands/cron-triggers.js.map +1 -0
  45. package/dist/src/commands/database-type-configs.d.ts +2 -0
  46. package/dist/src/commands/database-type-configs.js +164 -0
  47. package/dist/src/commands/database-type-configs.js.map +1 -0
  48. package/dist/src/commands/database-types.d.ts +2 -0
  49. package/dist/src/commands/database-types.js +471 -0
  50. package/dist/src/commands/database-types.js.map +1 -0
  51. package/dist/src/commands/databases.d.ts +65 -0
  52. package/dist/src/commands/databases.js +1887 -243
  53. package/dist/src/commands/databases.js.map +1 -1
  54. package/dist/src/commands/documents.d.ts +60 -0
  55. package/dist/src/commands/documents.js +2888 -22
  56. package/dist/src/commands/documents.js.map +1 -1
  57. package/dist/src/commands/email-templates.d.ts +2 -0
  58. package/dist/src/commands/email-templates.js +175 -0
  59. package/dist/src/commands/email-templates.js.map +1 -0
  60. package/dist/src/commands/env.d.ts +23 -0
  61. package/dist/src/commands/env.js +395 -0
  62. package/dist/src/commands/env.js.map +1 -0
  63. package/dist/src/commands/feature-flags.d.ts +14 -0
  64. package/dist/src/commands/feature-flags.js +117 -0
  65. package/dist/src/commands/feature-flags.js.map +1 -0
  66. package/dist/src/commands/functions.d.ts +20 -0
  67. package/dist/src/commands/functions.js +1630 -0
  68. package/dist/src/commands/functions.js.map +1 -0
  69. package/dist/src/commands/group-type-configs.d.ts +2 -0
  70. package/dist/src/commands/group-type-configs.js +87 -0
  71. package/dist/src/commands/group-type-configs.js.map +1 -0
  72. package/dist/src/commands/groups.d.ts +2 -0
  73. package/dist/src/commands/groups.js +65 -113
  74. package/dist/src/commands/groups.js.map +1 -1
  75. package/dist/src/commands/guides.d.ts +223 -0
  76. package/dist/src/commands/guides.js +627 -69
  77. package/dist/src/commands/guides.js.map +1 -1
  78. package/dist/src/commands/init.d.ts +37 -0
  79. package/dist/src/commands/init.js +1693 -208
  80. package/dist/src/commands/init.js.map +1 -1
  81. package/dist/src/commands/integrations.d.ts +2 -0
  82. package/dist/src/commands/integrations.js +428 -187
  83. package/dist/src/commands/integrations.js.map +1 -1
  84. package/dist/src/commands/llm.d.ts +2 -0
  85. package/dist/src/commands/llm.js +4 -2
  86. package/dist/src/commands/llm.js.map +1 -1
  87. package/dist/src/commands/locks.d.ts +8 -0
  88. package/dist/src/commands/locks.js +175 -0
  89. package/dist/src/commands/locks.js.map +1 -0
  90. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  91. package/dist/src/commands/metadata-category-configs.js +113 -0
  92. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  93. package/dist/src/commands/metadata.d.ts +2 -0
  94. package/dist/src/commands/metadata.js +288 -0
  95. package/dist/src/commands/metadata.js.map +1 -0
  96. package/dist/src/commands/prompts.d.ts +2 -0
  97. package/dist/src/commands/prompts.js +322 -634
  98. package/dist/src/commands/prompts.js.map +1 -1
  99. package/dist/src/commands/rule-sets.d.ts +3 -0
  100. package/dist/src/commands/rule-sets.js +139 -148
  101. package/dist/src/commands/rule-sets.js.map +1 -1
  102. package/dist/src/commands/scripts.d.ts +30 -0
  103. package/dist/src/commands/scripts.js +688 -0
  104. package/dist/src/commands/scripts.js.map +1 -0
  105. package/dist/src/commands/secrets.d.ts +2 -0
  106. package/dist/src/commands/secrets.js +109 -0
  107. package/dist/src/commands/secrets.js.map +1 -0
  108. package/dist/src/commands/sessions.d.ts +2 -0
  109. package/dist/src/commands/sessions.js +76 -0
  110. package/dist/src/commands/sessions.js.map +1 -0
  111. package/dist/src/commands/skill.d.ts +2 -0
  112. package/dist/src/commands/skill.js +29 -0
  113. package/dist/src/commands/skill.js.map +1 -0
  114. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  115. package/dist/src/commands/sync-app-settings.js +328 -0
  116. package/dist/src/commands/sync-app-settings.js.map +1 -0
  117. package/dist/src/commands/sync.d.ts +2670 -0
  118. package/dist/src/commands/sync.js +17144 -834
  119. package/dist/src/commands/sync.js.map +1 -1
  120. package/dist/src/commands/tokens.d.ts +2 -0
  121. package/dist/src/commands/tokens.js +132 -22
  122. package/dist/src/commands/tokens.js.map +1 -1
  123. package/dist/src/commands/users.d.ts +2 -0
  124. package/dist/src/commands/users.js +542 -24
  125. package/dist/src/commands/users.js.map +1 -1
  126. package/dist/src/commands/vars.d.ts +8 -0
  127. package/dist/src/commands/vars.js +97 -0
  128. package/dist/src/commands/vars.js.map +1 -0
  129. package/dist/src/commands/waitlist.d.ts +2 -0
  130. package/dist/src/commands/waitlist.js +12 -11
  131. package/dist/src/commands/waitlist.js.map +1 -1
  132. package/dist/src/commands/webhooks.d.ts +31 -0
  133. package/dist/src/commands/webhooks.js +633 -0
  134. package/dist/src/commands/webhooks.js.map +1 -0
  135. package/dist/src/commands/workflows.d.ts +88 -0
  136. package/dist/src/commands/workflows.js +1568 -742
  137. package/dist/src/commands/workflows.js.map +1 -1
  138. package/dist/src/lib/access-rule-display.d.ts +21 -0
  139. package/dist/src/lib/access-rule-display.js +34 -0
  140. package/dist/src/lib/access-rule-display.js.map +1 -0
  141. package/dist/src/lib/api-client.d.ts +2550 -0
  142. package/dist/src/lib/api-client.js +2503 -160
  143. package/dist/src/lib/api-client.js.map +1 -1
  144. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  145. package/dist/src/lib/app-settings-descriptor.js +583 -0
  146. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  147. package/dist/src/lib/auth-flow.d.ts +8 -0
  148. package/dist/src/lib/batch.d.ts +26 -0
  149. package/dist/src/lib/batch.js +32 -0
  150. package/dist/src/lib/batch.js.map +1 -0
  151. package/dist/src/lib/block-layout.d.ts +160 -0
  152. package/dist/src/lib/block-layout.js +451 -0
  153. package/dist/src/lib/block-layout.js.map +1 -0
  154. package/dist/src/lib/block-selector.d.ts +58 -0
  155. package/dist/src/lib/block-selector.js +92 -0
  156. package/dist/src/lib/block-selector.js.map +1 -0
  157. package/dist/src/lib/canonical-json.d.ts +12 -0
  158. package/dist/src/lib/canonical-json.js +35 -0
  159. package/dist/src/lib/canonical-json.js.map +1 -0
  160. package/dist/src/lib/channel.d.ts +30 -0
  161. package/dist/src/lib/channel.js +68 -0
  162. package/dist/src/lib/channel.js.map +1 -0
  163. package/dist/src/lib/cli-manifest.d.ts +68 -0
  164. package/dist/src/lib/cli-manifest.js +71 -0
  165. package/dist/src/lib/cli-manifest.js.map +1 -0
  166. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  167. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  168. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  169. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  170. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  171. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  172. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
  173. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
  174. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  175. package/dist/src/lib/collection-export.d.ts +184 -0
  176. package/dist/src/lib/collection-export.js +252 -0
  177. package/dist/src/lib/collection-export.js.map +1 -0
  178. package/dist/src/lib/config-json-field.d.ts +28 -0
  179. package/dist/src/lib/config-json-field.js +56 -0
  180. package/dist/src/lib/config-json-field.js.map +1 -0
  181. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  182. package/dist/src/lib/config-object-descriptor.js +740 -0
  183. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  184. package/dist/src/lib/config-payload.d.ts +92 -0
  185. package/dist/src/lib/config-payload.js +161 -0
  186. package/dist/src/lib/config-payload.js.map +1 -0
  187. package/dist/src/lib/config-surface.d.ts +141 -0
  188. package/dist/src/lib/config-surface.js +368 -0
  189. package/dist/src/lib/config-surface.js.map +1 -0
  190. package/dist/src/lib/config-toml.d.ts +10 -0
  191. package/dist/src/lib/config-toml.js +42 -0
  192. package/dist/src/lib/config-toml.js.map +1 -0
  193. package/dist/src/lib/config.d.ts +71 -0
  194. package/dist/src/lib/config.js +71 -68
  195. package/dist/src/lib/config.js.map +1 -1
  196. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  197. package/dist/src/lib/confirm-prompt.js +110 -0
  198. package/dist/src/lib/confirm-prompt.js.map +1 -0
  199. package/dist/src/lib/constants.d.ts +11 -0
  200. package/dist/src/lib/constants.js +12 -0
  201. package/dist/src/lib/constants.js.map +1 -0
  202. package/dist/src/lib/crash-handlers.d.ts +20 -0
  203. package/dist/src/lib/crash-handlers.js +49 -0
  204. package/dist/src/lib/crash-handlers.js.map +1 -0
  205. package/dist/src/lib/credentials-store.d.ts +104 -0
  206. package/dist/src/lib/credentials-store.js +336 -0
  207. package/dist/src/lib/credentials-store.js.map +1 -0
  208. package/dist/src/lib/csv.d.ts +47 -0
  209. package/dist/src/lib/csv.js +172 -0
  210. package/dist/src/lib/csv.js.map +1 -0
  211. package/dist/src/lib/data-input.d.ts +23 -0
  212. package/dist/src/lib/data-input.js +50 -0
  213. package/dist/src/lib/data-input.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  215. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  216. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  217. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  218. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  219. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  220. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  221. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  222. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  223. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  224. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  225. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  226. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  227. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  228. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  229. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  230. package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
  231. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  232. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  233. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  234. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  235. package/dist/src/lib/deprecation.d.ts +22 -0
  236. package/dist/src/lib/deprecation.js +43 -0
  237. package/dist/src/lib/deprecation.js.map +1 -0
  238. package/dist/src/lib/document-export-permissions.d.ts +30 -0
  239. package/dist/src/lib/document-export-permissions.js +54 -0
  240. package/dist/src/lib/document-export-permissions.js.map +1 -0
  241. package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
  242. package/dist/src/lib/document-ingest-artifact.js +505 -0
  243. package/dist/src/lib/document-ingest-artifact.js.map +1 -0
  244. package/dist/src/lib/document-ingest-input.d.ts +51 -0
  245. package/dist/src/lib/document-ingest-input.js +132 -0
  246. package/dist/src/lib/document-ingest-input.js.map +1 -0
  247. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  248. package/dist/src/lib/document-ingest-rows.js +181 -0
  249. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  250. package/dist/src/lib/document-ingest.d.ts +101 -0
  251. package/dist/src/lib/document-ingest.js +384 -0
  252. package/dist/src/lib/document-ingest.js.map +1 -0
  253. package/dist/src/lib/env-resolver-core.d.ts +258 -0
  254. package/dist/src/lib/env-resolver-core.js +447 -0
  255. package/dist/src/lib/env-resolver-core.js.map +1 -0
  256. package/dist/src/lib/env-resolver.d.ts +99 -0
  257. package/dist/src/lib/env-resolver.js +153 -0
  258. package/dist/src/lib/env-resolver.js.map +1 -0
  259. package/dist/src/lib/fetch.d.ts +5 -0
  260. package/dist/src/lib/function-bundle.d.ts +147 -0
  261. package/dist/src/lib/function-bundle.js +341 -0
  262. package/dist/src/lib/function-bundle.js.map +1 -0
  263. package/dist/src/lib/function-collect.d.ts +123 -0
  264. package/dist/src/lib/function-collect.js +610 -0
  265. package/dist/src/lib/function-collect.js.map +1 -0
  266. package/dist/src/lib/function-db-types.d.ts +202 -0
  267. package/dist/src/lib/function-db-types.js +870 -0
  268. package/dist/src/lib/function-db-types.js.map +1 -0
  269. package/dist/src/lib/function-document-types.d.ts +144 -0
  270. package/dist/src/lib/function-document-types.js +370 -0
  271. package/dist/src/lib/function-document-types.js.map +1 -0
  272. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  273. package/dist/src/lib/function-grants-preflight.js +105 -0
  274. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  275. package/dist/src/lib/function-log-lines.d.ts +76 -0
  276. package/dist/src/lib/function-log-lines.js +160 -0
  277. package/dist/src/lib/function-log-lines.js.map +1 -0
  278. package/dist/src/lib/function-log-row.d.ts +29 -0
  279. package/dist/src/lib/function-log-row.js +73 -0
  280. package/dist/src/lib/function-log-row.js.map +1 -0
  281. package/dist/src/lib/function-log-tail.d.ts +132 -0
  282. package/dist/src/lib/function-log-tail.js +262 -0
  283. package/dist/src/lib/function-log-tail.js.map +1 -0
  284. package/dist/src/lib/function-run.d.ts +289 -0
  285. package/dist/src/lib/function-run.js +389 -0
  286. package/dist/src/lib/function-run.js.map +1 -0
  287. package/dist/src/lib/function-schema-codegen.d.ts +143 -0
  288. package/dist/src/lib/function-schema-codegen.js +420 -0
  289. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  290. package/dist/src/lib/function-sync.d.ts +459 -0
  291. package/dist/src/lib/function-sync.js +1258 -0
  292. package/dist/src/lib/function-sync.js.map +1 -0
  293. package/dist/src/lib/function-trigger-listing.d.ts +27 -0
  294. package/dist/src/lib/function-trigger-listing.js +70 -0
  295. package/dist/src/lib/function-trigger-listing.js.map +1 -0
  296. package/dist/src/lib/function-typecheck.d.ts +86 -0
  297. package/dist/src/lib/function-typecheck.js +370 -0
  298. package/dist/src/lib/function-typecheck.js.map +1 -0
  299. package/dist/src/lib/function-versions.d.ts +122 -0
  300. package/dist/src/lib/function-versions.js +182 -0
  301. package/dist/src/lib/function-versions.js.map +1 -0
  302. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  303. package/dist/src/lib/generated-allowlist.js +281 -0
  304. package/dist/src/lib/generated-allowlist.js.map +1 -0
  305. package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
  306. package/dist/src/lib/generated-config-surfaces.js +10569 -0
  307. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  308. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  309. package/dist/src/lib/generated-sdk-types.js +13 -0
  310. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  311. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  312. package/dist/src/lib/generated-template-lint.js +624 -0
  313. package/dist/src/lib/generated-template-lint.js.map +1 -0
  314. package/dist/src/lib/init-adopt.d.ts +16 -0
  315. package/dist/src/lib/init-adopt.js +34 -0
  316. package/dist/src/lib/init-adopt.js.map +1 -0
  317. package/dist/src/lib/init-assets.d.ts +39 -0
  318. package/dist/src/lib/init-assets.js +97 -0
  319. package/dist/src/lib/init-assets.js.map +1 -0
  320. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  321. package/dist/src/lib/init-client-platforms.js +71 -0
  322. package/dist/src/lib/init-client-platforms.js.map +1 -0
  323. package/dist/src/lib/init-config.d.ts +98 -0
  324. package/dist/src/lib/init-config.js +186 -0
  325. package/dist/src/lib/init-config.js.map +1 -0
  326. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  327. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  328. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  329. package/dist/src/lib/init-ios-links.d.ts +91 -0
  330. package/dist/src/lib/init-ios-links.js +219 -0
  331. package/dist/src/lib/init-ios-links.js.map +1 -0
  332. package/dist/src/lib/init-plan.d.ts +80 -0
  333. package/dist/src/lib/init-plan.js +95 -0
  334. package/dist/src/lib/init-plan.js.map +1 -0
  335. package/dist/src/lib/init-production-env.d.ts +48 -0
  336. package/dist/src/lib/init-production-env.js +59 -0
  337. package/dist/src/lib/init-production-env.js.map +1 -0
  338. package/dist/src/lib/init-schema.d.ts +74 -0
  339. package/dist/src/lib/init-schema.js +358 -0
  340. package/dist/src/lib/init-schema.js.map +1 -0
  341. package/dist/src/lib/init-xcode.d.ts +34 -0
  342. package/dist/src/lib/init-xcode.js +138 -0
  343. package/dist/src/lib/init-xcode.js.map +1 -0
  344. package/dist/src/lib/integration-request-config.d.ts +30 -0
  345. package/dist/src/lib/integration-request-config.js +145 -0
  346. package/dist/src/lib/integration-request-config.js.map +1 -0
  347. package/dist/src/lib/integration-selector.d.ts +42 -0
  348. package/dist/src/lib/integration-selector.js +46 -0
  349. package/dist/src/lib/integration-selector.js.map +1 -0
  350. package/dist/src/lib/ios-app-id.d.ts +34 -0
  351. package/dist/src/lib/ios-app-id.js +69 -0
  352. package/dist/src/lib/ios-app-id.js.map +1 -0
  353. package/dist/src/lib/list-options.d.ts +68 -0
  354. package/dist/src/lib/list-options.js +89 -0
  355. package/dist/src/lib/list-options.js.map +1 -0
  356. package/dist/src/lib/local-state.d.ts +55 -0
  357. package/dist/src/lib/local-state.js +167 -0
  358. package/dist/src/lib/local-state.js.map +1 -0
  359. package/dist/src/lib/local-test-cases.d.ts +63 -0
  360. package/dist/src/lib/local-test-cases.js +136 -0
  361. package/dist/src/lib/local-test-cases.js.map +1 -0
  362. package/dist/src/lib/log-inspection.d.ts +715 -0
  363. package/dist/src/lib/log-inspection.js +816 -0
  364. package/dist/src/lib/log-inspection.js.map +1 -0
  365. package/dist/src/lib/logout-admin-session.d.ts +33 -0
  366. package/dist/src/lib/logout-admin-session.js +70 -0
  367. package/dist/src/lib/logout-admin-session.js.map +1 -0
  368. package/dist/src/lib/migration-nag.d.ts +49 -0
  369. package/dist/src/lib/migration-nag.js +163 -0
  370. package/dist/src/lib/migration-nag.js.map +1 -0
  371. package/dist/src/lib/object-status-filter.d.ts +22 -0
  372. package/dist/src/lib/object-status-filter.js +45 -0
  373. package/dist/src/lib/object-status-filter.js.map +1 -0
  374. package/dist/src/lib/output.d.ts +124 -0
  375. package/dist/src/lib/output.js +219 -8
  376. package/dist/src/lib/output.js.map +1 -1
  377. package/dist/src/lib/package-manager.d.ts +140 -0
  378. package/dist/src/lib/package-manager.js +305 -0
  379. package/dist/src/lib/package-manager.js.map +1 -0
  380. package/dist/src/lib/paginate.d.ts +98 -0
  381. package/dist/src/lib/paginate.js +112 -0
  382. package/dist/src/lib/paginate.js.map +1 -0
  383. package/dist/src/lib/platform-owned.d.ts +63 -0
  384. package/dist/src/lib/platform-owned.js +85 -0
  385. package/dist/src/lib/platform-owned.js.map +1 -0
  386. package/dist/src/lib/project-config.d.ts +122 -0
  387. package/dist/src/lib/project-config.js +244 -0
  388. package/dist/src/lib/project-config.js.map +1 -0
  389. package/dist/src/lib/prompt-cost-format.d.ts +11 -0
  390. package/dist/src/lib/prompt-cost-format.js +41 -0
  391. package/dist/src/lib/prompt-cost-format.js.map +1 -0
  392. package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
  393. package/dist/src/lib/prompt-schema-codegen.js +462 -0
  394. package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
  395. package/dist/src/lib/query-operators.d.ts +43 -0
  396. package/dist/src/lib/query-operators.js +80 -0
  397. package/dist/src/lib/query-operators.js.map +1 -0
  398. package/dist/src/lib/record-filter.d.ts +18 -0
  399. package/dist/src/lib/record-filter.js +55 -0
  400. package/dist/src/lib/record-filter.js.map +1 -0
  401. package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
  402. package/dist/src/lib/refresh-admin-credentials.js +123 -0
  403. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  404. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  405. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  406. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  407. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  408. package/dist/src/lib/resolve-init-server.js +77 -0
  409. package/dist/src/lib/resolve-init-server.js.map +1 -0
  410. package/dist/src/lib/resolve-owner.d.ts +19 -0
  411. package/dist/src/lib/resolve-owner.js +20 -0
  412. package/dist/src/lib/resolve-owner.js.map +1 -0
  413. package/dist/src/lib/resolve-platform.d.ts +74 -0
  414. package/dist/src/lib/resolve-platform.js +105 -0
  415. package/dist/src/lib/resolve-platform.js.map +1 -0
  416. package/dist/src/lib/run-status.d.ts +19 -0
  417. package/dist/src/lib/run-status.generated.d.ts +39 -0
  418. package/dist/src/lib/run-status.generated.js +66 -0
  419. package/dist/src/lib/run-status.generated.js.map +1 -0
  420. package/dist/src/lib/run-status.js +19 -0
  421. package/dist/src/lib/run-status.js.map +1 -0
  422. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  423. package/dist/src/lib/server-text-normalization.js +90 -0
  424. package/dist/src/lib/server-text-normalization.js.map +1 -0
  425. package/dist/src/lib/server-url.d.ts +22 -0
  426. package/dist/src/lib/server-url.js +33 -0
  427. package/dist/src/lib/server-url.js.map +1 -0
  428. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  429. package/dist/src/lib/signing-secret-status.js +116 -0
  430. package/dist/src/lib/signing-secret-status.js.map +1 -0
  431. package/dist/src/lib/skill-installer.d.ts +71 -0
  432. package/dist/src/lib/skill-installer.js +441 -0
  433. package/dist/src/lib/skill-installer.js.map +1 -0
  434. package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
  435. package/dist/src/lib/snapshot-audit-source.js +58 -0
  436. package/dist/src/lib/snapshot-audit-source.js.map +1 -0
  437. package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
  438. package/dist/src/lib/snapshot-audit-store.js +196 -0
  439. package/dist/src/lib/snapshot-audit-store.js.map +1 -0
  440. package/dist/src/lib/snapshot-audit.d.ts +207 -0
  441. package/dist/src/lib/snapshot-audit.js +431 -0
  442. package/dist/src/lib/snapshot-audit.js.map +1 -0
  443. package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
  444. package/dist/src/lib/snapshot-build-rows.js +87 -0
  445. package/dist/src/lib/snapshot-build-rows.js.map +1 -0
  446. package/dist/src/lib/snapshot-build.d.ts +50 -0
  447. package/dist/src/lib/snapshot-build.js +111 -0
  448. package/dist/src/lib/snapshot-build.js.map +1 -0
  449. package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
  450. package/dist/src/lib/snapshot-manifest-layout.js +70 -0
  451. package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
  452. package/dist/src/lib/snapshots.d.ts +98 -0
  453. package/dist/src/lib/snapshots.js +294 -0
  454. package/dist/src/lib/snapshots.js.map +1 -0
  455. package/dist/src/lib/step-run-table.d.ts +43 -0
  456. package/dist/src/lib/step-run-table.js +129 -0
  457. package/dist/src/lib/step-run-table.js.map +1 -0
  458. package/dist/src/lib/storage-pending-retry.d.ts +26 -0
  459. package/dist/src/lib/storage-pending-retry.js +42 -0
  460. package/dist/src/lib/storage-pending-retry.js.map +1 -0
  461. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
  462. package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
  463. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
  464. package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
  465. package/dist/src/lib/swift-codegen/banners.js +25 -0
  466. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  467. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  468. package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
  469. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  470. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  471. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  472. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  473. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
  474. package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
  475. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  476. package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
  477. package/dist/src/lib/swift-codegen/generator.js +457 -0
  478. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  479. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
  480. package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
  481. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  482. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  483. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  484. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  485. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  486. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  487. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  488. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  489. package/dist/src/lib/sync-dir-selector.js +30 -0
  490. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  491. package/dist/src/lib/sync-paths.d.ts +128 -0
  492. package/dist/src/lib/sync-paths.js +195 -0
  493. package/dist/src/lib/sync-paths.js.map +1 -0
  494. package/dist/src/lib/sync-resource-types.d.ts +563 -0
  495. package/dist/src/lib/sync-resource-types.js +1073 -0
  496. package/dist/src/lib/sync-resource-types.js.map +1 -0
  497. package/dist/src/lib/sync-selectors.d.ts +138 -0
  498. package/dist/src/lib/sync-selectors.js +289 -0
  499. package/dist/src/lib/sync-selectors.js.map +1 -0
  500. package/dist/src/lib/template.d.ts +170 -0
  501. package/dist/src/lib/template.js +484 -68
  502. package/dist/src/lib/template.js.map +1 -1
  503. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  504. package/dist/src/lib/test-case-file-names.js +91 -0
  505. package/dist/src/lib/test-case-file-names.js.map +1 -0
  506. package/dist/src/lib/test-case-keys.d.ts +29 -0
  507. package/dist/src/lib/test-case-keys.js +55 -0
  508. package/dist/src/lib/test-case-keys.js.map +1 -0
  509. package/dist/src/lib/test-case-variables.d.ts +29 -0
  510. package/dist/src/lib/test-case-variables.js +71 -0
  511. package/dist/src/lib/test-case-variables.js.map +1 -0
  512. package/dist/src/lib/token-inject.d.ts +56 -0
  513. package/dist/src/lib/token-inject.js +204 -0
  514. package/dist/src/lib/token-inject.js.map +1 -0
  515. package/dist/src/lib/toml-database-config.d.ts +123 -0
  516. package/dist/src/lib/toml-database-config.js +544 -0
  517. package/dist/src/lib/toml-database-config.js.map +1 -0
  518. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  519. package/dist/src/lib/toml-metadata-config.js +476 -0
  520. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  521. package/dist/src/lib/toml-native-form.d.ts +46 -0
  522. package/dist/src/lib/toml-native-form.js +78 -0
  523. package/dist/src/lib/toml-native-form.js.map +1 -0
  524. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  525. package/dist/src/lib/toml-params-validator.js +298 -0
  526. package/dist/src/lib/toml-params-validator.js.map +1 -0
  527. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  528. package/dist/src/lib/toml-scalar-edit.js +283 -0
  529. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  530. package/dist/src/lib/user-selector.d.ts +24 -0
  531. package/dist/src/lib/user-selector.js +33 -0
  532. package/dist/src/lib/user-selector.js.map +1 -0
  533. package/dist/src/lib/version-check.d.ts +35 -0
  534. package/dist/src/lib/version-check.js +241 -0
  535. package/dist/src/lib/version-check.js.map +1 -0
  536. package/dist/src/lib/watch.d.ts +121 -0
  537. package/dist/src/lib/watch.js +169 -0
  538. package/dist/src/lib/watch.js.map +1 -0
  539. package/dist/src/lib/web-url.d.ts +40 -0
  540. package/dist/src/lib/web-url.js +76 -0
  541. package/dist/src/lib/web-url.js.map +1 -0
  542. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  543. package/dist/src/lib/webhook-deliver.js +519 -0
  544. package/dist/src/lib/webhook-deliver.js.map +1 -0
  545. package/dist/src/lib/workflow-apply.d.ts +110 -0
  546. package/dist/src/lib/workflow-apply.js +164 -0
  547. package/dist/src/lib/workflow-apply.js.map +1 -0
  548. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  549. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  550. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  551. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  552. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  553. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  554. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  555. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  556. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  557. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  558. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  559. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  560. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  561. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  562. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  563. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  564. package/dist/src/lib/workflow-config-apply.js +137 -0
  565. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  566. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  567. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  568. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  569. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  570. package/dist/src/lib/workflow-defaults.js +41 -0
  571. package/dist/src/lib/workflow-defaults.js.map +1 -0
  572. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  573. package/dist/src/lib/workflow-fragments.js +342 -0
  574. package/dist/src/lib/workflow-fragments.js.map +1 -0
  575. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  576. package/dist/src/lib/workflow-include-preserve.js +286 -0
  577. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  578. package/dist/src/lib/workflow-payload.d.ts +98 -0
  579. package/dist/src/lib/workflow-payload.js +178 -0
  580. package/dist/src/lib/workflow-payload.js.map +1 -0
  581. package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
  582. package/dist/src/lib/workflow-toml-validator.js +770 -0
  583. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  584. package/dist/src/lib/workflow-usage.d.ts +196 -0
  585. package/dist/src/lib/workflow-usage.js +310 -0
  586. package/dist/src/lib/workflow-usage.js.map +1 -0
  587. package/dist/src/types/index.d.ts +591 -0
  588. package/dist/src/validators.d.ts +65 -0
  589. package/dist/src/validators.js +64 -0
  590. package/dist/src/validators.js.map +1 -0
  591. package/package.json +34 -9
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Resolve the identifier the `prompts tests` and `workflows tests` verbs take
3
+ * (issue #3249).
4
+ *
5
+ * The block-testing endpoints key on the composite `<type>#<blockId>` and
6
+ * never check that the block exists, so an identifier that names no prompt or
7
+ * workflow came back as an empty page rather than a 404: `tests list <key>`
8
+ * printed "No test cases found." and exited 0, and a checked-in
9
+ * `prompts/<key>.tests/` sidecar looked unregistered until the id was tried.
10
+ * The key is what an author has to hand — `prompts list` prints it beside the
11
+ * id, and the config tree, `config push` and the test sidecars are all
12
+ * key-addressed — so a wrong identifier was indistinguishable from a block
13
+ * with no cases.
14
+ *
15
+ * Resolving here — against the app's own list — is what makes an empty
16
+ * listing mean "this block exists and has no cases", the same answer #3000
17
+ * gave the integration verbs (`integration-selector.ts`). The list is the one
18
+ * call that can answer both halves: it maps a key to its id and it proves the
19
+ * identifier belongs to THIS app. It is drained across every page, because
20
+ * the server pages prompts at 50 and workflows at 25 by default. Archived
21
+ * blocks are included, because their cases stay inspectable.
22
+ *
23
+ * Keys are matched exactly first. The server does not lowercase prompt or
24
+ * workflow keys on write, so a case-insensitive match is a fallback that
25
+ * resolves only when it is unambiguous — two keys differing only in case are
26
+ * refused by name rather than picked between (the `resolveScript` rule in
27
+ * `scripts.ts`).
28
+ */
29
+ export interface ResolvedBlock {
30
+ blockId: string;
31
+ /** The block's key, when the summary carries one. */
32
+ blockKey?: string;
33
+ }
34
+ type ListPage = {
35
+ items: any[];
36
+ nextCursor?: string | null;
37
+ };
38
+ type ListParams = {
39
+ cursor?: string;
40
+ limit?: number;
41
+ };
42
+ /** The one method each resolver needs from `ApiClient`. */
43
+ export interface PromptLister {
44
+ listPrompts(appId: string, params?: ListParams): Promise<ListPage>;
45
+ }
46
+ export interface WorkflowLister {
47
+ listWorkflows(appId: string, params?: ListParams): Promise<ListPage>;
48
+ }
49
+ /**
50
+ * Map a prompt ID or key to its prompt ID.
51
+ *
52
+ * Throws — naming the identifier — when nothing in the app matches, so the
53
+ * caller's existing catch prints the message and exits non-zero.
54
+ */
55
+ export declare function resolvePromptSelector(client: PromptLister, appId: string, selector: string): Promise<ResolvedBlock>;
56
+ /** The same resolution for a workflow ID or key. */
57
+ export declare function resolveWorkflowSelector(client: WorkflowLister, appId: string, selector: string): Promise<ResolvedBlock>;
58
+ export {};
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Resolve the identifier the `prompts tests` and `workflows tests` verbs take
3
+ * (issue #3249).
4
+ *
5
+ * The block-testing endpoints key on the composite `<type>#<blockId>` and
6
+ * never check that the block exists, so an identifier that names no prompt or
7
+ * workflow came back as an empty page rather than a 404: `tests list <key>`
8
+ * printed "No test cases found." and exited 0, and a checked-in
9
+ * `prompts/<key>.tests/` sidecar looked unregistered until the id was tried.
10
+ * The key is what an author has to hand — `prompts list` prints it beside the
11
+ * id, and the config tree, `config push` and the test sidecars are all
12
+ * key-addressed — so a wrong identifier was indistinguishable from a block
13
+ * with no cases.
14
+ *
15
+ * Resolving here — against the app's own list — is what makes an empty
16
+ * listing mean "this block exists and has no cases", the same answer #3000
17
+ * gave the integration verbs (`integration-selector.ts`). The list is the one
18
+ * call that can answer both halves: it maps a key to its id and it proves the
19
+ * identifier belongs to THIS app. It is drained across every page, because
20
+ * the server pages prompts at 50 and workflows at 25 by default. Archived
21
+ * blocks are included, because their cases stay inspectable.
22
+ *
23
+ * Keys are matched exactly first. The server does not lowercase prompt or
24
+ * workflow keys on write, so a case-insensitive match is a fallback that
25
+ * resolves only when it is unambiguous — two keys differing only in case are
26
+ * refused by name rather than picked between (the `resolveScript` rule in
27
+ * `scripts.ts`).
28
+ */
29
+ import { paginateAll } from "./paginate.js";
30
+ const PROMPT_KIND = {
31
+ noun: "prompt",
32
+ idField: "promptId",
33
+ keyField: "promptKey",
34
+ listCommand: "primitive prompts list",
35
+ };
36
+ const WORKFLOW_KIND = {
37
+ noun: "workflow",
38
+ idField: "workflowId",
39
+ keyField: "workflowKey",
40
+ listCommand: "primitive workflows list",
41
+ };
42
+ /** The largest page the list endpoints accept (#1316), so a drain is few calls. */
43
+ const PAGE_LIMIT = 100;
44
+ /**
45
+ * Map a prompt ID or key to its prompt ID.
46
+ *
47
+ * Throws — naming the identifier — when nothing in the app matches, so the
48
+ * caller's existing catch prints the message and exits non-zero.
49
+ */
50
+ export function resolvePromptSelector(client, appId, selector) {
51
+ return resolveBlockSelector(PROMPT_KIND, (params) => client.listPrompts(appId, params), appId, selector);
52
+ }
53
+ /** The same resolution for a workflow ID or key. */
54
+ export function resolveWorkflowSelector(client, appId, selector) {
55
+ return resolveBlockSelector(WORKFLOW_KIND, (params) => client.listWorkflows(appId, params), appId, selector);
56
+ }
57
+ async function resolveBlockSelector(kind, list, appId, selector) {
58
+ const identifier = (selector ?? "").trim();
59
+ if (!identifier) {
60
+ throw new Error(`A ${kind.noun} ID or key is required.`);
61
+ }
62
+ const items = await paginateAll((cursor) => list(cursor ? { cursor, limit: PAGE_LIMIT } : { limit: PAGE_LIMIT }));
63
+ const keyOf = (item) => typeof item?.[kind.keyField] === "string" ? item[kind.keyField] : undefined;
64
+ let match = items.find((item) => item?.[kind.idField] === identifier) ??
65
+ items.find((item) => keyOf(item) === identifier);
66
+ if (!match) {
67
+ const lowered = identifier.toLowerCase();
68
+ const ci = items.filter((item) => keyOf(item)?.toLowerCase() === lowered);
69
+ if (ci.length > 1) {
70
+ const candidates = ci
71
+ .map((item) => keyOf(item))
72
+ .sort()
73
+ .join(", ");
74
+ throw new Error(`${capitalize(kind.noun)} key is ambiguous: ${identifier}. Did you mean: ${candidates}? ` +
75
+ `Keys differing only in case must be given exactly, or by ID.`);
76
+ }
77
+ match = ci[0];
78
+ }
79
+ if (!match) {
80
+ throw new Error(`No ${kind.noun} '${identifier}' in app ${appId}. ` +
81
+ `Pass a ${kind.noun} key or ID from '${kind.listCommand}'.`);
82
+ }
83
+ const blockKey = keyOf(match);
84
+ return {
85
+ blockId: match[kind.idField] ?? identifier,
86
+ ...(blockKey ? { blockKey } : {}),
87
+ };
88
+ }
89
+ function capitalize(word) {
90
+ return word.charAt(0).toUpperCase() + word.slice(1);
91
+ }
92
+ //# sourceMappingURL=block-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-selector.js","sourceRoot":"","sources":["../../../src/lib/block-selector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Canonical JSON serialization used for content comparison and hashing.
3
+ *
4
+ * Key order is normalized (sorted) so two structurally identical objects
5
+ * always produce the same string, while array order is preserved (step order
6
+ * matters in workflows).
7
+ *
8
+ * Lives in `lib/` rather than inside `commands/sync.ts` so both the sync
9
+ * command and the workflow-include reconciliation helper can compare values
10
+ * the same way without a circular import.
11
+ */
12
+ export declare function canonicalJsonStringify(value: any): string;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Canonical JSON serialization used for content comparison and hashing.
3
+ *
4
+ * Key order is normalized (sorted) so two structurally identical objects
5
+ * always produce the same string, while array order is preserved (step order
6
+ * matters in workflows).
7
+ *
8
+ * Lives in `lib/` rather than inside `commands/sync.ts` so both the sync
9
+ * command and the workflow-include reconciliation helper can compare values
10
+ * the same way without a circular import.
11
+ */
12
+ export function canonicalJsonStringify(value) {
13
+ if (value === null || typeof value !== "object") {
14
+ return JSON.stringify(value);
15
+ }
16
+ if (Array.isArray(value)) {
17
+ return "[" + value.map((v) => canonicalJsonStringify(v)).join(",") + "]";
18
+ }
19
+ // Honor `toJSON` before the key walk. A `Date` — or smol-toml's `TomlDate`,
20
+ // what a TOML datetime literal parses to — has no enumerable own keys, so
21
+ // the `Object.keys()` walk below would collapse it to "{}" and every
22
+ // datetime would hash identically (issue #1919). Both implement `toJSON`,
23
+ // returning the ISO string; recursing on it makes date-like values (nested
24
+ // ones too) participate in the hash. Matches JSON.stringify's own semantics.
25
+ if (typeof value.toJSON === "function") {
26
+ return canonicalJsonStringify(value.toJSON());
27
+ }
28
+ const keys = Object.keys(value).sort();
29
+ return ("{" +
30
+ keys
31
+ .map((k) => JSON.stringify(k) + ":" + canonicalJsonStringify(value[k]))
32
+ .join(",") +
33
+ "}");
34
+ }
35
+ //# sourceMappingURL=canonical-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../../src/lib/canonical-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAU;IAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3E,CAAC;IACD,4EAA4E;IAC5E,0EAA0E;IAC1E,qEAAqE;IACrE,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,CACL,GAAG;QACH,IAAI;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE,IAAI,CAAC,GAAG,CAAC;QACZ,GAAG,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const DEFAULT_CHANNEL_BRANCH = "main";
2
+ /**
3
+ * Normalize a server URL for comparison: keep the scheme/host/port, strip all
4
+ * trailing slashes from the pathname. Returns null for an unparseable value.
5
+ * `http` vs `https` intentionally does NOT normalize to the same string
6
+ * (scheme is significant).
7
+ */
8
+ export declare function normalizeServerUrl(raw: string): string | null;
9
+ /**
10
+ * Is `value` a plausible git branch ref that is safe to interpolate into a
11
+ * GitHub URL path? Deliberately strict — only ASCII letters/digits and
12
+ * `._/-`, no leading dash, no `..`, capped length. This guards the branch
13
+ * override env vars so no arbitrary string reaches a URL.
14
+ */
15
+ export declare function isValidBranchName(value: string): boolean;
16
+ /**
17
+ * Resolve which channel branch to fetch from. Precedence:
18
+ * 1. `override` (an undocumented, internal env var — `overrideName` is
19
+ * only used in the error message). An empty value is ignored; a value
20
+ * that is not a plausible git ref is rejected (throws).
21
+ * 2. Alpha detection: a normalized-URL match of the resolved server URL
22
+ * against `ALPHA_SERVER_URL` → `alpha`.
23
+ * 3. Otherwise `main` (production / local / any non-alpha target, or no
24
+ * target at all when the CLI is logged out).
25
+ *
26
+ * Pure and side-effect free: the caller passes the resolved server URL (or
27
+ * `undefined` when `getServerUrl()` threw) and the override, so this is
28
+ * fully unit-testable without config/credentials.
29
+ */
30
+ export declare function resolveChannelBranch(serverUrl: string | undefined, override: string | undefined, overrideName: string): string;
@@ -0,0 +1,68 @@
1
+ import { ALPHA_SERVER_URL } from "./constants.js";
2
+ // Channel resolution shared by every surface that fetches from a
3
+ // branch-as-channel repo (issue #1934): `primitive guides` (the
4
+ // primitive-docs-site repo) and `primitive init` (the template mirrors).
5
+ // Branches are named after the deploy environment they describe: `main` =
6
+ // production, `alpha` = the alpha environment.
7
+ export const DEFAULT_CHANNEL_BRANCH = "main";
8
+ /**
9
+ * Normalize a server URL for comparison: keep the scheme/host/port, strip all
10
+ * trailing slashes from the pathname. Returns null for an unparseable value.
11
+ * `http` vs `https` intentionally does NOT normalize to the same string
12
+ * (scheme is significant).
13
+ */
14
+ export function normalizeServerUrl(raw) {
15
+ try {
16
+ const u = new URL(raw);
17
+ const path = u.pathname.replace(/\/+$/, "");
18
+ return `${u.protocol}//${u.host}${path}`;
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ /**
25
+ * Is `value` a plausible git branch ref that is safe to interpolate into a
26
+ * GitHub URL path? Deliberately strict — only ASCII letters/digits and
27
+ * `._/-`, no leading dash, no `..`, capped length. This guards the branch
28
+ * override env vars so no arbitrary string reaches a URL.
29
+ */
30
+ export function isValidBranchName(value) {
31
+ if (value.length === 0 || value.length > 100)
32
+ return false;
33
+ if (value.includes(".."))
34
+ return false;
35
+ return /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(value);
36
+ }
37
+ /**
38
+ * Resolve which channel branch to fetch from. Precedence:
39
+ * 1. `override` (an undocumented, internal env var — `overrideName` is
40
+ * only used in the error message). An empty value is ignored; a value
41
+ * that is not a plausible git ref is rejected (throws).
42
+ * 2. Alpha detection: a normalized-URL match of the resolved server URL
43
+ * against `ALPHA_SERVER_URL` → `alpha`.
44
+ * 3. Otherwise `main` (production / local / any non-alpha target, or no
45
+ * target at all when the CLI is logged out).
46
+ *
47
+ * Pure and side-effect free: the caller passes the resolved server URL (or
48
+ * `undefined` when `getServerUrl()` threw) and the override, so this is
49
+ * fully unit-testable without config/credentials.
50
+ */
51
+ export function resolveChannelBranch(serverUrl, override, overrideName) {
52
+ const trimmedOverride = override?.trim();
53
+ if (trimmedOverride) {
54
+ if (!isValidBranchName(trimmedOverride)) {
55
+ throw new Error(`Invalid ${overrideName} "${override}": must be a plausible git branch name.`);
56
+ }
57
+ return trimmedOverride;
58
+ }
59
+ if (serverUrl) {
60
+ const target = normalizeServerUrl(serverUrl);
61
+ const alpha = normalizeServerUrl(ALPHA_SERVER_URL);
62
+ if (target !== null && alpha !== null && target === alpha) {
63
+ return "alpha";
64
+ }
65
+ }
66
+ return DEFAULT_CHANNEL_BRANCH;
67
+ }
68
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/lib/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,iEAAiE;AACjE,gEAAgE;AAChE,yEAAyE;AACzE,0EAA0E;AAC1E,+CAA+C;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAA6B,EAC7B,QAA4B,EAC5B,YAAoB;IAEpB,MAAM,eAAe,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,WAAW,YAAY,KAAK,QAAQ,yCAAyC,CAC9E,CAAC;QACJ,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Machine-readable CLI command manifest (issue #983).
3
+ *
4
+ * Serializes the full commander command tree (commands, subcommands, args,
5
+ * options, aliases, global options, version) into a stable JSON shape so that
6
+ * external tooling — e.g. `primitive-docs` CI — can drift-gate documented CLI
7
+ * invocations against the *published* CLI rather than scraping `--help` text.
8
+ *
9
+ * The walker uses only commander v12 public accessors, so it is decoupled from
10
+ * commander internals:
11
+ * - `cmd.name()`, `cmd.description()`, `cmd.aliases()`
12
+ * - `cmd.commands` (recurse into subcommands)
13
+ * - `cmd.registeredArguments` (positional args)
14
+ * - `cmd.options` (per-command options)
15
+ *
16
+ * `globalOptions` is the top-level program's own options (e.g. `-e, --env`),
17
+ * reported once at the root rather than repeated on every command.
18
+ *
19
+ * `schemaVersion` is the contract knob: consumers assert they understand the
20
+ * shape and fail loud if a future CLI bumps it. Bumping it is a breaking change
21
+ * for downstream tooling.
22
+ */
23
+ import type { Command } from "commander";
24
+ /** Current manifest schema version. Bump on any breaking shape change. */
25
+ export declare const CLI_MANIFEST_SCHEMA_VERSION = 1;
26
+ export interface ManifestArg {
27
+ name: string;
28
+ required: boolean;
29
+ variadic: boolean;
30
+ description: string;
31
+ }
32
+ export interface ManifestOption {
33
+ flags: string;
34
+ description: string;
35
+ required: boolean;
36
+ defaultValue: unknown;
37
+ /**
38
+ * True for options registered with commander's `hideHelp()` — deprecated
39
+ * aliases kept working for one window but not part of the supported surface
40
+ * (#2357). Consumers that treat the manifest as the flag allowlist (the
41
+ * docs CLI gate) should exclude these so new documentation cannot be
42
+ * written against a flag that is on its way out.
43
+ */
44
+ hidden: boolean;
45
+ }
46
+ export interface ManifestCommand {
47
+ name: string;
48
+ description: string;
49
+ aliases: string[];
50
+ args: ManifestArg[];
51
+ options: ManifestOption[];
52
+ commands: ManifestCommand[];
53
+ }
54
+ export interface CliManifest {
55
+ schemaVersion: number;
56
+ name: string;
57
+ version: string;
58
+ globalOptions: ManifestOption[];
59
+ commands: ManifestCommand[];
60
+ }
61
+ /**
62
+ * Build the JSON manifest for a fully-built commander program.
63
+ *
64
+ * @param program The root commander `Command` after all subcommands are
65
+ * registered.
66
+ * @param version The CLI version (typically `pkg.version`).
67
+ */
68
+ export declare function buildCliManifest(program: Command, version: string): CliManifest;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Machine-readable CLI command manifest (issue #983).
3
+ *
4
+ * Serializes the full commander command tree (commands, subcommands, args,
5
+ * options, aliases, global options, version) into a stable JSON shape so that
6
+ * external tooling — e.g. `primitive-docs` CI — can drift-gate documented CLI
7
+ * invocations against the *published* CLI rather than scraping `--help` text.
8
+ *
9
+ * The walker uses only commander v12 public accessors, so it is decoupled from
10
+ * commander internals:
11
+ * - `cmd.name()`, `cmd.description()`, `cmd.aliases()`
12
+ * - `cmd.commands` (recurse into subcommands)
13
+ * - `cmd.registeredArguments` (positional args)
14
+ * - `cmd.options` (per-command options)
15
+ *
16
+ * `globalOptions` is the top-level program's own options (e.g. `-e, --env`),
17
+ * reported once at the root rather than repeated on every command.
18
+ *
19
+ * `schemaVersion` is the contract knob: consumers assert they understand the
20
+ * shape and fail loud if a future CLI bumps it. Bumping it is a breaking change
21
+ * for downstream tooling.
22
+ */
23
+ /** Current manifest schema version. Bump on any breaking shape change. */
24
+ export const CLI_MANIFEST_SCHEMA_VERSION = 1;
25
+ function serializeArg(arg) {
26
+ return {
27
+ name: arg.name(),
28
+ required: !!arg.required,
29
+ variadic: !!arg.variadic,
30
+ description: arg.description || "",
31
+ };
32
+ }
33
+ function serializeOption(opt) {
34
+ return {
35
+ flags: opt.flags,
36
+ description: opt.description || "",
37
+ required: !!opt.required,
38
+ defaultValue: opt.defaultValue ?? null,
39
+ hidden: !!opt.hidden,
40
+ };
41
+ }
42
+ function serializeCommand(cmd) {
43
+ return {
44
+ name: cmd.name(),
45
+ description: cmd.description() || "",
46
+ aliases: cmd.aliases() || [],
47
+ args: (cmd.registeredArguments || []).map(serializeArg),
48
+ options: (cmd.options || []).map(serializeOption),
49
+ commands: (cmd.commands || []).map(serializeCommand),
50
+ };
51
+ }
52
+ /**
53
+ * Build the JSON manifest for a fully-built commander program.
54
+ *
55
+ * @param program The root commander `Command` after all subcommands are
56
+ * registered.
57
+ * @param version The CLI version (typically `pkg.version`).
58
+ */
59
+ export function buildCliManifest(program, version) {
60
+ const root = program;
61
+ return {
62
+ schemaVersion: CLI_MANIFEST_SCHEMA_VERSION,
63
+ name: root.name(),
64
+ version,
65
+ // Top-level program options are the "global" options (e.g. -e, --env);
66
+ // per-command options live under each command in `commands[]`.
67
+ globalOptions: (root.options || []).map(serializeOption),
68
+ commands: (root.commands || []).map(serializeCommand),
69
+ };
70
+ }
71
+ //# sourceMappingURL=cli-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-manifest.js","sourceRoot":"","sources":["../../../src/lib/cli-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAyC7C,SAAS,YAAY,CAAC,GAAQ;IAC5B,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACxB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ;IAC/B,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;QAClC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACxB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;QACtC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ;IAChC,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;QACpC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QACvD,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;QACjD,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACrD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,OAAe;IAChE,MAAM,IAAI,GAAG,OAAc,CAAC;IAC5B,OAAO;QACL,aAAa,EAAE,2BAA2B;QAC1C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,OAAO;QACP,uEAAuE;QACvE,+DAA+D;QAC/D,aAAa,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;QACxD,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Shared write / `--check` / stale-cleanup machinery for the CLI codegen
3
+ * commands (issue #1442, sponsor decision #6).
4
+ *
5
+ * Both `databases codegen` (#814) and `workflows codegen` (#1442) render a set
6
+ * of `*.generated.ts` files and then either write them to disk or, under
7
+ * `--check`, compare the would-be output byte-for-byte against what's on disk.
8
+ * The write/compare/cleanup half is identical between them, so it lives here
9
+ * rather than being cloned into each generator.
10
+ *
11
+ * The RENDERING (schema → TS) stays in each generator — only the on-disk
12
+ * lifecycle is shared: `mkdir`, write, orphan cleanup, and the `--check`
13
+ * missing/differs/stale comparison.
14
+ */
15
+ export type GeneratedFileMismatchReason = "missing" | "differs" | "stale";
16
+ export interface GeneratedFileMismatch {
17
+ filePath: string;
18
+ reason: GeneratedFileMismatchReason;
19
+ }
20
+ export interface WriteOrCheckResult {
21
+ /** Files written (or that would be written under `--check`). */
22
+ writtenFiles: string[];
23
+ /** Stale `*.generated.ts` files deleted (empty under `--check`). */
24
+ deletedFiles: string[];
25
+ /** Only populated under `--check`: files whose on-disk content is out of date. */
26
+ mismatches: GeneratedFileMismatch[];
27
+ }
28
+ export interface WriteOrCheckOptions {
29
+ /** Directory the generated files live in. */
30
+ outputDir: string;
31
+ /** Absolute file path → rendered content. */
32
+ filesToWrite: Map<string, string>;
33
+ /**
34
+ * If true, do not write. Compare each would-be file to disk and return a
35
+ * non-empty `mismatches` list if anything would change.
36
+ */
37
+ check?: boolean;
38
+ /**
39
+ * When true, `filesToWrite` is the COMPLETE set of generated files this
40
+ * output dir owns, so orphaned `*.generated.ts` files are cleaned up (write
41
+ * mode) or flagged `stale` (check mode). When false — a run filtered to a
42
+ * subset — sibling generated files are left intact and not flagged, because
43
+ * `filesToWrite` is only a partial view.
44
+ */
45
+ fullOwnership: boolean;
46
+ /**
47
+ * Suffix identifying generator-owned files (for orphan cleanup / stale
48
+ * detection). Defaults to `.generated.ts`. Both `databases codegen` and
49
+ * `workflows codegen` write one `<name>.generated.ts` file per entity into
50
+ * their OWN default output dir (`database-type-configs/generated/` and
51
+ * `workflows/generated/` respectively), so suffix-based ownership never
52
+ * reaches the other generator's files.
53
+ */
54
+ generatedSuffix?: string;
55
+ /**
56
+ * Optional banner prefix that further narrows ownership by file CONTENT.
57
+ * When set, a `<suffix>` file is only considered owned (for orphan cleanup /
58
+ * stale detection) if its contents also start with this prefix.
59
+ *
60
+ * The Swift path needs this: both `workflows codegen --lang swift` and the
61
+ * Swift model codegen (`swift-bao-codegen`) emit `.generated.swift` files and
62
+ * may share one output dir (a Sources dir in the consuming app). Suffix alone
63
+ * cannot tell them apart, so a suffix-only sweep would delete the other
64
+ * generator's files. Scoping by the emitted header banner keeps each
65
+ * generator's cleanup to its own files. The TS callers leave this unset —
66
+ * their default `generated/` dirs are single-generator, so suffix ownership
67
+ * is already unambiguous.
68
+ *
69
+ * Several banners may be given: a generator whose banner has been RENAMED
70
+ * still owns the files it stamped with the old one (issue #2760), and
71
+ * dropping them from the set would orphan every pre-rename output.
72
+ */
73
+ ownershipBanner?: string | readonly string[];
74
+ /**
75
+ * Banners belonging to OTHER generators that must never be overwritten by
76
+ * this run (issue #1653, class 3b). When two generators share one `--output`
77
+ * dir and a name coincides (e.g. a workflow key equals a database type name),
78
+ * both resolve to the identical `<name>.generated.swift` path. Without this
79
+ * guard the second run silently clobbers the first (cleanup skips the foreign
80
+ * file because it carries the other banner, then the write loop overwrites
81
+ * it). Before writing OR checking, if a target path already holds a file whose
82
+ * content starts with one of these foreign banners, the run fails.
83
+ */
84
+ foreignOwnershipBanners?: string[];
85
+ /**
86
+ * Builds the error thrown when a `foreignOwnershipBanners` collision is
87
+ * detected. Lets the caller throw its own named error (e.g. the Swift path's
88
+ * `SwiftCodegenError`) without this shared module depending on it. When unset,
89
+ * a generic `Error` is thrown.
90
+ */
91
+ onForeignBannerCollision?: (info: {
92
+ filePath: string;
93
+ foreignBanner: string;
94
+ }) => Error;
95
+ }
96
+ /**
97
+ * Write (or `--check`) a set of rendered generated files, handling orphan
98
+ * cleanup / stale detection. Pure lifecycle: the caller renders content, this
99
+ * owns the disk side.
100
+ */
101
+ export declare function writeOrCheckGeneratedFiles(options: WriteOrCheckOptions): Promise<WriteOrCheckResult>;