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

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 (643) hide show
  1. package/README.md +77 -92
  2. package/dist/__tests__/adapters.test.d.ts +2 -0
  3. package/dist/__tests__/adapters.test.d.ts.map +1 -0
  4. package/dist/__tests__/adapters.test.js +417 -0
  5. package/dist/__tests__/adapters.test.js.map +1 -0
  6. package/dist/__tests__/audit.test.d.ts +2 -0
  7. package/dist/__tests__/audit.test.d.ts.map +1 -0
  8. package/dist/__tests__/audit.test.js +394 -0
  9. package/dist/__tests__/audit.test.js.map +1 -0
  10. package/dist/__tests__/batch-transformations.test.d.ts +2 -0
  11. package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
  12. package/dist/__tests__/batch-transformations.test.js +263 -0
  13. package/dist/__tests__/batch-transformations.test.js.map +1 -0
  14. package/dist/__tests__/capture.test.js +309 -18
  15. package/dist/__tests__/capture.test.js.map +1 -1
  16. package/dist/__tests__/config.test.d.ts +8 -0
  17. package/dist/__tests__/config.test.d.ts.map +1 -0
  18. package/dist/__tests__/config.test.js +166 -0
  19. package/dist/__tests__/config.test.js.map +1 -0
  20. package/dist/__tests__/constants.test.d.ts +2 -0
  21. package/dist/__tests__/constants.test.d.ts.map +1 -0
  22. package/dist/__tests__/constants.test.js +141 -0
  23. package/dist/__tests__/constants.test.js.map +1 -0
  24. package/dist/__tests__/constellation.test.js +20 -26
  25. package/dist/__tests__/constellation.test.js.map +1 -1
  26. package/dist/__tests__/context-strategy.test.d.ts +2 -0
  27. package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
  28. package/dist/__tests__/context-strategy.test.js +79 -0
  29. package/dist/__tests__/context-strategy.test.js.map +1 -0
  30. package/dist/__tests__/errors.test.d.ts +2 -0
  31. package/dist/__tests__/errors.test.d.ts.map +1 -0
  32. package/dist/__tests__/errors.test.js +117 -0
  33. package/dist/__tests__/errors.test.js.map +1 -0
  34. package/dist/__tests__/experiment.test.d.ts +6 -0
  35. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  36. package/dist/__tests__/experiment.test.js +69 -0
  37. package/dist/__tests__/experiment.test.js.map +1 -0
  38. package/dist/__tests__/fields.test.js +68 -68
  39. package/dist/__tests__/fields.test.js.map +1 -1
  40. package/dist/__tests__/glossary.test.d.ts +2 -0
  41. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  42. package/dist/__tests__/glossary.test.js +32 -0
  43. package/dist/__tests__/glossary.test.js.map +1 -0
  44. package/dist/__tests__/handshake-preview.test.d.ts +2 -0
  45. package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
  46. package/dist/__tests__/handshake-preview.test.js +156 -0
  47. package/dist/__tests__/handshake-preview.test.js.map +1 -0
  48. package/dist/__tests__/handshake.test.js +27 -18
  49. package/dist/__tests__/handshake.test.js.map +1 -1
  50. package/dist/__tests__/hook-intents.test.d.ts +2 -0
  51. package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
  52. package/dist/__tests__/hook-intents.test.js +184 -0
  53. package/dist/__tests__/hook-intents.test.js.map +1 -0
  54. package/dist/__tests__/ingest.test.js +110 -12
  55. package/dist/__tests__/ingest.test.js.map +1 -1
  56. package/dist/__tests__/init.test.d.ts +7 -0
  57. package/dist/__tests__/init.test.d.ts.map +1 -0
  58. package/dist/__tests__/init.test.js +146 -0
  59. package/dist/__tests__/init.test.js.map +1 -0
  60. package/dist/__tests__/login.test.d.ts +2 -0
  61. package/dist/__tests__/login.test.d.ts.map +1 -0
  62. package/dist/__tests__/login.test.js +167 -0
  63. package/dist/__tests__/login.test.js.map +1 -0
  64. package/dist/__tests__/manifest.test.d.ts +6 -0
  65. package/dist/__tests__/manifest.test.d.ts.map +1 -0
  66. package/dist/__tests__/manifest.test.js +138 -0
  67. package/dist/__tests__/manifest.test.js.map +1 -0
  68. package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
  69. package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
  70. package/dist/__tests__/method-registry.integration.test.js +18 -0
  71. package/dist/__tests__/method-registry.integration.test.js.map +1 -0
  72. package/dist/__tests__/method-registry.test.d.ts +14 -0
  73. package/dist/__tests__/method-registry.test.d.ts.map +1 -0
  74. package/dist/__tests__/method-registry.test.js +134 -0
  75. package/dist/__tests__/method-registry.test.js.map +1 -0
  76. package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
  77. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  78. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  79. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  80. package/dist/__tests__/onboarding.test.d.ts +6 -0
  81. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  82. package/dist/__tests__/onboarding.test.js +347 -0
  83. package/dist/__tests__/onboarding.test.js.map +1 -0
  84. package/dist/__tests__/orient.test.d.ts +2 -0
  85. package/dist/__tests__/orient.test.d.ts.map +1 -0
  86. package/dist/__tests__/orient.test.js +143 -0
  87. package/dist/__tests__/orient.test.js.map +1 -0
  88. package/dist/__tests__/personal-layer.test.d.ts +12 -0
  89. package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
  90. package/dist/__tests__/personal-layer.test.js +304 -0
  91. package/dist/__tests__/personal-layer.test.js.map +1 -0
  92. package/dist/__tests__/profiles.test.d.ts +2 -0
  93. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  94. package/dist/__tests__/profiles.test.js +168 -0
  95. package/dist/__tests__/profiles.test.js.map +1 -0
  96. package/dist/__tests__/promote.test.d.ts +2 -0
  97. package/dist/__tests__/promote.test.d.ts.map +1 -0
  98. package/dist/__tests__/promote.test.js +161 -0
  99. package/dist/__tests__/promote.test.js.map +1 -0
  100. package/dist/__tests__/prompts.test.d.ts +6 -0
  101. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  102. package/dist/__tests__/prompts.test.js +146 -0
  103. package/dist/__tests__/prompts.test.js.map +1 -0
  104. package/dist/__tests__/proposals.test.d.ts +2 -0
  105. package/dist/__tests__/proposals.test.d.ts.map +1 -0
  106. package/dist/__tests__/proposals.test.js +167 -0
  107. package/dist/__tests__/proposals.test.js.map +1 -0
  108. package/dist/__tests__/relate.test.js +57 -33
  109. package/dist/__tests__/relate.test.js.map +1 -1
  110. package/dist/__tests__/repo-detect.test.js +97 -1
  111. package/dist/__tests__/repo-detect.test.js.map +1 -1
  112. package/dist/__tests__/runner.test.js +19 -15
  113. package/dist/__tests__/runner.test.js.map +1 -1
  114. package/dist/__tests__/session-state-machine.test.d.ts +2 -0
  115. package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
  116. package/dist/__tests__/session-state-machine.test.js +154 -0
  117. package/dist/__tests__/session-state-machine.test.js.map +1 -0
  118. package/dist/__tests__/session-touch.test.js +11 -11
  119. package/dist/__tests__/session-touch.test.js.map +1 -1
  120. package/dist/__tests__/session.test.js +4 -10
  121. package/dist/__tests__/session.test.js.map +1 -1
  122. package/dist/__tests__/setup.test.d.ts +2 -0
  123. package/dist/__tests__/setup.test.d.ts.map +1 -0
  124. package/dist/__tests__/setup.test.js +141 -0
  125. package/dist/__tests__/setup.test.js.map +1 -0
  126. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  127. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  128. package/dist/__tests__/spinner-labels.test.js +23 -0
  129. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  130. package/dist/__tests__/state.test.d.ts +6 -0
  131. package/dist/__tests__/state.test.d.ts.map +1 -0
  132. package/dist/__tests__/state.test.js +97 -0
  133. package/dist/__tests__/state.test.js.map +1 -0
  134. package/dist/__tests__/strip.test.js +2 -2
  135. package/dist/__tests__/strip.test.js.map +1 -1
  136. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  137. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  138. package/dist/__tests__/surface-profiles.test.js +233 -0
  139. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  140. package/dist/__tests__/surfaces.test.d.ts +2 -0
  141. package/dist/__tests__/surfaces.test.d.ts.map +1 -0
  142. package/dist/__tests__/surfaces.test.js +46 -0
  143. package/dist/__tests__/surfaces.test.js.map +1 -0
  144. package/dist/__tests__/update.test.js +123 -43
  145. package/dist/__tests__/update.test.js.map +1 -1
  146. package/dist/__tests__/workspace.test.d.ts +2 -0
  147. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  148. package/dist/__tests__/workspace.test.js +308 -0
  149. package/dist/__tests__/workspace.test.js.map +1 -0
  150. package/dist/commands/accept.d.ts +18 -0
  151. package/dist/commands/accept.d.ts.map +1 -0
  152. package/dist/commands/accept.js +76 -0
  153. package/dist/commands/accept.js.map +1 -0
  154. package/dist/commands/admin/cockpit.d.ts +90 -0
  155. package/dist/commands/admin/cockpit.d.ts.map +1 -0
  156. package/dist/commands/admin/cockpit.js +618 -0
  157. package/dist/commands/admin/cockpit.js.map +1 -0
  158. package/dist/commands/admin/index.d.ts +21 -0
  159. package/dist/commands/admin/index.d.ts.map +1 -0
  160. package/dist/commands/admin/index.js +256 -0
  161. package/dist/commands/admin/index.js.map +1 -0
  162. package/dist/commands/admin/inspect.d.ts +30 -0
  163. package/dist/commands/admin/inspect.d.ts.map +1 -0
  164. package/dist/commands/admin/inspect.js +555 -0
  165. package/dist/commands/admin/inspect.js.map +1 -0
  166. package/dist/commands/admin/inspect.test.d.ts +7 -0
  167. package/dist/commands/admin/inspect.test.d.ts.map +1 -0
  168. package/dist/commands/admin/inspect.test.js +90 -0
  169. package/dist/commands/admin/inspect.test.js.map +1 -0
  170. package/dist/commands/admin/manage.d.ts +8 -0
  171. package/dist/commands/admin/manage.d.ts.map +1 -0
  172. package/dist/commands/admin/manage.js +76 -0
  173. package/dist/commands/admin/manage.js.map +1 -0
  174. package/dist/commands/admin/seed.d.ts +32 -0
  175. package/dist/commands/admin/seed.d.ts.map +1 -0
  176. package/dist/commands/admin/seed.js +533 -0
  177. package/dist/commands/admin/seed.js.map +1 -0
  178. package/dist/commands/admin/seed.test.d.ts +6 -0
  179. package/dist/commands/admin/seed.test.d.ts.map +1 -0
  180. package/dist/commands/admin/seed.test.js +65 -0
  181. package/dist/commands/admin/seed.test.js.map +1 -0
  182. package/dist/commands/audit.d.ts +25 -0
  183. package/dist/commands/audit.d.ts.map +1 -0
  184. package/dist/commands/audit.js +188 -0
  185. package/dist/commands/audit.js.map +1 -0
  186. package/dist/commands/brand-pack.d.ts +2 -0
  187. package/dist/commands/brand-pack.d.ts.map +1 -0
  188. package/dist/commands/brand-pack.js +25 -0
  189. package/dist/commands/brand-pack.js.map +1 -0
  190. package/dist/commands/brief.d.ts +28 -0
  191. package/dist/commands/brief.d.ts.map +1 -0
  192. package/dist/commands/brief.js +75 -0
  193. package/dist/commands/brief.js.map +1 -0
  194. package/dist/commands/capture.d.ts +9 -0
  195. package/dist/commands/capture.d.ts.map +1 -1
  196. package/dist/commands/capture.js +256 -17
  197. package/dist/commands/capture.js.map +1 -1
  198. package/dist/commands/chain-walk.d.ts +14 -0
  199. package/dist/commands/chain-walk.d.ts.map +1 -0
  200. package/dist/commands/chain-walk.js +38 -0
  201. package/dist/commands/chain-walk.js.map +1 -0
  202. package/dist/commands/changes.d.ts +11 -0
  203. package/dist/commands/changes.d.ts.map +1 -0
  204. package/dist/commands/changes.js +46 -0
  205. package/dist/commands/changes.js.map +1 -0
  206. package/dist/commands/codex-prep.d.ts +12 -0
  207. package/dist/commands/codex-prep.d.ts.map +1 -0
  208. package/dist/commands/codex-prep.js +122 -0
  209. package/dist/commands/codex-prep.js.map +1 -0
  210. package/dist/commands/collections.d.ts +22 -0
  211. package/dist/commands/collections.d.ts.map +1 -0
  212. package/dist/commands/collections.js +77 -0
  213. package/dist/commands/collections.js.map +1 -0
  214. package/dist/commands/connect-integration.test.d.ts +7 -0
  215. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  216. package/dist/commands/connect-integration.test.js +195 -0
  217. package/dist/commands/connect-integration.test.js.map +1 -0
  218. package/dist/commands/connect-screens.d.ts +21 -0
  219. package/dist/commands/connect-screens.d.ts.map +1 -0
  220. package/dist/commands/connect-screens.js +79 -0
  221. package/dist/commands/connect-screens.js.map +1 -0
  222. package/dist/commands/connect.d.ts +21 -0
  223. package/dist/commands/connect.d.ts.map +1 -0
  224. package/dist/commands/connect.js +237 -0
  225. package/dist/commands/connect.js.map +1 -0
  226. package/dist/commands/connect.test.d.ts +6 -0
  227. package/dist/commands/connect.test.d.ts.map +1 -0
  228. package/dist/commands/connect.test.js +234 -0
  229. package/dist/commands/connect.test.js.map +1 -0
  230. package/dist/commands/constellation.d.ts.map +1 -1
  231. package/dist/commands/constellation.js +8 -3
  232. package/dist/commands/constellation.js.map +1 -1
  233. package/dist/commands/context.d.ts.map +1 -1
  234. package/dist/commands/context.js +8 -3
  235. package/dist/commands/context.js.map +1 -1
  236. package/dist/commands/cross-cut.d.ts +11 -0
  237. package/dist/commands/cross-cut.d.ts.map +1 -0
  238. package/dist/commands/cross-cut.js +23 -0
  239. package/dist/commands/cross-cut.js.map +1 -0
  240. package/dist/commands/doctor.d.ts +18 -0
  241. package/dist/commands/doctor.d.ts.map +1 -0
  242. package/dist/commands/doctor.js +232 -0
  243. package/dist/commands/doctor.js.map +1 -0
  244. package/dist/commands/doctor.test.d.ts +8 -0
  245. package/dist/commands/doctor.test.d.ts.map +1 -0
  246. package/dist/commands/doctor.test.js +311 -0
  247. package/dist/commands/doctor.test.js.map +1 -0
  248. package/dist/commands/fields.d.ts.map +1 -1
  249. package/dist/commands/fields.js +8 -4
  250. package/dist/commands/fields.js.map +1 -1
  251. package/dist/commands/get.d.ts.map +1 -1
  252. package/dist/commands/get.js +14 -6
  253. package/dist/commands/get.js.map +1 -1
  254. package/dist/commands/handshake.d.ts +12 -0
  255. package/dist/commands/handshake.d.ts.map +1 -1
  256. package/dist/commands/handshake.js +422 -74
  257. package/dist/commands/handshake.js.map +1 -1
  258. package/dist/commands/ingest.d.ts +7 -2
  259. package/dist/commands/ingest.d.ts.map +1 -1
  260. package/dist/commands/ingest.js +137 -31
  261. package/dist/commands/ingest.js.map +1 -1
  262. package/dist/commands/init.d.ts +14 -0
  263. package/dist/commands/init.d.ts.map +1 -0
  264. package/dist/commands/init.js +109 -0
  265. package/dist/commands/init.js.map +1 -0
  266. package/dist/commands/login.d.ts +4 -0
  267. package/dist/commands/login.d.ts.map +1 -1
  268. package/dist/commands/login.js +101 -38
  269. package/dist/commands/login.js.map +1 -1
  270. package/dist/commands/method.d.ts +99 -0
  271. package/dist/commands/method.d.ts.map +1 -0
  272. package/dist/commands/method.js +781 -0
  273. package/dist/commands/method.js.map +1 -0
  274. package/dist/commands/orient.d.ts +106 -1
  275. package/dist/commands/orient.d.ts.map +1 -1
  276. package/dist/commands/orient.js +13 -2
  277. package/dist/commands/orient.js.map +1 -1
  278. package/dist/commands/profile.d.ts +24 -0
  279. package/dist/commands/profile.d.ts.map +1 -0
  280. package/dist/commands/profile.js +82 -0
  281. package/dist/commands/profile.js.map +1 -0
  282. package/dist/commands/promote.d.ts +12 -0
  283. package/dist/commands/promote.d.ts.map +1 -0
  284. package/dist/commands/promote.js +90 -0
  285. package/dist/commands/promote.js.map +1 -0
  286. package/dist/commands/proposals.d.ts +9 -0
  287. package/dist/commands/proposals.d.ts.map +1 -0
  288. package/dist/commands/proposals.js +24 -0
  289. package/dist/commands/proposals.js.map +1 -0
  290. package/dist/commands/reject.d.ts +14 -0
  291. package/dist/commands/reject.d.ts.map +1 -0
  292. package/dist/commands/reject.js +43 -0
  293. package/dist/commands/reject.js.map +1 -0
  294. package/dist/commands/relate.d.ts +1 -0
  295. package/dist/commands/relate.d.ts.map +1 -1
  296. package/dist/commands/relate.js +41 -15
  297. package/dist/commands/relate.js.map +1 -1
  298. package/dist/commands/search.js +2 -2
  299. package/dist/commands/search.js.map +1 -1
  300. package/dist/commands/session.d.ts.map +1 -1
  301. package/dist/commands/session.js +85 -16
  302. package/dist/commands/session.js.map +1 -1
  303. package/dist/commands/setup.d.ts +15 -0
  304. package/dist/commands/setup.d.ts.map +1 -0
  305. package/dist/commands/setup.js +148 -0
  306. package/dist/commands/setup.js.map +1 -0
  307. package/dist/commands/update.d.ts +1 -0
  308. package/dist/commands/update.d.ts.map +1 -1
  309. package/dist/commands/update.js +102 -13
  310. package/dist/commands/update.js.map +1 -1
  311. package/dist/commands/usage.d.ts +40 -0
  312. package/dist/commands/usage.d.ts.map +1 -0
  313. package/dist/commands/usage.js +232 -0
  314. package/dist/commands/usage.js.map +1 -0
  315. package/dist/commands/verify.d.ts +13 -0
  316. package/dist/commands/verify.d.ts.map +1 -0
  317. package/dist/commands/verify.js +49 -0
  318. package/dist/commands/verify.js.map +1 -0
  319. package/dist/commands/welcome.d.ts +21 -0
  320. package/dist/commands/welcome.d.ts.map +1 -0
  321. package/dist/commands/welcome.js +50 -0
  322. package/dist/commands/welcome.js.map +1 -0
  323. package/dist/commands/workspace.d.ts +41 -0
  324. package/dist/commands/workspace.d.ts.map +1 -0
  325. package/dist/commands/workspace.js +239 -0
  326. package/dist/commands/workspace.js.map +1 -0
  327. package/dist/formatters/audit.d.ts +46 -0
  328. package/dist/formatters/audit.d.ts.map +1 -0
  329. package/dist/formatters/audit.js +81 -0
  330. package/dist/formatters/audit.js.map +1 -0
  331. package/dist/formatters/brief.d.ts +112 -0
  332. package/dist/formatters/brief.d.ts.map +1 -0
  333. package/dist/formatters/brief.js +179 -0
  334. package/dist/formatters/brief.js.map +1 -0
  335. package/dist/formatters/capture.d.ts +21 -3
  336. package/dist/formatters/capture.d.ts.map +1 -1
  337. package/dist/formatters/capture.js +20 -1
  338. package/dist/formatters/capture.js.map +1 -1
  339. package/dist/formatters/chain-walk.d.ts +33 -0
  340. package/dist/formatters/chain-walk.d.ts.map +1 -0
  341. package/dist/formatters/chain-walk.js +54 -0
  342. package/dist/formatters/chain-walk.js.map +1 -0
  343. package/dist/formatters/changes.d.ts +25 -0
  344. package/dist/formatters/changes.d.ts.map +1 -0
  345. package/dist/formatters/changes.js +60 -0
  346. package/dist/formatters/changes.js.map +1 -0
  347. package/dist/formatters/collections.d.ts +40 -0
  348. package/dist/formatters/collections.d.ts.map +1 -0
  349. package/dist/formatters/collections.js +93 -0
  350. package/dist/formatters/collections.js.map +1 -0
  351. package/dist/formatters/cross-cut.d.ts +21 -0
  352. package/dist/formatters/cross-cut.d.ts.map +1 -0
  353. package/dist/formatters/cross-cut.js +32 -0
  354. package/dist/formatters/cross-cut.js.map +1 -0
  355. package/dist/formatters/entry.d.ts +11 -4
  356. package/dist/formatters/entry.d.ts.map +1 -1
  357. package/dist/formatters/entry.js +24 -8
  358. package/dist/formatters/entry.js.map +1 -1
  359. package/dist/formatters/handshake.d.ts +29 -0
  360. package/dist/formatters/handshake.d.ts.map +1 -1
  361. package/dist/formatters/handshake.js +115 -3
  362. package/dist/formatters/handshake.js.map +1 -1
  363. package/dist/formatters/orient.d.ts +104 -1
  364. package/dist/formatters/orient.d.ts.map +1 -1
  365. package/dist/formatters/orient.js +140 -17
  366. package/dist/formatters/orient.js.map +1 -1
  367. package/dist/formatters/promote.d.ts +30 -0
  368. package/dist/formatters/promote.d.ts.map +1 -0
  369. package/dist/formatters/promote.js +39 -0
  370. package/dist/formatters/promote.js.map +1 -0
  371. package/dist/formatters/proposals.d.ts +45 -0
  372. package/dist/formatters/proposals.d.ts.map +1 -0
  373. package/dist/formatters/proposals.js +62 -0
  374. package/dist/formatters/proposals.js.map +1 -0
  375. package/dist/formatters/relate.d.ts +3 -0
  376. package/dist/formatters/relate.d.ts.map +1 -1
  377. package/dist/formatters/relate.js +6 -0
  378. package/dist/formatters/relate.js.map +1 -1
  379. package/dist/formatters/search.d.ts +0 -4
  380. package/dist/formatters/search.d.ts.map +1 -1
  381. package/dist/formatters/search.js +4 -1
  382. package/dist/formatters/search.js.map +1 -1
  383. package/dist/formatters/session.d.ts +1 -1
  384. package/dist/formatters/session.d.ts.map +1 -1
  385. package/dist/formatters/session.js +3 -1
  386. package/dist/formatters/session.js.map +1 -1
  387. package/dist/formatters/update.d.ts.map +1 -1
  388. package/dist/formatters/update.js +2 -0
  389. package/dist/formatters/update.js.map +1 -1
  390. package/dist/formatters/verify.d.ts +11 -0
  391. package/dist/formatters/verify.d.ts.map +1 -0
  392. package/dist/formatters/verify.js +11 -0
  393. package/dist/formatters/verify.js.map +1 -0
  394. package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
  395. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
  396. package/dist/generators/__tests__/surface-profiles.test.js +89 -0
  397. package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
  398. package/dist/generators/adapters.d.ts +37 -3
  399. package/dist/generators/adapters.d.ts.map +1 -1
  400. package/dist/generators/adapters.js +193 -5
  401. package/dist/generators/adapters.js.map +1 -1
  402. package/dist/generators/adapters.test.d.ts +2 -0
  403. package/dist/generators/adapters.test.d.ts.map +1 -0
  404. package/dist/generators/adapters.test.js +27 -0
  405. package/dist/generators/adapters.test.js.map +1 -0
  406. package/dist/generators/archetypes.d.ts +52 -0
  407. package/dist/generators/archetypes.d.ts.map +1 -0
  408. package/dist/generators/archetypes.js +153 -0
  409. package/dist/generators/archetypes.js.map +1 -0
  410. package/dist/generators/archetypes.test.d.ts +2 -0
  411. package/dist/generators/archetypes.test.d.ts.map +1 -0
  412. package/dist/generators/archetypes.test.js +237 -0
  413. package/dist/generators/archetypes.test.js.map +1 -0
  414. package/dist/generators/chain-classifier.d.ts +49 -0
  415. package/dist/generators/chain-classifier.d.ts.map +1 -0
  416. package/dist/generators/chain-classifier.js +180 -0
  417. package/dist/generators/chain-classifier.js.map +1 -0
  418. package/dist/generators/chain-classifier.test.d.ts +2 -0
  419. package/dist/generators/chain-classifier.test.d.ts.map +1 -0
  420. package/dist/generators/chain-classifier.test.js +257 -0
  421. package/dist/generators/chain-classifier.test.js.map +1 -0
  422. package/dist/generators/chain-rules.d.ts +42 -0
  423. package/dist/generators/chain-rules.d.ts.map +1 -0
  424. package/dist/generators/chain-rules.js +144 -0
  425. package/dist/generators/chain-rules.js.map +1 -0
  426. package/dist/generators/chain-rules.test.d.ts +2 -0
  427. package/dist/generators/chain-rules.test.d.ts.map +1 -0
  428. package/dist/generators/chain-rules.test.js +179 -0
  429. package/dist/generators/chain-rules.test.js.map +1 -0
  430. package/dist/generators/context-md.d.ts +1 -1
  431. package/dist/generators/context-md.d.ts.map +1 -1
  432. package/dist/generators/context-md.js +12 -1
  433. package/dist/generators/context-md.js.map +1 -1
  434. package/dist/generators/handshake-diff.d.ts +67 -0
  435. package/dist/generators/handshake-diff.d.ts.map +1 -0
  436. package/dist/generators/handshake-diff.js +183 -0
  437. package/dist/generators/handshake-diff.js.map +1 -0
  438. package/dist/generators/handshake-diff.test.d.ts +2 -0
  439. package/dist/generators/handshake-diff.test.d.ts.map +1 -0
  440. package/dist/generators/handshake-diff.test.js +264 -0
  441. package/dist/generators/handshake-diff.test.js.map +1 -0
  442. package/dist/generators/manifest.d.ts +37 -0
  443. package/dist/generators/manifest.d.ts.map +1 -0
  444. package/dist/generators/manifest.js +166 -0
  445. package/dist/generators/manifest.js.map +1 -0
  446. package/dist/generators/portable-knowledge.d.ts +102 -9
  447. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  448. package/dist/generators/portable-knowledge.js +384 -17
  449. package/dist/generators/portable-knowledge.js.map +1 -1
  450. package/dist/generators/portable-knowledge.test.js +529 -1
  451. package/dist/generators/portable-knowledge.test.js.map +1 -1
  452. package/dist/generators/surface-profiles.d.ts +49 -0
  453. package/dist/generators/surface-profiles.d.ts.map +1 -0
  454. package/dist/generators/surface-profiles.js +98 -0
  455. package/dist/generators/surface-profiles.js.map +1 -0
  456. package/dist/index.js +618 -138
  457. package/dist/index.js.map +1 -1
  458. package/dist/lib/activation.d.ts +28 -0
  459. package/dist/lib/activation.d.ts.map +1 -0
  460. package/dist/lib/activation.js +57 -0
  461. package/dist/lib/activation.js.map +1 -0
  462. package/dist/lib/activation.test.d.ts +6 -0
  463. package/dist/lib/activation.test.d.ts.map +1 -0
  464. package/dist/lib/activation.test.js +121 -0
  465. package/dist/lib/activation.test.js.map +1 -0
  466. package/dist/lib/client.d.ts +45 -3
  467. package/dist/lib/client.d.ts.map +1 -1
  468. package/dist/lib/client.js +188 -36
  469. package/dist/lib/client.js.map +1 -1
  470. package/dist/lib/collectionRegistry.d.ts +38 -0
  471. package/dist/lib/collectionRegistry.d.ts.map +1 -0
  472. package/dist/lib/collectionRegistry.js +112 -0
  473. package/dist/lib/collectionRegistry.js.map +1 -0
  474. package/dist/lib/config.d.ts +84 -4
  475. package/dist/lib/config.d.ts.map +1 -1
  476. package/dist/lib/config.js +322 -42
  477. package/dist/lib/config.js.map +1 -1
  478. package/dist/lib/constants.d.ts +42 -0
  479. package/dist/lib/constants.d.ts.map +1 -0
  480. package/dist/lib/constants.js +76 -0
  481. package/dist/lib/constants.js.map +1 -0
  482. package/dist/lib/conversation-engine.d.ts +45 -0
  483. package/dist/lib/conversation-engine.d.ts.map +1 -0
  484. package/dist/lib/conversation-engine.js +112 -0
  485. package/dist/lib/conversation-engine.js.map +1 -0
  486. package/dist/lib/conversation-phases.d.ts +59 -0
  487. package/dist/lib/conversation-phases.d.ts.map +1 -0
  488. package/dist/lib/conversation-phases.js +11 -0
  489. package/dist/lib/conversation-phases.js.map +1 -0
  490. package/dist/lib/conversation-signals.d.ts +30 -0
  491. package/dist/lib/conversation-signals.d.ts.map +1 -0
  492. package/dist/lib/conversation-signals.js +64 -0
  493. package/dist/lib/conversation-signals.js.map +1 -0
  494. package/dist/lib/deployment.d.ts +23 -0
  495. package/dist/lib/deployment.d.ts.map +1 -0
  496. package/dist/lib/deployment.js +78 -0
  497. package/dist/lib/deployment.js.map +1 -0
  498. package/dist/lib/deployment.test.d.ts +5 -0
  499. package/dist/lib/deployment.test.d.ts.map +1 -0
  500. package/dist/lib/deployment.test.js +54 -0
  501. package/dist/lib/deployment.test.js.map +1 -0
  502. package/dist/lib/errors.d.ts +58 -0
  503. package/dist/lib/errors.d.ts.map +1 -0
  504. package/dist/lib/errors.js +67 -0
  505. package/dist/lib/errors.js.map +1 -0
  506. package/dist/lib/experiment.d.ts +18 -0
  507. package/dist/lib/experiment.d.ts.map +1 -0
  508. package/dist/lib/experiment.js +28 -0
  509. package/dist/lib/experiment.js.map +1 -0
  510. package/dist/lib/format.d.ts +10 -0
  511. package/dist/lib/format.d.ts.map +1 -0
  512. package/dist/lib/format.js +27 -0
  513. package/dist/lib/format.js.map +1 -0
  514. package/dist/lib/glossary.d.ts +19 -0
  515. package/dist/lib/glossary.d.ts.map +1 -0
  516. package/dist/lib/glossary.js +53 -0
  517. package/dist/lib/glossary.js.map +1 -0
  518. package/dist/lib/hook-intents.d.ts +51 -0
  519. package/dist/lib/hook-intents.d.ts.map +1 -0
  520. package/dist/lib/hook-intents.js +85 -0
  521. package/dist/lib/hook-intents.js.map +1 -0
  522. package/dist/lib/inferSourceDate.d.ts +12 -0
  523. package/dist/lib/inferSourceDate.d.ts.map +1 -0
  524. package/dist/lib/inferSourceDate.js +44 -0
  525. package/dist/lib/inferSourceDate.js.map +1 -0
  526. package/dist/lib/method-registry.d.ts +32 -0
  527. package/dist/lib/method-registry.d.ts.map +1 -0
  528. package/dist/lib/method-registry.js +53 -0
  529. package/dist/lib/method-registry.js.map +1 -0
  530. package/dist/lib/onboarding-path-b.d.ts +10 -0
  531. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  532. package/dist/lib/onboarding-path-b.js +214 -0
  533. package/dist/lib/onboarding-path-b.js.map +1 -0
  534. package/dist/lib/onboarding-phases.d.ts +9 -0
  535. package/dist/lib/onboarding-phases.d.ts.map +1 -0
  536. package/dist/lib/onboarding-phases.js +120 -0
  537. package/dist/lib/onboarding-phases.js.map +1 -0
  538. package/dist/lib/onboarding-shared.d.ts +81 -0
  539. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  540. package/dist/lib/onboarding-shared.js +190 -0
  541. package/dist/lib/onboarding-shared.js.map +1 -0
  542. package/dist/lib/onboarding-topics.d.ts +27 -0
  543. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  544. package/dist/lib/onboarding-topics.js +57 -0
  545. package/dist/lib/onboarding-topics.js.map +1 -0
  546. package/dist/lib/onboarding.d.ts +17 -0
  547. package/dist/lib/onboarding.d.ts.map +1 -0
  548. package/dist/lib/onboarding.js +350 -0
  549. package/dist/lib/onboarding.js.map +1 -0
  550. package/dist/lib/profiles.d.ts +39 -0
  551. package/dist/lib/profiles.d.ts.map +1 -0
  552. package/dist/lib/profiles.js +185 -0
  553. package/dist/lib/profiles.js.map +1 -0
  554. package/dist/lib/prompts.d.ts +65 -0
  555. package/dist/lib/prompts.d.ts.map +1 -0
  556. package/dist/lib/prompts.js +132 -0
  557. package/dist/lib/prompts.js.map +1 -0
  558. package/dist/lib/repo-detect.d.ts +19 -0
  559. package/dist/lib/repo-detect.d.ts.map +1 -1
  560. package/dist/lib/repo-detect.js +25 -0
  561. package/dist/lib/repo-detect.js.map +1 -1
  562. package/dist/lib/runner.d.ts +2 -0
  563. package/dist/lib/runner.d.ts.map +1 -1
  564. package/dist/lib/runner.js +21 -7
  565. package/dist/lib/runner.js.map +1 -1
  566. package/dist/lib/session.d.ts +25 -0
  567. package/dist/lib/session.d.ts.map +1 -1
  568. package/dist/lib/session.js +70 -4
  569. package/dist/lib/session.js.map +1 -1
  570. package/dist/lib/spinner.d.ts +27 -0
  571. package/dist/lib/spinner.d.ts.map +1 -0
  572. package/dist/lib/spinner.js +76 -0
  573. package/dist/lib/spinner.js.map +1 -0
  574. package/dist/lib/spinner.test.d.ts +2 -0
  575. package/dist/lib/spinner.test.d.ts.map +1 -0
  576. package/dist/lib/spinner.test.js +39 -0
  577. package/dist/lib/spinner.test.js.map +1 -0
  578. package/dist/lib/state.d.ts +51 -0
  579. package/dist/lib/state.d.ts.map +1 -0
  580. package/dist/lib/state.js +90 -0
  581. package/dist/lib/state.js.map +1 -0
  582. package/dist/lib/strip.d.ts +1 -0
  583. package/dist/lib/strip.d.ts.map +1 -1
  584. package/dist/lib/strip.js +15 -0
  585. package/dist/lib/strip.js.map +1 -1
  586. package/dist/lib/style.d.ts +96 -0
  587. package/dist/lib/style.d.ts.map +1 -0
  588. package/dist/lib/style.js +169 -0
  589. package/dist/lib/style.js.map +1 -0
  590. package/dist/lib/style.test.d.ts +7 -0
  591. package/dist/lib/style.test.d.ts.map +1 -0
  592. package/dist/lib/style.test.js +263 -0
  593. package/dist/lib/style.test.js.map +1 -0
  594. package/dist/lib/telemetry.d.ts +15 -0
  595. package/dist/lib/telemetry.d.ts.map +1 -0
  596. package/dist/lib/telemetry.js +47 -0
  597. package/dist/lib/telemetry.js.map +1 -0
  598. package/dist/lib/tokenConstants.d.ts +17 -0
  599. package/dist/lib/tokenConstants.d.ts.map +1 -0
  600. package/dist/lib/tokenConstants.js +17 -0
  601. package/dist/lib/tokenConstants.js.map +1 -0
  602. package/dist/lib/update-check.d.ts +21 -0
  603. package/dist/lib/update-check.d.ts.map +1 -0
  604. package/dist/lib/update-check.js +145 -0
  605. package/dist/lib/update-check.js.map +1 -0
  606. package/dist/lib/wizard-surfaces.d.ts +47 -0
  607. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  608. package/dist/lib/wizard-surfaces.js +176 -0
  609. package/dist/lib/wizard-surfaces.js.map +1 -0
  610. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  611. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  612. package/dist/lib/wizard-surfaces.test.js +127 -0
  613. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  614. package/dist/lib/wizard-trust.d.ts +31 -0
  615. package/dist/lib/wizard-trust.d.ts.map +1 -0
  616. package/dist/lib/wizard-trust.js +66 -0
  617. package/dist/lib/wizard-trust.js.map +1 -0
  618. package/dist/lib/wizard-trust.test.d.ts +2 -0
  619. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  620. package/dist/lib/wizard-trust.test.js +32 -0
  621. package/dist/lib/wizard-trust.test.js.map +1 -0
  622. package/dist/lib/workspace-probe.d.ts +19 -0
  623. package/dist/lib/workspace-probe.d.ts.map +1 -0
  624. package/dist/lib/workspace-probe.js +27 -0
  625. package/dist/lib/workspace-probe.js.map +1 -0
  626. package/dist/surfaces/registry.d.ts +20 -0
  627. package/dist/surfaces/registry.d.ts.map +1 -0
  628. package/dist/surfaces/registry.js +42 -0
  629. package/dist/surfaces/registry.js.map +1 -0
  630. package/package.json +9 -3
  631. package/templates/archetypes/boundary.md +23 -0
  632. package/templates/archetypes/constraint.md +23 -0
  633. package/templates/archetypes/convention.md +23 -0
  634. package/templates/archetypes/policy.md +23 -0
  635. package/templates/archetypes/quality-gate.md +23 -0
  636. package/templates/archetypes/workflow.md +23 -0
  637. package/templates/general/code-integrity.md +11 -0
  638. package/templates/general/getting-started.md +12 -0
  639. package/templates/method-registry.json +16 -0
  640. package/templates/node-ts/code-integrity.md +13 -0
  641. package/templates/node-ts/testing.md +12 -0
  642. package/templates/python/code-integrity.md +13 -0
  643. package/templates/python/testing.md +12 -0
@@ -0,0 +1,169 @@
1
+ /**
2
+ * CLI voice and style — centralized output formatting for Product Brain CLI.
3
+ * WP-302 Slice 1: Brand Voice + --quiet.
4
+ *
5
+ * Design: "instrument panel" — clear status, clear next action.
6
+ * Tone: confident, concise, helpful. Not chatty. Not corporate.
7
+ *
8
+ * All color output respects NO_COLOR env (https://no-color.org/) and TTY detection.
9
+ * Quiet mode suppresses banners, hints, and progress — only essential results show.
10
+ */
11
+ import { classifyDeployment, parseHostname } from './deployment.js';
12
+ import { confirm as promptConfirm, isInteractive, note as promptNote } from './prompts.js';
13
+ import { isQuietMode } from './runner.js';
14
+ // ---------------------------------------------------------------------------
15
+ // Color support detection
16
+ // ---------------------------------------------------------------------------
17
+ /** Returns true if the terminal supports color output. */
18
+ export function supportsColor() {
19
+ return Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Color helpers — degrade gracefully when NO_COLOR is set or not a TTY
23
+ // ---------------------------------------------------------------------------
24
+ export const green = (s) => (supportsColor() ? `\x1b[32m${s}\x1b[0m` : s);
25
+ export const red = (s) => (supportsColor() ? `\x1b[31m${s}\x1b[0m` : s);
26
+ export const yellow = (s) => (supportsColor() ? `\x1b[33m${s}\x1b[0m` : s);
27
+ export const cyan = (s) => (supportsColor() ? `\x1b[36m${s}\x1b[0m` : s);
28
+ export const magenta = (s) => (supportsColor() ? `\x1b[35m${s}\x1b[0m` : s);
29
+ export const blue = (s) => (supportsColor() ? `\x1b[34m${s}\x1b[0m` : s);
30
+ export const dim = (s) => (supportsColor() ? `\x1b[2m${s}\x1b[0m` : s);
31
+ export const bold = (s) => (supportsColor() ? `\x1b[1m${s}\x1b[0m` : s);
32
+ // ---------------------------------------------------------------------------
33
+ // Status icons
34
+ // ---------------------------------------------------------------------------
35
+ export const icons = {
36
+ pass: '\u2713', // checkmark
37
+ fail: '\u2717', // x
38
+ warn: '\u26A0', // warning triangle
39
+ arrow: '\u2192', // right arrow
40
+ dot: '\u00B7', // middle dot
41
+ };
42
+ // ---------------------------------------------------------------------------
43
+ // Copy constants — instrument panel voice
44
+ // ---------------------------------------------------------------------------
45
+ export const copy = {
46
+ // Success preambles
47
+ captured: 'Captured.',
48
+ promoted: 'Promoted.',
49
+ linked: 'Linked.',
50
+ updated: 'Updated.',
51
+ sessionStarted: 'Session started.',
52
+ sessionClosed: 'Session closed.',
53
+ // Error preambles
54
+ noSession: 'No active session. Run `pb session start` first.',
55
+ sessionRequired: 'Write access requires a tracked session (DEC-9).',
56
+ notFound: 'Not found.',
57
+ authFailed: 'Authentication failed.',
58
+ // Next-step prompts
59
+ nextOrient: 'Next: pb orient -b',
60
+ nextCapture: 'Next: pb capture "..."',
61
+ nextGet: (entryId) => `View: pb get ${entryId}`,
62
+ nextFields: (collection) => `Fields: pb fields ${collection}`,
63
+ };
64
+ // ---------------------------------------------------------------------------
65
+ // Structured output helpers
66
+ // ---------------------------------------------------------------------------
67
+ /**
68
+ * Print a command banner. Suppressed in quiet mode.
69
+ * Example: "Product Brain — Doctor"
70
+ */
71
+ export function banner(title) {
72
+ if (isQuietMode())
73
+ return;
74
+ process.stdout.write(`\n${bold(`Product Brain — ${title}`)}\n\n`);
75
+ }
76
+ /**
77
+ * Print an actionable hint line. Suppressed in quiet mode.
78
+ * Example: " Hint: Run `pb orient -b` to see your workspace."
79
+ */
80
+ export function hint(text) {
81
+ if (isQuietMode())
82
+ return;
83
+ process.stdout.write(` ${dim(text)}\n`);
84
+ }
85
+ /**
86
+ * Print a progress line (e.g. "Classifying..."). Suppressed in quiet mode.
87
+ */
88
+ export function progress(text) {
89
+ if (isQuietMode())
90
+ return;
91
+ process.stdout.write(`${text}\n`);
92
+ }
93
+ /**
94
+ * Format a section heading — bold cyan text.
95
+ */
96
+ export function heading(text) {
97
+ return bold(cyan(text));
98
+ }
99
+ /**
100
+ * Format a check result line for doctor-style output.
101
+ * Uses colored icons for pass/fail/warn.
102
+ */
103
+ export function formatCheck(status, label, detail) {
104
+ const icon = status === 'pass'
105
+ ? green(icons.pass)
106
+ : status === 'fail'
107
+ ? red(icons.fail)
108
+ : yellow(icons.warn);
109
+ const paddedLabel = label.padEnd(16);
110
+ return `${icon} ${paddedLabel}${detail}`;
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ // Admin UX framework (WP-312 S2, FEAT-972)
114
+ // ---------------------------------------------------------------------------
115
+ /**
116
+ * Print an environment-aware admin banner. Suppressed in quiet mode.
117
+ *
118
+ * Labels:
119
+ * - [DEV] — localhost loopback
120
+ * - [DEV·CLOUD] — known Convex Development (Cloud) deployment
121
+ * - [PROD] — known production gateway / prod Convex deployment
122
+ * - [CLOUD] — other remote URL (unknown tier)
123
+ *
124
+ * Format: "⚡ pb admin — [ENV] <host>"
125
+ */
126
+ export function adminBanner(siteUrl) {
127
+ if (isQuietMode())
128
+ return;
129
+ const host = parseHostname(siteUrl);
130
+ const tier = classifyDeployment(siteUrl);
131
+ let envTag;
132
+ switch (tier) {
133
+ case 'local':
134
+ envTag = green('[DEV]');
135
+ break;
136
+ case 'prod':
137
+ envTag = red('[PROD]');
138
+ break;
139
+ case 'dev-cloud':
140
+ envTag = cyan('[DEV·CLOUD]');
141
+ break;
142
+ default:
143
+ envTag = yellow('[CLOUD]');
144
+ }
145
+ process.stdout.write(`\n${bold(`\u26A1 pb admin`)} ${dim('\u2014')} ${envTag} ${dim(host)}\n\n`);
146
+ }
147
+ /**
148
+ * Prompt for confirmation before a destructive admin operation (remote deployments).
149
+ *
150
+ * Returns true immediately if:
151
+ * - `isProduction` is false (local loopback or known dev-cloud — no ceremony)
152
+ * - `options.confirm` is true (--confirm flag passed by caller)
153
+ *
154
+ * In interactive TTY: shows a note() scope preview, then clack confirm().
155
+ * In non-interactive (CI/scripts): writes to stderr and returns false — caller must pass --confirm.
156
+ */
157
+ export async function confirmProdAction(options) {
158
+ if (!options.isProduction)
159
+ return true;
160
+ if (options.confirm)
161
+ return true;
162
+ if (!isInteractive()) {
163
+ process.stderr.write('This operation requires --confirm flag in non-interactive mode.\n');
164
+ return false;
165
+ }
166
+ promptNote(options.message, options.noteTitle ?? '⚠ Production');
167
+ return promptConfirm({ message: 'Proceed?', initialValue: false });
168
+ }
169
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/lib/style.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tests for CLI style module — WP-302 Slice 1.
3
+ * Verifies color helpers respect NO_COLOR, quiet mode suppresses banners,
4
+ * and copy constants are non-empty strings.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=style.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.test.d.ts","sourceRoot":"","sources":["../../src/lib/style.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Tests for CLI style module — WP-302 Slice 1.
3
+ * Verifies color helpers respect NO_COLOR, quiet mode suppresses banners,
4
+ * and copy constants are non-empty strings.
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ // Mock runner.js for quiet mode control
8
+ vi.mock('./runner.js', () => ({
9
+ isQuietMode: vi.fn(() => false),
10
+ isJsonMode: vi.fn(() => false),
11
+ }));
12
+ import { green, red, yellow, dim, bold, supportsColor, icons, copy, banner, hint, progress, formatCheck, adminBanner, confirmProdAction, } from './style.js';
13
+ import { isQuietMode } from './runner.js';
14
+ const mockIsQuietMode = vi.mocked(isQuietMode);
15
+ const mockQuiet = (val) => mockIsQuietMode.mockReturnValue(val);
16
+ describe('color helpers', () => {
17
+ const originalEnv = process.env.NO_COLOR;
18
+ const originalIsTTY = process.stdout.isTTY;
19
+ afterEach(() => {
20
+ if (originalEnv === undefined) {
21
+ delete process.env.NO_COLOR;
22
+ }
23
+ else {
24
+ process.env.NO_COLOR = originalEnv;
25
+ }
26
+ Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY, writable: true });
27
+ });
28
+ it('returns ANSI-wrapped string when color is supported', () => {
29
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, writable: true });
30
+ delete process.env.NO_COLOR;
31
+ expect(green('ok')).toContain('\x1b[32m');
32
+ expect(green('ok')).toContain('ok');
33
+ expect(red('err')).toContain('\x1b[31m');
34
+ expect(yellow('warn')).toContain('\x1b[33m');
35
+ expect(dim('faint')).toContain('\x1b[2m');
36
+ expect(bold('strong')).toContain('\x1b[1m');
37
+ });
38
+ it('returns plain string when NO_COLOR is set', () => {
39
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, writable: true });
40
+ process.env.NO_COLOR = '1';
41
+ expect(green('ok')).toBe('ok');
42
+ expect(red('err')).toBe('err');
43
+ expect(yellow('warn')).toBe('warn');
44
+ expect(dim('faint')).toBe('faint');
45
+ expect(bold('strong')).toBe('strong');
46
+ });
47
+ it('returns plain string when not a TTY', () => {
48
+ Object.defineProperty(process.stdout, 'isTTY', { value: false, writable: true });
49
+ delete process.env.NO_COLOR;
50
+ expect(green('ok')).toBe('ok');
51
+ expect(red('err')).toBe('err');
52
+ });
53
+ });
54
+ describe('supportsColor', () => {
55
+ const originalEnv = process.env.NO_COLOR;
56
+ const originalIsTTY = process.stdout.isTTY;
57
+ afterEach(() => {
58
+ if (originalEnv === undefined) {
59
+ delete process.env.NO_COLOR;
60
+ }
61
+ else {
62
+ process.env.NO_COLOR = originalEnv;
63
+ }
64
+ Object.defineProperty(process.stdout, 'isTTY', { value: originalIsTTY, writable: true });
65
+ });
66
+ it('returns true for TTY without NO_COLOR', () => {
67
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, writable: true });
68
+ delete process.env.NO_COLOR;
69
+ expect(supportsColor()).toBe(true);
70
+ });
71
+ it('returns false when NO_COLOR is set', () => {
72
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, writable: true });
73
+ process.env.NO_COLOR = '1';
74
+ expect(supportsColor()).toBe(false);
75
+ });
76
+ it('returns false when not a TTY', () => {
77
+ Object.defineProperty(process.stdout, 'isTTY', { value: false, writable: true });
78
+ delete process.env.NO_COLOR;
79
+ expect(supportsColor()).toBe(false);
80
+ });
81
+ });
82
+ describe('icons', () => {
83
+ it('has all expected icon keys', () => {
84
+ expect(icons.pass).toBeTruthy();
85
+ expect(icons.fail).toBeTruthy();
86
+ expect(icons.warn).toBeTruthy();
87
+ expect(icons.arrow).toBeTruthy();
88
+ expect(icons.dot).toBeTruthy();
89
+ });
90
+ });
91
+ describe('copy constants', () => {
92
+ it('all string constants are non-empty', () => {
93
+ expect(copy.captured.length).toBeGreaterThan(0);
94
+ expect(copy.promoted.length).toBeGreaterThan(0);
95
+ expect(copy.linked.length).toBeGreaterThan(0);
96
+ expect(copy.updated.length).toBeGreaterThan(0);
97
+ expect(copy.noSession.length).toBeGreaterThan(0);
98
+ expect(copy.sessionRequired.length).toBeGreaterThan(0);
99
+ expect(copy.notFound.length).toBeGreaterThan(0);
100
+ expect(copy.authFailed.length).toBeGreaterThan(0);
101
+ expect(copy.nextOrient.length).toBeGreaterThan(0);
102
+ expect(copy.nextCapture.length).toBeGreaterThan(0);
103
+ expect(copy.sessionStarted.length).toBeGreaterThan(0);
104
+ expect(copy.sessionClosed.length).toBeGreaterThan(0);
105
+ });
106
+ it('function constants return non-empty strings', () => {
107
+ expect(copy.nextGet('BET-42').length).toBeGreaterThan(0);
108
+ expect(copy.nextGet('BET-42')).toContain('BET-42');
109
+ expect(copy.nextFields('tensions').length).toBeGreaterThan(0);
110
+ expect(copy.nextFields('tensions')).toContain('tensions');
111
+ });
112
+ });
113
+ describe('banner', () => {
114
+ let writeSpy;
115
+ beforeEach(() => {
116
+ writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
117
+ mockIsQuietMode.mockReturnValue(false);
118
+ });
119
+ afterEach(() => {
120
+ writeSpy.mockRestore();
121
+ });
122
+ it('writes title to stdout in normal mode', () => {
123
+ banner('Doctor');
124
+ expect(writeSpy).toHaveBeenCalled();
125
+ const output = writeSpy.mock.calls.map((c) => c[0]).join('');
126
+ expect(output).toContain('Doctor');
127
+ });
128
+ it('suppresses output in quiet mode', () => {
129
+ mockIsQuietMode.mockReturnValue(true);
130
+ banner('Doctor');
131
+ expect(writeSpy).not.toHaveBeenCalled();
132
+ });
133
+ });
134
+ describe('hint', () => {
135
+ let writeSpy;
136
+ beforeEach(() => {
137
+ writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
138
+ mockIsQuietMode.mockReturnValue(false);
139
+ });
140
+ afterEach(() => {
141
+ writeSpy.mockRestore();
142
+ });
143
+ it('writes hint text in normal mode', () => {
144
+ hint('Run `pb orient -b` to see your workspace.');
145
+ expect(writeSpy).toHaveBeenCalled();
146
+ });
147
+ it('suppresses output in quiet mode', () => {
148
+ mockIsQuietMode.mockReturnValue(true);
149
+ hint('Run `pb orient -b`');
150
+ expect(writeSpy).not.toHaveBeenCalled();
151
+ });
152
+ });
153
+ describe('progress', () => {
154
+ let writeSpy;
155
+ beforeEach(() => {
156
+ writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
157
+ mockIsQuietMode.mockReturnValue(false);
158
+ });
159
+ afterEach(() => {
160
+ writeSpy.mockRestore();
161
+ });
162
+ it('writes progress text in normal mode', () => {
163
+ progress('Classifying...');
164
+ expect(writeSpy).toHaveBeenCalled();
165
+ const output = writeSpy.mock.calls.map((c) => c[0]).join('');
166
+ expect(output).toContain('Classifying...');
167
+ });
168
+ it('suppresses output in quiet mode', () => {
169
+ mockIsQuietMode.mockReturnValue(true);
170
+ progress('Classifying...');
171
+ expect(writeSpy).not.toHaveBeenCalled();
172
+ });
173
+ });
174
+ describe('formatCheck', () => {
175
+ it('formats pass result with label and detail', () => {
176
+ const result = formatCheck('pass', 'Config file', '/path/to/.env');
177
+ expect(result).toContain('Config file');
178
+ expect(result).toContain('/path/to/.env');
179
+ });
180
+ it('formats fail result', () => {
181
+ const result = formatCheck('fail', 'API key', 'Not set');
182
+ expect(result).toContain('API key');
183
+ expect(result).toContain('Not set');
184
+ });
185
+ it('formats warn result', () => {
186
+ const result = formatCheck('warn', 'CLI', 'Unable to read');
187
+ expect(result).toContain('CLI');
188
+ expect(result).toContain('Unable to read');
189
+ });
190
+ it('pads label to 16 chars', () => {
191
+ const result = formatCheck('pass', 'Node', 'v22.0.0');
192
+ // "Node" (4 chars) padded to 16
193
+ expect(result).toContain('Node v22.0.0');
194
+ });
195
+ });
196
+ describe('adminBanner', () => {
197
+ let writeSpy;
198
+ beforeEach(() => {
199
+ writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
200
+ mockIsQuietMode.mockReturnValue(false);
201
+ });
202
+ afterEach(() => {
203
+ writeSpy.mockRestore();
204
+ });
205
+ it('identifies localhost as dev', () => {
206
+ adminBanner('http://localhost:3000');
207
+ expect(writeSpy).toHaveBeenCalled();
208
+ const output = writeSpy.mock.calls.map((c) => String(c[0])).join('');
209
+ expect(output).toContain('[DEV]');
210
+ });
211
+ it('identifies 127.0.0.1 as dev', () => {
212
+ adminBanner('http://127.0.0.1:3000');
213
+ expect(writeSpy).toHaveBeenCalled();
214
+ const output = writeSpy.mock.calls.map((c) => String(c[0])).join('');
215
+ expect(output).toContain('[DEV]');
216
+ });
217
+ it('identifies ::1 as dev', () => {
218
+ adminBanner('http://[::1]:3000');
219
+ expect(writeSpy).toHaveBeenCalled();
220
+ const output = writeSpy.mock.calls.map((c) => String(c[0])).join('');
221
+ expect(output).toContain('[DEV]');
222
+ });
223
+ it('identifies known production hosts as PROD', () => {
224
+ adminBanner('https://api.productbrain.io');
225
+ expect(writeSpy).toHaveBeenCalled();
226
+ const output = writeSpy.mock.calls.map((c) => String(c[0])).join('');
227
+ expect(output).toContain('[PROD]');
228
+ });
229
+ it('identifies Convex dev-cloud deployment as DEV·CLOUD', () => {
230
+ adminBanner('https://trustworthy-kangaroo-277.convex.site');
231
+ const output = writeSpy.mock.calls.map((c) => String(c[0])).join('');
232
+ expect(output).toContain('[DEV·CLOUD]');
233
+ });
234
+ it('identifies unknown remote as CLOUD not PROD', () => {
235
+ adminBanner('https://other-team-abc.convex.site');
236
+ const output = writeSpy.mock.calls.map((c) => String(c[0])).join('');
237
+ expect(output).toContain('[CLOUD]');
238
+ expect(output).not.toContain('[PROD]');
239
+ });
240
+ it('suppresses output in quiet mode', () => {
241
+ mockIsQuietMode.mockReturnValue(true);
242
+ adminBanner('https://api.productbrain.io');
243
+ expect(writeSpy).not.toHaveBeenCalled();
244
+ });
245
+ });
246
+ describe('confirmProdAction', () => {
247
+ it('returns true immediately for dev environment', async () => {
248
+ const result = await confirmProdAction({ confirm: false, message: 'Are you sure?', isProduction: false });
249
+ expect(result).toBe(true);
250
+ });
251
+ it('returns true immediately when --confirm is passed', async () => {
252
+ const result = await confirmProdAction({ confirm: true, message: 'Are you sure?', isProduction: true });
253
+ expect(result).toBe(true);
254
+ });
255
+ it('returns false in non-TTY prod environment without --confirm', async () => {
256
+ const origIsTTY = process.stdin.isTTY;
257
+ Object.defineProperty(process.stdin, 'isTTY', { value: false, configurable: true });
258
+ const result = await confirmProdAction({ confirm: false, message: 'Seed all?', isProduction: true });
259
+ expect(result).toBe(false);
260
+ Object.defineProperty(process.stdin, 'isTTY', { value: origIsTTY, configurable: true });
261
+ });
262
+ });
263
+ //# sourceMappingURL=style.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.test.js","sourceRoot":"","sources":["../../src/lib/style.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Telemetry — fire-and-forget event tracking for CLI.
3
+ * Uses PostHog capture API directly via fetch. Zero dependencies.
4
+ * Contract: trackEvent(event, props?) → void. Never blocks, errors silently swallowed.
5
+ *
6
+ * Event names follow STD-155: setup_started, key_validated, workspace_bound,
7
+ * first_capture_prompted, setup_completed.
8
+ */
9
+ /** Call once after workspace is known. Sets distinct_id and workspace group. */
10
+ export declare function initTelemetry(workspaceId: string): void;
11
+ /**
12
+ * Fire-and-forget telemetry event. Never throws, never blocks.
13
+ */
14
+ export declare function trackEvent(event: string, properties?: Record<string, unknown>): void;
15
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGvD;AAMD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAuBpF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Telemetry — fire-and-forget event tracking for CLI.
3
+ * Uses PostHog capture API directly via fetch. Zero dependencies.
4
+ * Contract: trackEvent(event, props?) → void. Never blocks, errors silently swallowed.
5
+ *
6
+ * Event names follow STD-155: setup_started, key_validated, workspace_bound,
7
+ * first_capture_prompted, setup_completed.
8
+ */
9
+ const POSTHOG_HOST = 'https://eu.i.posthog.com';
10
+ const POSTHOG_KEY = 'phc_T09qliVxaxpdK8jL3HhSBhedzgxw5N4G4yG4x01jrxj';
11
+ let distinctId = 'anonymous';
12
+ let workspaceGroup;
13
+ /** Call once after workspace is known. Sets distinct_id and workspace group. */
14
+ export function initTelemetry(workspaceId) {
15
+ distinctId = workspaceId;
16
+ workspaceGroup = workspaceId;
17
+ }
18
+ function isDisabled() {
19
+ return process.env.PB_TELEMETRY_DISABLED === '1';
20
+ }
21
+ /**
22
+ * Fire-and-forget telemetry event. Never throws, never blocks.
23
+ */
24
+ export function trackEvent(event, properties) {
25
+ if (isDisabled())
26
+ return;
27
+ const payload = {
28
+ api_key: POSTHOG_KEY,
29
+ event,
30
+ distinct_id: distinctId,
31
+ properties: {
32
+ ...properties,
33
+ source: 'cli',
34
+ ...(workspaceGroup ? { $groups: { workspace: workspaceGroup } } : {}),
35
+ },
36
+ timestamp: new Date().toISOString(),
37
+ };
38
+ // Fire-and-forget — non-awaited, errors swallowed
39
+ fetch(`${POSTHOG_HOST}/capture/`, {
40
+ method: 'POST',
41
+ headers: { 'Content-Type': 'application/json' },
42
+ body: JSON.stringify(payload),
43
+ }).catch(() => {
44
+ // Telemetry must never break the CLI flow.
45
+ });
46
+ }
47
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,WAAW,GAAG,iDAAiD,CAAC;AAEtE,IAAI,UAAU,GAAG,WAAW,CAAC;AAC7B,IAAI,cAAkC,CAAC;AAEvC,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,UAAU,GAAG,WAAW,CAAC;IACzB,cAAc,GAAG,WAAW,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,UAAoC;IAC5E,IAAI,UAAU,EAAE;QAAE,OAAO;IAEzB,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,WAAW;QACpB,KAAK;QACL,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE;YACV,GAAG,UAAU;YACb,MAAM,EAAE,KAAK;YACb,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,kDAAkD;IAClD,KAAK,CAAC,GAAG,YAAY,WAAW,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,2CAA2C;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Token prefix constants — single source of truth for token format strings.
3
+ * keep in sync with convex/lib/tokenConstants.ts
4
+ * (Monorepo boundary: Convex cannot import from packages/cli and vice versa.)
5
+ *
6
+ * DEC-549
7
+ */
8
+ /** Prefix for permanent API keys (bearer tokens). */
9
+ export declare const API_KEY_PREFIX = "pb_sk_";
10
+ /** Prefix for short-lived connect tokens (15-min, single-use). */
11
+ export declare const CONNECT_TOKEN_PREFIX = "pb_ct_";
12
+ /**
13
+ * Length of the random hex component in generated API keys.
14
+ * 32 hex chars = 128-bit entropy.
15
+ */
16
+ export declare const API_KEY_HEX_LENGTH = 32;
17
+ //# sourceMappingURL=tokenConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/lib/tokenConstants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qDAAqD;AACrD,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Token prefix constants — single source of truth for token format strings.
3
+ * keep in sync with convex/lib/tokenConstants.ts
4
+ * (Monorepo boundary: Convex cannot import from packages/cli and vice versa.)
5
+ *
6
+ * DEC-549
7
+ */
8
+ /** Prefix for permanent API keys (bearer tokens). */
9
+ export const API_KEY_PREFIX = 'pb_sk_';
10
+ /** Prefix for short-lived connect tokens (15-min, single-use). */
11
+ export const CONNECT_TOKEN_PREFIX = 'pb_ct_';
12
+ /**
13
+ * Length of the random hex component in generated API keys.
14
+ * 32 hex chars = 128-bit entropy.
15
+ */
16
+ export const API_KEY_HEX_LENGTH = 32;
17
+ //# sourceMappingURL=tokenConstants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenConstants.js","sourceRoot":"","sources":["../../src/lib/tokenConstants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEvC,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Ambient update notification for the Product Brain CLI (WP-322 S1 / FEAT-1012).
3
+ *
4
+ * Checks npm registry for the latest version of @productbrain/cli and prints
5
+ * a one-line notification when a newer version is available.
6
+ *
7
+ * Rules:
8
+ * - Non-blocking: check fires async, never delays the command
9
+ * - 24h cache at ~/.config/productbrain/update-check.json
10
+ * - Silent on any error (network down, registry unreachable, etc.)
11
+ * - JSON mode: suppress notification entirely
12
+ * - Does NOT use undici/fetch directly; uses Node.js built-in https
13
+ */
14
+ /**
15
+ * Prints one line to stderr if a newer version is available.
16
+ * The check is always non-blocking: it fires async and is not awaited by the caller.
17
+ *
18
+ * Call once per human-initiated command, just before the command action runs.
19
+ */
20
+ export declare function checkForUpdate(currentVersion: string): void;
21
+ //# sourceMappingURL=update-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAuGH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CA0B3D"}