@productbrain/cli 0.1.0-beta.7 → 0.1.0-beta.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. package/README.md +98 -30
  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.d.ts +2 -0
  15. package/dist/__tests__/capture.test.d.ts.map +1 -0
  16. package/dist/__tests__/capture.test.js +377 -0
  17. package/dist/__tests__/capture.test.js.map +1 -0
  18. package/dist/__tests__/config.test.d.ts +8 -0
  19. package/dist/__tests__/config.test.d.ts.map +1 -0
  20. package/dist/__tests__/config.test.js +166 -0
  21. package/dist/__tests__/config.test.js.map +1 -0
  22. package/dist/__tests__/constants.test.d.ts +2 -0
  23. package/dist/__tests__/constants.test.d.ts.map +1 -0
  24. package/dist/__tests__/constants.test.js +141 -0
  25. package/dist/__tests__/constants.test.js.map +1 -0
  26. package/dist/__tests__/constellation.test.d.ts +2 -0
  27. package/dist/__tests__/constellation.test.d.ts.map +1 -0
  28. package/dist/__tests__/constellation.test.js +254 -0
  29. package/dist/__tests__/constellation.test.js.map +1 -0
  30. package/dist/__tests__/context-strategy.test.d.ts +2 -0
  31. package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
  32. package/dist/__tests__/context-strategy.test.js +79 -0
  33. package/dist/__tests__/context-strategy.test.js.map +1 -0
  34. package/dist/__tests__/errors.test.d.ts +2 -0
  35. package/dist/__tests__/errors.test.d.ts.map +1 -0
  36. package/dist/__tests__/errors.test.js +117 -0
  37. package/dist/__tests__/errors.test.js.map +1 -0
  38. package/dist/__tests__/experiment.test.d.ts +6 -0
  39. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  40. package/dist/__tests__/experiment.test.js +69 -0
  41. package/dist/__tests__/experiment.test.js.map +1 -0
  42. package/dist/__tests__/fields.test.d.ts +2 -0
  43. package/dist/__tests__/fields.test.d.ts.map +1 -0
  44. package/dist/__tests__/fields.test.js +238 -0
  45. package/dist/__tests__/fields.test.js.map +1 -0
  46. package/dist/__tests__/glossary.test.d.ts +2 -0
  47. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  48. package/dist/__tests__/glossary.test.js +32 -0
  49. package/dist/__tests__/glossary.test.js.map +1 -0
  50. package/dist/__tests__/handshake.test.d.ts +2 -0
  51. package/dist/__tests__/handshake.test.d.ts.map +1 -0
  52. package/dist/__tests__/handshake.test.js +196 -0
  53. package/dist/__tests__/handshake.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__/onboarding-path-b.test.d.ts +2 -0
  65. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  66. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  67. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  68. package/dist/__tests__/onboarding.test.d.ts +6 -0
  69. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  70. package/dist/__tests__/onboarding.test.js +347 -0
  71. package/dist/__tests__/onboarding.test.js.map +1 -0
  72. package/dist/__tests__/orient.test.d.ts +2 -0
  73. package/dist/__tests__/orient.test.d.ts.map +1 -0
  74. package/dist/__tests__/orient.test.js +143 -0
  75. package/dist/__tests__/orient.test.js.map +1 -0
  76. package/dist/__tests__/profiles.test.d.ts +2 -0
  77. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  78. package/dist/__tests__/profiles.test.js +168 -0
  79. package/dist/__tests__/profiles.test.js.map +1 -0
  80. package/dist/__tests__/promote.test.d.ts +2 -0
  81. package/dist/__tests__/promote.test.d.ts.map +1 -0
  82. package/dist/__tests__/promote.test.js +161 -0
  83. package/dist/__tests__/promote.test.js.map +1 -0
  84. package/dist/__tests__/prompts.test.d.ts +6 -0
  85. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  86. package/dist/__tests__/prompts.test.js +146 -0
  87. package/dist/__tests__/prompts.test.js.map +1 -0
  88. package/dist/__tests__/proposals.test.d.ts +2 -0
  89. package/dist/__tests__/proposals.test.d.ts.map +1 -0
  90. package/dist/__tests__/proposals.test.js +167 -0
  91. package/dist/__tests__/proposals.test.js.map +1 -0
  92. package/dist/__tests__/relate.test.d.ts +2 -0
  93. package/dist/__tests__/relate.test.d.ts.map +1 -0
  94. package/dist/__tests__/relate.test.js +103 -0
  95. package/dist/__tests__/relate.test.js.map +1 -0
  96. package/dist/__tests__/repo-detect.test.d.ts +2 -0
  97. package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
  98. package/dist/__tests__/repo-detect.test.js +215 -0
  99. package/dist/__tests__/repo-detect.test.js.map +1 -0
  100. package/dist/__tests__/runner.test.d.ts +2 -0
  101. package/dist/__tests__/runner.test.d.ts.map +1 -0
  102. package/dist/__tests__/runner.test.js +219 -0
  103. package/dist/__tests__/runner.test.js.map +1 -0
  104. package/dist/__tests__/session-state-machine.test.d.ts +2 -0
  105. package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
  106. package/dist/__tests__/session-state-machine.test.js +154 -0
  107. package/dist/__tests__/session-state-machine.test.js.map +1 -0
  108. package/dist/__tests__/session-touch.test.d.ts +2 -0
  109. package/dist/__tests__/session-touch.test.d.ts.map +1 -0
  110. package/dist/__tests__/session-touch.test.js +134 -0
  111. package/dist/__tests__/session-touch.test.js.map +1 -0
  112. package/dist/__tests__/session.test.d.ts +2 -0
  113. package/dist/__tests__/session.test.d.ts.map +1 -0
  114. package/dist/__tests__/session.test.js +46 -0
  115. package/dist/__tests__/session.test.js.map +1 -0
  116. package/dist/__tests__/setup.test.d.ts +2 -0
  117. package/dist/__tests__/setup.test.d.ts.map +1 -0
  118. package/dist/__tests__/setup.test.js +141 -0
  119. package/dist/__tests__/setup.test.js.map +1 -0
  120. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  121. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  122. package/dist/__tests__/spinner-labels.test.js +23 -0
  123. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  124. package/dist/__tests__/strip.test.d.ts +2 -0
  125. package/dist/__tests__/strip.test.d.ts.map +1 -0
  126. package/dist/__tests__/strip.test.js +136 -0
  127. package/dist/__tests__/strip.test.js.map +1 -0
  128. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  129. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  130. package/dist/__tests__/surface-profiles.test.js +233 -0
  131. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  132. package/dist/__tests__/update.test.d.ts +2 -0
  133. package/dist/__tests__/update.test.d.ts.map +1 -0
  134. package/dist/__tests__/update.test.js +228 -0
  135. package/dist/__tests__/update.test.js.map +1 -0
  136. package/dist/__tests__/workspace.test.d.ts +2 -0
  137. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  138. package/dist/__tests__/workspace.test.js +308 -0
  139. package/dist/__tests__/workspace.test.js.map +1 -0
  140. package/dist/commands/accept.d.ts +18 -0
  141. package/dist/commands/accept.d.ts.map +1 -0
  142. package/dist/commands/accept.js +76 -0
  143. package/dist/commands/accept.js.map +1 -0
  144. package/dist/commands/admin/cockpit.d.ts +88 -0
  145. package/dist/commands/admin/cockpit.d.ts.map +1 -0
  146. package/dist/commands/admin/cockpit.js +409 -0
  147. package/dist/commands/admin/cockpit.js.map +1 -0
  148. package/dist/commands/admin/index.d.ts +21 -0
  149. package/dist/commands/admin/index.d.ts.map +1 -0
  150. package/dist/commands/admin/index.js +254 -0
  151. package/dist/commands/admin/index.js.map +1 -0
  152. package/dist/commands/admin/inspect.d.ts +21 -0
  153. package/dist/commands/admin/inspect.d.ts.map +1 -0
  154. package/dist/commands/admin/inspect.js +536 -0
  155. package/dist/commands/admin/inspect.js.map +1 -0
  156. package/dist/commands/admin/inspect.test.d.ts +7 -0
  157. package/dist/commands/admin/inspect.test.d.ts.map +1 -0
  158. package/dist/commands/admin/inspect.test.js +71 -0
  159. package/dist/commands/admin/inspect.test.js.map +1 -0
  160. package/dist/commands/admin/seed.d.ts +32 -0
  161. package/dist/commands/admin/seed.d.ts.map +1 -0
  162. package/dist/commands/admin/seed.js +527 -0
  163. package/dist/commands/admin/seed.js.map +1 -0
  164. package/dist/commands/admin/seed.test.d.ts +6 -0
  165. package/dist/commands/admin/seed.test.d.ts.map +1 -0
  166. package/dist/commands/admin/seed.test.js +65 -0
  167. package/dist/commands/admin/seed.test.js.map +1 -0
  168. package/dist/commands/audit.d.ts +25 -0
  169. package/dist/commands/audit.d.ts.map +1 -0
  170. package/dist/commands/audit.js +188 -0
  171. package/dist/commands/audit.js.map +1 -0
  172. package/dist/commands/brand-pack.d.ts +2 -0
  173. package/dist/commands/brand-pack.d.ts.map +1 -0
  174. package/dist/commands/brand-pack.js +25 -0
  175. package/dist/commands/brand-pack.js.map +1 -0
  176. package/dist/commands/brief.d.ts +28 -0
  177. package/dist/commands/brief.d.ts.map +1 -0
  178. package/dist/commands/brief.js +75 -0
  179. package/dist/commands/brief.js.map +1 -0
  180. package/dist/commands/capture.d.ts +30 -0
  181. package/dist/commands/capture.d.ts.map +1 -0
  182. package/dist/commands/capture.js +385 -0
  183. package/dist/commands/capture.js.map +1 -0
  184. package/dist/commands/chain-walk.d.ts +14 -0
  185. package/dist/commands/chain-walk.d.ts.map +1 -0
  186. package/dist/commands/chain-walk.js +38 -0
  187. package/dist/commands/chain-walk.js.map +1 -0
  188. package/dist/commands/changes.d.ts +11 -0
  189. package/dist/commands/changes.d.ts.map +1 -0
  190. package/dist/commands/changes.js +46 -0
  191. package/dist/commands/changes.js.map +1 -0
  192. package/dist/commands/codex-prep.d.ts +12 -0
  193. package/dist/commands/codex-prep.d.ts.map +1 -0
  194. package/dist/commands/codex-prep.js +122 -0
  195. package/dist/commands/codex-prep.js.map +1 -0
  196. package/dist/commands/collections.d.ts +22 -0
  197. package/dist/commands/collections.d.ts.map +1 -0
  198. package/dist/commands/collections.js +77 -0
  199. package/dist/commands/collections.js.map +1 -0
  200. package/dist/commands/connect-integration.test.d.ts +7 -0
  201. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  202. package/dist/commands/connect-integration.test.js +200 -0
  203. package/dist/commands/connect-integration.test.js.map +1 -0
  204. package/dist/commands/connect.d.ts +21 -0
  205. package/dist/commands/connect.d.ts.map +1 -0
  206. package/dist/commands/connect.js +279 -0
  207. package/dist/commands/connect.js.map +1 -0
  208. package/dist/commands/connect.test.d.ts +6 -0
  209. package/dist/commands/connect.test.d.ts.map +1 -0
  210. package/dist/commands/connect.test.js +230 -0
  211. package/dist/commands/connect.test.js.map +1 -0
  212. package/dist/commands/constellation.d.ts +11 -0
  213. package/dist/commands/constellation.d.ts.map +1 -0
  214. package/dist/commands/constellation.js +33 -0
  215. package/dist/commands/constellation.js.map +1 -0
  216. package/dist/commands/context.d.ts +2 -1
  217. package/dist/commands/context.d.ts.map +1 -1
  218. package/dist/commands/context.js +21 -10
  219. package/dist/commands/context.js.map +1 -1
  220. package/dist/commands/cross-cut.d.ts +11 -0
  221. package/dist/commands/cross-cut.d.ts.map +1 -0
  222. package/dist/commands/cross-cut.js +23 -0
  223. package/dist/commands/cross-cut.js.map +1 -0
  224. package/dist/commands/doctor.d.ts +18 -0
  225. package/dist/commands/doctor.d.ts.map +1 -0
  226. package/dist/commands/doctor.js +232 -0
  227. package/dist/commands/doctor.js.map +1 -0
  228. package/dist/commands/doctor.test.d.ts +8 -0
  229. package/dist/commands/doctor.test.d.ts.map +1 -0
  230. package/dist/commands/doctor.test.js +311 -0
  231. package/dist/commands/doctor.test.js.map +1 -0
  232. package/dist/commands/fields.d.ts +9 -0
  233. package/dist/commands/fields.d.ts.map +1 -0
  234. package/dist/commands/fields.js +30 -0
  235. package/dist/commands/fields.js.map +1 -0
  236. package/dist/commands/get.d.ts +8 -1
  237. package/dist/commands/get.d.ts.map +1 -1
  238. package/dist/commands/get.js +61 -8
  239. package/dist/commands/get.js.map +1 -1
  240. package/dist/commands/handshake.d.ts +28 -0
  241. package/dist/commands/handshake.d.ts.map +1 -0
  242. package/dist/commands/handshake.js +617 -0
  243. package/dist/commands/handshake.js.map +1 -0
  244. package/dist/commands/ingest.d.ts +8 -2
  245. package/dist/commands/ingest.d.ts.map +1 -1
  246. package/dist/commands/ingest.js +151 -28
  247. package/dist/commands/ingest.js.map +1 -1
  248. package/dist/commands/init.d.ts +14 -0
  249. package/dist/commands/init.d.ts.map +1 -0
  250. package/dist/commands/init.js +117 -0
  251. package/dist/commands/init.js.map +1 -0
  252. package/dist/commands/login.d.ts +4 -0
  253. package/dist/commands/login.d.ts.map +1 -1
  254. package/dist/commands/login.js +101 -38
  255. package/dist/commands/login.js.map +1 -1
  256. package/dist/commands/orient.d.ts +107 -1
  257. package/dist/commands/orient.d.ts.map +1 -1
  258. package/dist/commands/orient.js +25 -9
  259. package/dist/commands/orient.js.map +1 -1
  260. package/dist/commands/profile.d.ts +24 -0
  261. package/dist/commands/profile.d.ts.map +1 -0
  262. package/dist/commands/profile.js +82 -0
  263. package/dist/commands/profile.js.map +1 -0
  264. package/dist/commands/promote.d.ts +12 -0
  265. package/dist/commands/promote.d.ts.map +1 -0
  266. package/dist/commands/promote.js +90 -0
  267. package/dist/commands/promote.js.map +1 -0
  268. package/dist/commands/proposals.d.ts +9 -0
  269. package/dist/commands/proposals.d.ts.map +1 -0
  270. package/dist/commands/proposals.js +24 -0
  271. package/dist/commands/proposals.js.map +1 -0
  272. package/dist/commands/reject.d.ts +14 -0
  273. package/dist/commands/reject.d.ts.map +1 -0
  274. package/dist/commands/reject.js +43 -0
  275. package/dist/commands/reject.js.map +1 -0
  276. package/dist/commands/relate.d.ts +16 -0
  277. package/dist/commands/relate.d.ts.map +1 -0
  278. package/dist/commands/relate.js +98 -0
  279. package/dist/commands/relate.js.map +1 -0
  280. package/dist/commands/search.d.ts +1 -0
  281. package/dist/commands/search.d.ts.map +1 -1
  282. package/dist/commands/search.js +6 -4
  283. package/dist/commands/search.js.map +1 -1
  284. package/dist/commands/session.d.ts +20 -0
  285. package/dist/commands/session.d.ts.map +1 -0
  286. package/dist/commands/session.js +203 -0
  287. package/dist/commands/session.js.map +1 -0
  288. package/dist/commands/setup.d.ts +15 -0
  289. package/dist/commands/setup.d.ts.map +1 -0
  290. package/dist/commands/setup.js +168 -0
  291. package/dist/commands/setup.js.map +1 -0
  292. package/dist/commands/update.d.ts +17 -0
  293. package/dist/commands/update.d.ts.map +1 -0
  294. package/dist/commands/update.js +178 -0
  295. package/dist/commands/update.js.map +1 -0
  296. package/dist/commands/usage.d.ts +40 -0
  297. package/dist/commands/usage.d.ts.map +1 -0
  298. package/dist/commands/usage.js +232 -0
  299. package/dist/commands/usage.js.map +1 -0
  300. package/dist/commands/verify.d.ts +13 -0
  301. package/dist/commands/verify.d.ts.map +1 -0
  302. package/dist/commands/verify.js +49 -0
  303. package/dist/commands/verify.js.map +1 -0
  304. package/dist/commands/workspace.d.ts +41 -0
  305. package/dist/commands/workspace.d.ts.map +1 -0
  306. package/dist/commands/workspace.js +239 -0
  307. package/dist/commands/workspace.js.map +1 -0
  308. package/dist/formatters/audit.d.ts +46 -0
  309. package/dist/formatters/audit.d.ts.map +1 -0
  310. package/dist/formatters/audit.js +81 -0
  311. package/dist/formatters/audit.js.map +1 -0
  312. package/dist/formatters/brief.d.ts +112 -0
  313. package/dist/formatters/brief.d.ts.map +1 -0
  314. package/dist/formatters/brief.js +179 -0
  315. package/dist/formatters/brief.js.map +1 -0
  316. package/dist/formatters/capture.d.ts +48 -0
  317. package/dist/formatters/capture.d.ts.map +1 -0
  318. package/dist/formatters/capture.js +77 -0
  319. package/dist/formatters/capture.js.map +1 -0
  320. package/dist/formatters/chain-walk.d.ts +33 -0
  321. package/dist/formatters/chain-walk.d.ts.map +1 -0
  322. package/dist/formatters/chain-walk.js +54 -0
  323. package/dist/formatters/chain-walk.js.map +1 -0
  324. package/dist/formatters/changes.d.ts +25 -0
  325. package/dist/formatters/changes.d.ts.map +1 -0
  326. package/dist/formatters/changes.js +60 -0
  327. package/dist/formatters/changes.js.map +1 -0
  328. package/dist/formatters/collections.d.ts +40 -0
  329. package/dist/formatters/collections.d.ts.map +1 -0
  330. package/dist/formatters/collections.js +93 -0
  331. package/dist/formatters/collections.js.map +1 -0
  332. package/dist/formatters/constellation.d.ts +34 -0
  333. package/dist/formatters/constellation.d.ts.map +1 -0
  334. package/dist/formatters/constellation.js +38 -0
  335. package/dist/formatters/constellation.js.map +1 -0
  336. package/dist/formatters/cross-cut.d.ts +21 -0
  337. package/dist/formatters/cross-cut.d.ts.map +1 -0
  338. package/dist/formatters/cross-cut.js +32 -0
  339. package/dist/formatters/cross-cut.js.map +1 -0
  340. package/dist/formatters/entry.d.ts +11 -4
  341. package/dist/formatters/entry.d.ts.map +1 -1
  342. package/dist/formatters/entry.js +24 -8
  343. package/dist/formatters/entry.js.map +1 -1
  344. package/dist/formatters/fields.d.ts +32 -0
  345. package/dist/formatters/fields.d.ts.map +1 -0
  346. package/dist/formatters/fields.js +49 -0
  347. package/dist/formatters/fields.js.map +1 -0
  348. package/dist/formatters/handshake.d.ts +24 -0
  349. package/dist/formatters/handshake.d.ts.map +1 -0
  350. package/dist/formatters/handshake.js +69 -0
  351. package/dist/formatters/handshake.js.map +1 -0
  352. package/dist/formatters/orient.d.ts +104 -1
  353. package/dist/formatters/orient.d.ts.map +1 -1
  354. package/dist/formatters/orient.js +140 -17
  355. package/dist/formatters/orient.js.map +1 -1
  356. package/dist/formatters/promote.d.ts +30 -0
  357. package/dist/formatters/promote.d.ts.map +1 -0
  358. package/dist/formatters/promote.js +39 -0
  359. package/dist/formatters/promote.js.map +1 -0
  360. package/dist/formatters/proposals.d.ts +45 -0
  361. package/dist/formatters/proposals.d.ts.map +1 -0
  362. package/dist/formatters/proposals.js +62 -0
  363. package/dist/formatters/proposals.js.map +1 -0
  364. package/dist/formatters/relate.d.ts +14 -0
  365. package/dist/formatters/relate.d.ts.map +1 -0
  366. package/dist/formatters/relate.js +16 -0
  367. package/dist/formatters/relate.js.map +1 -0
  368. package/dist/formatters/search.d.ts +0 -4
  369. package/dist/formatters/search.d.ts.map +1 -1
  370. package/dist/formatters/search.js +4 -1
  371. package/dist/formatters/search.js.map +1 -1
  372. package/dist/formatters/session.d.ts +11 -0
  373. package/dist/formatters/session.d.ts.map +1 -0
  374. package/dist/formatters/session.js +53 -0
  375. package/dist/formatters/session.js.map +1 -0
  376. package/dist/formatters/update.d.ts +17 -0
  377. package/dist/formatters/update.d.ts.map +1 -0
  378. package/dist/formatters/update.js +45 -0
  379. package/dist/formatters/update.js.map +1 -0
  380. package/dist/formatters/verify.d.ts +11 -0
  381. package/dist/formatters/verify.d.ts.map +1 -0
  382. package/dist/formatters/verify.js +11 -0
  383. package/dist/formatters/verify.js.map +1 -0
  384. package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
  385. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
  386. package/dist/generators/__tests__/surface-profiles.test.js +89 -0
  387. package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
  388. package/dist/generators/adapters.d.ts +44 -0
  389. package/dist/generators/adapters.d.ts.map +1 -0
  390. package/dist/generators/adapters.js +290 -0
  391. package/dist/generators/adapters.js.map +1 -0
  392. package/dist/generators/adapters.test.d.ts +2 -0
  393. package/dist/generators/adapters.test.d.ts.map +1 -0
  394. package/dist/generators/adapters.test.js +27 -0
  395. package/dist/generators/adapters.test.js.map +1 -0
  396. package/dist/generators/archetypes.d.ts +52 -0
  397. package/dist/generators/archetypes.d.ts.map +1 -0
  398. package/dist/generators/archetypes.js +153 -0
  399. package/dist/generators/archetypes.js.map +1 -0
  400. package/dist/generators/archetypes.test.d.ts +2 -0
  401. package/dist/generators/archetypes.test.d.ts.map +1 -0
  402. package/dist/generators/archetypes.test.js +237 -0
  403. package/dist/generators/archetypes.test.js.map +1 -0
  404. package/dist/generators/briefing-md.d.ts +8 -0
  405. package/dist/generators/briefing-md.d.ts.map +1 -0
  406. package/dist/generators/briefing-md.js +51 -0
  407. package/dist/generators/briefing-md.js.map +1 -0
  408. package/dist/generators/chain-classifier.d.ts +49 -0
  409. package/dist/generators/chain-classifier.d.ts.map +1 -0
  410. package/dist/generators/chain-classifier.js +180 -0
  411. package/dist/generators/chain-classifier.js.map +1 -0
  412. package/dist/generators/chain-classifier.test.d.ts +2 -0
  413. package/dist/generators/chain-classifier.test.d.ts.map +1 -0
  414. package/dist/generators/chain-classifier.test.js +257 -0
  415. package/dist/generators/chain-classifier.test.js.map +1 -0
  416. package/dist/generators/chain-rules.d.ts +42 -0
  417. package/dist/generators/chain-rules.d.ts.map +1 -0
  418. package/dist/generators/chain-rules.js +144 -0
  419. package/dist/generators/chain-rules.js.map +1 -0
  420. package/dist/generators/chain-rules.test.d.ts +2 -0
  421. package/dist/generators/chain-rules.test.d.ts.map +1 -0
  422. package/dist/generators/chain-rules.test.js +179 -0
  423. package/dist/generators/chain-rules.test.js.map +1 -0
  424. package/dist/generators/context-md.d.ts +8 -0
  425. package/dist/generators/context-md.d.ts.map +1 -0
  426. package/dist/generators/context-md.js +134 -0
  427. package/dist/generators/context-md.js.map +1 -0
  428. package/dist/generators/handshake-diff.d.ts +67 -0
  429. package/dist/generators/handshake-diff.d.ts.map +1 -0
  430. package/dist/generators/handshake-diff.js +183 -0
  431. package/dist/generators/handshake-diff.js.map +1 -0
  432. package/dist/generators/handshake-diff.test.d.ts +2 -0
  433. package/dist/generators/handshake-diff.test.d.ts.map +1 -0
  434. package/dist/generators/handshake-diff.test.js +264 -0
  435. package/dist/generators/handshake-diff.test.js.map +1 -0
  436. package/dist/generators/portable-knowledge.d.ts +143 -0
  437. package/dist/generators/portable-knowledge.d.ts.map +1 -0
  438. package/dist/generators/portable-knowledge.js +504 -0
  439. package/dist/generators/portable-knowledge.js.map +1 -0
  440. package/dist/generators/portable-knowledge.test.d.ts +2 -0
  441. package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
  442. package/dist/generators/portable-knowledge.test.js +927 -0
  443. package/dist/generators/portable-knowledge.test.js.map +1 -0
  444. package/dist/generators/surface-profiles.d.ts +49 -0
  445. package/dist/generators/surface-profiles.d.ts.map +1 -0
  446. package/dist/generators/surface-profiles.js +98 -0
  447. package/dist/generators/surface-profiles.js.map +1 -0
  448. package/dist/index.d.ts +3 -2
  449. package/dist/index.d.ts.map +1 -1
  450. package/dist/index.js +670 -37
  451. package/dist/index.js.map +1 -1
  452. package/dist/lib/activation.d.ts +28 -0
  453. package/dist/lib/activation.d.ts.map +1 -0
  454. package/dist/lib/activation.js +57 -0
  455. package/dist/lib/activation.js.map +1 -0
  456. package/dist/lib/activation.test.d.ts +6 -0
  457. package/dist/lib/activation.test.d.ts.map +1 -0
  458. package/dist/lib/activation.test.js +121 -0
  459. package/dist/lib/activation.test.js.map +1 -0
  460. package/dist/lib/client.d.ts +62 -1
  461. package/dist/lib/client.d.ts.map +1 -1
  462. package/dist/lib/client.js +258 -12
  463. package/dist/lib/client.js.map +1 -1
  464. package/dist/lib/config.d.ts +84 -4
  465. package/dist/lib/config.d.ts.map +1 -1
  466. package/dist/lib/config.js +322 -42
  467. package/dist/lib/config.js.map +1 -1
  468. package/dist/lib/constants.d.ts +42 -0
  469. package/dist/lib/constants.d.ts.map +1 -0
  470. package/dist/lib/constants.js +76 -0
  471. package/dist/lib/constants.js.map +1 -0
  472. package/dist/lib/conversation-engine.d.ts +45 -0
  473. package/dist/lib/conversation-engine.d.ts.map +1 -0
  474. package/dist/lib/conversation-engine.js +112 -0
  475. package/dist/lib/conversation-engine.js.map +1 -0
  476. package/dist/lib/conversation-phases.d.ts +59 -0
  477. package/dist/lib/conversation-phases.d.ts.map +1 -0
  478. package/dist/lib/conversation-phases.js +11 -0
  479. package/dist/lib/conversation-phases.js.map +1 -0
  480. package/dist/lib/conversation-signals.d.ts +30 -0
  481. package/dist/lib/conversation-signals.d.ts.map +1 -0
  482. package/dist/lib/conversation-signals.js +64 -0
  483. package/dist/lib/conversation-signals.js.map +1 -0
  484. package/dist/lib/deployment.d.ts +23 -0
  485. package/dist/lib/deployment.d.ts.map +1 -0
  486. package/dist/lib/deployment.js +78 -0
  487. package/dist/lib/deployment.js.map +1 -0
  488. package/dist/lib/deployment.test.d.ts +5 -0
  489. package/dist/lib/deployment.test.d.ts.map +1 -0
  490. package/dist/lib/deployment.test.js +54 -0
  491. package/dist/lib/deployment.test.js.map +1 -0
  492. package/dist/lib/errors.d.ts +58 -0
  493. package/dist/lib/errors.d.ts.map +1 -0
  494. package/dist/lib/errors.js +67 -0
  495. package/dist/lib/errors.js.map +1 -0
  496. package/dist/lib/experiment.d.ts +18 -0
  497. package/dist/lib/experiment.d.ts.map +1 -0
  498. package/dist/lib/experiment.js +28 -0
  499. package/dist/lib/experiment.js.map +1 -0
  500. package/dist/lib/format.d.ts +10 -0
  501. package/dist/lib/format.d.ts.map +1 -0
  502. package/dist/lib/format.js +27 -0
  503. package/dist/lib/format.js.map +1 -0
  504. package/dist/lib/glossary.d.ts +19 -0
  505. package/dist/lib/glossary.d.ts.map +1 -0
  506. package/dist/lib/glossary.js +53 -0
  507. package/dist/lib/glossary.js.map +1 -0
  508. package/dist/lib/onboarding-path-b.d.ts +10 -0
  509. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  510. package/dist/lib/onboarding-path-b.js +214 -0
  511. package/dist/lib/onboarding-path-b.js.map +1 -0
  512. package/dist/lib/onboarding-phases.d.ts +9 -0
  513. package/dist/lib/onboarding-phases.d.ts.map +1 -0
  514. package/dist/lib/onboarding-phases.js +120 -0
  515. package/dist/lib/onboarding-phases.js.map +1 -0
  516. package/dist/lib/onboarding-shared.d.ts +81 -0
  517. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  518. package/dist/lib/onboarding-shared.js +190 -0
  519. package/dist/lib/onboarding-shared.js.map +1 -0
  520. package/dist/lib/onboarding-topics.d.ts +27 -0
  521. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  522. package/dist/lib/onboarding-topics.js +57 -0
  523. package/dist/lib/onboarding-topics.js.map +1 -0
  524. package/dist/lib/onboarding.d.ts +17 -0
  525. package/dist/lib/onboarding.d.ts.map +1 -0
  526. package/dist/lib/onboarding.js +350 -0
  527. package/dist/lib/onboarding.js.map +1 -0
  528. package/dist/lib/profiles.d.ts +39 -0
  529. package/dist/lib/profiles.d.ts.map +1 -0
  530. package/dist/lib/profiles.js +185 -0
  531. package/dist/lib/profiles.js.map +1 -0
  532. package/dist/lib/prompts.d.ts +65 -0
  533. package/dist/lib/prompts.d.ts.map +1 -0
  534. package/dist/lib/prompts.js +132 -0
  535. package/dist/lib/prompts.js.map +1 -0
  536. package/dist/lib/repo-detect.d.ts +33 -0
  537. package/dist/lib/repo-detect.d.ts.map +1 -0
  538. package/dist/lib/repo-detect.js +83 -0
  539. package/dist/lib/repo-detect.js.map +1 -0
  540. package/dist/lib/runner.d.ts +33 -0
  541. package/dist/lib/runner.d.ts.map +1 -0
  542. package/dist/lib/runner.js +79 -0
  543. package/dist/lib/runner.js.map +1 -0
  544. package/dist/lib/session.d.ts +42 -0
  545. package/dist/lib/session.d.ts.map +1 -0
  546. package/dist/lib/session.js +109 -0
  547. package/dist/lib/session.js.map +1 -0
  548. package/dist/lib/spinner.d.ts +27 -0
  549. package/dist/lib/spinner.d.ts.map +1 -0
  550. package/dist/lib/spinner.js +76 -0
  551. package/dist/lib/spinner.js.map +1 -0
  552. package/dist/lib/spinner.test.d.ts +2 -0
  553. package/dist/lib/spinner.test.d.ts.map +1 -0
  554. package/dist/lib/spinner.test.js +39 -0
  555. package/dist/lib/spinner.test.js.map +1 -0
  556. package/dist/lib/strip.d.ts +12 -0
  557. package/dist/lib/strip.d.ts.map +1 -0
  558. package/dist/lib/strip.js +41 -0
  559. package/dist/lib/strip.js.map +1 -0
  560. package/dist/lib/style.d.ts +94 -0
  561. package/dist/lib/style.d.ts.map +1 -0
  562. package/dist/lib/style.js +167 -0
  563. package/dist/lib/style.js.map +1 -0
  564. package/dist/lib/style.test.d.ts +7 -0
  565. package/dist/lib/style.test.d.ts.map +1 -0
  566. package/dist/lib/style.test.js +263 -0
  567. package/dist/lib/style.test.js.map +1 -0
  568. package/dist/lib/telemetry.d.ts +15 -0
  569. package/dist/lib/telemetry.d.ts.map +1 -0
  570. package/dist/lib/telemetry.js +47 -0
  571. package/dist/lib/telemetry.js.map +1 -0
  572. package/dist/lib/tokenConstants.d.ts +17 -0
  573. package/dist/lib/tokenConstants.d.ts.map +1 -0
  574. package/dist/lib/tokenConstants.js +17 -0
  575. package/dist/lib/tokenConstants.js.map +1 -0
  576. package/dist/lib/update-check.d.ts +21 -0
  577. package/dist/lib/update-check.d.ts.map +1 -0
  578. package/dist/lib/update-check.js +144 -0
  579. package/dist/lib/update-check.js.map +1 -0
  580. package/dist/lib/wizard-surfaces.d.ts +47 -0
  581. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  582. package/dist/lib/wizard-surfaces.js +176 -0
  583. package/dist/lib/wizard-surfaces.js.map +1 -0
  584. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  585. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  586. package/dist/lib/wizard-surfaces.test.js +127 -0
  587. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  588. package/dist/lib/wizard-trust.d.ts +31 -0
  589. package/dist/lib/wizard-trust.d.ts.map +1 -0
  590. package/dist/lib/wizard-trust.js +66 -0
  591. package/dist/lib/wizard-trust.js.map +1 -0
  592. package/dist/lib/wizard-trust.test.d.ts +2 -0
  593. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  594. package/dist/lib/wizard-trust.test.js +32 -0
  595. package/dist/lib/wizard-trust.test.js.map +1 -0
  596. package/dist/lib/workspace-probe.d.ts +16 -0
  597. package/dist/lib/workspace-probe.d.ts.map +1 -0
  598. package/dist/lib/workspace-probe.js +33 -0
  599. package/dist/lib/workspace-probe.js.map +1 -0
  600. package/package.json +13 -4
  601. package/templates/archetypes/boundary.md +23 -0
  602. package/templates/archetypes/constraint.md +23 -0
  603. package/templates/archetypes/convention.md +23 -0
  604. package/templates/archetypes/policy.md +23 -0
  605. package/templates/archetypes/quality-gate.md +23 -0
  606. package/templates/archetypes/workflow.md +23 -0
  607. package/templates/general/code-integrity.md +11 -0
  608. package/templates/general/getting-started.md +12 -0
  609. package/templates/node-ts/code-integrity.md +13 -0
  610. package/templates/node-ts/testing.md +12 -0
  611. package/templates/python/code-integrity.md +13 -0
  612. package/templates/python/testing.md +12 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Surface detection — identify installed AI tools (Cursor, Claude Code, VS Code).
3
+ * Part of FEAT-958 Path C: Onboarding wizard (S3).
4
+ * Q1: Which AI tools do you use?
5
+ */
6
+ import { execSync } from 'child_process';
7
+ import { existsSync, readdirSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { homedir } from 'os';
10
+ import * as clack from '@clack/prompts';
11
+ const SURFACES = {
12
+ cursor: {
13
+ id: 'cursor',
14
+ label: 'Cursor',
15
+ hint: "We'll add .cursor/rules/ with your product context",
16
+ },
17
+ 'claude-code': {
18
+ id: 'claude-code',
19
+ label: 'Claude Code',
20
+ hint: "We'll create CLAUDE.md with your product context",
21
+ },
22
+ vscode: {
23
+ id: 'vscode',
24
+ label: 'VS Code',
25
+ hint: "We'll add .github/copilot-instructions.md",
26
+ },
27
+ };
28
+ /**
29
+ * Detect if Cursor is installed.
30
+ * Checks: `which cursor` or common macOS/Windows install paths.
31
+ * Returns: true if found, false otherwise.
32
+ */
33
+ export function detectCursor() {
34
+ try {
35
+ // Try 'which cursor'
36
+ execSync('which cursor', { stdio: 'pipe' });
37
+ return true;
38
+ }
39
+ catch {
40
+ // Check macOS common path
41
+ if (existsSync('/Applications/Cursor.app'))
42
+ return true;
43
+ // Check Windows common path
44
+ if (existsSync(join(process.env.APPDATA || '', 'Cursor')))
45
+ return true;
46
+ return false;
47
+ }
48
+ }
49
+ /**
50
+ * Detect if Claude Code (VS Code extension) is installed.
51
+ * Checks: ~/.vscode/extensions for `anthropic.claude-*` directory.
52
+ * Returns: true if found, false otherwise.
53
+ */
54
+ export function detectClaudeCode() {
55
+ const extensionsPath = join(homedir(), '.vscode', 'extensions');
56
+ if (!existsSync(extensionsPath))
57
+ return false;
58
+ try {
59
+ // List directories in extensions folder
60
+ const dirs = readdirSync(extensionsPath);
61
+ return dirs.some((dir) => dir.startsWith('anthropic.claude-'));
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Detect if VS Code is installed.
69
+ * Checks: `which code` or common install paths.
70
+ * Returns: true if found, false otherwise.
71
+ */
72
+ export function detectVSCode() {
73
+ try {
74
+ execSync('which code', { stdio: 'pipe' });
75
+ return true;
76
+ }
77
+ catch {
78
+ // Check macOS common path
79
+ if (existsSync('/Applications/Visual Studio Code.app'))
80
+ return true;
81
+ // Check Windows common path
82
+ if (existsSync(join(process.env.ProgramFiles || '', 'Microsoft VS Code')))
83
+ return true;
84
+ return false;
85
+ }
86
+ }
87
+ /**
88
+ * Detect all installed AI tools.
89
+ * Returns: array of detected surface IDs (empty if none found).
90
+ */
91
+ export async function detectSurfaces() {
92
+ const detected = [];
93
+ if (detectCursor())
94
+ detected.push('cursor');
95
+ if (detectClaudeCode())
96
+ detected.push('claude-code');
97
+ if (detectVSCode())
98
+ detected.push('vscode');
99
+ return detected;
100
+ }
101
+ /**
102
+ * Prompt user to confirm/modify detected surfaces.
103
+ * Uses multiselect with auto-detected items pre-checked.
104
+ * Returns: user-selected surfaces (can be a subset or addition to detected).
105
+ */
106
+ export async function confirmSurfaces(detected) {
107
+ const allSurfaces = Object.keys(SURFACES);
108
+ // Format options for multiselect
109
+ const options = allSurfaces.map((surface) => ({
110
+ value: surface,
111
+ label: SURFACES[surface].label,
112
+ hint: SURFACES[surface].hint,
113
+ }));
114
+ // Hint for multiselect UX
115
+ console.log(' (Use space to select, enter to confirm)\n');
116
+ // Use multiselect with detected items as initialValues
117
+ const result = await clack.multiselect({
118
+ message: 'Where do you code?',
119
+ options,
120
+ initialValues: detected,
121
+ required: detected.length > 0, // At least one must be selected if any were detected
122
+ });
123
+ // Handle cancel
124
+ if (clack.isCancel(result)) {
125
+ process.exit(130);
126
+ }
127
+ return result.sort();
128
+ }
129
+ /**
130
+ * Run the full surface detection + confirmation flow.
131
+ * Returns: user-confirmed surfaces.
132
+ */
133
+ export async function runSurfaceWizard() {
134
+ const detected = await detectSurfaces();
135
+ if (detected.length === 0) {
136
+ console.log('⚠ No AI tools detected.');
137
+ console.log('');
138
+ console.log('ProductBrain integrates with:');
139
+ for (const surface of Object.values(SURFACES)) {
140
+ console.log(` • ${surface.label} — ${surface.hint}`);
141
+ }
142
+ console.log('');
143
+ console.log('Install one of these tools and try again.');
144
+ console.log('For now, skipping surface configuration.');
145
+ return [];
146
+ }
147
+ // Detected surfaces found — let user confirm/modify
148
+ console.log(`✓ Detected: ${detected.map((s) => SURFACES[s].label).join(', ')}`);
149
+ console.log('');
150
+ const confirmed = await confirmSurfaces(detected);
151
+ return confirmed;
152
+ }
153
+ /** Map wizard Surface IDs to handshake TargetName IDs */
154
+ const SURFACE_TO_TARGET = {
155
+ cursor: 'cursor',
156
+ 'claude-code': 'claude',
157
+ vscode: 'copilot',
158
+ };
159
+ /**
160
+ * Map wizard-detected surfaces to handshake target names.
161
+ * Always includes 'codex' (batch/CI tool, not user-detected).
162
+ * Returns empty array if surfaces is empty (no filtering).
163
+ */
164
+ export function mapSurfacesToTargets(surfaces) {
165
+ if (surfaces.length === 0)
166
+ return []; // empty = no filtering
167
+ const targets = new Set();
168
+ for (const s of surfaces) {
169
+ const t = SURFACE_TO_TARGET[s];
170
+ if (t)
171
+ targets.add(t);
172
+ }
173
+ targets.add('codex'); // always include batch target
174
+ return [...targets];
175
+ }
176
+ //# sourceMappingURL=wizard-surfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-surfaces.js","sourceRoot":"","sources":["../../src/lib/wizard-surfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wizard-surfaces.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-surfaces.test.d.ts","sourceRoot":"","sources":["../../src/lib/wizard-surfaces.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { execSync } from 'child_process';
3
+ import { existsSync, readdirSync } from 'fs';
4
+ vi.mock('child_process', () => ({ execSync: vi.fn() }));
5
+ vi.mock('fs', () => {
6
+ const mod = {
7
+ existsSync: vi.fn(() => false),
8
+ readdirSync: vi.fn(() => []),
9
+ };
10
+ return { ...mod, default: mod };
11
+ });
12
+ vi.mock('os', () => ({ homedir: vi.fn(() => '/mock-home') }));
13
+ vi.mock('path', async () => {
14
+ const actual = await vi.importActual('path');
15
+ return actual;
16
+ });
17
+ vi.mock('@clack/prompts', () => ({
18
+ multiselect: vi.fn(),
19
+ isCancel: vi.fn(() => false),
20
+ }));
21
+ import { detectCursor, detectClaudeCode, detectVSCode, detectSurfaces, mapSurfacesToTargets } from './wizard-surfaces.js';
22
+ beforeEach(() => {
23
+ vi.clearAllMocks();
24
+ // Reset defaults: execSync throws, existsSync returns false, readdirSync returns []
25
+ vi.mocked(execSync).mockImplementation(() => {
26
+ throw new Error('not found');
27
+ });
28
+ vi.mocked(existsSync).mockReturnValue(false);
29
+ vi.mocked(readdirSync).mockReturnValue([]);
30
+ });
31
+ describe('detectCursor', () => {
32
+ it('returns true when `which cursor` succeeds', () => {
33
+ vi.mocked(execSync).mockReturnValueOnce(Buffer.from('/usr/local/bin/cursor'));
34
+ expect(detectCursor()).toBe(true);
35
+ });
36
+ it('returns true when execSync throws but /Applications/Cursor.app exists', () => {
37
+ vi.mocked(execSync).mockImplementation(() => {
38
+ throw new Error('not found');
39
+ });
40
+ vi.mocked(existsSync).mockImplementation((p) => {
41
+ if (p === '/Applications/Cursor.app')
42
+ return true;
43
+ return false;
44
+ });
45
+ expect(detectCursor()).toBe(true);
46
+ });
47
+ it('returns false when both which and path checks fail', () => {
48
+ expect(detectCursor()).toBe(false);
49
+ });
50
+ });
51
+ describe('detectClaudeCode', () => {
52
+ it('returns true when extensions dir contains anthropic.claude-*', () => {
53
+ vi.mocked(existsSync).mockImplementation((p) => {
54
+ if (String(p).includes('.vscode/extensions'))
55
+ return true;
56
+ return false;
57
+ });
58
+ // detectClaudeCode uses require('fs').readdirSync internally
59
+ vi.mocked(readdirSync).mockReturnValue(['anthropic.claude-1.0.0']);
60
+ expect(detectClaudeCode()).toBe(true);
61
+ });
62
+ it('returns false when extensions dir does not exist', () => {
63
+ vi.mocked(existsSync).mockReturnValue(false);
64
+ expect(detectClaudeCode()).toBe(false);
65
+ });
66
+ });
67
+ describe('detectVSCode', () => {
68
+ it('returns true when `which code` succeeds', () => {
69
+ vi.mocked(execSync).mockReturnValueOnce(Buffer.from('/usr/local/bin/code'));
70
+ expect(detectVSCode()).toBe(true);
71
+ });
72
+ it('returns false when all checks fail', () => {
73
+ expect(detectVSCode()).toBe(false);
74
+ });
75
+ });
76
+ describe('detectSurfaces', () => {
77
+ it('returns detected surfaces for cursor + vscode', async () => {
78
+ // execSync: first call (cursor) succeeds, second call (claude-code existsSync) fails,
79
+ // third call (vscode) succeeds
80
+ let callCount = 0;
81
+ vi.mocked(execSync).mockImplementation(() => {
82
+ callCount++;
83
+ // Call 1: 'which cursor' — succeed
84
+ if (callCount === 1)
85
+ return Buffer.from('/usr/local/bin/cursor');
86
+ // Call 2: 'which code' — succeed
87
+ if (callCount === 2)
88
+ return Buffer.from('/usr/local/bin/code');
89
+ throw new Error('not found');
90
+ });
91
+ // existsSync: extensions dir doesn't exist (so claude-code is false)
92
+ vi.mocked(existsSync).mockReturnValue(false);
93
+ const result = await detectSurfaces();
94
+ expect(result).toEqual(['cursor', 'vscode']);
95
+ });
96
+ });
97
+ describe('mapSurfacesToTargets', () => {
98
+ it('maps cursor to cursor', () => {
99
+ const targets = mapSurfacesToTargets(['cursor']);
100
+ expect(targets).toContain('cursor');
101
+ });
102
+ it('maps claude-code to claude', () => {
103
+ const targets = mapSurfacesToTargets(['claude-code']);
104
+ expect(targets).toContain('claude');
105
+ });
106
+ it('maps vscode to copilot', () => {
107
+ const targets = mapSurfacesToTargets(['vscode']);
108
+ expect(targets).toContain('copilot');
109
+ });
110
+ it('always includes codex for non-empty input', () => {
111
+ const targets = mapSurfacesToTargets(['cursor']);
112
+ expect(targets).toContain('codex');
113
+ });
114
+ it('returns empty array for empty input', () => {
115
+ const targets = mapSurfacesToTargets([]);
116
+ expect(targets).toEqual([]);
117
+ });
118
+ it('maps multiple surfaces correctly', () => {
119
+ const targets = mapSurfacesToTargets(['cursor', 'claude-code', 'vscode']);
120
+ expect(targets).toContain('cursor');
121
+ expect(targets).toContain('claude');
122
+ expect(targets).toContain('copilot');
123
+ expect(targets).toContain('codex');
124
+ expect(targets).toHaveLength(4);
125
+ });
126
+ });
127
+ //# sourceMappingURL=wizard-surfaces.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-surfaces.test.js","sourceRoot":"","sources":["../../src/lib/wizard-surfaces.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Trust level selection — reuses handshake --init logic.
3
+ * Part of FEAT-958 Path C: Onboarding wizard (S3).
4
+ * Q2: How much context should ProductBrain see?
5
+ */
6
+ export type TrustLevel = 'basic' | 'intermediate' | 'full';
7
+ /**
8
+ * Prompt user to select trust level.
9
+ * Defaults to 'intermediate'.
10
+ * Returns: selected trust level.
11
+ */
12
+ export declare function askTrustLevel(): Promise<TrustLevel>;
13
+ /**
14
+ * Get the description for a trust level.
15
+ * Used for display/confirmation messages.
16
+ */
17
+ export declare function getTrustLevelDescription(level: TrustLevel): string;
18
+ /**
19
+ * Validate trust level string.
20
+ * Returns: error message if invalid, undefined if valid.
21
+ */
22
+ export declare function validateTrustLevel(level: string): string | undefined;
23
+ /**
24
+ * Get all trust levels (for help text, etc).
25
+ */
26
+ export declare function getTrustLevels(): Array<{
27
+ value: TrustLevel;
28
+ label: string;
29
+ description: string;
30
+ }>;
31
+ //# sourceMappingURL=wizard-trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-trust.d.ts","sourceRoot":"","sources":["../../src/lib/wizard-trust.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAyB3D;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAWzD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAMjG"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Trust level selection — reuses handshake --init logic.
3
+ * Part of FEAT-958 Path C: Onboarding wizard (S3).
4
+ * Q2: How much context should ProductBrain see?
5
+ */
6
+ import { select as promptSelect } from './prompts.js';
7
+ const TRUST_LEVELS = {
8
+ basic: {
9
+ label: 'Basic',
10
+ description: 'Only entry names and titles (minimal context)',
11
+ },
12
+ intermediate: {
13
+ label: 'Intermediate',
14
+ description: 'Names, descriptions, and relations (recommended)',
15
+ },
16
+ full: {
17
+ label: 'Full',
18
+ description: 'Complete context including custom fields',
19
+ },
20
+ };
21
+ // Explicit ordering — determines menu numbering
22
+ const TRUST_KEYS = ['basic', 'intermediate', 'full'];
23
+ /**
24
+ * Prompt user to select trust level.
25
+ * Defaults to 'intermediate'.
26
+ * Returns: selected trust level.
27
+ */
28
+ export async function askTrustLevel() {
29
+ const result = await promptSelect({
30
+ message: 'How much context should ProductBrain see?',
31
+ options: TRUST_KEYS.map((key) => ({
32
+ value: key,
33
+ label: TRUST_LEVELS[key].label,
34
+ hint: TRUST_LEVELS[key].description,
35
+ })),
36
+ });
37
+ return result;
38
+ }
39
+ /**
40
+ * Get the description for a trust level.
41
+ * Used for display/confirmation messages.
42
+ */
43
+ export function getTrustLevelDescription(level) {
44
+ return TRUST_LEVELS[level].description;
45
+ }
46
+ /**
47
+ * Validate trust level string.
48
+ * Returns: error message if invalid, undefined if valid.
49
+ */
50
+ export function validateTrustLevel(level) {
51
+ if (!TRUST_KEYS.includes(level)) {
52
+ return `Invalid trust level "${level}". Valid options: ${TRUST_KEYS.join(', ')}`;
53
+ }
54
+ return undefined;
55
+ }
56
+ /**
57
+ * Get all trust levels (for help text, etc).
58
+ */
59
+ export function getTrustLevels() {
60
+ return TRUST_KEYS.map((key) => ({
61
+ value: key,
62
+ label: TRUST_LEVELS[key].label,
63
+ description: TRUST_LEVELS[key].description,
64
+ }));
65
+ }
66
+ //# sourceMappingURL=wizard-trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-trust.js","sourceRoot":"","sources":["../../src/lib/wizard-trust.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAStD,MAAM,YAAY,GAAyC;IACzD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,+CAA+C;KAC7D;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,kDAAkD;KAChE;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,0CAA0C;KACxD;CACF,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,GAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAa;QAC5C,OAAO,EAAE,2CAA2C;QACpD,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK;YAC9B,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW;SACpC,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAiB;IACxD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAmB,CAAC,EAAE,CAAC;QAC9C,OAAO,wBAAwB,KAAK,qBAAqB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK;QAC9B,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW;KAC3C,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wizard-trust.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-trust.test.d.ts","sourceRoot":"","sources":["../../src/lib/wizard-trust.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { validateTrustLevel, getTrustLevelDescription, getTrustLevels, } from './wizard-trust.js';
3
+ describe('Trust Level Validation', () => {
4
+ it('should validate correct trust levels', () => {
5
+ expect(validateTrustLevel('basic')).toBeUndefined();
6
+ expect(validateTrustLevel('intermediate')).toBeUndefined();
7
+ expect(validateTrustLevel('full')).toBeUndefined();
8
+ });
9
+ it('should reject invalid trust levels', () => {
10
+ const result = validateTrustLevel('invalid');
11
+ expect(result).toBeDefined();
12
+ expect(result).toContain('Invalid trust level');
13
+ });
14
+ it('should return descriptions for trust levels', () => {
15
+ const basic = getTrustLevelDescription('basic');
16
+ expect(basic).toContain('names and titles');
17
+ const intermediate = getTrustLevelDescription('intermediate');
18
+ expect(intermediate).toContain('descriptions');
19
+ const full = getTrustLevelDescription('full');
20
+ expect(full).toContain('custom fields');
21
+ });
22
+ it('should return all trust levels', () => {
23
+ const levels = getTrustLevels();
24
+ expect(levels).toHaveLength(3);
25
+ expect(levels.map((l) => l.value)).toEqual(['basic', 'intermediate', 'full']);
26
+ });
27
+ it('should have valid TrustLevel type', () => {
28
+ const level = 'intermediate';
29
+ expect(level).toBe('intermediate');
30
+ });
31
+ });
32
+ //# sourceMappingURL=wizard-trust.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-trust.test.js","sourceRoot":"","sources":["../../src/lib/wizard-trust.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,GAEf,MAAM,mBAAmB,CAAC;AAE3B,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3D,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAE5C,MAAM,YAAY,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,KAAK,GAAe,cAAc,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared workspace probe utility — single source of truth for workspace connectivity check.
3
+ * Used by both `pb init` and the no-args dashboard in `index.ts`.
4
+ *
5
+ * Design: lightweight orient call to detect workspace reachability. Returns structured
6
+ * workspace info on success, null on any failure (network, auth, offline).
7
+ */
8
+ /**
9
+ * Attempt to detect workspace connectivity via a lightweight API call.
10
+ * Returns workspace info on success, null on any failure.
11
+ */
12
+ export declare function probeWorkspace(): Promise<{
13
+ name: string;
14
+ entryCount?: number;
15
+ } | null>;
16
+ //# sourceMappingURL=workspace-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-probe.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAuB5F"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared workspace probe utility — single source of truth for workspace connectivity check.
3
+ * Used by both `pb init` and the no-args dashboard in `index.ts`.
4
+ *
5
+ * Design: lightweight orient call to detect workspace reachability. Returns structured
6
+ * workspace info on success, null on any failure (network, auth, offline).
7
+ */
8
+ import { convexCall } from './client.js';
9
+ /**
10
+ * Attempt to detect workspace connectivity via a lightweight API call.
11
+ * Returns workspace info on success, null on any failure.
12
+ */
13
+ export async function probeWorkspace() {
14
+ try {
15
+ const result = await convexCall('orient', { brief: true });
16
+ const name = result?.workspace?.name || 'unknown';
17
+ // Sum entry counts from orient sections if available
18
+ let entryCount;
19
+ if (result?.sections) {
20
+ entryCount = result.sections.reduce((sum, s) => {
21
+ if (s.counts) {
22
+ return sum + Object.values(s.counts).reduce((a, b) => a + (b || 0), 0);
23
+ }
24
+ return sum;
25
+ }, 0);
26
+ }
27
+ return { name, entryCount };
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ //# sourceMappingURL=workspace-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-probe.js","sourceRoot":"","sources":["../../src/lib/workspace-probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAI5B,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9B,MAAM,IAAI,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,SAAS,CAAC;QAClD,qDAAqD;QACrD,IAAI,UAA8B,CAAC;QACnC,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrB,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@productbrain/cli",
3
- "version": "0.1.0-beta.7",
4
- "description": "Product Brain — read-only CLI for Chain knowledge",
3
+ "version": "0.1.0-beta.71",
4
+ "description": "Product Brain — Chain knowledge and write-back CLI",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "pb": "dist/index.js"
@@ -14,20 +14,29 @@
14
14
  "dev": "tsc --watch",
15
15
  "typecheck": "tsc --noEmit",
16
16
  "lint": "tsc --noEmit",
17
+ "test": "vitest run src/",
17
18
  "prepublishOnly": "npm run build",
18
19
  "publish:beta": "npm publish --tag=beta",
19
20
  "version:prerelease": "npm version prerelease --no-git-tag-version"
20
21
  },
21
22
  "dependencies": {
23
+ "@clack/prompts": "^0.10.0",
22
24
  "commander": "^12.0.0",
23
- "glob": "^11.0.0"
25
+ "glob": "^11.0.0",
26
+ "ink": "^7.0.0",
27
+ "ink-text-input": "^6.0.0",
28
+ "react": "^19.0.0",
29
+ "undici": "^7.24.5"
24
30
  },
25
31
  "devDependencies": {
26
32
  "@types/node": "^25.3.0",
27
- "typescript": "^5.0.0"
33
+ "@types/react": "^19.0.0",
34
+ "typescript": "^5.0.0",
35
+ "vitest": "^4.0.18"
28
36
  },
29
37
  "files": [
30
38
  "dist",
39
+ "templates",
31
40
  "README.md"
32
41
  ],
33
42
  "publishConfig": {
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: chain-boundaries
3
+ description: "{{entry_count}} system boundaries derived from Chain architecture entries"
4
+ autoApply: true
5
+ level: core
6
+ ---
7
+
8
+ # Chain-Derived System Boundaries
9
+
10
+ These {{entry_count}} architecture and decision entries define system boundaries for this workspace. Do not cross a boundary without understanding the contract it defines.
11
+
12
+ **Boundary entries:** {{entry_ids}}
13
+
14
+ {{boundary_summary}}
15
+
16
+ ## What this means
17
+
18
+ - Boundaries define what a domain owns and what it does not own.
19
+ - Cross-domain changes require explicit negotiation — check the Team APIs in `docs/system/domains/`.
20
+ - Run `pb get <ID>` to read the full boundary entry before touching cross-domain seams.
21
+ - If your change crosses a domain boundary, identify the owning domain first (domain-boundaries rule).
22
+
23
+ **Source entries (names):** {{entry_names}}
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: chain-constraints
3
+ description: "{{entry_count}} implementation constraints derived from Chain governance entries"
4
+ autoApply: true
5
+ level: core
6
+ ---
7
+
8
+ # Chain-Derived Constraints
9
+
10
+ These {{entry_count}} governance entries constrain implementation in this workspace. Before writing code that touches any affected domain, check these entries on the Chain.
11
+
12
+ **Constraint entries:** {{entry_ids}}
13
+
14
+ {{constraint_summary}}
15
+
16
+ ## What this means
17
+
18
+ - These standards and rules are non-negotiable. They constrain behavior across all slices.
19
+ - Run `pb get <ID>` to read the full entry before implementing anything in its domain.
20
+ - If your change conflicts with a constraint, capture a tension before proceeding.
21
+ - "I didn't know" is not a valid defense when the constraint is on the Chain.
22
+
23
+ **Source entries (names):** {{entry_names}}