@productbrain/cli 0.1.0-beta.96 → 0.1.0-beta.973

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 (410) hide show
  1. package/dist/__tests__/audit.test.js +5 -0
  2. package/dist/__tests__/audit.test.js.map +1 -1
  3. package/dist/__tests__/authority-domains.test.js +3 -0
  4. package/dist/__tests__/authority-domains.test.js.map +1 -1
  5. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  6. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  7. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  8. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  9. package/dist/__tests__/config.test.js +272 -2
  10. package/dist/__tests__/config.test.js.map +1 -1
  11. package/dist/__tests__/constants.test.js +6 -1
  12. package/dist/__tests__/constants.test.js.map +1 -1
  13. package/dist/__tests__/envelope-contract.test.js +29 -3
  14. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  15. package/dist/__tests__/errors.test.js +1 -0
  16. package/dist/__tests__/errors.test.js.map +1 -1
  17. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  18. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  19. package/dist/__tests__/handshake-augment.test.js +423 -0
  20. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  21. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  22. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  23. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  24. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  25. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  26. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  27. package/dist/__tests__/handshake-formatter.test.js +67 -0
  28. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  29. package/dist/__tests__/handshake-preview.test.js +566 -4
  30. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  31. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  32. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  33. package/dist/__tests__/handshake.e2e.test.js +1252 -0
  34. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  35. package/dist/__tests__/handshake.test.js +611 -2
  36. package/dist/__tests__/handshake.test.js.map +1 -1
  37. package/dist/__tests__/manifest.test.js +118 -1
  38. package/dist/__tests__/manifest.test.js.map +1 -1
  39. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  40. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  41. package/dist/__tests__/orient.test.js +184 -7
  42. package/dist/__tests__/orient.test.js.map +1 -1
  43. package/dist/__tests__/perimeter.test.d.ts +2 -0
  44. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  45. package/dist/__tests__/perimeter.test.js +165 -0
  46. package/dist/__tests__/perimeter.test.js.map +1 -0
  47. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  48. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  49. package/dist/__tests__/personal-layer.test.js +12 -48
  50. package/dist/__tests__/personal-layer.test.js.map +1 -1
  51. package/dist/__tests__/profiles.test.js +122 -7
  52. package/dist/__tests__/profiles.test.js.map +1 -1
  53. package/dist/__tests__/promote.test.js +2 -2
  54. package/dist/__tests__/promote.test.js.map +1 -1
  55. package/dist/__tests__/session-state-machine.test.js +45 -1
  56. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  57. package/dist/__tests__/session-switch.test.d.ts +2 -0
  58. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  59. package/dist/__tests__/session-switch.test.js +129 -0
  60. package/dist/__tests__/session-switch.test.js.map +1 -0
  61. package/dist/__tests__/setup-ingest.test.js +16 -0
  62. package/dist/__tests__/setup-ingest.test.js.map +1 -1
  63. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  64. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  65. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  66. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  67. package/dist/__tests__/update-check.test.d.ts +2 -0
  68. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  69. package/dist/__tests__/update-check.test.js +56 -0
  70. package/dist/__tests__/update-check.test.js.map +1 -0
  71. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  72. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  73. package/dist/__tests__/upgrade-runner.test.js +42 -0
  74. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  75. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  76. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  77. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  78. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  79. package/dist/__tests__/workspace.test.js +32 -12
  80. package/dist/__tests__/workspace.test.js.map +1 -1
  81. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  82. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  83. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  84. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  85. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  86. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  87. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  88. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  89. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  90. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  91. package/dist/commands/__tests__/setup-state.test.js +194 -0
  92. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  93. package/dist/commands/admin/seed.d.ts +46 -2
  94. package/dist/commands/admin/seed.d.ts.map +1 -1
  95. package/dist/commands/admin/seed.js +475 -33
  96. package/dist/commands/admin/seed.js.map +1 -1
  97. package/dist/commands/admin/seed.test.d.ts +5 -0
  98. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  99. package/dist/commands/admin/seed.test.js +67 -2
  100. package/dist/commands/admin/seed.test.js.map +1 -1
  101. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  102. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  103. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  104. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  105. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  106. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  107. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  108. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  109. package/dist/commands/audit.d.ts.map +1 -1
  110. package/dist/commands/audit.js +30 -3
  111. package/dist/commands/audit.js.map +1 -1
  112. package/dist/commands/authority-domains.d.ts +25 -1
  113. package/dist/commands/authority-domains.d.ts.map +1 -1
  114. package/dist/commands/authority-domains.js +51 -4
  115. package/dist/commands/authority-domains.js.map +1 -1
  116. package/dist/commands/capture.d.ts.map +1 -1
  117. package/dist/commands/capture.js +3 -2
  118. package/dist/commands/capture.js.map +1 -1
  119. package/dist/commands/codex-prep.d.ts +1 -0
  120. package/dist/commands/codex-prep.d.ts.map +1 -1
  121. package/dist/commands/codex-prep.js +10 -7
  122. package/dist/commands/codex-prep.js.map +1 -1
  123. package/dist/commands/connect-config.test.d.ts +2 -0
  124. package/dist/commands/connect-config.test.d.ts.map +1 -0
  125. package/dist/commands/connect-config.test.js +44 -0
  126. package/dist/commands/connect-config.test.js.map +1 -0
  127. package/dist/commands/connect-context.d.ts +45 -0
  128. package/dist/commands/connect-context.d.ts.map +1 -0
  129. package/dist/commands/connect-context.js +64 -0
  130. package/dist/commands/connect-context.js.map +1 -0
  131. package/dist/commands/connect-context.test.d.ts +2 -0
  132. package/dist/commands/connect-context.test.d.ts.map +1 -0
  133. package/dist/commands/connect-context.test.js +110 -0
  134. package/dist/commands/connect-context.test.js.map +1 -0
  135. package/dist/commands/connect-handoff.d.ts +51 -0
  136. package/dist/commands/connect-handoff.d.ts.map +1 -0
  137. package/dist/commands/connect-handoff.js +70 -0
  138. package/dist/commands/connect-handoff.js.map +1 -0
  139. package/dist/commands/connect-integration.test.js +29 -12
  140. package/dist/commands/connect-integration.test.js.map +1 -1
  141. package/dist/commands/connect-screens.d.ts +6 -4
  142. package/dist/commands/connect-screens.d.ts.map +1 -1
  143. package/dist/commands/connect-screens.js +30 -19
  144. package/dist/commands/connect-screens.js.map +1 -1
  145. package/dist/commands/connect.d.ts +21 -6
  146. package/dist/commands/connect.d.ts.map +1 -1
  147. package/dist/commands/connect.js +65 -58
  148. package/dist/commands/connect.js.map +1 -1
  149. package/dist/commands/connect.test.js +17 -1
  150. package/dist/commands/connect.test.js.map +1 -1
  151. package/dist/commands/doctor.d.ts.map +1 -1
  152. package/dist/commands/doctor.js +68 -3
  153. package/dist/commands/doctor.js.map +1 -1
  154. package/dist/commands/doctor.test.js +131 -0
  155. package/dist/commands/doctor.test.js.map +1 -1
  156. package/dist/commands/handshake.d.ts +194 -2
  157. package/dist/commands/handshake.d.ts.map +1 -1
  158. package/dist/commands/handshake.js +1537 -46
  159. package/dist/commands/handshake.js.map +1 -1
  160. package/dist/commands/method.d.ts.map +1 -1
  161. package/dist/commands/method.js +3 -0
  162. package/dist/commands/method.js.map +1 -1
  163. package/dist/commands/orient.d.ts +63 -2
  164. package/dist/commands/orient.d.ts.map +1 -1
  165. package/dist/commands/orient.js +106 -4
  166. package/dist/commands/orient.js.map +1 -1
  167. package/dist/commands/profile.d.ts +1 -14
  168. package/dist/commands/profile.d.ts.map +1 -1
  169. package/dist/commands/profile.js +89 -72
  170. package/dist/commands/profile.js.map +1 -1
  171. package/dist/commands/promote.js +1 -1
  172. package/dist/commands/promote.js.map +1 -1
  173. package/dist/commands/relate.d.ts.map +1 -1
  174. package/dist/commands/relate.js +13 -0
  175. package/dist/commands/relate.js.map +1 -1
  176. package/dist/commands/session.d.ts.map +1 -1
  177. package/dist/commands/session.js +51 -14
  178. package/dist/commands/session.js.map +1 -1
  179. package/dist/commands/setup-audit.d.ts +59 -0
  180. package/dist/commands/setup-audit.d.ts.map +1 -0
  181. package/dist/commands/setup-audit.js +250 -0
  182. package/dist/commands/setup-audit.js.map +1 -0
  183. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  184. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  185. package/dist/commands/setup-detect-surfaces.js +76 -0
  186. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  187. package/dist/commands/setup-ingest.d.ts.map +1 -1
  188. package/dist/commands/setup-ingest.js +4 -2
  189. package/dist/commands/setup-ingest.js.map +1 -1
  190. package/dist/commands/setup-state.d.ts +42 -0
  191. package/dist/commands/setup-state.d.ts.map +1 -0
  192. package/dist/commands/setup-state.js +93 -0
  193. package/dist/commands/setup-state.js.map +1 -0
  194. package/dist/commands/setup.d.ts +17 -9
  195. package/dist/commands/setup.d.ts.map +1 -1
  196. package/dist/commands/setup.js +52 -131
  197. package/dist/commands/setup.js.map +1 -1
  198. package/dist/commands/upgrade.d.ts +5 -0
  199. package/dist/commands/upgrade.d.ts.map +1 -0
  200. package/dist/commands/upgrade.js +89 -0
  201. package/dist/commands/upgrade.js.map +1 -0
  202. package/dist/commands/whoami.d.ts +12 -0
  203. package/dist/commands/whoami.d.ts.map +1 -0
  204. package/dist/commands/whoami.js +70 -0
  205. package/dist/commands/whoami.js.map +1 -0
  206. package/dist/commands/whoami.test.d.ts +2 -0
  207. package/dist/commands/whoami.test.d.ts.map +1 -0
  208. package/dist/commands/whoami.test.js +50 -0
  209. package/dist/commands/whoami.test.js.map +1 -0
  210. package/dist/commands/workspace.d.ts +23 -2
  211. package/dist/commands/workspace.d.ts.map +1 -1
  212. package/dist/commands/workspace.js +2 -2
  213. package/dist/commands/workspace.js.map +1 -1
  214. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  215. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  216. package/dist/formatters/__tests__/orient-provenance.test.js +454 -0
  217. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  218. package/dist/formatters/audit.d.ts +6 -0
  219. package/dist/formatters/audit.d.ts.map +1 -1
  220. package/dist/formatters/audit.js.map +1 -1
  221. package/dist/formatters/entry.d.ts +21 -0
  222. package/dist/formatters/entry.d.ts.map +1 -1
  223. package/dist/formatters/entry.js +46 -5
  224. package/dist/formatters/entry.js.map +1 -1
  225. package/dist/formatters/handshake.d.ts +19 -3
  226. package/dist/formatters/handshake.d.ts.map +1 -1
  227. package/dist/formatters/handshake.js +48 -13
  228. package/dist/formatters/handshake.js.map +1 -1
  229. package/dist/formatters/orient.d.ts +79 -4
  230. package/dist/formatters/orient.d.ts.map +1 -1
  231. package/dist/formatters/orient.js +119 -18
  232. package/dist/formatters/orient.js.map +1 -1
  233. package/dist/formatters/session.js +1 -1
  234. package/dist/formatters/session.js.map +1 -1
  235. package/dist/generators/adapters.js +2 -2
  236. package/dist/generators/context-md.js +6 -6
  237. package/dist/generators/context-md.js.map +1 -1
  238. package/dist/generators/manifest.d.ts +76 -0
  239. package/dist/generators/manifest.d.ts.map +1 -1
  240. package/dist/generators/manifest.js +125 -14
  241. package/dist/generators/manifest.js.map +1 -1
  242. package/dist/generators/portable-knowledge.d.ts +6 -12
  243. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  244. package/dist/generators/portable-knowledge.js +2 -19
  245. package/dist/generators/portable-knowledge.js.map +1 -1
  246. package/dist/generators/region-projections.d.ts +18 -0
  247. package/dist/generators/region-projections.d.ts.map +1 -0
  248. package/dist/generators/region-projections.js +49 -0
  249. package/dist/generators/region-projections.js.map +1 -0
  250. package/dist/generators/region-projections.test.d.ts +2 -0
  251. package/dist/generators/region-projections.test.d.ts.map +1 -0
  252. package/dist/generators/region-projections.test.js +63 -0
  253. package/dist/generators/region-projections.test.js.map +1 -0
  254. package/dist/generators/region.d.ts +24 -0
  255. package/dist/generators/region.d.ts.map +1 -0
  256. package/dist/generators/region.js +87 -0
  257. package/dist/generators/region.js.map +1 -0
  258. package/dist/generators/region.test.d.ts +2 -0
  259. package/dist/generators/region.test.d.ts.map +1 -0
  260. package/dist/generators/region.test.js +126 -0
  261. package/dist/generators/region.test.js.map +1 -0
  262. package/dist/generators/surface-profiles.d.ts +1 -2
  263. package/dist/generators/surface-profiles.d.ts.map +1 -1
  264. package/dist/generators/surface-profiles.js.map +1 -1
  265. package/dist/index.js +142 -27
  266. package/dist/index.js.map +1 -1
  267. package/dist/lib/activation.d.ts.map +1 -1
  268. package/dist/lib/activation.js +3 -3
  269. package/dist/lib/activation.js.map +1 -1
  270. package/dist/lib/activation.test.js +3 -3
  271. package/dist/lib/activation.test.js.map +1 -1
  272. package/dist/lib/canonicalRefs.d.ts +72 -0
  273. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  274. package/dist/lib/canonicalRefs.js +67 -0
  275. package/dist/lib/canonicalRefs.js.map +1 -1
  276. package/dist/lib/client.d.ts.map +1 -1
  277. package/dist/lib/client.js +14 -4
  278. package/dist/lib/client.js.map +1 -1
  279. package/dist/lib/config.d.ts +70 -4
  280. package/dist/lib/config.d.ts.map +1 -1
  281. package/dist/lib/config.js +151 -11
  282. package/dist/lib/config.js.map +1 -1
  283. package/dist/lib/connectKeyLabel.d.ts +9 -0
  284. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  285. package/dist/lib/connectKeyLabel.js +12 -0
  286. package/dist/lib/connectKeyLabel.js.map +1 -0
  287. package/dist/lib/constants.d.ts +2 -0
  288. package/dist/lib/constants.d.ts.map +1 -1
  289. package/dist/lib/constants.js +2 -0
  290. package/dist/lib/constants.js.map +1 -1
  291. package/dist/lib/errors.d.ts +3 -0
  292. package/dist/lib/errors.d.ts.map +1 -1
  293. package/dist/lib/errors.js +3 -0
  294. package/dist/lib/errors.js.map +1 -1
  295. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  296. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  297. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  298. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  299. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  300. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  301. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  302. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  303. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  304. package/dist/lib/onboarding-path-b.js +0 -1
  305. package/dist/lib/onboarding-path-b.js.map +1 -1
  306. package/dist/lib/onboarding-shared.d.ts +0 -1
  307. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  308. package/dist/lib/onboarding-shared.js +1 -17
  309. package/dist/lib/onboarding-shared.js.map +1 -1
  310. package/dist/lib/profiles.d.ts +3 -1
  311. package/dist/lib/profiles.d.ts.map +1 -1
  312. package/dist/lib/profiles.js +9 -6
  313. package/dist/lib/profiles.js.map +1 -1
  314. package/dist/lib/session.d.ts +10 -0
  315. package/dist/lib/session.d.ts.map +1 -1
  316. package/dist/lib/session.js +14 -0
  317. package/dist/lib/session.js.map +1 -1
  318. package/dist/lib/update-check.d.ts +20 -0
  319. package/dist/lib/update-check.d.ts.map +1 -1
  320. package/dist/lib/update-check.js +122 -21
  321. package/dist/lib/update-check.js.map +1 -1
  322. package/dist/lib/upgrade-runner.d.ts +21 -0
  323. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  324. package/dist/lib/upgrade-runner.js +109 -0
  325. package/dist/lib/upgrade-runner.js.map +1 -0
  326. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  327. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  328. package/dist/lib/workspaceVocabCache.js +98 -0
  329. package/dist/lib/workspaceVocabCache.js.map +1 -0
  330. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  331. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  332. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  333. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  334. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  335. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  336. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  337. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  338. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  339. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  340. package/dist/setup/__tests__/state-machine.test.js +341 -0
  341. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  342. package/dist/setup/detect-surfaces.d.ts +21 -0
  343. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  344. package/dist/setup/detect-surfaces.js +39 -0
  345. package/dist/setup/detect-surfaces.js.map +1 -0
  346. package/dist/setup/manifest-writer.d.ts +17 -0
  347. package/dist/setup/manifest-writer.d.ts.map +1 -0
  348. package/dist/setup/manifest-writer.js +153 -0
  349. package/dist/setup/manifest-writer.js.map +1 -0
  350. package/dist/setup/perimeter.d.ts +72 -0
  351. package/dist/setup/perimeter.d.ts.map +1 -0
  352. package/dist/setup/perimeter.js +128 -0
  353. package/dist/setup/perimeter.js.map +1 -0
  354. package/dist/setup/state-machine.d.ts +67 -0
  355. package/dist/setup/state-machine.d.ts.map +1 -0
  356. package/dist/setup/state-machine.js +124 -0
  357. package/dist/setup/state-machine.js.map +1 -0
  358. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  359. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  360. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  361. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  362. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  363. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  364. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  365. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  366. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  367. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  368. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  369. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  370. package/dist/surfaces/adapter.d.ts +70 -0
  371. package/dist/surfaces/adapter.d.ts.map +1 -0
  372. package/dist/surfaces/adapter.js +2 -0
  373. package/dist/surfaces/adapter.js.map +1 -0
  374. package/dist/surfaces/adapters/claude.d.ts +3 -0
  375. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  376. package/dist/surfaces/adapters/claude.js +67 -0
  377. package/dist/surfaces/adapters/claude.js.map +1 -0
  378. package/dist/surfaces/adapters/codex.d.ts +3 -0
  379. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  380. package/dist/surfaces/adapters/codex.js +61 -0
  381. package/dist/surfaces/adapters/codex.js.map +1 -0
  382. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  383. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  384. package/dist/surfaces/adapters/copilot.js +59 -0
  385. package/dist/surfaces/adapters/copilot.js.map +1 -0
  386. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  387. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  388. package/dist/surfaces/adapters/cursor.js +78 -0
  389. package/dist/surfaces/adapters/cursor.js.map +1 -0
  390. package/dist/surfaces/registry.d.ts +58 -2
  391. package/dist/surfaces/registry.d.ts.map +1 -1
  392. package/dist/surfaces/registry.js +82 -7
  393. package/dist/surfaces/registry.js.map +1 -1
  394. package/dist/surfaces/telemetry.d.ts +17 -0
  395. package/dist/surfaces/telemetry.d.ts.map +1 -0
  396. package/dist/surfaces/telemetry.js +31 -0
  397. package/dist/surfaces/telemetry.js.map +1 -0
  398. package/package.json +3 -1
  399. package/dist/__tests__/setup.test.d.ts +0 -2
  400. package/dist/__tests__/setup.test.d.ts.map +0 -1
  401. package/dist/__tests__/setup.test.js +0 -141
  402. package/dist/__tests__/setup.test.js.map +0 -1
  403. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  404. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  405. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  406. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  407. package/dist/lib/onboarding-phases.d.ts +0 -9
  408. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  409. package/dist/lib/onboarding-phases.js +0 -120
  410. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Tests for prepareConnectContext — the non-UI orchestration behind the
3
+ * post-connect wizard (seed-readiness poll + context handshake).
4
+ *
5
+ * Root cause (P1): `pb connect`'s automatic handshake ran STRICT and BEFORE the
6
+ * seed-readiness poll. On a fresh workspace (seeds still landing async) or with
7
+ * an orphan setup-asset body, the handshake's body fetch failed and — being
8
+ * strict (WP-439 S4) — threw, surfacing only a dim "⚠ Context sync skipped" and
9
+ * leaving CLAUDE.md / rules unwritten. WP-439 S4 made the automatic refresh at
10
+ * session close LENIENT (session.ts) for exactly this reason; connect's automatic
11
+ * refresh follows that same precedent.
12
+ *
13
+ * Fix: poll seeds ready FIRST, then run the handshake LENIENT.
14
+ */
15
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
16
+ vi.mock('./handshake.js', () => ({
17
+ runHandshake: vi.fn(async () => { }),
18
+ pollUntilSeedsReady: vi.fn(async () => ({ status: 'seeds-ready' })),
19
+ }));
20
+ import * as handshake from './handshake.js';
21
+ import { prepareConnectContext } from './connect-context.js';
22
+ const runHandshake = vi.mocked(handshake.runHandshake);
23
+ const pollUntilSeedsReady = vi.mocked(handshake.pollUntilSeedsReady);
24
+ const PENDING_GAPS = [
25
+ { kind: 'starter-setup-missing', severity: 'warn', message: 'Starter setup seeds are still running.' },
26
+ ];
27
+ describe('prepareConnectContext', () => {
28
+ beforeEach(() => {
29
+ vi.clearAllMocks();
30
+ pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-ready' });
31
+ runHandshake.mockResolvedValue(undefined);
32
+ });
33
+ it('runs the handshake in lenient mode (matches session.ts automatic-handshake policy)', async () => {
34
+ await prepareConnectContext();
35
+ expect(runHandshake).toHaveBeenCalledTimes(1);
36
+ expect(runHandshake).toHaveBeenCalledWith(expect.objectContaining({ force: false, apply: true, quiet: true, lenient: true }));
37
+ });
38
+ it('waits for seeds to be ready BEFORE running the handshake', async () => {
39
+ const order = [];
40
+ pollUntilSeedsReady.mockImplementation(async () => {
41
+ order.push('poll');
42
+ return { status: 'seeds-ready' };
43
+ });
44
+ runHandshake.mockImplementation(async () => {
45
+ order.push('handshake');
46
+ return undefined;
47
+ });
48
+ await prepareConnectContext();
49
+ expect(order).toEqual(['poll', 'handshake']);
50
+ });
51
+ it('surfaces seed gaps when starter setup is still pending', async () => {
52
+ pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-pending', gaps: PENDING_GAPS });
53
+ const result = await prepareConnectContext();
54
+ expect(result.seedGaps).toEqual(PENDING_GAPS);
55
+ expect(result.handshakeFailed).toBe(false);
56
+ });
57
+ it('reports no seed gaps when seeds are ready', async () => {
58
+ pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-ready' });
59
+ const result = await prepareConnectContext();
60
+ expect(result.seedGaps).toBeUndefined();
61
+ });
62
+ it('reports no seed gaps when the health probe fails (non-blocking)', async () => {
63
+ pollUntilSeedsReady.mockResolvedValue({ status: 'probe-failed', error: 'network down' });
64
+ const result = await prepareConnectContext();
65
+ expect(result.seedGaps).toBeUndefined();
66
+ });
67
+ it('captures a handshake failure without throwing', async () => {
68
+ runHandshake.mockRejectedValue(new Error('boom'));
69
+ const result = await prepareConnectContext();
70
+ expect(result.handshakeFailed).toBe(true);
71
+ expect(result.handshakeError).toBe('boom');
72
+ });
73
+ it('surfaces seed gaps AND a handshake failure together (fresh-workspace worst case)', async () => {
74
+ // Seeds time out, then the lenient handshake still throws on a genuinely
75
+ // orphaned body — both signals must surface independently.
76
+ pollUntilSeedsReady.mockResolvedValue({ status: 'seeds-pending', gaps: PENDING_GAPS });
77
+ runHandshake.mockRejectedValue(new Error('orphan body'));
78
+ const result = await prepareConnectContext();
79
+ expect(result.seedGaps).toEqual(PENDING_GAPS);
80
+ expect(result.handshakeFailed).toBe(true);
81
+ expect(result.handshakeError).toBe('orphan body');
82
+ });
83
+ it('reports success when the handshake completes', async () => {
84
+ const result = await prepareConnectContext();
85
+ expect(result.handshakeFailed).toBe(false);
86
+ expect(result.handshakeError).toBeUndefined();
87
+ });
88
+ it('surfaces files PB left untouched (user-owned files without the auto-gen marker)', async () => {
89
+ // TEN-2107: the handshake skips files the user authored (no auto-gen marker)
90
+ // and reports them as userOwnedSkipped. The connect screen must relay these so
91
+ // a user with a pre-existing CLAUDE.md is not falsely told "synced". These are
92
+ // never treated as drift (TEN-2150).
93
+ runHandshake.mockResolvedValue({
94
+ filesWritten: ['AGENTS.md'],
95
+ filesSkipped: [
96
+ { path: 'CLAUDE.md', reason: 'user-owned — left untouched (pb won\'t overwrite your file)' },
97
+ ],
98
+ userOwnedSkipped: ['CLAUDE.md'],
99
+ });
100
+ const result = await prepareConnectContext();
101
+ expect(result.skippedFiles).toEqual(['CLAUDE.md']);
102
+ expect(result.handshakeFailed).toBe(false);
103
+ });
104
+ it('reports no skipped files when PB wrote (or refreshed) everything', async () => {
105
+ // Default mock resolves an empty/undefined report → nothing left untouched.
106
+ const result = await prepareConnectContext();
107
+ expect(result.skippedFiles).toBeUndefined();
108
+ });
109
+ });
110
+ //# sourceMappingURL=connect-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-context.test.js","sourceRoot":"","sources":["../../src/commands/connect-context.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * WP-433 S4 — FEAT-1291: pb connect chat handoff + locked agent-detection heuristic.
3
+ *
4
+ * Provides pure detection + resolution of the post-connect handoff message.
5
+ * No I/O side effects except `printHandoff` (which takes a stream).
6
+ *
7
+ * Locked detection heuristic (IMP-12 acceptance: ≤200 chars, user in chat ≤5 sec):
8
+ * .claude/=Y, .cursor/=Y → claude-or-cursor
9
+ * .claude/=Y, .cursor/=N → claude
10
+ * .claude/=N, .cursor/=Y → cursor
11
+ * .claude/=N, .cursor/=N, AGENTS.md=Y → codex
12
+ * .claude/=N, .cursor/=N, AGENTS.md=N → bare-repo (docs link)
13
+ *
14
+ */
15
+ export type HandoffMarkers = {
16
+ hasClaude: boolean;
17
+ hasCursor: boolean;
18
+ hasCodexFile: boolean;
19
+ };
20
+ export type HandoffAgent = 'claude' | 'cursor' | 'claude-or-cursor' | 'codex' | 'bare-repo';
21
+ export type HandoffResult = {
22
+ agent: HandoffAgent;
23
+ message: string;
24
+ };
25
+ export declare const HANDOFF_MESSAGE_CLAUDE_OR_CURSOR = "Open Claude Code or Cursor in this project and type in chat: Start Product Brain";
26
+ export declare const HANDOFF_MESSAGE_CLAUDE = "Open Claude Code in this project and type in chat: Start Product Brain";
27
+ export declare const HANDOFF_MESSAGE_CURSOR = "Open Cursor in this project and type in chat: Start Product Brain";
28
+ export declare const HANDOFF_MESSAGE_CODEX = "Open Codex CLI in this project and type in chat: Start Product Brain";
29
+ export declare const HANDOFF_MESSAGE_BARE_REPO = "No AI tool detected in this project. Visit productbrain.io/docs to set one up.";
30
+ /**
31
+ * Resolve the handoff agent + message from the detected markers.
32
+ * Implements the locked heuristic table verbatim.
33
+ */
34
+ export declare function resolveHandoff(markers: HandoffMarkers): HandoffResult;
35
+ /**
36
+ * Detect handoff markers by probing the filesystem at `cwd`.
37
+ * Thin adapter over the surface adapters' detect predicates — keeps this
38
+ * module decoupled from detectSurfaces() while staying grounded in the same
39
+ * filesystem facts.
40
+ *
41
+ * `.claude/` → hasClaude
42
+ * `.cursor/` → hasCursor
43
+ * `AGENTS.md` or `.codex/` → hasCodexFile (mirrors codexAdapter.detect)
44
+ */
45
+ export declare function detectHandoffMarkers(cwd: string): HandoffMarkers;
46
+ /**
47
+ * Write the handoff message to `stdout` followed by a trailing newline.
48
+ * No extra prose, no boxes, no spinners.
49
+ */
50
+ export declare function printHandoff(stdout: NodeJS.WritableStream, result: HandoffResult): void;
51
+ //# sourceMappingURL=connect-handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-handoff.d.ts","sourceRoot":"","sources":["../../src/commands/connect-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,QAAQ,GACR,kBAAkB,GAClB,OAAO,GACP,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAO,MAAM,gCAAgC,qFACuC,CAAC;AAErF,eAAO,MAAM,sBAAsB,2EACuC,CAAC;AAE3E,eAAO,MAAM,sBAAsB,sEACkC,CAAC;AAEtE,eAAO,MAAM,qBAAqB,yEACsC,CAAC;AAEzE,eAAO,MAAM,yBAAyB,mFAC4C,CAAC;AAInF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAgBrE;AAID;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAMhE;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAEvF"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * WP-433 S4 — FEAT-1291: pb connect chat handoff + locked agent-detection heuristic.
3
+ *
4
+ * Provides pure detection + resolution of the post-connect handoff message.
5
+ * No I/O side effects except `printHandoff` (which takes a stream).
6
+ *
7
+ * Locked detection heuristic (IMP-12 acceptance: ≤200 chars, user in chat ≤5 sec):
8
+ * .claude/=Y, .cursor/=Y → claude-or-cursor
9
+ * .claude/=Y, .cursor/=N → claude
10
+ * .claude/=N, .cursor/=Y → cursor
11
+ * .claude/=N, .cursor/=N, AGENTS.md=Y → codex
12
+ * .claude/=N, .cursor/=N, AGENTS.md=N → bare-repo (docs link)
13
+ *
14
+ */
15
+ import { existsSync } from 'fs';
16
+ import { join } from 'path';
17
+ // ── Locked message strings (IMP-12: ≤200 chars each) ─────────────────────────
18
+ export const HANDOFF_MESSAGE_CLAUDE_OR_CURSOR = 'Open Claude Code or Cursor in this project and type in chat: Start Product Brain';
19
+ export const HANDOFF_MESSAGE_CLAUDE = 'Open Claude Code in this project and type in chat: Start Product Brain';
20
+ export const HANDOFF_MESSAGE_CURSOR = 'Open Cursor in this project and type in chat: Start Product Brain';
21
+ export const HANDOFF_MESSAGE_CODEX = 'Open Codex CLI in this project and type in chat: Start Product Brain';
22
+ export const HANDOFF_MESSAGE_BARE_REPO = 'No AI tool detected in this project. Visit productbrain.io/docs to set one up.';
23
+ // ── Resolution ───────────────────────────────────────────────────────────────
24
+ /**
25
+ * Resolve the handoff agent + message from the detected markers.
26
+ * Implements the locked heuristic table verbatim.
27
+ */
28
+ export function resolveHandoff(markers) {
29
+ const { hasClaude, hasCursor, hasCodexFile } = markers;
30
+ if (hasClaude && hasCursor) {
31
+ return { agent: 'claude-or-cursor', message: HANDOFF_MESSAGE_CLAUDE_OR_CURSOR };
32
+ }
33
+ if (hasClaude) {
34
+ return { agent: 'claude', message: HANDOFF_MESSAGE_CLAUDE };
35
+ }
36
+ if (hasCursor) {
37
+ return { agent: 'cursor', message: HANDOFF_MESSAGE_CURSOR };
38
+ }
39
+ if (hasCodexFile) {
40
+ return { agent: 'codex', message: HANDOFF_MESSAGE_CODEX };
41
+ }
42
+ return { agent: 'bare-repo', message: HANDOFF_MESSAGE_BARE_REPO };
43
+ }
44
+ // ── Detection ────────────────────────────────────────────────────────────────
45
+ /**
46
+ * Detect handoff markers by probing the filesystem at `cwd`.
47
+ * Thin adapter over the surface adapters' detect predicates — keeps this
48
+ * module decoupled from detectSurfaces() while staying grounded in the same
49
+ * filesystem facts.
50
+ *
51
+ * `.claude/` → hasClaude
52
+ * `.cursor/` → hasCursor
53
+ * `AGENTS.md` or `.codex/` → hasCodexFile (mirrors codexAdapter.detect)
54
+ */
55
+ export function detectHandoffMarkers(cwd) {
56
+ return {
57
+ hasClaude: existsSync(join(cwd, '.claude')),
58
+ hasCursor: existsSync(join(cwd, '.cursor')),
59
+ hasCodexFile: existsSync(join(cwd, 'AGENTS.md')) || existsSync(join(cwd, '.codex')),
60
+ };
61
+ }
62
+ // ── Output ───────────────────────────────────────────────────────────────────
63
+ /**
64
+ * Write the handoff message to `stdout` followed by a trailing newline.
65
+ * No extra prose, no boxes, no spinners.
66
+ */
67
+ export function printHandoff(stdout, result) {
68
+ stdout.write(result.message + '\n');
69
+ }
70
+ //# sourceMappingURL=connect-handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-handoff.js","sourceRoot":"","sources":["../../src/commands/connect-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB5B,gFAAgF;AAEhF,MAAM,CAAC,MAAM,gCAAgC,GAC3C,kFAAkF,CAAC;AAErF,MAAM,CAAC,MAAM,sBAAsB,GACjC,wEAAwE,CAAC;AAE3E,MAAM,CAAC,MAAM,sBAAsB,GACjC,mEAAmE,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAChC,sEAAsE,CAAC;AAEzE,MAAM,CAAC,MAAM,yBAAyB,GACpC,gFAAgF,CAAC;AAEnF,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEvD,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;AACpE,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3C,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3C,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA6B,EAAE,MAAqB;IAC/E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -37,9 +37,10 @@ vi.mock('../lib/spinner.js', () => ({
37
37
  withSpinner: async (_msg, fn) => fn(),
38
38
  }));
39
39
  vi.mock('@clack/prompts', () => ({
40
- // Only one clack.select remains: the "What's next?" menu (Ink screens replaced the two continue gates)
40
+ // Post-S4: no clack.select remains in the handoff path; earlier Ink screens handle prior steps.
41
41
  select: vi.fn(async () => 'start'),
42
42
  isCancel: vi.fn(() => false),
43
+ text: vi.fn(async () => ''),
43
44
  }));
44
45
  vi.mock('../lib/profiles.js', () => ({
45
46
  createProfile: (...args) => mockCreateProfile(...args),
@@ -99,8 +100,11 @@ describe('pb connect — integration', () => {
99
100
  expect(writeFileSync).toHaveBeenCalled();
100
101
  // Ink wizard was called with workspace name and profile name
101
102
  expect(mockRunConnectScreens).toHaveBeenCalledWith('Test WS', 'test-ws');
102
- // "What's next?" clack select was called
103
- expect(clack.select).toHaveBeenCalled();
103
+ // FEAT-1291: post-connect handoff no longer uses clack.select (TEN-1992 fix)
104
+ expect(clack.select).not.toHaveBeenCalled();
105
+ // FEAT-1291: printHandoff writes the tailored handoff message to process.stdout.
106
+ // existsSync is mocked to always-false → bare-repo path fires.
107
+ expect(stdoutSpy).toHaveBeenCalledWith(expect.stringContaining('No AI tool detected in this project'));
104
108
  });
105
109
  it('token rejection stops flow — wizard and handshake not called', async () => {
106
110
  const token = 'pb_ct_' + 'a'.repeat(40);
@@ -139,22 +143,20 @@ describe('pb connect — integration', () => {
139
143
  // runConnectScreens was called with workspace and profile name
140
144
  expect(mockRunConnectScreens).toHaveBeenCalledWith('WS Two', 'ws-two');
141
145
  });
142
- it('clack cancel on "What\'s next?" gate exits with 130', async () => {
146
+ it('FEAT-1291: post-connect flow completes without clack.select (no exit-on-cancel path)', async () => {
147
+ // TEN-1992 fix: the old clack.select "What's next?" menu exited on cancel.
148
+ // Now runConnect always succeeds after the screens — no cancel path possible.
143
149
  const token = 'pb_ct_' + 'a'.repeat(40);
144
150
  mockFetch.mockResolvedValueOnce({
145
151
  ok: true,
146
152
  json: async () => ({
147
- apiKey: 'pb_sk_cancel',
153
+ apiKey: 'pb_sk_nocancel',
148
154
  workspaceId: 'ws3',
149
- workspaceName: 'Cancel WS',
155
+ workspaceName: 'No Cancel WS',
150
156
  }),
151
157
  });
152
- // Make isCancel return true on the "What's next?" select call
153
- vi.mocked(clack.isCancel).mockReturnValueOnce(true);
154
- const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit'); });
155
- await expect(runConnect(token)).rejects.toThrow('process.exit');
156
- expect(exitSpy).toHaveBeenCalledWith(130);
157
- exitSpy.mockRestore();
158
+ await expect(runConnect(token)).resolves.toBeUndefined();
159
+ expect(clack.select).not.toHaveBeenCalled();
158
160
  });
159
161
  it('includes deployment hint in error when token is invalid', async () => {
160
162
  const token = 'pb_ct_' + 'a'.repeat(40);
@@ -191,5 +193,20 @@ describe('pb connect — integration', () => {
191
193
  await runConnect(token);
192
194
  expect(mockFetch).toHaveBeenCalledWith('https://my-dev.convex.site/auth/redeem-connect-token', expect.objectContaining({ method: 'POST' }));
193
195
  });
196
+ it('passes --name to redeem body in non-interactive flow', async () => {
197
+ const token = 'pb_ct_' + 'a'.repeat(40);
198
+ mockFetch.mockResolvedValueOnce({
199
+ ok: true,
200
+ json: async () => ({
201
+ apiKey: 'pb_sk_ci',
202
+ workspaceId: 'ws-ci',
203
+ workspaceName: 'CI WS',
204
+ }),
205
+ });
206
+ await runConnect(token, { name: 'GitHub Actions' });
207
+ expect(mockFetch).toHaveBeenCalledWith('https://test.convex.site/auth/redeem-connect-token', expect.objectContaining({
208
+ body: JSON.stringify({ token, name: 'GitHub Actions' }),
209
+ }));
210
+ });
194
211
  });
195
212
  //# sourceMappingURL=connect-integration.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect-integration.test.js","sourceRoot":"","sources":["../../src/commands/connect-integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect-integration.test.js","sourceRoot":"","sources":["../../src/commands/connect-integration.test.ts"],"names":[],"mappings":"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"}
@@ -5,17 +5,19 @@
5
5
  * Screen 2 — ProfileScreen: shows profile name + multi-workspace hint.
6
6
  *
7
7
  * Each screen waits for "any key" via useInput before resolving.
8
- * After both screens complete, the caller resumes the clack "What's next?" select.
8
+ * After both screens complete, the caller prints the tailored handoff message (WP-433 FEAT-1291).
9
9
  *
10
- * Chain: WP-325 S3, FEAT-1031
10
+ * Chain: WP-325 S3, FEAT-1031, WP-379 S3b (seed polling)
11
11
  */
12
12
  /**
13
13
  * Runs the post-connect Ink wizard:
14
- * 1. Executes handshake (quietly).
14
+ * 1. Prepares workspace context — waits for starter-setup seeds to be ready,
15
+ * then runs a lenient handshake (see prepareConnectContext). Seeds must be
16
+ * ready before the handshake fetches their bodies (WP-379 S3b, WP-439 S4).
15
17
  * 2. Renders ConnectedScreen, waits for keypress.
16
18
  * 3. Renders ProfileScreen, waits for keypress.
17
19
  *
18
- * After this resolves, the caller continues with the clack "What's next?" select.
20
+ * After this resolves, the caller prints the tailored handoff message (WP-433 FEAT-1291).
19
21
  */
20
22
  export declare function runConnectScreens(workspaceName: string, profileName: string): Promise<void>;
21
23
  //# sourceMappingURL=connect-screens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect-screens.d.ts","sourceRoot":"","sources":["../../src/commands/connect-screens.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8IH;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCjG"}
1
+ {"version":3,"file":"connect-screens.d.ts","sourceRoot":"","sources":["../../src/commands/connect-screens.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkLH;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCjG"}
@@ -6,20 +6,33 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  * Screen 2 — ProfileScreen: shows profile name + multi-workspace hint.
7
7
  *
8
8
  * Each screen waits for "any key" via useInput before resolving.
9
- * After both screens complete, the caller resumes the clack "What's next?" select.
9
+ * After both screens complete, the caller prints the tailored handoff message (WP-433 FEAT-1291).
10
10
  *
11
- * Chain: WP-325 S3, FEAT-1031
11
+ * Chain: WP-325 S3, FEAT-1031, WP-379 S3b (seed polling)
12
12
  */
13
13
  import React from 'react';
14
14
  import { render, Box, Text, useInput, useApp } from 'ink';
15
- import { runHandshake } from './handshake.js';
16
- function ConnectedScreen({ workspaceName, handshakeFailed, handshakeError, onExit }) {
15
+ import { prepareConnectContext } from './connect-context.js';
16
+ // Surfaces pb projects context files to. Rendered as the "synced" list, minus
17
+ // any surface whose file the handshake left untouched (TEN-2107) — so a file is
18
+ // never shown as both synced and left-untouched.
19
+ const PROJECTED_SURFACES = [
20
+ { file: '.cursor/rules/', arrow: ' → ', tool: 'Cursor' },
21
+ { file: 'CLAUDE.md', arrow: ' → ', tool: 'Claude Code' },
22
+ { file: '.github/', arrow: ' → ', tool: 'GitHub Copilot' },
23
+ { file: 'AGENTS.md', arrow: ' → ', tool: 'Codex / CI' },
24
+ ];
25
+ function ConnectedScreen({ workspaceName, handshakeFailed, handshakeError, seedGaps, skippedFiles, onExit }) {
17
26
  const { exit } = useApp();
18
27
  useInput(() => {
19
28
  onExit();
20
29
  exit();
21
30
  });
22
- return (_jsxs(Box, { flexDirection: "column", paddingTop: 1, paddingBottom: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "green", bold: true, children: '✓ ' }), _jsx(Text, { bold: true, children: 'Connected to ' }), _jsx(Text, { bold: true, color: "green", children: workspaceName })] }), !handshakeFailed ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: 'Context files synced to your AI tools:' }) }), _jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: '.cursor/rules/' }), _jsx(Text, { dimColor: true, children: ' → ' }), _jsx(Text, { children: 'Cursor' })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: 'CLAUDE.md' }), _jsx(Text, { dimColor: true, children: ' → ' }), _jsx(Text, { children: 'Claude Code' })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: '.github/' }), _jsx(Text, { dimColor: true, children: ' → ' }), _jsx(Text, { children: 'GitHub Copilot' })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: 'AGENTS.md' }), _jsx(Text, { dimColor: true, children: ' → ' }), _jsx(Text, { children: 'Codex / CI' })] })] }), _jsxs(Box, { marginTop: 1, marginLeft: 2, children: [_jsx(Text, { dimColor: true, children: 'These update when you run ' }), _jsx(Text, { dimColor: true, bold: true, children: '`pb session start`' })] })] })) : (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: '⚠ Context sync skipped' }), handshakeError && (_jsx(Text, { dimColor: true, children: ` — ${handshakeError}` }))] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, children: 'Run `pb handshake` manually to set up context files.' }) })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: 'Press any key to continue' }) })] }));
31
+ // A surface is "left untouched" when a skipped file equals it (CLAUDE.md,
32
+ // AGENTS.md) or sits under it (.cursor/rules/*, .github/*).
33
+ const isLeftUntouched = (surfaceFile) => (skippedFiles ?? []).some((f) => f === surfaceFile || f.startsWith(surfaceFile));
34
+ const syncedSurfaces = PROJECTED_SURFACES.filter((s) => !isLeftUntouched(s.file));
35
+ return (_jsxs(Box, { flexDirection: "column", paddingTop: 1, paddingBottom: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "green", bold: true, children: '✓ ' }), _jsx(Text, { bold: true, children: 'Connected to ' }), _jsx(Text, { bold: true, color: "green", children: workspaceName })] }), !handshakeFailed && syncedSurfaces.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: 'Context files synced to your AI tools:' }) }), _jsx(Box, { flexDirection: "column", marginLeft: 2, children: syncedSurfaces.map((s) => (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: s.file }), _jsx(Text, { dimColor: true, children: s.arrow }), _jsx(Text, { children: s.tool })] }, s.file))) }), _jsxs(Box, { marginTop: 1, marginLeft: 2, children: [_jsx(Text, { dimColor: true, children: 'These update when you run ' }), _jsx(Text, { dimColor: true, bold: true, children: '`pb session start`' })] })] })), handshakeFailed && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: '⚠ Context sync skipped' }), handshakeError && (_jsx(Text, { dimColor: true, children: ` — ${handshakeError}` }))] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, children: 'Run `pb handshake` manually to set up context files.' }) })] })), seedGaps && seedGaps.length > 0 && (_jsx(Box, { flexDirection: "column", marginBottom: 1, marginTop: 1, children: seedGaps.map((gap, i) => (_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: '⚠ ' }), _jsx(Text, { dimColor: true, children: `${gap.message} (kind: ${gap.kind}). Wait a few seconds and re-run ` }), _jsx(Text, { dimColor: true, bold: true, children: 'pb connect' }), _jsx(Text, { dimColor: true, children: '.' })] }, i))) })), skippedFiles && skippedFiles.length > 0 && (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: 'Left untouched (your own files): ' }), _jsx(Text, { children: skippedFiles.join(', ') })] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: 'Press any key to continue' }) })] }));
23
36
  }
24
37
  function ProfileScreen({ profileName, onExit }) {
25
38
  const { exit } = useApp();
@@ -34,29 +47,27 @@ function ProfileScreen({ profileName, onExit }) {
34
47
  // ---------------------------------------------------------------------------
35
48
  /**
36
49
  * Runs the post-connect Ink wizard:
37
- * 1. Executes handshake (quietly).
50
+ * 1. Prepares workspace context — waits for starter-setup seeds to be ready,
51
+ * then runs a lenient handshake (see prepareConnectContext). Seeds must be
52
+ * ready before the handshake fetches their bodies (WP-379 S3b, WP-439 S4).
38
53
  * 2. Renders ConnectedScreen, waits for keypress.
39
54
  * 3. Renders ProfileScreen, waits for keypress.
40
55
  *
41
- * After this resolves, the caller continues with the clack "What's next?" select.
56
+ * After this resolves, the caller prints the tailored handoff message (WP-433 FEAT-1291).
42
57
  */
43
58
  export async function runConnectScreens(workspaceName, profileName) {
44
- // 1. Run handshake quietly capture failure for display in Screen 1
45
- let handshakeFailed = false;
46
- let handshakeError;
47
- try {
48
- await runHandshake({ apply: true, quiet: true });
49
- }
50
- catch (err) {
51
- handshakeFailed = true;
52
- handshakeError = err instanceof Error ? err.message : String(err);
53
- }
54
- // 2. Screen 1 — ConnectedScreen
59
+ // Prepare workspace context for the screens: wait for starter-setup seeds to
60
+ // be ready, then run a lenient handshake. Ordering + lenience matter on fresh
61
+ // workspaces — see prepareConnectContext (connect-context.ts).
62
+ const { handshakeFailed, handshakeError, seedGaps, skippedFiles } = await prepareConnectContext();
63
+ // Screen 1 ConnectedScreen
55
64
  await new Promise((resolve) => {
56
65
  const { unmount, waitUntilExit } = render(React.createElement(ConnectedScreen, {
57
66
  workspaceName,
58
67
  handshakeFailed,
59
68
  handshakeError,
69
+ seedGaps,
70
+ skippedFiles,
60
71
  onExit: () => {
61
72
  unmount();
62
73
  resolve();
@@ -64,7 +75,7 @@ export async function runConnectScreens(workspaceName, profileName) {
64
75
  }));
65
76
  void waitUntilExit().catch(() => resolve());
66
77
  });
67
- // 3. Screen 2 — ProfileScreen
78
+ // Screen 2 — ProfileScreen
68
79
  await new Promise((resolve) => {
69
80
  const { unmount, waitUntilExit } = render(React.createElement(ProfileScreen, {
70
81
  profileName,
@@ -1 +1 @@
1
- {"version":3,"file":"connect-screens.js","sourceRoot":"","sources":["../../src/commands/connect-screens.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect-screens.js","sourceRoot":"","sources":["../../src/commands/connect-screens.tsx"],"names":[],"mappings":"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"}
@@ -1,16 +1,31 @@
1
1
  /**
2
2
  * pb connect — redeem a short-lived connect token to save an API key locally.
3
3
  *
4
- * Part of FEAT-958 Path C: Onboarding flow.
5
- * Token is obtained from an onboarding link (e.g., email, QR code).
6
- * S1 endpoint: POST /auth/redeem-connect-token
7
- * S2 (this): CLI command to parse token, redeem, and save key locally.
8
- * S3: Wizard flow (surface detection + trust level).
9
- * S4: Final handshake (pb handshake).
4
+ * Part of FEAT-958 Path C: Onboarding flow. Redeems a connect token, saves API
5
+ * key locally, runs Ink screens, then prints a tailored chat-handoff instruction
6
+ * (WP-433 FEAT-1291).
10
7
  */
8
+ /**
9
+ * Write project config files to pin this project to the workspace.
10
+ * Returns the prior repo profile pin so the caller can detect a workspace redirect.
11
+ *
12
+ * Split design:
13
+ * - config.json (committed): siteUrl only — workspace gateway, safe to share with teammates.
14
+ * Strips any legacy `profile` field that may be present from earlier pb versions.
15
+ * - config.local.json (gitignored): profile pin — machine-local, never committed.
16
+ * Written via the shared setLocalProfilePin() writer (used by `pb profile use --local`
17
+ * and `pb connect`).
18
+ *
19
+ * Does NOT include the API key anywhere — that stays in profiles, never committed.
20
+ */
21
+ export declare function saveProjectConfig(siteUrl: string, profileName: string): {
22
+ previousProfile: string | null;
23
+ };
11
24
  export interface ConnectOptions {
12
25
  /** Override redeem gateway (`pb connect --gateway`). */
13
26
  gateway?: string;
27
+ /** Optional API key label for workspace settings (non-TTY: use instead of prompt). */
28
+ name?: string;
14
29
  }
15
30
  /**
16
31
  * Main entrypoint for `pb connect <token>`.
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqOH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD3F"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4MH;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG;IAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAoB1G;AAED,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4BD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C3F"}