@productbrain/cli 0.1.0-beta.99 → 0.1.0-beta.9904

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 (1537) hide show
  1. package/README.md +11 -2
  2. package/dist/__tests__/adapters.test.js +79 -53
  3. package/dist/__tests__/adapters.test.js.map +1 -1
  4. package/dist/__tests__/adminConfig.test.d.ts +18 -0
  5. package/dist/__tests__/adminConfig.test.d.ts.map +1 -0
  6. package/dist/__tests__/adminConfig.test.js +221 -0
  7. package/dist/__tests__/adminConfig.test.js.map +1 -0
  8. package/dist/__tests__/batch-transformations.test.js +2 -26
  9. package/dist/__tests__/batch-transformations.test.js.map +1 -1
  10. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  11. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  12. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  13. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  14. package/dist/__tests__/capture-receipt-coaching.test.d.ts +2 -0
  15. package/dist/__tests__/capture-receipt-coaching.test.d.ts.map +1 -0
  16. package/dist/__tests__/capture-receipt-coaching.test.js +109 -0
  17. package/dist/__tests__/capture-receipt-coaching.test.js.map +1 -0
  18. package/dist/__tests__/capture-receipt-role-hint.test.d.ts +2 -0
  19. package/dist/__tests__/capture-receipt-role-hint.test.d.ts.map +1 -0
  20. package/dist/__tests__/capture-receipt-role-hint.test.js +67 -0
  21. package/dist/__tests__/capture-receipt-role-hint.test.js.map +1 -0
  22. package/dist/__tests__/capture-receipt-spine-floor.test.d.ts +2 -0
  23. package/dist/__tests__/capture-receipt-spine-floor.test.d.ts.map +1 -0
  24. package/dist/__tests__/capture-receipt-spine-floor.test.js +45 -0
  25. package/dist/__tests__/capture-receipt-spine-floor.test.js.map +1 -0
  26. package/dist/__tests__/capture.test.js +1337 -181
  27. package/dist/__tests__/capture.test.js.map +1 -1
  28. package/dist/__tests__/client-binding-guard.test.d.ts +2 -0
  29. package/dist/__tests__/client-binding-guard.test.d.ts.map +1 -0
  30. package/dist/__tests__/client-binding-guard.test.js +84 -0
  31. package/dist/__tests__/client-binding-guard.test.js.map +1 -0
  32. package/dist/__tests__/coaching-mirror-drift.test.d.ts +2 -0
  33. package/dist/__tests__/coaching-mirror-drift.test.d.ts.map +1 -0
  34. package/dist/__tests__/coaching-mirror-drift.test.js +47 -0
  35. package/dist/__tests__/coaching-mirror-drift.test.js.map +1 -0
  36. package/dist/__tests__/codex-prep-parity.test.d.ts +2 -0
  37. package/dist/__tests__/codex-prep-parity.test.d.ts.map +1 -0
  38. package/dist/__tests__/codex-prep-parity.test.js +84 -0
  39. package/dist/__tests__/codex-prep-parity.test.js.map +1 -0
  40. package/dist/__tests__/collection-registry-seed-drift.test.d.ts +2 -0
  41. package/dist/__tests__/collection-registry-seed-drift.test.d.ts.map +1 -0
  42. package/dist/__tests__/collection-registry-seed-drift.test.js +102 -0
  43. package/dist/__tests__/collection-registry-seed-drift.test.js.map +1 -0
  44. package/dist/__tests__/config-prod-fallthrough.test.d.ts +2 -0
  45. package/dist/__tests__/config-prod-fallthrough.test.d.ts.map +1 -0
  46. package/dist/__tests__/config-prod-fallthrough.test.js +93 -0
  47. package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -0
  48. package/dist/__tests__/config.test.js +821 -32
  49. package/dist/__tests__/config.test.js.map +1 -1
  50. package/dist/__tests__/constants.test.js +6 -1
  51. package/dist/__tests__/constants.test.js.map +1 -1
  52. package/dist/__tests__/constellation.test.js +26 -14
  53. package/dist/__tests__/constellation.test.js.map +1 -1
  54. package/dist/__tests__/conversation.test.d.ts +2 -0
  55. package/dist/__tests__/conversation.test.d.ts.map +1 -0
  56. package/dist/__tests__/conversation.test.js +113 -0
  57. package/dist/__tests__/conversation.test.js.map +1 -0
  58. package/dist/__tests__/entry-formatter.test.d.ts +2 -0
  59. package/dist/__tests__/entry-formatter.test.d.ts.map +1 -0
  60. package/dist/__tests__/entry-formatter.test.js +159 -0
  61. package/dist/__tests__/entry-formatter.test.js.map +1 -0
  62. package/dist/__tests__/entry-preflight.test.d.ts +2 -0
  63. package/dist/__tests__/entry-preflight.test.d.ts.map +1 -0
  64. package/dist/__tests__/entry-preflight.test.js +58 -0
  65. package/dist/__tests__/entry-preflight.test.js.map +1 -0
  66. package/dist/__tests__/entryAccept-batch.test.d.ts +2 -0
  67. package/dist/__tests__/entryAccept-batch.test.d.ts.map +1 -0
  68. package/dist/__tests__/entryAccept-batch.test.js +305 -0
  69. package/dist/__tests__/entryAccept-batch.test.js.map +1 -0
  70. package/dist/__tests__/entryAccept.test.d.ts +2 -0
  71. package/dist/__tests__/entryAccept.test.d.ts.map +1 -0
  72. package/dist/__tests__/entryAccept.test.js +513 -0
  73. package/dist/__tests__/entryAccept.test.js.map +1 -0
  74. package/dist/__tests__/entryDiscardResolve.test.d.ts +2 -0
  75. package/dist/__tests__/entryDiscardResolve.test.d.ts.map +1 -0
  76. package/dist/__tests__/entryDiscardResolve.test.js +28 -0
  77. package/dist/__tests__/entryDiscardResolve.test.js.map +1 -0
  78. package/dist/__tests__/entryOwn.test.d.ts +2 -0
  79. package/dist/__tests__/entryOwn.test.d.ts.map +1 -0
  80. package/dist/__tests__/entryOwn.test.js +50 -0
  81. package/dist/__tests__/entryOwn.test.js.map +1 -0
  82. package/dist/__tests__/entryTick.test.d.ts +2 -0
  83. package/dist/__tests__/entryTick.test.d.ts.map +1 -0
  84. package/dist/__tests__/entryTick.test.js +40 -0
  85. package/dist/__tests__/entryTick.test.js.map +1 -0
  86. package/dist/__tests__/envelope-contract.test.js +31 -3
  87. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  88. package/dist/__tests__/errors.test.js +42 -0
  89. package/dist/__tests__/errors.test.js.map +1 -1
  90. package/dist/__tests__/fields.test.js +14 -3
  91. package/dist/__tests__/fields.test.js.map +1 -1
  92. package/dist/__tests__/gateway-dry-run-timeout.test.d.ts +2 -0
  93. package/dist/__tests__/gateway-dry-run-timeout.test.d.ts.map +1 -0
  94. package/dist/__tests__/gateway-dry-run-timeout.test.js +70 -0
  95. package/dist/__tests__/gateway-dry-run-timeout.test.js.map +1 -0
  96. package/dist/__tests__/gateway-timeout-body-phase.test.d.ts +2 -0
  97. package/dist/__tests__/gateway-timeout-body-phase.test.d.ts.map +1 -0
  98. package/dist/__tests__/gateway-timeout-body-phase.test.js +121 -0
  99. package/dist/__tests__/gateway-timeout-body-phase.test.js.map +1 -0
  100. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  101. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  102. package/dist/__tests__/handshake-augment.test.js +407 -0
  103. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  104. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  105. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  106. package/dist/__tests__/handshake-dormancy.test.js +24 -0
  107. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  108. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  109. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  110. package/dist/__tests__/handshake-formatter.test.js +111 -0
  111. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  112. package/dist/__tests__/handshake-preview.test.js +358 -137
  113. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  114. package/dist/__tests__/handshake-session-threading.test.d.ts +2 -0
  115. package/dist/__tests__/handshake-session-threading.test.d.ts.map +1 -0
  116. package/dist/__tests__/handshake-session-threading.test.js +185 -0
  117. package/dist/__tests__/handshake-session-threading.test.js.map +1 -0
  118. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  119. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  120. package/dist/__tests__/handshake.e2e.test.js +226 -0
  121. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  122. package/dist/__tests__/handshake.test.js +828 -4
  123. package/dist/__tests__/handshake.test.js.map +1 -1
  124. package/dist/__tests__/health-gap-kinds-drift.test.d.ts +2 -0
  125. package/dist/__tests__/health-gap-kinds-drift.test.d.ts.map +1 -0
  126. package/dist/__tests__/health-gap-kinds-drift.test.js +43 -0
  127. package/dist/__tests__/health-gap-kinds-drift.test.js.map +1 -0
  128. package/dist/__tests__/hook-intents.test.js +3 -3
  129. package/dist/__tests__/hook-intents.test.js.map +1 -1
  130. package/dist/__tests__/ingest.test.js +9 -0
  131. package/dist/__tests__/ingest.test.js.map +1 -1
  132. package/dist/__tests__/init.test.js +51 -14
  133. package/dist/__tests__/init.test.js.map +1 -1
  134. package/dist/__tests__/kernel-value-sets-drift.test.d.ts +2 -0
  135. package/dist/__tests__/kernel-value-sets-drift.test.d.ts.map +1 -0
  136. package/dist/__tests__/kernel-value-sets-drift.test.js +46 -0
  137. package/dist/__tests__/kernel-value-sets-drift.test.js.map +1 -0
  138. package/dist/__tests__/kernel-value-sets-generator.test.d.ts +2 -0
  139. package/dist/__tests__/kernel-value-sets-generator.test.d.ts.map +1 -0
  140. package/dist/__tests__/kernel-value-sets-generator.test.js +108 -0
  141. package/dist/__tests__/kernel-value-sets-generator.test.js.map +1 -0
  142. package/dist/__tests__/login.test.js +18 -1
  143. package/dist/__tests__/login.test.js.map +1 -1
  144. package/dist/__tests__/manifest.test.js +118 -1
  145. package/dist/__tests__/manifest.test.js.map +1 -1
  146. package/dist/__tests__/method-registry.integration.test.js +2 -3
  147. package/dist/__tests__/method-registry.integration.test.js.map +1 -1
  148. package/dist/__tests__/method-registry.test.d.ts +6 -8
  149. package/dist/__tests__/method-registry.test.d.ts.map +1 -1
  150. package/dist/__tests__/method-registry.test.js +22 -70
  151. package/dist/__tests__/method-registry.test.js.map +1 -1
  152. package/dist/__tests__/missingPin.test.d.ts +11 -0
  153. package/dist/__tests__/missingPin.test.d.ts.map +1 -0
  154. package/dist/__tests__/missingPin.test.js +232 -0
  155. package/dist/__tests__/missingPin.test.js.map +1 -0
  156. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  157. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  158. package/dist/__tests__/notice-marker.test.js +176 -0
  159. package/dist/__tests__/notice-marker.test.js.map +1 -0
  160. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  161. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  162. package/dist/__tests__/onboarding.test.js +29 -5
  163. package/dist/__tests__/onboarding.test.js.map +1 -1
  164. package/dist/__tests__/onboardingFallback.test.d.ts +2 -0
  165. package/dist/__tests__/onboardingFallback.test.d.ts.map +1 -0
  166. package/dist/__tests__/onboardingFallback.test.js +74 -0
  167. package/dist/__tests__/onboardingFallback.test.js.map +1 -0
  168. package/dist/__tests__/orient.test.js +538 -20
  169. package/dist/__tests__/orient.test.js.map +1 -1
  170. package/dist/__tests__/perimeter.test.d.ts +2 -0
  171. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  172. package/dist/__tests__/perimeter.test.js +165 -0
  173. package/dist/__tests__/perimeter.test.js.map +1 -0
  174. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  175. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  176. package/dist/__tests__/personal-layer.test.js +12 -48
  177. package/dist/__tests__/personal-layer.test.js.map +1 -1
  178. package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
  179. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  180. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  181. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  182. package/dist/__tests__/profiles.test.js +597 -3
  183. package/dist/__tests__/profiles.test.js.map +1 -1
  184. package/dist/__tests__/prompts.test.js +18 -1
  185. package/dist/__tests__/prompts.test.js.map +1 -1
  186. package/dist/__tests__/proof-run.test.d.ts +2 -0
  187. package/dist/__tests__/proof-run.test.d.ts.map +1 -0
  188. package/dist/__tests__/proof-run.test.js +255 -0
  189. package/dist/__tests__/proof-run.test.js.map +1 -0
  190. package/dist/__tests__/rate-limit-resilience.test.d.ts +7 -0
  191. package/dist/__tests__/rate-limit-resilience.test.d.ts.map +1 -0
  192. package/dist/__tests__/rate-limit-resilience.test.js +209 -0
  193. package/dist/__tests__/rate-limit-resilience.test.js.map +1 -0
  194. package/dist/__tests__/read-target-notice.test.d.ts +2 -0
  195. package/dist/__tests__/read-target-notice.test.d.ts.map +1 -0
  196. package/dist/__tests__/read-target-notice.test.js +129 -0
  197. package/dist/__tests__/read-target-notice.test.js.map +1 -0
  198. package/dist/__tests__/relate.test.js +246 -14
  199. package/dist/__tests__/relate.test.js.map +1 -1
  200. package/dist/__tests__/reply-commands-registered.test.d.ts +2 -0
  201. package/dist/__tests__/reply-commands-registered.test.d.ts.map +1 -0
  202. package/dist/__tests__/reply-commands-registered.test.js +81 -0
  203. package/dist/__tests__/reply-commands-registered.test.js.map +1 -0
  204. package/dist/__tests__/repo-detect.test.js +18 -38
  205. package/dist/__tests__/repo-detect.test.js.map +1 -1
  206. package/dist/__tests__/reportedProfile.test.d.ts +2 -0
  207. package/dist/__tests__/reportedProfile.test.d.ts.map +1 -0
  208. package/dist/__tests__/reportedProfile.test.js +328 -0
  209. package/dist/__tests__/reportedProfile.test.js.map +1 -0
  210. package/dist/__tests__/restore.test.d.ts +2 -0
  211. package/dist/__tests__/restore.test.d.ts.map +1 -0
  212. package/dist/__tests__/restore.test.js +85 -0
  213. package/dist/__tests__/restore.test.js.map +1 -0
  214. package/dist/__tests__/route-latency-budget.test.d.ts +2 -0
  215. package/dist/__tests__/route-latency-budget.test.d.ts.map +1 -0
  216. package/dist/__tests__/route-latency-budget.test.js +106 -0
  217. package/dist/__tests__/route-latency-budget.test.js.map +1 -0
  218. package/dist/__tests__/runner.test.js +59 -44
  219. package/dist/__tests__/runner.test.js.map +1 -1
  220. package/dist/__tests__/session-binding-refusal-tenant.test.d.ts +2 -0
  221. package/dist/__tests__/session-binding-refusal-tenant.test.d.ts.map +1 -0
  222. package/dist/__tests__/session-binding-refusal-tenant.test.js +112 -0
  223. package/dist/__tests__/session-binding-refusal-tenant.test.js.map +1 -0
  224. package/dist/__tests__/session-close-loop.test.d.ts +2 -0
  225. package/dist/__tests__/session-close-loop.test.d.ts.map +1 -0
  226. package/dist/__tests__/session-close-loop.test.js +213 -0
  227. package/dist/__tests__/session-close-loop.test.js.map +1 -0
  228. package/dist/__tests__/session-label.test.d.ts +2 -0
  229. package/dist/__tests__/session-label.test.d.ts.map +1 -0
  230. package/dist/__tests__/session-label.test.js +46 -0
  231. package/dist/__tests__/session-label.test.js.map +1 -0
  232. package/dist/__tests__/session-list-show.test.d.ts +2 -0
  233. package/dist/__tests__/session-list-show.test.d.ts.map +1 -0
  234. package/dist/__tests__/session-list-show.test.js +173 -0
  235. package/dist/__tests__/session-list-show.test.js.map +1 -0
  236. package/dist/__tests__/session-pinned-role.test.d.ts +2 -0
  237. package/dist/__tests__/session-pinned-role.test.d.ts.map +1 -0
  238. package/dist/__tests__/session-pinned-role.test.js +257 -0
  239. package/dist/__tests__/session-pinned-role.test.js.map +1 -0
  240. package/dist/__tests__/session-reset.test.d.ts +2 -0
  241. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  242. package/dist/__tests__/session-reset.test.js +138 -0
  243. package/dist/__tests__/session-reset.test.js.map +1 -0
  244. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  245. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  246. package/dist/__tests__/session-resume-backstop.test.js +139 -0
  247. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  248. package/dist/__tests__/session-role-name-sanitize.test.d.ts +2 -0
  249. package/dist/__tests__/session-role-name-sanitize.test.d.ts.map +1 -0
  250. package/dist/__tests__/session-role-name-sanitize.test.js +129 -0
  251. package/dist/__tests__/session-role-name-sanitize.test.js.map +1 -0
  252. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  253. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  254. package/dist/__tests__/session-start-key-refresh.test.js +197 -0
  255. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  256. package/dist/__tests__/session-state-machine.test.js +235 -10
  257. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  258. package/dist/__tests__/session-switch.test.d.ts +2 -0
  259. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  260. package/dist/__tests__/session-switch.test.js +343 -0
  261. package/dist/__tests__/session-switch.test.js.map +1 -0
  262. package/dist/__tests__/session-touch.test.js +6 -1
  263. package/dist/__tests__/session-touch.test.js.map +1 -1
  264. package/dist/__tests__/sessionBinding.test.d.ts +2 -0
  265. package/dist/__tests__/sessionBinding.test.d.ts.map +1 -0
  266. package/dist/__tests__/sessionBinding.test.js +118 -0
  267. package/dist/__tests__/sessionBinding.test.js.map +1 -0
  268. package/dist/__tests__/sessionByIdLookup.test.d.ts +2 -0
  269. package/dist/__tests__/sessionByIdLookup.test.d.ts.map +1 -0
  270. package/dist/__tests__/sessionByIdLookup.test.js +63 -0
  271. package/dist/__tests__/sessionByIdLookup.test.js.map +1 -0
  272. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  273. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  274. package/dist/__tests__/skill-vocabulary.test.js +192 -0
  275. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  276. package/dist/__tests__/state.test.js +21 -1
  277. package/dist/__tests__/state.test.js.map +1 -1
  278. package/dist/__tests__/stillTrue.test.d.ts +2 -0
  279. package/dist/__tests__/stillTrue.test.d.ts.map +1 -0
  280. package/dist/__tests__/stillTrue.test.js +52 -0
  281. package/dist/__tests__/stillTrue.test.js.map +1 -0
  282. package/dist/__tests__/strip.test.js +57 -3
  283. package/dist/__tests__/strip.test.js.map +1 -1
  284. package/dist/__tests__/tenant-notice-write-path.test.d.ts +2 -0
  285. package/dist/__tests__/tenant-notice-write-path.test.d.ts.map +1 -0
  286. package/dist/__tests__/tenant-notice-write-path.test.js +169 -0
  287. package/dist/__tests__/tenant-notice-write-path.test.js.map +1 -0
  288. package/dist/__tests__/update-check.test.d.ts +2 -0
  289. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  290. package/dist/__tests__/update-check.test.js +215 -0
  291. package/dist/__tests__/update-check.test.js.map +1 -0
  292. package/dist/__tests__/update.test.js +458 -8
  293. package/dist/__tests__/update.test.js.map +1 -1
  294. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  295. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  296. package/dist/__tests__/upgrade-runner.test.js +54 -0
  297. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  298. package/dist/__tests__/upgrade.test.d.ts +2 -0
  299. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  300. package/dist/__tests__/upgrade.test.js +56 -0
  301. package/dist/__tests__/upgrade.test.js.map +1 -0
  302. package/dist/__tests__/verify-formatter.test.d.ts +2 -0
  303. package/dist/__tests__/verify-formatter.test.d.ts.map +1 -0
  304. package/dist/__tests__/verify-formatter.test.js +85 -0
  305. package/dist/__tests__/verify-formatter.test.js.map +1 -0
  306. package/dist/__tests__/vocabulary-leak.test.d.ts +33 -0
  307. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  308. package/dist/__tests__/vocabulary-leak.test.js +427 -0
  309. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  310. package/dist/__tests__/workspace.test.js +28 -69
  311. package/dist/__tests__/workspace.test.js.map +1 -1
  312. package/dist/__tests__/workspaceNotice.test.d.ts +2 -0
  313. package/dist/__tests__/workspaceNotice.test.d.ts.map +1 -0
  314. package/dist/__tests__/workspaceNotice.test.js +571 -0
  315. package/dist/__tests__/workspaceNotice.test.js.map +1 -0
  316. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  317. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  318. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  319. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  320. package/dist/commands/__tests__/quality.test.d.ts +2 -0
  321. package/dist/commands/__tests__/quality.test.d.ts.map +1 -0
  322. package/dist/commands/__tests__/quality.test.js +156 -0
  323. package/dist/commands/__tests__/quality.test.js.map +1 -0
  324. package/dist/commands/__tests__/rework.test.d.ts +2 -0
  325. package/dist/commands/__tests__/rework.test.d.ts.map +1 -0
  326. package/dist/commands/__tests__/rework.test.js +149 -0
  327. package/dist/commands/__tests__/rework.test.js.map +1 -0
  328. package/dist/commands/__tests__/tensionsList.test.d.ts +2 -0
  329. package/dist/commands/__tests__/tensionsList.test.d.ts.map +1 -0
  330. package/dist/commands/__tests__/tensionsList.test.js +63 -0
  331. package/dist/commands/__tests__/tensionsList.test.js.map +1 -0
  332. package/dist/commands/accept-policy.d.ts +10 -0
  333. package/dist/commands/accept-policy.d.ts.map +1 -0
  334. package/dist/commands/accept-policy.js +107 -0
  335. package/dist/commands/accept-policy.js.map +1 -0
  336. package/dist/commands/admin/cockpit.d.ts +2 -13
  337. package/dist/commands/admin/cockpit.d.ts.map +1 -1
  338. package/dist/commands/admin/cockpit.js +5 -5
  339. package/dist/commands/admin/cockpit.js.map +1 -1
  340. package/dist/commands/admin/index.d.ts +49 -0
  341. package/dist/commands/admin/index.d.ts.map +1 -1
  342. package/dist/commands/admin/index.js +148 -29
  343. package/dist/commands/admin/index.js.map +1 -1
  344. package/dist/commands/admin/index.test.d.ts +2 -0
  345. package/dist/commands/admin/index.test.d.ts.map +1 -0
  346. package/dist/commands/admin/index.test.js +94 -0
  347. package/dist/commands/admin/index.test.js.map +1 -0
  348. package/dist/commands/admin/inspect.d.ts.map +1 -1
  349. package/dist/commands/admin/inspect.js +2 -7
  350. package/dist/commands/admin/inspect.js.map +1 -1
  351. package/dist/commands/admin/probe.d.ts +75 -0
  352. package/dist/commands/admin/probe.d.ts.map +1 -0
  353. package/dist/commands/admin/probe.js +224 -0
  354. package/dist/commands/admin/probe.js.map +1 -0
  355. package/dist/commands/admin/probe.test.d.ts +2 -0
  356. package/dist/commands/admin/probe.test.d.ts.map +1 -0
  357. package/dist/commands/admin/probe.test.js +193 -0
  358. package/dist/commands/admin/probe.test.js.map +1 -0
  359. package/dist/commands/admin/run.d.ts +43 -0
  360. package/dist/commands/admin/run.d.ts.map +1 -0
  361. package/dist/commands/admin/run.js +78 -0
  362. package/dist/commands/admin/run.js.map +1 -0
  363. package/dist/commands/admin/run.test.d.ts +18 -0
  364. package/dist/commands/admin/run.test.d.ts.map +1 -0
  365. package/dist/commands/admin/run.test.js +168 -0
  366. package/dist/commands/admin/run.test.js.map +1 -0
  367. package/dist/commands/admin/seed.d.ts +32 -3
  368. package/dist/commands/admin/seed.d.ts.map +1 -1
  369. package/dist/commands/admin/seed.js +303 -130
  370. package/dist/commands/admin/seed.js.map +1 -1
  371. package/dist/commands/admin/seed.test.d.ts +4 -0
  372. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  373. package/dist/commands/admin/seed.test.js +27 -12
  374. package/dist/commands/admin/seed.test.js.map +1 -1
  375. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  376. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  377. package/dist/commands/admin/seedRegistryEntries.generated.js +36 -0
  378. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  379. package/dist/commands/admin/seedRegistryEntries.test.d.ts +13 -0
  380. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  381. package/dist/commands/admin/seedRegistryEntries.test.js +101 -0
  382. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  383. package/dist/commands/admin/seedRowType.d.ts +22 -0
  384. package/dist/commands/admin/seedRowType.d.ts.map +1 -0
  385. package/dist/commands/admin/seedRowType.js +2 -0
  386. package/dist/commands/admin/seedRowType.js.map +1 -0
  387. package/dist/commands/admin/seedStatusColor.d.ts +9 -0
  388. package/dist/commands/admin/seedStatusColor.d.ts.map +1 -0
  389. package/dist/commands/admin/seedStatusColor.js +19 -0
  390. package/dist/commands/admin/seedStatusColor.js.map +1 -0
  391. package/dist/commands/admin/seedStatusColor.test.d.ts +2 -0
  392. package/dist/commands/admin/seedStatusColor.test.d.ts.map +1 -0
  393. package/dist/commands/admin/seedStatusColor.test.js +31 -0
  394. package/dist/commands/admin/seedStatusColor.test.js.map +1 -0
  395. package/dist/commands/brief.d.ts.map +1 -1
  396. package/dist/commands/brief.js +24 -2
  397. package/dist/commands/brief.js.map +1 -1
  398. package/dist/commands/capture.d.ts +17 -9
  399. package/dist/commands/capture.d.ts.map +1 -1
  400. package/dist/commands/capture.js +174 -228
  401. package/dist/commands/capture.js.map +1 -1
  402. package/dist/commands/chain-walk.d.ts.map +1 -1
  403. package/dist/commands/chain-walk.js.map +1 -1
  404. package/dist/commands/changes.d.ts.map +1 -1
  405. package/dist/commands/changes.js.map +1 -1
  406. package/dist/commands/codex-prep.d.ts +12 -1
  407. package/dist/commands/codex-prep.d.ts.map +1 -1
  408. package/dist/commands/codex-prep.js +18 -84
  409. package/dist/commands/codex-prep.js.map +1 -1
  410. package/dist/commands/collections.d.ts +1 -1
  411. package/dist/commands/collections.d.ts.map +1 -1
  412. package/dist/commands/collections.js +1 -1
  413. package/dist/commands/collections.js.map +1 -1
  414. package/dist/commands/conflicts.d.ts +35 -0
  415. package/dist/commands/conflicts.d.ts.map +1 -0
  416. package/dist/commands/conflicts.js +194 -0
  417. package/dist/commands/conflicts.js.map +1 -0
  418. package/dist/commands/conflicts.test.d.ts +2 -0
  419. package/dist/commands/conflicts.test.d.ts.map +1 -0
  420. package/dist/commands/conflicts.test.js +179 -0
  421. package/dist/commands/conflicts.test.js.map +1 -0
  422. package/dist/commands/connect-config.test.d.ts +2 -0
  423. package/dist/commands/connect-config.test.d.ts.map +1 -0
  424. package/dist/commands/connect-config.test.js +52 -0
  425. package/dist/commands/connect-config.test.js.map +1 -0
  426. package/dist/commands/connect-context.d.ts +55 -0
  427. package/dist/commands/connect-context.d.ts.map +1 -0
  428. package/dist/commands/connect-context.js +78 -0
  429. package/dist/commands/connect-context.js.map +1 -0
  430. package/dist/commands/connect-context.test.d.ts +2 -0
  431. package/dist/commands/connect-context.test.d.ts.map +1 -0
  432. package/dist/commands/connect-context.test.js +148 -0
  433. package/dist/commands/connect-context.test.js.map +1 -0
  434. package/dist/commands/connect-decline.test.d.ts +2 -0
  435. package/dist/commands/connect-decline.test.d.ts.map +1 -0
  436. package/dist/commands/connect-decline.test.js +70 -0
  437. package/dist/commands/connect-decline.test.js.map +1 -0
  438. package/dist/commands/connect-handoff.d.ts +51 -0
  439. package/dist/commands/connect-handoff.d.ts.map +1 -0
  440. package/dist/commands/connect-handoff.js +70 -0
  441. package/dist/commands/connect-handoff.js.map +1 -0
  442. package/dist/commands/connect-integration.test.js +37 -19
  443. package/dist/commands/connect-integration.test.js.map +1 -1
  444. package/dist/commands/connect-legacy-migration.test.d.ts +2 -0
  445. package/dist/commands/connect-legacy-migration.test.d.ts.map +1 -0
  446. package/dist/commands/connect-legacy-migration.test.js +109 -0
  447. package/dist/commands/connect-legacy-migration.test.js.map +1 -0
  448. package/dist/commands/connect-redeem-failure.test.d.ts +2 -0
  449. package/dist/commands/connect-redeem-failure.test.d.ts.map +1 -0
  450. package/dist/commands/connect-redeem-failure.test.js +134 -0
  451. package/dist/commands/connect-redeem-failure.test.js.map +1 -0
  452. package/dist/commands/connect-screens.d.ts +17 -4
  453. package/dist/commands/connect-screens.d.ts.map +1 -1
  454. package/dist/commands/connect-screens.js +83 -19
  455. package/dist/commands/connect-screens.js.map +1 -1
  456. package/dist/commands/connect-seal.test.d.ts +2 -0
  457. package/dist/commands/connect-seal.test.d.ts.map +1 -0
  458. package/dist/commands/connect-seal.test.js +55 -0
  459. package/dist/commands/connect-seal.test.js.map +1 -0
  460. package/dist/commands/connect.d.ts +22 -6
  461. package/dist/commands/connect.d.ts.map +1 -1
  462. package/dist/commands/connect.js +249 -107
  463. package/dist/commands/connect.js.map +1 -1
  464. package/dist/commands/connect.test.js +226 -23
  465. package/dist/commands/connect.test.js.map +1 -1
  466. package/dist/commands/constellation.d.ts.map +1 -1
  467. package/dist/commands/constellation.js.map +1 -1
  468. package/dist/commands/context.d.ts.map +1 -1
  469. package/dist/commands/context.js.map +1 -1
  470. package/dist/commands/cross-cut.d.ts.map +1 -1
  471. package/dist/commands/cross-cut.js.map +1 -1
  472. package/dist/commands/digest.d.ts +17 -0
  473. package/dist/commands/digest.d.ts.map +1 -0
  474. package/dist/commands/digest.js +58 -0
  475. package/dist/commands/digest.js.map +1 -0
  476. package/dist/commands/digest.test.d.ts +2 -0
  477. package/dist/commands/digest.test.d.ts.map +1 -0
  478. package/dist/commands/digest.test.js +36 -0
  479. package/dist/commands/digest.test.js.map +1 -0
  480. package/dist/commands/direction.d.ts +10 -0
  481. package/dist/commands/direction.d.ts.map +1 -0
  482. package/dist/commands/direction.js +79 -0
  483. package/dist/commands/direction.js.map +1 -0
  484. package/dist/commands/doctor.d.ts.map +1 -1
  485. package/dist/commands/doctor.js +173 -38
  486. package/dist/commands/doctor.js.map +1 -1
  487. package/dist/commands/doctor.test.js +352 -6
  488. package/dist/commands/doctor.test.js.map +1 -1
  489. package/dist/commands/entryAccept.d.ts +26 -0
  490. package/dist/commands/entryAccept.d.ts.map +1 -0
  491. package/dist/commands/entryAccept.js +308 -0
  492. package/dist/commands/entryAccept.js.map +1 -0
  493. package/dist/commands/entryDiscardResolve.d.ts +9 -0
  494. package/dist/commands/entryDiscardResolve.d.ts.map +1 -0
  495. package/dist/commands/entryDiscardResolve.js +27 -0
  496. package/dist/commands/entryDiscardResolve.js.map +1 -0
  497. package/dist/commands/entryOwn.d.ts +5 -0
  498. package/dist/commands/entryOwn.d.ts.map +1 -0
  499. package/dist/commands/entryOwn.js +17 -0
  500. package/dist/commands/entryOwn.js.map +1 -0
  501. package/dist/commands/entryPreflight.d.ts +8 -0
  502. package/dist/commands/entryPreflight.d.ts.map +1 -0
  503. package/dist/commands/entryPreflight.js +48 -0
  504. package/dist/commands/entryPreflight.js.map +1 -0
  505. package/dist/commands/entryTick.d.ts +8 -0
  506. package/dist/commands/entryTick.d.ts.map +1 -0
  507. package/dist/commands/entryTick.js +43 -0
  508. package/dist/commands/entryTick.js.map +1 -0
  509. package/dist/commands/feedback.d.ts +36 -0
  510. package/dist/commands/feedback.d.ts.map +1 -0
  511. package/dist/commands/feedback.js +174 -0
  512. package/dist/commands/feedback.js.map +1 -0
  513. package/dist/commands/feedback.test.d.ts +2 -0
  514. package/dist/commands/feedback.test.d.ts.map +1 -0
  515. package/dist/commands/feedback.test.js +110 -0
  516. package/dist/commands/feedback.test.js.map +1 -0
  517. package/dist/commands/fields.d.ts.map +1 -1
  518. package/dist/commands/fields.js +1 -1
  519. package/dist/commands/fields.js.map +1 -1
  520. package/dist/commands/files.d.ts +26 -0
  521. package/dist/commands/files.d.ts.map +1 -0
  522. package/dist/commands/files.js +160 -0
  523. package/dist/commands/files.js.map +1 -0
  524. package/dist/commands/files.test.d.ts +2 -0
  525. package/dist/commands/files.test.d.ts.map +1 -0
  526. package/dist/commands/files.test.js +278 -0
  527. package/dist/commands/files.test.js.map +1 -0
  528. package/dist/commands/handshake.d.ts +57 -9
  529. package/dist/commands/handshake.d.ts.map +1 -1
  530. package/dist/commands/handshake.js +757 -336
  531. package/dist/commands/handshake.js.map +1 -1
  532. package/dist/commands/handshakeCursorSkillCleanup.d.ts +36 -0
  533. package/dist/commands/handshakeCursorSkillCleanup.d.ts.map +1 -0
  534. package/dist/commands/handshakeCursorSkillCleanup.js +110 -0
  535. package/dist/commands/handshakeCursorSkillCleanup.js.map +1 -0
  536. package/dist/commands/handshakeDriftClassification.d.ts +33 -0
  537. package/dist/commands/handshakeDriftClassification.d.ts.map +1 -0
  538. package/dist/commands/handshakeDriftClassification.js +62 -0
  539. package/dist/commands/handshakeDriftClassification.js.map +1 -0
  540. package/dist/commands/history.d.ts +30 -0
  541. package/dist/commands/history.d.ts.map +1 -0
  542. package/dist/commands/history.js +62 -0
  543. package/dist/commands/history.js.map +1 -0
  544. package/dist/commands/history.test.d.ts +2 -0
  545. package/dist/commands/history.test.d.ts.map +1 -0
  546. package/dist/commands/history.test.js +106 -0
  547. package/dist/commands/history.test.js.map +1 -0
  548. package/dist/commands/ingest.d.ts.map +1 -1
  549. package/dist/commands/ingest.js +9 -0
  550. package/dist/commands/ingest.js.map +1 -1
  551. package/dist/commands/init.d.ts +1 -1
  552. package/dist/commands/init.d.ts.map +1 -1
  553. package/dist/commands/init.js +22 -13
  554. package/dist/commands/init.js.map +1 -1
  555. package/dist/commands/login.d.ts.map +1 -1
  556. package/dist/commands/login.js +15 -11
  557. package/dist/commands/login.js.map +1 -1
  558. package/dist/commands/organisation.d.ts +12 -0
  559. package/dist/commands/organisation.d.ts.map +1 -0
  560. package/dist/commands/organisation.js +147 -0
  561. package/dist/commands/organisation.js.map +1 -0
  562. package/dist/commands/organisation.test.d.ts +2 -0
  563. package/dist/commands/organisation.test.d.ts.map +1 -0
  564. package/dist/commands/organisation.test.js +116 -0
  565. package/dist/commands/organisation.test.js.map +1 -0
  566. package/dist/commands/organisationHierarchy.d.ts +8 -0
  567. package/dist/commands/organisationHierarchy.d.ts.map +1 -0
  568. package/dist/commands/organisationHierarchy.js +75 -0
  569. package/dist/commands/organisationHierarchy.js.map +1 -0
  570. package/dist/commands/organisationHierarchy.test.d.ts +2 -0
  571. package/dist/commands/organisationHierarchy.test.d.ts.map +1 -0
  572. package/dist/commands/organisationHierarchy.test.js +72 -0
  573. package/dist/commands/organisationHierarchy.test.js.map +1 -0
  574. package/dist/commands/organisationWrite.d.ts +18 -0
  575. package/dist/commands/organisationWrite.d.ts.map +1 -0
  576. package/dist/commands/organisationWrite.js +71 -0
  577. package/dist/commands/organisationWrite.js.map +1 -0
  578. package/dist/commands/orient.d.ts +81 -67
  579. package/dist/commands/orient.d.ts.map +1 -1
  580. package/dist/commands/orient.js +226 -18
  581. package/dist/commands/orient.js.map +1 -1
  582. package/dist/commands/outcome.d.ts +91 -0
  583. package/dist/commands/outcome.d.ts.map +1 -0
  584. package/dist/commands/outcome.js +204 -0
  585. package/dist/commands/outcome.js.map +1 -0
  586. package/dist/commands/outcome.test.d.ts +2 -0
  587. package/dist/commands/outcome.test.d.ts.map +1 -0
  588. package/dist/commands/outcome.test.js +308 -0
  589. package/dist/commands/outcome.test.js.map +1 -0
  590. package/dist/commands/people.d.ts +6 -0
  591. package/dist/commands/people.d.ts.map +1 -0
  592. package/dist/commands/people.js +22 -0
  593. package/dist/commands/people.js.map +1 -0
  594. package/dist/commands/people.test.d.ts +2 -0
  595. package/dist/commands/people.test.d.ts.map +1 -0
  596. package/dist/commands/people.test.js +61 -0
  597. package/dist/commands/people.test.js.map +1 -0
  598. package/dist/commands/profile.d.ts +24 -16
  599. package/dist/commands/profile.d.ts.map +1 -1
  600. package/dist/commands/profile.js +272 -98
  601. package/dist/commands/profile.js.map +1 -1
  602. package/dist/commands/proof-run.d.ts +51 -0
  603. package/dist/commands/proof-run.d.ts.map +1 -0
  604. package/dist/commands/proof-run.js +209 -0
  605. package/dist/commands/proof-run.js.map +1 -0
  606. package/dist/commands/quality.d.ts +16 -0
  607. package/dist/commands/quality.d.ts.map +1 -0
  608. package/dist/commands/quality.js +29 -0
  609. package/dist/commands/quality.js.map +1 -0
  610. package/dist/commands/questions.d.ts +23 -0
  611. package/dist/commands/questions.d.ts.map +1 -0
  612. package/dist/commands/questions.js +238 -0
  613. package/dist/commands/questions.js.map +1 -0
  614. package/dist/commands/questions.test.d.ts +2 -0
  615. package/dist/commands/questions.test.d.ts.map +1 -0
  616. package/dist/commands/questions.test.js +159 -0
  617. package/dist/commands/questions.test.js.map +1 -0
  618. package/dist/commands/relate.d.ts +1 -0
  619. package/dist/commands/relate.d.ts.map +1 -1
  620. package/dist/commands/relate.js +89 -15
  621. package/dist/commands/relate.js.map +1 -1
  622. package/dist/commands/restore.d.ts +2 -0
  623. package/dist/commands/restore.d.ts.map +1 -0
  624. package/dist/commands/restore.js +83 -0
  625. package/dist/commands/restore.js.map +1 -0
  626. package/dist/commands/rework.d.ts +24 -0
  627. package/dist/commands/rework.d.ts.map +1 -0
  628. package/dist/commands/rework.js +97 -0
  629. package/dist/commands/rework.js.map +1 -0
  630. package/dist/commands/role.d.ts +67 -0
  631. package/dist/commands/role.d.ts.map +1 -0
  632. package/dist/commands/role.js +164 -0
  633. package/dist/commands/role.js.map +1 -0
  634. package/dist/commands/role.test.d.ts +2 -0
  635. package/dist/commands/role.test.d.ts.map +1 -0
  636. package/dist/commands/role.test.js +290 -0
  637. package/dist/commands/role.test.js.map +1 -0
  638. package/dist/commands/scoreboard.d.ts +26 -0
  639. package/dist/commands/scoreboard.d.ts.map +1 -0
  640. package/dist/commands/scoreboard.js +40 -0
  641. package/dist/commands/scoreboard.js.map +1 -0
  642. package/dist/commands/search.d.ts +3 -0
  643. package/dist/commands/search.d.ts.map +1 -1
  644. package/dist/commands/search.js +7 -1
  645. package/dist/commands/search.js.map +1 -1
  646. package/dist/commands/session.d.ts +60 -7
  647. package/dist/commands/session.d.ts.map +1 -1
  648. package/dist/commands/session.js +417 -69
  649. package/dist/commands/session.js.map +1 -1
  650. package/dist/commands/shape.d.ts +16 -0
  651. package/dist/commands/shape.d.ts.map +1 -0
  652. package/dist/commands/shape.js +149 -0
  653. package/dist/commands/shape.js.map +1 -0
  654. package/dist/commands/shape.test.d.ts +2 -0
  655. package/dist/commands/shape.test.d.ts.map +1 -0
  656. package/dist/commands/shape.test.js +148 -0
  657. package/dist/commands/shape.test.js.map +1 -0
  658. package/dist/commands/status.d.ts +7 -0
  659. package/dist/commands/status.d.ts.map +1 -0
  660. package/dist/commands/status.js +102 -0
  661. package/dist/commands/status.js.map +1 -0
  662. package/dist/commands/status.test.d.ts +2 -0
  663. package/dist/commands/status.test.d.ts.map +1 -0
  664. package/dist/commands/status.test.js +75 -0
  665. package/dist/commands/status.test.js.map +1 -0
  666. package/dist/commands/stillTrue.d.ts +14 -0
  667. package/dist/commands/stillTrue.d.ts.map +1 -0
  668. package/dist/commands/stillTrue.js +48 -0
  669. package/dist/commands/stillTrue.js.map +1 -0
  670. package/dist/commands/tensionsList.d.ts +5 -0
  671. package/dist/commands/tensionsList.d.ts.map +1 -0
  672. package/dist/commands/tensionsList.js +27 -0
  673. package/dist/commands/tensionsList.js.map +1 -0
  674. package/dist/commands/update.d.ts +21 -0
  675. package/dist/commands/update.d.ts.map +1 -1
  676. package/dist/commands/update.js +157 -42
  677. package/dist/commands/update.js.map +1 -1
  678. package/dist/commands/upgrade.d.ts +5 -0
  679. package/dist/commands/upgrade.d.ts.map +1 -0
  680. package/dist/commands/upgrade.js +110 -0
  681. package/dist/commands/upgrade.js.map +1 -0
  682. package/dist/commands/usage.d.ts.map +1 -1
  683. package/dist/commands/usage.js +0 -18
  684. package/dist/commands/usage.js.map +1 -1
  685. package/dist/commands/verify.d.ts.map +1 -1
  686. package/dist/commands/verify.js +7 -1
  687. package/dist/commands/verify.js.map +1 -1
  688. package/dist/commands/welcome.d.ts.map +1 -1
  689. package/dist/commands/welcome.js +5 -2
  690. package/dist/commands/welcome.js.map +1 -1
  691. package/dist/commands/whoami.d.ts +20 -0
  692. package/dist/commands/whoami.d.ts.map +1 -0
  693. package/dist/commands/whoami.js +126 -0
  694. package/dist/commands/whoami.js.map +1 -0
  695. package/dist/commands/whoami.test.d.ts +2 -0
  696. package/dist/commands/whoami.test.d.ts.map +1 -0
  697. package/dist/commands/whoami.test.js +130 -0
  698. package/dist/commands/whoami.test.js.map +1 -0
  699. package/dist/commands/workspace.d.ts +19 -65
  700. package/dist/commands/workspace.d.ts.map +1 -1
  701. package/dist/commands/workspace.js +11 -72
  702. package/dist/commands/workspace.js.map +1 -1
  703. package/dist/formatters/__tests__/orient-plannedWorkCut.test.d.ts +2 -0
  704. package/dist/formatters/__tests__/orient-plannedWorkCut.test.d.ts.map +1 -0
  705. package/dist/formatters/__tests__/orient-plannedWorkCut.test.js +49 -0
  706. package/dist/formatters/__tests__/orient-plannedWorkCut.test.js.map +1 -0
  707. package/dist/formatters/__tests__/orient-provenance.test.d.ts +6 -0
  708. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  709. package/dist/formatters/__tests__/orient-provenance.test.js +319 -0
  710. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  711. package/dist/formatters/__tests__/orient-ruleLists.test.d.ts +2 -0
  712. package/dist/formatters/__tests__/orient-ruleLists.test.d.ts.map +1 -0
  713. package/dist/formatters/__tests__/orient-ruleLists.test.js +93 -0
  714. package/dist/formatters/__tests__/orient-ruleLists.test.js.map +1 -0
  715. package/dist/formatters/__tests__/session-list-show.test.d.ts +2 -0
  716. package/dist/formatters/__tests__/session-list-show.test.d.ts.map +1 -0
  717. package/dist/formatters/__tests__/session-list-show.test.js +195 -0
  718. package/dist/formatters/__tests__/session-list-show.test.js.map +1 -0
  719. package/dist/formatters/__tests__/session.test.d.ts +2 -0
  720. package/dist/formatters/__tests__/session.test.d.ts.map +1 -0
  721. package/dist/formatters/__tests__/session.test.js +193 -0
  722. package/dist/formatters/__tests__/session.test.js.map +1 -0
  723. package/dist/formatters/__tests__/tensionsList.test.d.ts +2 -0
  724. package/dist/formatters/__tests__/tensionsList.test.d.ts.map +1 -0
  725. package/dist/formatters/__tests__/tensionsList.test.js +30 -0
  726. package/dist/formatters/__tests__/tensionsList.test.js.map +1 -0
  727. package/dist/formatters/brief.d.ts +6 -15
  728. package/dist/formatters/brief.d.ts.map +1 -1
  729. package/dist/formatters/brief.js +16 -14
  730. package/dist/formatters/brief.js.map +1 -1
  731. package/dist/formatters/brief.test.d.ts +2 -0
  732. package/dist/formatters/brief.test.d.ts.map +1 -0
  733. package/dist/formatters/brief.test.js +21 -0
  734. package/dist/formatters/brief.test.js.map +1 -0
  735. package/dist/formatters/capture.d.ts +17 -10
  736. package/dist/formatters/capture.d.ts.map +1 -1
  737. package/dist/formatters/capture.js +33 -10
  738. package/dist/formatters/capture.js.map +1 -1
  739. package/dist/formatters/coaching.d.ts +53 -0
  740. package/dist/formatters/coaching.d.ts.map +1 -0
  741. package/dist/formatters/coaching.js +51 -0
  742. package/dist/formatters/coaching.js.map +1 -0
  743. package/dist/formatters/collections.d.ts +0 -1
  744. package/dist/formatters/collections.d.ts.map +1 -1
  745. package/dist/formatters/collections.js +14 -5
  746. package/dist/formatters/collections.js.map +1 -1
  747. package/dist/formatters/conflicts.d.ts +69 -0
  748. package/dist/formatters/conflicts.d.ts.map +1 -0
  749. package/dist/formatters/conflicts.js +87 -0
  750. package/dist/formatters/conflicts.js.map +1 -0
  751. package/dist/formatters/conflicts.test.d.ts +2 -0
  752. package/dist/formatters/conflicts.test.d.ts.map +1 -0
  753. package/dist/formatters/conflicts.test.js +136 -0
  754. package/dist/formatters/conflicts.test.js.map +1 -0
  755. package/dist/formatters/context.d.ts +1 -1
  756. package/dist/formatters/context.d.ts.map +1 -1
  757. package/dist/formatters/context.js.map +1 -1
  758. package/dist/formatters/digest.d.ts +13 -0
  759. package/dist/formatters/digest.d.ts.map +1 -0
  760. package/dist/formatters/digest.js +98 -0
  761. package/dist/formatters/digest.js.map +1 -0
  762. package/dist/formatters/digest.test.d.ts +2 -0
  763. package/dist/formatters/digest.test.d.ts.map +1 -0
  764. package/dist/formatters/digest.test.js +166 -0
  765. package/dist/formatters/digest.test.js.map +1 -0
  766. package/dist/formatters/direction.d.ts +48 -0
  767. package/dist/formatters/direction.d.ts.map +1 -0
  768. package/dist/formatters/direction.js +75 -0
  769. package/dist/formatters/direction.js.map +1 -0
  770. package/dist/formatters/direction.test.d.ts +2 -0
  771. package/dist/formatters/direction.test.d.ts.map +1 -0
  772. package/dist/formatters/direction.test.js +70 -0
  773. package/dist/formatters/direction.test.js.map +1 -0
  774. package/dist/formatters/entry.d.ts +65 -1
  775. package/dist/formatters/entry.d.ts.map +1 -1
  776. package/dist/formatters/entry.js +102 -11
  777. package/dist/formatters/entry.js.map +1 -1
  778. package/dist/formatters/entryAccept.d.ts +77 -0
  779. package/dist/formatters/entryAccept.d.ts.map +1 -0
  780. package/dist/formatters/entryAccept.js +76 -0
  781. package/dist/formatters/entryAccept.js.map +1 -0
  782. package/dist/formatters/feedback.d.ts +58 -0
  783. package/dist/formatters/feedback.d.ts.map +1 -0
  784. package/dist/formatters/feedback.js +91 -0
  785. package/dist/formatters/feedback.js.map +1 -0
  786. package/dist/formatters/feedback.test.d.ts +2 -0
  787. package/dist/formatters/feedback.test.d.ts.map +1 -0
  788. package/dist/formatters/feedback.test.js +123 -0
  789. package/dist/formatters/feedback.test.js.map +1 -0
  790. package/dist/formatters/fields.d.ts +7 -1
  791. package/dist/formatters/fields.d.ts.map +1 -1
  792. package/dist/formatters/fields.js +9 -3
  793. package/dist/formatters/fields.js.map +1 -1
  794. package/dist/formatters/fields.test.d.ts +2 -0
  795. package/dist/formatters/fields.test.d.ts.map +1 -0
  796. package/dist/formatters/fields.test.js +42 -0
  797. package/dist/formatters/fields.test.js.map +1 -0
  798. package/dist/formatters/handshake.d.ts +43 -9
  799. package/dist/formatters/handshake.d.ts.map +1 -1
  800. package/dist/formatters/handshake.js +83 -29
  801. package/dist/formatters/handshake.js.map +1 -1
  802. package/dist/formatters/orient.coherencyCheckTag.test.d.ts +2 -0
  803. package/dist/formatters/orient.coherencyCheckTag.test.d.ts.map +1 -0
  804. package/dist/formatters/orient.coherencyCheckTag.test.js +22 -0
  805. package/dist/formatters/orient.coherencyCheckTag.test.js.map +1 -0
  806. package/dist/formatters/orient.d.ts +136 -97
  807. package/dist/formatters/orient.d.ts.map +1 -1
  808. package/dist/formatters/orient.js +210 -133
  809. package/dist/formatters/orient.js.map +1 -1
  810. package/dist/formatters/orient.rcrtMiss.test.d.ts +2 -0
  811. package/dist/formatters/orient.rcrtMiss.test.d.ts.map +1 -0
  812. package/dist/formatters/orient.rcrtMiss.test.js +77 -0
  813. package/dist/formatters/orient.rcrtMiss.test.js.map +1 -0
  814. package/dist/formatters/orient.rituals.test.d.ts +2 -0
  815. package/dist/formatters/orient.rituals.test.d.ts.map +1 -0
  816. package/dist/formatters/orient.rituals.test.js +73 -0
  817. package/dist/formatters/orient.rituals.test.js.map +1 -0
  818. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts +2 -0
  819. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts.map +1 -0
  820. package/dist/formatters/orient.shapeAdvisorySummary.test.js +59 -0
  821. package/dist/formatters/orient.shapeAdvisorySummary.test.js.map +1 -0
  822. package/dist/formatters/orientDegradation.d.ts +38 -0
  823. package/dist/formatters/orientDegradation.d.ts.map +1 -0
  824. package/dist/formatters/orientDegradation.js +50 -0
  825. package/dist/formatters/orientDegradation.js.map +1 -0
  826. package/dist/formatters/orientDegradation.test.d.ts +2 -0
  827. package/dist/formatters/orientDegradation.test.d.ts.map +1 -0
  828. package/dist/formatters/orientDegradation.test.js +28 -0
  829. package/dist/formatters/orientDegradation.test.js.map +1 -0
  830. package/dist/formatters/orientDirection.d.ts +47 -0
  831. package/dist/formatters/orientDirection.d.ts.map +1 -0
  832. package/dist/formatters/orientDirection.js +23 -0
  833. package/dist/formatters/orientDirection.js.map +1 -0
  834. package/dist/formatters/orientDirection.test.d.ts +2 -0
  835. package/dist/formatters/orientDirection.test.d.ts.map +1 -0
  836. package/dist/formatters/orientDirection.test.js +70 -0
  837. package/dist/formatters/orientDirection.test.js.map +1 -0
  838. package/dist/formatters/orientRetrievalMiss.d.ts +22 -0
  839. package/dist/formatters/orientRetrievalMiss.d.ts.map +1 -0
  840. package/dist/formatters/orientRetrievalMiss.js +17 -0
  841. package/dist/formatters/orientRetrievalMiss.js.map +1 -0
  842. package/dist/formatters/plannedWorkCounts.d.ts +19 -0
  843. package/dist/formatters/plannedWorkCounts.d.ts.map +1 -0
  844. package/dist/formatters/plannedWorkCounts.js +17 -0
  845. package/dist/formatters/plannedWorkCounts.js.map +1 -0
  846. package/dist/formatters/questions.d.ts +72 -0
  847. package/dist/formatters/questions.d.ts.map +1 -0
  848. package/dist/formatters/questions.js +116 -0
  849. package/dist/formatters/questions.js.map +1 -0
  850. package/dist/formatters/questions.test.d.ts +2 -0
  851. package/dist/formatters/questions.test.d.ts.map +1 -0
  852. package/dist/formatters/questions.test.js +144 -0
  853. package/dist/formatters/questions.test.js.map +1 -0
  854. package/dist/formatters/relate.d.ts +13 -2
  855. package/dist/formatters/relate.d.ts.map +1 -1
  856. package/dist/formatters/relate.js +15 -5
  857. package/dist/formatters/relate.js.map +1 -1
  858. package/dist/formatters/relate.test.d.ts +2 -0
  859. package/dist/formatters/relate.test.d.ts.map +1 -0
  860. package/dist/formatters/relate.test.js +91 -0
  861. package/dist/formatters/relate.test.js.map +1 -0
  862. package/dist/formatters/scoreboard.d.ts +11 -0
  863. package/dist/formatters/scoreboard.d.ts.map +1 -0
  864. package/dist/formatters/scoreboard.js +162 -0
  865. package/dist/formatters/scoreboard.js.map +1 -0
  866. package/dist/formatters/scoreboard.test.d.ts +2 -0
  867. package/dist/formatters/scoreboard.test.d.ts.map +1 -0
  868. package/dist/formatters/scoreboard.test.js +301 -0
  869. package/dist/formatters/scoreboard.test.js.map +1 -0
  870. package/dist/formatters/search.d.ts +3 -0
  871. package/dist/formatters/search.d.ts.map +1 -1
  872. package/dist/formatters/search.js +15 -1
  873. package/dist/formatters/search.js.map +1 -1
  874. package/dist/formatters/search.test.d.ts +2 -0
  875. package/dist/formatters/search.test.d.ts.map +1 -0
  876. package/dist/formatters/search.test.js +76 -0
  877. package/dist/formatters/search.test.js.map +1 -0
  878. package/dist/formatters/session-feedback.test.d.ts +2 -0
  879. package/dist/formatters/session-feedback.test.d.ts.map +1 -0
  880. package/dist/formatters/session-feedback.test.js +146 -0
  881. package/dist/formatters/session-feedback.test.js.map +1 -0
  882. package/dist/formatters/session.d.ts +122 -5
  883. package/dist/formatters/session.d.ts.map +1 -1
  884. package/dist/formatters/session.js +312 -21
  885. package/dist/formatters/session.js.map +1 -1
  886. package/dist/formatters/shape.d.ts +54 -0
  887. package/dist/formatters/shape.d.ts.map +1 -0
  888. package/dist/formatters/shape.js +97 -0
  889. package/dist/formatters/shape.js.map +1 -0
  890. package/dist/formatters/shape.test.d.ts +2 -0
  891. package/dist/formatters/shape.test.d.ts.map +1 -0
  892. package/dist/formatters/shape.test.js +80 -0
  893. package/dist/formatters/shape.test.js.map +1 -0
  894. package/dist/formatters/spineCheck.d.ts +14 -0
  895. package/dist/formatters/spineCheck.d.ts.map +1 -0
  896. package/dist/formatters/spineCheck.js +113 -0
  897. package/dist/formatters/spineCheck.js.map +1 -0
  898. package/dist/formatters/spineCheck.test.d.ts +2 -0
  899. package/dist/formatters/spineCheck.test.d.ts.map +1 -0
  900. package/dist/formatters/spineCheck.test.js +76 -0
  901. package/dist/formatters/spineCheck.test.js.map +1 -0
  902. package/dist/formatters/tensionsList.d.ts +17 -0
  903. package/dist/formatters/tensionsList.d.ts.map +1 -0
  904. package/dist/formatters/tensionsList.js +33 -0
  905. package/dist/formatters/tensionsList.js.map +1 -0
  906. package/dist/formatters/update.d.ts +22 -0
  907. package/dist/formatters/update.d.ts.map +1 -1
  908. package/dist/formatters/update.js +36 -7
  909. package/dist/formatters/update.js.map +1 -1
  910. package/dist/formatters/update.test.d.ts +2 -0
  911. package/dist/formatters/update.test.d.ts.map +1 -0
  912. package/dist/formatters/update.test.js +59 -0
  913. package/dist/formatters/update.test.js.map +1 -0
  914. package/dist/formatters/verify.d.ts +12 -4
  915. package/dist/formatters/verify.d.ts.map +1 -1
  916. package/dist/formatters/verify.js +20 -2
  917. package/dist/formatters/verify.js.map +1 -1
  918. package/dist/generated/healthGapKinds.generated.d.ts +12 -0
  919. package/dist/generated/healthGapKinds.generated.d.ts.map +1 -0
  920. package/dist/generated/healthGapKinds.generated.js +16 -0
  921. package/dist/generated/healthGapKinds.generated.js.map +1 -0
  922. package/dist/generated/organisationalAuthorityRefusalCodes.generated.d.ts +12 -0
  923. package/dist/generated/organisationalAuthorityRefusalCodes.generated.d.ts.map +1 -0
  924. package/dist/generated/organisationalAuthorityRefusalCodes.generated.js +11 -0
  925. package/dist/generated/organisationalAuthorityRefusalCodes.generated.js.map +1 -0
  926. package/dist/generated/relationTypes.generated.d.ts +12 -0
  927. package/dist/generated/relationTypes.generated.d.ts.map +1 -0
  928. package/dist/generated/relationTypes.generated.js +11 -0
  929. package/dist/generated/relationTypes.generated.js.map +1 -0
  930. package/dist/generated/routeLatencyBudget.generated.d.ts +56 -0
  931. package/dist/generated/routeLatencyBudget.generated.d.ts.map +1 -0
  932. package/dist/generated/routeLatencyBudget.generated.js +278 -0
  933. package/dist/generated/routeLatencyBudget.generated.js.map +1 -0
  934. package/dist/generated/sourceSurfaces.generated.d.ts +12 -0
  935. package/dist/generated/sourceSurfaces.generated.d.ts.map +1 -0
  936. package/dist/generated/sourceSurfaces.generated.js +11 -0
  937. package/dist/generated/sourceSurfaces.generated.js.map +1 -0
  938. package/dist/generators/adapters.d.ts +39 -6
  939. package/dist/generators/adapters.d.ts.map +1 -1
  940. package/dist/generators/adapters.js +88 -89
  941. package/dist/generators/adapters.js.map +1 -1
  942. package/dist/generators/adapters.test.js +14 -6
  943. package/dist/generators/adapters.test.js.map +1 -1
  944. package/dist/generators/boundary-manifest.real-file.test.d.ts +2 -0
  945. package/dist/generators/boundary-manifest.real-file.test.d.ts.map +1 -0
  946. package/dist/generators/boundary-manifest.real-file.test.js +70 -0
  947. package/dist/generators/boundary-manifest.real-file.test.js.map +1 -0
  948. package/dist/generators/briefing-projections.test.d.ts +2 -0
  949. package/dist/generators/briefing-projections.test.d.ts.map +1 -0
  950. package/dist/generators/briefing-projections.test.js +98 -0
  951. package/dist/generators/briefing-projections.test.js.map +1 -0
  952. package/dist/generators/context-md.d.ts +7 -2
  953. package/dist/generators/context-md.d.ts.map +1 -1
  954. package/dist/generators/context-md.js +18 -57
  955. package/dist/generators/context-md.js.map +1 -1
  956. package/dist/generators/everyone-rules-md.d.ts +9 -0
  957. package/dist/generators/everyone-rules-md.d.ts.map +1 -0
  958. package/dist/generators/everyone-rules-md.js +21 -0
  959. package/dist/generators/everyone-rules-md.js.map +1 -0
  960. package/dist/generators/manifest.d.ts +76 -0
  961. package/dist/generators/manifest.d.ts.map +1 -1
  962. package/dist/generators/manifest.js +125 -14
  963. package/dist/generators/manifest.js.map +1 -1
  964. package/dist/generators/noProjectionAssets.d.ts +15 -0
  965. package/dist/generators/noProjectionAssets.d.ts.map +1 -0
  966. package/dist/generators/noProjectionAssets.js +6 -0
  967. package/dist/generators/noProjectionAssets.js.map +1 -0
  968. package/dist/generators/portable-knowledge.d.ts +15 -38
  969. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  970. package/dist/generators/portable-knowledge.js +13 -144
  971. package/dist/generators/portable-knowledge.js.map +1 -1
  972. package/dist/generators/portable-knowledge.test.js +82 -267
  973. package/dist/generators/portable-knowledge.test.js.map +1 -1
  974. package/dist/generators/region-projections.d.ts +17 -0
  975. package/dist/generators/region-projections.d.ts.map +1 -0
  976. package/dist/generators/region-projections.js +51 -0
  977. package/dist/generators/region-projections.js.map +1 -0
  978. package/dist/generators/region-projections.test.d.ts +2 -0
  979. package/dist/generators/region-projections.test.d.ts.map +1 -0
  980. package/dist/generators/region-projections.test.js +58 -0
  981. package/dist/generators/region-projections.test.js.map +1 -0
  982. package/dist/generators/region.d.ts +24 -0
  983. package/dist/generators/region.d.ts.map +1 -0
  984. package/dist/generators/region.js +87 -0
  985. package/dist/generators/region.js.map +1 -0
  986. package/dist/generators/region.test.d.ts +2 -0
  987. package/dist/generators/region.test.d.ts.map +1 -0
  988. package/dist/generators/region.test.js +126 -0
  989. package/dist/generators/region.test.js.map +1 -0
  990. package/dist/generators/retired-projections.d.ts +12 -0
  991. package/dist/generators/retired-projections.d.ts.map +1 -0
  992. package/dist/generators/retired-projections.js +75 -0
  993. package/dist/generators/retired-projections.js.map +1 -0
  994. package/dist/generators/retired-projections.test.d.ts +2 -0
  995. package/dist/generators/retired-projections.test.d.ts.map +1 -0
  996. package/dist/generators/retired-projections.test.js +64 -0
  997. package/dist/generators/retired-projections.test.js.map +1 -0
  998. package/dist/generators/surface-profiles.d.ts +1 -2
  999. package/dist/generators/surface-profiles.d.ts.map +1 -1
  1000. package/dist/generators/surface-profiles.js.map +1 -1
  1001. package/dist/handleCliError.d.ts +2 -0
  1002. package/dist/handleCliError.d.ts.map +1 -0
  1003. package/dist/handleCliError.js +56 -0
  1004. package/dist/handleCliError.js.map +1 -0
  1005. package/dist/index.d.ts +0 -5
  1006. package/dist/index.d.ts.map +1 -1
  1007. package/dist/index.js +218 -466
  1008. package/dist/index.js.map +1 -1
  1009. package/dist/lib/__tests__/legalRelationTypes.test.d.ts +2 -0
  1010. package/dist/lib/__tests__/legalRelationTypes.test.d.ts.map +1 -0
  1011. package/dist/lib/__tests__/legalRelationTypes.test.js +61 -0
  1012. package/dist/lib/__tests__/legalRelationTypes.test.js.map +1 -0
  1013. package/dist/lib/__tests__/parseFields.test.d.ts +2 -0
  1014. package/dist/lib/__tests__/parseFields.test.d.ts.map +1 -0
  1015. package/dist/lib/__tests__/parseFields.test.js +40 -0
  1016. package/dist/lib/__tests__/parseFields.test.js.map +1 -0
  1017. package/dist/lib/adminConfig.d.ts +48 -0
  1018. package/dist/lib/adminConfig.d.ts.map +1 -0
  1019. package/dist/lib/adminConfig.js +130 -0
  1020. package/dist/lib/adminConfig.js.map +1 -0
  1021. package/dist/lib/canonicalRefs.d.ts +96 -5
  1022. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  1023. package/dist/lib/canonicalRefs.js +89 -3
  1024. package/dist/lib/canonicalRefs.js.map +1 -1
  1025. package/dist/lib/captureGrounding.d.ts +48 -0
  1026. package/dist/lib/captureGrounding.d.ts.map +1 -0
  1027. package/dist/lib/captureGrounding.js +54 -0
  1028. package/dist/lib/captureGrounding.js.map +1 -0
  1029. package/dist/lib/captureGrounding.test.d.ts +2 -0
  1030. package/dist/lib/captureGrounding.test.d.ts.map +1 -0
  1031. package/dist/lib/captureGrounding.test.js +74 -0
  1032. package/dist/lib/captureGrounding.test.js.map +1 -0
  1033. package/dist/lib/captureLink.d.ts +26 -0
  1034. package/dist/lib/captureLink.d.ts.map +1 -0
  1035. package/dist/lib/captureLink.js +110 -0
  1036. package/dist/lib/captureLink.js.map +1 -0
  1037. package/dist/lib/checklist.d.ts +32 -0
  1038. package/dist/lib/checklist.d.ts.map +1 -0
  1039. package/dist/lib/checklist.js +77 -0
  1040. package/dist/lib/checklist.js.map +1 -0
  1041. package/dist/lib/client.d.ts +47 -19
  1042. package/dist/lib/client.d.ts.map +1 -1
  1043. package/dist/lib/client.js +226 -59
  1044. package/dist/lib/client.js.map +1 -1
  1045. package/dist/lib/collectionRegistry.d.ts +40 -5
  1046. package/dist/lib/collectionRegistry.d.ts.map +1 -1
  1047. package/dist/lib/collectionRegistry.js +71 -48
  1048. package/dist/lib/collectionRegistry.js.map +1 -1
  1049. package/dist/lib/commanderOptions.d.ts +8 -0
  1050. package/dist/lib/commanderOptions.d.ts.map +1 -0
  1051. package/dist/lib/commanderOptions.js +10 -0
  1052. package/dist/lib/commanderOptions.js.map +1 -0
  1053. package/dist/lib/compose-wrapup-view.d.ts +48 -0
  1054. package/dist/lib/compose-wrapup-view.d.ts.map +1 -0
  1055. package/dist/lib/compose-wrapup-view.js +37 -0
  1056. package/dist/lib/compose-wrapup-view.js.map +1 -0
  1057. package/dist/lib/config.d.ts +97 -68
  1058. package/dist/lib/config.d.ts.map +1 -1
  1059. package/dist/lib/config.js +222 -204
  1060. package/dist/lib/config.js.map +1 -1
  1061. package/dist/lib/configResult.d.ts +102 -0
  1062. package/dist/lib/configResult.d.ts.map +1 -0
  1063. package/dist/lib/configResult.js +179 -0
  1064. package/dist/lib/configResult.js.map +1 -0
  1065. package/dist/lib/connectProfileName.d.ts +36 -0
  1066. package/dist/lib/connectProfileName.d.ts.map +1 -0
  1067. package/dist/lib/connectProfileName.js +72 -0
  1068. package/dist/lib/connectProfileName.js.map +1 -0
  1069. package/dist/lib/connectProfileName.test.d.ts +2 -0
  1070. package/dist/lib/connectProfileName.test.d.ts.map +1 -0
  1071. package/dist/lib/connectProfileName.test.js +100 -0
  1072. package/dist/lib/connectProfileName.test.js.map +1 -0
  1073. package/dist/lib/constants.d.ts +5 -1
  1074. package/dist/lib/constants.d.ts.map +1 -1
  1075. package/dist/lib/constants.js +8 -1
  1076. package/dist/lib/constants.js.map +1 -1
  1077. package/dist/lib/conversation.d.ts +36 -0
  1078. package/dist/lib/conversation.d.ts.map +1 -0
  1079. package/dist/lib/conversation.js +66 -0
  1080. package/dist/lib/conversation.js.map +1 -0
  1081. package/dist/lib/createEntryResult.d.ts +34 -0
  1082. package/dist/lib/createEntryResult.d.ts.map +1 -0
  1083. package/dist/lib/createEntryResult.js +12 -0
  1084. package/dist/lib/createEntryResult.js.map +1 -0
  1085. package/dist/lib/deployment.js +2 -2
  1086. package/dist/lib/deployment.js.map +1 -1
  1087. package/dist/lib/deployment.test.js +20 -1
  1088. package/dist/lib/deployment.test.js.map +1 -1
  1089. package/dist/lib/envKeySnapshot.d.ts +10 -0
  1090. package/dist/lib/envKeySnapshot.d.ts.map +1 -0
  1091. package/dist/lib/envKeySnapshot.js +30 -0
  1092. package/dist/lib/envKeySnapshot.js.map +1 -0
  1093. package/dist/lib/errors.d.ts +91 -0
  1094. package/dist/lib/errors.d.ts.map +1 -1
  1095. package/dist/lib/errors.js +84 -0
  1096. package/dist/lib/errors.js.map +1 -1
  1097. package/dist/lib/frontmatter.d.ts +55 -0
  1098. package/dist/lib/frontmatter.d.ts.map +1 -0
  1099. package/dist/lib/frontmatter.js +92 -0
  1100. package/dist/lib/frontmatter.js.map +1 -0
  1101. package/dist/lib/frontmatter.test.d.ts +15 -0
  1102. package/dist/lib/frontmatter.test.d.ts.map +1 -0
  1103. package/dist/lib/frontmatter.test.js +98 -0
  1104. package/dist/lib/frontmatter.test.js.map +1 -0
  1105. package/dist/lib/gatewayTimeout.d.ts +88 -0
  1106. package/dist/lib/gatewayTimeout.d.ts.map +1 -0
  1107. package/dist/lib/gatewayTimeout.js +118 -0
  1108. package/dist/lib/gatewayTimeout.js.map +1 -0
  1109. package/dist/lib/gitEnvLeakKeysParity.test.d.ts +2 -0
  1110. package/dist/lib/gitEnvLeakKeysParity.test.d.ts.map +1 -0
  1111. package/dist/lib/gitEnvLeakKeysParity.test.js +73 -0
  1112. package/dist/lib/gitEnvLeakKeysParity.test.js.map +1 -0
  1113. package/dist/lib/glossary.js +1 -1
  1114. package/dist/lib/glossary.js.map +1 -1
  1115. package/dist/lib/hook-intents.js +3 -3
  1116. package/dist/lib/hook-intents.js.map +1 -1
  1117. package/dist/lib/judgeWait.d.ts +50 -0
  1118. package/dist/lib/judgeWait.d.ts.map +1 -0
  1119. package/dist/lib/judgeWait.js +64 -0
  1120. package/dist/lib/judgeWait.js.map +1 -0
  1121. package/dist/lib/kernelEnvelope.d.ts +42 -0
  1122. package/dist/lib/kernelEnvelope.d.ts.map +1 -0
  1123. package/dist/lib/kernelEnvelope.js +67 -0
  1124. package/dist/lib/kernelEnvelope.js.map +1 -0
  1125. package/dist/lib/legalRelationTypes.d.ts +19 -0
  1126. package/dist/lib/legalRelationTypes.d.ts.map +1 -0
  1127. package/dist/lib/legalRelationTypes.js +64 -0
  1128. package/dist/lib/legalRelationTypes.js.map +1 -0
  1129. package/dist/lib/localBinding.d.ts +86 -0
  1130. package/dist/lib/localBinding.d.ts.map +1 -0
  1131. package/dist/lib/localBinding.js +173 -0
  1132. package/dist/lib/localBinding.js.map +1 -0
  1133. package/dist/lib/method-registry.d.ts +16 -11
  1134. package/dist/lib/method-registry.d.ts.map +1 -1
  1135. package/dist/lib/method-registry.js +13 -25
  1136. package/dist/lib/method-registry.js.map +1 -1
  1137. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  1138. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  1139. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  1140. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  1141. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  1142. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  1143. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  1144. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  1145. package/dist/lib/notice-marker.d.ts +3 -0
  1146. package/dist/lib/notice-marker.d.ts.map +1 -0
  1147. package/dist/lib/notice-marker.js +223 -0
  1148. package/dist/lib/notice-marker.js.map +1 -0
  1149. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  1150. package/dist/lib/onboarding-path-b.js +39 -15
  1151. package/dist/lib/onboarding-path-b.js.map +1 -1
  1152. package/dist/lib/onboarding-shared.d.ts +27 -5
  1153. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  1154. package/dist/lib/onboarding-shared.js +55 -37
  1155. package/dist/lib/onboarding-shared.js.map +1 -1
  1156. package/dist/lib/onboarding-shared.test.d.ts +2 -0
  1157. package/dist/lib/onboarding-shared.test.d.ts.map +1 -0
  1158. package/dist/lib/onboarding-shared.test.js +131 -0
  1159. package/dist/lib/onboarding-shared.test.js.map +1 -0
  1160. package/dist/lib/onboarding-topics.js +1 -1
  1161. package/dist/lib/onboarding.d.ts +5 -1
  1162. package/dist/lib/onboarding.d.ts.map +1 -1
  1163. package/dist/lib/onboarding.js +62 -25
  1164. package/dist/lib/onboarding.js.map +1 -1
  1165. package/dist/lib/ownerLine.d.ts +73 -0
  1166. package/dist/lib/ownerLine.d.ts.map +1 -0
  1167. package/dist/lib/ownerLine.js +57 -0
  1168. package/dist/lib/ownerLine.js.map +1 -0
  1169. package/dist/lib/parseFields.d.ts +19 -0
  1170. package/dist/lib/parseFields.d.ts.map +1 -0
  1171. package/dist/lib/parseFields.js +49 -0
  1172. package/dist/lib/parseFields.js.map +1 -0
  1173. package/dist/lib/pinnedRole.d.ts +28 -0
  1174. package/dist/lib/pinnedRole.d.ts.map +1 -0
  1175. package/dist/lib/pinnedRole.js +105 -0
  1176. package/dist/lib/pinnedRole.js.map +1 -0
  1177. package/dist/lib/platformGlossary.d.ts +19 -0
  1178. package/dist/lib/platformGlossary.d.ts.map +1 -0
  1179. package/dist/lib/platformGlossary.js +21 -0
  1180. package/dist/lib/platformGlossary.js.map +1 -0
  1181. package/dist/lib/previewBanner.d.ts +9 -0
  1182. package/dist/lib/previewBanner.d.ts.map +1 -0
  1183. package/dist/lib/previewBanner.js +37 -0
  1184. package/dist/lib/previewBanner.js.map +1 -0
  1185. package/dist/lib/productbrain-files.d.ts +108 -0
  1186. package/dist/lib/productbrain-files.d.ts.map +1 -0
  1187. package/dist/lib/productbrain-files.js +240 -0
  1188. package/dist/lib/productbrain-files.js.map +1 -0
  1189. package/dist/lib/productbrain-files.test.d.ts +2 -0
  1190. package/dist/lib/productbrain-files.test.d.ts.map +1 -0
  1191. package/dist/lib/productbrain-files.test.js +518 -0
  1192. package/dist/lib/productbrain-files.test.js.map +1 -0
  1193. package/dist/lib/profiles.d.ts +55 -5
  1194. package/dist/lib/profiles.d.ts.map +1 -1
  1195. package/dist/lib/profiles.js +81 -27
  1196. package/dist/lib/profiles.js.map +1 -1
  1197. package/dist/lib/projectConfig.d.ts +96 -0
  1198. package/dist/lib/projectConfig.d.ts.map +1 -0
  1199. package/dist/lib/projectConfig.js +185 -0
  1200. package/dist/lib/projectConfig.js.map +1 -0
  1201. package/dist/lib/prompts.d.ts +2 -0
  1202. package/dist/lib/prompts.d.ts.map +1 -1
  1203. package/dist/lib/prompts.js +2 -0
  1204. package/dist/lib/prompts.js.map +1 -1
  1205. package/dist/lib/proseBody.d.ts +14 -0
  1206. package/dist/lib/proseBody.d.ts.map +1 -0
  1207. package/dist/lib/proseBody.js +25 -0
  1208. package/dist/lib/proseBody.js.map +1 -0
  1209. package/dist/lib/rate-limit.d.ts +38 -0
  1210. package/dist/lib/rate-limit.d.ts.map +1 -0
  1211. package/dist/lib/rate-limit.js +83 -0
  1212. package/dist/lib/rate-limit.js.map +1 -0
  1213. package/dist/lib/readinessNotices.d.ts +12 -0
  1214. package/dist/lib/readinessNotices.d.ts.map +1 -0
  1215. package/dist/lib/readinessNotices.js +15 -0
  1216. package/dist/lib/readinessNotices.js.map +1 -0
  1217. package/dist/lib/repo-detect.d.ts +8 -2
  1218. package/dist/lib/repo-detect.d.ts.map +1 -1
  1219. package/dist/lib/repo-detect.js +11 -6
  1220. package/dist/lib/repo-detect.js.map +1 -1
  1221. package/dist/lib/reportedProfile.d.ts +18 -0
  1222. package/dist/lib/reportedProfile.d.ts.map +1 -0
  1223. package/dist/lib/reportedProfile.js +144 -0
  1224. package/dist/lib/reportedProfile.js.map +1 -0
  1225. package/dist/lib/ruleListRender.d.ts +193 -0
  1226. package/dist/lib/ruleListRender.d.ts.map +1 -0
  1227. package/dist/lib/ruleListRender.js +274 -0
  1228. package/dist/lib/ruleListRender.js.map +1 -0
  1229. package/dist/lib/runner.d.ts +9 -1
  1230. package/dist/lib/runner.d.ts.map +1 -1
  1231. package/dist/lib/runner.js +30 -4
  1232. package/dist/lib/runner.js.map +1 -1
  1233. package/dist/lib/seatSentence.d.ts +42 -0
  1234. package/dist/lib/seatSentence.d.ts.map +1 -0
  1235. package/dist/lib/seatSentence.js +25 -0
  1236. package/dist/lib/seatSentence.js.map +1 -0
  1237. package/dist/lib/session.d.ts +90 -6
  1238. package/dist/lib/session.d.ts.map +1 -1
  1239. package/dist/lib/session.js +261 -17
  1240. package/dist/lib/session.js.map +1 -1
  1241. package/dist/lib/sessionBinding.d.ts +61 -0
  1242. package/dist/lib/sessionBinding.d.ts.map +1 -0
  1243. package/dist/lib/sessionBinding.js +125 -0
  1244. package/dist/lib/sessionBinding.js.map +1 -0
  1245. package/dist/lib/sessionNotices.d.ts +54 -0
  1246. package/dist/lib/sessionNotices.d.ts.map +1 -0
  1247. package/dist/lib/sessionNotices.js +130 -0
  1248. package/dist/lib/sessionNotices.js.map +1 -0
  1249. package/dist/lib/sessionNotices.test.d.ts +2 -0
  1250. package/dist/lib/sessionNotices.test.d.ts.map +1 -0
  1251. package/dist/lib/sessionNotices.test.js +55 -0
  1252. package/dist/lib/sessionNotices.test.js.map +1 -0
  1253. package/dist/lib/spineVerdictRead.d.ts +70 -0
  1254. package/dist/lib/spineVerdictRead.d.ts.map +1 -0
  1255. package/dist/lib/spineVerdictRead.js +73 -0
  1256. package/dist/lib/spineVerdictRead.js.map +1 -0
  1257. package/dist/lib/spinner.js +2 -2
  1258. package/dist/lib/spinner.js.map +1 -1
  1259. package/dist/lib/startup-resolution-signals.d.ts +34 -0
  1260. package/dist/lib/startup-resolution-signals.d.ts.map +1 -0
  1261. package/dist/lib/startup-resolution-signals.js +116 -0
  1262. package/dist/lib/startup-resolution-signals.js.map +1 -0
  1263. package/dist/lib/startup-resolution-signals.test.d.ts +2 -0
  1264. package/dist/lib/startup-resolution-signals.test.d.ts.map +1 -0
  1265. package/dist/lib/startup-resolution-signals.test.js +113 -0
  1266. package/dist/lib/startup-resolution-signals.test.js.map +1 -0
  1267. package/dist/lib/startup-signals.d.ts +12 -0
  1268. package/dist/lib/startup-signals.d.ts.map +1 -0
  1269. package/dist/lib/startup-signals.js +179 -0
  1270. package/dist/lib/startup-signals.js.map +1 -0
  1271. package/dist/lib/startup-signals.test.d.ts +2 -0
  1272. package/dist/lib/startup-signals.test.d.ts.map +1 -0
  1273. package/dist/lib/startup-signals.test.js +165 -0
  1274. package/dist/lib/startup-signals.test.js.map +1 -0
  1275. package/dist/lib/state.d.ts +11 -2
  1276. package/dist/lib/state.d.ts.map +1 -1
  1277. package/dist/lib/state.js +11 -4
  1278. package/dist/lib/state.js.map +1 -1
  1279. package/dist/lib/statusCategories.d.ts +160 -0
  1280. package/dist/lib/statusCategories.d.ts.map +1 -0
  1281. package/dist/lib/statusCategories.js +284 -0
  1282. package/dist/lib/statusCategories.js.map +1 -0
  1283. package/dist/lib/strip.d.ts +17 -0
  1284. package/dist/lib/strip.d.ts.map +1 -1
  1285. package/dist/lib/strip.js +48 -1
  1286. package/dist/lib/strip.js.map +1 -1
  1287. package/dist/lib/style.d.ts +8 -2
  1288. package/dist/lib/style.d.ts.map +1 -1
  1289. package/dist/lib/style.js +24 -17
  1290. package/dist/lib/style.js.map +1 -1
  1291. package/dist/lib/tokenConstants.d.ts +2 -0
  1292. package/dist/lib/tokenConstants.d.ts.map +1 -1
  1293. package/dist/lib/tokenConstants.js +2 -0
  1294. package/dist/lib/tokenConstants.js.map +1 -1
  1295. package/dist/lib/update-check.d.ts +42 -7
  1296. package/dist/lib/update-check.d.ts.map +1 -1
  1297. package/dist/lib/update-check.js +213 -62
  1298. package/dist/lib/update-check.js.map +1 -1
  1299. package/dist/lib/upgrade-runner.d.ts +22 -0
  1300. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  1301. package/dist/lib/upgrade-runner.js +110 -0
  1302. package/dist/lib/upgrade-runner.js.map +1 -0
  1303. package/dist/lib/workspaceNotice.d.ts +202 -0
  1304. package/dist/lib/workspaceNotice.d.ts.map +1 -0
  1305. package/dist/lib/workspaceNotice.js +345 -0
  1306. package/dist/lib/workspaceNotice.js.map +1 -0
  1307. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  1308. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  1309. package/dist/lib/workspaceVocabCache.js +98 -0
  1310. package/dist/lib/workspaceVocabCache.js.map +1 -0
  1311. package/dist/lib/writePerimeter.d.ts +72 -0
  1312. package/dist/lib/writePerimeter.d.ts.map +1 -0
  1313. package/dist/lib/writePerimeter.js +128 -0
  1314. package/dist/lib/writePerimeter.js.map +1 -0
  1315. package/dist/registerEntryCommands.d.ts +18 -0
  1316. package/dist/registerEntryCommands.d.ts.map +1 -0
  1317. package/dist/registerEntryCommands.js +123 -0
  1318. package/dist/registerEntryCommands.js.map +1 -0
  1319. package/dist/registerHistoryCommand.d.ts +8 -0
  1320. package/dist/registerHistoryCommand.d.ts.map +1 -0
  1321. package/dist/registerHistoryCommand.js +14 -0
  1322. package/dist/registerHistoryCommand.js.map +1 -0
  1323. package/dist/registerOutcomeCommands.d.ts +27 -0
  1324. package/dist/registerOutcomeCommands.d.ts.map +1 -0
  1325. package/dist/registerOutcomeCommands.js +27 -0
  1326. package/dist/registerOutcomeCommands.js.map +1 -0
  1327. package/dist/registerRoleCommands.d.ts +11 -0
  1328. package/dist/registerRoleCommands.d.ts.map +1 -0
  1329. package/dist/registerRoleCommands.js +38 -0
  1330. package/dist/registerRoleCommands.js.map +1 -0
  1331. package/dist/registerTensionsCommands.d.ts +10 -0
  1332. package/dist/registerTensionsCommands.d.ts.map +1 -0
  1333. package/dist/registerTensionsCommands.js +15 -0
  1334. package/dist/registerTensionsCommands.js.map +1 -0
  1335. package/dist/scoreboard/diagnose.d.ts +190 -0
  1336. package/dist/scoreboard/diagnose.d.ts.map +1 -0
  1337. package/dist/scoreboard/diagnose.js +282 -0
  1338. package/dist/scoreboard/diagnose.js.map +1 -0
  1339. package/dist/scoreboard/diagnose.test.d.ts +15 -0
  1340. package/dist/scoreboard/diagnose.test.d.ts.map +1 -0
  1341. package/dist/scoreboard/diagnose.test.js +288 -0
  1342. package/dist/scoreboard/diagnose.test.js.map +1 -0
  1343. package/dist/scoreboard/floors.d.ts +47 -0
  1344. package/dist/scoreboard/floors.d.ts.map +1 -0
  1345. package/dist/scoreboard/floors.js +33 -0
  1346. package/dist/scoreboard/floors.js.map +1 -0
  1347. package/dist/scoreboard/localDrift.d.ts +23 -0
  1348. package/dist/scoreboard/localDrift.d.ts.map +1 -0
  1349. package/dist/scoreboard/localDrift.js +111 -0
  1350. package/dist/scoreboard/localDrift.js.map +1 -0
  1351. package/dist/scoreboard/localDrift.test.d.ts +9 -0
  1352. package/dist/scoreboard/localDrift.test.d.ts.map +1 -0
  1353. package/dist/scoreboard/localDrift.test.js +82 -0
  1354. package/dist/scoreboard/localDrift.test.js.map +1 -0
  1355. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  1356. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  1357. package/dist/surfaces/__tests__/adapter.test.js +86 -0
  1358. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  1359. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.d.ts +2 -0
  1360. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.d.ts.map +1 -0
  1361. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.js +179 -0
  1362. package/dist/surfaces/__tests__/claude-skill-pointer-drift.test.js.map +1 -0
  1363. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  1364. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  1365. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  1366. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  1367. package/dist/surfaces/adapter.d.ts +70 -0
  1368. package/dist/surfaces/adapter.d.ts.map +1 -0
  1369. package/dist/surfaces/adapter.js +2 -0
  1370. package/dist/surfaces/adapter.js.map +1 -0
  1371. package/dist/surfaces/adapters/claude.d.ts +3 -0
  1372. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  1373. package/dist/surfaces/adapters/claude.js +72 -0
  1374. package/dist/surfaces/adapters/claude.js.map +1 -0
  1375. package/dist/surfaces/adapters/codex.d.ts +3 -0
  1376. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  1377. package/dist/surfaces/adapters/codex.js +61 -0
  1378. package/dist/surfaces/adapters/codex.js.map +1 -0
  1379. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  1380. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  1381. package/dist/surfaces/adapters/copilot.js +59 -0
  1382. package/dist/surfaces/adapters/copilot.js.map +1 -0
  1383. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  1384. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  1385. package/dist/surfaces/adapters/cursor.js +78 -0
  1386. package/dist/surfaces/adapters/cursor.js.map +1 -0
  1387. package/dist/surfaces/registry.d.ts +58 -2
  1388. package/dist/surfaces/registry.d.ts.map +1 -1
  1389. package/dist/surfaces/registry.js +82 -7
  1390. package/dist/surfaces/registry.js.map +1 -1
  1391. package/dist/surfaces/telemetry.d.ts +17 -0
  1392. package/dist/surfaces/telemetry.d.ts.map +1 -0
  1393. package/dist/surfaces/telemetry.js +31 -0
  1394. package/dist/surfaces/telemetry.js.map +1 -0
  1395. package/package.json +9 -5
  1396. package/dist/__tests__/audit.test.d.ts +0 -2
  1397. package/dist/__tests__/audit.test.d.ts.map +0 -1
  1398. package/dist/__tests__/audit.test.js +0 -394
  1399. package/dist/__tests__/audit.test.js.map +0 -1
  1400. package/dist/__tests__/authority-domains.test.d.ts +0 -2
  1401. package/dist/__tests__/authority-domains.test.d.ts.map +0 -1
  1402. package/dist/__tests__/authority-domains.test.js +0 -48
  1403. package/dist/__tests__/authority-domains.test.js.map +0 -1
  1404. package/dist/__tests__/promote.test.d.ts +0 -2
  1405. package/dist/__tests__/promote.test.d.ts.map +0 -1
  1406. package/dist/__tests__/promote.test.js +0 -230
  1407. package/dist/__tests__/promote.test.js.map +0 -1
  1408. package/dist/__tests__/proposals.test.d.ts +0 -2
  1409. package/dist/__tests__/proposals.test.d.ts.map +0 -1
  1410. package/dist/__tests__/proposals.test.js +0 -167
  1411. package/dist/__tests__/proposals.test.js.map +0 -1
  1412. package/dist/__tests__/setup-ingest.test.d.ts +0 -2
  1413. package/dist/__tests__/setup-ingest.test.d.ts.map +0 -1
  1414. package/dist/__tests__/setup-ingest.test.js +0 -55
  1415. package/dist/__tests__/setup-ingest.test.js.map +0 -1
  1416. package/dist/__tests__/setup-resolver.test.d.ts +0 -14
  1417. package/dist/__tests__/setup-resolver.test.d.ts.map +0 -1
  1418. package/dist/__tests__/setup-resolver.test.js +0 -228
  1419. package/dist/__tests__/setup-resolver.test.js.map +0 -1
  1420. package/dist/__tests__/setup.test.d.ts +0 -2
  1421. package/dist/__tests__/setup.test.d.ts.map +0 -1
  1422. package/dist/__tests__/setup.test.js +0 -141
  1423. package/dist/__tests__/setup.test.js.map +0 -1
  1424. package/dist/commands/accept.d.ts +0 -18
  1425. package/dist/commands/accept.d.ts.map +0 -1
  1426. package/dist/commands/accept.js +0 -76
  1427. package/dist/commands/accept.js.map +0 -1
  1428. package/dist/commands/audit.d.ts +0 -25
  1429. package/dist/commands/audit.d.ts.map +0 -1
  1430. package/dist/commands/audit.js +0 -188
  1431. package/dist/commands/audit.js.map +0 -1
  1432. package/dist/commands/authority-domains.d.ts +0 -140
  1433. package/dist/commands/authority-domains.d.ts.map +0 -1
  1434. package/dist/commands/authority-domains.js +0 -268
  1435. package/dist/commands/authority-domains.js.map +0 -1
  1436. package/dist/commands/method.d.ts +0 -99
  1437. package/dist/commands/method.d.ts.map +0 -1
  1438. package/dist/commands/method.js +0 -781
  1439. package/dist/commands/method.js.map +0 -1
  1440. package/dist/commands/migrate-setup.d.ts +0 -18
  1441. package/dist/commands/migrate-setup.d.ts.map +0 -1
  1442. package/dist/commands/migrate-setup.js +0 -198
  1443. package/dist/commands/migrate-setup.js.map +0 -1
  1444. package/dist/commands/promote.d.ts +0 -12
  1445. package/dist/commands/promote.d.ts.map +0 -1
  1446. package/dist/commands/promote.js +0 -113
  1447. package/dist/commands/promote.js.map +0 -1
  1448. package/dist/commands/proposals.d.ts +0 -9
  1449. package/dist/commands/proposals.d.ts.map +0 -1
  1450. package/dist/commands/proposals.js +0 -24
  1451. package/dist/commands/proposals.js.map +0 -1
  1452. package/dist/commands/reject.d.ts +0 -14
  1453. package/dist/commands/reject.d.ts.map +0 -1
  1454. package/dist/commands/reject.js +0 -43
  1455. package/dist/commands/reject.js.map +0 -1
  1456. package/dist/commands/setup-ingest.d.ts +0 -17
  1457. package/dist/commands/setup-ingest.d.ts.map +0 -1
  1458. package/dist/commands/setup-ingest.js +0 -224
  1459. package/dist/commands/setup-ingest.js.map +0 -1
  1460. package/dist/commands/setup-resolver.d.ts +0 -58
  1461. package/dist/commands/setup-resolver.d.ts.map +0 -1
  1462. package/dist/commands/setup-resolver.js +0 -150
  1463. package/dist/commands/setup-resolver.js.map +0 -1
  1464. package/dist/commands/setup.d.ts +0 -15
  1465. package/dist/commands/setup.d.ts.map +0 -1
  1466. package/dist/commands/setup.js +0 -148
  1467. package/dist/commands/setup.js.map +0 -1
  1468. package/dist/formatters/audit.d.ts +0 -46
  1469. package/dist/formatters/audit.d.ts.map +0 -1
  1470. package/dist/formatters/audit.js +0 -81
  1471. package/dist/formatters/audit.js.map +0 -1
  1472. package/dist/formatters/promote.d.ts +0 -30
  1473. package/dist/formatters/promote.d.ts.map +0 -1
  1474. package/dist/formatters/promote.js +0 -39
  1475. package/dist/formatters/promote.js.map +0 -1
  1476. package/dist/formatters/proposals.d.ts +0 -45
  1477. package/dist/formatters/proposals.d.ts.map +0 -1
  1478. package/dist/formatters/proposals.js +0 -62
  1479. package/dist/formatters/proposals.js.map +0 -1
  1480. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  1481. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  1482. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  1483. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  1484. package/dist/generators/archetypes.d.ts +0 -52
  1485. package/dist/generators/archetypes.d.ts.map +0 -1
  1486. package/dist/generators/archetypes.js +0 -153
  1487. package/dist/generators/archetypes.js.map +0 -1
  1488. package/dist/generators/archetypes.test.d.ts +0 -2
  1489. package/dist/generators/archetypes.test.d.ts.map +0 -1
  1490. package/dist/generators/archetypes.test.js +0 -237
  1491. package/dist/generators/archetypes.test.js.map +0 -1
  1492. package/dist/generators/chain-classifier.d.ts +0 -49
  1493. package/dist/generators/chain-classifier.d.ts.map +0 -1
  1494. package/dist/generators/chain-classifier.js +0 -180
  1495. package/dist/generators/chain-classifier.js.map +0 -1
  1496. package/dist/generators/chain-classifier.test.d.ts +0 -2
  1497. package/dist/generators/chain-classifier.test.d.ts.map +0 -1
  1498. package/dist/generators/chain-classifier.test.js +0 -257
  1499. package/dist/generators/chain-classifier.test.js.map +0 -1
  1500. package/dist/generators/chain-rules.d.ts +0 -42
  1501. package/dist/generators/chain-rules.d.ts.map +0 -1
  1502. package/dist/generators/chain-rules.js +0 -144
  1503. package/dist/generators/chain-rules.js.map +0 -1
  1504. package/dist/generators/chain-rules.test.d.ts +0 -2
  1505. package/dist/generators/chain-rules.test.d.ts.map +0 -1
  1506. package/dist/generators/chain-rules.test.js +0 -179
  1507. package/dist/generators/chain-rules.test.js.map +0 -1
  1508. package/dist/generators/handshake-diff.d.ts +0 -67
  1509. package/dist/generators/handshake-diff.d.ts.map +0 -1
  1510. package/dist/generators/handshake-diff.js +0 -183
  1511. package/dist/generators/handshake-diff.js.map +0 -1
  1512. package/dist/generators/handshake-diff.test.d.ts +0 -2
  1513. package/dist/generators/handshake-diff.test.d.ts.map +0 -1
  1514. package/dist/generators/handshake-diff.test.js +0 -264
  1515. package/dist/generators/handshake-diff.test.js.map +0 -1
  1516. package/dist/lib/activation.d.ts +0 -28
  1517. package/dist/lib/activation.d.ts.map +0 -1
  1518. package/dist/lib/activation.js +0 -57
  1519. package/dist/lib/activation.js.map +0 -1
  1520. package/dist/lib/activation.test.d.ts +0 -6
  1521. package/dist/lib/activation.test.d.ts.map +0 -1
  1522. package/dist/lib/activation.test.js +0 -121
  1523. package/dist/lib/activation.test.js.map +0 -1
  1524. package/dist/lib/inferSourceDate.d.ts +0 -12
  1525. package/dist/lib/inferSourceDate.d.ts.map +0 -1
  1526. package/dist/lib/inferSourceDate.js +0 -44
  1527. package/dist/lib/inferSourceDate.js.map +0 -1
  1528. package/dist/lib/onboarding-phases.d.ts +0 -9
  1529. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  1530. package/dist/lib/onboarding-phases.js +0 -120
  1531. package/dist/lib/onboarding-phases.js.map +0 -1
  1532. package/templates/archetypes/boundary.md +0 -23
  1533. package/templates/archetypes/constraint.md +0 -23
  1534. package/templates/archetypes/convention.md +0 -23
  1535. package/templates/archetypes/policy.md +0 -23
  1536. package/templates/archetypes/quality-gate.md +0 -23
  1537. package/templates/archetypes/workflow.md +0 -23
@@ -5,14 +5,15 @@
5
5
  * Uses temp directories and mocks to isolate from real config on the filesystem.
6
6
  */
7
7
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
8
- import { mkdirSync, writeFileSync, rmSync } from 'fs';
9
- import { resolve } from 'path';
8
+ import { mkdirSync, writeFileSync, readFileSync, rmSync } from 'fs';
9
+ import { dirname, resolve } from 'path';
10
10
  import { tmpdir } from 'os';
11
11
  import { randomUUID } from 'crypto';
12
12
  // Mock the profiles module to prevent real profile config from leaking in
13
13
  vi.mock('../lib/profiles.js', () => ({
14
14
  resolveProfileConfig: vi.fn(() => null),
15
15
  resolveNamedProfileConfig: vi.fn(() => null),
16
+ getGlobalActiveProfile: vi.fn(() => null),
16
17
  }));
17
18
  // Mock os.homedir to prevent reading real ~/.config/productbrain/.env
18
19
  vi.mock('os', async (importOriginal) => {
@@ -29,6 +30,7 @@ describe('config resolution', () => {
29
30
  const envKeys = ['PRODUCTBRAIN_API_KEY', 'CONVEX_SITE_URL', 'PB_PROFILE', 'PB_ENV'];
30
31
  // Import after mock setup
31
32
  let resolveConfig;
33
+ let getConfig;
32
34
  let getConfigSafe;
33
35
  let resetConfigCache;
34
36
  let findProjectRoot;
@@ -48,6 +50,7 @@ describe('config resolution', () => {
48
50
  // Dynamic import to get module with mocks applied
49
51
  const config = await import('../lib/config.js');
50
52
  resolveConfig = config.resolveConfig;
53
+ getConfig = config.getConfig;
51
54
  getConfigSafe = config.getConfigSafe;
52
55
  resetConfigCache = config.resetConfigCache;
53
56
  findProjectRoot = config.findProjectRoot;
@@ -78,19 +81,45 @@ describe('config resolution', () => {
78
81
  it('finds .productbrain/ in the start directory', () => {
79
82
  const pbDir = resolve(tempDir, '.productbrain');
80
83
  mkdirSync(pbDir, { recursive: true });
84
+ writeFileSync(resolve(pbDir, 'config.json'), '{}');
81
85
  const result = findProjectRoot(tempDir);
82
86
  expect(result).toBe(tempDir);
83
87
  });
84
88
  it('finds .productbrain/ in a parent directory', () => {
85
- // Create .productbrain/ in tempDir
89
+ // Create .productbrain/ in tempDir with a config file
86
90
  const pbDir = resolve(tempDir, '.productbrain');
87
91
  mkdirSync(pbDir, { recursive: true });
92
+ writeFileSync(resolve(pbDir, 'config.json'), '{}');
88
93
  // Create a subdirectory and search from there
89
94
  const subDir = resolve(tempDir, 'src', 'commands');
90
95
  mkdirSync(subDir, { recursive: true });
91
96
  const result = findProjectRoot(subDir);
92
97
  expect(result).toBe(tempDir);
93
98
  });
99
+ it('skips a projection-only .productbrain/ subtree and walks to the config-bearing root', () => {
100
+ // Repo root has a config-bearing .productbrain.
101
+ const rootPbDir = resolve(tempDir, '.productbrain');
102
+ mkdirSync(rootPbDir, { recursive: true });
103
+ writeFileSync(resolve(rootPbDir, 'config.json'), '{}');
104
+ // A subrepo has a projection-only .productbrain (handshake artifacts, no config files).
105
+ const subRepo = resolve(tempDir, 'packages', 'cli');
106
+ const subPbDir = resolve(subRepo, '.productbrain');
107
+ mkdirSync(subPbDir, { recursive: true });
108
+ writeFileSync(resolve(subPbDir, 'briefing.md'), '# briefing');
109
+ writeFileSync(resolve(subPbDir, 'context.md'), '# context');
110
+ // Walking up from inside the subrepo must skip the projection and reach the root.
111
+ const result = findProjectRoot(subRepo);
112
+ expect(result).toBe(tempDir);
113
+ });
114
+ it('accepts a sub-tree .productbrain/ that does carry its own config', () => {
115
+ // Intentional sub-config is respected (e.g. a nested CLI project).
116
+ const subRepo = resolve(tempDir, 'sub');
117
+ const subPbDir = resolve(subRepo, '.productbrain');
118
+ mkdirSync(subPbDir, { recursive: true });
119
+ writeFileSync(resolve(subPbDir, 'config.local.json'), '{}');
120
+ const result = findProjectRoot(subRepo);
121
+ expect(result).toBe(subRepo);
122
+ });
94
123
  it('returns null when no .productbrain/ found up to home', () => {
95
124
  // tempDir is under the real system tmpdir. The mocked homedir() returns a
96
125
  // path that is NOT an ancestor of tempDir, so the walk will exhaust all
@@ -146,19 +175,103 @@ describe('config resolution', () => {
146
175
  expect(result.apiKey).toBe('pb_sk_local_profile_key');
147
176
  expect(result.source).toBe('project');
148
177
  });
149
- it('config.json siteUrl is used as gateway override with global profile', async () => {
150
- const { resolveProfileConfig } = await import('../lib/profiles.js');
151
- resolveProfileConfig.mockReturnValueOnce({
152
- apiKey: 'pb_sk_global_key',
153
- siteUrl: 'https://profile.example.com',
178
+ it('FAILS CLOSED on a dangling repo-local pin — never silently falls through to the global active profile', async () => {
179
+ const { resolveNamedProfileConfig, resolveProfileConfig } = await import('../lib/profiles.js');
180
+ // Pin names a profile that no longer resolves (deleted, or never fully set up).
181
+ resolveNamedProfileConfig.mockReturnValue(null);
182
+ // A perfectly usable global profile is available — and must NOT be adopted.
183
+ resolveProfileConfig.mockReturnValue({
184
+ apiKey: 'pb_sk_global_profile_key',
185
+ siteUrl: 'https://global-profile.example.com',
186
+ });
187
+ const pbDir = resolve(tempDir, '.productbrain');
188
+ mkdirSync(pbDir, { recursive: true });
189
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'deleted-workspace' }));
190
+ expect(() => resolveConfig()).toThrow(/pinned to profile "deleted-workspace"/);
191
+ });
192
+ it('dangling repo-local pin throws AUTH_MISSING rather than returning a foreign credential', async () => {
193
+ const { resolveNamedProfileConfig, resolveProfileConfig } = await import('../lib/profiles.js');
194
+ // Pin resolves to a profile file that exists but carries no API key.
195
+ resolveNamedProfileConfig.mockReturnValue({
196
+ siteUrl: 'https://pinned.example.com',
197
+ });
198
+ resolveProfileConfig.mockReturnValue({
199
+ apiKey: 'pb_sk_global_profile_key',
200
+ siteUrl: 'https://global-profile.example.com',
201
+ });
202
+ const pbDir = resolve(tempDir, '.productbrain');
203
+ mkdirSync(pbDir, { recursive: true });
204
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'keyless-workspace' }));
205
+ let caught;
206
+ try {
207
+ resolveConfig();
208
+ }
209
+ catch (e) {
210
+ caught = e;
211
+ }
212
+ expect(caught?.code).toBe('AUTH_MISSING');
213
+ });
214
+ it('getConfig() refuses a dangling pin — the loadEnv() cascade must not adopt the global profile', async () => {
215
+ // This is the door ~98 command modules use, and it is a SEPARATE cascade from
216
+ // resolveConfig() — loadEnv() mutates process.env rather than returning a value.
217
+ const { resolveNamedProfileConfig, resolveProfileConfig } = await import('../lib/profiles.js');
218
+ resolveNamedProfileConfig.mockReturnValue(null);
219
+ resolveProfileConfig.mockReturnValue({
220
+ apiKey: 'pb_sk_global_profile_key',
221
+ siteUrl: 'https://global-profile.example.com',
222
+ });
223
+ const pbDir = resolve(tempDir, '.productbrain');
224
+ mkdirSync(pbDir, { recursive: true });
225
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'deleted-workspace' }));
226
+ expect(() => getConfig()).toThrow(/pinned to profile "deleted-workspace"/);
227
+ // The foreign credential must never become the live binding.
228
+ expect(process.env.PRODUCTBRAIN_API_KEY).toBeUndefined();
229
+ });
230
+ it('a pin whose profile has a malformed key is a broken pin, not a credential', async () => {
231
+ const { resolveNamedProfileConfig, resolveProfileConfig } = await import('../lib/profiles.js');
232
+ resolveNamedProfileConfig.mockReturnValue({
233
+ apiKey: 'not-a-pb-key',
234
+ siteUrl: 'https://pinned.example.com',
235
+ });
236
+ resolveProfileConfig.mockReturnValue({
237
+ apiKey: 'pb_sk_global_profile_key',
238
+ siteUrl: 'https://global-profile.example.com',
239
+ });
240
+ const pbDir = resolve(tempDir, '.productbrain');
241
+ mkdirSync(pbDir, { recursive: true });
242
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'malformed-workspace' }));
243
+ // Names the pin, rather than deferring to a generic "no API key, run pb login".
244
+ expect(() => resolveConfig()).toThrow(/pinned to profile "malformed-workspace"/);
245
+ });
246
+ it('getConfigSafe() REPORTS a dangling pin instead of throwing — diagnostics must still render', async () => {
247
+ const { resolveNamedProfileConfig, resolveProfileConfig } = await import('../lib/profiles.js');
248
+ resolveNamedProfileConfig.mockReturnValue(null);
249
+ resolveProfileConfig.mockReturnValue({
250
+ apiKey: 'pb_sk_global_profile_key',
251
+ siteUrl: 'https://global-profile.example.com',
252
+ });
253
+ const pbDir = resolve(tempDir, '.productbrain');
254
+ mkdirSync(pbDir, { recursive: true });
255
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'deleted-workspace' }));
256
+ // `pb doctor` and the bare-`pb` dashboard go through here; they must diagnose, not die.
257
+ const result = getConfigSafe();
258
+ expect(result.ok).toBe(false);
259
+ expect(result.reason).toMatch(/pinned to profile "deleted-workspace"/);
260
+ });
261
+ it('a pin with no URL of its own goes to DEFAULT_SITE_URL, never config.json siteUrl (TEN-4500)', async () => {
262
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
263
+ resolveNamedProfileConfig.mockReturnValueOnce({
264
+ apiKey: 'pb_sk_pinned_key',
154
265
  });
155
266
  const pbDir = resolve(tempDir, '.productbrain');
156
267
  mkdirSync(pbDir, { recursive: true });
157
268
  writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'https://project-gateway.example.com' }));
269
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'product-brain' }));
158
270
  const result = resolveConfig();
159
- expect(result.apiKey).toBe('pb_sk_global_key');
160
- expect(result.siteUrl).toBe('https://project-gateway.example.com');
161
- expect(result.source).toBe('profile');
271
+ expect(result.apiKey).toBe('pb_sk_pinned_key');
272
+ expect(result.siteUrl).toBe('https://gateway.productbrain.io');
273
+ expect(result.siteUrlSource).toBe('default');
274
+ expect(result.source).toBe('project');
162
275
  });
163
276
  it('env vars override project config.local.json', () => {
164
277
  process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_env_key';
@@ -177,24 +290,18 @@ describe('config resolution', () => {
177
290
  expect(result.siteUrl).toBe('https://gateway.productbrain.io');
178
291
  expect(result.source).toBe('default');
179
292
  });
180
- it('ignores profile field in config.json (legacy migration)', () => {
293
+ it('ignores profile field in config.json (legacy migration) — not a pin, so the project has no tenant', () => {
181
294
  const pbDir = resolve(tempDir, '.productbrain');
182
295
  mkdirSync(pbDir, { recursive: true });
183
- // Old config.json with profile field — must be ignored
296
+ // Old config.json with profile field — must be ignored, not treated as a pin
184
297
  writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'https://project.example.com', profile: 'should-be-ignored' }));
185
- const result = resolveConfig();
186
- // profile in config.json must NOT be resolved — no profile mock set up
187
- expect(result.apiKey).toBeUndefined();
188
- expect(result.source).toBe('default');
298
+ expect(() => resolveConfig()).toThrow(/no tenant pin/i);
189
299
  });
190
- it('handles partial project config (only siteUrl, no apiKey)', () => {
300
+ it('a declared project with only siteUrl and no pin refuses rather than falling through', () => {
191
301
  const pbDir = resolve(tempDir, '.productbrain');
192
302
  mkdirSync(pbDir, { recursive: true });
193
303
  writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'https://partial.example.com' }));
194
- const result = resolveConfig();
195
- // No apiKey in project config, so it should fall through to default
196
- expect(result.apiKey).toBeUndefined();
197
- expect(result.source).toBe('default');
304
+ expect(() => resolveConfig()).toThrow(/no tenant pin/i);
198
305
  });
199
306
  });
200
307
  describe('getConfigSafe()', () => {
@@ -206,6 +313,211 @@ describe('config resolution', () => {
206
313
  expect(result.reason).toContain('No API key');
207
314
  }
208
315
  });
316
+ it('names the FILE, not CONVEX_SITE_URL, when a file supplied the non-HTTPS URL', () => {
317
+ // A file-sourced siteUrl outranks CONVEX_SITE_URL everywhere except an env-key override, so
318
+ // "set CONVEX_SITE_URL" would send the operator back through the same failure.
319
+ process.env.CONVEX_SITE_URL = 'https://this-would-never-win.example.com';
320
+ const pbDir = resolve(tempDir, '.productbrain');
321
+ mkdirSync(pbDir, { recursive: true });
322
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
323
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
324
+ siteUrl: 'http://insecure.example.com',
325
+ preview: true,
326
+ }));
327
+ resetConfigCache();
328
+ const result = getConfigSafe();
329
+ expect(result.ok).toBe(false);
330
+ if (!result.ok) {
331
+ expect(result.kind).toBe('invalid-url');
332
+ expect(result.reason).toMatch(/must use HTTPS/i);
333
+ // The binding supplies its own URL, so the repair is that file alone — naming a profile
334
+ // it may also pin would point at something that does not control this URL.
335
+ expect(result.guidance).toContain('.productbrain/config.local.json');
336
+ expect(result.guidance).not.toMatch(/profile/i);
337
+ expect(result.guidance).not.toMatch(/CONVEX_SITE_URL/);
338
+ }
339
+ });
340
+ it('names CONVEX_SITE_URL when the environment did supply the non-HTTPS URL', () => {
341
+ process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_env_key';
342
+ process.env.CONVEX_SITE_URL = 'http://insecure.example.com';
343
+ resetConfigCache();
344
+ const result = getConfigSafe();
345
+ expect(result.ok).toBe(false);
346
+ if (!result.ok) {
347
+ expect(result.kind).toBe('invalid-url');
348
+ expect(result.guidance).toContain('CONVEX_SITE_URL');
349
+ }
350
+ });
351
+ // ── The URL's origin is NOT the credential's origin ────────────────────────────────────
352
+ //
353
+ // A key travels only with the URL beside it (TEN-4500), so the repair names that source —
354
+ // never config.json, whose siteUrl no longer routes any key, and never a sibling file that
355
+ // happens to sit in the same directory.
356
+ it('a non-HTTPS config.json siteUrl never reaches a pinned key (TEN-4500)', async () => {
357
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
358
+ resolveNamedProfileConfig.mockReturnValue({
359
+ apiKey: 'pb_sk_pinned_key',
360
+ });
361
+ const pbDir = resolve(tempDir, '.productbrain');
362
+ mkdirSync(pbDir, { recursive: true });
363
+ writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'http://insecure.example.com' }));
364
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'product-brain' }));
365
+ resetConfigCache();
366
+ const result = getConfigSafe();
367
+ expect(result.ok).toBe(true);
368
+ if (result.ok)
369
+ expect(result.siteUrl).toBe('https://gateway.productbrain.io');
370
+ });
371
+ it('names the pin — not config.json or a CWD .env — when the pinned profile supplied the URL', async () => {
372
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
373
+ resolveNamedProfileConfig.mockReturnValue({
374
+ apiKey: 'pb_sk_pinned_key',
375
+ siteUrl: 'http://pin.example.com',
376
+ });
377
+ const pbDir = resolve(tempDir, '.productbrain');
378
+ mkdirSync(pbDir, { recursive: true });
379
+ writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'http://insecure.example.com' }));
380
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'product-brain' }));
381
+ writeFileSync(resolve(tempDir, '.env'), 'PRODUCTBRAIN_API_KEY=pb_sk_cwd_key\nCONVEX_SITE_URL=https://cwd-would-have-been-fine.example.com\n');
382
+ resetConfigCache();
383
+ const result = getConfigSafe();
384
+ expect(result.ok).toBe(false);
385
+ if (!result.ok) {
386
+ expect(result.kind).toBe('invalid-url');
387
+ expect(result.reason).toContain('http://pin.example.com');
388
+ expect(result.guidance).toContain('pinned by .productbrain/config.local.json');
389
+ expect(result.guidance).not.toContain('.productbrain/config.json');
390
+ expect(result.guidance).not.toMatch(/\.env file/);
391
+ }
392
+ });
393
+ it('names the profile the repo pin points at, not just "the profile it pins"', async () => {
394
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
395
+ resolveNamedProfileConfig.mockReturnValue({
396
+ apiKey: 'pb_sk_pinned_key_0123456789',
397
+ siteUrl: 'http://insecure.example.com',
398
+ });
399
+ const pbDir = resolve(tempDir, '.productbrain');
400
+ mkdirSync(pbDir, { recursive: true });
401
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'pinned-workspace' }));
402
+ resetConfigCache();
403
+ const result = getConfigSafe();
404
+ expect(result.ok).toBe(false);
405
+ if (!result.ok) {
406
+ expect(result.kind).toBe('invalid-url');
407
+ expect(result.guidance).toContain('pinned-workspace');
408
+ }
409
+ });
410
+ it('names the CWD env file that actually won, not the generic .env', () => {
411
+ // CWD_ENV_PATHS scans .env.mcp first, so a generic "the .env file" label would send the
412
+ // operator to edit a file the cascade never read.
413
+ writeFileSync(resolve(tempDir, '.env.mcp'), 'PRODUCTBRAIN_API_KEY=pb_sk_cwd_key\nCONVEX_SITE_URL=http://insecure.example.com\n');
414
+ resetConfigCache();
415
+ const result = getConfigSafe();
416
+ expect(result.ok).toBe(false);
417
+ if (!result.ok) {
418
+ expect(result.kind).toBe('invalid-url');
419
+ expect(result.guidance).toContain('.env.mcp');
420
+ }
421
+ });
422
+ it('tells the operator to unset PRODUCTBRAIN_API_KEY — not to run pb login — for a bad exported key', () => {
423
+ // An exported key wins step 1 of the cascade, and `pb login` writes to a profile or the
424
+ // legacy home file — both of which lose to it. "Run pb login" would loop forever.
425
+ process.env.PRODUCTBRAIN_API_KEY = 'bad_prefix_key';
426
+ resetConfigCache();
427
+ const result = getConfigSafe();
428
+ expect(result.ok).toBe(false);
429
+ if (!result.ok) {
430
+ expect(result.kind).toBe('invalid-key');
431
+ expect(result.guidance).toMatch(/Unset PRODUCTBRAIN_API_KEY|replace it/);
432
+ // `pb login` may only be named to explain why it cannot help — never as the instruction.
433
+ expect(result.guidance).not.toMatch(/Run `pb login`/);
434
+ expect(result.guidance).toMatch(/cannot repair/);
435
+ expect(result.nextCommand).not.toBe('pb login');
436
+ }
437
+ });
438
+ it('still points a stored malformed key at pb login — login CAN repair that one', async () => {
439
+ const { resolveProfileConfig } = await import('../lib/profiles.js');
440
+ resolveProfileConfig.mockReturnValue({
441
+ apiKey: 'bad_prefix_key',
442
+ siteUrl: 'https://profile.example.com',
443
+ });
444
+ resetConfigCache();
445
+ const result = getConfigSafe();
446
+ expect(result.ok).toBe(false);
447
+ if (!result.ok) {
448
+ expect(result.kind).toBe('invalid-key');
449
+ expect(result.guidance).toMatch(/pb login/);
450
+ expect(result.nextCommand).toBe('pb login');
451
+ }
452
+ });
453
+ // ── Which profile actually supplied it ──────────────────────────────────────────────────
454
+ //
455
+ // resolveProfileConfig() reaches a credential four ways — PB_PROFILE, the active-profile
456
+ // marker, a `default` fallback, and the legacy ~/.config/productbrain/.env — and reports the
457
+ // winner's name. A fixed "the active profile" label sends the operator to edit a profile that
458
+ // supplied nothing, so the same failure comes straight back.
459
+ it('names the PB_PROFILE-selected profile, not "the active profile", for its non-HTTPS URL', async () => {
460
+ const { resolveProfileConfig, getGlobalActiveProfile } = await import('../lib/profiles.js');
461
+ // A DIFFERENT profile is globally active. PB_PROFILE outranks it in profiles.ts, which
462
+ // returns the selected name alongside the credential (profiles.ts resolveProfileConfig 1).
463
+ getGlobalActiveProfile.mockReturnValue('main-workspace');
464
+ process.env.PB_PROFILE = 'preview-workspace';
465
+ resolveProfileConfig.mockReturnValue({
466
+ apiKey: 'pb_sk_selected_profile_key',
467
+ siteUrl: 'http://insecure.example.com',
468
+ profileName: 'preview-workspace',
469
+ });
470
+ resetConfigCache();
471
+ const result = getConfigSafe();
472
+ expect(result.ok).toBe(false);
473
+ if (!result.ok) {
474
+ expect(result.kind).toBe('invalid-url');
475
+ expect(result.guidance).toContain('the profile "preview-workspace"');
476
+ expect(result.guidance).not.toContain('the active profile');
477
+ // The globally active profile did not supply this URL and must not be named.
478
+ expect(result.guidance).not.toContain('main-workspace');
479
+ }
480
+ });
481
+ it('names the `default` fallback profile for a malformed stored key', async () => {
482
+ const { resolveProfileConfig } = await import('../lib/profiles.js');
483
+ // No PB_PROFILE and no active-profile marker: profiles.ts falls back to `default`, which is
484
+ // a real file the operator can open — "the active profile" is not.
485
+ resolveProfileConfig.mockReturnValue({
486
+ apiKey: 'bad_prefix_key',
487
+ siteUrl: 'https://profile.example.com',
488
+ profileName: 'default',
489
+ });
490
+ resetConfigCache();
491
+ const result = getConfigSafe();
492
+ expect(result.ok).toBe(false);
493
+ if (!result.ok) {
494
+ expect(result.kind).toBe('invalid-key');
495
+ expect(result.reason).toContain('the profile "default"');
496
+ expect(result.reason).not.toContain('the active profile');
497
+ }
498
+ });
499
+ it('does NOT call the legacy home config "the active profile" — it is not a named profile', async () => {
500
+ // resolveConfig() step 4 labels the legacy ~/.config/productbrain/.env `profile`, but it
501
+ // carries no profile name at all, so naming a profile there would be a fabrication.
502
+ const { HOME_ENV_PATH } = await import('../lib/config.js');
503
+ mkdirSync(dirname(HOME_ENV_PATH), { recursive: true });
504
+ writeFileSync(HOME_ENV_PATH, 'PRODUCTBRAIN_API_KEY=bad_prefix_key\n');
505
+ try {
506
+ resetConfigCache();
507
+ const result = getConfigSafe();
508
+ expect(result.ok).toBe(false);
509
+ if (!result.ok) {
510
+ expect(result.kind).toBe('invalid-key');
511
+ expect(result.reason).not.toContain('the active profile');
512
+ expect(result.reason).toContain('the stored profile configuration');
513
+ }
514
+ }
515
+ finally {
516
+ // The fake home is shared by every test in this file; a stray legacy .env would supply a
517
+ // credential to the cases that assert none is found.
518
+ rmSync(HOME_ENV_PATH, { force: true });
519
+ }
520
+ });
209
521
  it('returns { ok: true } with correct source when key exists in env', () => {
210
522
  process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_test_key';
211
523
  process.env.CONVEX_SITE_URL = 'https://test.example.com';
@@ -235,21 +547,42 @@ describe('config resolution', () => {
235
547
  expect(result.source).toBe('project');
236
548
  }
237
549
  });
550
+ it('SF-3: preview binding overrides a stale CONVEX_SITE_URL exported in the shell', () => {
551
+ // Real-dev URL exported but no PRODUCTBRAIN_API_KEY — the realistic dogfood shell.
552
+ process.env.CONVEX_SITE_URL = 'https://trustworthy-kangaroo-277.convex.site';
553
+ const pbDir = resolve(tempDir, '.productbrain');
554
+ mkdirSync(pbDir, { recursive: true });
555
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
556
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
557
+ siteUrl: 'https://my-preview.convex.site',
558
+ preview: true,
559
+ workspaceName: 'Preview Workspace',
560
+ }));
561
+ resetConfigCache();
562
+ const result = getConfigSafe();
563
+ // Preview key must NEVER be paired with the stale real-dev URL — that would
564
+ // route a preview credential to a non-preview gateway (STD-261).
565
+ expect(result.ok).toBe(true);
566
+ if (result.ok) {
567
+ expect(result.apiKey).toBe('pb_sk_preview_key_0123456789abcdef');
568
+ expect(result.siteUrl).toBe('https://my-preview.convex.site');
569
+ }
570
+ });
238
571
  });
239
572
  describe('.productbrain/config.json error handling', () => {
240
- it('warns but does not crash on invalid JSON', () => {
573
+ it('warns on invalid JSON, and still refuses — a damaged declaration is not an escape hatch', () => {
241
574
  const pbDir = resolve(tempDir, '.productbrain');
242
575
  mkdirSync(pbDir, { recursive: true });
243
576
  writeFileSync(resolve(pbDir, 'config.json'), '{ invalid json!!!');
244
- // Capture stderr
245
- const stderrWrite = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
246
- const result = resolveConfig();
247
- // Should have warned
248
- expect(stderrWrite).toHaveBeenCalledWith(expect.stringContaining('invalid JSON'));
249
- // Should fall through to default
250
- expect(result.apiKey).toBeUndefined();
251
- expect(result.source).toBe('default');
252
- stderrWrite.mockRestore();
577
+ // The file is unreadable but PRESENT, so the repo has still declared itself a project.
578
+ // Falling through here would hand the global profile a workspace precisely when the
579
+ // committed declaration is corrupt — the wrong-tenant substitution WP-694 S2 closes.
580
+ //
581
+ // No stderr assertion: the refusal is reached on the file's EXISTENCE, so nothing parses
582
+ // config.json on this path and the "invalid JSON" warning never fires. Refusing outright
583
+ // supersedes warning-then-using-someone-else's-workspace. The sibling test below still
584
+ // covers the warn-and-continue path for a malformed config.local.json.
585
+ expect(() => resolveConfig()).toThrow(/no tenant pin/i);
253
586
  });
254
587
  it('warns but does not crash on invalid config.local.json', () => {
255
588
  const pbDir = resolve(tempDir, '.productbrain');
@@ -292,5 +625,461 @@ describe('config resolution', () => {
292
625
  expect(result.source).toBe('project');
293
626
  });
294
627
  });
628
+ describe('setLocalProfilePin', () => {
629
+ it('creates config.local.json with the profile pin', async () => {
630
+ const { setLocalProfilePin, readLocalProjectConfig } = await import('../lib/config.js');
631
+ mkdirSync(resolve(tempDir, '.productbrain'), { recursive: true });
632
+ setLocalProfilePin(tempDir, 'preview-ws');
633
+ expect(readLocalProjectConfig()?.profile).toBe('preview-ws');
634
+ });
635
+ it('preserves sibling keys when updating the pin', async () => {
636
+ const { setLocalProfilePin } = await import('../lib/config.js');
637
+ const pbDir = resolve(tempDir, '.productbrain');
638
+ mkdirSync(pbDir, { recursive: true });
639
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'old', somethingElse: 1 }));
640
+ setLocalProfilePin(tempDir, 'new');
641
+ const parsed = JSON.parse(readFileSync(resolve(pbDir, 'config.local.json'), 'utf8'));
642
+ expect(parsed).toEqual({ profile: 'new', somethingElse: 1 });
643
+ });
644
+ it('overwrites corrupt JSON and writes only the new pin', async () => {
645
+ const { setLocalProfilePin } = await import('../lib/config.js');
646
+ const pbDir = resolve(tempDir, '.productbrain');
647
+ mkdirSync(pbDir, { recursive: true });
648
+ writeFileSync(resolve(pbDir, 'config.local.json'), '{ this is not valid json!!!');
649
+ setLocalProfilePin(tempDir, 'new');
650
+ const parsed = JSON.parse(readFileSync(resolve(pbDir, 'config.local.json'), 'utf8'));
651
+ expect(parsed).toEqual({ profile: 'new' });
652
+ });
653
+ });
654
+ describe('resolveEffectiveProfile', () => {
655
+ it('returns env source when PB_PROFILE is set', async () => {
656
+ process.env.PB_PROFILE = 'from-env';
657
+ const { resolveEffectiveProfile } = await import('../lib/config.js');
658
+ expect(resolveEffectiveProfile()).toEqual({ profile: 'from-env', source: 'env' });
659
+ });
660
+ it('returns local source when a repo pin exists', async () => {
661
+ const pbDir = resolve(tempDir, '.productbrain');
662
+ mkdirSync(pbDir, { recursive: true });
663
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'repo-pin' }));
664
+ const { resolveEffectiveProfile } = await import('../lib/config.js');
665
+ expect(resolveEffectiveProfile()).toEqual({ profile: 'repo-pin', source: 'local' });
666
+ });
667
+ // The pin's key is bound by resolveConfig() step 2b / loadEnv() step 1b before the profile
668
+ // system reads PB_PROFILE, so the env name never supplies the credential here. Reporting it
669
+ // would label every identity surface with a workspace the CLI is not operating against.
670
+ it('prefers the repo pin over PB_PROFILE, matching which profile supplies the credential', async () => {
671
+ process.env.PB_PROFILE = 'from-env';
672
+ const pbDir = resolve(tempDir, '.productbrain');
673
+ mkdirSync(pbDir, { recursive: true });
674
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'repo-pin' }));
675
+ const { resolveEffectiveProfile } = await import('../lib/config.js');
676
+ expect(resolveEffectiveProfile()).toEqual({ profile: 'repo-pin', source: 'local' });
677
+ });
678
+ it('returns global source from the active-profile file when no local pin', async () => {
679
+ const profiles = await import('../lib/profiles.js');
680
+ profiles.getGlobalActiveProfile.mockReturnValue('global-ws');
681
+ const { resolveEffectiveProfile } = await import('../lib/config.js');
682
+ expect(resolveEffectiveProfile()).toEqual({ profile: 'global-ws', source: 'global' });
683
+ });
684
+ it('returns none when nothing is configured', async () => {
685
+ const { resolveEffectiveProfile } = await import('../lib/config.js');
686
+ expect(resolveEffectiveProfile()).toEqual({ profile: null, source: 'none' });
687
+ });
688
+ it('returns default source when no env/local/global but default profile resolves', async () => {
689
+ // No PB_PROFILE env var (cleared by beforeEach)
690
+ // No config.local.json in tempDir (tempDir is fresh per beforeEach)
691
+ const profiles = await import('../lib/profiles.js');
692
+ profiles.getGlobalActiveProfile.mockReturnValue(null);
693
+ profiles.resolveNamedProfileConfig.mockReturnValue({ apiKey: 'pb_live_x' });
694
+ const { resolveEffectiveProfile } = await import('../lib/config.js');
695
+ expect(resolveEffectiveProfile()).toEqual({ profile: 'default', source: 'default' });
696
+ });
697
+ });
698
+ // ─── Preview binding (Slice B) ───────────────────────────────────────────────
699
+ describe('resolveConfig() — direct preview binding in config.local.json', () => {
700
+ it('returns preview key + siteUrl when config.local.json has a direct apiKey', () => {
701
+ const pbDir = resolve(tempDir, '.productbrain');
702
+ mkdirSync(pbDir, { recursive: true });
703
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
704
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
705
+ siteUrl: 'https://my-preview.convex.site',
706
+ preview: true,
707
+ workspaceName: 'Preview Workspace',
708
+ }));
709
+ resetConfigCache();
710
+ const result = resolveConfig();
711
+ expect(result.apiKey).toBe('pb_sk_preview_key_0123456789abcdef');
712
+ expect(result.siteUrl).toBe('https://my-preview.convex.site');
713
+ expect(result.source).toBe('project');
714
+ });
715
+ it('env var still wins over direct preview binding', () => {
716
+ process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_env_override';
717
+ process.env.CONVEX_SITE_URL = 'https://env.example.com';
718
+ const pbDir = resolve(tempDir, '.productbrain');
719
+ mkdirSync(pbDir, { recursive: true });
720
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
721
+ apiKey: 'pb_sk_preview_key_should_be_ignored',
722
+ siteUrl: 'https://my-preview.convex.site',
723
+ preview: true,
724
+ }));
725
+ resetConfigCache();
726
+ const result = resolveConfig();
727
+ expect(result.apiKey).toBe('pb_sk_env_override');
728
+ expect(result.siteUrl).toBe('https://env.example.com');
729
+ expect(result.source).toBe('env');
730
+ });
731
+ it('profile pin still works when no direct apiKey present', async () => {
732
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
733
+ resolveNamedProfileConfig.mockReturnValueOnce({
734
+ apiKey: 'pb_sk_profile_key',
735
+ siteUrl: 'https://profile.example.com',
736
+ });
737
+ const pbDir = resolve(tempDir, '.productbrain');
738
+ mkdirSync(pbDir, { recursive: true });
739
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'my-workspace' }));
740
+ resetConfigCache();
741
+ const result = resolveConfig();
742
+ expect(result.apiKey).toBe('pb_sk_profile_key');
743
+ expect(result.source).toBe('project');
744
+ });
745
+ it('rejects a preview binding whose apiKey does not start with API_KEY_PREFIX', () => {
746
+ const pbDir = resolve(tempDir, '.productbrain');
747
+ mkdirSync(pbDir, { recursive: true });
748
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
749
+ apiKey: 'sk_bad_prefix_key',
750
+ siteUrl: 'https://my-preview.convex.site',
751
+ preview: true,
752
+ }));
753
+ resetConfigCache();
754
+ // A present-but-malformed key is unusable, not absent — the refusal must say so, or the
755
+ // operator goes looking for a key that is sitting right there in the file.
756
+ expect(() => resolveConfig()).toThrow(/incomplete preview binding.*not a valid pb_sk_ key/i);
757
+ });
758
+ it('SF-3: does NOT bind a preview apiKey that has no siteUrl (never borrows config.json gateway)', () => {
759
+ const pbDir = resolve(tempDir, '.productbrain');
760
+ mkdirSync(pbDir, { recursive: true });
761
+ // Committed config.json pins the real-dev gateway.
762
+ writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'https://trustworthy-kangaroo-277.convex.site' }));
763
+ // Preview key present but its OWN siteUrl is absent (hand-edit / partial preview.json).
764
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ apiKey: 'pb_sk_preview_key_0123456789abcdef', preview: true }));
765
+ resetConfigCache();
766
+ // The preview key must NOT be bound or allowed to fall through. Pairing it with
767
+ // config.json's real-dev gateway would send a preview credential to the wrong deployment.
768
+ expect(() => resolveConfig()).toThrow(/incomplete preview binding.*missing deployment URL/i);
769
+ });
770
+ it('S5: an incomplete preview binding is diagnosed before a sibling profile pin', async () => {
771
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
772
+ resolveNamedProfileConfig.mockReturnValue(null);
773
+ const pbDir = resolve(tempDir, '.productbrain');
774
+ mkdirSync(pbDir, { recursive: true });
775
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
776
+ profile: 'repo-pin',
777
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
778
+ preview: true,
779
+ workspaceName: 'Preview Workspace',
780
+ }));
781
+ resetConfigCache();
782
+ expect(() => resolveConfig()).toThrow(/incomplete preview binding.*missing deployment URL/i);
783
+ expect(() => getConfig()).toThrow(/incomplete preview binding.*missing deployment URL/i);
784
+ });
785
+ // ── Marker-less bindings: the claim is the credential, not the `preview` stamp ──────────
786
+ //
787
+ // A config.local.json carrying an apiKey is asserting which workspace this repo talks to
788
+ // whether or not `pb:preview` stamped `preview: true` — a hand-written or partially-scrubbed
789
+ // file is exactly the case that must not be skipped.
790
+ it('binds a marker-less apiKey + siteUrl pair and does NOT defer to a sibling profile pin', async () => {
791
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
792
+ // A perfectly resolvable pin sits in the same file — it names a DIFFERENT tenant, so
793
+ // adopting it would silently retarget every read and write.
794
+ resolveNamedProfileConfig.mockReturnValue({
795
+ apiKey: 'pb_sk_sibling_pin_key',
796
+ siteUrl: 'https://sibling-pin.example.com',
797
+ });
798
+ const pbDir = resolve(tempDir, '.productbrain');
799
+ mkdirSync(pbDir, { recursive: true });
800
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
801
+ profile: 'sibling-pin',
802
+ apiKey: 'pb_sk_markerless_key_0123456789',
803
+ siteUrl: 'https://markerless.convex.site',
804
+ // no `preview: true` marker
805
+ }));
806
+ resetConfigCache();
807
+ const result = resolveConfig();
808
+ expect(result.apiKey).toBe('pb_sk_markerless_key_0123456789');
809
+ expect(result.siteUrl).toBe('https://markerless.convex.site');
810
+ expect(result.source).toBe('project');
811
+ });
812
+ it('refuses a marker-less apiKey with no siteUrl instead of resolving to the default gateway', () => {
813
+ const pbDir = resolve(tempDir, '.productbrain');
814
+ mkdirSync(pbDir, { recursive: true });
815
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ apiKey: 'pb_sk_markerless_key_0123456789' }));
816
+ resetConfigCache();
817
+ // Silently falling through would send this credential to the production gateway (STD-261).
818
+ expect(() => resolveConfig()).toThrow(/incomplete preview binding.*missing deployment URL/i);
819
+ });
820
+ it('S5: the marker-less refusal also holds through the loadEnv() cascade', () => {
821
+ const pbDir = resolve(tempDir, '.productbrain');
822
+ mkdirSync(pbDir, { recursive: true });
823
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ apiKey: 'pb_sk_markerless_key_0123456789' }));
824
+ resetConfigCache();
825
+ expect(() => getConfig()).toThrow(/incomplete preview binding.*missing deployment URL/i);
826
+ // The refusal must not leave a half-bound credential behind for the next caller.
827
+ expect(process.env.PRODUCTBRAIN_API_KEY).toBeUndefined();
828
+ });
829
+ // A present-but-non-string apiKey is a corrupt or hand-written binding, not an absent one.
830
+ // Treating it as absent would let the sibling profile pin supply a DIFFERENT tenant's
831
+ // credential — the workspace substitution this path exists to prevent.
832
+ it.each([
833
+ ['a number', 12345],
834
+ ['an empty string', ''],
835
+ ['a boolean', true],
836
+ ['an object', { key: 'pb_sk_nested' }],
837
+ ])('refuses a marker-less binding whose apiKey is %s, rather than adopting the sibling pin', async (_label, apiKey) => {
838
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
839
+ // A perfectly resolvable pin naming a DIFFERENT tenant sits in the same file.
840
+ resolveNamedProfileConfig.mockReturnValue({
841
+ apiKey: 'pb_sk_sibling_pin_key',
842
+ siteUrl: 'https://sibling-pin.example.com',
843
+ });
844
+ const pbDir = resolve(tempDir, '.productbrain');
845
+ mkdirSync(pbDir, { recursive: true });
846
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'sibling-pin', apiKey, siteUrl: 'https://markerless.convex.site' }));
847
+ resetConfigCache();
848
+ expect(() => resolveConfig()).toThrow(/not a valid pb_sk_ key/i);
849
+ });
850
+ it('treats an explicitly null apiKey as absent — JSON null means "no value"', async () => {
851
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
852
+ resolveNamedProfileConfig.mockReturnValue({
853
+ apiKey: 'pb_sk_pin_key',
854
+ siteUrl: 'https://pinned.example.com',
855
+ });
856
+ const pbDir = resolve(tempDir, '.productbrain');
857
+ mkdirSync(pbDir, { recursive: true });
858
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'pinned-workspace', apiKey: null }));
859
+ resetConfigCache();
860
+ const result = resolveConfig();
861
+ expect(result.apiKey).toBe('pb_sk_pin_key');
862
+ expect(result.source).toBe('project');
863
+ });
864
+ it('leaves the ordinary pin-only path untouched — the widened claim test must not swallow it', async () => {
865
+ const { resolveNamedProfileConfig } = await import('../lib/profiles.js');
866
+ resolveNamedProfileConfig.mockReturnValue({
867
+ apiKey: 'pb_sk_pin_only_key',
868
+ siteUrl: 'https://pinned-profile.example.com',
869
+ });
870
+ const pbDir = resolve(tempDir, '.productbrain');
871
+ mkdirSync(pbDir, { recursive: true });
872
+ // Committed config.json + a pin whose profile stores its own URL: the pin path's normal
873
+ // shape (pb connect writes the URL into the profile). config.json's siteUrl routes nothing.
874
+ writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: 'https://project-gateway.example.com' }));
875
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'pin-only-workspace' }));
876
+ resetConfigCache();
877
+ const result = resolveConfig();
878
+ expect(result.apiKey).toBe('pb_sk_pin_only_key');
879
+ expect(result.siteUrl).toBe('https://pinned-profile.example.com');
880
+ expect(result.source).toBe('project');
881
+ });
882
+ });
883
+ describe('readLocalProjectConfig() — apiKey validity', () => {
884
+ it('withholds a malformed apiKey and flags it so diagnostics can name the fault', async () => {
885
+ const pbDir = resolve(tempDir, '.productbrain');
886
+ mkdirSync(pbDir, { recursive: true });
887
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ apiKey: 'sk_bad_prefix_key', siteUrl: 'https://my-preview.convex.site' }));
888
+ const { readLocalProjectConfig } = await import('../lib/config.js');
889
+ const local = readLocalProjectConfig();
890
+ // Withheld from `apiKey` so it can never bind, but not reported as absent either.
891
+ expect(local?.apiKey).toBeUndefined();
892
+ expect(local?.apiKeyMalformed).toBe(true);
893
+ });
894
+ it('loads a valid apiKey with no malformed flag', async () => {
895
+ const pbDir = resolve(tempDir, '.productbrain');
896
+ mkdirSync(pbDir, { recursive: true });
897
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
898
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
899
+ siteUrl: 'https://my-preview.convex.site',
900
+ }));
901
+ const { readLocalProjectConfig } = await import('../lib/config.js');
902
+ const local = readLocalProjectConfig();
903
+ expect(local?.apiKey).toBe('pb_sk_preview_key_0123456789abcdef');
904
+ expect(local?.apiKeyMalformed).toBeUndefined();
905
+ });
906
+ });
907
+ describe('getPreviewBinding()', () => {
908
+ it('returns null when no config.local.json exists', async () => {
909
+ const { getPreviewBinding } = await import('../lib/config.js');
910
+ const result = getPreviewBinding();
911
+ expect(result).toBeNull();
912
+ });
913
+ it('returns null when config.local.json has no preview flag', async () => {
914
+ const pbDir = resolve(tempDir, '.productbrain');
915
+ mkdirSync(pbDir, { recursive: true });
916
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'some-workspace' }));
917
+ const { getPreviewBinding } = await import('../lib/config.js');
918
+ expect(getPreviewBinding()).toBeNull();
919
+ });
920
+ it('returns { workspaceName } when preview:true is set', async () => {
921
+ const pbDir = resolve(tempDir, '.productbrain');
922
+ mkdirSync(pbDir, { recursive: true });
923
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
924
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
925
+ siteUrl: 'https://my-preview.convex.site',
926
+ preview: true,
927
+ workspaceName: 'Preview Workspace',
928
+ }));
929
+ const { getPreviewBinding } = await import('../lib/config.js');
930
+ const result = getPreviewBinding();
931
+ expect(result).not.toBeNull();
932
+ expect(result?.workspaceName).toBe('Preview Workspace');
933
+ });
934
+ it('returns { workspaceName: null } when preview:true but no workspaceName', async () => {
935
+ const pbDir = resolve(tempDir, '.productbrain');
936
+ mkdirSync(pbDir, { recursive: true });
937
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
938
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
939
+ siteUrl: 'https://my-preview.convex.site',
940
+ preview: true,
941
+ }));
942
+ const { getPreviewBinding } = await import('../lib/config.js');
943
+ const result = getPreviewBinding();
944
+ expect(result).not.toBeNull();
945
+ expect(result?.workspaceName).toBeNull();
946
+ });
947
+ it('returns null when preview:true but no apiKey (SF-3 mirror)', async () => {
948
+ const pbDir = resolve(tempDir, '.productbrain');
949
+ mkdirSync(pbDir, { recursive: true });
950
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
951
+ siteUrl: 'https://my-preview.convex.site',
952
+ preview: true,
953
+ workspaceName: 'Preview Workspace',
954
+ }));
955
+ const { getPreviewBinding } = await import('../lib/config.js');
956
+ expect(getPreviewBinding()).toBeNull();
957
+ });
958
+ it('returns null when preview:true but no siteUrl (SF-3 mirror)', async () => {
959
+ const pbDir = resolve(tempDir, '.productbrain');
960
+ mkdirSync(pbDir, { recursive: true });
961
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
962
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
963
+ preview: true,
964
+ workspaceName: 'Preview Workspace',
965
+ }));
966
+ const { getPreviewBinding } = await import('../lib/config.js');
967
+ expect(getPreviewBinding()).toBeNull();
968
+ });
969
+ it('returns null when PRODUCTBRAIN_API_KEY env var overrides preview binding', async () => {
970
+ const pbDir = resolve(tempDir, '.productbrain');
971
+ mkdirSync(pbDir, { recursive: true });
972
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({
973
+ apiKey: 'pb_sk_preview_key_0123456789abcdef',
974
+ siteUrl: 'https://my-preview.convex.site',
975
+ preview: true,
976
+ workspaceName: 'Preview Workspace',
977
+ }));
978
+ process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_real_chain_key';
979
+ const { getPreviewBinding } = await import('../lib/config.js');
980
+ expect(getPreviewBinding()).toBeNull();
981
+ });
982
+ it('returns null when config.local.json has invalid JSON (never throws)', async () => {
983
+ const pbDir = resolve(tempDir, '.productbrain');
984
+ mkdirSync(pbDir, { recursive: true });
985
+ writeFileSync(resolve(pbDir, 'config.local.json'), '{ this is not valid json');
986
+ const stderrWrite = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
987
+ const { getPreviewBinding } = await import('../lib/config.js');
988
+ expect(() => getPreviewBinding()).not.toThrow();
989
+ expect(getPreviewBinding()).toBeNull();
990
+ stderrWrite.mockRestore();
991
+ });
992
+ });
993
+ // ── TEN-4500 / TASK-640: a key travels only with the site URL stored or exported beside it ──
994
+ //
995
+ // `.productbrain/config.json` is committed, so a cloned repo controls its siteUrl. A key from
996
+ // anywhere else must never be sent there: with no URL of its own it goes to DEFAULT_SITE_URL.
997
+ describe('a key travels only with its own site URL (TEN-4500)', () => {
998
+ const DEFAULT = 'https://gateway.productbrain.io';
999
+ const COMMITTED = 'https://cloned-repo.example.com';
1000
+ function commitProjectSiteUrl() {
1001
+ const pbDir = resolve(tempDir, '.productbrain');
1002
+ mkdirSync(pbDir, { recursive: true });
1003
+ writeFileSync(resolve(pbDir, 'config.json'), JSON.stringify({ siteUrl: COMMITTED }));
1004
+ return pbDir;
1005
+ }
1006
+ it('an exported key with no exported site URL is sent to DEFAULT_SITE_URL, never config.json siteUrl', () => {
1007
+ process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_env_key';
1008
+ commitProjectSiteUrl();
1009
+ expect(getConfig().siteUrl).toBe(DEFAULT);
1010
+ });
1011
+ it('loadEnv and resolveConfig name the same site URL for the same inputs', async () => {
1012
+ const { resolveNamedProfileConfig, resolveProfileConfig } = await import('../lib/profiles.js');
1013
+ const named = resolveNamedProfileConfig;
1014
+ const active = resolveProfileConfig;
1015
+ const cases = [
1016
+ {
1017
+ name: 'env key, no env URL, committed config.json',
1018
+ arrange: () => {
1019
+ process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_env_key';
1020
+ commitProjectSiteUrl();
1021
+ },
1022
+ expected: DEFAULT,
1023
+ },
1024
+ {
1025
+ name: 'env key with env URL, committed config.json',
1026
+ arrange: () => {
1027
+ process.env.PRODUCTBRAIN_API_KEY = 'pb_sk_env_key';
1028
+ process.env.CONVEX_SITE_URL = 'https://env.example.com';
1029
+ commitProjectSiteUrl();
1030
+ },
1031
+ expected: 'https://env.example.com',
1032
+ },
1033
+ {
1034
+ name: 'pinned profile with its own URL, exported URL, committed config.json',
1035
+ arrange: () => {
1036
+ named.mockReturnValue({ apiKey: 'pb_sk_pinned_key', siteUrl: 'https://pinned.example.com' });
1037
+ process.env.CONVEX_SITE_URL = 'https://env.example.com';
1038
+ const pbDir = commitProjectSiteUrl();
1039
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'product-brain' }));
1040
+ },
1041
+ expected: 'https://pinned.example.com',
1042
+ },
1043
+ {
1044
+ name: 'pinned profile with no URL, committed config.json',
1045
+ arrange: () => {
1046
+ named.mockReturnValue({ apiKey: 'pb_sk_pinned_key' });
1047
+ const pbDir = commitProjectSiteUrl();
1048
+ writeFileSync(resolve(pbDir, 'config.local.json'), JSON.stringify({ profile: 'product-brain' }));
1049
+ },
1050
+ expected: DEFAULT,
1051
+ },
1052
+ {
1053
+ name: 'unpinned profile with its own URL, exported URL',
1054
+ arrange: () => {
1055
+ active.mockReturnValue({ apiKey: 'pb_sk_profile_key', siteUrl: 'https://profile.example.com', profileName: 'p' });
1056
+ process.env.CONVEX_SITE_URL = 'https://env.example.com';
1057
+ },
1058
+ expected: 'https://profile.example.com',
1059
+ },
1060
+ {
1061
+ name: 'unpinned profile with no URL, exported URL',
1062
+ arrange: () => {
1063
+ active.mockReturnValue({ apiKey: 'pb_sk_profile_key', profileName: 'p' });
1064
+ process.env.CONVEX_SITE_URL = 'https://env.example.com';
1065
+ },
1066
+ expected: DEFAULT,
1067
+ },
1068
+ ];
1069
+ const observed = cases.map(({ name, arrange }) => {
1070
+ named.mockReset();
1071
+ active.mockReset();
1072
+ delete process.env.PRODUCTBRAIN_API_KEY;
1073
+ delete process.env.CONVEX_SITE_URL;
1074
+ rmSync(resolve(tempDir, '.productbrain'), { recursive: true, force: true });
1075
+ arrange();
1076
+ const resolved = resolveConfig().siteUrl;
1077
+ resetConfigCache();
1078
+ const loaded = getConfig().siteUrl;
1079
+ return { name, resolved, loaded };
1080
+ });
1081
+ expect(observed).toEqual(cases.map(({ name, expected }) => ({ name, resolved: expected, loaded: expected })));
1082
+ });
1083
+ });
295
1084
  });
296
1085
  //# sourceMappingURL=config.test.js.map