primitive-admin 1.0.63 → 1.0.64

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 (328) hide show
  1. package/README.md +132 -42
  2. package/assets/skill/skills/primitive-platform/SKILL.md +142 -661
  3. package/dist/bin/primitive.js +121 -41
  4. package/dist/bin/primitive.js.map +1 -1
  5. package/dist/src/commands/admins.js +37 -50
  6. package/dist/src/commands/admins.js.map +1 -1
  7. package/dist/src/commands/analytics.js +178 -9
  8. package/dist/src/commands/analytics.js.map +1 -1
  9. package/dist/src/commands/apps.js +12 -5
  10. package/dist/src/commands/apps.js.map +1 -1
  11. package/dist/src/commands/auth-sessions.d.ts +7 -0
  12. package/dist/src/commands/auth-sessions.js +144 -0
  13. package/dist/src/commands/auth-sessions.js.map +1 -0
  14. package/dist/src/commands/auth.js +76 -116
  15. package/dist/src/commands/auth.js.map +1 -1
  16. package/dist/src/commands/blob-buckets.js +2 -1
  17. package/dist/src/commands/blob-buckets.js.map +1 -1
  18. package/dist/src/commands/catalog.js +26 -10
  19. package/dist/src/commands/catalog.js.map +1 -1
  20. package/dist/src/commands/collection-type-configs.js +3 -10
  21. package/dist/src/commands/collection-type-configs.js.map +1 -1
  22. package/dist/src/commands/collections.js +736 -19
  23. package/dist/src/commands/collections.js.map +1 -1
  24. package/dist/src/commands/config.js +13 -27
  25. package/dist/src/commands/config.js.map +1 -1
  26. package/dist/src/commands/connections.js +8 -9
  27. package/dist/src/commands/connections.js.map +1 -1
  28. package/dist/src/commands/cron-triggers.js +2 -1
  29. package/dist/src/commands/cron-triggers.js.map +1 -1
  30. package/dist/src/commands/database-type-configs.js +5 -12
  31. package/dist/src/commands/database-type-configs.js.map +1 -1
  32. package/dist/src/commands/databases.js +59 -72
  33. package/dist/src/commands/databases.js.map +1 -1
  34. package/dist/src/commands/documents.d.ts +58 -0
  35. package/dist/src/commands/documents.js +1623 -95
  36. package/dist/src/commands/documents.js.map +1 -1
  37. package/dist/src/commands/email-templates.js +2 -1
  38. package/dist/src/commands/email-templates.js.map +1 -1
  39. package/dist/src/commands/env.d.ts +1 -1
  40. package/dist/src/commands/env.js +89 -43
  41. package/dist/src/commands/env.js.map +1 -1
  42. package/dist/src/commands/feature-flags.js +2 -1
  43. package/dist/src/commands/feature-flags.js.map +1 -1
  44. package/dist/src/commands/functions.d.ts +20 -0
  45. package/dist/src/commands/functions.js +1630 -0
  46. package/dist/src/commands/functions.js.map +1 -0
  47. package/dist/src/commands/group-type-configs.js +2 -1
  48. package/dist/src/commands/group-type-configs.js.map +1 -1
  49. package/dist/src/commands/groups.js +30 -17
  50. package/dist/src/commands/groups.js.map +1 -1
  51. package/dist/src/commands/guides.js +17 -11
  52. package/dist/src/commands/guides.js.map +1 -1
  53. package/dist/src/commands/init.d.ts +12 -15
  54. package/dist/src/commands/init.js +44 -92
  55. package/dist/src/commands/init.js.map +1 -1
  56. package/dist/src/commands/integrations.js +35 -12
  57. package/dist/src/commands/integrations.js.map +1 -1
  58. package/dist/src/commands/locks.js +17 -2
  59. package/dist/src/commands/locks.js.map +1 -1
  60. package/dist/src/commands/metadata-category-configs.js +2 -1
  61. package/dist/src/commands/metadata-category-configs.js.map +1 -1
  62. package/dist/src/commands/metadata.js +8 -1
  63. package/dist/src/commands/metadata.js.map +1 -1
  64. package/dist/src/commands/prompts.js +106 -59
  65. package/dist/src/commands/prompts.js.map +1 -1
  66. package/dist/src/commands/rule-sets.js +3 -10
  67. package/dist/src/commands/rule-sets.js.map +1 -1
  68. package/dist/src/commands/scripts.js +33 -28
  69. package/dist/src/commands/scripts.js.map +1 -1
  70. package/dist/src/commands/secrets.js +2 -1
  71. package/dist/src/commands/secrets.js.map +1 -1
  72. package/dist/src/commands/sessions.js +10 -9
  73. package/dist/src/commands/sessions.js.map +1 -1
  74. package/dist/src/commands/sync-app-settings.js +3 -5
  75. package/dist/src/commands/sync-app-settings.js.map +1 -1
  76. package/dist/src/commands/sync.d.ts +390 -13
  77. package/dist/src/commands/sync.js +2613 -451
  78. package/dist/src/commands/sync.js.map +1 -1
  79. package/dist/src/commands/tokens.js +2 -1
  80. package/dist/src/commands/tokens.js.map +1 -1
  81. package/dist/src/commands/users.js +19 -10
  82. package/dist/src/commands/users.js.map +1 -1
  83. package/dist/src/commands/vars.js +2 -1
  84. package/dist/src/commands/vars.js.map +1 -1
  85. package/dist/src/commands/waitlist.js +2 -1
  86. package/dist/src/commands/waitlist.js.map +1 -1
  87. package/dist/src/commands/webhooks.d.ts +29 -0
  88. package/dist/src/commands/webhooks.js +135 -64
  89. package/dist/src/commands/webhooks.js.map +1 -1
  90. package/dist/src/commands/workflows.d.ts +1 -29
  91. package/dist/src/commands/workflows.js +113 -179
  92. package/dist/src/commands/workflows.js.map +1 -1
  93. package/dist/src/lib/api-client.d.ts +628 -14
  94. package/dist/src/lib/api-client.js +776 -70
  95. package/dist/src/lib/api-client.js.map +1 -1
  96. package/dist/src/lib/app-settings-descriptor.d.ts +1 -1
  97. package/dist/src/lib/app-settings-descriptor.js +9 -1
  98. package/dist/src/lib/app-settings-descriptor.js.map +1 -1
  99. package/dist/src/lib/block-selector.d.ts +58 -0
  100. package/dist/src/lib/block-selector.js +92 -0
  101. package/dist/src/lib/block-selector.js.map +1 -0
  102. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +24 -54
  103. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +31 -153
  104. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
  105. package/dist/src/lib/collection-export.d.ts +184 -0
  106. package/dist/src/lib/collection-export.js +252 -0
  107. package/dist/src/lib/collection-export.js.map +1 -0
  108. package/dist/src/lib/config-json-field.d.ts +28 -0
  109. package/dist/src/lib/config-json-field.js +56 -0
  110. package/dist/src/lib/config-json-field.js.map +1 -0
  111. package/dist/src/lib/config-object-descriptor.js +88 -6
  112. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  113. package/dist/src/lib/config-payload.d.ts +8 -1
  114. package/dist/src/lib/config-payload.js +49 -4
  115. package/dist/src/lib/config-payload.js.map +1 -1
  116. package/dist/src/lib/config-surface.d.ts +12 -1
  117. package/dist/src/lib/config-surface.js +71 -3
  118. package/dist/src/lib/config-surface.js.map +1 -1
  119. package/dist/src/lib/config.d.ts +31 -13
  120. package/dist/src/lib/config.js +34 -70
  121. package/dist/src/lib/config.js.map +1 -1
  122. package/dist/src/lib/credentials-store.d.ts +37 -22
  123. package/dist/src/lib/credentials-store.js +103 -97
  124. package/dist/src/lib/credentials-store.js.map +1 -1
  125. package/dist/src/lib/db-codegen/dbTypeIR.js +8 -0
  126. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
  127. package/dist/src/lib/deprecation.d.ts +22 -0
  128. package/dist/src/lib/deprecation.js +43 -0
  129. package/dist/src/lib/deprecation.js.map +1 -0
  130. package/dist/src/lib/document-export-permissions.d.ts +30 -0
  131. package/dist/src/lib/document-export-permissions.js +54 -0
  132. package/dist/src/lib/document-export-permissions.js.map +1 -0
  133. package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
  134. package/dist/src/lib/document-ingest-artifact.js +505 -0
  135. package/dist/src/lib/document-ingest-artifact.js.map +1 -0
  136. package/dist/src/lib/document-ingest-input.d.ts +51 -0
  137. package/dist/src/lib/document-ingest-input.js +132 -0
  138. package/dist/src/lib/document-ingest-input.js.map +1 -0
  139. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  140. package/dist/src/lib/document-ingest-rows.js +181 -0
  141. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  142. package/dist/src/lib/document-ingest.d.ts +101 -0
  143. package/dist/src/lib/document-ingest.js +384 -0
  144. package/dist/src/lib/document-ingest.js.map +1 -0
  145. package/dist/src/lib/env-resolver-core.d.ts +89 -18
  146. package/dist/src/lib/env-resolver-core.js +145 -23
  147. package/dist/src/lib/env-resolver-core.js.map +1 -1
  148. package/dist/src/lib/env-resolver.d.ts +18 -3
  149. package/dist/src/lib/env-resolver.js +23 -3
  150. package/dist/src/lib/env-resolver.js.map +1 -1
  151. package/dist/src/lib/function-bundle.d.ts +147 -0
  152. package/dist/src/lib/function-bundle.js +341 -0
  153. package/dist/src/lib/function-bundle.js.map +1 -0
  154. package/dist/src/lib/function-collect.d.ts +123 -0
  155. package/dist/src/lib/function-collect.js +610 -0
  156. package/dist/src/lib/function-collect.js.map +1 -0
  157. package/dist/src/lib/function-db-types.d.ts +202 -0
  158. package/dist/src/lib/function-db-types.js +870 -0
  159. package/dist/src/lib/function-db-types.js.map +1 -0
  160. package/dist/src/lib/function-document-types.d.ts +144 -0
  161. package/dist/src/lib/function-document-types.js +370 -0
  162. package/dist/src/lib/function-document-types.js.map +1 -0
  163. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  164. package/dist/src/lib/function-grants-preflight.js +105 -0
  165. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  166. package/dist/src/lib/function-log-lines.d.ts +76 -0
  167. package/dist/src/lib/function-log-lines.js +160 -0
  168. package/dist/src/lib/function-log-lines.js.map +1 -0
  169. package/dist/src/lib/function-log-row.d.ts +29 -0
  170. package/dist/src/lib/function-log-row.js +73 -0
  171. package/dist/src/lib/function-log-row.js.map +1 -0
  172. package/dist/src/lib/function-log-tail.d.ts +132 -0
  173. package/dist/src/lib/function-log-tail.js +262 -0
  174. package/dist/src/lib/function-log-tail.js.map +1 -0
  175. package/dist/src/lib/function-run.d.ts +289 -0
  176. package/dist/src/lib/function-run.js +389 -0
  177. package/dist/src/lib/function-run.js.map +1 -0
  178. package/dist/src/lib/function-schema-codegen.d.ts +143 -0
  179. package/dist/src/lib/function-schema-codegen.js +420 -0
  180. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  181. package/dist/src/lib/function-sync.d.ts +459 -0
  182. package/dist/src/lib/function-sync.js +1258 -0
  183. package/dist/src/lib/function-sync.js.map +1 -0
  184. package/dist/src/lib/function-trigger-listing.d.ts +27 -0
  185. package/dist/src/lib/function-trigger-listing.js +70 -0
  186. package/dist/src/lib/function-trigger-listing.js.map +1 -0
  187. package/dist/src/lib/function-typecheck.d.ts +86 -0
  188. package/dist/src/lib/function-typecheck.js +370 -0
  189. package/dist/src/lib/function-typecheck.js.map +1 -0
  190. package/dist/src/lib/function-versions.d.ts +122 -0
  191. package/dist/src/lib/function-versions.js +182 -0
  192. package/dist/src/lib/function-versions.js.map +1 -0
  193. package/dist/src/lib/generated-allowlist.js +4 -0
  194. package/dist/src/lib/generated-allowlist.js.map +1 -1
  195. package/dist/src/lib/generated-config-surfaces.d.ts +2332 -78
  196. package/dist/src/lib/generated-config-surfaces.js +6979 -468
  197. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  198. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  199. package/dist/src/lib/generated-sdk-types.js +13 -0
  200. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  201. package/dist/src/lib/init-adopt.js +2 -2
  202. package/dist/src/lib/init-adopt.js.map +1 -1
  203. package/dist/src/lib/init-assets.js +3 -3
  204. package/dist/src/lib/init-config.d.ts +1 -1
  205. package/dist/src/lib/init-ios-links.d.ts +6 -5
  206. package/dist/src/lib/init-ios-links.js +9 -8
  207. package/dist/src/lib/init-ios-links.js.map +1 -1
  208. package/dist/src/lib/init-plan.d.ts +1 -1
  209. package/dist/src/lib/init-plan.js +1 -1
  210. package/dist/src/lib/init-xcode.d.ts +6 -5
  211. package/dist/src/lib/init-xcode.js +34 -10
  212. package/dist/src/lib/init-xcode.js.map +1 -1
  213. package/dist/src/lib/ios-app-id.d.ts +34 -0
  214. package/dist/src/lib/ios-app-id.js +69 -0
  215. package/dist/src/lib/ios-app-id.js.map +1 -0
  216. package/dist/src/lib/list-options.d.ts +68 -0
  217. package/dist/src/lib/list-options.js +89 -0
  218. package/dist/src/lib/list-options.js.map +1 -0
  219. package/dist/src/lib/local-state.d.ts +1 -1
  220. package/dist/src/lib/local-state.js +1 -1
  221. package/dist/src/lib/local-test-cases.d.ts +1 -1
  222. package/dist/src/lib/local-test-cases.js +2 -1
  223. package/dist/src/lib/local-test-cases.js.map +1 -1
  224. package/dist/src/lib/log-inspection.d.ts +152 -5
  225. package/dist/src/lib/log-inspection.js +179 -2
  226. package/dist/src/lib/log-inspection.js.map +1 -1
  227. package/dist/src/lib/logout-admin-session.d.ts +33 -0
  228. package/dist/src/lib/logout-admin-session.js +70 -0
  229. package/dist/src/lib/logout-admin-session.js.map +1 -0
  230. package/dist/src/lib/output.d.ts +15 -0
  231. package/dist/src/lib/output.js +28 -0
  232. package/dist/src/lib/output.js.map +1 -1
  233. package/dist/src/lib/paginate.d.ts +15 -0
  234. package/dist/src/lib/paginate.js +17 -0
  235. package/dist/src/lib/paginate.js.map +1 -1
  236. package/dist/src/lib/project-config.d.ts +38 -21
  237. package/dist/src/lib/project-config.js +57 -47
  238. package/dist/src/lib/project-config.js.map +1 -1
  239. package/dist/src/lib/prompt-cost-format.d.ts +11 -0
  240. package/dist/src/lib/prompt-cost-format.js +41 -0
  241. package/dist/src/lib/prompt-cost-format.js.map +1 -0
  242. package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
  243. package/dist/src/lib/prompt-schema-codegen.js +462 -0
  244. package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
  245. package/dist/src/lib/refresh-admin-credentials.d.ts +9 -1
  246. package/dist/src/lib/refresh-admin-credentials.js +22 -2
  247. package/dist/src/lib/refresh-admin-credentials.js.map +1 -1
  248. package/dist/src/lib/resolve-owner.d.ts +19 -0
  249. package/dist/src/lib/resolve-owner.js +20 -0
  250. package/dist/src/lib/resolve-owner.js.map +1 -0
  251. package/dist/src/lib/skill-installer.d.ts +49 -3
  252. package/dist/src/lib/skill-installer.js +275 -100
  253. package/dist/src/lib/skill-installer.js.map +1 -1
  254. package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
  255. package/dist/src/lib/snapshot-audit-source.js +58 -0
  256. package/dist/src/lib/snapshot-audit-source.js.map +1 -0
  257. package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
  258. package/dist/src/lib/snapshot-audit-store.js +196 -0
  259. package/dist/src/lib/snapshot-audit-store.js.map +1 -0
  260. package/dist/src/lib/snapshot-audit.d.ts +207 -0
  261. package/dist/src/lib/snapshot-audit.js +431 -0
  262. package/dist/src/lib/snapshot-audit.js.map +1 -0
  263. package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
  264. package/dist/src/lib/snapshot-build-rows.js +87 -0
  265. package/dist/src/lib/snapshot-build-rows.js.map +1 -0
  266. package/dist/src/lib/snapshot-build.d.ts +50 -0
  267. package/dist/src/lib/snapshot-build.js +111 -0
  268. package/dist/src/lib/snapshot-build.js.map +1 -0
  269. package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
  270. package/dist/src/lib/snapshot-manifest-layout.js +70 -0
  271. package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
  272. package/dist/src/lib/snapshots.d.ts +8 -9
  273. package/dist/src/lib/snapshots.js +20 -83
  274. package/dist/src/lib/snapshots.js.map +1 -1
  275. package/dist/src/lib/step-run-table.d.ts +43 -0
  276. package/dist/src/lib/step-run-table.js +129 -0
  277. package/dist/src/lib/step-run-table.js.map +1 -0
  278. package/dist/src/lib/storage-pending-retry.d.ts +26 -0
  279. package/dist/src/lib/storage-pending-retry.js +42 -0
  280. package/dist/src/lib/storage-pending-retry.js.map +1 -0
  281. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
  282. package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
  283. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
  284. package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
  285. package/dist/src/lib/swift-codegen/banners.js +25 -0
  286. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  287. package/dist/src/lib/swift-codegen/dbGenerator.js +19 -7
  288. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
  289. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
  290. package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
  291. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  292. package/dist/src/lib/swift-codegen/generator.d.ts +7 -1
  293. package/dist/src/lib/swift-codegen/generator.js +28 -11
  294. package/dist/src/lib/swift-codegen/generator.js.map +1 -1
  295. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +15 -0
  296. package/dist/src/lib/swift-codegen/schemaToSwift.js +21 -4
  297. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -1
  298. package/dist/src/lib/sync-paths.d.ts +72 -55
  299. package/dist/src/lib/sync-paths.js +97 -100
  300. package/dist/src/lib/sync-paths.js.map +1 -1
  301. package/dist/src/lib/sync-resource-types.d.ts +23 -4
  302. package/dist/src/lib/sync-resource-types.js +106 -8
  303. package/dist/src/lib/sync-resource-types.js.map +1 -1
  304. package/dist/src/lib/sync-selectors.d.ts +45 -2
  305. package/dist/src/lib/sync-selectors.js +66 -5
  306. package/dist/src/lib/sync-selectors.js.map +1 -1
  307. package/dist/src/lib/template.d.ts +2 -2
  308. package/dist/src/lib/template.js +2 -2
  309. package/dist/src/lib/test-case-keys.d.ts +1 -1
  310. package/dist/src/lib/test-case-keys.js +1 -1
  311. package/dist/src/lib/test-case-variables.d.ts +14 -0
  312. package/dist/src/lib/test-case-variables.js +42 -0
  313. package/dist/src/lib/test-case-variables.js.map +1 -1
  314. package/dist/src/lib/toml-database-config.js +19 -2
  315. package/dist/src/lib/toml-database-config.js.map +1 -1
  316. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  317. package/dist/src/lib/webhook-deliver.js +519 -0
  318. package/dist/src/lib/webhook-deliver.js.map +1 -0
  319. package/dist/src/lib/workflow-codegen/generator.d.ts +1 -1
  320. package/dist/src/lib/workflow-codegen/generator.js +1 -1
  321. package/dist/src/lib/workflow-toml-validator.d.ts +17 -8
  322. package/dist/src/lib/workflow-toml-validator.js +25 -12
  323. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  324. package/dist/src/lib/workflow-usage.d.ts +196 -0
  325. package/dist/src/lib/workflow-usage.js +310 -0
  326. package/dist/src/lib/workflow-usage.js.map +1 -0
  327. package/dist/src/types/index.d.ts +12 -2
  328. package/package.json +5 -4
@@ -12,7 +12,7 @@
12
12
  * They read the same `ConfigTable`, so they cannot disagree about which fields
13
13
  * exist — which is the whole point.
14
14
  */
15
- import { isEmptyForEmit, writableFieldNames, } from "./generated-config-surfaces.js";
15
+ import { isEmptyForEmit, tomlGroupsOf, writableFieldNames, } from "./generated-config-surfaces.js";
16
16
  /**
17
17
  * Project a server record onto its TOML table, using the definition's field
18
18
  * list and `emit` semantics.
@@ -29,8 +29,13 @@ import { isEmptyForEmit, writableFieldNames, } from "./generated-config-surfaces
29
29
  * empty JSON Schema `{}` is a real, distinct value ("accepts anything"), so a
30
30
  * generic "an empty object is unset" would drop it on pull and the next push
31
31
  * would clear it server-side.
32
+ *
33
+ * `tomlGroup` (#3798) names the block a field authored under SEVERAL blocks is
34
+ * written into — the prompt's kind, for the model settings chat and agent
35
+ * share. A field declaring one block ignores it; with none named, a
36
+ * multi-block field goes to its first block.
32
37
  */
33
- export function projectRecordToToml(table, record, values = {}) {
38
+ export function projectRecordToToml(table, record, values = {}, { tomlGroup } = {}) {
34
39
  const out = {};
35
40
  for (const field of table.fields) {
36
41
  const produce = values[field.field];
@@ -44,6 +49,20 @@ export function projectRecordToToml(table, record, values = {}) {
44
49
  }
45
50
  if (value === undefined)
46
51
  continue;
52
+ // #3626 — a grouped field is written inside its sub-table
53
+ // (`[configs.chat].systemPrompt`). The group itself is created lazily, so a
54
+ // group none of whose fields emit is simply absent from the pulled file
55
+ // rather than an empty `[configs.chat]` header the next diff would have to
56
+ // equate with nothing.
57
+ const groups = tomlGroupsOf(field);
58
+ if (groups.length > 0) {
59
+ const name = tomlGroup !== undefined && groups.includes(tomlGroup)
60
+ ? tomlGroup
61
+ : groups[0];
62
+ const group = (out[name] ??= {});
63
+ group[field.tomlKey] = value;
64
+ continue;
65
+ }
47
66
  out[field.tomlKey] = value;
48
67
  }
49
68
  return out;
@@ -61,15 +80,41 @@ export function projectRecordToToml(table, record, values = {}) {
61
80
  export function buildPayloadFromToml(table, tomlTable, { mode, values = {} }) {
62
81
  const source = tomlTable && typeof tomlTable === "object" ? tomlTable : {};
63
82
  const payload = {};
83
+ /**
84
+ * #3626 — where the field is authored. A grouped field is read ONLY from its
85
+ * sub-table: the same key at the table root is not a second spelling, it is
86
+ * an unknown key `acceptedTomlKeys` already refused (SO3626-013). The nine
87
+ * deprecated flat chat keys reach the group through
88
+ * `hoistDeprecatedChatKeys`, which runs before this.
89
+ *
90
+ * #3798 — a field authored under several blocks is read from the first of
91
+ * them the entry carries a value in. An entry carrying two blocks is the kind
92
+ * rule's refusal (`promptKindFileErrors`), decided before any payload is sent.
93
+ */
94
+ const readAt = (field) => {
95
+ const groups = tomlGroupsOf(field);
96
+ if (groups.length === 0)
97
+ return source[field.tomlKey];
98
+ for (const name of groups) {
99
+ const group = source[name];
100
+ if (group &&
101
+ typeof group === "object" &&
102
+ !Array.isArray(group) &&
103
+ group[field.tomlKey] !== undefined) {
104
+ return group[field.tomlKey];
105
+ }
106
+ }
107
+ return undefined;
108
+ };
64
109
  for (const field of table.fields) {
65
110
  if (!field.writableOn.includes(mode))
66
111
  continue;
67
112
  const produce = values[field.field];
68
113
  if (produce) {
69
- payload[field.field] = produce(source[field.tomlKey], mode, source);
114
+ payload[field.field] = produce(readAt(field), mode, source);
70
115
  continue;
71
116
  }
72
- const value = source[field.tomlKey];
117
+ const value = readAt(field);
73
118
  // #2880 DSO-002 — the file is the source of truth (#1567), so an absent key
74
119
  // means the field's DECLARED default rather than "leave whatever the server
75
120
  // has". Sending it is what makes the comparison's reading of that absence
@@ -1 +1 @@
1
- {"version":3,"file":"config-payload.js","sourceRoot":"","sources":["../../../src/lib/config-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,cAAc,EACd,kBAAkB,GAGnB,MAAM,gCAAgC,CAAC;AAqBxC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAkB,EAClB,MAAW,EACX,SAAoC,EAAE;IAEtC,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;QACtD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAkB,EAClB,SAAc,EACd,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAA0D;IAE7E,MAAM,MAAM,GAAG,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAClB,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;gBACtD,CAAC,CAAC,KAAK,CAAC,aAAa;gBACrB,CAAC,CAAC,KAAK,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAkB,EAClB,MAAW,EACX,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAA0D;IAE7E,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO;YAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAc,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;AAE7D,+EAA+E;AAC/E,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"config-payload.js","sourceRoot":"","sources":["../../../src/lib/config-payload.ts"],"names":[],"mappings":"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"}
@@ -15,8 +15,9 @@
15
15
  * trip is therefore loud-and-lossy — push omits what it does not know, so
16
16
  * the server keeps its stored values — never silently destructive.
17
17
  */
18
- import { retiredConfigKey, type ConfigObjectSurface, type ConfigField, type ConfigTable } from "./generated-config-surfaces.js";
18
+ import { findUnknownGroupedTomlKeys, retiredConfigKey, type ConfigObjectSurface, type ConfigField, type ConfigTable } from "./generated-config-surfaces.js";
19
19
  export { retiredConfigKey };
20
+ export { findUnknownGroupedTomlKeys };
20
21
  /** A surface by label. Throws rather than silently skipping checks. */
21
22
  export declare function requireConfigSurface(label: string): ConfigObjectSurface;
22
23
  /** A table by label and TOML path. Throws rather than silently skipping checks. */
@@ -30,6 +31,7 @@ export declare const WEBHOOK_TABLE: ConfigTable;
30
31
  export declare const CRON_TRIGGER_TABLE: ConfigTable;
31
32
  export declare const BLOB_BUCKET_TABLE: ConfigTable;
32
33
  export declare const EMAIL_TEMPLATE_TABLE: ConfigTable;
34
+ export declare const SERVER_FUNCTION_TABLE: ConfigTable;
33
35
  export declare const DATABASE_TYPE_TABLE: ConfigTable;
34
36
  export declare const RULE_SET_TABLE: ConfigTable;
35
37
  export declare const GROUP_TYPE_CONFIG_TABLE: ConfigTable;
@@ -47,6 +49,15 @@ export declare const METADATA_CATEGORY_CONFIG_TABLE: ConfigTable;
47
49
  export declare const TEST_CASE_TABLE: ConfigTable;
48
50
  /** The `test-case` surface itself, for the sidecars' document-shape check. */
49
51
  export declare const TEST_CASE_SURFACE: ConfigObjectSurface;
52
+ /**
53
+ * The value a create materializes when the file omits `field`, as the
54
+ * definition records it — or `undefined` when the field has no such default.
55
+ *
56
+ * Read rather than repeated, so a caller that omits a value BECAUSE the server
57
+ * would assign it anyway (#3201's `[[configs]] status`) can never disagree
58
+ * with the default push sends for the same absent key.
59
+ */
60
+ export declare function fieldServerDefault(table: ConfigTable, field: string): ConfigField["serverDefault"];
50
61
  /**
51
62
  * Does this field's declared type genuinely admit more than one spelling
52
63
  * (#2880 criterion 5)?
@@ -15,11 +15,15 @@
15
15
  * trip is therefore loud-and-lossy — push omits what it does not know, so
16
16
  * the server keeps its stored values — never silently destructive.
17
17
  */
18
- import { GENERATED_CONFIG_MODEL_FIELDS, acceptedTomlKeys, retiredConfigKey, findMisshapenTomlTables, findUnknownTomlDocumentKeys, getConfigSurface, getConfigTable, recognizedResponseKeys, } from "./generated-config-surfaces.js";
18
+ import { GENERATED_CONFIG_MODEL_FIELDS, acceptedTomlKeys, findUnknownGroupedTomlKeys, tomlGroupsOf, retiredConfigKey, findMisshapenTomlTables, findUnknownTomlDocumentKeys, getConfigSurface, getConfigTable, recognizedResponseKeys, } from "./generated-config-surfaces.js";
19
19
  // #2645/#2803 — the guidance for a key a definition deliberately RETIRED. Its
20
20
  // text is vendored with the definitions so `config push` and the server's
21
21
  // create/update handlers say the same thing about the same key.
22
22
  export { retiredConfigKey };
23
+ // #3626 — keys inside a `[configs.<group>]` block that no field declares
24
+ // under it. Re-exported beside `findUnknownTomlKeys` so a caller checking a
25
+ // table's keys needs one import for both halves of the same question.
26
+ export { findUnknownGroupedTomlKeys };
23
27
  /** A surface by label. Throws rather than silently skipping checks. */
24
28
  export function requireConfigSurface(label) {
25
29
  const surface = getConfigSurface(label);
@@ -56,6 +60,12 @@ export const BLOB_BUCKET_TABLE = requireConfigTable("blob-bucket", ["bucket"]);
56
60
  export const EMAIL_TEMPLATE_TABLE = requireConfigTable("email-template", [
57
61
  "template",
58
62
  ]);
63
+ // #3179 — the `[function]` table. One table over the HEADER model; the three
64
+ // version-carried keys (`entry`, `mode`, `limits`) are declared beside `key`
65
+ // in its `tomlOnlyKeys`, because an author writes a function, never a version.
66
+ export const SERVER_FUNCTION_TABLE = requireConfigTable("function", [
67
+ "function",
68
+ ]);
59
69
  // The five structured objects (#2644 phase 3). Their authored sub-trees —
60
70
  // `[rules]`, `[models.*]`, `[triggers]`, the `[metadata]` manifest — keep the
61
71
  // validators that already own them; these tables are the scalar surface.
@@ -78,6 +88,17 @@ export const METADATA_CATEGORY_CONFIG_TABLE = requireConfigTable("metadata-categ
78
88
  export const TEST_CASE_TABLE = requireConfigTable("test-case", ["test"]);
79
89
  /** The `test-case` surface itself, for the sidecars' document-shape check. */
80
90
  export const TEST_CASE_SURFACE = requireConfigSurface("test-case");
91
+ /**
92
+ * The value a create materializes when the file omits `field`, as the
93
+ * definition records it — or `undefined` when the field has no such default.
94
+ *
95
+ * Read rather than repeated, so a caller that omits a value BECAUSE the server
96
+ * would assign it anyway (#3201's `[[configs]] status`) can never disagree
97
+ * with the default push sends for the same absent key.
98
+ */
99
+ export function fieldServerDefault(table, field) {
100
+ return table.fields.find((f) => f.field === field)?.serverDefault;
101
+ }
81
102
  /**
82
103
  * Does this field's declared type genuinely admit more than one spelling
83
104
  * (#2880 criterion 5)?
@@ -159,6 +180,22 @@ function valueMatchesDeclaredType(field, value) {
159
180
  return true;
160
181
  }
161
182
  }
183
+ /** The value as a TOML table, or `undefined` when it is not one. */
184
+ function readTomlTable(value) {
185
+ return value && typeof value === "object" && !Array.isArray(value)
186
+ ? value
187
+ : undefined;
188
+ }
189
+ /**
190
+ * Is `key` a spelling this table still accepts but has superseded (#3626)?
191
+ *
192
+ * The nine flat chat keys are the first: declared in `tomlOnlyKeys` with
193
+ * `kind: "deprecated"` so an unmigrated prompt file keeps pushing, while the
194
+ * field itself is authored inside `[configs.chat]`.
195
+ */
196
+ function isDeprecatedTomlKey(table, key) {
197
+ return table.tomlOnlyKeys?.[key]?.kind === "deprecated";
198
+ }
162
199
  /**
163
200
  * Every value in `tomlData` whose spelling does not match the type its field
164
201
  * declares (#2880 criterion 5).
@@ -185,10 +222,41 @@ export function configDeclaredTypeErrors(filePath, tomlData, table) {
185
222
  if (!entry.value || typeof entry.value !== "object")
186
223
  continue;
187
224
  for (const field of table.fields) {
188
- const value = entry.value[field.tomlKey];
225
+ // #3626 — a grouped field is read at its group path and LABELLED with it
226
+ // (`configs[0].chat.temperature`), so the message names where the value
227
+ // actually is. A group that is not a table has no value to type-check;
228
+ // `findUnknownGroupedTomlKeys` reports that shape.
229
+ //
230
+ // #3798 — a field several blocks share is read in the first of its
231
+ // blocks that holds a value, and labelled with that block, so a
232
+ // mistyped `[configs.agent].temperature` names `agent`.
233
+ const groups = tomlGroupsOf(field);
234
+ const groupName = groups.find((name) => readTomlTable(entry.value[name])?.[field.tomlKey] !== undefined) ?? groups[0];
235
+ let container = readTomlTable(groupName
236
+ ? entry.value[groupName]
237
+ : entry.value);
238
+ let label = groupName ? `${entry.label}.${groupName}` : entry.label;
239
+ // #3626, CR3626-003 — a grouped key whose FLAT spelling the table still
240
+ // accepts as DEPRECATED is read where the file actually wrote it. The
241
+ // grouping moved the reader into the sub-table, which silently took the
242
+ // declared-type check away from every unmigrated file: a flat
243
+ // `temperature = "hot"` passed the preflight it used to fail and was
244
+ // hoisted into the payload unread. Accepting the old spelling has to mean
245
+ // accepting it on the same terms, so the root value is checked — and
246
+ // labelled at the root, because that is the line the author has to fix.
247
+ if (groupName &&
248
+ container?.[field.tomlKey] === undefined &&
249
+ isDeprecatedTomlKey(table, field.tomlKey) &&
250
+ entry.value[field.tomlKey] !== undefined) {
251
+ container = entry.value;
252
+ label = entry.label;
253
+ }
254
+ if (!container)
255
+ continue;
256
+ const value = container[field.tomlKey];
189
257
  if (valueMatchesDeclaredType(field, value))
190
258
  continue;
191
- errors.push(`${filePath}: ${entry.label}.${field.tomlKey} — expected a ` +
259
+ errors.push(`${filePath}: ${label}.${field.tomlKey} — expected a ` +
192
260
  `${declaredTypeName(field.type)}, found ${foundSpelling(value)}. ` +
193
261
  "The declared type is the contract: `config diff` and `config push` " +
194
262
  "both read it this way and neither converts it for you.");
@@ -1 +1 @@
1
- {"version":3,"file":"config-surface.js","sourceRoot":"","sources":["../../../src/lib/config-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-surface.js","sourceRoot":"","sources":["../../../src/lib/config-surface.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * ~/.primitive/credentials.json and a handful of helpers here. After the
6
6
  * project-config overhaul (issue #373) credentials live per-environment
7
7
  * inside `<projectRoot>/.primitive/credentials.json` when a
8
- * .primitive/config.json is in scope, and fall back to the legacy global
8
+ * primitive/config.json is in scope, and fall back to the legacy global
9
9
  * file otherwise.
10
10
  *
11
11
  * The rest of the CLI continues to import from this module, so we keep
@@ -18,15 +18,39 @@ export declare function saveCredentials(credentials: Credentials): void;
18
18
  export declare function clearCredentials(): void;
19
19
  export declare function isTokenExpired(credentials: Credentials): boolean;
20
20
  export declare function isTokenExpiringSoon(credentials: Credentials): boolean;
21
- export declare function setCurrentApp(appId: string, appName?: string): void;
22
- export declare function clearCurrentApp(): void;
23
- export declare function getCurrentAppId(): string | undefined;
21
+ /**
22
+ * The app this invocation runs against: the resolved environment's, and only
23
+ * ever that (#3152).
24
+ *
25
+ * It never answers "none" (#3154). Outside a project there is no environment,
26
+ * and therefore no app — but there is also no configuration tree, no server
27
+ * and no credentials, so "which app?" is not a question with a quieter answer
28
+ * than the others. `requireCurrentEnvironment()` gives the one refusal, which
29
+ * is what retired the "No app specified" branch and its five local copies.
30
+ */
31
+ export declare function getCurrentApp(): {
32
+ appId: string;
33
+ appName?: string;
34
+ };
35
+ export declare function getCurrentAppId(): string;
36
+ /**
37
+ * The app a command acts on: an explicit one where the command still takes
38
+ * one (`users`, `apps`, `admins`, the database data verbs), otherwise the
39
+ * environment's.
40
+ *
41
+ * The explicit forms are checked FIRST and short-circuit, so a cross-app read
42
+ * still works with no environment able to name that app — that is the whole
43
+ * reason `--app` survives on those commands (intent §Decisions).
44
+ */
24
45
  export declare function resolveAppId(appId: string | undefined, options: {
25
46
  app?: string;
26
47
  }): string;
27
48
  /**
28
- * Returns the API base URL for the active environment (project mode) or
29
- * the serverUrl saved in the legacy credentials file.
49
+ * The API base URL for the active environment.
50
+ *
51
+ * The credentials-file fallback is gone (#3154): a `serverUrl` left in
52
+ * `~/.primitive/credentials.json` by whatever the last `login` targeted was a
53
+ * second source for the one thing an environment exists to say.
30
54
  */
31
55
  export declare function getServerUrl(): string;
32
56
  /**
@@ -39,15 +63,9 @@ export declare function getServerUrl(): string;
39
63
  * - Project mode → the active environment's `apiUrl` (canonical). Lets
40
64
  * getCurrentEnvironment() throw on an unresolvable env (ambiguous/unknown
41
65
  * --env) so the caller can fail loudly instead of silently targeting prod.
42
- * - Legacy mode (no .primitive/config.json) → DEFAULT_SERVER_URL, which
66
+ * - Legacy mode (no primitive/config.json) → DEFAULT_SERVER_URL, which
43
67
  * honors the PRIMITIVE_SERVER_URL escape hatch (constants.ts).
44
68
  *
45
69
  * The trailing slash is stripped so callers can build `${url}/admin/api/...`.
46
70
  */
47
71
  export declare function getConfiguredServerUrl(): string;
48
- /**
49
- * Exposed so commands can check whether there's a pre-project-config
50
- * credentials file at ~/.primitive/credentials.json (used by migration
51
- * prompts).
52
- */
53
- export declare function legacyCredentialsExist(): boolean;
@@ -5,16 +5,15 @@
5
5
  * ~/.primitive/credentials.json and a handful of helpers here. After the
6
6
  * project-config overhaul (issue #373) credentials live per-environment
7
7
  * inside `<projectRoot>/.primitive/credentials.json` when a
8
- * .primitive/config.json is in scope, and fall back to the legacy global
8
+ * primitive/config.json is in scope, and fall back to the legacy global
9
9
  * file otherwise.
10
10
  *
11
11
  * The rest of the CLI continues to import from this module, so we keep
12
12
  * the original public API (loadCredentials, saveCredentials, etc.) and
13
13
  * just delegate to the new stores.
14
14
  */
15
- import { clearCredentialsStore, clearCurrentAppStore, loadCredentialsStore, peekLegacyCredentials, saveCredentialsStore, setCurrentAppStore, } from "./credentials-store.js";
16
- import { getCurrentEnvironment, getCurrentEnvNameSafe, } from "./env-resolver.js";
17
- import { PROJECT_CONFIG_DISPLAY_NAME } from "./project-config.js";
15
+ import { clearCredentialsStore, loadCredentialsStore, saveCredentialsStore, } from "./credentials-store.js";
16
+ import { getCurrentEnvironment, requireCurrentEnvironment, } from "./env-resolver.js";
18
17
  import { DEFAULT_SERVER_URL } from "./constants.js";
19
18
  export function loadCredentials() {
20
19
  return loadCredentialsStore();
@@ -41,71 +40,44 @@ export function isTokenExpiringSoon(credentials) {
41
40
  // Consider expiring soon if less than 5 minutes remaining
42
41
  return expiresAt - now < 5 * 60 * 1000;
43
42
  }
44
- export function setCurrentApp(appId, appName) {
45
- setCurrentAppStore(appId, appName);
46
- }
47
- export function clearCurrentApp() {
48
- clearCurrentAppStore();
43
+ /**
44
+ * The app this invocation runs against: the resolved environment's, and only
45
+ * ever that (#3152).
46
+ *
47
+ * It never answers "none" (#3154). Outside a project there is no environment,
48
+ * and therefore no app — but there is also no configuration tree, no server
49
+ * and no credentials, so "which app?" is not a question with a quieter answer
50
+ * than the others. `requireCurrentEnvironment()` gives the one refusal, which
51
+ * is what retired the "No app specified" branch and its five local copies.
52
+ */
53
+ export function getCurrentApp() {
54
+ const env = requireCurrentEnvironment(); // may throw on an unresolvable env
55
+ return { appId: env.config.appId, appName: env.config.appName };
49
56
  }
50
57
  export function getCurrentAppId() {
51
- // In project mode, the appId may come from .primitive/config.json (via
52
- // loadCredentialsStore), which is what we want. In legacy mode it comes
53
- // from the global credentials file.
54
- const credentials = loadCredentials();
55
- return credentials?.currentAppId;
58
+ return getCurrentApp().appId;
56
59
  }
60
+ /**
61
+ * The app a command acts on: an explicit one where the command still takes
62
+ * one (`users`, `apps`, `admins`, the database data verbs), otherwise the
63
+ * environment's.
64
+ *
65
+ * The explicit forms are checked FIRST and short-circuit, so a cross-app read
66
+ * still works with no environment able to name that app — that is the whole
67
+ * reason `--app` survives on those commands (intent §Decisions).
68
+ */
57
69
  export function resolveAppId(appId, options) {
58
- const resolved = appId || options.app || getCurrentAppId();
59
- if (!resolved) {
60
- // When the active env declares an `appId` in .primitive/config.json but
61
- // has no credentials slot, loadCredentialsStore() returns null (its
62
- // null == unauthenticated contract), so getCurrentAppId() yields nothing
63
- // even though an appId IS configured. In that case the accurate problem
64
- // is that the user isn't authenticated for this env — not that no app was
65
- // specified. (A creds slot would have blended in env.config.appId and made
66
- // `resolved` truthy, so reaching here with a configured appId can only mean
67
- // missing credentials.)
68
- let env = null;
69
- try {
70
- env = getCurrentEnvironment();
71
- }
72
- catch {
73
- // Env resolution failed (ambiguous/unknown env) — fall back to the
74
- // original "No app specified." message below.
75
- }
76
- if (env && env.config.appId) {
77
- console.error(`Not logged in to environment "${env.name}". An appId is configured in ${PROJECT_CONFIG_DISPLAY_NAME} but you're not authenticated. Run 'primitive -e ${env.name} login'.`);
78
- process.exit(1);
79
- }
80
- const envName = getCurrentEnvNameSafe();
81
- const hint = envName
82
- ? `(current environment: ${envName}). Set 'appId' in .primitive/config.json, pass --app, or run 'primitive use <app-id>'.`
83
- : `Use <app-id>, --app, or 'primitive use <app-id>' to set context.`;
84
- console.error(`No app specified. ${hint}`);
85
- process.exit(1);
86
- }
87
- return resolved;
70
+ return appId || options.app || getCurrentAppId();
88
71
  }
89
72
  /**
90
- * Returns the API base URL for the active environment (project mode) or
91
- * the serverUrl saved in the legacy credentials file.
73
+ * The API base URL for the active environment.
74
+ *
75
+ * The credentials-file fallback is gone (#3154): a `serverUrl` left in
76
+ * `~/.primitive/credentials.json` by whatever the last `login` targeted was a
77
+ * second source for the one thing an environment exists to say.
92
78
  */
93
79
  export function getServerUrl() {
94
- // Project mode takes priority — the project config is the source of
95
- // truth for the API URL, even if we haven't logged in yet.
96
- try {
97
- const env = getCurrentEnvironment();
98
- if (env)
99
- return env.config.apiUrl;
100
- }
101
- catch (err) {
102
- // Env resolution failed — fall through to credentials-based lookup.
103
- }
104
- const credentials = loadCredentials();
105
- if (!credentials?.serverUrl) {
106
- throw new Error("Not logged in. Run 'primitive login' first.");
107
- }
108
- return credentials.serverUrl;
80
+ return requireCurrentEnvironment().config.apiUrl;
109
81
  }
110
82
  /**
111
83
  * Resolves the API base URL to authenticate against, used by `primitive login`
@@ -117,7 +89,7 @@ export function getServerUrl() {
117
89
  * - Project mode → the active environment's `apiUrl` (canonical). Lets
118
90
  * getCurrentEnvironment() throw on an unresolvable env (ambiguous/unknown
119
91
  * --env) so the caller can fail loudly instead of silently targeting prod.
120
- * - Legacy mode (no .primitive/config.json) → DEFAULT_SERVER_URL, which
92
+ * - Legacy mode (no primitive/config.json) → DEFAULT_SERVER_URL, which
121
93
  * honors the PRIMITIVE_SERVER_URL escape hatch (constants.ts).
122
94
  *
123
95
  * The trailing slash is stripped so callers can build `${url}/admin/api/...`.
@@ -126,12 +98,4 @@ export function getConfiguredServerUrl() {
126
98
  const env = getCurrentEnvironment(); // may throw on an unresolvable env
127
99
  return (env ? env.config.apiUrl : DEFAULT_SERVER_URL).replace(/\/$/, "");
128
100
  }
129
- /**
130
- * Exposed so commands can check whether there's a pre-project-config
131
- * credentials file at ~/.primitive/credentials.json (used by migration
132
- * prompts).
133
- */
134
- export function legacyCredentialsExist() {
135
- return peekLegacyCredentials() !== null;
136
- }
137
101
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,UAAU,eAAe;IAC7B,OAAO,oBAAoB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAwB;IACtD,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,qBAAqB,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAwB;IACrD,IAAI,CAAC,WAAW,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,qDAAqD;IACrD,OAAO,SAAS,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAwB;IAC1D,IAAI,CAAC,WAAW,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,0DAA0D;IAC1D,OAAO,SAAS,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC,CAAC,mCAAmC;IAC5E,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,EAAE,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAyB,EACzB,OAAyB;IAEzB,OAAO,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,yBAAyB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC,CAAC,mCAAmC;IACxE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * Credentials storage with dual-mode support.
3
3
  *
4
+ * Credentials are tokens and who they belong to, and nothing else: the app an
5
+ * invocation runs against is the resolved environment's `appId` (#3152), never
6
+ * a slot in this file.
7
+ *
4
8
  * Mode A (project mode): credentials live at
5
9
  * <projectRoot>/.primitive/credentials.json
6
10
  * with per-environment slots:
@@ -11,30 +15,58 @@
11
15
  * }
12
16
  * }
13
17
  *
14
- * Mode B (legacy mode): no .primitive/config.json in scope, so we fall back to
18
+ * Mode B (global mode): no primitive/config.json in scope, so we fall back to
15
19
  * ~/.primitive/credentials.json
16
20
  * with the flat Credentials shape the CLI has always used.
17
21
  *
18
- * The legacy mode is still the "global default" for users who haven't
19
- * run `primitive init` yet.
22
+ * Mode B is NOT a default any more (#3154, intent criterion 5). It used to be
23
+ * the silent answer for every command run outside a project, which is how an
24
+ * app-scoped command could quietly operate against whatever server the last
25
+ * `login` happened to target. Now a command has to say out loud that it may
26
+ * work outside a project, by calling `allowGlobalCredentials()` in its own
27
+ * action; every other command gets `missing-config` here instead of a file.
28
+ *
29
+ * Exactly four commands say it: `login`, which creates the file; `logout`,
30
+ * which is the only way to clear what login wrote; `init`, which must call the
31
+ * API before a project can exist; and `bootstrap`, which creates the first
32
+ * super-admin on an empty no-OAuth database and therefore cannot be inside a
33
+ * project either. The last two are the divergence from the intent's "login and
34
+ * init and nothing else", adjudicated on #3154 as finding F1.
35
+ *
36
+ * The opt-in is per ACTION, not per argv: `primitive --env prod login` and
37
+ * `primitive login` reach the same line, so there is no flag shape for a
38
+ * pre-parse to miss. And it only PERMITS the global file — inside a project
39
+ * all four still use the per-environment slots.
20
40
  */
21
41
  import type { Credentials } from "../types/index.js";
22
42
  export declare const PROJECT_LOCAL_DIR = ".primitive";
23
43
  export declare const PROJECT_CREDENTIALS_FILENAME = "credentials.json";
24
- /** Returns true when a .primitive/config.json is in scope (project mode active). */
44
+ /** Returns true when a primitive/config.json is in scope (project mode active). */
25
45
  export declare function isProjectMode(): boolean;
26
46
  /**
27
47
  * Returns the path to the credentials file that will be used, based on
28
48
  * whether we're in project mode or legacy mode.
29
49
  */
30
50
  export declare function getCredentialsFilePath(): string;
51
+ /**
52
+ * Declare that THIS command may fall back to `~/.primitive/credentials.json`
53
+ * when no project is in scope. Called at the top of `login`, `logout`, `init`
54
+ * and `bootstrap`, and nowhere else.
55
+ */
56
+ export declare function allowGlobalCredentials(): void;
57
+ /**
58
+ * Drop the declaration again. One invocation runs one command, so nothing in
59
+ * the CLI calls this — it exists so a test file can exercise both sides of the
60
+ * boundary in one process, the way `resetEnvResolver()` does for the resolver.
61
+ */
62
+ export declare function resetGlobalCredentialsAllowance(): void;
31
63
  /**
32
64
  * Reads credentials for the current environment (project mode) or the
33
65
  * legacy global file. Returns the standard Credentials shape so existing
34
66
  * callers don't need to change.
35
67
  *
36
68
  * In project mode, we blend the per-env stored creds with the serverUrl
37
- * and appId from .primitive/config.json to produce the Credentials the rest of
69
+ * and appId from primitive/config.json to produce the Credentials the rest of
38
70
  * the CLI expects.
39
71
  */
40
72
  export declare function loadCredentialsStore(): Credentials | null;
@@ -63,9 +95,6 @@ export declare function clearCredentialsForEnvInProject(projectRoot: string, env
63
95
  * project's credentials file. Used by `primitive init` to carry the session
64
96
  * it just authenticated into the freshly scaffolded project, so the first
65
97
  * in-project CLI command works without a second `primitive login`.
66
- *
67
- * Does not persist currentAppId/Name — the project's .primitive/config.json
68
- * is the source of truth for those (same rule as saveCredentialsStore).
69
98
  */
70
99
  export declare function seedCredentialsForEnvInProject(projectRoot: string, envName: string, credentials: Credentials): void;
71
100
  /**
@@ -73,17 +102,3 @@ export declare function seedCredentialsForEnvInProject(projectRoot: string, envN
73
102
  * Returns an empty array in legacy mode.
74
103
  */
75
104
  export declare function listAuthenticatedEnvironments(): string[];
76
- /**
77
- * Updates the "current app" in credential storage. In project mode with a
78
- * project-level appId this is a no-op (the project config is canonical).
79
- */
80
- export declare function setCurrentAppStore(appId: string, appName?: string): void;
81
- /**
82
- * Clears the "current app" for the current environment.
83
- */
84
- export declare function clearCurrentAppStore(): void;
85
- /**
86
- * Returns the legacy credentials file, if one exists. Used by migration
87
- * prompts that want to detect a pre-project-config install.
88
- */
89
- export declare function peekLegacyCredentials(): Credentials | null;