@productbrain/cli 0.1.0-beta.108 → 0.1.0-beta.1087

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 (412) 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 +255 -5
  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 +117 -26
  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__/preview-key-refresh.test.d.ts +2 -0
  50. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  51. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  52. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  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-reset.test.d.ts +2 -0
  58. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  59. package/dist/__tests__/session-reset.test.js +122 -0
  60. package/dist/__tests__/session-reset.test.js.map +1 -0
  61. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  62. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  63. package/dist/__tests__/session-resume-backstop.test.js +97 -0
  64. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  65. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  66. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  67. package/dist/__tests__/session-start-key-refresh.test.js +178 -0
  68. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  69. package/dist/__tests__/session-state-machine.test.js +45 -1
  70. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  71. package/dist/__tests__/session-switch.test.d.ts +2 -0
  72. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  73. package/dist/__tests__/session-switch.test.js +130 -0
  74. package/dist/__tests__/session-switch.test.js.map +1 -0
  75. package/dist/__tests__/setup-ingest.test.js +16 -0
  76. package/dist/__tests__/setup-ingest.test.js.map +1 -1
  77. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  78. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  79. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  80. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  81. package/dist/__tests__/update-check.test.d.ts +2 -0
  82. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  83. package/dist/__tests__/update-check.test.js +215 -0
  84. package/dist/__tests__/update-check.test.js.map +1 -0
  85. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  86. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  87. package/dist/__tests__/upgrade-runner.test.js +54 -0
  88. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  89. package/dist/__tests__/upgrade.test.d.ts +2 -0
  90. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  91. package/dist/__tests__/upgrade.test.js +56 -0
  92. package/dist/__tests__/upgrade.test.js.map +1 -0
  93. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  94. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  95. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  96. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  97. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  98. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  99. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  100. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  101. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  102. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  103. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  104. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  105. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  106. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  107. package/dist/commands/__tests__/setup-state.test.js +194 -0
  108. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  109. package/dist/commands/admin/seed.d.ts +32 -2
  110. package/dist/commands/admin/seed.d.ts.map +1 -1
  111. package/dist/commands/admin/seed.js +279 -33
  112. package/dist/commands/admin/seed.js.map +1 -1
  113. package/dist/commands/admin/seed.test.js +7 -0
  114. package/dist/commands/admin/seed.test.js.map +1 -1
  115. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  116. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  117. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  118. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  119. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  120. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  121. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  122. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  123. package/dist/commands/audit.d.ts.map +1 -1
  124. package/dist/commands/audit.js +30 -3
  125. package/dist/commands/audit.js.map +1 -1
  126. package/dist/commands/authority-domains.d.ts +7 -1
  127. package/dist/commands/authority-domains.d.ts.map +1 -1
  128. package/dist/commands/authority-domains.js +19 -4
  129. package/dist/commands/authority-domains.js.map +1 -1
  130. package/dist/commands/capture.d.ts +2 -0
  131. package/dist/commands/capture.d.ts.map +1 -1
  132. package/dist/commands/capture.js +8 -3
  133. package/dist/commands/capture.js.map +1 -1
  134. package/dist/commands/codex-prep.js +6 -6
  135. package/dist/commands/codex-prep.js.map +1 -1
  136. package/dist/commands/connect-config.test.d.ts +2 -0
  137. package/dist/commands/connect-config.test.d.ts.map +1 -0
  138. package/dist/commands/connect-config.test.js +44 -0
  139. package/dist/commands/connect-config.test.js.map +1 -0
  140. package/dist/commands/connect-context.d.ts +45 -0
  141. package/dist/commands/connect-context.d.ts.map +1 -0
  142. package/dist/commands/connect-context.js +64 -0
  143. package/dist/commands/connect-context.js.map +1 -0
  144. package/dist/commands/connect-context.test.d.ts +2 -0
  145. package/dist/commands/connect-context.test.d.ts.map +1 -0
  146. package/dist/commands/connect-context.test.js +110 -0
  147. package/dist/commands/connect-context.test.js.map +1 -0
  148. package/dist/commands/connect-handoff.d.ts +51 -0
  149. package/dist/commands/connect-handoff.d.ts.map +1 -0
  150. package/dist/commands/connect-handoff.js +70 -0
  151. package/dist/commands/connect-handoff.js.map +1 -0
  152. package/dist/commands/connect-integration.test.js +13 -12
  153. package/dist/commands/connect-integration.test.js.map +1 -1
  154. package/dist/commands/connect-screens.d.ts +7 -8
  155. package/dist/commands/connect-screens.d.ts.map +1 -1
  156. package/dist/commands/connect-screens.js +30 -37
  157. package/dist/commands/connect-screens.js.map +1 -1
  158. package/dist/commands/connect.d.ts +19 -6
  159. package/dist/commands/connect.d.ts.map +1 -1
  160. package/dist/commands/connect.js +31 -56
  161. package/dist/commands/connect.js.map +1 -1
  162. package/dist/commands/doctor.d.ts.map +1 -1
  163. package/dist/commands/doctor.js +67 -2
  164. package/dist/commands/doctor.js.map +1 -1
  165. package/dist/commands/doctor.test.js +150 -0
  166. package/dist/commands/doctor.test.js.map +1 -1
  167. package/dist/commands/handshake.d.ts +84 -4
  168. package/dist/commands/handshake.d.ts.map +1 -1
  169. package/dist/commands/handshake.js +1169 -97
  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 +5 -1
  173. package/dist/commands/method.js.map +1 -1
  174. package/dist/commands/orient.d.ts +52 -2
  175. package/dist/commands/orient.d.ts.map +1 -1
  176. package/dist/commands/orient.js +41 -7
  177. package/dist/commands/orient.js.map +1 -1
  178. package/dist/commands/profile.d.ts +1 -14
  179. package/dist/commands/profile.d.ts.map +1 -1
  180. package/dist/commands/profile.js +89 -72
  181. package/dist/commands/profile.js.map +1 -1
  182. package/dist/commands/reject.d.ts.map +1 -1
  183. package/dist/commands/reject.js +2 -1
  184. package/dist/commands/reject.js.map +1 -1
  185. package/dist/commands/relate.d.ts.map +1 -1
  186. package/dist/commands/relate.js +4 -2
  187. package/dist/commands/relate.js.map +1 -1
  188. package/dist/commands/session.d.ts +26 -2
  189. package/dist/commands/session.d.ts.map +1 -1
  190. package/dist/commands/session.js +216 -31
  191. package/dist/commands/session.js.map +1 -1
  192. package/dist/commands/setup-audit.d.ts +59 -0
  193. package/dist/commands/setup-audit.d.ts.map +1 -0
  194. package/dist/commands/setup-audit.js +250 -0
  195. package/dist/commands/setup-audit.js.map +1 -0
  196. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  197. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  198. package/dist/commands/setup-detect-surfaces.js +76 -0
  199. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  200. package/dist/commands/setup-ingest.d.ts.map +1 -1
  201. package/dist/commands/setup-ingest.js +4 -2
  202. package/dist/commands/setup-ingest.js.map +1 -1
  203. package/dist/commands/setup-state.d.ts +42 -0
  204. package/dist/commands/setup-state.d.ts.map +1 -0
  205. package/dist/commands/setup-state.js +93 -0
  206. package/dist/commands/setup-state.js.map +1 -0
  207. package/dist/commands/setup.d.ts +17 -9
  208. package/dist/commands/setup.d.ts.map +1 -1
  209. package/dist/commands/setup.js +52 -131
  210. package/dist/commands/setup.js.map +1 -1
  211. package/dist/commands/update.d.ts.map +1 -1
  212. package/dist/commands/update.js +2 -1
  213. package/dist/commands/update.js.map +1 -1
  214. package/dist/commands/upgrade.d.ts +5 -0
  215. package/dist/commands/upgrade.d.ts.map +1 -0
  216. package/dist/commands/upgrade.js +110 -0
  217. package/dist/commands/upgrade.js.map +1 -0
  218. package/dist/commands/verify.d.ts.map +1 -1
  219. package/dist/commands/verify.js +2 -1
  220. package/dist/commands/verify.js.map +1 -1
  221. package/dist/commands/whoami.d.ts +12 -0
  222. package/dist/commands/whoami.d.ts.map +1 -0
  223. package/dist/commands/whoami.js +70 -0
  224. package/dist/commands/whoami.js.map +1 -0
  225. package/dist/commands/whoami.test.d.ts +2 -0
  226. package/dist/commands/whoami.test.d.ts.map +1 -0
  227. package/dist/commands/whoami.test.js +50 -0
  228. package/dist/commands/whoami.test.js.map +1 -0
  229. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  230. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  231. package/dist/formatters/__tests__/orient-provenance.test.js +454 -0
  232. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  233. package/dist/formatters/audit.d.ts +6 -0
  234. package/dist/formatters/audit.d.ts.map +1 -1
  235. package/dist/formatters/audit.js.map +1 -1
  236. package/dist/formatters/entry.d.ts +21 -0
  237. package/dist/formatters/entry.d.ts.map +1 -1
  238. package/dist/formatters/entry.js +46 -5
  239. package/dist/formatters/entry.js.map +1 -1
  240. package/dist/formatters/handshake.d.ts +19 -3
  241. package/dist/formatters/handshake.d.ts.map +1 -1
  242. package/dist/formatters/handshake.js +47 -12
  243. package/dist/formatters/handshake.js.map +1 -1
  244. package/dist/formatters/orient.d.ts +64 -4
  245. package/dist/formatters/orient.d.ts.map +1 -1
  246. package/dist/formatters/orient.js +103 -18
  247. package/dist/formatters/orient.js.map +1 -1
  248. package/dist/generators/adapters.js +4 -4
  249. package/dist/generators/context-md.js +6 -6
  250. package/dist/generators/context-md.js.map +1 -1
  251. package/dist/generators/manifest.d.ts +76 -0
  252. package/dist/generators/manifest.d.ts.map +1 -1
  253. package/dist/generators/manifest.js +125 -14
  254. package/dist/generators/manifest.js.map +1 -1
  255. package/dist/generators/portable-knowledge.d.ts +2 -2
  256. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  257. package/dist/generators/region-projections.d.ts +18 -0
  258. package/dist/generators/region-projections.d.ts.map +1 -0
  259. package/dist/generators/region-projections.js +49 -0
  260. package/dist/generators/region-projections.js.map +1 -0
  261. package/dist/generators/region-projections.test.d.ts +2 -0
  262. package/dist/generators/region-projections.test.d.ts.map +1 -0
  263. package/dist/generators/region-projections.test.js +63 -0
  264. package/dist/generators/region-projections.test.js.map +1 -0
  265. package/dist/generators/region.d.ts +24 -0
  266. package/dist/generators/region.d.ts.map +1 -0
  267. package/dist/generators/region.js +87 -0
  268. package/dist/generators/region.js.map +1 -0
  269. package/dist/generators/region.test.d.ts +2 -0
  270. package/dist/generators/region.test.d.ts.map +1 -0
  271. package/dist/generators/region.test.js +126 -0
  272. package/dist/generators/region.test.js.map +1 -0
  273. package/dist/generators/surface-profiles.d.ts +1 -2
  274. package/dist/generators/surface-profiles.d.ts.map +1 -1
  275. package/dist/generators/surface-profiles.js.map +1 -1
  276. package/dist/index.js +144 -25
  277. package/dist/index.js.map +1 -1
  278. package/dist/lib/activation.js +2 -2
  279. package/dist/lib/activation.js.map +1 -1
  280. package/dist/lib/activation.test.js +3 -3
  281. package/dist/lib/activation.test.js.map +1 -1
  282. package/dist/lib/canonicalRefs.d.ts +72 -0
  283. package/dist/lib/canonicalRefs.d.ts.map +1 -1
  284. package/dist/lib/canonicalRefs.js +67 -0
  285. package/dist/lib/canonicalRefs.js.map +1 -1
  286. package/dist/lib/client.d.ts.map +1 -1
  287. package/dist/lib/client.js +13 -3
  288. package/dist/lib/client.js.map +1 -1
  289. package/dist/lib/config.d.ts +101 -4
  290. package/dist/lib/config.d.ts.map +1 -1
  291. package/dist/lib/config.js +225 -11
  292. package/dist/lib/config.js.map +1 -1
  293. package/dist/lib/constants.d.ts +2 -0
  294. package/dist/lib/constants.d.ts.map +1 -1
  295. package/dist/lib/constants.js +2 -0
  296. package/dist/lib/constants.js.map +1 -1
  297. package/dist/lib/errors.d.ts +1 -0
  298. package/dist/lib/errors.d.ts.map +1 -1
  299. package/dist/lib/errors.js +1 -0
  300. package/dist/lib/errors.js.map +1 -1
  301. package/dist/lib/notice-marker.d.ts +3 -0
  302. package/dist/lib/notice-marker.d.ts.map +1 -0
  303. package/dist/lib/notice-marker.js +53 -0
  304. package/dist/lib/notice-marker.js.map +1 -0
  305. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  306. package/dist/lib/onboarding-path-b.js +0 -1
  307. package/dist/lib/onboarding-path-b.js.map +1 -1
  308. package/dist/lib/onboarding-shared.d.ts +0 -1
  309. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  310. package/dist/lib/onboarding-shared.js +1 -17
  311. package/dist/lib/onboarding-shared.js.map +1 -1
  312. package/dist/lib/profiles.d.ts +3 -1
  313. package/dist/lib/profiles.d.ts.map +1 -1
  314. package/dist/lib/profiles.js +9 -6
  315. package/dist/lib/profiles.js.map +1 -1
  316. package/dist/lib/session.d.ts +10 -0
  317. package/dist/lib/session.d.ts.map +1 -1
  318. package/dist/lib/session.js +26 -1
  319. package/dist/lib/session.js.map +1 -1
  320. package/dist/lib/update-check.d.ts +42 -7
  321. package/dist/lib/update-check.d.ts.map +1 -1
  322. package/dist/lib/update-check.js +213 -62
  323. package/dist/lib/update-check.js.map +1 -1
  324. package/dist/lib/upgrade-runner.d.ts +22 -0
  325. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  326. package/dist/lib/upgrade-runner.js +110 -0
  327. package/dist/lib/upgrade-runner.js.map +1 -0
  328. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  329. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  330. package/dist/lib/workspaceVocabCache.js +98 -0
  331. package/dist/lib/workspaceVocabCache.js.map +1 -0
  332. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  333. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  334. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  335. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  336. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  337. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  338. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  339. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  340. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  341. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  342. package/dist/setup/__tests__/state-machine.test.js +341 -0
  343. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  344. package/dist/setup/detect-surfaces.d.ts +21 -0
  345. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  346. package/dist/setup/detect-surfaces.js +39 -0
  347. package/dist/setup/detect-surfaces.js.map +1 -0
  348. package/dist/setup/manifest-writer.d.ts +17 -0
  349. package/dist/setup/manifest-writer.d.ts.map +1 -0
  350. package/dist/setup/manifest-writer.js +153 -0
  351. package/dist/setup/manifest-writer.js.map +1 -0
  352. package/dist/setup/perimeter.d.ts +72 -0
  353. package/dist/setup/perimeter.d.ts.map +1 -0
  354. package/dist/setup/perimeter.js +128 -0
  355. package/dist/setup/perimeter.js.map +1 -0
  356. package/dist/setup/state-machine.d.ts +67 -0
  357. package/dist/setup/state-machine.d.ts.map +1 -0
  358. package/dist/setup/state-machine.js +124 -0
  359. package/dist/setup/state-machine.js.map +1 -0
  360. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  361. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  362. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  363. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  364. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  365. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  366. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  367. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  368. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  369. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  370. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  371. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  372. package/dist/surfaces/adapter.d.ts +70 -0
  373. package/dist/surfaces/adapter.d.ts.map +1 -0
  374. package/dist/surfaces/adapter.js +2 -0
  375. package/dist/surfaces/adapter.js.map +1 -0
  376. package/dist/surfaces/adapters/claude.d.ts +3 -0
  377. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  378. package/dist/surfaces/adapters/claude.js +67 -0
  379. package/dist/surfaces/adapters/claude.js.map +1 -0
  380. package/dist/surfaces/adapters/codex.d.ts +3 -0
  381. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  382. package/dist/surfaces/adapters/codex.js +61 -0
  383. package/dist/surfaces/adapters/codex.js.map +1 -0
  384. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  385. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  386. package/dist/surfaces/adapters/copilot.js +59 -0
  387. package/dist/surfaces/adapters/copilot.js.map +1 -0
  388. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  389. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  390. package/dist/surfaces/adapters/cursor.js +78 -0
  391. package/dist/surfaces/adapters/cursor.js.map +1 -0
  392. package/dist/surfaces/registry.d.ts +58 -2
  393. package/dist/surfaces/registry.d.ts.map +1 -1
  394. package/dist/surfaces/registry.js +82 -7
  395. package/dist/surfaces/registry.js.map +1 -1
  396. package/dist/surfaces/telemetry.d.ts +17 -0
  397. package/dist/surfaces/telemetry.d.ts.map +1 -0
  398. package/dist/surfaces/telemetry.js +31 -0
  399. package/dist/surfaces/telemetry.js.map +1 -0
  400. package/package.json +3 -1
  401. package/dist/__tests__/setup.test.d.ts +0 -2
  402. package/dist/__tests__/setup.test.d.ts.map +0 -1
  403. package/dist/__tests__/setup.test.js +0 -141
  404. package/dist/__tests__/setup.test.js.map +0 -1
  405. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  406. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  407. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  408. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  409. package/dist/lib/onboarding-phases.d.ts +0 -9
  410. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  411. package/dist/lib/onboarding-phases.js +0 -120
  412. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ /**
2
+ * WP-433 S4 — FEAT-1291: Tests for connect-handoff module.
3
+ *
4
+ * Contract:
5
+ * 1. Heuristic table: 5 cases, each asserts exact agent + message strings.
6
+ * 2. ≤200-char invariant: all 5 messages must be ≤200 characters.
7
+ * 3. No bare-repo undefined: bare-repo result is never undefined/empty.
8
+ * 4. detectHandoffMarkers integration: tmpdir with .claude/ → hasClaude=true.
9
+ */
10
+ import { mkdirSync, rmSync, writeFileSync } from 'fs';
11
+ import { join } from 'path';
12
+ import { tmpdir } from 'os';
13
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
14
+ import { resolveHandoff, detectHandoffMarkers, HANDOFF_MESSAGE_CLAUDE_OR_CURSOR, HANDOFF_MESSAGE_CLAUDE, HANDOFF_MESSAGE_CURSOR, HANDOFF_MESSAGE_CODEX, HANDOFF_MESSAGE_BARE_REPO, } from '../connect-handoff.js';
15
+ // ── 1. Heuristic table (5 cases) ─────────────────────────────────────────────
16
+ describe('resolveHandoff — heuristic table', () => {
17
+ it('.claude=Y, .cursor=Y → claude-or-cursor', () => {
18
+ const result = resolveHandoff({ hasClaude: true, hasCursor: true, hasCodexFile: false });
19
+ expect(result.agent).toBe('claude-or-cursor');
20
+ expect(result.message).toBe('Open Claude Code or Cursor in this project and type in chat: Start Product Brain');
21
+ });
22
+ it('.claude=Y, .cursor=N → claude', () => {
23
+ const result = resolveHandoff({ hasClaude: true, hasCursor: false, hasCodexFile: false });
24
+ expect(result.agent).toBe('claude');
25
+ expect(result.message).toBe('Open Claude Code in this project and type in chat: Start Product Brain');
26
+ });
27
+ it('.claude=N, .cursor=Y → cursor', () => {
28
+ const result = resolveHandoff({ hasClaude: false, hasCursor: true, hasCodexFile: false });
29
+ expect(result.agent).toBe('cursor');
30
+ expect(result.message).toBe('Open Cursor in this project and type in chat: Start Product Brain');
31
+ });
32
+ it('.claude=N, .cursor=N, AGENTS.md=Y → codex', () => {
33
+ const result = resolveHandoff({ hasClaude: false, hasCursor: false, hasCodexFile: true });
34
+ expect(result.agent).toBe('codex');
35
+ expect(result.message).toBe('Open Codex CLI in this project and type in chat: Start Product Brain');
36
+ });
37
+ it('.claude=N, .cursor=N, AGENTS.md=N → bare-repo', () => {
38
+ const result = resolveHandoff({ hasClaude: false, hasCursor: false, hasCodexFile: false });
39
+ expect(result.agent).toBe('bare-repo');
40
+ expect(result.message).toBe('No AI tool detected in this project. Visit productbrain.io/docs to set one up.');
41
+ });
42
+ });
43
+ // ── 2. Exhaustiveness: every boolean combination returns a defined HandoffResult ──
44
+ describe('resolveHandoff — every boolean combination returns a defined HandoffResult', () => {
45
+ it('covers all 2^3 = 8 marker combinations', () => {
46
+ const bools = [false, true];
47
+ for (const hasClaude of bools) {
48
+ for (const hasCursor of bools) {
49
+ for (const hasCodexFile of bools) {
50
+ const result = resolveHandoff({ hasClaude, hasCursor, hasCodexFile });
51
+ expect(result.agent).toBeDefined();
52
+ expect(result.message.length).toBeGreaterThan(0);
53
+ }
54
+ }
55
+ }
56
+ });
57
+ });
58
+ // ── 4. ≤200-char invariant ────────────────────────────────────────────────────
59
+ describe('handoff message ≤200-char invariant', () => {
60
+ const allMessages = [
61
+ HANDOFF_MESSAGE_CLAUDE_OR_CURSOR,
62
+ HANDOFF_MESSAGE_CLAUDE,
63
+ HANDOFF_MESSAGE_CURSOR,
64
+ HANDOFF_MESSAGE_CODEX,
65
+ HANDOFF_MESSAGE_BARE_REPO,
66
+ ];
67
+ it.each(allMessages)('message is ≤200 chars: "%s"', (msg) => {
68
+ expect(msg.length).toBeLessThanOrEqual(200);
69
+ });
70
+ });
71
+ // ── 5. No bare-repo undefined ─────────────────────────────────────────────────
72
+ describe('bare-repo result is never undefined or empty', () => {
73
+ it('resolveHandoff returns bare-repo with non-empty message when no markers', () => {
74
+ const result = resolveHandoff({ hasClaude: false, hasCursor: false, hasCodexFile: false });
75
+ expect(result.agent).toBe('bare-repo');
76
+ expect(result.message).toBeDefined();
77
+ expect(result.message.length).toBeGreaterThan(0);
78
+ });
79
+ });
80
+ // ── 6. detectHandoffMarkers integration ──────────────────────────────────────
81
+ describe('detectHandoffMarkers integration', () => {
82
+ let tmp;
83
+ beforeEach(() => {
84
+ tmp = join(tmpdir(), `pb-handoff-test-${Date.now()}`);
85
+ mkdirSync(tmp, { recursive: true });
86
+ });
87
+ afterEach(() => {
88
+ rmSync(tmp, { recursive: true, force: true });
89
+ });
90
+ it('returns hasClaude=true when .claude/ dir exists', () => {
91
+ mkdirSync(join(tmp, '.claude'));
92
+ const markers = detectHandoffMarkers(tmp);
93
+ expect(markers).toEqual({ hasClaude: true, hasCursor: false, hasCodexFile: false });
94
+ });
95
+ it('returns hasCursor=true when .cursor/ dir exists', () => {
96
+ mkdirSync(join(tmp, '.cursor'));
97
+ const markers = detectHandoffMarkers(tmp);
98
+ expect(markers).toEqual({ hasClaude: false, hasCursor: true, hasCodexFile: false });
99
+ });
100
+ it('returns hasCodexFile=true when AGENTS.md exists', () => {
101
+ // Write a minimal file so existsSync resolves it as a file (not dir)
102
+ writeFileSync(join(tmp, 'AGENTS.md'), '');
103
+ const markers = detectHandoffMarkers(tmp);
104
+ expect(markers).toEqual({ hasClaude: false, hasCursor: false, hasCodexFile: true });
105
+ });
106
+ it('returns all false when directory is empty', () => {
107
+ const markers = detectHandoffMarkers(tmp);
108
+ expect(markers).toEqual({ hasClaude: false, hasCursor: false, hasCodexFile: false });
109
+ });
110
+ });
111
+ //# sourceMappingURL=connect-handoff.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-handoff.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/connect-handoff.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * WP-433 S5 — `formatDetectSurfacesSummary` pure unit tests.
3
+ *
4
+ * Per INS-1420: runSetupDetectSurfaces makes live server calls via getConfigSafe()
5
+ * and kernelCall. These tests ONLY exercise the pure formatter on hand-crafted
6
+ * SetupDetectSurfacesResult objects — runSetupDetectSurfaces is never called.
7
+ *
8
+ * Test cases:
9
+ * 1. Bare-repo (zero detected, zero existing) → appends locked guidance question
10
+ * 2. Normal detect (new surfaces detected) → does NOT append
11
+ * 3. Idempotent re-run (existing surfaces, zero new) → does NOT append
12
+ * 4. Server-stamp-error case → surfaces error in summary, does NOT append extra question
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=setup-detect-surfaces.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-detect-surfaces.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-detect-surfaces.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * WP-433 S5 — `formatDetectSurfacesSummary` pure unit tests.
3
+ *
4
+ * Per INS-1420: runSetupDetectSurfaces makes live server calls via getConfigSafe()
5
+ * and kernelCall. These tests ONLY exercise the pure formatter on hand-crafted
6
+ * SetupDetectSurfacesResult objects — runSetupDetectSurfaces is never called.
7
+ *
8
+ * Test cases:
9
+ * 1. Bare-repo (zero detected, zero existing) → appends locked guidance question
10
+ * 2. Normal detect (new surfaces detected) → does NOT append
11
+ * 3. Idempotent re-run (existing surfaces, zero new) → does NOT append
12
+ * 4. Server-stamp-error case → surfaces error in summary, does NOT append extra question
13
+ */
14
+ import { describe, expect, it } from 'vitest';
15
+ import { formatDetectSurfacesSummary, } from '../setup-detect-surfaces.js';
16
+ const LOCKED_QUESTION = "I don't see Claude Code or Cursor — which AI tool do you use?";
17
+ /** Helper: build a minimal SetupDetectSurfacesResult */
18
+ function makeResult(overrides = {}) {
19
+ return {
20
+ detected: [],
21
+ existing: [],
22
+ newlyAdded: [],
23
+ union: [],
24
+ manifestUpdated: false,
25
+ manifestPath: '/repo/.productbrain/manifest.json',
26
+ serverStamp: null,
27
+ serverStampError: null,
28
+ ...overrides,
29
+ };
30
+ }
31
+ describe('formatDetectSurfacesSummary — WP-433 S5 bare-repo guidance', () => {
32
+ it('bare-repo (zero detected, zero existing) appends locked guidance question', () => {
33
+ const result = makeResult({
34
+ detected: [],
35
+ existing: [],
36
+ newlyAdded: [],
37
+ union: [],
38
+ manifestUpdated: false,
39
+ });
40
+ const summary = formatDetectSurfacesSummary(result);
41
+ expect(summary).toContain(LOCKED_QUESTION);
42
+ // Confirm the question is on a separate line
43
+ expect(summary).toContain('\n' + LOCKED_QUESTION);
44
+ });
45
+ it('normal detect (new surfaces detected) does NOT append locked question', () => {
46
+ const result = makeResult({
47
+ detected: ['claude'],
48
+ existing: [],
49
+ newlyAdded: ['claude'],
50
+ union: ['claude'],
51
+ manifestUpdated: true,
52
+ serverStamp: { stamped: true, surfaces: ['claude'] },
53
+ });
54
+ const summary = formatDetectSurfacesSummary(result);
55
+ expect(summary).not.toContain(LOCKED_QUESTION);
56
+ // Confirm surfaces are mentioned
57
+ expect(summary).toContain('claude');
58
+ });
59
+ it('STD-235 remnant (zero detected, existing surfaces remain in manifest) does NOT append locked question', () => {
60
+ // Marker dir deleted from disk; STD-235 forward-only keeps the surface in manifest.
61
+ // Detected is empty but existing is not — guard must NOT trigger bare-repo guidance.
62
+ const result = makeResult({
63
+ detected: [],
64
+ existing: ['claude'],
65
+ newlyAdded: [],
66
+ union: ['claude'],
67
+ manifestUpdated: false,
68
+ });
69
+ const summary = formatDetectSurfacesSummary(result);
70
+ expect(summary).not.toContain(LOCKED_QUESTION);
71
+ expect(summary).toContain('Detected: none');
72
+ expect(summary).toContain('Existing: claude');
73
+ });
74
+ it('idempotent re-run (existing surfaces, zero new detected) does NOT append locked question', () => {
75
+ const result = makeResult({
76
+ detected: ['claude'],
77
+ existing: ['claude'],
78
+ newlyAdded: [],
79
+ union: ['claude'],
80
+ manifestUpdated: false,
81
+ serverStamp: { stamped: false, surfaces: ['claude'] },
82
+ });
83
+ const summary = formatDetectSurfacesSummary(result);
84
+ expect(summary).not.toContain(LOCKED_QUESTION);
85
+ // Existing should appear in summary
86
+ expect(summary).toContain('claude');
87
+ });
88
+ it('server-stamp-error case surfaces the error and does NOT append the locked question', () => {
89
+ // If detect-surfaces fails at the server stamp but DID find surfaces locally,
90
+ // the error should appear but the bare-repo question should not.
91
+ const result = makeResult({
92
+ detected: ['cursor'],
93
+ existing: [],
94
+ newlyAdded: ['cursor'],
95
+ union: ['cursor'],
96
+ manifestUpdated: true,
97
+ serverStamp: null,
98
+ serverStampError: 'Network timeout connecting to workspace',
99
+ });
100
+ const summary = formatDetectSurfacesSummary(result);
101
+ // Error is surfaced
102
+ expect(summary).toContain('Server stamp failed: Network timeout connecting to workspace');
103
+ // Bare-repo question is NOT appended (surfaces were found)
104
+ expect(summary).not.toContain(LOCKED_QUESTION);
105
+ });
106
+ it('bare-repo with server-stamp-error (edge case: zero surfaces + server error) appends locked question', () => {
107
+ // Zero detected + zero existing → bare-repo. Server stamp would not have been
108
+ // called (union is empty), but if serverStampError somehow populated, the
109
+ // bare-repo signal still dominates and the question should appear.
110
+ const result = makeResult({
111
+ detected: [],
112
+ existing: [],
113
+ newlyAdded: [],
114
+ union: [],
115
+ manifestUpdated: false,
116
+ serverStamp: null,
117
+ serverStampError: 'Config missing',
118
+ });
119
+ const summary = formatDetectSurfacesSummary(result);
120
+ // Server stamp error is surfaced
121
+ expect(summary).toContain('Server stamp failed: Config missing');
122
+ // Bare-repo guidance still applies
123
+ expect(summary).toContain(LOCKED_QUESTION);
124
+ });
125
+ it('summary has correct shape for bare-repo result', () => {
126
+ const result = makeResult();
127
+ const summary = formatDetectSurfacesSummary(result);
128
+ // Base line before the question
129
+ expect(summary).toMatch(/^Detected: none \(new: none\)\. Existing: none\. Manifest unchanged\./);
130
+ });
131
+ it('summary has correct shape for normal detect', () => {
132
+ const result = makeResult({
133
+ detected: ['claude', 'cursor'],
134
+ existing: ['claude'],
135
+ newlyAdded: ['cursor'],
136
+ union: ['claude', 'cursor'],
137
+ manifestUpdated: true,
138
+ serverStamp: { stamped: true, surfaces: ['claude', 'cursor'] },
139
+ });
140
+ const summary = formatDetectSurfacesSummary(result);
141
+ expect(summary).toContain('Detected: claude, cursor');
142
+ expect(summary).toContain('new: cursor');
143
+ expect(summary).toContain('Existing: claude');
144
+ expect(summary).toContain('Manifest updated.');
145
+ expect(summary).toContain('Server stamped.');
146
+ expect(summary).not.toContain(LOCKED_QUESTION);
147
+ });
148
+ });
149
+ //# sourceMappingURL=setup-detect-surfaces.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-detect-surfaces.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-detect-surfaces.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup-state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-state.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-state.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * WP-431 S3 — `pb setup-state` and `pb setup` alias tests.
3
+ *
4
+ * Mocks kernelCall (gateway boundary) so error/auth/network paths and the
5
+ * recordInvocation idempotence behaviour are exercised without a real Convex
6
+ * deployment.
7
+ */
8
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
9
+ import { mkdirSync, mkdtempSync, rmSync } from 'fs';
10
+ import { dirname, join } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+ import { tmpdir } from 'os';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = dirname(__filename);
15
+ vi.mock('../../lib/client.js', async () => {
16
+ class FakeMcpError extends Error {
17
+ code;
18
+ constructor(message, code) {
19
+ super(message);
20
+ this.name = 'McpError';
21
+ this.code = code;
22
+ }
23
+ }
24
+ return {
25
+ kernelCall: vi.fn(),
26
+ McpError: FakeMcpError,
27
+ };
28
+ });
29
+ import { runSetupState, fetchSetupState } from '../setup-state.js';
30
+ import { runSetup } from '../setup.js';
31
+ import { kernelCall, McpError } from '../../lib/client.js';
32
+ const mockedKernelCall = vi.mocked(kernelCall);
33
+ let scratch;
34
+ let originalCwd;
35
+ let exitSpy;
36
+ let stdoutSpy;
37
+ let stderrSpy;
38
+ beforeEach(() => {
39
+ originalCwd = process.cwd();
40
+ scratch = mkdtempSync(join(tmpdir(), 'pb-setup-state-'));
41
+ process.chdir(scratch);
42
+ mockedKernelCall.mockReset();
43
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation(((_code) => {
44
+ throw new Error(`__exit:${_code ?? 0}`);
45
+ }));
46
+ stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
47
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
48
+ });
49
+ afterEach(() => {
50
+ process.chdir(originalCwd);
51
+ rmSync(scratch, { recursive: true, force: true });
52
+ exitSpy.mockRestore();
53
+ stdoutSpy.mockRestore();
54
+ stderrSpy.mockRestore();
55
+ });
56
+ const SAMPLE = {
57
+ phase: 1,
58
+ role: 'creator',
59
+ expectedAction: 'declare a surface',
60
+ reasonForPhase: 'manifest.surfaces empty',
61
+ isComplete: false,
62
+ surfaceCapability: 'cli',
63
+ };
64
+ describe('fetchSetupState()', () => {
65
+ it('returns the typed result from setup.getPbSetupState', async () => {
66
+ mockedKernelCall.mockResolvedValueOnce(SAMPLE);
67
+ const result = await fetchSetupState();
68
+ expect(result).toEqual(SAMPLE);
69
+ expect(mockedKernelCall).toHaveBeenCalledWith('setup.getPbSetupState', {});
70
+ });
71
+ });
72
+ describe('runSetupState()', () => {
73
+ it('writes compact JSON to stdout on success', async () => {
74
+ mockedKernelCall.mockResolvedValueOnce(SAMPLE);
75
+ await runSetupState();
76
+ const written = stdoutSpy.mock.calls.map((c) => String(c[0])).join('');
77
+ const parsed = JSON.parse(written.trim());
78
+ expect(parsed).toEqual(SAMPLE);
79
+ });
80
+ it('exits 2 on AUTH_REQUIRED', async () => {
81
+ mockedKernelCall.mockRejectedValueOnce(new McpError('not member', 'AUTHZ_NOT_MEMBER'));
82
+ await expect(runSetupState()).rejects.toThrow('__exit:2');
83
+ const stderr = stderrSpy.mock.calls.map((c) => String(c[0])).join('');
84
+ expect(stderr).toContain('AUTH_DENIED');
85
+ });
86
+ it('exits 3 on network error (CLIError category=network)', async () => {
87
+ const { CLIError, ErrorCode } = await import('../../lib/errors.js');
88
+ mockedKernelCall.mockRejectedValueOnce(new CLIError('Could not reach host.', {
89
+ code: ErrorCode.NETWORK_UNREACHABLE,
90
+ category: 'network',
91
+ }));
92
+ await expect(runSetupState()).rejects.toThrow('__exit:3');
93
+ });
94
+ it('emits JSON to stdout regardless of tty (non-tty path)', async () => {
95
+ Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true });
96
+ mockedKernelCall.mockResolvedValueOnce(SAMPLE);
97
+ await runSetupState();
98
+ const written = stdoutSpy.mock.calls.map((c) => String(c[0])).join('');
99
+ expect(written.trim().startsWith('{')).toBe(true);
100
+ });
101
+ });
102
+ describe('pb start ≠ pb setup (DEC-995 invariant)', () => {
103
+ it('runSessionStart is the binding for `pb start`, not runSetup', async () => {
104
+ const fs = await import('fs');
105
+ const indexSrc = fs.readFileSync(join(__dirname, '..', '..', 'index.ts'), 'utf8');
106
+ // pb start dispatches to runSessionStart
107
+ expect(indexSrc).toContain("args[0] === 'start'");
108
+ const startSection = indexSrc.split("args[0] === 'start'")[1] ?? '';
109
+ const closeSection = startSection.split("args[0] === 'close'")[0] ?? '';
110
+ expect(closeSection).toContain('runSessionStart');
111
+ expect(closeSection).not.toContain('runSetup(');
112
+ });
113
+ });
114
+ describe('runSetup() (pb setup alias)', () => {
115
+ beforeEach(() => {
116
+ // Default to TTY=true so the human summary is exercised
117
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
118
+ });
119
+ it('Phase 1 → triggers detect-surfaces, re-reads state, prints final state', async () => {
120
+ // WP-433 S2: .claude dir triggers Claude surface detection → stampDetectedSurfaces
121
+ // is called as a 3rd kernelCall (between recordSetupInvocation and the re-read).
122
+ mkdirSync(join(scratch, '.claude'));
123
+ mockedKernelCall
124
+ .mockResolvedValueOnce({ ...SAMPLE, phase: 1 }) // initial getPbSetupState
125
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: false }) // recordSetupInvocation
126
+ .mockResolvedValueOnce({ stamped: true, surfaces: ['claude'] }) // stampDetectedSurfaces (WP-433 S2)
127
+ .mockResolvedValueOnce({ ...SAMPLE, phase: 2 }); // re-read after detect
128
+ await runSetup({ cwd: scratch });
129
+ const stdout = stdoutSpy.mock.calls.map((c) => String(c[0])).join('');
130
+ expect(stdout).toContain('"phase":2');
131
+ });
132
+ it('Phase 2+ → no auto-detect, prints initial state', async () => {
133
+ const phase2 = { ...SAMPLE, phase: 2 };
134
+ mockedKernelCall
135
+ .mockResolvedValueOnce(phase2)
136
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: true });
137
+ await runSetup({ cwd: scratch });
138
+ const calls = mockedKernelCall.mock.calls.map((c) => c[0]);
139
+ expect(calls.filter((c) => c === 'setup.getPbSetupState')).toHaveLength(1);
140
+ });
141
+ it('records invocation exactly once per pb-setup invocation', async () => {
142
+ const phase2 = { ...SAMPLE, phase: 2 };
143
+ mockedKernelCall
144
+ .mockResolvedValueOnce(phase2)
145
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: false });
146
+ await runSetup({ cwd: scratch });
147
+ const invocationCalls = mockedKernelCall.mock.calls.filter((c) => c[0] === 'setup.recordSetupInvocation');
148
+ expect(invocationCalls).toHaveLength(1);
149
+ expect(invocationCalls[0][1]).toMatchObject({ surfaceCapability: 'cli' });
150
+ });
151
+ it('records invocation with chat-only when state.surfaceCapability=chat-only (WP-431 S3 review fix #1)', async () => {
152
+ // Pre-revision: this test fabricated a `reasonForPhase` string the producer
153
+ // never emits and asserted that the (now-deleted) `inferSurfaceCapability`
154
+ // string-greppy heuristic returned 'chat-only'. The heuristic was broken
155
+ // (producer never emits 'chat-only' in reasonForPhase), so every chat-only
156
+ // user was silently tagged 'cli'. Post-revision, the resolver surfaces
157
+ // `surfaceCapability` as a structural field — the CLI reads it directly.
158
+ const chatOnly = {
159
+ ...SAMPLE,
160
+ phase: 3,
161
+ role: 'creator',
162
+ reasonForPhase: 'Phase 2 done (surface-skipped per DEC-993); catalogAdoptionCount=0 → Phase 3.',
163
+ surfaceCapability: 'chat-only',
164
+ };
165
+ mockedKernelCall
166
+ .mockResolvedValueOnce(chatOnly)
167
+ .mockResolvedValueOnce({ firstSetupInvocationAt: 1, alreadyRecorded: false });
168
+ await runSetup({ cwd: scratch });
169
+ const invocationCalls = mockedKernelCall.mock.calls.filter((c) => c[0] === 'setup.recordSetupInvocation');
170
+ expect(invocationCalls[0][1]).toMatchObject({ surfaceCapability: 'chat-only' });
171
+ });
172
+ it('chat-only resolver path: empty manifest + chat-only state → state.surfaceCapability="chat-only" (live resolver)', async () => {
173
+ // WP-431 S3 review fix #1: assert the actual resolver emits surfaceCapability
174
+ // structurally. This is a unit-level pin against the *resolver* (not the
175
+ // CLI handler), so we exercise resolveSetupState directly with a
176
+ // chat-only input shape that DOES occur in production
177
+ // (manifest.surfaces=['mcp-only'] is the upstream stamp for chat-only
178
+ // surfaces per DEC-993).
179
+ const { resolveSetupState } = await import('../../setup/state-machine.js');
180
+ const out = resolveSetupState({
181
+ manifest: { surfaces: ['mcp-only'] },
182
+ assetCounts: { totalAssets: 0, totalUnimported: 0, hasMore: false },
183
+ catalogAdoptionCount: 0,
184
+ confirmedEntryCount: 0,
185
+ entriesAcrossCollections: 0,
186
+ retrievalDemoConfirmed: false,
187
+ workspaceMaterialized: false,
188
+ userActivated: false,
189
+ surfaceCapability: 'chat-only',
190
+ });
191
+ expect(out.surfaceCapability).toBe('chat-only');
192
+ });
193
+ });
194
+ //# sourceMappingURL=setup-state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-state.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-state.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,10 @@
3
3
  *
4
4
  * Seed metadata is duplicated from `convex/admin/commandManifest.ts` for CLI help
5
5
  * and ordering only — behavior is enforced server-side (STD-101).
6
+ *
7
+ * WP-433 S1b D13: the 4 substrate-repair migrations + backfill-default-team are
8
+ * generated from `convex/admin/seed/registry.ts` (single SSOT) into
9
+ * `seedRegistryEntries.generated.ts`. Run `npm run codegen` to refresh after registry edits.
6
10
  */
7
11
  import { Command } from 'commander';
8
12
  export type SeedCommandMeta = {
@@ -18,9 +22,35 @@ export type SeedCommandMeta = {
18
22
  * Order matches `ADMIN_COMMANDS` seed block in commandManifest.ts — dependency order for `seed all`.
19
23
  */
20
24
  export declare const SEED_COMMAND_ENTRIES: readonly SeedCommandMeta[];
21
- /** Manifest order for `pb admin seed all`. */
25
+ /**
26
+ * Manifest order for `pb admin seed all`.
27
+ *
28
+ * Includes the static legacy seeds plus the registry-generated runnable entries so
29
+ * `seed all` exercises the full surface (D13 SSOT).
30
+ */
22
31
  export declare const SEED_MANIFEST_ORDER: readonly string[];
23
- /** Accept `knowledge` or `seed:knowledge`. */
32
+ /**
33
+ * Accept short-form or long-form seed op names; return the canonical backend command name.
34
+ *
35
+ * Static entries (legacy) are stored as `seed:<slug>` (e.g. `seed:knowledge`).
36
+ * Registry-generated entries (WP-433 S1b) are stored as bare slugs (e.g.
37
+ * `seed-system-glossary`) to avoid the double-prefix `seed:seed-*` trap that
38
+ * arose when slugs like `seed-system-glossary` were naively stored as
39
+ * `seed:seed-system-glossary`.
40
+ *
41
+ * Both forms always return the backend command name (`seed:<bare-slug>`):
42
+ * - `'system-glossary'` or `'seed-system-glossary'` → `'seed:seed-system-glossary'`
43
+ * would be wrong; instead the bare slug stored in the map IS `seed-system-glossary`
44
+ * and the backend command is `seed:seed-system-glossary`.
45
+ *
46
+ * Resolution order:
47
+ * 1. Try `seed:<t>` — covers legacy static entries (`seed:knowledge`) and any input
48
+ * that normalises to a key already stored with the `seed:` prefix.
49
+ * 2. Try bare `<t>` (stripping a leading `seed:` from the input if present) —
50
+ * covers registry entries stored without the prefix.
51
+ * When found via bare slug, return `seed:<bare>` so the caller always gets a
52
+ * backend-compatible command name.
53
+ */
24
54
  export declare function normalizeSeedCommandName(input: string): string;
25
55
  /**
26
56
  * Build args for seed:backfill-starter with CLI-side validation.
@@ -1 +1 @@
1
- {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/seed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,MAAM,MAAM,eAAe,GAAG;IAC5B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,eAAe,EA+GjD,CAAC;AAIX,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAM9F,8CAA8C;AAC9C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB9D;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuB1B;AAkBD,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmCzB;AA2FD,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAshBtD"}
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,MAAM,MAAM,eAAe,GAAG;IAC5B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,eAAe,EAkHjD,CAAC;AAwBX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAEhD,CAAC;AAkBF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B9D;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuB1B;AAkBD,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCzB;AAuRD,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAikBtD"}