@productbrain/cli 0.1.0-beta.98 → 0.1.0-beta.984

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 (406) 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__/canonicalRefs.vocab.test.d.ts +2 -0
  4. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  5. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  6. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  7. package/dist/__tests__/config.test.js +272 -2
  8. package/dist/__tests__/config.test.js.map +1 -1
  9. package/dist/__tests__/constants.test.js +6 -1
  10. package/dist/__tests__/constants.test.js.map +1 -1
  11. package/dist/__tests__/envelope-contract.test.js +29 -3
  12. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  13. package/dist/__tests__/errors.test.js +1 -0
  14. package/dist/__tests__/errors.test.js.map +1 -1
  15. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  16. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  17. package/dist/__tests__/handshake-augment.test.js +423 -0
  18. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  19. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  20. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  21. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  22. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  23. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  24. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  25. package/dist/__tests__/handshake-formatter.test.js +67 -0
  26. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  27. package/dist/__tests__/handshake-preview.test.js +566 -4
  28. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  29. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  30. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  31. package/dist/__tests__/handshake.e2e.test.js +1252 -0
  32. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  33. package/dist/__tests__/handshake.test.js +611 -2
  34. package/dist/__tests__/handshake.test.js.map +1 -1
  35. package/dist/__tests__/manifest.test.js +118 -1
  36. package/dist/__tests__/manifest.test.js.map +1 -1
  37. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  38. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  39. package/dist/__tests__/notice-marker.test.js +41 -0
  40. package/dist/__tests__/notice-marker.test.js.map +1 -0
  41. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  42. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  43. package/dist/__tests__/orient.test.js +184 -7
  44. package/dist/__tests__/orient.test.js.map +1 -1
  45. package/dist/__tests__/perimeter.test.d.ts +2 -0
  46. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  47. package/dist/__tests__/perimeter.test.js +165 -0
  48. package/dist/__tests__/perimeter.test.js.map +1 -0
  49. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  50. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  51. package/dist/__tests__/personal-layer.test.js +12 -48
  52. package/dist/__tests__/personal-layer.test.js.map +1 -1
  53. package/dist/__tests__/profiles.test.js +106 -2
  54. package/dist/__tests__/profiles.test.js.map +1 -1
  55. package/dist/__tests__/promote.test.js +2 -2
  56. package/dist/__tests__/promote.test.js.map +1 -1
  57. package/dist/__tests__/session-state-machine.test.js +45 -1
  58. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  59. package/dist/__tests__/session-switch.test.d.ts +2 -0
  60. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  61. package/dist/__tests__/session-switch.test.js +129 -0
  62. package/dist/__tests__/session-switch.test.js.map +1 -0
  63. package/dist/__tests__/setup-ingest.test.js +16 -0
  64. package/dist/__tests__/setup-ingest.test.js.map +1 -1
  65. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  66. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  67. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  68. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  69. package/dist/__tests__/update-check.test.d.ts +2 -0
  70. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  71. package/dist/__tests__/update-check.test.js +215 -0
  72. package/dist/__tests__/update-check.test.js.map +1 -0
  73. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  74. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  75. package/dist/__tests__/upgrade-runner.test.js +54 -0
  76. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  77. package/dist/__tests__/upgrade.test.d.ts +2 -0
  78. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  79. package/dist/__tests__/upgrade.test.js +56 -0
  80. package/dist/__tests__/upgrade.test.js.map +1 -0
  81. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  82. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  83. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  84. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  85. package/dist/__tests__/workspace.test.js +32 -12
  86. package/dist/__tests__/workspace.test.js.map +1 -1
  87. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  88. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  89. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  90. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  91. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  92. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  93. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  94. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  95. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  96. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  97. package/dist/commands/__tests__/setup-state.test.js +194 -0
  98. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  99. package/dist/commands/admin/seed.d.ts +46 -2
  100. package/dist/commands/admin/seed.d.ts.map +1 -1
  101. package/dist/commands/admin/seed.js +475 -33
  102. package/dist/commands/admin/seed.js.map +1 -1
  103. package/dist/commands/admin/seed.test.d.ts +5 -0
  104. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  105. package/dist/commands/admin/seed.test.js +67 -2
  106. package/dist/commands/admin/seed.test.js.map +1 -1
  107. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  108. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  109. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  110. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  111. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  112. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  113. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  114. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  115. package/dist/commands/audit.d.ts.map +1 -1
  116. package/dist/commands/audit.js +30 -3
  117. package/dist/commands/audit.js.map +1 -1
  118. package/dist/commands/authority-domains.d.ts +7 -1
  119. package/dist/commands/authority-domains.d.ts.map +1 -1
  120. package/dist/commands/authority-domains.js +17 -3
  121. package/dist/commands/authority-domains.js.map +1 -1
  122. package/dist/commands/capture.d.ts.map +1 -1
  123. package/dist/commands/capture.js +3 -2
  124. package/dist/commands/capture.js.map +1 -1
  125. package/dist/commands/codex-prep.d.ts +1 -0
  126. package/dist/commands/codex-prep.d.ts.map +1 -1
  127. package/dist/commands/codex-prep.js +10 -7
  128. package/dist/commands/codex-prep.js.map +1 -1
  129. package/dist/commands/connect-config.test.d.ts +2 -0
  130. package/dist/commands/connect-config.test.d.ts.map +1 -0
  131. package/dist/commands/connect-config.test.js +44 -0
  132. package/dist/commands/connect-config.test.js.map +1 -0
  133. package/dist/commands/connect-context.d.ts +45 -0
  134. package/dist/commands/connect-context.d.ts.map +1 -0
  135. package/dist/commands/connect-context.js +64 -0
  136. package/dist/commands/connect-context.js.map +1 -0
  137. package/dist/commands/connect-context.test.d.ts +2 -0
  138. package/dist/commands/connect-context.test.d.ts.map +1 -0
  139. package/dist/commands/connect-context.test.js +110 -0
  140. package/dist/commands/connect-context.test.js.map +1 -0
  141. package/dist/commands/connect-handoff.d.ts +51 -0
  142. package/dist/commands/connect-handoff.d.ts.map +1 -0
  143. package/dist/commands/connect-handoff.js +70 -0
  144. package/dist/commands/connect-handoff.js.map +1 -0
  145. package/dist/commands/connect-integration.test.js +13 -12
  146. package/dist/commands/connect-integration.test.js.map +1 -1
  147. package/dist/commands/connect-screens.d.ts +6 -4
  148. package/dist/commands/connect-screens.d.ts.map +1 -1
  149. package/dist/commands/connect-screens.js +30 -19
  150. package/dist/commands/connect-screens.js.map +1 -1
  151. package/dist/commands/connect.d.ts +19 -6
  152. package/dist/commands/connect.d.ts.map +1 -1
  153. package/dist/commands/connect.js +31 -56
  154. package/dist/commands/connect.js.map +1 -1
  155. package/dist/commands/doctor.d.ts.map +1 -1
  156. package/dist/commands/doctor.js +68 -3
  157. package/dist/commands/doctor.js.map +1 -1
  158. package/dist/commands/doctor.test.js +150 -0
  159. package/dist/commands/doctor.test.js.map +1 -1
  160. package/dist/commands/handshake.d.ts +194 -2
  161. package/dist/commands/handshake.d.ts.map +1 -1
  162. package/dist/commands/handshake.js +1537 -46
  163. package/dist/commands/handshake.js.map +1 -1
  164. package/dist/commands/method.d.ts.map +1 -1
  165. package/dist/commands/method.js +3 -0
  166. package/dist/commands/method.js.map +1 -1
  167. package/dist/commands/orient.d.ts +63 -2
  168. package/dist/commands/orient.d.ts.map +1 -1
  169. package/dist/commands/orient.js +106 -4
  170. package/dist/commands/orient.js.map +1 -1
  171. package/dist/commands/profile.d.ts +1 -14
  172. package/dist/commands/profile.d.ts.map +1 -1
  173. package/dist/commands/profile.js +89 -72
  174. package/dist/commands/profile.js.map +1 -1
  175. package/dist/commands/session.d.ts.map +1 -1
  176. package/dist/commands/session.js +50 -13
  177. package/dist/commands/session.js.map +1 -1
  178. package/dist/commands/setup-audit.d.ts +59 -0
  179. package/dist/commands/setup-audit.d.ts.map +1 -0
  180. package/dist/commands/setup-audit.js +250 -0
  181. package/dist/commands/setup-audit.js.map +1 -0
  182. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  183. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  184. package/dist/commands/setup-detect-surfaces.js +76 -0
  185. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  186. package/dist/commands/setup-ingest.d.ts.map +1 -1
  187. package/dist/commands/setup-ingest.js +4 -2
  188. package/dist/commands/setup-ingest.js.map +1 -1
  189. package/dist/commands/setup-state.d.ts +42 -0
  190. package/dist/commands/setup-state.d.ts.map +1 -0
  191. package/dist/commands/setup-state.js +93 -0
  192. package/dist/commands/setup-state.js.map +1 -0
  193. package/dist/commands/setup.d.ts +17 -9
  194. package/dist/commands/setup.d.ts.map +1 -1
  195. package/dist/commands/setup.js +52 -131
  196. package/dist/commands/setup.js.map +1 -1
  197. package/dist/commands/upgrade.d.ts +5 -0
  198. package/dist/commands/upgrade.d.ts.map +1 -0
  199. package/dist/commands/upgrade.js +110 -0
  200. package/dist/commands/upgrade.js.map +1 -0
  201. package/dist/commands/whoami.d.ts +12 -0
  202. package/dist/commands/whoami.d.ts.map +1 -0
  203. package/dist/commands/whoami.js +70 -0
  204. package/dist/commands/whoami.js.map +1 -0
  205. package/dist/commands/whoami.test.d.ts +2 -0
  206. package/dist/commands/whoami.test.d.ts.map +1 -0
  207. package/dist/commands/whoami.test.js +50 -0
  208. package/dist/commands/whoami.test.js.map +1 -0
  209. package/dist/commands/workspace.d.ts +23 -2
  210. package/dist/commands/workspace.d.ts.map +1 -1
  211. package/dist/commands/workspace.js +2 -2
  212. package/dist/commands/workspace.js.map +1 -1
  213. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  214. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  215. package/dist/formatters/__tests__/orient-provenance.test.js +454 -0
  216. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  217. package/dist/formatters/audit.d.ts +6 -0
  218. package/dist/formatters/audit.d.ts.map +1 -1
  219. package/dist/formatters/audit.js.map +1 -1
  220. package/dist/formatters/entry.d.ts +21 -0
  221. package/dist/formatters/entry.d.ts.map +1 -1
  222. package/dist/formatters/entry.js +46 -5
  223. package/dist/formatters/entry.js.map +1 -1
  224. package/dist/formatters/handshake.d.ts +19 -3
  225. package/dist/formatters/handshake.d.ts.map +1 -1
  226. package/dist/formatters/handshake.js +48 -13
  227. package/dist/formatters/handshake.js.map +1 -1
  228. package/dist/formatters/orient.d.ts +79 -4
  229. package/dist/formatters/orient.d.ts.map +1 -1
  230. package/dist/formatters/orient.js +119 -18
  231. package/dist/formatters/orient.js.map +1 -1
  232. package/dist/generators/context-md.js +6 -6
  233. package/dist/generators/context-md.js.map +1 -1
  234. package/dist/generators/manifest.d.ts +76 -0
  235. package/dist/generators/manifest.d.ts.map +1 -1
  236. package/dist/generators/manifest.js +125 -14
  237. package/dist/generators/manifest.js.map +1 -1
  238. package/dist/generators/portable-knowledge.d.ts +6 -12
  239. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  240. package/dist/generators/portable-knowledge.js +2 -19
  241. package/dist/generators/portable-knowledge.js.map +1 -1
  242. package/dist/generators/region-projections.d.ts +18 -0
  243. package/dist/generators/region-projections.d.ts.map +1 -0
  244. package/dist/generators/region-projections.js +49 -0
  245. package/dist/generators/region-projections.js.map +1 -0
  246. package/dist/generators/region-projections.test.d.ts +2 -0
  247. package/dist/generators/region-projections.test.d.ts.map +1 -0
  248. package/dist/generators/region-projections.test.js +63 -0
  249. package/dist/generators/region-projections.test.js.map +1 -0
  250. package/dist/generators/region.d.ts +24 -0
  251. package/dist/generators/region.d.ts.map +1 -0
  252. package/dist/generators/region.js +87 -0
  253. package/dist/generators/region.js.map +1 -0
  254. package/dist/generators/region.test.d.ts +2 -0
  255. package/dist/generators/region.test.d.ts.map +1 -0
  256. package/dist/generators/region.test.js +126 -0
  257. package/dist/generators/region.test.js.map +1 -0
  258. package/dist/generators/surface-profiles.d.ts +1 -2
  259. package/dist/generators/surface-profiles.d.ts.map +1 -1
  260. package/dist/generators/surface-profiles.js.map +1 -1
  261. package/dist/index.js +134 -26
  262. package/dist/index.js.map +1 -1
  263. package/dist/lib/activation.d.ts.map +1 -1
  264. package/dist/lib/activation.js +3 -3
  265. package/dist/lib/activation.js.map +1 -1
  266. package/dist/lib/activation.test.js +3 -3
  267. package/dist/lib/activation.test.js.map +1 -1
  268. package/dist/lib/canonicalRefs.d.ts +72 -0
  269. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  270. package/dist/lib/canonicalRefs.js +67 -0
  271. package/dist/lib/canonicalRefs.js.map +1 -1
  272. package/dist/lib/client.d.ts.map +1 -1
  273. package/dist/lib/client.js +13 -3
  274. package/dist/lib/client.js.map +1 -1
  275. package/dist/lib/config.d.ts +70 -4
  276. package/dist/lib/config.d.ts.map +1 -1
  277. package/dist/lib/config.js +151 -11
  278. package/dist/lib/config.js.map +1 -1
  279. package/dist/lib/constants.d.ts +2 -0
  280. package/dist/lib/constants.d.ts.map +1 -1
  281. package/dist/lib/constants.js +2 -0
  282. package/dist/lib/constants.js.map +1 -1
  283. package/dist/lib/errors.d.ts +1 -0
  284. package/dist/lib/errors.d.ts.map +1 -1
  285. package/dist/lib/errors.js +1 -0
  286. package/dist/lib/errors.js.map +1 -1
  287. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  288. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  289. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  290. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  291. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  292. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  293. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  294. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  295. package/dist/lib/notice-marker.d.ts +3 -0
  296. package/dist/lib/notice-marker.d.ts.map +1 -0
  297. package/dist/lib/notice-marker.js +53 -0
  298. package/dist/lib/notice-marker.js.map +1 -0
  299. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  300. package/dist/lib/onboarding-path-b.js +0 -1
  301. package/dist/lib/onboarding-path-b.js.map +1 -1
  302. package/dist/lib/onboarding-shared.d.ts +0 -1
  303. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  304. package/dist/lib/onboarding-shared.js +1 -17
  305. package/dist/lib/onboarding-shared.js.map +1 -1
  306. package/dist/lib/profiles.d.ts +3 -1
  307. package/dist/lib/profiles.d.ts.map +1 -1
  308. package/dist/lib/profiles.js +9 -6
  309. package/dist/lib/profiles.js.map +1 -1
  310. package/dist/lib/session.d.ts +10 -0
  311. package/dist/lib/session.d.ts.map +1 -1
  312. package/dist/lib/session.js +14 -0
  313. package/dist/lib/session.js.map +1 -1
  314. package/dist/lib/update-check.d.ts +42 -7
  315. package/dist/lib/update-check.d.ts.map +1 -1
  316. package/dist/lib/update-check.js +213 -62
  317. package/dist/lib/update-check.js.map +1 -1
  318. package/dist/lib/upgrade-runner.d.ts +22 -0
  319. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  320. package/dist/lib/upgrade-runner.js +110 -0
  321. package/dist/lib/upgrade-runner.js.map +1 -0
  322. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  323. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  324. package/dist/lib/workspaceVocabCache.js +98 -0
  325. package/dist/lib/workspaceVocabCache.js.map +1 -0
  326. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  327. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  328. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  329. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  330. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  331. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  332. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  333. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  334. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  335. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  336. package/dist/setup/__tests__/state-machine.test.js +341 -0
  337. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  338. package/dist/setup/detect-surfaces.d.ts +21 -0
  339. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  340. package/dist/setup/detect-surfaces.js +39 -0
  341. package/dist/setup/detect-surfaces.js.map +1 -0
  342. package/dist/setup/manifest-writer.d.ts +17 -0
  343. package/dist/setup/manifest-writer.d.ts.map +1 -0
  344. package/dist/setup/manifest-writer.js +153 -0
  345. package/dist/setup/manifest-writer.js.map +1 -0
  346. package/dist/setup/perimeter.d.ts +72 -0
  347. package/dist/setup/perimeter.d.ts.map +1 -0
  348. package/dist/setup/perimeter.js +128 -0
  349. package/dist/setup/perimeter.js.map +1 -0
  350. package/dist/setup/state-machine.d.ts +67 -0
  351. package/dist/setup/state-machine.d.ts.map +1 -0
  352. package/dist/setup/state-machine.js +124 -0
  353. package/dist/setup/state-machine.js.map +1 -0
  354. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  355. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  356. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  357. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  358. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  359. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  360. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  361. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  362. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  363. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  364. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  365. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  366. package/dist/surfaces/adapter.d.ts +70 -0
  367. package/dist/surfaces/adapter.d.ts.map +1 -0
  368. package/dist/surfaces/adapter.js +2 -0
  369. package/dist/surfaces/adapter.js.map +1 -0
  370. package/dist/surfaces/adapters/claude.d.ts +3 -0
  371. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  372. package/dist/surfaces/adapters/claude.js +67 -0
  373. package/dist/surfaces/adapters/claude.js.map +1 -0
  374. package/dist/surfaces/adapters/codex.d.ts +3 -0
  375. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  376. package/dist/surfaces/adapters/codex.js +61 -0
  377. package/dist/surfaces/adapters/codex.js.map +1 -0
  378. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  379. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  380. package/dist/surfaces/adapters/copilot.js +59 -0
  381. package/dist/surfaces/adapters/copilot.js.map +1 -0
  382. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  383. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  384. package/dist/surfaces/adapters/cursor.js +78 -0
  385. package/dist/surfaces/adapters/cursor.js.map +1 -0
  386. package/dist/surfaces/registry.d.ts +58 -2
  387. package/dist/surfaces/registry.d.ts.map +1 -1
  388. package/dist/surfaces/registry.js +82 -7
  389. package/dist/surfaces/registry.js.map +1 -1
  390. package/dist/surfaces/telemetry.d.ts +17 -0
  391. package/dist/surfaces/telemetry.d.ts.map +1 -0
  392. package/dist/surfaces/telemetry.js +31 -0
  393. package/dist/surfaces/telemetry.js.map +1 -0
  394. package/package.json +3 -1
  395. package/dist/__tests__/setup.test.d.ts +0 -2
  396. package/dist/__tests__/setup.test.d.ts.map +0 -1
  397. package/dist/__tests__/setup.test.js +0 -141
  398. package/dist/__tests__/setup.test.js.map +0 -1
  399. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  400. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  401. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  402. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  403. package/dist/lib/onboarding-phases.d.ts +0 -9
  404. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  405. package/dist/lib/onboarding-phases.js +0 -120
  406. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -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,7 +37,7 @@ 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
43
  text: vi.fn(async () => ''),
@@ -100,8 +100,11 @@ describe('pb connect — integration', () => {
100
100
  expect(writeFileSync).toHaveBeenCalled();
101
101
  // Ink wizard was called with workspace name and profile name
102
102
  expect(mockRunConnectScreens).toHaveBeenCalledWith('Test WS', 'test-ws');
103
- // "What's next?" clack select was called
104
- 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'));
105
108
  });
106
109
  it('token rejection stops flow — wizard and handshake not called', async () => {
107
110
  const token = 'pb_ct_' + 'a'.repeat(40);
@@ -140,22 +143,20 @@ describe('pb connect — integration', () => {
140
143
  // runConnectScreens was called with workspace and profile name
141
144
  expect(mockRunConnectScreens).toHaveBeenCalledWith('WS Two', 'ws-two');
142
145
  });
143
- 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.
144
149
  const token = 'pb_ct_' + 'a'.repeat(40);
145
150
  mockFetch.mockResolvedValueOnce({
146
151
  ok: true,
147
152
  json: async () => ({
148
- apiKey: 'pb_sk_cancel',
153
+ apiKey: 'pb_sk_nocancel',
149
154
  workspaceId: 'ws3',
150
- workspaceName: 'Cancel WS',
155
+ workspaceName: 'No Cancel WS',
151
156
  }),
152
157
  });
153
- // Make isCancel return true on the "What's next?" select call
154
- vi.mocked(clack.isCancel).mockReturnValueOnce(true);
155
- const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit'); });
156
- await expect(runConnect(token)).rejects.toThrow('process.exit');
157
- expect(exitSpy).toHaveBeenCalledWith(130);
158
- exitSpy.mockRestore();
158
+ await expect(runConnect(token)).resolves.toBeUndefined();
159
+ expect(clack.select).not.toHaveBeenCalled();
159
160
  });
160
161
  it('includes deployment hint in error when token is invalid', async () => {
161
162
  const token = 'pb_ct_' + 'a'.repeat(40);
@@ -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,13 +1,26 @@
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;
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmPH,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,CA2D3F"}
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"}
@@ -1,12 +1,9 @@
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
  */
11
8
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
12
9
  import { isatty } from 'node:tty';
@@ -19,6 +16,9 @@ import { createProfile, listProfiles, PROFILES_DIR } from '../lib/profiles.js';
19
16
  import { withSpinner } from '../lib/spinner.js';
20
17
  import * as clack from '@clack/prompts';
21
18
  import { runConnectScreens } from './connect-screens.js';
19
+ import { detectHandoffMarkers, resolveHandoff, printHandoff } from './connect-handoff.js';
20
+ import { setLocalProfilePin, readLocalProjectConfig } from '../lib/config.js';
21
+ import { discardSession } from '../lib/session.js';
22
22
  const APP_URL = resolveAppUrl();
23
23
  /**
24
24
  * Validate token format — must start with pb_ct_ and be >20 chars.
@@ -165,43 +165,36 @@ function saveKeyAsProfile(apiKey, siteUrl, profileName) {
165
165
  }
166
166
  /**
167
167
  * Write project config files to pin this project to the workspace.
168
+ * Returns the prior repo profile pin so the caller can detect a workspace redirect.
168
169
  *
169
170
  * Split design:
170
171
  * - config.json (committed): siteUrl only — workspace gateway, safe to share with teammates.
171
172
  * Strips any legacy `profile` field that may be present from earlier pb versions.
172
173
  * - config.local.json (gitignored): profile pin — machine-local, never committed.
174
+ * Written via the shared setLocalProfilePin() writer (used by `pb profile use --local`
175
+ * and `pb connect`).
173
176
  *
174
177
  * Does NOT include the API key anywhere — that stays in profiles, never committed.
175
178
  */
176
- function saveProjectConfig(siteUrl, profileName) {
179
+ export function saveProjectConfig(siteUrl, profileName) {
177
180
  const configDir = resolve(process.cwd(), '.productbrain');
178
181
  const configPath = resolve(configDir, 'config.json');
179
- const localConfigPath = resolve(configDir, 'config.local.json');
180
182
  mkdirSync(configDir, { recursive: true });
181
- // --- config.json: siteUrl only (committed) ---
182
- // Read existing config to preserve other fields, but strip `profile` (migration)
183
+ // Capture the prior repo pin BEFORE we overwrite it (redirect detection).
184
+ const previous = readLocalProjectConfig()?.profile ?? null;
185
+ // --- config.json: siteUrl only (committed). Strip legacy `profile` field. ---
183
186
  let existingCommitted = {};
184
187
  if (existsSync(configPath)) {
185
188
  try {
186
189
  existingCommitted = JSON.parse(readFileSync(configPath, 'utf8'));
187
190
  }
188
- catch { /* ignore parse errors */ }
191
+ catch { /* ignore */ }
189
192
  }
190
- // Strip legacy `profile` field — it belongs in config.local.json now
191
193
  delete existingCommitted['profile'];
192
- const committedConfig = { ...existingCommitted, siteUrl };
193
- writeFileSync(configPath, JSON.stringify(committedConfig, null, 2) + '\n');
194
- // --- config.local.json: profile pin (gitignored) ---
195
- // Read existing local config to preserve other fields
196
- let existingLocal = {};
197
- if (existsSync(localConfigPath)) {
198
- try {
199
- existingLocal = JSON.parse(readFileSync(localConfigPath, 'utf8'));
200
- }
201
- catch { /* ignore parse errors */ }
202
- }
203
- const localConfig = { ...existingLocal, profile: profileName };
204
- writeFileSync(localConfigPath, JSON.stringify(localConfig, null, 2) + '\n');
194
+ writeFileSync(configPath, JSON.stringify({ ...existingCommitted, siteUrl }, null, 2) + '\n');
195
+ // --- config.local.json: profile pin (gitignored) via the shared writer ---
196
+ setLocalProfilePin(process.cwd(), profileName);
197
+ return { previousProfile: previous && previous !== profileName ? previous : null };
205
198
  }
206
199
  /**
207
200
  * Optional label to send with redeem — omit when empty or default so server applies `Product Brain CLI`.
@@ -250,40 +243,22 @@ export async function runConnect(token, options = {}) {
250
243
  // 4. Save API key as named profile + pin project config
251
244
  const profileName = slugify(result.workspaceName);
252
245
  saveKeyAsProfile(result.apiKey, siteUrl, profileName);
253
- saveProjectConfig(siteUrl, profileName);
246
+ const { previousProfile } = saveProjectConfig(siteUrl, profileName);
247
+ if (previousProfile) {
248
+ process.stderr.write(`⚠ This repo was connected to "${previousProfile}"; now redirecting to "${profileName}" (${result.workspaceName}). Previous session was reset — run \`pb session start\` to begin a new one.\n`);
249
+ // The repo's effective workspace changed — drop the stale session so the next
250
+ // `pb session start` doesn't auto-resume against the old workspace.
251
+ discardSession();
252
+ }
254
253
  // 5–7. Ink wizard: ConnectedScreen (with handshake) + ProfileScreen
255
254
  await runConnectScreens(result.workspaceName, profileName);
256
- // 8. Interactive "What's next?" menu
257
- const next = await clack.select({
258
- message: "What's next?",
259
- options: [
260
- { value: 'start', label: 'Start coding', hint: 'Just one step' },
261
- { value: 'connect', label: 'Connect another workspace' },
262
- { value: 'docs', label: 'Learn more', hint: 'productbrain.io/docs' },
263
- { value: 'community', label: 'Join the community', hint: 'community.productbrain.io' },
264
- ],
265
- });
266
- if (clack.isCancel(next))
267
- process.exit(130);
255
+ // 8. Tailored chat handoff — detect AI tool and print one-line instruction (FEAT-1291).
256
+ // Replaces the 4-option clack.select menu that exited on cancel (TEN-1992).
257
+ const cwd = process.cwd();
258
+ const markers = detectHandoffMarkers(cwd);
259
+ const handoff = resolveHandoff(markers);
268
260
  process.stdout.write('\n');
269
- switch (next) {
270
- case 'start':
271
- console.log(' Next time you open your AI tool in this project, run:\n');
272
- console.log(' pb session start\n');
273
- console.log(' That refreshes your product context and starts a tracked session.');
274
- console.log(' Then just code normally — your AI already has your context.');
275
- break;
276
- case 'connect':
277
- console.log(' Run `pb connect <token>` with the token from your other workspace.');
278
- console.log(' Each workspace gets its own profile. Switch with `pb use <profile>`.');
279
- break;
280
- case 'docs':
281
- console.log(' → https://productbrain.io/docs');
282
- break;
283
- case 'community':
284
- console.log(' → https://community.productbrain.io');
285
- break;
286
- }
261
+ printHandoff(process.stdout, handoff);
287
262
  process.stdout.write('\n');
288
263
  }
289
264
  //# sourceMappingURL=connect.js.map