primitive-admin 1.1.0-alpha.7 → 1.1.0-alpha.71

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 (438) hide show
  1. package/README.md +404 -80
  2. package/assets/skill/skills/primitive-platform/SKILL.md +808 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +294 -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 +138 -19
  8. package/dist/src/commands/admins.js.map +1 -1
  9. package/dist/src/commands/analytics.d.ts +2 -0
  10. package/dist/src/commands/analytics.js +544 -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 +51 -96
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth.d.ts +2 -0
  16. package/dist/src/commands/auth.js +177 -7
  17. package/dist/src/commands/auth.js.map +1 -1
  18. package/dist/src/commands/blob-buckets.d.ts +2 -0
  19. package/dist/src/commands/blob-buckets.js +330 -0
  20. package/dist/src/commands/blob-buckets.js.map +1 -0
  21. package/dist/src/commands/catalog.d.ts +2 -0
  22. package/dist/src/commands/catalog.js +37 -38
  23. package/dist/src/commands/catalog.js.map +1 -1
  24. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  25. package/dist/src/commands/collection-type-configs.js +92 -0
  26. package/dist/src/commands/collection-type-configs.js.map +1 -0
  27. package/dist/src/commands/collections.d.ts +2 -0
  28. package/dist/src/commands/collections.js +565 -0
  29. package/dist/src/commands/collections.js.map +1 -0
  30. package/dist/src/commands/comparisons.d.ts +2 -0
  31. package/dist/src/commands/comparisons.js +6 -6
  32. package/dist/src/commands/comparisons.js.map +1 -1
  33. package/dist/src/commands/config.d.ts +46 -0
  34. package/dist/src/commands/config.js +479 -0
  35. package/dist/src/commands/config.js.map +1 -0
  36. package/dist/src/commands/connections.d.ts +2 -0
  37. package/dist/src/commands/connections.js +100 -0
  38. package/dist/src/commands/connections.js.map +1 -0
  39. package/dist/src/commands/cron-triggers.d.ts +2 -0
  40. package/dist/src/commands/cron-triggers.js +265 -0
  41. package/dist/src/commands/cron-triggers.js.map +1 -0
  42. package/dist/src/commands/database-type-configs.d.ts +2 -0
  43. package/dist/src/commands/database-type-configs.js +171 -0
  44. package/dist/src/commands/database-type-configs.js.map +1 -0
  45. package/dist/src/commands/database-types.d.ts +2 -0
  46. package/dist/src/commands/database-types.js +471 -0
  47. package/dist/src/commands/database-types.js.map +1 -0
  48. package/dist/src/commands/databases.d.ts +65 -0
  49. package/dist/src/commands/databases.js +2140 -112
  50. package/dist/src/commands/databases.js.map +1 -1
  51. package/dist/src/commands/documents.d.ts +2 -0
  52. package/dist/src/commands/documents.js +1357 -19
  53. package/dist/src/commands/documents.js.map +1 -1
  54. package/dist/src/commands/email-templates.d.ts +2 -0
  55. package/dist/src/commands/email-templates.js +174 -0
  56. package/dist/src/commands/email-templates.js.map +1 -0
  57. package/dist/src/commands/env.d.ts +23 -0
  58. package/dist/src/commands/env.js +333 -0
  59. package/dist/src/commands/env.js.map +1 -0
  60. package/dist/src/commands/feature-flags.d.ts +14 -0
  61. package/dist/src/commands/feature-flags.js +116 -0
  62. package/dist/src/commands/feature-flags.js.map +1 -0
  63. package/dist/src/commands/group-type-configs.d.ts +2 -0
  64. package/dist/src/commands/group-type-configs.js +86 -0
  65. package/dist/src/commands/group-type-configs.js.map +1 -0
  66. package/dist/src/commands/groups.d.ts +2 -0
  67. package/dist/src/commands/groups.js +38 -99
  68. package/dist/src/commands/groups.js.map +1 -1
  69. package/dist/src/commands/guides.d.ts +223 -0
  70. package/dist/src/commands/guides.js +617 -65
  71. package/dist/src/commands/guides.js.map +1 -1
  72. package/dist/src/commands/init.d.ts +25 -0
  73. package/dist/src/commands/init.js +1605 -208
  74. package/dist/src/commands/init.js.map +1 -1
  75. package/dist/src/commands/integrations.d.ts +2 -0
  76. package/dist/src/commands/integrations.js +380 -178
  77. package/dist/src/commands/integrations.js.map +1 -1
  78. package/dist/src/commands/llm.d.ts +2 -0
  79. package/dist/src/commands/llm.js +4 -2
  80. package/dist/src/commands/llm.js.map +1 -1
  81. package/dist/src/commands/locks.d.ts +8 -0
  82. package/dist/src/commands/locks.js +160 -0
  83. package/dist/src/commands/locks.js.map +1 -0
  84. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  85. package/dist/src/commands/metadata-category-configs.js +112 -0
  86. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  87. package/dist/src/commands/metadata.d.ts +2 -0
  88. package/dist/src/commands/metadata.js +281 -0
  89. package/dist/src/commands/metadata.js.map +1 -0
  90. package/dist/src/commands/prompts.d.ts +2 -0
  91. package/dist/src/commands/prompts.js +225 -584
  92. package/dist/src/commands/prompts.js.map +1 -1
  93. package/dist/src/commands/rule-sets.d.ts +3 -0
  94. package/dist/src/commands/rule-sets.js +272 -0
  95. package/dist/src/commands/rule-sets.js.map +1 -0
  96. package/dist/src/commands/scripts.d.ts +20 -0
  97. package/dist/src/commands/scripts.js +554 -0
  98. package/dist/src/commands/scripts.js.map +1 -0
  99. package/dist/src/commands/secrets.d.ts +2 -0
  100. package/dist/src/commands/secrets.js +108 -0
  101. package/dist/src/commands/secrets.js.map +1 -0
  102. package/dist/src/commands/sessions.d.ts +2 -0
  103. package/dist/src/commands/sessions.js +75 -0
  104. package/dist/src/commands/sessions.js.map +1 -0
  105. package/dist/src/commands/skill.d.ts +2 -0
  106. package/dist/src/commands/skill.js +29 -0
  107. package/dist/src/commands/skill.js.map +1 -0
  108. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  109. package/dist/src/commands/sync-app-settings.js +330 -0
  110. package/dist/src/commands/sync-app-settings.js.map +1 -0
  111. package/dist/src/commands/sync.d.ts +2323 -0
  112. package/dist/src/commands/sync.js +15065 -843
  113. package/dist/src/commands/sync.js.map +1 -1
  114. package/dist/src/commands/tokens.d.ts +2 -0
  115. package/dist/src/commands/tokens.js +130 -21
  116. package/dist/src/commands/tokens.js.map +1 -1
  117. package/dist/src/commands/users.d.ts +2 -0
  118. package/dist/src/commands/users.js +532 -23
  119. package/dist/src/commands/users.js.map +1 -1
  120. package/dist/src/commands/vars.d.ts +8 -0
  121. package/dist/src/commands/vars.js +96 -0
  122. package/dist/src/commands/vars.js.map +1 -0
  123. package/dist/src/commands/waitlist.d.ts +2 -0
  124. package/dist/src/commands/waitlist.js +10 -10
  125. package/dist/src/commands/waitlist.js.map +1 -1
  126. package/dist/src/commands/webhooks.d.ts +2 -0
  127. package/dist/src/commands/webhooks.js +562 -0
  128. package/dist/src/commands/webhooks.js.map +1 -0
  129. package/dist/src/commands/workflows.d.ts +116 -0
  130. package/dist/src/commands/workflows.js +1583 -681
  131. package/dist/src/commands/workflows.js.map +1 -1
  132. package/dist/src/lib/access-rule-display.d.ts +21 -0
  133. package/dist/src/lib/access-rule-display.js +34 -0
  134. package/dist/src/lib/access-rule-display.js.map +1 -0
  135. package/dist/src/lib/api-client.d.ts +1936 -0
  136. package/dist/src/lib/api-client.js +1826 -138
  137. package/dist/src/lib/api-client.js.map +1 -1
  138. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  139. package/dist/src/lib/app-settings-descriptor.js +575 -0
  140. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  141. package/dist/src/lib/auth-flow.d.ts +8 -0
  142. package/dist/src/lib/batch.d.ts +26 -0
  143. package/dist/src/lib/batch.js +32 -0
  144. package/dist/src/lib/batch.js.map +1 -0
  145. package/dist/src/lib/block-layout.d.ts +160 -0
  146. package/dist/src/lib/block-layout.js +451 -0
  147. package/dist/src/lib/block-layout.js.map +1 -0
  148. package/dist/src/lib/canonical-json.d.ts +12 -0
  149. package/dist/src/lib/canonical-json.js +35 -0
  150. package/dist/src/lib/canonical-json.js.map +1 -0
  151. package/dist/src/lib/channel.d.ts +30 -0
  152. package/dist/src/lib/channel.js +68 -0
  153. package/dist/src/lib/channel.js.map +1 -0
  154. package/dist/src/lib/cli-manifest.d.ts +68 -0
  155. package/dist/src/lib/cli-manifest.js +71 -0
  156. package/dist/src/lib/cli-manifest.js.map +1 -0
  157. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  158. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  159. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  160. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  161. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  162. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  163. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
  164. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
  165. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  166. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  167. package/dist/src/lib/config-object-descriptor.js +658 -0
  168. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  169. package/dist/src/lib/config-payload.d.ts +85 -0
  170. package/dist/src/lib/config-payload.js +116 -0
  171. package/dist/src/lib/config-payload.js.map +1 -0
  172. package/dist/src/lib/config-surface.d.ts +130 -0
  173. package/dist/src/lib/config-surface.js +300 -0
  174. package/dist/src/lib/config-surface.js.map +1 -0
  175. package/dist/src/lib/config-toml.d.ts +10 -0
  176. package/dist/src/lib/config-toml.js +42 -0
  177. package/dist/src/lib/config-toml.js.map +1 -0
  178. package/dist/src/lib/config.d.ts +53 -0
  179. package/dist/src/lib/config.js +92 -53
  180. package/dist/src/lib/config.js.map +1 -1
  181. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  182. package/dist/src/lib/confirm-prompt.js +110 -0
  183. package/dist/src/lib/confirm-prompt.js.map +1 -0
  184. package/dist/src/lib/constants.d.ts +11 -0
  185. package/dist/src/lib/constants.js +12 -0
  186. package/dist/src/lib/constants.js.map +1 -0
  187. package/dist/src/lib/crash-handlers.d.ts +20 -0
  188. package/dist/src/lib/crash-handlers.js +49 -0
  189. package/dist/src/lib/crash-handlers.js.map +1 -0
  190. package/dist/src/lib/credentials-store.d.ts +89 -0
  191. package/dist/src/lib/credentials-store.js +330 -0
  192. package/dist/src/lib/credentials-store.js.map +1 -0
  193. package/dist/src/lib/csv.d.ts +47 -0
  194. package/dist/src/lib/csv.js +172 -0
  195. package/dist/src/lib/csv.js.map +1 -0
  196. package/dist/src/lib/data-input.d.ts +23 -0
  197. package/dist/src/lib/data-input.js +50 -0
  198. package/dist/src/lib/data-input.js.map +1 -0
  199. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  200. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  201. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  202. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  203. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  204. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  205. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  206. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  207. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  208. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  209. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  210. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  211. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  212. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  213. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  215. package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
  216. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  217. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  218. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  219. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  220. package/dist/src/lib/env-resolver-core.d.ts +147 -0
  221. package/dist/src/lib/env-resolver-core.js +265 -0
  222. package/dist/src/lib/env-resolver-core.js.map +1 -0
  223. package/dist/src/lib/env-resolver.d.ts +84 -0
  224. package/dist/src/lib/env-resolver.js +133 -0
  225. package/dist/src/lib/env-resolver.js.map +1 -0
  226. package/dist/src/lib/fetch.d.ts +5 -0
  227. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  228. package/dist/src/lib/generated-allowlist.js +277 -0
  229. package/dist/src/lib/generated-allowlist.js.map +1 -0
  230. package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
  231. package/dist/src/lib/generated-config-surfaces.js +4058 -0
  232. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  233. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  234. package/dist/src/lib/generated-template-lint.js +624 -0
  235. package/dist/src/lib/generated-template-lint.js.map +1 -0
  236. package/dist/src/lib/init-adopt.d.ts +16 -0
  237. package/dist/src/lib/init-adopt.js +34 -0
  238. package/dist/src/lib/init-adopt.js.map +1 -0
  239. package/dist/src/lib/init-assets.d.ts +39 -0
  240. package/dist/src/lib/init-assets.js +97 -0
  241. package/dist/src/lib/init-assets.js.map +1 -0
  242. package/dist/src/lib/init-config.d.ts +98 -0
  243. package/dist/src/lib/init-config.js +186 -0
  244. package/dist/src/lib/init-config.js.map +1 -0
  245. package/dist/src/lib/init-ios-links.d.ts +50 -0
  246. package/dist/src/lib/init-ios-links.js +153 -0
  247. package/dist/src/lib/init-ios-links.js.map +1 -0
  248. package/dist/src/lib/init-plan.d.ts +80 -0
  249. package/dist/src/lib/init-plan.js +95 -0
  250. package/dist/src/lib/init-plan.js.map +1 -0
  251. package/dist/src/lib/init-production-env.d.ts +48 -0
  252. package/dist/src/lib/init-production-env.js +59 -0
  253. package/dist/src/lib/init-production-env.js.map +1 -0
  254. package/dist/src/lib/init-schema.d.ts +74 -0
  255. package/dist/src/lib/init-schema.js +358 -0
  256. package/dist/src/lib/init-schema.js.map +1 -0
  257. package/dist/src/lib/init-xcode.d.ts +33 -0
  258. package/dist/src/lib/init-xcode.js +114 -0
  259. package/dist/src/lib/init-xcode.js.map +1 -0
  260. package/dist/src/lib/integration-request-config.d.ts +30 -0
  261. package/dist/src/lib/integration-request-config.js +145 -0
  262. package/dist/src/lib/integration-request-config.js.map +1 -0
  263. package/dist/src/lib/local-state.d.ts +55 -0
  264. package/dist/src/lib/local-state.js +167 -0
  265. package/dist/src/lib/local-state.js.map +1 -0
  266. package/dist/src/lib/log-inspection.d.ts +568 -0
  267. package/dist/src/lib/log-inspection.js +639 -0
  268. package/dist/src/lib/log-inspection.js.map +1 -0
  269. package/dist/src/lib/migration-nag.d.ts +49 -0
  270. package/dist/src/lib/migration-nag.js +163 -0
  271. package/dist/src/lib/migration-nag.js.map +1 -0
  272. package/dist/src/lib/object-status-filter.d.ts +22 -0
  273. package/dist/src/lib/object-status-filter.js +45 -0
  274. package/dist/src/lib/object-status-filter.js.map +1 -0
  275. package/dist/src/lib/output.d.ts +109 -0
  276. package/dist/src/lib/output.js +191 -8
  277. package/dist/src/lib/output.js.map +1 -1
  278. package/dist/src/lib/package-manager.d.ts +140 -0
  279. package/dist/src/lib/package-manager.js +305 -0
  280. package/dist/src/lib/package-manager.js.map +1 -0
  281. package/dist/src/lib/paginate.d.ts +83 -0
  282. package/dist/src/lib/paginate.js +95 -0
  283. package/dist/src/lib/paginate.js.map +1 -0
  284. package/dist/src/lib/platform-owned.d.ts +63 -0
  285. package/dist/src/lib/platform-owned.js +85 -0
  286. package/dist/src/lib/platform-owned.js.map +1 -0
  287. package/dist/src/lib/project-config.d.ts +97 -0
  288. package/dist/src/lib/project-config.js +217 -0
  289. package/dist/src/lib/project-config.js.map +1 -0
  290. package/dist/src/lib/query-operators.d.ts +43 -0
  291. package/dist/src/lib/query-operators.js +80 -0
  292. package/dist/src/lib/query-operators.js.map +1 -0
  293. package/dist/src/lib/record-filter.d.ts +18 -0
  294. package/dist/src/lib/record-filter.js +55 -0
  295. package/dist/src/lib/record-filter.js.map +1 -0
  296. package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
  297. package/dist/src/lib/refresh-admin-credentials.js +103 -0
  298. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  299. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  300. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  301. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  302. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  303. package/dist/src/lib/resolve-init-server.js +77 -0
  304. package/dist/src/lib/resolve-init-server.js.map +1 -0
  305. package/dist/src/lib/resolve-platform.d.ts +74 -0
  306. package/dist/src/lib/resolve-platform.js +105 -0
  307. package/dist/src/lib/resolve-platform.js.map +1 -0
  308. package/dist/src/lib/run-status.d.ts +19 -0
  309. package/dist/src/lib/run-status.generated.d.ts +39 -0
  310. package/dist/src/lib/run-status.generated.js +66 -0
  311. package/dist/src/lib/run-status.generated.js.map +1 -0
  312. package/dist/src/lib/run-status.js +19 -0
  313. package/dist/src/lib/run-status.js.map +1 -0
  314. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  315. package/dist/src/lib/server-text-normalization.js +90 -0
  316. package/dist/src/lib/server-text-normalization.js.map +1 -0
  317. package/dist/src/lib/server-url.d.ts +22 -0
  318. package/dist/src/lib/server-url.js +33 -0
  319. package/dist/src/lib/server-url.js.map +1 -0
  320. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  321. package/dist/src/lib/signing-secret-status.js +116 -0
  322. package/dist/src/lib/signing-secret-status.js.map +1 -0
  323. package/dist/src/lib/skill-installer.d.ts +25 -0
  324. package/dist/src/lib/skill-installer.js +266 -0
  325. package/dist/src/lib/skill-installer.js.map +1 -0
  326. package/dist/src/lib/snapshots.d.ts +99 -0
  327. package/dist/src/lib/snapshots.js +357 -0
  328. package/dist/src/lib/snapshots.js.map +1 -0
  329. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  330. package/dist/src/lib/swift-codegen/dbGenerator.js +914 -0
  331. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  332. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  333. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  334. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  335. package/dist/src/lib/swift-codegen/generator.d.ts +94 -0
  336. package/dist/src/lib/swift-codegen/generator.js +440 -0
  337. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  338. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
  339. package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
  340. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  341. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  342. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  343. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  344. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  345. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  346. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  347. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  348. package/dist/src/lib/sync-dir-selector.js +30 -0
  349. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  350. package/dist/src/lib/sync-paths.d.ts +111 -0
  351. package/dist/src/lib/sync-paths.js +198 -0
  352. package/dist/src/lib/sync-paths.js.map +1 -0
  353. package/dist/src/lib/sync-resource-types.d.ts +544 -0
  354. package/dist/src/lib/sync-resource-types.js +975 -0
  355. package/dist/src/lib/sync-resource-types.js.map +1 -0
  356. package/dist/src/lib/sync-selectors.d.ts +95 -0
  357. package/dist/src/lib/sync-selectors.js +228 -0
  358. package/dist/src/lib/sync-selectors.js.map +1 -0
  359. package/dist/src/lib/template.d.ts +170 -0
  360. package/dist/src/lib/template.js +484 -68
  361. package/dist/src/lib/template.js.map +1 -1
  362. package/dist/src/lib/test-case-keys.d.ts +29 -0
  363. package/dist/src/lib/test-case-keys.js +55 -0
  364. package/dist/src/lib/test-case-keys.js.map +1 -0
  365. package/dist/src/lib/test-case-variables.d.ts +15 -0
  366. package/dist/src/lib/test-case-variables.js +29 -0
  367. package/dist/src/lib/test-case-variables.js.map +1 -0
  368. package/dist/src/lib/token-inject.d.ts +56 -0
  369. package/dist/src/lib/token-inject.js +204 -0
  370. package/dist/src/lib/token-inject.js.map +1 -0
  371. package/dist/src/lib/toml-database-config.d.ts +123 -0
  372. package/dist/src/lib/toml-database-config.js +527 -0
  373. package/dist/src/lib/toml-database-config.js.map +1 -0
  374. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  375. package/dist/src/lib/toml-metadata-config.js +476 -0
  376. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  377. package/dist/src/lib/toml-native-form.d.ts +46 -0
  378. package/dist/src/lib/toml-native-form.js +78 -0
  379. package/dist/src/lib/toml-native-form.js.map +1 -0
  380. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  381. package/dist/src/lib/toml-params-validator.js +298 -0
  382. package/dist/src/lib/toml-params-validator.js.map +1 -0
  383. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  384. package/dist/src/lib/toml-scalar-edit.js +283 -0
  385. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  386. package/dist/src/lib/user-selector.d.ts +24 -0
  387. package/dist/src/lib/user-selector.js +33 -0
  388. package/dist/src/lib/user-selector.js.map +1 -0
  389. package/dist/src/lib/version-check.d.ts +35 -0
  390. package/dist/src/lib/version-check.js +241 -0
  391. package/dist/src/lib/version-check.js.map +1 -0
  392. package/dist/src/lib/watch.d.ts +121 -0
  393. package/dist/src/lib/watch.js +169 -0
  394. package/dist/src/lib/watch.js.map +1 -0
  395. package/dist/src/lib/workflow-apply.d.ts +110 -0
  396. package/dist/src/lib/workflow-apply.js +164 -0
  397. package/dist/src/lib/workflow-apply.js.map +1 -0
  398. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  399. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  400. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  401. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  402. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  403. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  404. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  405. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  406. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  407. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  408. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  409. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  410. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  411. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  412. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  413. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  414. package/dist/src/lib/workflow-config-apply.js +137 -0
  415. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  416. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  417. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  418. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  419. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  420. package/dist/src/lib/workflow-defaults.js +41 -0
  421. package/dist/src/lib/workflow-defaults.js.map +1 -0
  422. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  423. package/dist/src/lib/workflow-fragments.js +342 -0
  424. package/dist/src/lib/workflow-fragments.js.map +1 -0
  425. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  426. package/dist/src/lib/workflow-include-preserve.js +286 -0
  427. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  428. package/dist/src/lib/workflow-payload.d.ts +98 -0
  429. package/dist/src/lib/workflow-payload.js +178 -0
  430. package/dist/src/lib/workflow-payload.js.map +1 -0
  431. package/dist/src/lib/workflow-toml-validator.d.ts +202 -0
  432. package/dist/src/lib/workflow-toml-validator.js +757 -0
  433. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  434. package/dist/src/types/index.d.ts +581 -0
  435. package/dist/src/validators.d.ts +65 -0
  436. package/dist/src/validators.js +64 -0
  437. package/dist/src/validators.js.map +1 -0
  438. package/package.json +32 -8
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Legacy-mode migration nag.
3
+ *
4
+ * Prints a one-time, opt-out, rate-limited startup warning that points
5
+ * users still on the legacy `~/.primitive/credentials.json` config at the
6
+ * project-scoped `primitive env add` migration path. The warning is purely
7
+ * informational — it never mutates anything other than the small
8
+ * `~/.primitive/migration-nag.json` cache used for the 24h rate-limit.
9
+ *
10
+ * Detection signal (warn iff ALL of):
11
+ * 1. `peekLegacyCredentials()` is non-null (legacy creds file present).
12
+ * 2. `findProjectConfigPath()` is null (no project config in scope).
13
+ * 3. `./config/.primitive-sync.json` exists in CWD (strong signal the
14
+ * user has actually run `primitive config pull` here — the
15
+ * population at risk from #548).
16
+ *
17
+ * Suppression (skip if ANY of):
18
+ * - `PRIMITIVE_NO_MIGRATE_NAG=1`
19
+ * - `CI` env var set (non-empty)
20
+ * - `!process.stdout.isTTY`
21
+ * - argv contains `--help` / `-h` / `--version` / `-V` / `--json`
22
+ * - Subcommand is `env *`, `init`, `login`, `logout`, or `token`
23
+ * - `now - lastWarnedAt < 24h`
24
+ *
25
+ * Modeled on `cli/src/lib/version-check.ts`: the whole body is wrapped
26
+ * in try/catch that swallows every error so a corrupt cache file or any
27
+ * other unexpected failure can never break the CLI.
28
+ *
29
+ * TODO(#auto-migration): When we ship an interactive auto-migration flow
30
+ * (separate issue from #552), it should either delete this nag cache or
31
+ * bump `lastWarnedAt` far into the future so freshly-migrated users
32
+ * don't see the nag again. The cache lives at `${PRIMITIVE_CONFIG_DIR ||
33
+ * ~/.primitive}/migration-nag.json`.
34
+ */
35
+ export interface MaybeWarnLegacyMigrationOptions {
36
+ argv: string[];
37
+ /**
38
+ * Override the working directory used for project-shape detection and
39
+ * the upward `.primitive/config.json` search. Defaults to
40
+ * `process.cwd()`. Exists so unit tests (which run in worker threads
41
+ * that disallow `process.chdir()`) can point at a tmpdir.
42
+ */
43
+ cwd?: string;
44
+ }
45
+ /**
46
+ * Print the legacy-mode migration nag if the detection signal matches
47
+ * and no suppression condition applies. Never throws.
48
+ */
49
+ export declare function maybeWarnLegacyMigration(options: MaybeWarnLegacyMigrationOptions): void;
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Legacy-mode migration nag.
3
+ *
4
+ * Prints a one-time, opt-out, rate-limited startup warning that points
5
+ * users still on the legacy `~/.primitive/credentials.json` config at the
6
+ * project-scoped `primitive env add` migration path. The warning is purely
7
+ * informational — it never mutates anything other than the small
8
+ * `~/.primitive/migration-nag.json` cache used for the 24h rate-limit.
9
+ *
10
+ * Detection signal (warn iff ALL of):
11
+ * 1. `peekLegacyCredentials()` is non-null (legacy creds file present).
12
+ * 2. `findProjectConfigPath()` is null (no project config in scope).
13
+ * 3. `./config/.primitive-sync.json` exists in CWD (strong signal the
14
+ * user has actually run `primitive config pull` here — the
15
+ * population at risk from #548).
16
+ *
17
+ * Suppression (skip if ANY of):
18
+ * - `PRIMITIVE_NO_MIGRATE_NAG=1`
19
+ * - `CI` env var set (non-empty)
20
+ * - `!process.stdout.isTTY`
21
+ * - argv contains `--help` / `-h` / `--version` / `-V` / `--json`
22
+ * - Subcommand is `env *`, `init`, `login`, `logout`, or `token`
23
+ * - `now - lastWarnedAt < 24h`
24
+ *
25
+ * Modeled on `cli/src/lib/version-check.ts`: the whole body is wrapped
26
+ * in try/catch that swallows every error so a corrupt cache file or any
27
+ * other unexpected failure can never break the CLI.
28
+ *
29
+ * TODO(#auto-migration): When we ship an interactive auto-migration flow
30
+ * (separate issue from #552), it should either delete this nag cache or
31
+ * bump `lastWarnedAt` far into the future so freshly-migrated users
32
+ * don't see the nag again. The cache lives at `${PRIMITIVE_CONFIG_DIR ||
33
+ * ~/.primitive}/migration-nag.json`.
34
+ */
35
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
36
+ import { homedir } from "os";
37
+ import { join } from "path";
38
+ import { warn } from "./output.js";
39
+ import { peekLegacyCredentials } from "./credentials-store.js";
40
+ import { findProjectConfigPath } from "./project-config.js";
41
+ const NAG_INTERVAL_MS = 24 * 60 * 60 * 1000;
42
+ /** Resolved per-call so tests can override PRIMITIVE_CONFIG_DIR at runtime. */
43
+ function getConfigDir() {
44
+ return process.env.PRIMITIVE_CONFIG_DIR || join(homedir(), ".primitive");
45
+ }
46
+ function getNagCacheFile() {
47
+ return join(getConfigDir(), "migration-nag.json");
48
+ }
49
+ function ensureConfigDir() {
50
+ const dir = getConfigDir();
51
+ if (!existsSync(dir)) {
52
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
53
+ }
54
+ }
55
+ function loadNagCache() {
56
+ try {
57
+ const file = getNagCacheFile();
58
+ if (!existsSync(file))
59
+ return null;
60
+ const raw = JSON.parse(readFileSync(file, "utf-8"));
61
+ if (!raw || typeof raw !== "object")
62
+ return null;
63
+ if (typeof raw.lastWarnedAt !== "number")
64
+ return null;
65
+ return { lastWarnedAt: raw.lastWarnedAt };
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ function saveNagCache(cache) {
72
+ try {
73
+ ensureConfigDir();
74
+ writeFileSync(getNagCacheFile(), JSON.stringify(cache, null, 2));
75
+ }
76
+ catch {
77
+ // Swallow — at worst the user gets re-nagged next invocation.
78
+ }
79
+ }
80
+ /**
81
+ * Returns true if `argv` indicates the warning should be skipped:
82
+ * - any of `--help` / `-h` / `--version` / `-V` / `--json` present, OR
83
+ * - the subcommand is on the migration path (`env *`, `init`, `login`,
84
+ * `logout`), OR
85
+ * - the subcommand is `token`. The `token` command is contractually
86
+ * stdout-only (callers pipe its output to `--access-token` or paste it
87
+ * into env vars), so any extra warning lines would corrupt that output.
88
+ *
89
+ * `argv` is expected to be the same shape as `process.argv` (i.e. the
90
+ * subcommand sits at index 2, after `node` and the script path). Defensive
91
+ * about short or unusual argv shapes.
92
+ */
93
+ function shouldSuppressByArgv(argv) {
94
+ for (const a of argv) {
95
+ if (a === "--help" || a === "-h" || a === "--version" || a === "-V" || a === "--json") {
96
+ return true;
97
+ }
98
+ }
99
+ const subcommand = argv[2];
100
+ if (subcommand === "env" ||
101
+ subcommand === "init" ||
102
+ subcommand === "login" ||
103
+ subcommand === "logout" ||
104
+ subcommand === "token") {
105
+ return true;
106
+ }
107
+ return false;
108
+ }
109
+ /**
110
+ * Returns true when `cwd` looks like a project that has actually been
111
+ * used with `primitive config` — specifically, when
112
+ * `<cwd>/config/.primitive-sync.json` exists. Per F4 of the approved
113
+ * plan, this is the only project-shape signal we use; we deliberately
114
+ * do not fall back to `package.json` or `.git` to avoid nagging users
115
+ * who run the CLI for read-only commands from incidental project
116
+ * directories.
117
+ */
118
+ function isProjectShaped(cwd) {
119
+ try {
120
+ return existsSync(join(cwd, "config", ".primitive-sync.json"));
121
+ }
122
+ catch {
123
+ return false;
124
+ }
125
+ }
126
+ /**
127
+ * Print the legacy-mode migration nag if the detection signal matches
128
+ * and no suppression condition applies. Never throws.
129
+ */
130
+ export function maybeWarnLegacyMigration(options) {
131
+ try {
132
+ // --- Fast suppression checks (no disk I/O) ---------------------------
133
+ if (process.env.PRIMITIVE_NO_MIGRATE_NAG === "1")
134
+ return;
135
+ if (process.env.CI)
136
+ return;
137
+ if (!process.stdout.isTTY)
138
+ return;
139
+ if (shouldSuppressByArgv(options.argv))
140
+ return;
141
+ const cwd = options.cwd ?? process.cwd();
142
+ // --- Detection signal -------------------------------------------------
143
+ if (!isProjectShaped(cwd))
144
+ return;
145
+ if (findProjectConfigPath(cwd) !== null)
146
+ return;
147
+ if (peekLegacyCredentials() === null)
148
+ return;
149
+ // --- Rate-limit -------------------------------------------------------
150
+ const cache = loadNagCache();
151
+ const now = Date.now();
152
+ if (cache && now - cache.lastWarnedAt < NAG_INTERVAL_MS)
153
+ return;
154
+ // --- Print --------------------------------------------------------------
155
+ warn("Legacy CLI config detected at ~/.primitive/credentials.json.");
156
+ warn("Run `primitive env add <name> --api-url <url> --app-id <appId>` to upgrade to project-scoped config (see issue #548 for why). Set PRIMITIVE_NO_MIGRATE_NAG=1 to silence.");
157
+ saveNagCache({ lastWarnedAt: now });
158
+ }
159
+ catch {
160
+ // Never let nag errors affect CLI operation — mirrors version-check.ts.
161
+ }
162
+ }
163
+ //# sourceMappingURL=migration-nag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-nag.js","sourceRoot":"","sources":["../../../src/lib/migration-nag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `--status` on a list of one of the five carrying types (issue #2803).
3
+ *
4
+ * The filter travels to the server as a query parameter and the server filters
5
+ * on the CANONICAL value, so `--status paused` matched nothing and exited 0 —
6
+ * an empty table that reads as "there are none" rather than "that word is gone".
7
+ * The retired spellings therefore get the same treatment as a retired TOML key:
8
+ * a refusal naming what replaced them, not silence. An unknown word gets the
9
+ * vocabulary, because a typo answered with an empty list is the same trap.
10
+ *
11
+ * Pure: no network, no config. The list commands call it before their first
12
+ * request, so the refusal costs nothing and reads the same offline.
13
+ */
14
+ /** The availability vocabulary. `archived` only for types whose delete writes it. */
15
+ export type ObjectStatusFilter = "active" | "inactive" | "archived";
16
+ /**
17
+ * Validate a `--status` value for `noun`, or throw with guidance.
18
+ *
19
+ * Returns the value to send (lower-cased), or `undefined` when the flag was
20
+ * not given.
21
+ */
22
+ export declare function parseStatusFilter(noun: string, value: string | undefined, vocabulary: readonly ObjectStatusFilter[]): string | undefined;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `--status` on a list of one of the five carrying types (issue #2803).
3
+ *
4
+ * The filter travels to the server as a query parameter and the server filters
5
+ * on the CANONICAL value, so `--status paused` matched nothing and exited 0 —
6
+ * an empty table that reads as "there are none" rather than "that word is gone".
7
+ * The retired spellings therefore get the same treatment as a retired TOML key:
8
+ * a refusal naming what replaced them, not silence. An unknown word gets the
9
+ * vocabulary, because a typo answered with an empty list is the same trap.
10
+ *
11
+ * Pure: no network, no config. The list commands call it before their first
12
+ * request, so the refusal costs nothing and reads the same offline.
13
+ */
14
+ /** What a retired spelling means now, per the value the operator typed. */
15
+ const RETIRED = {
16
+ // Webhooks and cron triggers spelled "out of service" as `paused`.
17
+ paused: "inactive",
18
+ // Cron triggers escalated to `error_paused`; the reason now lives in
19
+ // `lastError` beside a plain `inactive`.
20
+ error_paused: "inactive",
21
+ // Workflows, integrations and prompts had a `draft` state. Nothing does.
22
+ draft: "inactive",
23
+ };
24
+ /**
25
+ * Validate a `--status` value for `noun`, or throw with guidance.
26
+ *
27
+ * Returns the value to send (lower-cased), or `undefined` when the flag was
28
+ * not given.
29
+ */
30
+ export function parseStatusFilter(noun, value, vocabulary) {
31
+ if (value === undefined)
32
+ return undefined;
33
+ const normalized = String(value).trim().toLowerCase();
34
+ if (vocabulary.includes(normalized))
35
+ return normalized;
36
+ const offered = vocabulary.join(", ");
37
+ const replacement = RETIRED[normalized];
38
+ if (replacement) {
39
+ throw new Error(`--status ${normalized} no longer exists (#2803). Use --status ${replacement} — ` +
40
+ `it matches rows still storing the old value. Availability is changed with ` +
41
+ `\`primitive ${noun} enable|disable\`.`);
42
+ }
43
+ throw new Error(`--status must be one of: ${offered} (got "${value}").`);
44
+ }
45
+ //# sourceMappingURL=object-status-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-status-filter.js","sourceRoot":"","sources":["../../../src/lib/object-status-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,2EAA2E;AAC3E,MAAM,OAAO,GAA2B;IACtC,mEAAmE;IACnE,MAAM,EAAE,UAAU;IAClB,qEAAqE;IACrE,yCAAyC;IACzC,YAAY,EAAE,UAAU;IACxB,yEAAyE;IACzE,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAAyB,EACzB,UAAyC;IAEzC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,IAAK,UAAgC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAE9E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,YAAY,UAAU,2CAA2C,WAAW,KAAK;YAC/E,4EAA4E;YAC5E,eAAe,IAAI,oBAAoB,CAC1C,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,109 @@
1
+ export interface TableColumn {
2
+ header: string;
3
+ key: string;
4
+ width?: number;
5
+ /**
6
+ * Opt-in flexible sizing (#1065). When `true`, the column is sized from the
7
+ * remaining terminal width (`options.maxWidth ?? process.stdout.columns`)
8
+ * minus the sibling columns' widths and the inter-column padding, so the
9
+ * table shows as much of this column as fits **without wrapping**. Clamped to
10
+ * `[max(flexFloor, header length), flexMax]`. On a non-TTY (`maxWidth`
11
+ * undefined — piped/redirected) there is no width to wrap against, so the
12
+ * column is sized to `flexMax` (or its content width when `flexMax` is
13
+ * unset). Reading the terminal width is gated to flex columns: tables with no
14
+ * flex column never consult `process.stdout.columns` and stay byte-for-byte
15
+ * (and TTY-) unchanged.
16
+ */
17
+ flex?: boolean;
18
+ /** Minimum width for a `flex` column. Default 0 (header length is always honored). */
19
+ flexFloor?: number;
20
+ /** Maximum width for a `flex` column. Default unbounded. */
21
+ flexMax?: number;
22
+ align?: "left" | "right" | "center";
23
+ format?: (value: any) => string;
24
+ /**
25
+ * Opt-in truncation. When `true` (and the column has a resolved width — a
26
+ * fixed `width` or a computed `flex` width), cell values longer than that
27
+ * width are ellipsized to fit the column so downstream columns stay aligned.
28
+ * Defaults to `false` so existing tables keep their current non-truncating
29
+ * behavior — only columns that explicitly opt in are clipped.
30
+ */
31
+ truncate?: boolean;
32
+ }
33
+ export declare function formatTable(data: Record<string, any>[], columns: TableColumn[], options?: {
34
+ maxWidth?: number;
35
+ }): string;
36
+ export declare function success(message: string): void;
37
+ export declare function error(message: string): void;
38
+ /**
39
+ * Render an API error (or any Error) with its message plus the server's
40
+ * structured `details` payload, if present. Shared by `config push`,
41
+ * `workflows create`/`update`, and any command that surfaces server-side
42
+ * validation failures (#1173).
43
+ *
44
+ * The server's error envelope can emit `details` as either:
45
+ * - an **array** of validation-issue strings/objects (e.g. the workflow
46
+ * identity validator's per-step reasons), or
47
+ * - an **object** (#666 schema gate — `{ code, ... }`).
48
+ *
49
+ * Both shapes are rendered without throwing; an absent/empty `details` prints
50
+ * just the message. Duck-typed (reads `.message`/`.details`) so it works on
51
+ * any `ApiError` instance without importing the class — keeping `output.ts`
52
+ * dependency-free.
53
+ */
54
+ export declare function printApiError(err: unknown): void;
55
+ export declare function warn(message: string): void;
56
+ export declare function info(message: string): void;
57
+ export declare function dim(message: string): void;
58
+ export declare function heading(message: string): void;
59
+ export declare function json(data: any): void;
60
+ /**
61
+ * Print one compact JSON object on its own line (NDJSON) to stdout.
62
+ *
63
+ * A documented exception to the "single parseable JSON document" stdout rule
64
+ * above (issue #695): a `--follow` tail is an unbounded stream, so it cannot be
65
+ * one array — it emits one object per row per line, which a consumer reads with
66
+ * `jq -c` line by line. `--json --watch` still emits one array per redraw via
67
+ * `json()`; only the append-only follow stream uses `jsonLine`.
68
+ */
69
+ export declare function jsonLine(obj: unknown): void;
70
+ export declare function formatDate(date: string | Date | null | undefined): string;
71
+ /**
72
+ * Colour a status value for terminal output. Covers both the resource
73
+ * lifecycle statuses (draft/active/archived/deprecated) and the canonical
74
+ * workflow-run vocabulary from `lib/run-status.ts` (#2348), which every run
75
+ * status surface now reports:
76
+ *
77
+ * queued, running, apply_pending, apply_claimed,
78
+ * completed, failed, terminated, missing, skipped
79
+ *
80
+ * `terminated`, `queued`, the two apply-flow states and `missing` used to fall
81
+ * through to the uncoloured default, so an aborted run and a parked run read
82
+ * exactly like an unknown value.
83
+ */
84
+ export declare function formatStatus(status: string | undefined | null): string;
85
+ export declare function formatId(id: string): string;
86
+ export declare function formatBoolean(value: boolean | undefined | null): string;
87
+ export declare function formatNumber(value: number | undefined | null): string;
88
+ export declare function formatDuration(ms: number | undefined | null): string;
89
+ export declare function formatPercent(value: number | undefined | null): string;
90
+ export declare function keyValue(label: string, value: string | number | boolean | null | undefined): void;
91
+ /**
92
+ * Print a `label: value` line on **stdout** as part of a command's primary
93
+ * data output (e.g., `primitive integrations get <id>`,
94
+ * `primitive workflows get <id>`). Same visual rendering as `keyValue()`,
95
+ * but on the data stream so the value survives `> out.txt` redirection.
96
+ *
97
+ * Use `keyValue()` (stderr) for post-action diagnostic summaries; use
98
+ * `result()` (stdout) for fields the caller specifically requested.
99
+ */
100
+ export declare function result(label: string, value: string | number | boolean | null | undefined): void;
101
+ export declare function divider(): void;
102
+ /**
103
+ * In-place progress indicator for long-running commands (e.g. polling a
104
+ * batch run). Writes to stderr so it can't corrupt JSON on stdout under
105
+ * `--json`. Callers should follow the final progress line with `progressEnd()`
106
+ * to print a trailing newline.
107
+ */
108
+ export declare function progress(message: string): void;
109
+ export declare function progressEnd(): void;
@@ -1,5 +1,24 @@
1
1
  import chalk from "chalk";
2
- export function formatTable(data, columns) {
2
+ /**
3
+ * Ellipsize `str` (its visible, ANSI-stripped length) to at most `width`
4
+ * characters. Strings already within `width` are returned unchanged. Very
5
+ * narrow widths still keep a sensible result: width 1-3 returns leading dots.
6
+ *
7
+ * NOTE: assumes the value carries no ANSI styling (the only opt-in caller —
8
+ * the guides DESCRIPTION column — passes plain strings). Truncating mid-escape
9
+ * would corrupt styling, so truncation is opt-in per column rather than global.
10
+ */
11
+ function truncateToWidth(str, width) {
12
+ const stripped = stripAnsi(str);
13
+ if (stripped.length <= width)
14
+ return str;
15
+ if (width <= 0)
16
+ return "";
17
+ if (width <= 3)
18
+ return ".".repeat(width);
19
+ return stripped.slice(0, width - 1) + "…";
20
+ }
21
+ export function formatTable(data, columns, options) {
3
22
  if (data.length === 0) {
4
23
  return chalk.dim("No results found.");
5
24
  }
@@ -12,6 +31,33 @@ export function formatTable(data, columns) {
12
31
  }));
13
32
  return col.width ?? Math.max(headerWidth, maxDataWidth);
14
33
  });
34
+ // Flex pass (#1065): size the first column marked `flex` from the remaining
35
+ // terminal width so the table shows as much as fits without ever wrapping.
36
+ // The sibling widths above are already content-derived, so subtracting their
37
+ // ACTUAL widths plus the exact `2 * (N - 1)` inter-column padding makes the
38
+ // no-wrap guarantee structural rather than maintained by hand. Gated to flex
39
+ // columns so non-flex tables never read `process.stdout.columns`.
40
+ const flexIndex = columns.findIndex((col) => col.flex);
41
+ if (flexIndex !== -1) {
42
+ const col = columns[flexIndex];
43
+ const floor = Math.max(col.flexFloor ?? 0, col.header.length);
44
+ const cap = col.flexMax ?? Infinity;
45
+ const maxWidth = options?.maxWidth ?? process.stdout.columns;
46
+ if (typeof maxWidth === "number") {
47
+ const siblingWidth = widths.reduce((sum, w, i) => (i === flexIndex ? sum : sum + w), 0);
48
+ const padding = 2 * (columns.length - 1);
49
+ const avail = maxWidth - siblingWidth - padding;
50
+ // Clamp to [floor, cap]; never below the floor (so the header/min content
51
+ // stays readable) and never negative.
52
+ widths[flexIndex] = Math.min(cap, Math.max(floor, avail));
53
+ }
54
+ else {
55
+ // Non-TTY (piped/redirected): no terminal width to wrap against. Show as
56
+ // much as the cap allows — full content up to the contract max — falling
57
+ // back to the content-derived width when no cap is set.
58
+ widths[flexIndex] = cap === Infinity ? widths[flexIndex] : cap;
59
+ }
60
+ }
15
61
  // Format header
16
62
  const header = columns
17
63
  .map((col, i) => {
@@ -24,7 +70,13 @@ export function formatTable(data, columns) {
24
70
  // Format rows
25
71
  const rows = data.map((row) => columns
26
72
  .map((col, i) => {
27
- const value = col.format ? col.format(row[col.key]) : String(row[col.key] ?? "");
73
+ let value = col.format ? col.format(row[col.key]) : String(row[col.key] ?? "");
74
+ // Opt-in: clip over-long cells to the column's resolved width (a fixed
75
+ // `width` or a computed `flex` width) so the columns that follow stay
76
+ // aligned (e.g. guides DESCRIPTION before LANGUAGES).
77
+ if (col.truncate && (col.width !== undefined || col.flex)) {
78
+ value = truncateToWidth(value, widths[i]);
79
+ }
28
80
  return padString(value, widths[i], col.align ?? "left");
29
81
  })
30
82
  .join(" "));
@@ -47,33 +99,119 @@ function stripAnsi(str) {
47
99
  // Simple ANSI escape code stripper
48
100
  return str.replace(/\x1b\[[0-9;]*m/g, "");
49
101
  }
102
+ // Stream-routing convention (see issue #695):
103
+ // - data → stdout (`json`, `result`, plus the formatter helpers below
104
+ // that just return strings for callers to print themselves).
105
+ // - diagnostics → stderr (`success`, `warn`, `info`, `dim`, `heading`,
106
+ // `keyValue`, `divider`, `error`).
107
+ //
108
+ // This mirrors `git`/`kubectl`/`aws`/`gh` so that any command with a `--json`
109
+ // flag emits a single parseable JSON document on stdout, regardless of
110
+ // status, warning, or progress text the same command may print. Callers
111
+ // running interactively still see diagnostics by default because terminals
112
+ // display stderr; users redirecting `2>/dev/null` get a quiet pipe; users
113
+ // running `2>&1` get everything mixed.
114
+ //
115
+ // `result()` vs. `keyValue()` (data vs. diagnostic split):
116
+ // `keyValue()` is a *diagnostic* helper — use it for the `key: value`
117
+ // summary lines printed *after* a side-effecting command like `apps create`,
118
+ // `workflows update`, or `secrets set` (those summaries are nice context but
119
+ // are not what the caller asked the command to produce). `result()` is the
120
+ // *data* counterpart — use it for the primary fields a `get` / `show` /
121
+ // `describe` command emits, where the caller ran the command specifically
122
+ // to read those fields. Keeping the two on different streams means
123
+ // `primitive integrations get foo > out.txt` produces a non-empty `out.txt`
124
+ // even though the same command's status diagnostics still go to stderr.
50
125
  export function success(message) {
51
- console.log(chalk.green("✓") + " " + message);
126
+ console.error(chalk.green("✓") + " " + message);
52
127
  }
53
128
  export function error(message) {
54
129
  console.error(chalk.red("✗") + " " + message);
55
130
  }
131
+ /**
132
+ * Render an API error (or any Error) with its message plus the server's
133
+ * structured `details` payload, if present. Shared by `config push`,
134
+ * `workflows create`/`update`, and any command that surfaces server-side
135
+ * validation failures (#1173).
136
+ *
137
+ * The server's error envelope can emit `details` as either:
138
+ * - an **array** of validation-issue strings/objects (e.g. the workflow
139
+ * identity validator's per-step reasons), or
140
+ * - an **object** (#666 schema gate — `{ code, ... }`).
141
+ *
142
+ * Both shapes are rendered without throwing; an absent/empty `details` prints
143
+ * just the message. Duck-typed (reads `.message`/`.details`) so it works on
144
+ * any `ApiError` instance without importing the class — keeping `output.ts`
145
+ * dependency-free.
146
+ */
147
+ export function printApiError(err) {
148
+ const e = err;
149
+ const message = typeof e?.message === "string" && e.message.length > 0
150
+ ? e.message
151
+ : String(err);
152
+ error(message);
153
+ const details = e?.details;
154
+ if (Array.isArray(details)) {
155
+ for (const detail of details) {
156
+ console.error(` - ${typeof detail === "string" ? detail : JSON.stringify(detail)}`);
157
+ }
158
+ }
159
+ else if (details && typeof details === "object") {
160
+ // Object form (#666 schema gate): render each key so the reason isn't
161
+ // hidden. Skip the redundant `code` (already implied by the message).
162
+ for (const [key, value] of Object.entries(details)) {
163
+ if (key === "code")
164
+ continue;
165
+ console.error(` ${key}: ${typeof value === "string" ? value : JSON.stringify(value)}`);
166
+ }
167
+ }
168
+ }
56
169
  export function warn(message) {
57
- console.log(chalk.yellow("!") + " " + message);
170
+ console.error(chalk.yellow("!") + " " + message);
58
171
  }
59
172
  export function info(message) {
60
- console.log(chalk.blue("i") + " " + message);
173
+ console.error(chalk.blue("i") + " " + message);
61
174
  }
62
175
  export function dim(message) {
63
- console.log(chalk.dim(message));
176
+ console.error(chalk.dim(message));
64
177
  }
65
178
  export function heading(message) {
66
- console.log(chalk.bold.underline(message));
179
+ console.error(chalk.bold.underline(message));
67
180
  }
68
181
  export function json(data) {
69
182
  console.log(JSON.stringify(data, null, 2));
70
183
  }
184
+ /**
185
+ * Print one compact JSON object on its own line (NDJSON) to stdout.
186
+ *
187
+ * A documented exception to the "single parseable JSON document" stdout rule
188
+ * above (issue #695): a `--follow` tail is an unbounded stream, so it cannot be
189
+ * one array — it emits one object per row per line, which a consumer reads with
190
+ * `jq -c` line by line. `--json --watch` still emits one array per redraw via
191
+ * `json()`; only the append-only follow stream uses `jsonLine`.
192
+ */
193
+ export function jsonLine(obj) {
194
+ console.log(JSON.stringify(obj));
195
+ }
71
196
  export function formatDate(date) {
72
197
  if (!date)
73
198
  return chalk.dim("-");
74
199
  const d = new Date(date);
75
200
  return d.toISOString().replace("T", " ").slice(0, 19);
76
201
  }
202
+ /**
203
+ * Colour a status value for terminal output. Covers both the resource
204
+ * lifecycle statuses (draft/active/archived/deprecated) and the canonical
205
+ * workflow-run vocabulary from `lib/run-status.ts` (#2348), which every run
206
+ * status surface now reports:
207
+ *
208
+ * queued, running, apply_pending, apply_claimed,
209
+ * completed, failed, terminated, missing, skipped
210
+ *
211
+ * `terminated`, `queued`, the two apply-flow states and `missing` used to fall
212
+ * through to the uncoloured default, so an aborted run and a parked run read
213
+ * exactly like an unknown value.
214
+ */
77
215
  export function formatStatus(status) {
78
216
  if (!status)
79
217
  return "-";
@@ -90,8 +228,24 @@ export function formatStatus(status) {
90
228
  case "running":
91
229
  case "pending":
92
230
  return chalk.blue(status);
231
+ case "queued":
232
+ return chalk.cyan(status);
233
+ // Finished executing, parked waiting for a client to claim/apply.
234
+ case "apply_pending":
235
+ case "apply_claimed":
236
+ return chalk.magenta(status);
93
237
  case "failed":
94
238
  return chalk.red(status);
239
+ // Aborted before completion — an end state, but not a failure.
240
+ case "terminated":
241
+ return chalk.gray(status);
242
+ // No live instance to report on.
243
+ case "missing":
244
+ return chalk.yellow(status);
245
+ // #2636 — the run never ran: its declarative lock was held and the
246
+ // definition declared `onContention: "ignore"`. An outcome, not a failure.
247
+ case "skipped":
248
+ return chalk.dim.cyan(status);
95
249
  default:
96
250
  return status;
97
251
  }
@@ -130,6 +284,23 @@ export function formatPercent(value) {
130
284
  return `${(value * 100).toFixed(1)}%`;
131
285
  }
132
286
  export function keyValue(label, value) {
287
+ const formattedValue = value === null || value === undefined
288
+ ? chalk.dim("-")
289
+ : typeof value === "boolean"
290
+ ? formatBoolean(value)
291
+ : String(value);
292
+ console.error(`${chalk.dim(label + ":")} ${formattedValue}`);
293
+ }
294
+ /**
295
+ * Print a `label: value` line on **stdout** as part of a command's primary
296
+ * data output (e.g., `primitive integrations get <id>`,
297
+ * `primitive workflows get <id>`). Same visual rendering as `keyValue()`,
298
+ * but on the data stream so the value survives `> out.txt` redirection.
299
+ *
300
+ * Use `keyValue()` (stderr) for post-action diagnostic summaries; use
301
+ * `result()` (stdout) for fields the caller specifically requested.
302
+ */
303
+ export function result(label, value) {
133
304
  const formattedValue = value === null || value === undefined
134
305
  ? chalk.dim("-")
135
306
  : typeof value === "boolean"
@@ -138,6 +309,18 @@ export function keyValue(label, value) {
138
309
  console.log(`${chalk.dim(label + ":")} ${formattedValue}`);
139
310
  }
140
311
  export function divider() {
141
- console.log(chalk.dim("-".repeat(60)));
312
+ console.error(chalk.dim("-".repeat(60)));
313
+ }
314
+ /**
315
+ * In-place progress indicator for long-running commands (e.g. polling a
316
+ * batch run). Writes to stderr so it can't corrupt JSON on stdout under
317
+ * `--json`. Callers should follow the final progress line with `progressEnd()`
318
+ * to print a trailing newline.
319
+ */
320
+ export function progress(message) {
321
+ process.stderr.write(`\r${message}`);
322
+ }
323
+ export function progressEnd() {
324
+ process.stderr.write("\n");
142
325
  }
143
326
  //# sourceMappingURL=output.js.map