@productbrain/cli 0.1.0-beta.91 → 0.1.0-beta.914

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 (431) hide show
  1. package/dist/__tests__/audit.test.js +5 -0
  2. package/dist/__tests__/audit.test.js.map +1 -1
  3. package/dist/__tests__/authority-domains.test.d.ts +2 -0
  4. package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
  5. package/dist/__tests__/authority-domains.test.js +48 -0
  6. package/dist/__tests__/authority-domains.test.js.map +1 -0
  7. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  8. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  9. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  10. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  11. package/dist/__tests__/config.test.d.ts +1 -1
  12. package/dist/__tests__/config.test.js +410 -10
  13. package/dist/__tests__/config.test.js.map +1 -1
  14. package/dist/__tests__/constants.test.js +6 -1
  15. package/dist/__tests__/constants.test.js.map +1 -1
  16. package/dist/__tests__/envelope-contract.test.d.ts +15 -0
  17. package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
  18. package/dist/__tests__/envelope-contract.test.js +152 -0
  19. package/dist/__tests__/envelope-contract.test.js.map +1 -0
  20. package/dist/__tests__/errors.test.js +1 -0
  21. package/dist/__tests__/errors.test.js.map +1 -1
  22. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  23. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  24. package/dist/__tests__/handshake-augment.test.js +423 -0
  25. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  26. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  27. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  28. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  29. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  30. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  31. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  32. package/dist/__tests__/handshake-formatter.test.js +67 -0
  33. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  34. package/dist/__tests__/handshake-preview.test.js +688 -3
  35. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  36. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  37. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  38. package/dist/__tests__/handshake.e2e.test.js +1252 -0
  39. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  40. package/dist/__tests__/handshake.test.js +611 -2
  41. package/dist/__tests__/handshake.test.js.map +1 -1
  42. package/dist/__tests__/manifest.test.js +118 -1
  43. package/dist/__tests__/manifest.test.js.map +1 -1
  44. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  45. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  46. package/dist/__tests__/orient.test.js +135 -8
  47. package/dist/__tests__/orient.test.js.map +1 -1
  48. package/dist/__tests__/perimeter.test.d.ts +2 -0
  49. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  50. package/dist/__tests__/perimeter.test.js +165 -0
  51. package/dist/__tests__/perimeter.test.js.map +1 -0
  52. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  53. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  54. package/dist/__tests__/personal-layer.test.js +12 -48
  55. package/dist/__tests__/personal-layer.test.js.map +1 -1
  56. package/dist/__tests__/profiles.test.js +153 -5
  57. package/dist/__tests__/profiles.test.js.map +1 -1
  58. package/dist/__tests__/promote.test.js +71 -2
  59. package/dist/__tests__/promote.test.js.map +1 -1
  60. package/dist/__tests__/session-state-machine.test.js +45 -1
  61. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  62. package/dist/__tests__/session-switch.test.d.ts +2 -0
  63. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  64. package/dist/__tests__/session-switch.test.js +129 -0
  65. package/dist/__tests__/session-switch.test.js.map +1 -0
  66. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  67. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  68. package/dist/__tests__/setup-ingest.test.js +71 -0
  69. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  70. package/dist/__tests__/setup-resolver.test.d.ts +14 -0
  71. package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
  72. package/dist/__tests__/setup-resolver.test.js +228 -0
  73. package/dist/__tests__/setup-resolver.test.js.map +1 -0
  74. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  75. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  76. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  77. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  78. package/dist/__tests__/update-check.test.d.ts +2 -0
  79. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  80. package/dist/__tests__/update-check.test.js +56 -0
  81. package/dist/__tests__/update-check.test.js.map +1 -0
  82. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  83. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  84. package/dist/__tests__/upgrade-runner.test.js +42 -0
  85. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  86. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  87. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  88. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  89. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  90. package/dist/__tests__/workspace.test.js +32 -12
  91. package/dist/__tests__/workspace.test.js.map +1 -1
  92. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  93. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  94. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  95. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  96. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  97. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  98. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  99. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  100. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  101. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  102. package/dist/commands/__tests__/setup-state.test.js +194 -0
  103. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  104. package/dist/commands/admin/seed.d.ts +46 -2
  105. package/dist/commands/admin/seed.d.ts.map +1 -1
  106. package/dist/commands/admin/seed.js +475 -33
  107. package/dist/commands/admin/seed.js.map +1 -1
  108. package/dist/commands/admin/seed.test.d.ts +5 -0
  109. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  110. package/dist/commands/admin/seed.test.js +67 -2
  111. package/dist/commands/admin/seed.test.js.map +1 -1
  112. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  113. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  114. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  115. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  116. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  117. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  118. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  119. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  120. package/dist/commands/audit.d.ts.map +1 -1
  121. package/dist/commands/audit.js +30 -3
  122. package/dist/commands/audit.js.map +1 -1
  123. package/dist/commands/authority-domains.d.ts +146 -0
  124. package/dist/commands/authority-domains.d.ts.map +1 -0
  125. package/dist/commands/authority-domains.js +282 -0
  126. package/dist/commands/authority-domains.js.map +1 -0
  127. package/dist/commands/capture.d.ts.map +1 -1
  128. package/dist/commands/capture.js +3 -2
  129. package/dist/commands/capture.js.map +1 -1
  130. package/dist/commands/codex-prep.d.ts +1 -0
  131. package/dist/commands/codex-prep.d.ts.map +1 -1
  132. package/dist/commands/codex-prep.js +10 -7
  133. package/dist/commands/codex-prep.js.map +1 -1
  134. package/dist/commands/connect-config.test.d.ts +2 -0
  135. package/dist/commands/connect-config.test.d.ts.map +1 -0
  136. package/dist/commands/connect-config.test.js +44 -0
  137. package/dist/commands/connect-config.test.js.map +1 -0
  138. package/dist/commands/connect-context.d.ts +45 -0
  139. package/dist/commands/connect-context.d.ts.map +1 -0
  140. package/dist/commands/connect-context.js +64 -0
  141. package/dist/commands/connect-context.js.map +1 -0
  142. package/dist/commands/connect-context.test.d.ts +2 -0
  143. package/dist/commands/connect-context.test.d.ts.map +1 -0
  144. package/dist/commands/connect-context.test.js +110 -0
  145. package/dist/commands/connect-context.test.js.map +1 -0
  146. package/dist/commands/connect-handoff.d.ts +51 -0
  147. package/dist/commands/connect-handoff.d.ts.map +1 -0
  148. package/dist/commands/connect-handoff.js +70 -0
  149. package/dist/commands/connect-handoff.js.map +1 -0
  150. package/dist/commands/connect-integration.test.js +29 -12
  151. package/dist/commands/connect-integration.test.js.map +1 -1
  152. package/dist/commands/connect-screens.d.ts +6 -4
  153. package/dist/commands/connect-screens.d.ts.map +1 -1
  154. package/dist/commands/connect-screens.js +30 -19
  155. package/dist/commands/connect-screens.js.map +1 -1
  156. package/dist/commands/connect.d.ts +21 -6
  157. package/dist/commands/connect.d.ts.map +1 -1
  158. package/dist/commands/connect.js +78 -51
  159. package/dist/commands/connect.js.map +1 -1
  160. package/dist/commands/connect.test.js +64 -1
  161. package/dist/commands/connect.test.js.map +1 -1
  162. package/dist/commands/doctor.d.ts.map +1 -1
  163. package/dist/commands/doctor.js +68 -3
  164. package/dist/commands/doctor.js.map +1 -1
  165. package/dist/commands/doctor.test.js +131 -0
  166. package/dist/commands/doctor.test.js.map +1 -1
  167. package/dist/commands/handshake.d.ts +194 -2
  168. package/dist/commands/handshake.d.ts.map +1 -1
  169. package/dist/commands/handshake.js +1738 -44
  170. package/dist/commands/handshake.js.map +1 -1
  171. package/dist/commands/method.d.ts.map +1 -1
  172. package/dist/commands/method.js +3 -0
  173. package/dist/commands/method.js.map +1 -1
  174. package/dist/commands/migrate-setup.d.ts +18 -0
  175. package/dist/commands/migrate-setup.d.ts.map +1 -0
  176. package/dist/commands/migrate-setup.js +198 -0
  177. package/dist/commands/migrate-setup.js.map +1 -0
  178. package/dist/commands/orient.d.ts +15 -2
  179. package/dist/commands/orient.d.ts.map +1 -1
  180. package/dist/commands/orient.js +86 -4
  181. package/dist/commands/orient.js.map +1 -1
  182. package/dist/commands/profile.d.ts +11 -1
  183. package/dist/commands/profile.d.ts.map +1 -1
  184. package/dist/commands/profile.js +109 -26
  185. package/dist/commands/profile.js.map +1 -1
  186. package/dist/commands/promote.d.ts.map +1 -1
  187. package/dist/commands/promote.js +25 -2
  188. package/dist/commands/promote.js.map +1 -1
  189. package/dist/commands/relate.d.ts.map +1 -1
  190. package/dist/commands/relate.js +13 -0
  191. package/dist/commands/relate.js.map +1 -1
  192. package/dist/commands/session.d.ts.map +1 -1
  193. package/dist/commands/session.js +55 -18
  194. package/dist/commands/session.js.map +1 -1
  195. package/dist/commands/setup-audit.d.ts +59 -0
  196. package/dist/commands/setup-audit.d.ts.map +1 -0
  197. package/dist/commands/setup-audit.js +250 -0
  198. package/dist/commands/setup-audit.js.map +1 -0
  199. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  200. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  201. package/dist/commands/setup-detect-surfaces.js +76 -0
  202. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  203. package/dist/commands/setup-ingest.d.ts +17 -0
  204. package/dist/commands/setup-ingest.d.ts.map +1 -0
  205. package/dist/commands/setup-ingest.js +226 -0
  206. package/dist/commands/setup-ingest.js.map +1 -0
  207. package/dist/commands/setup-resolver.d.ts +58 -0
  208. package/dist/commands/setup-resolver.d.ts.map +1 -0
  209. package/dist/commands/setup-resolver.js +150 -0
  210. package/dist/commands/setup-resolver.js.map +1 -0
  211. package/dist/commands/setup-state.d.ts +42 -0
  212. package/dist/commands/setup-state.d.ts.map +1 -0
  213. package/dist/commands/setup-state.js +93 -0
  214. package/dist/commands/setup-state.js.map +1 -0
  215. package/dist/commands/setup.d.ts +17 -9
  216. package/dist/commands/setup.d.ts.map +1 -1
  217. package/dist/commands/setup.js +52 -131
  218. package/dist/commands/setup.js.map +1 -1
  219. package/dist/commands/upgrade.d.ts +5 -0
  220. package/dist/commands/upgrade.d.ts.map +1 -0
  221. package/dist/commands/upgrade.js +89 -0
  222. package/dist/commands/upgrade.js.map +1 -0
  223. package/dist/commands/whoami.d.ts +12 -0
  224. package/dist/commands/whoami.d.ts.map +1 -0
  225. package/dist/commands/whoami.js +70 -0
  226. package/dist/commands/whoami.js.map +1 -0
  227. package/dist/commands/whoami.test.d.ts +2 -0
  228. package/dist/commands/whoami.test.d.ts.map +1 -0
  229. package/dist/commands/whoami.test.js +50 -0
  230. package/dist/commands/whoami.test.js.map +1 -0
  231. package/dist/commands/workspace.d.ts +74 -2
  232. package/dist/commands/workspace.d.ts.map +1 -1
  233. package/dist/commands/workspace.js +26 -2
  234. package/dist/commands/workspace.js.map +1 -1
  235. package/dist/formatters/audit.d.ts +6 -0
  236. package/dist/formatters/audit.d.ts.map +1 -1
  237. package/dist/formatters/audit.js.map +1 -1
  238. package/dist/formatters/handshake.d.ts +19 -3
  239. package/dist/formatters/handshake.d.ts.map +1 -1
  240. package/dist/formatters/handshake.js +48 -13
  241. package/dist/formatters/handshake.js.map +1 -1
  242. package/dist/formatters/orient.d.ts +50 -4
  243. package/dist/formatters/orient.d.ts.map +1 -1
  244. package/dist/formatters/orient.js +64 -16
  245. package/dist/formatters/orient.js.map +1 -1
  246. package/dist/formatters/session.js +1 -1
  247. package/dist/formatters/session.js.map +1 -1
  248. package/dist/generators/adapters.js +2 -2
  249. package/dist/generators/boundary-manifest.d.ts +29 -0
  250. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  251. package/dist/generators/boundary-manifest.js +183 -0
  252. package/dist/generators/boundary-manifest.js.map +1 -0
  253. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  254. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  255. package/dist/generators/boundary-manifest.test.js +91 -0
  256. package/dist/generators/boundary-manifest.test.js.map +1 -0
  257. package/dist/generators/context-md.js +6 -6
  258. package/dist/generators/context-md.js.map +1 -1
  259. package/dist/generators/manifest.d.ts +78 -0
  260. package/dist/generators/manifest.d.ts.map +1 -1
  261. package/dist/generators/manifest.js +125 -14
  262. package/dist/generators/manifest.js.map +1 -1
  263. package/dist/generators/portable-knowledge.d.ts +6 -12
  264. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  265. package/dist/generators/portable-knowledge.js +2 -19
  266. package/dist/generators/portable-knowledge.js.map +1 -1
  267. package/dist/generators/region-projections.d.ts +18 -0
  268. package/dist/generators/region-projections.d.ts.map +1 -0
  269. package/dist/generators/region-projections.js +49 -0
  270. package/dist/generators/region-projections.js.map +1 -0
  271. package/dist/generators/region-projections.test.d.ts +2 -0
  272. package/dist/generators/region-projections.test.d.ts.map +1 -0
  273. package/dist/generators/region-projections.test.js +63 -0
  274. package/dist/generators/region-projections.test.js.map +1 -0
  275. package/dist/generators/region.d.ts +24 -0
  276. package/dist/generators/region.d.ts.map +1 -0
  277. package/dist/generators/region.js +87 -0
  278. package/dist/generators/region.js.map +1 -0
  279. package/dist/generators/region.test.d.ts +2 -0
  280. package/dist/generators/region.test.d.ts.map +1 -0
  281. package/dist/generators/region.test.js +126 -0
  282. package/dist/generators/region.test.js.map +1 -0
  283. package/dist/generators/surface-profiles.d.ts +1 -2
  284. package/dist/generators/surface-profiles.d.ts.map +1 -1
  285. package/dist/generators/surface-profiles.js.map +1 -1
  286. package/dist/index.js +242 -26
  287. package/dist/index.js.map +1 -1
  288. package/dist/lib/activation.d.ts.map +1 -1
  289. package/dist/lib/activation.js +3 -3
  290. package/dist/lib/activation.js.map +1 -1
  291. package/dist/lib/activation.test.js +3 -3
  292. package/dist/lib/activation.test.js.map +1 -1
  293. package/dist/lib/canonicalRefs.d.ts +141 -0
  294. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  295. package/dist/lib/canonicalRefs.js +150 -0
  296. package/dist/lib/canonicalRefs.js.map +1 -0
  297. package/dist/lib/client.d.ts.map +1 -1
  298. package/dist/lib/client.js +27 -17
  299. package/dist/lib/client.js.map +1 -1
  300. package/dist/lib/config.d.ts +98 -9
  301. package/dist/lib/config.d.ts.map +1 -1
  302. package/dist/lib/config.js +231 -44
  303. package/dist/lib/config.js.map +1 -1
  304. package/dist/lib/connectKeyLabel.d.ts +9 -0
  305. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  306. package/dist/lib/connectKeyLabel.js +12 -0
  307. package/dist/lib/connectKeyLabel.js.map +1 -0
  308. package/dist/lib/constants.d.ts +2 -0
  309. package/dist/lib/constants.d.ts.map +1 -1
  310. package/dist/lib/constants.js +2 -0
  311. package/dist/lib/constants.js.map +1 -1
  312. package/dist/lib/errors.d.ts +3 -0
  313. package/dist/lib/errors.d.ts.map +1 -1
  314. package/dist/lib/errors.js +3 -0
  315. package/dist/lib/errors.js.map +1 -1
  316. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  317. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  318. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  319. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  320. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  321. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  322. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  323. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  324. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  325. package/dist/lib/onboarding-path-b.js +0 -1
  326. package/dist/lib/onboarding-path-b.js.map +1 -1
  327. package/dist/lib/onboarding-shared.d.ts +0 -1
  328. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  329. package/dist/lib/onboarding-shared.js +1 -17
  330. package/dist/lib/onboarding-shared.js.map +1 -1
  331. package/dist/lib/profiles.d.ts +3 -1
  332. package/dist/lib/profiles.d.ts.map +1 -1
  333. package/dist/lib/profiles.js +9 -6
  334. package/dist/lib/profiles.js.map +1 -1
  335. package/dist/lib/session.d.ts +10 -0
  336. package/dist/lib/session.d.ts.map +1 -1
  337. package/dist/lib/session.js +14 -0
  338. package/dist/lib/session.js.map +1 -1
  339. package/dist/lib/update-check.d.ts +20 -0
  340. package/dist/lib/update-check.d.ts.map +1 -1
  341. package/dist/lib/update-check.js +122 -21
  342. package/dist/lib/update-check.js.map +1 -1
  343. package/dist/lib/upgrade-runner.d.ts +21 -0
  344. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  345. package/dist/lib/upgrade-runner.js +109 -0
  346. package/dist/lib/upgrade-runner.js.map +1 -0
  347. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  348. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  349. package/dist/lib/workspaceVocabCache.js +98 -0
  350. package/dist/lib/workspaceVocabCache.js.map +1 -0
  351. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  352. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  353. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  354. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  355. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  356. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  357. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  358. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  359. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  360. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  361. package/dist/setup/__tests__/state-machine.test.js +341 -0
  362. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  363. package/dist/setup/detect-surfaces.d.ts +21 -0
  364. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  365. package/dist/setup/detect-surfaces.js +39 -0
  366. package/dist/setup/detect-surfaces.js.map +1 -0
  367. package/dist/setup/manifest-writer.d.ts +17 -0
  368. package/dist/setup/manifest-writer.d.ts.map +1 -0
  369. package/dist/setup/manifest-writer.js +153 -0
  370. package/dist/setup/manifest-writer.js.map +1 -0
  371. package/dist/setup/perimeter.d.ts +72 -0
  372. package/dist/setup/perimeter.d.ts.map +1 -0
  373. package/dist/setup/perimeter.js +128 -0
  374. package/dist/setup/perimeter.js.map +1 -0
  375. package/dist/setup/state-machine.d.ts +67 -0
  376. package/dist/setup/state-machine.d.ts.map +1 -0
  377. package/dist/setup/state-machine.js +124 -0
  378. package/dist/setup/state-machine.js.map +1 -0
  379. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  380. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  381. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  382. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  383. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  384. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  385. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  386. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  387. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  388. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  389. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  390. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  391. package/dist/surfaces/adapter.d.ts +70 -0
  392. package/dist/surfaces/adapter.d.ts.map +1 -0
  393. package/dist/surfaces/adapter.js +2 -0
  394. package/dist/surfaces/adapter.js.map +1 -0
  395. package/dist/surfaces/adapters/claude.d.ts +3 -0
  396. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  397. package/dist/surfaces/adapters/claude.js +67 -0
  398. package/dist/surfaces/adapters/claude.js.map +1 -0
  399. package/dist/surfaces/adapters/codex.d.ts +3 -0
  400. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  401. package/dist/surfaces/adapters/codex.js +61 -0
  402. package/dist/surfaces/adapters/codex.js.map +1 -0
  403. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  404. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  405. package/dist/surfaces/adapters/copilot.js +59 -0
  406. package/dist/surfaces/adapters/copilot.js.map +1 -0
  407. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  408. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  409. package/dist/surfaces/adapters/cursor.js +78 -0
  410. package/dist/surfaces/adapters/cursor.js.map +1 -0
  411. package/dist/surfaces/registry.d.ts +58 -2
  412. package/dist/surfaces/registry.d.ts.map +1 -1
  413. package/dist/surfaces/registry.js +82 -7
  414. package/dist/surfaces/registry.js.map +1 -1
  415. package/dist/surfaces/telemetry.d.ts +17 -0
  416. package/dist/surfaces/telemetry.d.ts.map +1 -0
  417. package/dist/surfaces/telemetry.js +31 -0
  418. package/dist/surfaces/telemetry.js.map +1 -0
  419. package/package.json +2 -1
  420. package/dist/__tests__/setup.test.d.ts +0 -2
  421. package/dist/__tests__/setup.test.d.ts.map +0 -1
  422. package/dist/__tests__/setup.test.js +0 -141
  423. package/dist/__tests__/setup.test.js.map +0 -1
  424. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  425. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  426. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  427. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  428. package/dist/lib/onboarding-phases.d.ts +0 -9
  429. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  430. package/dist/lib/onboarding-phases.js +0 -120
  431. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -0,0 +1,126 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { describe, it, expect } from 'vitest';
5
+ import { MARKER } from './adapters.js';
6
+ import { REGION_START, REGION_END, REGION_OPT_OUT, classifyAdapterFile, detectEol, spliceAppend, spliceReplace, } from './region.js';
7
+ describe('region sentinels', () => {
8
+ it('are disjoint from the whole-file MARKER (both directions)', () => {
9
+ expect(REGION_START.includes(MARKER)).toBe(false);
10
+ expect(REGION_END.includes(MARKER)).toBe(false);
11
+ expect(MARKER.includes(REGION_START)).toBe(false);
12
+ expect(MARKER.includes(REGION_END)).toBe(false);
13
+ });
14
+ it('opt-out sentinel is disjoint from MARKER and the region sentinels', () => {
15
+ expect(REGION_OPT_OUT.includes(MARKER)).toBe(false);
16
+ expect(REGION_START.includes(REGION_OPT_OUT)).toBe(false);
17
+ expect(REGION_END.includes(REGION_OPT_OUT)).toBe(false);
18
+ });
19
+ });
20
+ describe('detectEol', () => {
21
+ it('returns LF for empty / no-newline / LF-dominant', () => {
22
+ expect(detectEol('')).toBe('\n');
23
+ expect(detectEol('one line')).toBe('\n');
24
+ expect(detectEol('a\nb\nc\n')).toBe('\n');
25
+ });
26
+ it('returns CRLF when CRLF-dominant', () => {
27
+ expect(detectEol('a\r\nb\r\nc\r\n')).toBe('\r\n');
28
+ });
29
+ it('returns LF when CRLF and lone-LF counts tie (tie-breaks to LF)', () => {
30
+ expect(detectEol('a\r\nb\n')).toBe('\n');
31
+ });
32
+ });
33
+ describe('classifyAdapterFile', () => {
34
+ const region = `${REGION_START}\n## x\n${REGION_END}`;
35
+ it('pb-managed when MARKER present (even with sentinel-looking text)', () => {
36
+ expect(classifyAdapterFile(`<!-- ${MARKER} -->\n${region}`)).toBe('pb-managed');
37
+ });
38
+ it('augmentable when no MARKER and no sentinels', () => {
39
+ expect(classifyAdapterFile('# my file\n')).toBe('augmentable');
40
+ });
41
+ it('region-present for exactly one balanced pair', () => {
42
+ expect(classifyAdapterFile(`# mine\n\n${region}\n`)).toBe('region-present');
43
+ });
44
+ it('malformed: start without end', () => {
45
+ expect(classifyAdapterFile(`# mine\n${REGION_START}\n`)).toBe('malformed');
46
+ });
47
+ it('malformed: end without start', () => {
48
+ expect(classifyAdapterFile(`# mine\n${REGION_END}\n`)).toBe('malformed');
49
+ });
50
+ it('malformed: duplicate starts', () => {
51
+ expect(classifyAdapterFile(`${REGION_START}\n${REGION_START}\n${REGION_END}`)).toBe('malformed');
52
+ });
53
+ it('malformed: duplicate ends', () => {
54
+ expect(classifyAdapterFile(`${REGION_START}\n${REGION_END}\n${REGION_END}`)).toBe('malformed');
55
+ });
56
+ it('malformed: end before start', () => {
57
+ expect(classifyAdapterFile(`${REGION_END}\nx\n${REGION_START}`)).toBe('malformed');
58
+ });
59
+ it('opt-out when the pb:no-augment sentinel is present (no MARKER)', () => {
60
+ expect(classifyAdapterFile(`# constitution\n${REGION_OPT_OUT}\n`)).toBe('opt-out');
61
+ });
62
+ it('opt-out wins over an existing region (user froze the file)', () => {
63
+ expect(classifyAdapterFile(`${REGION_OPT_OUT}\n${region}`)).toBe('opt-out');
64
+ });
65
+ it('opt-out wins over malformed sentinels (decline beats refusal)', () => {
66
+ expect(classifyAdapterFile(`${REGION_OPT_OUT}\n${REGION_START}\n(no end)\n`)).toBe('opt-out');
67
+ });
68
+ it('MARKER still wins over opt-out (whole-file pb-managed precedence)', () => {
69
+ expect(classifyAdapterFile(`<!-- ${MARKER} -->\n${REGION_OPT_OUT}\n`)).toBe('pb-managed');
70
+ });
71
+ });
72
+ describe('spliceAppend (never strips user bytes)', () => {
73
+ const region = `${REGION_START}\n## x\n${REGION_END}`;
74
+ it('empty/whitespace-only → region only (identical for both)', () => {
75
+ expect(spliceAppend('', region, '\n')).toBe(region + '\n');
76
+ expect(spliceAppend(' \n\n', region, '\n')).toBe(region + '\n');
77
+ });
78
+ it('no trailing newline → adds blank-line separator', () => {
79
+ expect(spliceAppend('last line', region, '\n')).toBe(`last line\n\n${region}\n`);
80
+ });
81
+ it('one trailing newline → one more for a blank line', () => {
82
+ expect(spliceAppend('body\n', region, '\n')).toBe(`body\n\n${region}\n`);
83
+ });
84
+ it('two+ trailing newlines → preserved verbatim, no extra separator', () => {
85
+ expect(spliceAppend('body\n\n\n', region, '\n')).toBe(`body\n\n\n${region}\n`);
86
+ });
87
+ it('exactly two trailing newlines → no extra separator', () => {
88
+ expect(spliceAppend('body\n\n', region, '\n')).toBe(`body\n\n${region}\n`);
89
+ });
90
+ it('CRLF file → region rendered + separated with CRLF; user bytes preserved', () => {
91
+ expect(spliceAppend('a\r\n', region, '\r\n')).toBe(`a\r\n\r\n${region}\r\n`);
92
+ });
93
+ });
94
+ describe('spliceReplace (only between sentinels; surrounding bytes verbatim)', () => {
95
+ it('replaces region body, preserves prefix + suffix byte-for-byte', () => {
96
+ const before = '# mine\nkeep me\n\n';
97
+ const after = '\nmore user text\n';
98
+ const oldRegion = `${REGION_START}\nOLD\n${REGION_END}`;
99
+ const newRegion = `${REGION_START}\nNEW\n${REGION_END}`;
100
+ const disk = before + oldRegion + after;
101
+ expect(spliceReplace(disk, newRegion)).toBe(before + newRegion + after);
102
+ });
103
+ });
104
+ describe('append → replace convergence (idempotency)', () => {
105
+ it('appending once then replacing with identical region is byte-stable', () => {
106
+ const region = `${REGION_START}\n## x\n${REGION_END}`;
107
+ const appended = spliceAppend('# mine\nbody\n', region, '\n');
108
+ expect(classifyAdapterFile(appended)).toBe('region-present');
109
+ expect(spliceReplace(appended, region)).toBe(appended);
110
+ });
111
+ });
112
+ // Reads the ACTUAL committed constitution files (not a copy of the sentinel string), so it catches
113
+ // drift in EITHER REGION_OPT_OUT or the files themselves — the exact bug class where a paraphrased
114
+ // comment was not a substring of the literal sentinel and the files would have been spliced anyway.
115
+ describe('committed constitution declines augmentation (TEN-2155 governance regression)', () => {
116
+ // This test lives at <repo>/packages/cli/src/generators — walk up 4 to the repo root.
117
+ const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', '..');
118
+ for (const file of ['CLAUDE.md', 'AGENTS.md']) {
119
+ it(`${file} carries the literal opt-out sentinel and classifies 'opt-out'`, () => {
120
+ const content = readFileSync(join(repoRoot, file), 'utf8');
121
+ expect(content.includes(REGION_OPT_OUT), `${file} must contain the literal sentinel ${JSON.stringify(REGION_OPT_OUT)}`).toBe(true);
122
+ expect(classifyAdapterFile(content), `${file} must classify 'opt-out' so handshake never splices it`).toBe('opt-out');
123
+ });
124
+ }
125
+ });
126
+ //# sourceMappingURL=region.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region.test.js","sourceRoot":"","sources":["../../src/generators/region.test.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,7 @@
4
4
  * BET-270 Slice 0: type system + registry only. Generators accept but do not yet use the profile.
5
5
  * BET-270 Slice 4: pluggable surface registration + fallback.
6
6
  */
7
- import type { TargetName } from './portable-knowledge.js';
8
- export type { TargetName };
7
+ export type TargetName = 'cursor' | 'claude' | 'copilot' | 'codex';
9
8
  export interface SurfaceProfile {
10
9
  /** How the agent executes work in this surface. */
11
10
  executionModel: 'batch' | 'interactive' | 'passive';
@@ -1 +1 @@
1
- {"version":3,"file":"surface-profiles.d.ts","sourceRoot":"","sources":["../../src/generators/surface-profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,YAAY,EAAE,UAAU,EAAE,CAAC;AAI3B,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,cAAc,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC;IACpD,8EAA8E;IAC9E,MAAM,EAAE,YAAY,GAAG,aAAa,CAAC;IACrC,oDAAoD;IACpD,YAAY,EAAE,WAAW,GAAG,gBAAgB,GAAG,YAAY,CAAC;IAC5D,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,aAAa,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACrD;AAID,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,CA6B/D,CAAC;AAKF;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,cAAc,CAWlF;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAY3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAKpE"}
1
+ {"version":3,"file":"surface-profiles.d.ts","sourceRoot":"","sources":["../../src/generators/surface-profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,cAAc,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC;IACpD,8EAA8E;IAC9E,MAAM,EAAE,YAAY,GAAG,aAAa,CAAC;IACrC,oDAAoD;IACpD,YAAY,EAAE,WAAW,GAAG,gBAAgB,GAAG,YAAY,CAAC;IAC5D,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,aAAa,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACrD;AAID,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,CA6B/D,CAAC;AAKF;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,cAAc,CAWlF;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAY3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAKpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"surface-profiles.js","sourceRoot":"","sources":["../../src/generators/surface-profiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface-profiles.js","sourceRoot":"","sources":["../../src/generators/surface-profiles.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,6 +17,9 @@ import { runGet, runGetMany } from './commands/get.js';
17
17
  import { runConnect } from './commands/connect.js';
18
18
  import { runLogin } from './commands/login.js';
19
19
  import { runSetup } from './commands/setup.js';
20
+ import { runSetupDetectSurfaces, formatDetectSurfacesSummary } from './commands/setup-detect-surfaces.js';
21
+ import { runSetupState } from './commands/setup-state.js';
22
+ import { runSetupAudit } from './commands/setup-audit.js';
20
23
  import { runOrient } from './commands/orient.js';
21
24
  import { runSearch } from './commands/search.js';
22
25
  import { runHandshake, runHandshakeInit } from './commands/handshake.js';
@@ -41,7 +44,10 @@ import { runVerify } from './commands/verify.js';
41
44
  import { runCodexPrep } from './commands/codex-prep.js';
42
45
  import { runCollectionsList, runCollectionsGet, runCollectionsAudit, runCollectionsExport } from './commands/collections.js';
43
46
  import { runWorkspaceVerify, runWorkspaceRepair, runDefinitionsDiff } from './commands/workspace.js';
47
+ import { runAuthorityDomainsActivateCutover, runAuthorityDomainsDeactivateCutover, runAuthorityDomainsBenchmark, runAuthorityDomainsDiscardPending, runAuthorityDomainsPropose, runAuthorityDomainsRatify, runAuthorityDomainsReadiness, runAuthorityDomainsRecordSample, runAuthorityDomainsReject, runAuthorityDomainsReview, runAuthorityDomainsPrincipleDistribution, } from './commands/authority-domains.js';
44
48
  import { runDoctor } from './commands/doctor.js';
49
+ import { runWhoami } from './commands/whoami.js';
50
+ import { runUpgrade } from './commands/upgrade.js';
45
51
  import { runProfileList, runProfileCreate, runProfileUse, runProfileDelete } from './commands/profile.js';
46
52
  import { runInit } from './commands/init.js';
47
53
  import { runMethodList, runMethodShow, runMethodDiff, runMethodPublish } from './commands/method.js';
@@ -49,10 +55,56 @@ import { createAdminCommand } from './commands/admin/index.js';
49
55
  import { runUsage } from './commands/usage.js';
50
56
  import { GLOSSARY, formatGlossary } from './lib/glossary.js';
51
57
  import { API_KEY_PREFIX } from './lib/tokenConstants.js';
52
- import { hint, heading, bold, dim, green, icons } from './lib/style.js';
58
+ import { hint, heading, bold, dim, green, icons, yellow } from './lib/style.js';
59
+ import { getPreviewBinding } from './lib/config.js';
53
60
  import { checkForUpdate } from './lib/update-check.js';
61
+ import { UPGRADE_COMMAND } from './lib/constants.js';
54
62
  import { resolveSetupState, detectRenderTier } from './lib/state.js';
55
63
  const program = new Command();
64
+ /**
65
+ * Top-level Chain-write commands that receive the throwaway-writes advisory in
66
+ * addition to the PREVIEW banner. Each is registered directly on `program`, so
67
+ * `actionCommand.name()` matches verbatim. We gate on top-level (parent === program)
68
+ * to avoid false positives from nested commands whose leaf name collides
69
+ * (e.g. `pb workspace verify`, which is a health check, not a Chain write).
70
+ */
71
+ const PREVIEW_WRITE_COMMANDS = new Set([
72
+ 'capture',
73
+ 'update',
74
+ 'verify',
75
+ 'promote',
76
+ 'relate',
77
+ 'unrelate',
78
+ 'ingest',
79
+ 'accept',
80
+ 'reject',
81
+ ]);
82
+ /**
83
+ * Print a loud PREVIEW banner to stderr when pb is bound to a throwaway preview.
84
+ *
85
+ * Writes to stderr (NOT stdout) so stdout stays clean JSON for agents — and so the
86
+ * banner appears even when --json or --quiet are set, which is the whole point: the
87
+ * agent must see it every time. Cheap + synchronous (one file read). Never throws.
88
+ *
89
+ * For every Chain-write command (see PREVIEW_WRITE_COMMANDS), also writes an
90
+ * advisory reminding the user that real learnings belong in the real Chain.
91
+ */
92
+ function printPreviewBanner(actionCommand) {
93
+ try {
94
+ const binding = getPreviewBinding();
95
+ if (!binding)
96
+ return;
97
+ const name = binding.workspaceName ?? 'preview';
98
+ process.stderr.write(yellow(bold(`⚠ PREVIEW ${name} — writes are throwaway. npm run pb:real to return to the real Chain`)) + '\n');
99
+ const isTopLevel = actionCommand.parent?.name() === 'pb';
100
+ if (isTopLevel && PREVIEW_WRITE_COMMANDS.has(actionCommand.name())) {
101
+ process.stderr.write(` → real learnings belong in the real Chain. Switch back with: npm run pb:real\n`);
102
+ }
103
+ }
104
+ catch {
105
+ // Never let the banner crash the CLI
106
+ }
107
+ }
56
108
  /**
57
109
  * Global error handler — single exit point for all CLI errors.
58
110
  * CLIError: format with code + category + guidance.
@@ -111,7 +163,10 @@ program
111
163
  .option('-q, --quiet', 'Suppress non-essential output (banners, hints, progress)')
112
164
  .exitOverride(); // Throw CommanderError instead of calling process.exit directly
113
165
  // Apply global output mode BEFORE subcommand actions run
114
- program.hook('preAction', (thisCommand) => {
166
+ // Commander preAction hook signature: (hookedCommand, actionCommand)
167
+ // hookedCommand = the command where hook was registered (root program)
168
+ // actionCommand = the subcommand actually being invoked
169
+ program.hook('preAction', (_hookedCommand, actionCommand) => {
115
170
  const globalOpts = program.opts();
116
171
  if (globalOpts.json) {
117
172
  setOutputMode('json');
@@ -125,7 +180,9 @@ program.hook('preAction', (thisCommand) => {
125
180
  }
126
181
  // Ambient update notification — non-blocking, suppressed in JSON mode (WP-322 S1)
127
182
  checkForUpdate(cliPackageVersion.version);
128
- void thisCommand;
183
+ // PREVIEW banner — writes to stderr so it's always visible even in --json/--quiet mode.
184
+ // Advisory line added for top-level Chain-write commands: real learnings belong in the real Chain.
185
+ printPreviewBanner(actionCommand);
129
186
  });
130
187
  // Default action — status dashboard when `pb` is invoked with no command.
131
188
  // `pb --help` still works because Commander intercepts --help before the action runs.
@@ -345,9 +402,10 @@ program
345
402
  .option('-b, --brief', 'Compact view: stage, counts, top bets, tensions, planned work')
346
403
  .option('-t, --task <task>', 'Task description for task-shaped governance and context')
347
404
  // SYNC: domain list must match TaskDomain in convex/agentKnowledge/startupResolver.ts
348
- .option('-s, --scope <domain>', 'Domain scope for governance filtering. Valid values: auth, governance, architecture, product, data-foundation, chainwork, capture-pipeline, ingestion, intelligence-and-operations, review-and-learning, general')
405
+ .option('-s, --scope <domain>', 'Domain scope for governance filtering. Accepts authority roots, child scopes such as product-design/ux and data/analytics, and legacy internal scopes.')
406
+ .option('--full', 'Full depth orient (tier=full). Use for thorough context loading.')
349
407
  .action(async (opts) => {
350
- await runOrient({ brief: opts.brief, task: opts.task?.trim() || undefined, scope: opts.scope?.trim() || undefined });
408
+ await runOrient({ brief: opts.brief, task: opts.task?.trim() || undefined, scope: opts.scope?.trim() || undefined, full: opts.full });
351
409
  });
352
410
  program
353
411
  .command('handshake')
@@ -359,24 +417,29 @@ program
359
417
  .option('--level <level>', 'With --init: trust level (guide|work|silent|full-trust). Without --init: content tier (beginner|intermediate|expert)')
360
418
  .option('--generate', 'Fetch governance entries from the Chain and merge generated rules (BET-286)')
361
419
  .option('--surfaces <list>', 'Comma-separated surfaces to write (cursor,claude,copilot,codex)')
420
+ .option('--no-prompt', 'Headless mode: refuse on tampered projection files (WP-421 S3, doneWhen #17). Always implied when stdout is not a TTY.')
421
+ .option('--lenient', 'WP-439 S4: continue past setup-asset body fetch failures with a warning (legacy behaviour). By default, body fetch failures are hard errors; run `pb setup-audit --repair` to fix orphaned rows.')
362
422
  .action(async (opts) => {
363
423
  if (opts.init) {
364
424
  await runHandshakeInit({ level: opts.level, dryRun: opts.dryRun });
365
425
  return;
366
426
  }
367
- await runHandshake({ force: opts.force, apply: opts.apply, dryRun: opts.dryRun, level: opts.level, generate: opts.generate, surfaces: opts.surfaces?.split(',') });
427
+ // Commander turns `--no-prompt` into `prompt: false`. We invert so HandshakeOptions sees noPrompt=true.
428
+ const noPrompt = opts.prompt === false;
429
+ await runHandshake({ force: opts.force, apply: opts.apply, dryRun: opts.dryRun, level: opts.level, generate: opts.generate, surfaces: opts.surfaces?.split(','), noPrompt, lenient: opts.lenient });
368
430
  });
369
431
  program
370
432
  .command('codex-prep <task...>')
371
433
  .description('Generate task-specific governance context for Codex (.codex/task-context.md)')
372
434
  .option('--dry-run', 'Print to stdout instead of writing file')
435
+ .option('--full', 'Full depth orient (tier=full). Use for thorough context loading.')
373
436
  .action(async (taskParts, opts) => {
374
437
  const task = taskParts.join(' ').trim();
375
438
  if (!task) {
376
439
  program.commands.find((c) => c.name() === 'codex-prep')?.help();
377
440
  return;
378
441
  }
379
- await runCodexPrep({ task, dryRun: opts.dryRun });
442
+ await runCodexPrep({ task, dryRun: opts.dryRun, full: opts.full });
380
443
  });
381
444
  program
382
445
  .command('init')
@@ -386,14 +449,15 @@ program
386
449
  });
387
450
  program
388
451
  .command('connect <token>')
389
- .description('Redeem an onboarding token and save your API key locally (FEAT-958). Uses CONVEX_SITE_URL if set, otherwise the production gateway. Override with --gateway or PB_CONNECT_GATEWAY_URL.')
452
+ .description('Redeem an onboarding token and save your API key locally (FEAT-958). Uses CONVEX_SITE_URL if set, otherwise the production gateway. Override with --gateway or PB_CONNECT_GATEWAY_URL. Optional --name sets the key label in workspace settings (useful in non-interactive shells).')
390
453
  .option('--gateway <url>', 'Override redeem gateway (default: CONVEX_SITE_URL or production). Use when token came from a different Convex deployment.')
454
+ .option('--name <label>', 'Optional label for this API key in workspace settings. In non-interactive terminals, use this instead of a prompt.')
391
455
  .action(async (token, opts) => {
392
456
  if (!token?.trim()) {
393
457
  program.commands.find((c) => c.name() === 'connect')?.help();
394
458
  return;
395
459
  }
396
- await runConnect(token.trim(), { gateway: opts.gateway });
460
+ await runConnect(token.trim(), { gateway: opts.gateway, name: opts.name });
397
461
  });
398
462
  program
399
463
  .command('login')
@@ -409,12 +473,49 @@ program
409
473
  .action(async (opts) => {
410
474
  await runDoctor({ fix: opts.fix, dryRun: opts.dryRun });
411
475
  });
476
+ program
477
+ .command('whoami')
478
+ .alias('status')
479
+ .description('Show the active profile + workspace (fast; no session required).')
480
+ .action(async () => {
481
+ await runWhoami();
482
+ });
412
483
  program
413
484
  .command('setup')
414
- .description('Guided first-time setup: account, login, workspace, first capture')
485
+ .description('Canonical pb-setup entry (DEC-995): detect surfaces, read state, emit JSON for the skill body.')
415
486
  .action(async () => {
416
487
  await runSetup();
417
488
  });
489
+ program
490
+ .command('setup-detect-surfaces')
491
+ .description('Detect local surface markers and union-merge into manifest.surfaces (STD-235 forward-only)')
492
+ .action(async () => {
493
+ const result = await runSetupDetectSurfaces();
494
+ if (process.stdout.isTTY) {
495
+ process.stdout.write(formatDetectSurfacesSummary(result) + '\n');
496
+ }
497
+ else {
498
+ process.stderr.write(formatDetectSurfacesSummary(result) + '\n');
499
+ }
500
+ });
501
+ program
502
+ .command('setup-state')
503
+ .description('Emit compact JSON of getPbSetupState (machine-readable, used by the pb-setup skill body)')
504
+ .action(async () => {
505
+ await runSetupState();
506
+ });
507
+ // WP-439 S2: setup-asset orphan audit. Read-only diagnostic; exits 1 if any
508
+ // setup_asset row has a broken body wiring (will fail at handshake).
509
+ // WP-439 S3: --repair attempts to restore class III/II orphans from STARTER_*
510
+ // constants. Class I (inline-only) and IV (hash drift) are NOT touched.
511
+ program
512
+ .command('setup-audit')
513
+ .description('Audit setup_asset rows for orphaned bodies (WP-439 S2/S3). Exits 1 if any orphan or repair-failure.')
514
+ .option('--json', 'Emit machine-readable JSON (overrides pretty output for this command)')
515
+ .option('--repair', 'Attempt to restore class III/II orphans from STARTER_* constants (WP-439 S3)')
516
+ .action(async (opts) => {
517
+ await runSetupAudit({ json: opts.json, repair: opts.repair });
518
+ });
418
519
  // --- Write commands (require active session) ---
419
520
  const sessionCmd = program
420
521
  .command('session')
@@ -545,6 +646,30 @@ program
545
646
  concurrency,
546
647
  });
547
648
  });
649
+ // --- migrate:setup command (WP-345 S0b) ---
650
+ program
651
+ .command('migrate:setup')
652
+ .description('Migrate .productbrain/skills|rules|hooks/*.md into the DB setup-assets collection (WP-345)')
653
+ .option('--dry-run', 'Show what would be migrated without writing to DB.')
654
+ .option('--cwd <path>', 'Override working directory (default: process.cwd())')
655
+ .action(async (opts) => {
656
+ const { runMigrateSetup } = await import('./commands/migrate-setup.js');
657
+ await runMigrateSetup({ dryRun: opts.dryRun, cwd: opts.cwd });
658
+ });
659
+ // --- setup:ingest command (WP-345 S3) ---
660
+ program
661
+ .command('setup:ingest <path>')
662
+ .description('Push a single .productbrain skill/rule/hook file to the DB setup-assets SSOT (WP-345)')
663
+ .option('--dry-run', 'Show what would be ingested without writing to DB.')
664
+ .option('--json', 'Output machine-readable JSON (deprecated: use global --json flag)')
665
+ .action(async (filePath, opts) => {
666
+ if (!filePath?.trim()) {
667
+ program.commands.find((c) => c.name() === 'setup:ingest')?.help();
668
+ return;
669
+ }
670
+ const { runSetupIngest } = await import('./commands/setup-ingest.js');
671
+ await runSetupIngest(filePath.trim(), { dryRun: opts.dryRun });
672
+ });
548
673
  // --- Fields command (BET-181 Slice 2) ---
549
674
  program
550
675
  .command('fields <collection>')
@@ -570,7 +695,7 @@ program
570
695
  // --- Audit command (BET-182 Slice 2) ---
571
696
  program
572
697
  .command('audit <entry-ids...>')
573
- .description('Run STD-113 hygiene audit on bet(s) — 13 gates, exit code reflects verdict')
698
+ .description('Run hygiene audit on bet(s) — 13 gates (shaping) / 18 gates (handoff), exit code reflects verdict')
574
699
  .option('--phase <phase>', 'Override phase detection (shaping | handoff)')
575
700
  .option('--gate <name>', 'Run only specified gate(s) (repeatable)', (val, prev) => [...prev, val], [])
576
701
  .option('--fix', 'Auto-execute exact fixes via pb update, rerun once')
@@ -667,6 +792,96 @@ workspaceCmd
667
792
  .action(async () => {
668
793
  await runWorkspaceRepair();
669
794
  });
795
+ const authorityDomainsCmd = program
796
+ .command('authority-domains')
797
+ .description('Operator commands for WP-354 authority-domain readiness and evidence');
798
+ authorityDomainsCmd
799
+ .command('propose')
800
+ .description('Generate authority-domain tag proposals')
801
+ .option('--dry-run', 'Preview without writing staging proposals')
802
+ .option('--limit <n>', 'Maximum governance entries to classify')
803
+ .option('--mock', 'Use deterministic mock classifier')
804
+ .action(async (opts) => {
805
+ await runAuthorityDomainsPropose(opts);
806
+ });
807
+ authorityDomainsCmd
808
+ .command('review')
809
+ .description('List authority-domain tag proposals')
810
+ .option('--status <status>', 'pending, committed, rejected, or skipped', 'pending')
811
+ .option('--limit <n>', 'Maximum proposals to list')
812
+ .option('--sample <n>', 'Return a stable proposal sample')
813
+ .option('--stratified', 'Stratify sample across proposed domain and source collection')
814
+ .action(async (opts) => {
815
+ await runAuthorityDomainsReview(opts);
816
+ });
817
+ const authorityDomainsSampleCmd = authorityDomainsCmd
818
+ .command('sample')
819
+ .description('Manage human-reviewed authority-domain proposal samples');
820
+ authorityDomainsSampleCmd
821
+ .command('record')
822
+ .description('Record human-reviewed sample accuracy for authority-domain proposals')
823
+ .requiredOption('--sample-id <id>', 'Stable sample identifier from the review packet')
824
+ .option('--run-id <id>', 'Proposal run identifier')
825
+ .requiredOption('--approved <n>', 'Count of sampled proposals approved as-is')
826
+ .requiredOption('--rejected <n>', 'Count of sampled proposals rejected')
827
+ .requiredOption('--corrected <n>', 'Count of sampled proposals corrected to another domain')
828
+ .action(async (opts) => {
829
+ await runAuthorityDomainsRecordSample(opts);
830
+ });
831
+ authorityDomainsCmd
832
+ .command('ratify <proposal-id>')
833
+ .description('Ratify an authority-domain tag proposal')
834
+ .option('--note <note>', 'Review note')
835
+ .action(async (proposalId, opts) => {
836
+ await runAuthorityDomainsRatify(proposalId, opts);
837
+ });
838
+ authorityDomainsCmd
839
+ .command('reject <proposal-id>')
840
+ .description('Reject an authority-domain tag proposal')
841
+ .option('--reason <reason>', 'Rejection reason')
842
+ .action(async (proposalId, opts) => {
843
+ await runAuthorityDomainsReject(proposalId, opts);
844
+ });
845
+ authorityDomainsCmd
846
+ .command('discard-pending')
847
+ .description('Reject all pending authority-domain tag proposals after a failed batch diagnosis')
848
+ .option('--reason <reason>', 'Discard reason')
849
+ .action(async (opts) => {
850
+ await runAuthorityDomainsDiscardPending(opts);
851
+ });
852
+ authorityDomainsCmd
853
+ .command('readiness')
854
+ .description('Show WP-354 authority-domain readiness, evidence gap, and next action')
855
+ .action(async () => {
856
+ await runAuthorityDomainsReadiness();
857
+ });
858
+ authorityDomainsCmd
859
+ .command('benchmark')
860
+ .description('Run and persist the WP-354 authority-domain benchmark')
861
+ .action(async () => {
862
+ await runAuthorityDomainsBenchmark();
863
+ });
864
+ authorityDomainsCmd
865
+ .command('activate-cutover')
866
+ .description('Activate graph retrieval after WP-354 evidence gates pass')
867
+ .option('--force-pre-production', 'Bypass the permanently-locked valueProof gate (requires --dec-id, DEC-864)')
868
+ .option('--dec-id <decId>', 'Chain DEC ID authorizing the bypass')
869
+ .action(async (opts) => {
870
+ await runAuthorityDomainsActivateCutover({ forcePreProduction: opts.forcePreProduction, decId: opts.decId });
871
+ });
872
+ authorityDomainsCmd
873
+ .command('deactivate-cutover')
874
+ .description('Deactivate the active WP-354 authorityDomain cutover for this workspace (DEC-864 rollback).')
875
+ .option('--clerk-user-id <clerkUserId>', 'Override the Clerk user ID for audit trail')
876
+ .action(async (opts) => {
877
+ await runAuthorityDomainsDeactivateCutover({ clerkUserId: opts.clerkUserId });
878
+ });
879
+ authorityDomainsCmd
880
+ .command('principle-distribution')
881
+ .description('Pre-merge gate: check governance category match rate for principles entries')
882
+ .action(async () => {
883
+ await runAuthorityDomainsPrincipleDistribution();
884
+ });
670
885
  // --- Definitions diff command (WP-305 Slice 4) ---
671
886
  const definitionsCmd = program
672
887
  .command('definitions')
@@ -738,9 +953,11 @@ profileCmd
738
953
  });
739
954
  profileCmd
740
955
  .command('use <name>')
741
- .description('Switch active profile (closes any active session)')
742
- .action(async (name) => {
743
- await runProfileUse({ name });
956
+ .description('Switch profile: reconciles the repo pin + global by default. --local = repo pin only; --global = global only.')
957
+ .option('--local', 'Write the profile pin only to .productbrain/config.local.json (repo-local, gitignored)')
958
+ .option('--global', 'Switch only the global active profile (does not change a locally-pinned repo)')
959
+ .action(async (name, opts) => {
960
+ await runProfileUse({ name, local: opts.local, global: opts.global });
744
961
  });
745
962
  profileCmd
746
963
  .command('delete <name>')
@@ -748,6 +965,14 @@ profileCmd
748
965
  .action(async (name) => {
749
966
  await runProfileDelete({ name });
750
967
  });
968
+ program
969
+ .command('use <name>')
970
+ .description('Switch the active workspace profile (alias for `pb profile use`).')
971
+ .option('--local', 'Write the profile pin only to .productbrain/config.local.json (repo-local, gitignored)')
972
+ .option('--global', 'Switch only the global active profile (does not change a locally-pinned repo)')
973
+ .action(async (name, opts) => {
974
+ await runProfileUse({ name, local: opts.local, global: opts.global });
975
+ });
751
976
  // --- Glossary command (WP-302 Slice 4) ---
752
977
  program
753
978
  .command('glossary')
@@ -779,18 +1004,9 @@ program.addCommand(createAdminCommand());
779
1004
  // --- Upgrade command (WP-322 S1: ambient update notification) ---
780
1005
  program
781
1006
  .command('upgrade')
782
- .description('Upgrade pb CLI to the latest version (npm install -g @productbrain/cli@latest)')
783
- .action(() => {
784
- if (isJsonMode()) {
785
- process.stdout.write(JSON.stringify({
786
- command: 'npm install -g @productbrain/cli@latest',
787
- hint: 'Run the command above to upgrade pb CLI.',
788
- }) + '\n');
789
- return;
790
- }
791
- process.stdout.write('\n');
792
- process.stdout.write(`${bold('Upgrade pb CLI')} ${dim('—')} run the command below:\n\n`);
793
- process.stdout.write(` npm install -g @productbrain/cli@latest\n\n`);
1007
+ .description(`Upgrade pb CLI to the latest beta (${UPGRADE_COMMAND})`)
1008
+ .action(async () => {
1009
+ await runUpgrade({ currentVersion: cliPackageVersion.version });
794
1010
  });
795
1011
  // Parse with global error handler — all uncaught errors route through handleError
796
1012
  program.parseAsync(process.argv).catch(handleError);