@productbrain/cli 0.1.0-beta.94 → 0.1.0-beta.945

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 (421) 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.js +29 -3
  17. package/dist/__tests__/envelope-contract.test.js.map +1 -1
  18. package/dist/__tests__/errors.test.js +1 -0
  19. package/dist/__tests__/errors.test.js.map +1 -1
  20. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  21. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  22. package/dist/__tests__/handshake-augment.test.js +423 -0
  23. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  24. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  25. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  26. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  27. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  28. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  29. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  30. package/dist/__tests__/handshake-formatter.test.js +67 -0
  31. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  32. package/dist/__tests__/handshake-preview.test.js +688 -3
  33. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  34. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  35. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  36. package/dist/__tests__/handshake.e2e.test.js +1252 -0
  37. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  38. package/dist/__tests__/handshake.test.js +611 -2
  39. package/dist/__tests__/handshake.test.js.map +1 -1
  40. package/dist/__tests__/manifest.test.js +118 -1
  41. package/dist/__tests__/manifest.test.js.map +1 -1
  42. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  43. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  44. package/dist/__tests__/orient.test.js +135 -8
  45. package/dist/__tests__/orient.test.js.map +1 -1
  46. package/dist/__tests__/perimeter.test.d.ts +2 -0
  47. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  48. package/dist/__tests__/perimeter.test.js +165 -0
  49. package/dist/__tests__/perimeter.test.js.map +1 -0
  50. package/dist/__tests__/personal-layer.test.d.ts +1 -2
  51. package/dist/__tests__/personal-layer.test.d.ts.map +1 -1
  52. package/dist/__tests__/personal-layer.test.js +12 -48
  53. package/dist/__tests__/personal-layer.test.js.map +1 -1
  54. package/dist/__tests__/profiles.test.js +153 -5
  55. package/dist/__tests__/profiles.test.js.map +1 -1
  56. package/dist/__tests__/promote.test.js +71 -2
  57. package/dist/__tests__/promote.test.js.map +1 -1
  58. package/dist/__tests__/session-state-machine.test.js +45 -1
  59. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  60. package/dist/__tests__/session-switch.test.d.ts +2 -0
  61. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  62. package/dist/__tests__/session-switch.test.js +129 -0
  63. package/dist/__tests__/session-switch.test.js.map +1 -0
  64. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  65. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  66. package/dist/__tests__/setup-ingest.test.js +71 -0
  67. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  68. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  69. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  70. package/dist/__tests__/skill-vocabulary.test.js +187 -0
  71. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  72. package/dist/__tests__/update-check.test.d.ts +2 -0
  73. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  74. package/dist/__tests__/update-check.test.js +56 -0
  75. package/dist/__tests__/update-check.test.js.map +1 -0
  76. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  77. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  78. package/dist/__tests__/upgrade-runner.test.js +42 -0
  79. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  80. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  81. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  82. package/dist/__tests__/vocabulary-leak.test.js +534 -0
  83. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  84. package/dist/__tests__/workspace.test.js +32 -12
  85. package/dist/__tests__/workspace.test.js.map +1 -1
  86. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  87. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  88. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  89. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  90. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  91. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  92. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  93. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  94. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  95. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  96. package/dist/commands/__tests__/setup-state.test.js +194 -0
  97. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  98. package/dist/commands/admin/seed.d.ts +46 -2
  99. package/dist/commands/admin/seed.d.ts.map +1 -1
  100. package/dist/commands/admin/seed.js +475 -33
  101. package/dist/commands/admin/seed.js.map +1 -1
  102. package/dist/commands/admin/seed.test.d.ts +5 -0
  103. package/dist/commands/admin/seed.test.d.ts.map +1 -1
  104. package/dist/commands/admin/seed.test.js +67 -2
  105. package/dist/commands/admin/seed.test.js.map +1 -1
  106. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  107. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  108. package/dist/commands/admin/seedRegistryEntries.generated.js +117 -0
  109. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  110. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  111. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  112. package/dist/commands/admin/seedRegistryEntries.test.js +67 -0
  113. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  114. package/dist/commands/audit.d.ts.map +1 -1
  115. package/dist/commands/audit.js +30 -3
  116. package/dist/commands/audit.js.map +1 -1
  117. package/dist/commands/authority-domains.d.ts +146 -0
  118. package/dist/commands/authority-domains.d.ts.map +1 -0
  119. package/dist/commands/authority-domains.js +282 -0
  120. package/dist/commands/authority-domains.js.map +1 -0
  121. package/dist/commands/capture.d.ts.map +1 -1
  122. package/dist/commands/capture.js +3 -2
  123. package/dist/commands/capture.js.map +1 -1
  124. package/dist/commands/codex-prep.d.ts +1 -0
  125. package/dist/commands/codex-prep.d.ts.map +1 -1
  126. package/dist/commands/codex-prep.js +10 -7
  127. package/dist/commands/codex-prep.js.map +1 -1
  128. package/dist/commands/connect-config.test.d.ts +2 -0
  129. package/dist/commands/connect-config.test.d.ts.map +1 -0
  130. package/dist/commands/connect-config.test.js +44 -0
  131. package/dist/commands/connect-config.test.js.map +1 -0
  132. package/dist/commands/connect-context.d.ts +45 -0
  133. package/dist/commands/connect-context.d.ts.map +1 -0
  134. package/dist/commands/connect-context.js +64 -0
  135. package/dist/commands/connect-context.js.map +1 -0
  136. package/dist/commands/connect-context.test.d.ts +2 -0
  137. package/dist/commands/connect-context.test.d.ts.map +1 -0
  138. package/dist/commands/connect-context.test.js +110 -0
  139. package/dist/commands/connect-context.test.js.map +1 -0
  140. package/dist/commands/connect-handoff.d.ts +51 -0
  141. package/dist/commands/connect-handoff.d.ts.map +1 -0
  142. package/dist/commands/connect-handoff.js +70 -0
  143. package/dist/commands/connect-handoff.js.map +1 -0
  144. package/dist/commands/connect-integration.test.js +29 -12
  145. package/dist/commands/connect-integration.test.js.map +1 -1
  146. package/dist/commands/connect-screens.d.ts +6 -4
  147. package/dist/commands/connect-screens.d.ts.map +1 -1
  148. package/dist/commands/connect-screens.js +30 -19
  149. package/dist/commands/connect-screens.js.map +1 -1
  150. package/dist/commands/connect.d.ts +21 -6
  151. package/dist/commands/connect.d.ts.map +1 -1
  152. package/dist/commands/connect.js +78 -51
  153. package/dist/commands/connect.js.map +1 -1
  154. package/dist/commands/connect.test.js +64 -1
  155. package/dist/commands/connect.test.js.map +1 -1
  156. package/dist/commands/doctor.d.ts.map +1 -1
  157. package/dist/commands/doctor.js +68 -3
  158. package/dist/commands/doctor.js.map +1 -1
  159. package/dist/commands/doctor.test.js +131 -0
  160. package/dist/commands/doctor.test.js.map +1 -1
  161. package/dist/commands/handshake.d.ts +194 -2
  162. package/dist/commands/handshake.d.ts.map +1 -1
  163. package/dist/commands/handshake.js +1724 -45
  164. package/dist/commands/handshake.js.map +1 -1
  165. package/dist/commands/method.d.ts.map +1 -1
  166. package/dist/commands/method.js +3 -0
  167. package/dist/commands/method.js.map +1 -1
  168. package/dist/commands/migrate-setup.d.ts +18 -0
  169. package/dist/commands/migrate-setup.d.ts.map +1 -0
  170. package/dist/commands/migrate-setup.js +198 -0
  171. package/dist/commands/migrate-setup.js.map +1 -0
  172. package/dist/commands/orient.d.ts +15 -2
  173. package/dist/commands/orient.d.ts.map +1 -1
  174. package/dist/commands/orient.js +86 -4
  175. package/dist/commands/orient.js.map +1 -1
  176. package/dist/commands/profile.d.ts +11 -1
  177. package/dist/commands/profile.d.ts.map +1 -1
  178. package/dist/commands/profile.js +109 -26
  179. package/dist/commands/profile.js.map +1 -1
  180. package/dist/commands/promote.d.ts.map +1 -1
  181. package/dist/commands/promote.js +25 -2
  182. package/dist/commands/promote.js.map +1 -1
  183. package/dist/commands/relate.d.ts.map +1 -1
  184. package/dist/commands/relate.js +13 -0
  185. package/dist/commands/relate.js.map +1 -1
  186. package/dist/commands/session.d.ts.map +1 -1
  187. package/dist/commands/session.js +55 -18
  188. package/dist/commands/session.js.map +1 -1
  189. package/dist/commands/setup-audit.d.ts +59 -0
  190. package/dist/commands/setup-audit.d.ts.map +1 -0
  191. package/dist/commands/setup-audit.js +250 -0
  192. package/dist/commands/setup-audit.js.map +1 -0
  193. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  194. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  195. package/dist/commands/setup-detect-surfaces.js +76 -0
  196. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  197. package/dist/commands/setup-ingest.d.ts +17 -0
  198. package/dist/commands/setup-ingest.d.ts.map +1 -0
  199. package/dist/commands/setup-ingest.js +226 -0
  200. package/dist/commands/setup-ingest.js.map +1 -0
  201. package/dist/commands/setup-state.d.ts +42 -0
  202. package/dist/commands/setup-state.d.ts.map +1 -0
  203. package/dist/commands/setup-state.js +93 -0
  204. package/dist/commands/setup-state.js.map +1 -0
  205. package/dist/commands/setup.d.ts +17 -9
  206. package/dist/commands/setup.d.ts.map +1 -1
  207. package/dist/commands/setup.js +52 -131
  208. package/dist/commands/setup.js.map +1 -1
  209. package/dist/commands/upgrade.d.ts +5 -0
  210. package/dist/commands/upgrade.d.ts.map +1 -0
  211. package/dist/commands/upgrade.js +89 -0
  212. package/dist/commands/upgrade.js.map +1 -0
  213. package/dist/commands/whoami.d.ts +12 -0
  214. package/dist/commands/whoami.d.ts.map +1 -0
  215. package/dist/commands/whoami.js +70 -0
  216. package/dist/commands/whoami.js.map +1 -0
  217. package/dist/commands/whoami.test.d.ts +2 -0
  218. package/dist/commands/whoami.test.d.ts.map +1 -0
  219. package/dist/commands/whoami.test.js +50 -0
  220. package/dist/commands/whoami.test.js.map +1 -0
  221. package/dist/commands/workspace.d.ts +74 -2
  222. package/dist/commands/workspace.d.ts.map +1 -1
  223. package/dist/commands/workspace.js +26 -2
  224. package/dist/commands/workspace.js.map +1 -1
  225. package/dist/formatters/audit.d.ts +6 -0
  226. package/dist/formatters/audit.d.ts.map +1 -1
  227. package/dist/formatters/audit.js.map +1 -1
  228. package/dist/formatters/handshake.d.ts +19 -3
  229. package/dist/formatters/handshake.d.ts.map +1 -1
  230. package/dist/formatters/handshake.js +48 -13
  231. package/dist/formatters/handshake.js.map +1 -1
  232. package/dist/formatters/orient.d.ts +50 -4
  233. package/dist/formatters/orient.d.ts.map +1 -1
  234. package/dist/formatters/orient.js +64 -16
  235. package/dist/formatters/orient.js.map +1 -1
  236. package/dist/formatters/session.js +1 -1
  237. package/dist/formatters/session.js.map +1 -1
  238. package/dist/generators/adapters.js +2 -2
  239. package/dist/generators/boundary-manifest.d.ts +29 -0
  240. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  241. package/dist/generators/boundary-manifest.js +183 -0
  242. package/dist/generators/boundary-manifest.js.map +1 -0
  243. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  244. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  245. package/dist/generators/boundary-manifest.test.js +91 -0
  246. package/dist/generators/boundary-manifest.test.js.map +1 -0
  247. package/dist/generators/context-md.js +6 -6
  248. package/dist/generators/context-md.js.map +1 -1
  249. package/dist/generators/manifest.d.ts +78 -0
  250. package/dist/generators/manifest.d.ts.map +1 -1
  251. package/dist/generators/manifest.js +125 -14
  252. package/dist/generators/manifest.js.map +1 -1
  253. package/dist/generators/portable-knowledge.d.ts +6 -12
  254. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  255. package/dist/generators/portable-knowledge.js +2 -19
  256. package/dist/generators/portable-knowledge.js.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 +242 -26
  277. package/dist/index.js.map +1 -1
  278. package/dist/lib/activation.d.ts.map +1 -1
  279. package/dist/lib/activation.js +3 -3
  280. package/dist/lib/activation.js.map +1 -1
  281. package/dist/lib/activation.test.js +3 -3
  282. package/dist/lib/activation.test.js.map +1 -1
  283. package/dist/lib/canonicalRefs.d.ts +141 -0
  284. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  285. package/dist/lib/canonicalRefs.js +150 -0
  286. package/dist/lib/canonicalRefs.js.map +1 -0
  287. package/dist/lib/client.d.ts.map +1 -1
  288. package/dist/lib/client.js +14 -4
  289. package/dist/lib/client.js.map +1 -1
  290. package/dist/lib/config.d.ts +98 -9
  291. package/dist/lib/config.d.ts.map +1 -1
  292. package/dist/lib/config.js +231 -44
  293. package/dist/lib/config.js.map +1 -1
  294. package/dist/lib/connectKeyLabel.d.ts +9 -0
  295. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  296. package/dist/lib/connectKeyLabel.js +12 -0
  297. package/dist/lib/connectKeyLabel.js.map +1 -0
  298. package/dist/lib/constants.d.ts +2 -0
  299. package/dist/lib/constants.d.ts.map +1 -1
  300. package/dist/lib/constants.js +2 -0
  301. package/dist/lib/constants.js.map +1 -1
  302. package/dist/lib/errors.d.ts +3 -0
  303. package/dist/lib/errors.d.ts.map +1 -1
  304. package/dist/lib/errors.js +3 -0
  305. package/dist/lib/errors.js.map +1 -1
  306. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  307. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  308. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  309. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  310. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  311. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  312. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  313. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  314. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  315. package/dist/lib/onboarding-path-b.js +0 -1
  316. package/dist/lib/onboarding-path-b.js.map +1 -1
  317. package/dist/lib/onboarding-shared.d.ts +0 -1
  318. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  319. package/dist/lib/onboarding-shared.js +1 -17
  320. package/dist/lib/onboarding-shared.js.map +1 -1
  321. package/dist/lib/profiles.d.ts +3 -1
  322. package/dist/lib/profiles.d.ts.map +1 -1
  323. package/dist/lib/profiles.js +9 -6
  324. package/dist/lib/profiles.js.map +1 -1
  325. package/dist/lib/session.d.ts +10 -0
  326. package/dist/lib/session.d.ts.map +1 -1
  327. package/dist/lib/session.js +14 -0
  328. package/dist/lib/session.js.map +1 -1
  329. package/dist/lib/update-check.d.ts +20 -0
  330. package/dist/lib/update-check.d.ts.map +1 -1
  331. package/dist/lib/update-check.js +122 -21
  332. package/dist/lib/update-check.js.map +1 -1
  333. package/dist/lib/upgrade-runner.d.ts +21 -0
  334. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  335. package/dist/lib/upgrade-runner.js +109 -0
  336. package/dist/lib/upgrade-runner.js.map +1 -0
  337. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  338. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  339. package/dist/lib/workspaceVocabCache.js +98 -0
  340. package/dist/lib/workspaceVocabCache.js.map +1 -0
  341. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  342. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  343. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  344. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  345. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  346. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  347. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  348. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  349. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  350. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  351. package/dist/setup/__tests__/state-machine.test.js +341 -0
  352. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  353. package/dist/setup/detect-surfaces.d.ts +21 -0
  354. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  355. package/dist/setup/detect-surfaces.js +39 -0
  356. package/dist/setup/detect-surfaces.js.map +1 -0
  357. package/dist/setup/manifest-writer.d.ts +17 -0
  358. package/dist/setup/manifest-writer.d.ts.map +1 -0
  359. package/dist/setup/manifest-writer.js +153 -0
  360. package/dist/setup/manifest-writer.js.map +1 -0
  361. package/dist/setup/perimeter.d.ts +72 -0
  362. package/dist/setup/perimeter.d.ts.map +1 -0
  363. package/dist/setup/perimeter.js +128 -0
  364. package/dist/setup/perimeter.js.map +1 -0
  365. package/dist/setup/state-machine.d.ts +67 -0
  366. package/dist/setup/state-machine.d.ts.map +1 -0
  367. package/dist/setup/state-machine.js +124 -0
  368. package/dist/setup/state-machine.js.map +1 -0
  369. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  370. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  371. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  372. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  373. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  374. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  375. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  376. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  377. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  378. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  379. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  380. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  381. package/dist/surfaces/adapter.d.ts +70 -0
  382. package/dist/surfaces/adapter.d.ts.map +1 -0
  383. package/dist/surfaces/adapter.js +2 -0
  384. package/dist/surfaces/adapter.js.map +1 -0
  385. package/dist/surfaces/adapters/claude.d.ts +3 -0
  386. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  387. package/dist/surfaces/adapters/claude.js +67 -0
  388. package/dist/surfaces/adapters/claude.js.map +1 -0
  389. package/dist/surfaces/adapters/codex.d.ts +3 -0
  390. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  391. package/dist/surfaces/adapters/codex.js +61 -0
  392. package/dist/surfaces/adapters/codex.js.map +1 -0
  393. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  394. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  395. package/dist/surfaces/adapters/copilot.js +59 -0
  396. package/dist/surfaces/adapters/copilot.js.map +1 -0
  397. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  398. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  399. package/dist/surfaces/adapters/cursor.js +78 -0
  400. package/dist/surfaces/adapters/cursor.js.map +1 -0
  401. package/dist/surfaces/registry.d.ts +58 -2
  402. package/dist/surfaces/registry.d.ts.map +1 -1
  403. package/dist/surfaces/registry.js +82 -7
  404. package/dist/surfaces/registry.js.map +1 -1
  405. package/dist/surfaces/telemetry.d.ts +17 -0
  406. package/dist/surfaces/telemetry.d.ts.map +1 -0
  407. package/dist/surfaces/telemetry.js +31 -0
  408. package/dist/surfaces/telemetry.js.map +1 -0
  409. package/package.json +3 -1
  410. package/dist/__tests__/setup.test.d.ts +0 -2
  411. package/dist/__tests__/setup.test.d.ts.map +0 -1
  412. package/dist/__tests__/setup.test.js +0 -141
  413. package/dist/__tests__/setup.test.js.map +0 -1
  414. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  415. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  416. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  417. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  418. package/dist/lib/onboarding-phases.d.ts +0 -9
  419. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  420. package/dist/lib/onboarding-phases.js +0 -120
  421. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -0,0 +1,207 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { relative, sep } from 'path';
3
+ import { __test } from '../commands/handshake.js';
4
+ describe('WP-426 E3 setupAuthoringPath precedence', () => {
5
+ test('authoringPath (relative to .productbrain) wins', () => {
6
+ expect(__test.setupAuthoringPath('/repo', { entryId: 'SETUP-FOO', name: 'Foo Bar', assetKind: 'skill', authoringPath: 'skills/my-foo.md' }))
7
+ .toBe('/repo/.productbrain/skills/my-foo.md');
8
+ });
9
+ test('null authoringPath falls back to name-derivation (unchanged)', () => {
10
+ expect(__test.setupAuthoringPath('/repo', { entryId: 'SETUP-FOO', name: 'Foo Bar', assetKind: 'skill', authoringPath: null }))
11
+ .toBe('/repo/.productbrain/skills/Foo Bar.md');
12
+ });
13
+ });
14
+ test('WP-426 E3 relative authoringPath is POSIX under .productbrain/, never absolute', () => {
15
+ expect(relative('/repo/.productbrain', '/repo/.productbrain/skills/foo.md').split(sep).join('/')).toBe('skills/foo.md');
16
+ });
17
+ import { mkdtempSync, writeFileSync, existsSync, readFileSync } from 'fs';
18
+ import { tmpdir } from 'os';
19
+ import { join } from 'path';
20
+ const MARKER = __test.MARKER;
21
+ function tmpFile(content, name = 'Foo.md') {
22
+ const p = join(mkdtempSync(join(tmpdir(), 'wp426-')), name);
23
+ writeFileSync(p, content);
24
+ return p;
25
+ }
26
+ describe('WP-426 E4 renameSurfaceForDormancy', () => {
27
+ test('renames a marked .md projection to .md.dormant', () => {
28
+ const p = tmpFile(`# x\n${MARKER}\n`);
29
+ expect(__test.renameSurfaceForDormancy(p)).toBe('renamed');
30
+ expect(existsSync(p)).toBe(false);
31
+ expect(existsSync(`${p}.dormant`)).toBe(true);
32
+ });
33
+ test('renames a marked .mdc projection', () => {
34
+ const p = tmpFile(`# x\n${MARKER}\n`, 'Foo.mdc');
35
+ expect(__test.renameSurfaceForDormancy(p)).toBe('renamed');
36
+ expect(existsSync(`${p}.dormant`)).toBe(true);
37
+ });
38
+ test('skips a file without the auto-gen MARKER (never touch user files)', () => {
39
+ const p = tmpFile('# hand-authored\n');
40
+ expect(__test.renameSurfaceForDormancy(p)).toBe('skipped');
41
+ expect(existsSync(p)).toBe(true);
42
+ });
43
+ test('idempotent: already-dormant when source gone + .dormant present', () => {
44
+ const p = tmpFile(`# x\n${MARKER}\n`);
45
+ __test.renameSurfaceForDormancy(p);
46
+ expect(__test.renameSurfaceForDormancy(p)).toBe('already-dormant');
47
+ });
48
+ test('legacy marker-only file still renames (not gated on marker write)', () => {
49
+ const p = tmpFile(`# x\n${MARKER}\n<!-- pb-status: dormant -->\n`);
50
+ expect(__test.renameSurfaceForDormancy(p)).toBe('renamed');
51
+ });
52
+ // Codex P1: when both the live file and a .dormant exist, an edited (divergent) .dormant
53
+ // must NOT be force-deleted — preserve it and report 'drift' instead of overwriting.
54
+ test('preserves an edited .dormant (divergent body) and reports drift instead of overwriting', () => {
55
+ const p = tmpFile(`# live\n${MARKER}\n`);
56
+ writeFileSync(`${p}.dormant`, `# USER EDITED DORMANT\n${MARKER}\n<!-- pb-status: dormant -->\n`);
57
+ expect(__test.renameSurfaceForDormancy(p)).toBe('drift');
58
+ expect(existsSync(p), 'live file preserved').toBe(true);
59
+ expect(existsSync(`${p}.dormant`), 'edited .dormant preserved').toBe(true);
60
+ expect(readFileSync(`${p}.dormant`, 'utf8')).toContain('USER EDITED DORMANT');
61
+ });
62
+ test('replaces a matching .dormant (same body) — safe, no data loss', () => {
63
+ const p = tmpFile(`# same\n${MARKER}\n`);
64
+ writeFileSync(`${p}.dormant`, `# same\n${MARKER}\n<!-- pb-status: dormant -->\n`);
65
+ expect(__test.renameSurfaceForDormancy(p)).toBe('replaced');
66
+ expect(existsSync(p), 'live file renamed away').toBe(false);
67
+ expect(existsSync(`${p}.dormant`)).toBe(true);
68
+ });
69
+ });
70
+ // WP-426 doneWhen #10: perimeter is containment-based (perimeter.ts:128-130),
71
+ // not extension-gated — lock that .dormant targets pass under a surface dir.
72
+ describe('WP-426 E4 perimeter accepts .dormant', () => {
73
+ test('.md.dormant / .mdc.dormant under a surface dir do not throw', async () => {
74
+ const { assertSetupWritePath } = await import('../setup/perimeter.js');
75
+ const manifest = { surfaces: ['.codex', '.cursor', '.claude'] };
76
+ expect(() => assertSetupWritePath('/repo/.cursor/rules/Foo.mdc.dormant', manifest, { cwd: '/repo' })).not.toThrow();
77
+ expect(() => assertSetupWritePath('/repo/.codex/skills/Foo.md.dormant', manifest, { cwd: '/repo' })).not.toThrow();
78
+ });
79
+ });
80
+ // WP-426 doneWhen #10 + Codex P1 (traversal rejection): a malicious authoringPath like
81
+ // '../../etc/passwd' (or an absolute path) is probed via existsSync/readFileSync in the
82
+ // writeback loop BEFORE any assertSetupWritePath write guard runs. The write-time guard is
83
+ // therefore insufficient — setupAuthoringPath itself must reject traversal/absolute values
84
+ // and fall back to the safe name-derived path under .productbrain/, never returning a path
85
+ // that escapes the tree.
86
+ describe('WP-426 E3 traversal rejection in setupAuthoringPath', () => {
87
+ test("`..` traversal authoringPath falls back to the safe name-derived path", () => {
88
+ const resolved = __test.setupAuthoringPath('/repo', {
89
+ entryId: 'X',
90
+ name: 'X',
91
+ assetKind: 'skill',
92
+ authoringPath: '../../etc/passwd',
93
+ });
94
+ expect(resolved).toBe('/repo/.productbrain/skills/X.md');
95
+ });
96
+ test('absolute authoringPath falls back to the safe name-derived path', () => {
97
+ const resolved = __test.setupAuthoringPath('/repo', {
98
+ entryId: 'X',
99
+ name: 'X',
100
+ assetKind: 'skill',
101
+ authoringPath: '/etc/passwd',
102
+ });
103
+ expect(resolved).toBe('/repo/.productbrain/skills/X.md');
104
+ });
105
+ test('a contained nested authoringPath is still honored', () => {
106
+ const resolved = __test.setupAuthoringPath('/repo', {
107
+ entryId: 'X',
108
+ name: 'X',
109
+ assetKind: 'skill',
110
+ authoringPath: 'skills/nested/x.md',
111
+ });
112
+ expect(resolved).toBe('/repo/.productbrain/skills/nested/x.md');
113
+ });
114
+ // Codex P2: containment is not enough — only kind-appropriate <dir>/**/*.md is honored.
115
+ test.each([
116
+ ['bare directory', 'skills'],
117
+ ['internal sync file', '.authoring-sync.json'],
118
+ ['internal manifest', 'manifest.yaml'],
119
+ ['non-markdown under kind dir', 'skills/foo.txt'],
120
+ ['wrong-kind dir for a skill', 'rules/foo.md'],
121
+ ])('%s falls back to the safe name-derived path', (_label, authoringPath) => {
122
+ const resolved = __test.setupAuthoringPath('/repo', {
123
+ entryId: 'X',
124
+ name: 'X',
125
+ assetKind: 'skill',
126
+ authoringPath,
127
+ });
128
+ expect(resolved).toBe('/repo/.productbrain/skills/X.md');
129
+ });
130
+ });
131
+ import { DORMANT_MARKER } from '../commands/handshake.js';
132
+ // Codex P2: dormant registries are read via .includes() before the dormant loop's
133
+ // per-file try/catch, so loadAuthoringSyncState must coerce malformed values to a
134
+ // string[] (fail open) rather than letting a bad .authoring-sync.json abort handshake.
135
+ describe('WP-426 E4 loadAuthoringSyncState registry coercion', () => {
136
+ function stateDir(json) {
137
+ const dir = mkdtempSync(join(tmpdir(), 'wp426-state-'));
138
+ writeFileSync(join(dir, '.authoring-sync.json'), json);
139
+ return dir;
140
+ }
141
+ test('coerces non-array dormantRenamed/dormantReactivated to []', () => {
142
+ const dir = stateDir(JSON.stringify({ version: 1, assets: {}, dormantRenamed: { bad: true }, dormantReactivated: 'oops' }));
143
+ const state = __test.loadAuthoringSyncState(dir);
144
+ expect(state.dormantRenamed).toEqual([]);
145
+ expect(state.dormantReactivated).toEqual([]);
146
+ // The coerced arrays must be safe to call .includes() on (the real failure mode).
147
+ expect(state.dormantRenamed?.includes('x')).toBe(false);
148
+ expect(state.dormantReactivated?.includes('x')).toBe(false);
149
+ });
150
+ test('keeps only string entries from a mixed array', () => {
151
+ const dir = stateDir(JSON.stringify({ version: 1, assets: {}, dormantRenamed: ['a/b.md', 42, null, 'c/d.md'] }));
152
+ expect(__test.loadAuthoringSyncState(dir).dormantRenamed).toEqual(['a/b.md', 'c/d.md']);
153
+ });
154
+ test('preserves a well-formed registry', () => {
155
+ const dir = stateDir(JSON.stringify({ version: 1, assets: {}, dormantRenamed: ['x.md'], dormantReactivated: ['y.md'] }));
156
+ const state = __test.loadAuthoringSyncState(dir);
157
+ expect(state.dormantRenamed).toEqual(['x.md']);
158
+ expect(state.dormantReactivated).toEqual(['y.md']);
159
+ });
160
+ });
161
+ describe('WP-426 E4 restoreSurfaceFromDormant', () => {
162
+ test('removes orphan .dormant when body matches the fresh projection', () => {
163
+ const fresh = tmpFile(`# x\n${MARKER}\n`);
164
+ writeFileSync(`${fresh}.dormant`, `# x\n${MARKER}\n${DORMANT_MARKER}\n`);
165
+ expect(__test.restoreSurfaceFromDormant(fresh)).toBe('restored');
166
+ expect(existsSync(`${fresh}.dormant`)).toBe(false);
167
+ });
168
+ test('removes orphan even when only the auto-gen TIMESTAMP differs', () => {
169
+ const fresh = tmpFile(`<!-- auto-generated by pb handshake — 2026-05-23T10:00:00Z -->\n# x\n${MARKER}\n`);
170
+ writeFileSync(`${fresh}.dormant`, `<!-- auto-generated by pb handshake — 2026-01-01T00:00:00Z -->\n# x\n${MARKER}\n${DORMANT_MARKER}\n`);
171
+ expect(__test.restoreSurfaceFromDormant(fresh)).toBe('restored');
172
+ });
173
+ test('preserves + signals drift when edited while dormant', () => {
174
+ const fresh = tmpFile(`# fresh\n${MARKER}\n`);
175
+ writeFileSync(`${fresh}.dormant`, `# USER EDITED\n${MARKER}\n${DORMANT_MARKER}\n`);
176
+ expect(__test.restoreSurfaceFromDormant(fresh)).toBe('orphan-drift');
177
+ expect(existsSync(`${fresh}.dormant`)).toBe(true);
178
+ });
179
+ test('skips when no .dormant sibling', () => {
180
+ expect(__test.restoreSurfaceFromDormant(tmpFile(`# x\n${MARKER}\n`))).toBe('skipped');
181
+ });
182
+ // WP-426 E4 Domain Expert fix: .dormant present but live file absent (surface-filtered run)
183
+ // → must return 'skipped' and leave the .dormant in place. Absence of the live file is NOT
184
+ // evidence of a user edit; it means the write loop didn't run for this surface this cycle.
185
+ test('skips and preserves .dormant when .dormant exists but live file is absent (surface-filtered run)', () => {
186
+ const dir = mkdtempSync(join(tmpdir(), 'wp426-absent-'));
187
+ const livePath = join(dir, 'Foo.md');
188
+ const dormantPath = `${livePath}.dormant`;
189
+ // .dormant exists, but the live file was never written this run (surface-filtered)
190
+ writeFileSync(dormantPath, `# Foo\n${MARKER}\n${DORMANT_MARKER}\n`);
191
+ expect(existsSync(livePath)).toBe(false);
192
+ expect(__test.restoreSurfaceFromDormant(livePath)).toBe('skipped');
193
+ // .dormant must still be present — not removed
194
+ expect(existsSync(dormantPath)).toBe(true);
195
+ });
196
+ // Codex P2: a live file WITHOUT the auto-gen MARKER is a user-owned/forked file the write
197
+ // loop did not reproject this run — restoreSurfaceFromDormant must not reconcile against it
198
+ // (no wrongful delete, no false drift). Leave the .dormant untouched.
199
+ test('skips and preserves .dormant when the live file is forked (no auto-gen MARKER)', () => {
200
+ const fresh = tmpFile('# user-owned fork, no marker\n');
201
+ // .dormant body differs from the fork → would be flagged as orphan-drift if not gated.
202
+ writeFileSync(`${fresh}.dormant`, `# Foo\n${MARKER}\nDormant body.\n${DORMANT_MARKER}\n`);
203
+ expect(__test.restoreSurfaceFromDormant(fresh)).toBe('skipped');
204
+ expect(existsSync(`${fresh}.dormant`), 'forked live file must not trigger .dormant cleanup').toBe(true);
205
+ });
206
+ });
207
+ //# sourceMappingURL=handshake-dormancy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshake-dormancy.test.js","sourceRoot":"","sources":["../../src/__tests__/handshake-dormancy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handshake-formatter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshake-formatter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/handshake-formatter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * formatHandshakeReport — user-owned files are NOT drift (TEN-2150).
3
+ *
4
+ * A marker-less file at an adapter path is the user's own file. handshake leaves
5
+ * it untouched and lists it under "Skipped:" benignly. The report must NOT render
6
+ * it as a "forked adapter blocked sync" warning, must NOT claim a draft TEN was
7
+ * logged, and must NOT count it as user-owned drift.
8
+ *
9
+ * These tests feed the report the legacy drift shape (the data that USED to fire
10
+ * the warning) so they fail RED against the old formatter and stand as regression
11
+ * guards after the fix removes that code path.
12
+ */
13
+ import { describe, expect, it } from 'vitest';
14
+ import { formatHandshakeReport } from '../formatters/handshake.js';
15
+ function baseReport(overrides = {}) {
16
+ return {
17
+ filesWritten: ['AGENTS.md'],
18
+ filesSkipped: [
19
+ { path: 'CLAUDE.md', reason: 'user-owned — left untouched (pb won\'t overwrite your file)' },
20
+ ],
21
+ matchedEntries: [],
22
+ searchQueries: [],
23
+ repo: { name: 'test-repo', detectedStack: [], repoSlug: null },
24
+ ...overrides,
25
+ };
26
+ }
27
+ describe('formatHandshakeReport — user-owned files are not drift (TEN-2150)', () => {
28
+ it('never renders a "forked adapter blocked sync" warning for user-owned files', () => {
29
+ // `driftConflicts` is the pre-fix shape that triggered the warning. Post-fix
30
+ // there is no code path that can emit it.
31
+ const out = formatHandshakeReport(baseReport({ driftConflicts: ['CLAUDE.md'] }));
32
+ expect(out).not.toContain('forked adapter');
33
+ expect(out).not.toContain('blocked sync');
34
+ expect(out).not.toContain('logged as draft TEN');
35
+ // Case-insensitive: the old warning emitted capital-U "Use --force to overwrite".
36
+ expect(out.toLowerCase()).not.toContain('--force to overwrite');
37
+ });
38
+ it('omits the user-owned bucket from the drift report entirely (TEN-2150)', () => {
39
+ // Force the drift report to render (it only shows when a PB-managed bucket is
40
+ // non-zero) while also listing user-owned skips. The report must show only the
41
+ // two PB-managed buckets — no user-owned row, regardless of how many are skipped.
42
+ const out = formatHandshakeReport(baseReport({ managedCleanCount: 2, userOwnedSkipped: ['CLAUDE.md', 'AGENTS.md'] }));
43
+ expect(out).toContain('Drift report (2 buckets):');
44
+ expect(out).toContain('PB-managed-clean:');
45
+ expect(out).not.toMatch(/user-owned:/);
46
+ });
47
+ });
48
+ describe('formatHandshakeReport — preview statuses would-augment + needs-attention (TEN-2155)', () => {
49
+ it('renders would-augment and needs-attention statuses', () => {
50
+ const out = formatHandshakeReport({
51
+ filesWritten: [], filesSkipped: [], matchedEntries: [], searchQueries: [],
52
+ repo: { name: 'r', detectedStack: [] },
53
+ preview: true,
54
+ previewPlan: [
55
+ { path: 'CLAUDE.md', status: 'would-augment' },
56
+ { path: 'AGENTS.md', status: 'needs-attention' },
57
+ ],
58
+ });
59
+ expect(out).toContain('CLAUDE.md');
60
+ expect(out).toMatch(/would augment/i);
61
+ expect(out).toMatch(/malformed PB region/);
62
+ expect(out).toMatch(/1 would augment/);
63
+ expect(out).toContain('✚'); // would-augment symbol
64
+ expect(out).toMatch(/1 need attention/);
65
+ });
66
+ });
67
+ //# sourceMappingURL=handshake-formatter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshake-formatter.test.js","sourceRoot":"","sources":["../../src/__tests__/handshake-formatter.test.ts"],"names":[],"mappings":"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"}