@productbrain/cli 0.1.0-beta.92 → 0.1.0-beta.925

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/dist/__tests__/audit.test.js +5 -0
  2. package/dist/__tests__/audit.test.js.map +1 -1
  3. package/dist/__tests__/authority-domains.test.d.ts +2 -0
  4. package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
  5. package/dist/__tests__/authority-domains.test.js +48 -0
  6. package/dist/__tests__/authority-domains.test.js.map +1 -0
  7. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  8. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  9. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  10. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  11. package/dist/__tests__/config.test.d.ts +1 -1
  12. package/dist/__tests__/config.test.js +410 -10
  13. package/dist/__tests__/config.test.js.map +1 -1
  14. package/dist/__tests__/constants.test.js +6 -1
  15. package/dist/__tests__/constants.test.js.map +1 -1
  16. package/dist/__tests__/envelope-contract.test.d.ts +15 -0
  17. package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
  18. package/dist/__tests__/envelope-contract.test.js +152 -0
  19. package/dist/__tests__/envelope-contract.test.js.map +1 -0
  20. package/dist/__tests__/errors.test.js +1 -0
  21. package/dist/__tests__/errors.test.js.map +1 -1
  22. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  23. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  24. package/dist/__tests__/handshake-augment.test.js +423 -0
  25. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  26. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  27. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  28. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  29. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  30. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  31. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  32. package/dist/__tests__/handshake-formatter.test.js +67 -0
  33. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  34. package/dist/__tests__/handshake-preview.test.js +688 -3
  35. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  36. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  37. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  38. package/dist/__tests__/handshake.e2e.test.js +1252 -0
  39. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  40. package/dist/__tests__/handshake.test.js +611 -2
  41. package/dist/__tests__/handshake.test.js.map +1 -1
  42. package/dist/__tests__/manifest.test.js +118 -1
  43. package/dist/__tests__/manifest.test.js.map +1 -1
  44. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  45. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  46. package/dist/__tests__/orient.test.js +135 -8
  47. package/dist/__tests__/orient.test.js.map +1 -1
  48. package/dist/__tests__/perimeter.test.d.ts +2 -0
  49. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  50. package/dist/__tests__/perimeter.test.js +165 -0
  51. package/dist/__tests__/perimeter.test.js.map +1 -0
  52. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  53. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  54. package/dist/__tests__/personal-layer.test.js +12 -48
  55. package/dist/__tests__/personal-layer.test.js.map +1 -1
  56. package/dist/__tests__/profiles.test.js +153 -5
  57. package/dist/__tests__/profiles.test.js.map +1 -1
  58. package/dist/__tests__/promote.test.js +71 -2
  59. package/dist/__tests__/promote.test.js.map +1 -1
  60. package/dist/__tests__/session-state-machine.test.js +45 -1
  61. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  62. package/dist/__tests__/session-switch.test.d.ts +2 -0
  63. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  64. package/dist/__tests__/session-switch.test.js +129 -0
  65. package/dist/__tests__/session-switch.test.js.map +1 -0
  66. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  67. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  68. package/dist/__tests__/setup-ingest.test.js +71 -0
  69. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  70. package/dist/__tests__/setup-resolver.test.d.ts +14 -0
  71. package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
  72. package/dist/__tests__/setup-resolver.test.js +228 -0
  73. package/dist/__tests__/setup-resolver.test.js.map +1 -0
  74. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  75. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  76. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  77. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  78. package/dist/__tests__/update-check.test.d.ts +2 -0
  79. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  80. package/dist/__tests__/update-check.test.js +56 -0
  81. package/dist/__tests__/update-check.test.js.map +1 -0
  82. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  83. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  84. package/dist/__tests__/upgrade-runner.test.js +42 -0
  85. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  86. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  87. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  88. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  89. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  90. package/dist/__tests__/workspace.test.js +32 -12
  91. package/dist/__tests__/workspace.test.js.map +1 -1
  92. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  93. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  94. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  95. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  96. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  97. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  98. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  99. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  100. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  101. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  102. package/dist/commands/__tests__/setup-state.test.js +194 -0
  103. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  104. package/dist/commands/admin/seed.d.ts +46 -2
  105. package/dist/commands/admin/seed.d.ts.map +1 -1
  106. package/dist/commands/admin/seed.js +475 -33
  107. package/dist/commands/admin/seed.js.map +1 -1
  108. package/dist/commands/admin/seed.test.d.ts +5 -0
  109. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  110. package/dist/commands/admin/seed.test.js +67 -2
  111. package/dist/commands/admin/seed.test.js.map +1 -1
  112. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  113. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  114. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  115. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  116. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  117. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  118. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  119. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  120. package/dist/commands/audit.d.ts.map +1 -1
  121. package/dist/commands/audit.js +30 -3
  122. package/dist/commands/audit.js.map +1 -1
  123. package/dist/commands/authority-domains.d.ts +146 -0
  124. package/dist/commands/authority-domains.d.ts.map +1 -0
  125. package/dist/commands/authority-domains.js +282 -0
  126. package/dist/commands/authority-domains.js.map +1 -0
  127. package/dist/commands/capture.d.ts.map +1 -1
  128. package/dist/commands/capture.js +3 -2
  129. package/dist/commands/capture.js.map +1 -1
  130. package/dist/commands/codex-prep.d.ts +1 -0
  131. package/dist/commands/codex-prep.d.ts.map +1 -1
  132. package/dist/commands/codex-prep.js +10 -7
  133. package/dist/commands/codex-prep.js.map +1 -1
  134. package/dist/commands/connect-config.test.d.ts +2 -0
  135. package/dist/commands/connect-config.test.d.ts.map +1 -0
  136. package/dist/commands/connect-config.test.js +44 -0
  137. package/dist/commands/connect-config.test.js.map +1 -0
  138. package/dist/commands/connect-context.d.ts +45 -0
  139. package/dist/commands/connect-context.d.ts.map +1 -0
  140. package/dist/commands/connect-context.js +64 -0
  141. package/dist/commands/connect-context.js.map +1 -0
  142. package/dist/commands/connect-context.test.d.ts +2 -0
  143. package/dist/commands/connect-context.test.d.ts.map +1 -0
  144. package/dist/commands/connect-context.test.js +110 -0
  145. package/dist/commands/connect-context.test.js.map +1 -0
  146. package/dist/commands/connect-handoff.d.ts +51 -0
  147. package/dist/commands/connect-handoff.d.ts.map +1 -0
  148. package/dist/commands/connect-handoff.js +70 -0
  149. package/dist/commands/connect-handoff.js.map +1 -0
  150. package/dist/commands/connect-integration.test.js +29 -12
  151. package/dist/commands/connect-integration.test.js.map +1 -1
  152. package/dist/commands/connect-screens.d.ts +6 -4
  153. package/dist/commands/connect-screens.d.ts.map +1 -1
  154. package/dist/commands/connect-screens.js +30 -19
  155. package/dist/commands/connect-screens.js.map +1 -1
  156. package/dist/commands/connect.d.ts +21 -6
  157. package/dist/commands/connect.d.ts.map +1 -1
  158. package/dist/commands/connect.js +78 -51
  159. package/dist/commands/connect.js.map +1 -1
  160. package/dist/commands/connect.test.js +64 -1
  161. package/dist/commands/connect.test.js.map +1 -1
  162. package/dist/commands/doctor.d.ts.map +1 -1
  163. package/dist/commands/doctor.js +68 -3
  164. package/dist/commands/doctor.js.map +1 -1
  165. package/dist/commands/doctor.test.js +131 -0
  166. package/dist/commands/doctor.test.js.map +1 -1
  167. package/dist/commands/handshake.d.ts +194 -2
  168. package/dist/commands/handshake.d.ts.map +1 -1
  169. package/dist/commands/handshake.js +1738 -44
  170. package/dist/commands/handshake.js.map +1 -1
  171. package/dist/commands/method.d.ts.map +1 -1
  172. package/dist/commands/method.js +3 -0
  173. package/dist/commands/method.js.map +1 -1
  174. package/dist/commands/migrate-setup.d.ts +18 -0
  175. package/dist/commands/migrate-setup.d.ts.map +1 -0
  176. package/dist/commands/migrate-setup.js +198 -0
  177. package/dist/commands/migrate-setup.js.map +1 -0
  178. package/dist/commands/orient.d.ts +15 -2
  179. package/dist/commands/orient.d.ts.map +1 -1
  180. package/dist/commands/orient.js +86 -4
  181. package/dist/commands/orient.js.map +1 -1
  182. package/dist/commands/profile.d.ts +11 -1
  183. package/dist/commands/profile.d.ts.map +1 -1
  184. package/dist/commands/profile.js +109 -26
  185. package/dist/commands/profile.js.map +1 -1
  186. package/dist/commands/promote.d.ts.map +1 -1
  187. package/dist/commands/promote.js +25 -2
  188. package/dist/commands/promote.js.map +1 -1
  189. package/dist/commands/relate.d.ts.map +1 -1
  190. package/dist/commands/relate.js +13 -0
  191. package/dist/commands/relate.js.map +1 -1
  192. package/dist/commands/session.d.ts.map +1 -1
  193. package/dist/commands/session.js +55 -18
  194. package/dist/commands/session.js.map +1 -1
  195. package/dist/commands/setup-audit.d.ts +59 -0
  196. package/dist/commands/setup-audit.d.ts.map +1 -0
  197. package/dist/commands/setup-audit.js +250 -0
  198. package/dist/commands/setup-audit.js.map +1 -0
  199. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  200. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  201. package/dist/commands/setup-detect-surfaces.js +76 -0
  202. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  203. package/dist/commands/setup-ingest.d.ts +17 -0
  204. package/dist/commands/setup-ingest.d.ts.map +1 -0
  205. package/dist/commands/setup-ingest.js +226 -0
  206. package/dist/commands/setup-ingest.js.map +1 -0
  207. package/dist/commands/setup-resolver.d.ts +58 -0
  208. package/dist/commands/setup-resolver.d.ts.map +1 -0
  209. package/dist/commands/setup-resolver.js +150 -0
  210. package/dist/commands/setup-resolver.js.map +1 -0
  211. package/dist/commands/setup-state.d.ts +42 -0
  212. package/dist/commands/setup-state.d.ts.map +1 -0
  213. package/dist/commands/setup-state.js +93 -0
  214. package/dist/commands/setup-state.js.map +1 -0
  215. package/dist/commands/setup.d.ts +17 -9
  216. package/dist/commands/setup.d.ts.map +1 -1
  217. package/dist/commands/setup.js +52 -131
  218. package/dist/commands/setup.js.map +1 -1
  219. package/dist/commands/upgrade.d.ts +5 -0
  220. package/dist/commands/upgrade.d.ts.map +1 -0
  221. package/dist/commands/upgrade.js +89 -0
  222. package/dist/commands/upgrade.js.map +1 -0
  223. package/dist/commands/whoami.d.ts +12 -0
  224. package/dist/commands/whoami.d.ts.map +1 -0
  225. package/dist/commands/whoami.js +70 -0
  226. package/dist/commands/whoami.js.map +1 -0
  227. package/dist/commands/whoami.test.d.ts +2 -0
  228. package/dist/commands/whoami.test.d.ts.map +1 -0
  229. package/dist/commands/whoami.test.js +50 -0
  230. package/dist/commands/whoami.test.js.map +1 -0
  231. package/dist/commands/workspace.d.ts +74 -2
  232. package/dist/commands/workspace.d.ts.map +1 -1
  233. package/dist/commands/workspace.js +26 -2
  234. package/dist/commands/workspace.js.map +1 -1
  235. package/dist/formatters/audit.d.ts +6 -0
  236. package/dist/formatters/audit.d.ts.map +1 -1
  237. package/dist/formatters/audit.js.map +1 -1
  238. package/dist/formatters/handshake.d.ts +19 -3
  239. package/dist/formatters/handshake.d.ts.map +1 -1
  240. package/dist/formatters/handshake.js +48 -13
  241. package/dist/formatters/handshake.js.map +1 -1
  242. package/dist/formatters/orient.d.ts +50 -4
  243. package/dist/formatters/orient.d.ts.map +1 -1
  244. package/dist/formatters/orient.js +64 -16
  245. package/dist/formatters/orient.js.map +1 -1
  246. package/dist/formatters/session.js +1 -1
  247. package/dist/formatters/session.js.map +1 -1
  248. package/dist/generators/adapters.js +2 -2
  249. package/dist/generators/boundary-manifest.d.ts +29 -0
  250. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  251. package/dist/generators/boundary-manifest.js +183 -0
  252. package/dist/generators/boundary-manifest.js.map +1 -0
  253. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  254. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  255. package/dist/generators/boundary-manifest.test.js +91 -0
  256. package/dist/generators/boundary-manifest.test.js.map +1 -0
  257. package/dist/generators/context-md.js +6 -6
  258. package/dist/generators/context-md.js.map +1 -1
  259. package/dist/generators/manifest.d.ts +78 -0
  260. package/dist/generators/manifest.d.ts.map +1 -1
  261. package/dist/generators/manifest.js +125 -14
  262. package/dist/generators/manifest.js.map +1 -1
  263. package/dist/generators/portable-knowledge.d.ts +6 -12
  264. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  265. package/dist/generators/portable-knowledge.js +2 -19
  266. package/dist/generators/portable-knowledge.js.map +1 -1
  267. package/dist/generators/region-projections.d.ts +18 -0
  268. package/dist/generators/region-projections.d.ts.map +1 -0
  269. package/dist/generators/region-projections.js +49 -0
  270. package/dist/generators/region-projections.js.map +1 -0
  271. package/dist/generators/region-projections.test.d.ts +2 -0
  272. package/dist/generators/region-projections.test.d.ts.map +1 -0
  273. package/dist/generators/region-projections.test.js +63 -0
  274. package/dist/generators/region-projections.test.js.map +1 -0
  275. package/dist/generators/region.d.ts +24 -0
  276. package/dist/generators/region.d.ts.map +1 -0
  277. package/dist/generators/region.js +87 -0
  278. package/dist/generators/region.js.map +1 -0
  279. package/dist/generators/region.test.d.ts +2 -0
  280. package/dist/generators/region.test.d.ts.map +1 -0
  281. package/dist/generators/region.test.js +126 -0
  282. package/dist/generators/region.test.js.map +1 -0
  283. package/dist/generators/surface-profiles.d.ts +1 -2
  284. package/dist/generators/surface-profiles.d.ts.map +1 -1
  285. package/dist/generators/surface-profiles.js.map +1 -1
  286. package/dist/index.js +242 -26
  287. package/dist/index.js.map +1 -1
  288. package/dist/lib/activation.d.ts.map +1 -1
  289. package/dist/lib/activation.js +3 -3
  290. package/dist/lib/activation.js.map +1 -1
  291. package/dist/lib/activation.test.js +3 -3
  292. package/dist/lib/activation.test.js.map +1 -1
  293. package/dist/lib/canonicalRefs.d.ts +141 -0
  294. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  295. package/dist/lib/canonicalRefs.js +150 -0
  296. package/dist/lib/canonicalRefs.js.map +1 -0
  297. package/dist/lib/client.d.ts.map +1 -1
  298. package/dist/lib/client.js +27 -17
  299. package/dist/lib/client.js.map +1 -1
  300. package/dist/lib/config.d.ts +98 -9
  301. package/dist/lib/config.d.ts.map +1 -1
  302. package/dist/lib/config.js +231 -44
  303. package/dist/lib/config.js.map +1 -1
  304. package/dist/lib/connectKeyLabel.d.ts +9 -0
  305. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  306. package/dist/lib/connectKeyLabel.js +12 -0
  307. package/dist/lib/connectKeyLabel.js.map +1 -0
  308. package/dist/lib/constants.d.ts +2 -0
  309. package/dist/lib/constants.d.ts.map +1 -1
  310. package/dist/lib/constants.js +2 -0
  311. package/dist/lib/constants.js.map +1 -1
  312. package/dist/lib/errors.d.ts +3 -0
  313. package/dist/lib/errors.d.ts.map +1 -1
  314. package/dist/lib/errors.js +3 -0
  315. package/dist/lib/errors.js.map +1 -1
  316. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  317. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  318. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  319. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  320. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  321. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  322. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  323. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  324. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  325. package/dist/lib/onboarding-path-b.js +0 -1
  326. package/dist/lib/onboarding-path-b.js.map +1 -1
  327. package/dist/lib/onboarding-shared.d.ts +0 -1
  328. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  329. package/dist/lib/onboarding-shared.js +1 -17
  330. package/dist/lib/onboarding-shared.js.map +1 -1
  331. package/dist/lib/profiles.d.ts +3 -1
  332. package/dist/lib/profiles.d.ts.map +1 -1
  333. package/dist/lib/profiles.js +9 -6
  334. package/dist/lib/profiles.js.map +1 -1
  335. package/dist/lib/session.d.ts +10 -0
  336. package/dist/lib/session.d.ts.map +1 -1
  337. package/dist/lib/session.js +14 -0
  338. package/dist/lib/session.js.map +1 -1
  339. package/dist/lib/update-check.d.ts +20 -0
  340. package/dist/lib/update-check.d.ts.map +1 -1
  341. package/dist/lib/update-check.js +122 -21
  342. package/dist/lib/update-check.js.map +1 -1
  343. package/dist/lib/upgrade-runner.d.ts +21 -0
  344. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  345. package/dist/lib/upgrade-runner.js +109 -0
  346. package/dist/lib/upgrade-runner.js.map +1 -0
  347. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  348. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  349. package/dist/lib/workspaceVocabCache.js +98 -0
  350. package/dist/lib/workspaceVocabCache.js.map +1 -0
  351. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  352. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  353. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  354. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  355. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  356. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  357. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  358. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  359. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  360. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  361. package/dist/setup/__tests__/state-machine.test.js +341 -0
  362. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  363. package/dist/setup/detect-surfaces.d.ts +21 -0
  364. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  365. package/dist/setup/detect-surfaces.js +39 -0
  366. package/dist/setup/detect-surfaces.js.map +1 -0
  367. package/dist/setup/manifest-writer.d.ts +17 -0
  368. package/dist/setup/manifest-writer.d.ts.map +1 -0
  369. package/dist/setup/manifest-writer.js +153 -0
  370. package/dist/setup/manifest-writer.js.map +1 -0
  371. package/dist/setup/perimeter.d.ts +72 -0
  372. package/dist/setup/perimeter.d.ts.map +1 -0
  373. package/dist/setup/perimeter.js +128 -0
  374. package/dist/setup/perimeter.js.map +1 -0
  375. package/dist/setup/state-machine.d.ts +67 -0
  376. package/dist/setup/state-machine.d.ts.map +1 -0
  377. package/dist/setup/state-machine.js +124 -0
  378. package/dist/setup/state-machine.js.map +1 -0
  379. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  380. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  381. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  382. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  383. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  384. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  385. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  386. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  387. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  388. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  389. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  390. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  391. package/dist/surfaces/adapter.d.ts +70 -0
  392. package/dist/surfaces/adapter.d.ts.map +1 -0
  393. package/dist/surfaces/adapter.js +2 -0
  394. package/dist/surfaces/adapter.js.map +1 -0
  395. package/dist/surfaces/adapters/claude.d.ts +3 -0
  396. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  397. package/dist/surfaces/adapters/claude.js +67 -0
  398. package/dist/surfaces/adapters/claude.js.map +1 -0
  399. package/dist/surfaces/adapters/codex.d.ts +3 -0
  400. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  401. package/dist/surfaces/adapters/codex.js +61 -0
  402. package/dist/surfaces/adapters/codex.js.map +1 -0
  403. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  404. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  405. package/dist/surfaces/adapters/copilot.js +59 -0
  406. package/dist/surfaces/adapters/copilot.js.map +1 -0
  407. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  408. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  409. package/dist/surfaces/adapters/cursor.js +78 -0
  410. package/dist/surfaces/adapters/cursor.js.map +1 -0
  411. package/dist/surfaces/registry.d.ts +58 -2
  412. package/dist/surfaces/registry.d.ts.map +1 -1
  413. package/dist/surfaces/registry.js +82 -7
  414. package/dist/surfaces/registry.js.map +1 -1
  415. package/dist/surfaces/telemetry.d.ts +17 -0
  416. package/dist/surfaces/telemetry.d.ts.map +1 -0
  417. package/dist/surfaces/telemetry.js +31 -0
  418. package/dist/surfaces/telemetry.js.map +1 -0
  419. package/package.json +3 -1
  420. package/dist/__tests__/setup.test.d.ts +0 -2
  421. package/dist/__tests__/setup.test.d.ts.map +0 -1
  422. package/dist/__tests__/setup.test.js +0 -141
  423. package/dist/__tests__/setup.test.js.map +0 -1
  424. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  425. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  426. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  427. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  428. package/dist/lib/onboarding-phases.d.ts +0 -9
  429. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  430. package/dist/lib/onboarding-phases.js +0 -120
  431. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-config.test.d.ts","sourceRoot":"","sources":["../../src/commands/connect-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { mkdirSync, writeFileSync, readFileSync, rmSync } from 'fs';
3
+ import { resolve } from 'path';
4
+ import { tmpdir } from 'os';
5
+ // connect.js imports the Ink screens + handoff helpers; mock them so importing connect.js stays
6
+ // side-effect-free (matches connect.test.ts / connect-integration.test.ts). We deliberately do
7
+ // NOT mock `fs` — saveProjectConfig is real-filesystem logic and these tests assert on real files.
8
+ vi.mock('./connect-screens.js', () => ({ runConnectScreens: vi.fn(async () => { }) }));
9
+ vi.mock('./connect-handoff.js', () => ({
10
+ detectHandoffMarkers: vi.fn(() => ({})),
11
+ resolveHandoff: vi.fn(() => null),
12
+ printHandoff: vi.fn(),
13
+ }));
14
+ import { saveProjectConfig } from './connect.js';
15
+ describe('saveProjectConfig redirect detection (real fs)', () => {
16
+ let repo;
17
+ const prevCwd = process.cwd();
18
+ beforeEach(() => {
19
+ repo = resolve(tmpdir(), `pb-connect-${Date.now()}-${Math.random().toString(36).slice(2)}`);
20
+ mkdirSync(resolve(repo, '.productbrain'), { recursive: true });
21
+ process.chdir(repo);
22
+ });
23
+ afterEach(() => {
24
+ process.chdir(prevCwd);
25
+ rmSync(repo, { recursive: true, force: true });
26
+ });
27
+ it('returns previousProfile=null on first connect', () => {
28
+ const r = saveProjectConfig('https://x.convex.site', 'workspace-a');
29
+ expect(r.previousProfile).toBeNull();
30
+ expect(JSON.parse(readFileSync(resolve(repo, '.productbrain', 'config.local.json'), 'utf8')).profile).toBe('workspace-a');
31
+ });
32
+ it('reports the prior profile when redirecting to a different workspace', () => {
33
+ writeFileSync(resolve(repo, '.productbrain', 'config.local.json'), JSON.stringify({ profile: 'workspace-a' }));
34
+ const r = saveProjectConfig('https://y.convex.site', 'workspace-b');
35
+ expect(r.previousProfile).toBe('workspace-a');
36
+ expect(JSON.parse(readFileSync(resolve(repo, '.productbrain', 'config.local.json'), 'utf8')).profile).toBe('workspace-b');
37
+ });
38
+ it('reports null when re-connecting the same workspace', () => {
39
+ writeFileSync(resolve(repo, '.productbrain', 'config.local.json'), JSON.stringify({ profile: 'workspace-a' }));
40
+ const r = saveProjectConfig('https://x.convex.site', 'workspace-a');
41
+ expect(r.previousProfile).toBeNull();
42
+ });
43
+ });
44
+ //# sourceMappingURL=connect-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-config.test.js","sourceRoot":"","sources":["../../src/commands/connect-config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * connect-context — non-UI orchestration for the post-connect wizard.
3
+ *
4
+ * Extracted from connect-screens.tsx so the seed-readiness poll + context
5
+ * handshake can be tested without rendering Ink. The screens render purely from
6
+ * the result of prepareConnectContext().
7
+ *
8
+ * Chain: WP-433 (pb connect handoff), WP-439 S4 (strict-by-default handshake),
9
+ * WP-379 S3b (async seed polling).
10
+ */
11
+ import { type HealthGap } from './handshake.js';
12
+ export interface ConnectContext {
13
+ /** True when the context handshake threw (context files may be incomplete). */
14
+ handshakeFailed: boolean;
15
+ /** Handshake error message, when handshakeFailed. */
16
+ handshakeError?: string;
17
+ /** Non-empty when starter-setup seeds were still pending after the poll. */
18
+ seedGaps?: ReadonlyArray<HealthGap>;
19
+ /**
20
+ * Adapter files PB left untouched because they already existed without its
21
+ * auto-gen marker (you authored them). The screen relays these so a user with
22
+ * a pre-existing CLAUDE.md is not falsely told it was synced (TEN-2107).
23
+ * Undefined = nothing skipped.
24
+ */
25
+ skippedFiles?: ReadonlyArray<string>;
26
+ }
27
+ /**
28
+ * Prepare the workspace context after `pb connect` redeems a token:
29
+ *
30
+ * 1. Poll until starter-setup seeds are ready FIRST. The handshake fetches
31
+ * seeded setup-asset bodies (skills/rules); on a fresh workspace those seeds
32
+ * land asynchronously (WP-379 S3b), so running the handshake before they are
33
+ * ready makes its body fetch fail.
34
+ * 2. Run the handshake LENIENT. This is an automatic onboarding handshake — it
35
+ * follows the precedent set for the automatic refresh at session close
36
+ * (session.ts, WP-439 S4): automatic runs must not hard-fail on a body-fetch
37
+ * error; orphaned assets are surfaced when the user runs `pb handshake`
38
+ * directly. Strict-by-default is for that direct command, not for the silent
39
+ * post-connect refresh.
40
+ *
41
+ * Never throws — failures are captured in the returned object for the screen to
42
+ * render.
43
+ */
44
+ export declare function prepareConnectContext(): Promise<ConnectContext>;
45
+ //# sourceMappingURL=connect-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-context.d.ts","sourceRoot":"","sources":["../../src/commands/connect-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACpC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAkCrE"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * connect-context — non-UI orchestration for the post-connect wizard.
3
+ *
4
+ * Extracted from connect-screens.tsx so the seed-readiness poll + context
5
+ * handshake can be tested without rendering Ink. The screens render purely from
6
+ * the result of prepareConnectContext().
7
+ *
8
+ * Chain: WP-433 (pb connect handoff), WP-439 S4 (strict-by-default handshake),
9
+ * WP-379 S3b (async seed polling).
10
+ */
11
+ import { runHandshake, pollUntilSeedsReady } from './handshake.js';
12
+ /**
13
+ * Prepare the workspace context after `pb connect` redeems a token:
14
+ *
15
+ * 1. Poll until starter-setup seeds are ready FIRST. The handshake fetches
16
+ * seeded setup-asset bodies (skills/rules); on a fresh workspace those seeds
17
+ * land asynchronously (WP-379 S3b), so running the handshake before they are
18
+ * ready makes its body fetch fail.
19
+ * 2. Run the handshake LENIENT. This is an automatic onboarding handshake — it
20
+ * follows the precedent set for the automatic refresh at session close
21
+ * (session.ts, WP-439 S4): automatic runs must not hard-fail on a body-fetch
22
+ * error; orphaned assets are surfaced when the user runs `pb handshake`
23
+ * directly. Strict-by-default is for that direct command, not for the silent
24
+ * post-connect refresh.
25
+ *
26
+ * Never throws — failures are captured in the returned object for the screen to
27
+ * render.
28
+ */
29
+ export async function prepareConnectContext() {
30
+ // 1. Wait for seeds to be ready before the handshake consumes them.
31
+ // probe-failed (network/auth) is non-blocking — no seeds warning when the
32
+ // health endpoint is simply unreachable.
33
+ let seedGaps;
34
+ try {
35
+ const seedResult = await pollUntilSeedsReady();
36
+ if (seedResult.status === 'seeds-pending') {
37
+ seedGaps = seedResult.gaps;
38
+ }
39
+ // seeds-ready and probe-failed both leave seedGaps undefined (no warning).
40
+ }
41
+ catch {
42
+ // Future-proofing: pollUntilSeedsReady does not throw today (its probe
43
+ // catches everything into 'probe-failed'); this guards that contract drifting.
44
+ }
45
+ // 2. Run handshake lenient — capture failure for display rather than aborting.
46
+ let handshakeFailed = false;
47
+ let handshakeError;
48
+ let skippedFiles;
49
+ try {
50
+ const report = await runHandshake({ force: false, apply: true, quiet: true, lenient: true });
51
+ // userOwnedSkipped = adapter files that already existed without PB's auto-gen
52
+ // marker, so the handshake left them untouched. Relay them so the screen does
53
+ // not falsely report them as synced (TEN-2107). These are NOT drift (TEN-2150).
54
+ if (report?.userOwnedSkipped && report.userOwnedSkipped.length > 0) {
55
+ skippedFiles = report.userOwnedSkipped;
56
+ }
57
+ }
58
+ catch (err) {
59
+ handshakeFailed = true;
60
+ handshakeError = err instanceof Error ? err.message : String(err);
61
+ }
62
+ return { handshakeFailed, handshakeError, seedGaps, skippedFiles };
63
+ }
64
+ //# sourceMappingURL=connect-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-context.js","sourceRoot":"","sources":["../../src/commands/connect-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAkB,MAAM,gBAAgB,CAAC;AAkBnF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,oEAAoE;IACpE,0EAA0E;IAC1E,yCAAyC;IACzC,IAAI,QAA8C,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAC1C,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,2EAA2E;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,+EAA+E;IACjF,CAAC;IAED,+EAA+E;IAC/E,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,cAAkC,CAAC;IACvC,IAAI,YAA+C,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,8EAA8E;QAC9E,8EAA8E;QAC9E,gFAAgF;QAChF,IAAI,MAAM,EAAE,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,GAAG,IAAI,CAAC;QACvB,cAAc,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=connect-context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-context.test.d.ts","sourceRoot":"","sources":["../../src/commands/connect-context.test.ts"],"names":[],"mappings":""}
@@ -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"}