@productbrain/cli 0.1.0-beta.1 → 0.1.0-beta.102

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 (747) hide show
  1. package/README.md +127 -0
  2. package/dist/__tests__/adapters.test.d.ts +2 -0
  3. package/dist/__tests__/adapters.test.d.ts.map +1 -0
  4. package/dist/__tests__/adapters.test.js +417 -0
  5. package/dist/__tests__/adapters.test.js.map +1 -0
  6. package/dist/__tests__/audit.test.d.ts +2 -0
  7. package/dist/__tests__/audit.test.d.ts.map +1 -0
  8. package/dist/__tests__/audit.test.js +394 -0
  9. package/dist/__tests__/audit.test.js.map +1 -0
  10. package/dist/__tests__/authority-domains.test.d.ts +2 -0
  11. package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
  12. package/dist/__tests__/authority-domains.test.js +48 -0
  13. package/dist/__tests__/authority-domains.test.js.map +1 -0
  14. package/dist/__tests__/batch-transformations.test.d.ts +2 -0
  15. package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
  16. package/dist/__tests__/batch-transformations.test.js +263 -0
  17. package/dist/__tests__/batch-transformations.test.js.map +1 -0
  18. package/dist/__tests__/capture.test.d.ts +2 -0
  19. package/dist/__tests__/capture.test.d.ts.map +1 -0
  20. package/dist/__tests__/capture.test.js +377 -0
  21. package/dist/__tests__/capture.test.js.map +1 -0
  22. package/dist/__tests__/config.test.d.ts +8 -0
  23. package/dist/__tests__/config.test.d.ts.map +1 -0
  24. package/dist/__tests__/config.test.js +296 -0
  25. package/dist/__tests__/config.test.js.map +1 -0
  26. package/dist/__tests__/constants.test.d.ts +2 -0
  27. package/dist/__tests__/constants.test.d.ts.map +1 -0
  28. package/dist/__tests__/constants.test.js +141 -0
  29. package/dist/__tests__/constants.test.js.map +1 -0
  30. package/dist/__tests__/constellation.test.d.ts +2 -0
  31. package/dist/__tests__/constellation.test.d.ts.map +1 -0
  32. package/dist/__tests__/constellation.test.js +254 -0
  33. package/dist/__tests__/constellation.test.js.map +1 -0
  34. package/dist/__tests__/context-strategy.test.d.ts +2 -0
  35. package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
  36. package/dist/__tests__/context-strategy.test.js +79 -0
  37. package/dist/__tests__/context-strategy.test.js.map +1 -0
  38. package/dist/__tests__/envelope-contract.test.d.ts +15 -0
  39. package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
  40. package/dist/__tests__/envelope-contract.test.js +126 -0
  41. package/dist/__tests__/envelope-contract.test.js.map +1 -0
  42. package/dist/__tests__/errors.test.d.ts +2 -0
  43. package/dist/__tests__/errors.test.d.ts.map +1 -0
  44. package/dist/__tests__/errors.test.js +117 -0
  45. package/dist/__tests__/errors.test.js.map +1 -0
  46. package/dist/__tests__/experiment.test.d.ts +6 -0
  47. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  48. package/dist/__tests__/experiment.test.js +69 -0
  49. package/dist/__tests__/experiment.test.js.map +1 -0
  50. package/dist/__tests__/fields.test.d.ts +2 -0
  51. package/dist/__tests__/fields.test.d.ts.map +1 -0
  52. package/dist/__tests__/fields.test.js +238 -0
  53. package/dist/__tests__/fields.test.js.map +1 -0
  54. package/dist/__tests__/glossary.test.d.ts +2 -0
  55. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  56. package/dist/__tests__/glossary.test.js +32 -0
  57. package/dist/__tests__/glossary.test.js.map +1 -0
  58. package/dist/__tests__/handshake-preview.test.d.ts +2 -0
  59. package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
  60. package/dist/__tests__/handshake-preview.test.js +279 -0
  61. package/dist/__tests__/handshake-preview.test.js.map +1 -0
  62. package/dist/__tests__/handshake.test.d.ts +2 -0
  63. package/dist/__tests__/handshake.test.d.ts.map +1 -0
  64. package/dist/__tests__/handshake.test.js +555 -0
  65. package/dist/__tests__/handshake.test.js.map +1 -0
  66. package/dist/__tests__/hook-intents.test.d.ts +2 -0
  67. package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
  68. package/dist/__tests__/hook-intents.test.js +184 -0
  69. package/dist/__tests__/hook-intents.test.js.map +1 -0
  70. package/dist/__tests__/ingest.test.d.ts +2 -0
  71. package/dist/__tests__/ingest.test.d.ts.map +1 -0
  72. package/dist/__tests__/ingest.test.js +185 -0
  73. package/dist/__tests__/ingest.test.js.map +1 -0
  74. package/dist/__tests__/init.test.d.ts +7 -0
  75. package/dist/__tests__/init.test.d.ts.map +1 -0
  76. package/dist/__tests__/init.test.js +146 -0
  77. package/dist/__tests__/init.test.js.map +1 -0
  78. package/dist/__tests__/login.test.d.ts +2 -0
  79. package/dist/__tests__/login.test.d.ts.map +1 -0
  80. package/dist/__tests__/login.test.js +167 -0
  81. package/dist/__tests__/login.test.js.map +1 -0
  82. package/dist/__tests__/manifest.test.d.ts +6 -0
  83. package/dist/__tests__/manifest.test.d.ts.map +1 -0
  84. package/dist/__tests__/manifest.test.js +138 -0
  85. package/dist/__tests__/manifest.test.js.map +1 -0
  86. package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
  87. package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
  88. package/dist/__tests__/method-registry.integration.test.js +18 -0
  89. package/dist/__tests__/method-registry.integration.test.js.map +1 -0
  90. package/dist/__tests__/method-registry.test.d.ts +14 -0
  91. package/dist/__tests__/method-registry.test.d.ts.map +1 -0
  92. package/dist/__tests__/method-registry.test.js +134 -0
  93. package/dist/__tests__/method-registry.test.js.map +1 -0
  94. package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
  95. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  96. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  97. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  98. package/dist/__tests__/onboarding.test.d.ts +6 -0
  99. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  100. package/dist/__tests__/onboarding.test.js +347 -0
  101. package/dist/__tests__/onboarding.test.js.map +1 -0
  102. package/dist/__tests__/orient.test.d.ts +2 -0
  103. package/dist/__tests__/orient.test.d.ts.map +1 -0
  104. package/dist/__tests__/orient.test.js +196 -0
  105. package/dist/__tests__/orient.test.js.map +1 -0
  106. package/dist/__tests__/personal-layer.test.d.ts +12 -0
  107. package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
  108. package/dist/__tests__/personal-layer.test.js +304 -0
  109. package/dist/__tests__/personal-layer.test.js.map +1 -0
  110. package/dist/__tests__/profiles.test.d.ts +2 -0
  111. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  112. package/dist/__tests__/profiles.test.js +212 -0
  113. package/dist/__tests__/profiles.test.js.map +1 -0
  114. package/dist/__tests__/promote.test.d.ts +2 -0
  115. package/dist/__tests__/promote.test.d.ts.map +1 -0
  116. package/dist/__tests__/promote.test.js +230 -0
  117. package/dist/__tests__/promote.test.js.map +1 -0
  118. package/dist/__tests__/prompts.test.d.ts +6 -0
  119. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  120. package/dist/__tests__/prompts.test.js +146 -0
  121. package/dist/__tests__/prompts.test.js.map +1 -0
  122. package/dist/__tests__/proposals.test.d.ts +2 -0
  123. package/dist/__tests__/proposals.test.d.ts.map +1 -0
  124. package/dist/__tests__/proposals.test.js +167 -0
  125. package/dist/__tests__/proposals.test.js.map +1 -0
  126. package/dist/__tests__/relate.test.d.ts +2 -0
  127. package/dist/__tests__/relate.test.d.ts.map +1 -0
  128. package/dist/__tests__/relate.test.js +103 -0
  129. package/dist/__tests__/relate.test.js.map +1 -0
  130. package/dist/__tests__/repo-detect.test.d.ts +2 -0
  131. package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
  132. package/dist/__tests__/repo-detect.test.js +215 -0
  133. package/dist/__tests__/repo-detect.test.js.map +1 -0
  134. package/dist/__tests__/runner.test.d.ts +2 -0
  135. package/dist/__tests__/runner.test.d.ts.map +1 -0
  136. package/dist/__tests__/runner.test.js +219 -0
  137. package/dist/__tests__/runner.test.js.map +1 -0
  138. package/dist/__tests__/session-state-machine.test.d.ts +2 -0
  139. package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
  140. package/dist/__tests__/session-state-machine.test.js +154 -0
  141. package/dist/__tests__/session-state-machine.test.js.map +1 -0
  142. package/dist/__tests__/session-touch.test.d.ts +2 -0
  143. package/dist/__tests__/session-touch.test.d.ts.map +1 -0
  144. package/dist/__tests__/session-touch.test.js +134 -0
  145. package/dist/__tests__/session-touch.test.js.map +1 -0
  146. package/dist/__tests__/session.test.d.ts +2 -0
  147. package/dist/__tests__/session.test.d.ts.map +1 -0
  148. package/dist/__tests__/session.test.js +46 -0
  149. package/dist/__tests__/session.test.js.map +1 -0
  150. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  151. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  152. package/dist/__tests__/setup-ingest.test.js +55 -0
  153. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  154. package/dist/__tests__/setup-resolver.test.d.ts +14 -0
  155. package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
  156. package/dist/__tests__/setup-resolver.test.js +228 -0
  157. package/dist/__tests__/setup-resolver.test.js.map +1 -0
  158. package/dist/__tests__/setup.test.d.ts +2 -0
  159. package/dist/__tests__/setup.test.d.ts.map +1 -0
  160. package/dist/__tests__/setup.test.js +141 -0
  161. package/dist/__tests__/setup.test.js.map +1 -0
  162. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  163. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  164. package/dist/__tests__/spinner-labels.test.js +23 -0
  165. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  166. package/dist/__tests__/state.test.d.ts +6 -0
  167. package/dist/__tests__/state.test.d.ts.map +1 -0
  168. package/dist/__tests__/state.test.js +97 -0
  169. package/dist/__tests__/state.test.js.map +1 -0
  170. package/dist/__tests__/strip.test.d.ts +2 -0
  171. package/dist/__tests__/strip.test.d.ts.map +1 -0
  172. package/dist/__tests__/strip.test.js +136 -0
  173. package/dist/__tests__/strip.test.js.map +1 -0
  174. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  175. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  176. package/dist/__tests__/surface-profiles.test.js +233 -0
  177. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  178. package/dist/__tests__/surfaces.test.d.ts +2 -0
  179. package/dist/__tests__/surfaces.test.d.ts.map +1 -0
  180. package/dist/__tests__/surfaces.test.js +46 -0
  181. package/dist/__tests__/surfaces.test.js.map +1 -0
  182. package/dist/__tests__/update.test.d.ts +2 -0
  183. package/dist/__tests__/update.test.d.ts.map +1 -0
  184. package/dist/__tests__/update.test.js +228 -0
  185. package/dist/__tests__/update.test.js.map +1 -0
  186. package/dist/__tests__/workspace.test.d.ts +2 -0
  187. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  188. package/dist/__tests__/workspace.test.js +328 -0
  189. package/dist/__tests__/workspace.test.js.map +1 -0
  190. package/dist/commands/accept.d.ts +18 -0
  191. package/dist/commands/accept.d.ts.map +1 -0
  192. package/dist/commands/accept.js +76 -0
  193. package/dist/commands/accept.js.map +1 -0
  194. package/dist/commands/admin/cockpit.d.ts +90 -0
  195. package/dist/commands/admin/cockpit.d.ts.map +1 -0
  196. package/dist/commands/admin/cockpit.js +618 -0
  197. package/dist/commands/admin/cockpit.js.map +1 -0
  198. package/dist/commands/admin/index.d.ts +21 -0
  199. package/dist/commands/admin/index.d.ts.map +1 -0
  200. package/dist/commands/admin/index.js +256 -0
  201. package/dist/commands/admin/index.js.map +1 -0
  202. package/dist/commands/admin/inspect.d.ts +30 -0
  203. package/dist/commands/admin/inspect.d.ts.map +1 -0
  204. package/dist/commands/admin/inspect.js +555 -0
  205. package/dist/commands/admin/inspect.js.map +1 -0
  206. package/dist/commands/admin/inspect.test.d.ts +7 -0
  207. package/dist/commands/admin/inspect.test.d.ts.map +1 -0
  208. package/dist/commands/admin/inspect.test.js +90 -0
  209. package/dist/commands/admin/inspect.test.js.map +1 -0
  210. package/dist/commands/admin/manage.d.ts +8 -0
  211. package/dist/commands/admin/manage.d.ts.map +1 -0
  212. package/dist/commands/admin/manage.js +76 -0
  213. package/dist/commands/admin/manage.js.map +1 -0
  214. package/dist/commands/admin/seed.d.ts +46 -0
  215. package/dist/commands/admin/seed.d.ts.map +1 -0
  216. package/dist/commands/admin/seed.js +729 -0
  217. package/dist/commands/admin/seed.js.map +1 -0
  218. package/dist/commands/admin/seed.test.d.ts +11 -0
  219. package/dist/commands/admin/seed.test.d.ts.map +1 -0
  220. package/dist/commands/admin/seed.test.js +123 -0
  221. package/dist/commands/admin/seed.test.js.map +1 -0
  222. package/dist/commands/audit.d.ts +25 -0
  223. package/dist/commands/audit.d.ts.map +1 -0
  224. package/dist/commands/audit.js +188 -0
  225. package/dist/commands/audit.js.map +1 -0
  226. package/dist/commands/authority-domains.d.ts +140 -0
  227. package/dist/commands/authority-domains.d.ts.map +1 -0
  228. package/dist/commands/authority-domains.js +268 -0
  229. package/dist/commands/authority-domains.js.map +1 -0
  230. package/dist/commands/brand-pack.d.ts +2 -0
  231. package/dist/commands/brand-pack.d.ts.map +1 -0
  232. package/dist/commands/brand-pack.js +25 -0
  233. package/dist/commands/brand-pack.js.map +1 -0
  234. package/dist/commands/brief.d.ts +28 -0
  235. package/dist/commands/brief.d.ts.map +1 -0
  236. package/dist/commands/brief.js +75 -0
  237. package/dist/commands/brief.js.map +1 -0
  238. package/dist/commands/capture.d.ts +30 -0
  239. package/dist/commands/capture.d.ts.map +1 -0
  240. package/dist/commands/capture.js +339 -0
  241. package/dist/commands/capture.js.map +1 -0
  242. package/dist/commands/chain-walk.d.ts +14 -0
  243. package/dist/commands/chain-walk.d.ts.map +1 -0
  244. package/dist/commands/chain-walk.js +38 -0
  245. package/dist/commands/chain-walk.js.map +1 -0
  246. package/dist/commands/changes.d.ts +11 -0
  247. package/dist/commands/changes.d.ts.map +1 -0
  248. package/dist/commands/changes.js +46 -0
  249. package/dist/commands/changes.js.map +1 -0
  250. package/dist/commands/codex-prep.d.ts +12 -0
  251. package/dist/commands/codex-prep.d.ts.map +1 -0
  252. package/dist/commands/codex-prep.js +122 -0
  253. package/dist/commands/codex-prep.js.map +1 -0
  254. package/dist/commands/collections.d.ts +22 -0
  255. package/dist/commands/collections.d.ts.map +1 -0
  256. package/dist/commands/collections.js +77 -0
  257. package/dist/commands/collections.js.map +1 -0
  258. package/dist/commands/connect-integration.test.d.ts +7 -0
  259. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  260. package/dist/commands/connect-integration.test.js +211 -0
  261. package/dist/commands/connect-integration.test.js.map +1 -0
  262. package/dist/commands/connect-screens.d.ts +24 -0
  263. package/dist/commands/connect-screens.d.ts.map +1 -0
  264. package/dist/commands/connect-screens.js +97 -0
  265. package/dist/commands/connect-screens.js.map +1 -0
  266. package/dist/commands/connect.d.ts +23 -0
  267. package/dist/commands/connect.d.ts.map +1 -0
  268. package/dist/commands/connect.js +289 -0
  269. package/dist/commands/connect.js.map +1 -0
  270. package/dist/commands/connect.test.d.ts +6 -0
  271. package/dist/commands/connect.test.d.ts.map +1 -0
  272. package/dist/commands/connect.test.js +297 -0
  273. package/dist/commands/connect.test.js.map +1 -0
  274. package/dist/commands/constellation.d.ts +11 -0
  275. package/dist/commands/constellation.d.ts.map +1 -0
  276. package/dist/commands/constellation.js +33 -0
  277. package/dist/commands/constellation.js.map +1 -0
  278. package/dist/commands/context.d.ts +2 -1
  279. package/dist/commands/context.d.ts.map +1 -1
  280. package/dist/commands/context.js +25 -10
  281. package/dist/commands/context.js.map +1 -1
  282. package/dist/commands/cross-cut.d.ts +11 -0
  283. package/dist/commands/cross-cut.d.ts.map +1 -0
  284. package/dist/commands/cross-cut.js +23 -0
  285. package/dist/commands/cross-cut.js.map +1 -0
  286. package/dist/commands/doctor.d.ts +18 -0
  287. package/dist/commands/doctor.d.ts.map +1 -0
  288. package/dist/commands/doctor.js +232 -0
  289. package/dist/commands/doctor.js.map +1 -0
  290. package/dist/commands/doctor.test.d.ts +8 -0
  291. package/dist/commands/doctor.test.d.ts.map +1 -0
  292. package/dist/commands/doctor.test.js +311 -0
  293. package/dist/commands/doctor.test.js.map +1 -0
  294. package/dist/commands/fields.d.ts +9 -0
  295. package/dist/commands/fields.d.ts.map +1 -0
  296. package/dist/commands/fields.js +30 -0
  297. package/dist/commands/fields.js.map +1 -0
  298. package/dist/commands/get.d.ts +8 -1
  299. package/dist/commands/get.d.ts.map +1 -1
  300. package/dist/commands/get.js +65 -8
  301. package/dist/commands/get.js.map +1 -1
  302. package/dist/commands/handshake.d.ts +142 -0
  303. package/dist/commands/handshake.d.ts.map +1 -0
  304. package/dist/commands/handshake.js +1349 -0
  305. package/dist/commands/handshake.js.map +1 -0
  306. package/dist/commands/ingest.d.ts +14 -0
  307. package/dist/commands/ingest.d.ts.map +1 -0
  308. package/dist/commands/ingest.js +189 -0
  309. package/dist/commands/ingest.js.map +1 -0
  310. package/dist/commands/init.d.ts +14 -0
  311. package/dist/commands/init.d.ts.map +1 -0
  312. package/dist/commands/init.js +109 -0
  313. package/dist/commands/init.js.map +1 -0
  314. package/dist/commands/login.d.ts +9 -0
  315. package/dist/commands/login.d.ts.map +1 -0
  316. package/dist/commands/login.js +116 -0
  317. package/dist/commands/login.js.map +1 -0
  318. package/dist/commands/method.d.ts +99 -0
  319. package/dist/commands/method.d.ts.map +1 -0
  320. package/dist/commands/method.js +781 -0
  321. package/dist/commands/method.js.map +1 -0
  322. package/dist/commands/migrate-setup.d.ts +18 -0
  323. package/dist/commands/migrate-setup.d.ts.map +1 -0
  324. package/dist/commands/migrate-setup.js +198 -0
  325. package/dist/commands/migrate-setup.js.map +1 -0
  326. package/dist/commands/orient.d.ts +109 -1
  327. package/dist/commands/orient.d.ts.map +1 -1
  328. package/dist/commands/orient.js +94 -7
  329. package/dist/commands/orient.js.map +1 -1
  330. package/dist/commands/profile.d.ts +47 -0
  331. package/dist/commands/profile.d.ts.map +1 -0
  332. package/dist/commands/profile.js +148 -0
  333. package/dist/commands/profile.js.map +1 -0
  334. package/dist/commands/promote.d.ts +12 -0
  335. package/dist/commands/promote.d.ts.map +1 -0
  336. package/dist/commands/promote.js +113 -0
  337. package/dist/commands/promote.js.map +1 -0
  338. package/dist/commands/proposals.d.ts +9 -0
  339. package/dist/commands/proposals.d.ts.map +1 -0
  340. package/dist/commands/proposals.js +24 -0
  341. package/dist/commands/proposals.js.map +1 -0
  342. package/dist/commands/reject.d.ts +14 -0
  343. package/dist/commands/reject.d.ts.map +1 -0
  344. package/dist/commands/reject.js +43 -0
  345. package/dist/commands/reject.js.map +1 -0
  346. package/dist/commands/relate.d.ts +16 -0
  347. package/dist/commands/relate.d.ts.map +1 -0
  348. package/dist/commands/relate.js +111 -0
  349. package/dist/commands/relate.js.map +1 -0
  350. package/dist/commands/search.d.ts +1 -0
  351. package/dist/commands/search.d.ts.map +1 -1
  352. package/dist/commands/search.js +10 -4
  353. package/dist/commands/search.js.map +1 -1
  354. package/dist/commands/session.d.ts +20 -0
  355. package/dist/commands/session.d.ts.map +1 -0
  356. package/dist/commands/session.js +203 -0
  357. package/dist/commands/session.js.map +1 -0
  358. package/dist/commands/setup-ingest.d.ts +17 -0
  359. package/dist/commands/setup-ingest.d.ts.map +1 -0
  360. package/dist/commands/setup-ingest.js +224 -0
  361. package/dist/commands/setup-ingest.js.map +1 -0
  362. package/dist/commands/setup-resolver.d.ts +58 -0
  363. package/dist/commands/setup-resolver.d.ts.map +1 -0
  364. package/dist/commands/setup-resolver.js +150 -0
  365. package/dist/commands/setup-resolver.js.map +1 -0
  366. package/dist/commands/setup.d.ts +15 -0
  367. package/dist/commands/setup.d.ts.map +1 -0
  368. package/dist/commands/setup.js +148 -0
  369. package/dist/commands/setup.js.map +1 -0
  370. package/dist/commands/update.d.ts +17 -0
  371. package/dist/commands/update.d.ts.map +1 -0
  372. package/dist/commands/update.js +178 -0
  373. package/dist/commands/update.js.map +1 -0
  374. package/dist/commands/usage.d.ts +40 -0
  375. package/dist/commands/usage.d.ts.map +1 -0
  376. package/dist/commands/usage.js +232 -0
  377. package/dist/commands/usage.js.map +1 -0
  378. package/dist/commands/verify.d.ts +13 -0
  379. package/dist/commands/verify.d.ts.map +1 -0
  380. package/dist/commands/verify.js +49 -0
  381. package/dist/commands/verify.js.map +1 -0
  382. package/dist/commands/welcome.d.ts +21 -0
  383. package/dist/commands/welcome.d.ts.map +1 -0
  384. package/dist/commands/welcome.js +50 -0
  385. package/dist/commands/welcome.js.map +1 -0
  386. package/dist/commands/workspace.d.ts +113 -0
  387. package/dist/commands/workspace.d.ts.map +1 -0
  388. package/dist/commands/workspace.js +263 -0
  389. package/dist/commands/workspace.js.map +1 -0
  390. package/dist/formatters/audit.d.ts +46 -0
  391. package/dist/formatters/audit.d.ts.map +1 -0
  392. package/dist/formatters/audit.js +81 -0
  393. package/dist/formatters/audit.js.map +1 -0
  394. package/dist/formatters/brief.d.ts +112 -0
  395. package/dist/formatters/brief.d.ts.map +1 -0
  396. package/dist/formatters/brief.js +179 -0
  397. package/dist/formatters/brief.js.map +1 -0
  398. package/dist/formatters/capture.d.ts +48 -0
  399. package/dist/formatters/capture.d.ts.map +1 -0
  400. package/dist/formatters/capture.js +77 -0
  401. package/dist/formatters/capture.js.map +1 -0
  402. package/dist/formatters/chain-walk.d.ts +33 -0
  403. package/dist/formatters/chain-walk.d.ts.map +1 -0
  404. package/dist/formatters/chain-walk.js +54 -0
  405. package/dist/formatters/chain-walk.js.map +1 -0
  406. package/dist/formatters/changes.d.ts +25 -0
  407. package/dist/formatters/changes.d.ts.map +1 -0
  408. package/dist/formatters/changes.js +60 -0
  409. package/dist/formatters/changes.js.map +1 -0
  410. package/dist/formatters/collections.d.ts +40 -0
  411. package/dist/formatters/collections.d.ts.map +1 -0
  412. package/dist/formatters/collections.js +93 -0
  413. package/dist/formatters/collections.js.map +1 -0
  414. package/dist/formatters/constellation.d.ts +34 -0
  415. package/dist/formatters/constellation.d.ts.map +1 -0
  416. package/dist/formatters/constellation.js +38 -0
  417. package/dist/formatters/constellation.js.map +1 -0
  418. package/dist/formatters/cross-cut.d.ts +21 -0
  419. package/dist/formatters/cross-cut.d.ts.map +1 -0
  420. package/dist/formatters/cross-cut.js +32 -0
  421. package/dist/formatters/cross-cut.js.map +1 -0
  422. package/dist/formatters/entry.d.ts +11 -4
  423. package/dist/formatters/entry.d.ts.map +1 -1
  424. package/dist/formatters/entry.js +24 -8
  425. package/dist/formatters/entry.js.map +1 -1
  426. package/dist/formatters/fields.d.ts +32 -0
  427. package/dist/formatters/fields.d.ts.map +1 -0
  428. package/dist/formatters/fields.js +49 -0
  429. package/dist/formatters/fields.js.map +1 -0
  430. package/dist/formatters/handshake.d.ts +46 -0
  431. package/dist/formatters/handshake.d.ts.map +1 -0
  432. package/dist/formatters/handshake.js +163 -0
  433. package/dist/formatters/handshake.js.map +1 -0
  434. package/dist/formatters/orient.d.ts +129 -1
  435. package/dist/formatters/orient.d.ts.map +1 -1
  436. package/dist/formatters/orient.js +156 -17
  437. package/dist/formatters/orient.js.map +1 -1
  438. package/dist/formatters/promote.d.ts +30 -0
  439. package/dist/formatters/promote.d.ts.map +1 -0
  440. package/dist/formatters/promote.js +39 -0
  441. package/dist/formatters/promote.js.map +1 -0
  442. package/dist/formatters/proposals.d.ts +45 -0
  443. package/dist/formatters/proposals.d.ts.map +1 -0
  444. package/dist/formatters/proposals.js +62 -0
  445. package/dist/formatters/proposals.js.map +1 -0
  446. package/dist/formatters/relate.d.ts +14 -0
  447. package/dist/formatters/relate.d.ts.map +1 -0
  448. package/dist/formatters/relate.js +16 -0
  449. package/dist/formatters/relate.js.map +1 -0
  450. package/dist/formatters/search.d.ts +0 -4
  451. package/dist/formatters/search.d.ts.map +1 -1
  452. package/dist/formatters/search.js +4 -1
  453. package/dist/formatters/search.js.map +1 -1
  454. package/dist/formatters/session.d.ts +11 -0
  455. package/dist/formatters/session.d.ts.map +1 -0
  456. package/dist/formatters/session.js +53 -0
  457. package/dist/formatters/session.js.map +1 -0
  458. package/dist/formatters/update.d.ts +17 -0
  459. package/dist/formatters/update.d.ts.map +1 -0
  460. package/dist/formatters/update.js +45 -0
  461. package/dist/formatters/update.js.map +1 -0
  462. package/dist/formatters/verify.d.ts +11 -0
  463. package/dist/formatters/verify.d.ts.map +1 -0
  464. package/dist/formatters/verify.js +11 -0
  465. package/dist/formatters/verify.js.map +1 -0
  466. package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
  467. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
  468. package/dist/generators/__tests__/surface-profiles.test.js +89 -0
  469. package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
  470. package/dist/generators/adapters.d.ts +44 -0
  471. package/dist/generators/adapters.d.ts.map +1 -0
  472. package/dist/generators/adapters.js +290 -0
  473. package/dist/generators/adapters.js.map +1 -0
  474. package/dist/generators/adapters.test.d.ts +2 -0
  475. package/dist/generators/adapters.test.d.ts.map +1 -0
  476. package/dist/generators/adapters.test.js +27 -0
  477. package/dist/generators/adapters.test.js.map +1 -0
  478. package/dist/generators/archetypes.d.ts +52 -0
  479. package/dist/generators/archetypes.d.ts.map +1 -0
  480. package/dist/generators/archetypes.js +153 -0
  481. package/dist/generators/archetypes.js.map +1 -0
  482. package/dist/generators/archetypes.test.d.ts +2 -0
  483. package/dist/generators/archetypes.test.d.ts.map +1 -0
  484. package/dist/generators/archetypes.test.js +237 -0
  485. package/dist/generators/archetypes.test.js.map +1 -0
  486. package/dist/generators/boundary-manifest.d.ts +29 -0
  487. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  488. package/dist/generators/boundary-manifest.js +183 -0
  489. package/dist/generators/boundary-manifest.js.map +1 -0
  490. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  491. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  492. package/dist/generators/boundary-manifest.test.js +91 -0
  493. package/dist/generators/boundary-manifest.test.js.map +1 -0
  494. package/dist/generators/briefing-md.d.ts +8 -0
  495. package/dist/generators/briefing-md.d.ts.map +1 -0
  496. package/dist/generators/briefing-md.js +51 -0
  497. package/dist/generators/briefing-md.js.map +1 -0
  498. package/dist/generators/chain-classifier.d.ts +49 -0
  499. package/dist/generators/chain-classifier.d.ts.map +1 -0
  500. package/dist/generators/chain-classifier.js +180 -0
  501. package/dist/generators/chain-classifier.js.map +1 -0
  502. package/dist/generators/chain-classifier.test.d.ts +2 -0
  503. package/dist/generators/chain-classifier.test.d.ts.map +1 -0
  504. package/dist/generators/chain-classifier.test.js +257 -0
  505. package/dist/generators/chain-classifier.test.js.map +1 -0
  506. package/dist/generators/chain-rules.d.ts +42 -0
  507. package/dist/generators/chain-rules.d.ts.map +1 -0
  508. package/dist/generators/chain-rules.js +144 -0
  509. package/dist/generators/chain-rules.js.map +1 -0
  510. package/dist/generators/chain-rules.test.d.ts +2 -0
  511. package/dist/generators/chain-rules.test.d.ts.map +1 -0
  512. package/dist/generators/chain-rules.test.js +179 -0
  513. package/dist/generators/chain-rules.test.js.map +1 -0
  514. package/dist/generators/context-md.d.ts +8 -0
  515. package/dist/generators/context-md.d.ts.map +1 -0
  516. package/dist/generators/context-md.js +134 -0
  517. package/dist/generators/context-md.js.map +1 -0
  518. package/dist/generators/handshake-diff.d.ts +67 -0
  519. package/dist/generators/handshake-diff.d.ts.map +1 -0
  520. package/dist/generators/handshake-diff.js +183 -0
  521. package/dist/generators/handshake-diff.js.map +1 -0
  522. package/dist/generators/handshake-diff.test.d.ts +2 -0
  523. package/dist/generators/handshake-diff.test.d.ts.map +1 -0
  524. package/dist/generators/handshake-diff.test.js +264 -0
  525. package/dist/generators/handshake-diff.test.js.map +1 -0
  526. package/dist/generators/manifest.d.ts +39 -0
  527. package/dist/generators/manifest.d.ts.map +1 -0
  528. package/dist/generators/manifest.js +166 -0
  529. package/dist/generators/manifest.js.map +1 -0
  530. package/dist/generators/portable-knowledge.d.ts +165 -0
  531. package/dist/generators/portable-knowledge.d.ts.map +1 -0
  532. package/dist/generators/portable-knowledge.js +613 -0
  533. package/dist/generators/portable-knowledge.js.map +1 -0
  534. package/dist/generators/portable-knowledge.test.d.ts +2 -0
  535. package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
  536. package/dist/generators/portable-knowledge.test.js +927 -0
  537. package/dist/generators/portable-knowledge.test.js.map +1 -0
  538. package/dist/generators/surface-profiles.d.ts +49 -0
  539. package/dist/generators/surface-profiles.d.ts.map +1 -0
  540. package/dist/generators/surface-profiles.js +98 -0
  541. package/dist/generators/surface-profiles.js.map +1 -0
  542. package/dist/index.d.ts +3 -2
  543. package/dist/index.d.ts.map +1 -1
  544. package/dist/index.js +858 -32
  545. package/dist/index.js.map +1 -1
  546. package/dist/lib/activation.d.ts +28 -0
  547. package/dist/lib/activation.d.ts.map +1 -0
  548. package/dist/lib/activation.js +57 -0
  549. package/dist/lib/activation.js.map +1 -0
  550. package/dist/lib/activation.test.d.ts +6 -0
  551. package/dist/lib/activation.test.d.ts.map +1 -0
  552. package/dist/lib/activation.test.js +121 -0
  553. package/dist/lib/activation.test.js.map +1 -0
  554. package/dist/lib/canonicalRefs.d.ts +69 -0
  555. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  556. package/dist/lib/canonicalRefs.js +83 -0
  557. package/dist/lib/canonicalRefs.js.map +1 -0
  558. package/dist/lib/client.d.ts +62 -1
  559. package/dist/lib/client.d.ts.map +1 -1
  560. package/dist/lib/client.js +259 -13
  561. package/dist/lib/client.js.map +1 -1
  562. package/dist/lib/collectionRegistry.d.ts +38 -0
  563. package/dist/lib/collectionRegistry.d.ts.map +1 -0
  564. package/dist/lib/collectionRegistry.js +112 -0
  565. package/dist/lib/collectionRegistry.js.map +1 -0
  566. package/dist/lib/config.d.ts +122 -2
  567. package/dist/lib/config.d.ts.map +1 -1
  568. package/dist/lib/config.js +426 -18
  569. package/dist/lib/config.js.map +1 -1
  570. package/dist/lib/connectKeyLabel.d.ts +9 -0
  571. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  572. package/dist/lib/connectKeyLabel.js +12 -0
  573. package/dist/lib/connectKeyLabel.js.map +1 -0
  574. package/dist/lib/constants.d.ts +42 -0
  575. package/dist/lib/constants.d.ts.map +1 -0
  576. package/dist/lib/constants.js +76 -0
  577. package/dist/lib/constants.js.map +1 -0
  578. package/dist/lib/conversation-engine.d.ts +45 -0
  579. package/dist/lib/conversation-engine.d.ts.map +1 -0
  580. package/dist/lib/conversation-engine.js +112 -0
  581. package/dist/lib/conversation-engine.js.map +1 -0
  582. package/dist/lib/conversation-phases.d.ts +59 -0
  583. package/dist/lib/conversation-phases.d.ts.map +1 -0
  584. package/dist/lib/conversation-phases.js +11 -0
  585. package/dist/lib/conversation-phases.js.map +1 -0
  586. package/dist/lib/conversation-signals.d.ts +30 -0
  587. package/dist/lib/conversation-signals.d.ts.map +1 -0
  588. package/dist/lib/conversation-signals.js +64 -0
  589. package/dist/lib/conversation-signals.js.map +1 -0
  590. package/dist/lib/deployment.d.ts +23 -0
  591. package/dist/lib/deployment.d.ts.map +1 -0
  592. package/dist/lib/deployment.js +78 -0
  593. package/dist/lib/deployment.js.map +1 -0
  594. package/dist/lib/deployment.test.d.ts +5 -0
  595. package/dist/lib/deployment.test.d.ts.map +1 -0
  596. package/dist/lib/deployment.test.js +54 -0
  597. package/dist/lib/deployment.test.js.map +1 -0
  598. package/dist/lib/errors.d.ts +60 -0
  599. package/dist/lib/errors.d.ts.map +1 -0
  600. package/dist/lib/errors.js +69 -0
  601. package/dist/lib/errors.js.map +1 -0
  602. package/dist/lib/experiment.d.ts +18 -0
  603. package/dist/lib/experiment.d.ts.map +1 -0
  604. package/dist/lib/experiment.js +28 -0
  605. package/dist/lib/experiment.js.map +1 -0
  606. package/dist/lib/format.d.ts +10 -0
  607. package/dist/lib/format.d.ts.map +1 -0
  608. package/dist/lib/format.js +27 -0
  609. package/dist/lib/format.js.map +1 -0
  610. package/dist/lib/glossary.d.ts +19 -0
  611. package/dist/lib/glossary.d.ts.map +1 -0
  612. package/dist/lib/glossary.js +53 -0
  613. package/dist/lib/glossary.js.map +1 -0
  614. package/dist/lib/hook-intents.d.ts +51 -0
  615. package/dist/lib/hook-intents.d.ts.map +1 -0
  616. package/dist/lib/hook-intents.js +85 -0
  617. package/dist/lib/hook-intents.js.map +1 -0
  618. package/dist/lib/inferSourceDate.d.ts +12 -0
  619. package/dist/lib/inferSourceDate.d.ts.map +1 -0
  620. package/dist/lib/inferSourceDate.js +44 -0
  621. package/dist/lib/inferSourceDate.js.map +1 -0
  622. package/dist/lib/method-registry.d.ts +32 -0
  623. package/dist/lib/method-registry.d.ts.map +1 -0
  624. package/dist/lib/method-registry.js +53 -0
  625. package/dist/lib/method-registry.js.map +1 -0
  626. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  627. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  628. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  629. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  630. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  631. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  632. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  633. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  634. package/dist/lib/onboarding-path-b.d.ts +10 -0
  635. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  636. package/dist/lib/onboarding-path-b.js +214 -0
  637. package/dist/lib/onboarding-path-b.js.map +1 -0
  638. package/dist/lib/onboarding-phases.d.ts +9 -0
  639. package/dist/lib/onboarding-phases.d.ts.map +1 -0
  640. package/dist/lib/onboarding-phases.js +120 -0
  641. package/dist/lib/onboarding-phases.js.map +1 -0
  642. package/dist/lib/onboarding-shared.d.ts +81 -0
  643. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  644. package/dist/lib/onboarding-shared.js +190 -0
  645. package/dist/lib/onboarding-shared.js.map +1 -0
  646. package/dist/lib/onboarding-topics.d.ts +27 -0
  647. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  648. package/dist/lib/onboarding-topics.js +57 -0
  649. package/dist/lib/onboarding-topics.js.map +1 -0
  650. package/dist/lib/onboarding.d.ts +17 -0
  651. package/dist/lib/onboarding.d.ts.map +1 -0
  652. package/dist/lib/onboarding.js +350 -0
  653. package/dist/lib/onboarding.js.map +1 -0
  654. package/dist/lib/profiles.d.ts +39 -0
  655. package/dist/lib/profiles.d.ts.map +1 -0
  656. package/dist/lib/profiles.js +185 -0
  657. package/dist/lib/profiles.js.map +1 -0
  658. package/dist/lib/prompts.d.ts +65 -0
  659. package/dist/lib/prompts.d.ts.map +1 -0
  660. package/dist/lib/prompts.js +132 -0
  661. package/dist/lib/prompts.js.map +1 -0
  662. package/dist/lib/repo-detect.d.ts +33 -0
  663. package/dist/lib/repo-detect.d.ts.map +1 -0
  664. package/dist/lib/repo-detect.js +83 -0
  665. package/dist/lib/repo-detect.js.map +1 -0
  666. package/dist/lib/runner.d.ts +33 -0
  667. package/dist/lib/runner.d.ts.map +1 -0
  668. package/dist/lib/runner.js +79 -0
  669. package/dist/lib/runner.js.map +1 -0
  670. package/dist/lib/session.d.ts +42 -0
  671. package/dist/lib/session.d.ts.map +1 -0
  672. package/dist/lib/session.js +109 -0
  673. package/dist/lib/session.js.map +1 -0
  674. package/dist/lib/spinner.d.ts +27 -0
  675. package/dist/lib/spinner.d.ts.map +1 -0
  676. package/dist/lib/spinner.js +76 -0
  677. package/dist/lib/spinner.js.map +1 -0
  678. package/dist/lib/spinner.test.d.ts +2 -0
  679. package/dist/lib/spinner.test.d.ts.map +1 -0
  680. package/dist/lib/spinner.test.js +39 -0
  681. package/dist/lib/spinner.test.js.map +1 -0
  682. package/dist/lib/state.d.ts +51 -0
  683. package/dist/lib/state.d.ts.map +1 -0
  684. package/dist/lib/state.js +90 -0
  685. package/dist/lib/state.js.map +1 -0
  686. package/dist/lib/strip.d.ts +12 -0
  687. package/dist/lib/strip.d.ts.map +1 -0
  688. package/dist/lib/strip.js +41 -0
  689. package/dist/lib/strip.js.map +1 -0
  690. package/dist/lib/style.d.ts +96 -0
  691. package/dist/lib/style.d.ts.map +1 -0
  692. package/dist/lib/style.js +169 -0
  693. package/dist/lib/style.js.map +1 -0
  694. package/dist/lib/style.test.d.ts +7 -0
  695. package/dist/lib/style.test.d.ts.map +1 -0
  696. package/dist/lib/style.test.js +263 -0
  697. package/dist/lib/style.test.js.map +1 -0
  698. package/dist/lib/telemetry.d.ts +15 -0
  699. package/dist/lib/telemetry.d.ts.map +1 -0
  700. package/dist/lib/telemetry.js +47 -0
  701. package/dist/lib/telemetry.js.map +1 -0
  702. package/dist/lib/tokenConstants.d.ts +17 -0
  703. package/dist/lib/tokenConstants.d.ts.map +1 -0
  704. package/dist/lib/tokenConstants.js +17 -0
  705. package/dist/lib/tokenConstants.js.map +1 -0
  706. package/dist/lib/update-check.d.ts +21 -0
  707. package/dist/lib/update-check.d.ts.map +1 -0
  708. package/dist/lib/update-check.js +145 -0
  709. package/dist/lib/update-check.js.map +1 -0
  710. package/dist/lib/wizard-surfaces.d.ts +47 -0
  711. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  712. package/dist/lib/wizard-surfaces.js +176 -0
  713. package/dist/lib/wizard-surfaces.js.map +1 -0
  714. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  715. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  716. package/dist/lib/wizard-surfaces.test.js +127 -0
  717. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  718. package/dist/lib/wizard-trust.d.ts +31 -0
  719. package/dist/lib/wizard-trust.d.ts.map +1 -0
  720. package/dist/lib/wizard-trust.js +66 -0
  721. package/dist/lib/wizard-trust.js.map +1 -0
  722. package/dist/lib/wizard-trust.test.d.ts +2 -0
  723. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  724. package/dist/lib/wizard-trust.test.js +32 -0
  725. package/dist/lib/wizard-trust.test.js.map +1 -0
  726. package/dist/lib/workspace-probe.d.ts +19 -0
  727. package/dist/lib/workspace-probe.d.ts.map +1 -0
  728. package/dist/lib/workspace-probe.js +27 -0
  729. package/dist/lib/workspace-probe.js.map +1 -0
  730. package/dist/surfaces/registry.d.ts +20 -0
  731. package/dist/surfaces/registry.d.ts.map +1 -0
  732. package/dist/surfaces/registry.js +42 -0
  733. package/dist/surfaces/registry.js.map +1 -0
  734. package/package.json +15 -5
  735. package/templates/archetypes/boundary.md +23 -0
  736. package/templates/archetypes/constraint.md +23 -0
  737. package/templates/archetypes/convention.md +23 -0
  738. package/templates/archetypes/policy.md +23 -0
  739. package/templates/archetypes/quality-gate.md +23 -0
  740. package/templates/archetypes/workflow.md +23 -0
  741. package/templates/general/code-integrity.md +11 -0
  742. package/templates/general/getting-started.md +12 -0
  743. package/templates/method-registry.json +16 -0
  744. package/templates/node-ts/code-integrity.md +13 -0
  745. package/templates/node-ts/testing.md +12 -0
  746. package/templates/python/code-integrity.md +13 -0
  747. package/templates/python/testing.md +12 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * normalizeMaterializedFilename — WP-379 S5b
3
+ *
4
+ * Produces a lowercase, slug-friendly filename from an asset name.
5
+ * Used by resolveProjectionCollision to compare on-disk filenames (which may
6
+ * have been projected with a non-normalized case) against the canonical
7
+ * lowercase form that handshake now writes.
8
+ *
9
+ * Contract:
10
+ * - Output is lowercase.
11
+ * - Non-alphanumeric, non-dot characters are replaced with hyphens.
12
+ * - Leading dots (hidden-file convention) are stripped.
13
+ * - Multiple consecutive hyphens are collapsed to a single hyphen.
14
+ * - Leading and trailing hyphens are trimmed.
15
+ * - Unicode characters that don't map to ASCII letters/digits are dropped.
16
+ * - Idempotent: applying the function twice yields the same result.
17
+ * - Empty input → empty output.
18
+ *
19
+ * Chain: WP-379 S5b.
20
+ */
21
+ /**
22
+ * Normalize a materializedFilename to its canonical lowercase slug form.
23
+ *
24
+ * @param name The raw filename (e.g. "Setup-ProductBrain.mdc").
25
+ * @returns The normalized filename (e.g. "setup-productbrain.mdc").
26
+ */
27
+ export function normalizeMaterializedFilename(name) {
28
+ if (!name)
29
+ return '';
30
+ // 1. Strip leading dots (hidden-file prefix, e.g. ".cursor/rules/.hidden.mdc").
31
+ // We only strip a single leading dot cluster at the start of the basename,
32
+ // not dots that are part of extensions or internal names.
33
+ const stripped = name.startsWith('.') ? name.replace(/^\.+/, '') : name;
34
+ if (!stripped)
35
+ return '';
36
+ // 2. Lowercase the entire name (covers ASCII + Unicode basic-latin).
37
+ const lowered = stripped.toLowerCase();
38
+ // 3. Normalize Unicode: decompose then remove non-ASCII code points that
39
+ // didn't map cleanly (e.g. accented chars become their base form via NFD
40
+ // decomposition, then the combining diacritics are removed).
41
+ // NFKD decomposes ligatures and compatibility forms as well.
42
+ const ascii = lowered
43
+ .normalize('NFKD')
44
+ .replace(/[̀-ͯ]/g, '') // strip combining diacritics
45
+ .replace(/[^\x00-\x7F]/g, ''); // drop remaining non-ASCII
46
+ // 4. Replace any sequence of non-alphanumeric + non-dot characters with a
47
+ // single hyphen. We preserve dots so that ".mdc" and ".md" extensions
48
+ // are maintained in the output.
49
+ const slugged = ascii.replace(/[^a-z0-9.]+/g, '-');
50
+ // 5. Collapse consecutive hyphens → single hyphen.
51
+ const collapsed = slugged.replace(/-{2,}/g, '-');
52
+ // 6. Trim leading and trailing hyphens.
53
+ const trimmed = collapsed.replace(/^-+|-+$/g, '');
54
+ return trimmed;
55
+ }
56
+ //# sourceMappingURL=normalizeMaterializedFilename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeMaterializedFilename.js","sourceRoot":"","sources":["../../src/lib/normalizeMaterializedFilename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,gFAAgF;IAChF,8EAA8E;IAC9E,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,qEAAqE;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEvC,yEAAyE;IACzE,4EAA4E;IAC5E,gEAAgE;IAChE,gEAAgE;IAChE,MAAM,KAAK,GAAG,OAAO;SAClB,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,6BAA6B;SACnD,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAG,2BAA2B;IAE9D,0EAA0E;IAC1E,0EAA0E;IAC1E,mCAAmC;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAEnD,mDAAmD;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEjD,wCAAwC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAElD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * normalizeMaterializedFilename unit tests — WP-379 S5b.
3
+ *
4
+ * Contract assertions:
5
+ * - Setup-ProductBrain.mdc → setup-productbrain.mdc
6
+ * - Already-normalized input is idempotent
7
+ * - Unicode chars that map to ASCII (via NFKD) retain base form; others dropped
8
+ * - Leading dot stripped; file is otherwise preserved
9
+ * - Empty input returns empty string
10
+ * - Extension dots are preserved
11
+ * - Non-alphanumeric sequences → single hyphen
12
+ *
13
+ * Chain: WP-379 S5b.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=normalizeMaterializedFilename.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeMaterializedFilename.test.d.ts","sourceRoot":"","sources":["../../src/lib/normalizeMaterializedFilename.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * normalizeMaterializedFilename unit tests — WP-379 S5b.
3
+ *
4
+ * Contract assertions:
5
+ * - Setup-ProductBrain.mdc → setup-productbrain.mdc
6
+ * - Already-normalized input is idempotent
7
+ * - Unicode chars that map to ASCII (via NFKD) retain base form; others dropped
8
+ * - Leading dot stripped; file is otherwise preserved
9
+ * - Empty input returns empty string
10
+ * - Extension dots are preserved
11
+ * - Non-alphanumeric sequences → single hyphen
12
+ *
13
+ * Chain: WP-379 S5b.
14
+ */
15
+ import { describe, expect, it } from 'vitest';
16
+ import { normalizeMaterializedFilename } from './normalizeMaterializedFilename.js';
17
+ describe('normalizeMaterializedFilename', () => {
18
+ // ── Primary contract test (from bet spec) ───────────────────────────────────
19
+ it('Setup-ProductBrain.mdc → setup-productbrain.mdc', () => {
20
+ expect(normalizeMaterializedFilename('Setup-ProductBrain.mdc')).toBe('setup-productbrain.mdc');
21
+ });
22
+ // ── Idempotency ──────────────────────────────────────────────────────────────
23
+ it('already-normalized input is idempotent', () => {
24
+ const normalized = 'setup-productbrain.mdc';
25
+ expect(normalizeMaterializedFilename(normalized)).toBe(normalized);
26
+ });
27
+ it('applying twice produces the same result', () => {
28
+ const input = 'My Rule File.md';
29
+ const once = normalizeMaterializedFilename(input);
30
+ const twice = normalizeMaterializedFilename(once);
31
+ expect(once).toBe(twice);
32
+ });
33
+ // ── Uppercase handling ────────────────────────────────────────────────────────
34
+ it('lowercases all ASCII letters', () => {
35
+ expect(normalizeMaterializedFilename('CHAIN-RULES.mdc')).toBe('chain-rules.mdc');
36
+ });
37
+ it('mixed case with spaces → lowercase with hyphens', () => {
38
+ expect(normalizeMaterializedFilename('My Custom Rule.md')).toBe('my-custom-rule.md');
39
+ });
40
+ // ── Unicode normalization ─────────────────────────────────────────────────────
41
+ it('accented chars via NFKD → base ASCII (é → e)', () => {
42
+ expect(normalizeMaterializedFilename('Régle.md')).toBe('regle.md');
43
+ });
44
+ it('non-ASCII chars that cannot normalize → dropped', () => {
45
+ // Chinese chars don't map to ASCII — they're dropped, hyphens collapsed.
46
+ const result = normalizeMaterializedFilename('设置规则.md');
47
+ // No Chinese remains; just the extension part
48
+ expect(result).toBe('.md');
49
+ });
50
+ it('ligature "fi" decomposes to "fi"', () => {
51
+ // NFKD decomposes fi (fi ligature, U+FB01) to 'f' + 'i'
52
+ expect(normalizeMaterializedFilename('file.md')).toBe('file.md');
53
+ });
54
+ // ── Leading dots ──────────────────────────────────────────────────────────────
55
+ it('single leading dot is stripped', () => {
56
+ expect(normalizeMaterializedFilename('.hidden-rule.md')).toBe('hidden-rule.md');
57
+ });
58
+ it('multiple leading dots are stripped', () => {
59
+ expect(normalizeMaterializedFilename('..doubly-hidden.md')).toBe('doubly-hidden.md');
60
+ });
61
+ it('dot-only input returns empty string', () => {
62
+ expect(normalizeMaterializedFilename('.')).toBe('');
63
+ });
64
+ it('extension dot mid-name is preserved', () => {
65
+ // "foo.bar.mdc" → "foo.bar.mdc"
66
+ expect(normalizeMaterializedFilename('foo.bar.mdc')).toBe('foo.bar.mdc');
67
+ });
68
+ // ── Empty input ──────────────────────────────────────────────────────────────
69
+ it('empty string returns empty string', () => {
70
+ expect(normalizeMaterializedFilename('')).toBe('');
71
+ });
72
+ // ── Special character sequences ───────────────────────────────────────────────
73
+ it('multiple consecutive spaces → single hyphen', () => {
74
+ expect(normalizeMaterializedFilename('a b.md')).toBe('a-b.md');
75
+ });
76
+ it('underscores replaced with hyphens', () => {
77
+ expect(normalizeMaterializedFilename('my_rule_file.mdc')).toBe('my-rule-file.mdc');
78
+ });
79
+ it('leading and trailing hyphens are trimmed', () => {
80
+ expect(normalizeMaterializedFilename('-foo-')).toBe('foo');
81
+ });
82
+ it('mixed special chars collapse to single hyphen', () => {
83
+ expect(normalizeMaterializedFilename('foo!@#bar.mdc')).toBe('foo-bar.mdc');
84
+ });
85
+ // ── No extension ────────────────────────────────────────────────────────────
86
+ it('name without extension is normalized', () => {
87
+ expect(normalizeMaterializedFilename('MyRule')).toBe('myrule');
88
+ });
89
+ });
90
+ //# sourceMappingURL=normalizeMaterializedFilename.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeMaterializedFilename.test.js","sourceRoot":"","sources":["../../src/lib/normalizeMaterializedFilename.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Path B — Facilitator-pattern onboarding (2 exchanges max).
3
+ * WP-304: Shorter flow, silent extraction, auto-capture, governance proof.
4
+ */
5
+ import { type OnboardingExtraction } from './onboarding-shared.js';
6
+ export declare function runOnboardingPathB(workspaceName: string): Promise<void>;
7
+ /** Merge two extractions — second takes precedence for scalar fields, arrays concatenate. */
8
+ export declare function mergeExtractions(first: OnboardingExtraction | null, second: OnboardingExtraction): OnboardingExtraction;
9
+ export declare function dedupe(arr: string[]): string[];
10
+ //# sourceMappingURL=onboarding-path-b.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-path-b.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding-path-b.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAIL,KAAK,oBAAoB,EAG1B,MAAM,wBAAwB,CAAC;AAEhC,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyK7E;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,oBAAoB,GAAG,IAAI,EAClC,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CAUtB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9C"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Path B — Facilitator-pattern onboarding (2 exchanges max).
3
+ * WP-304: Shorter flow, silent extraction, auto-capture, governance proof.
4
+ */
5
+ import { kernelCall } from './client.js';
6
+ import { ask } from './prompts.js';
7
+ import { bold, dim, green, icons } from './style.js';
8
+ import { trackEvent } from './telemetry.js';
9
+ import { extractionToEntries, batchCaptureEntries, countWords, } from './onboarding-shared.js';
10
+ export async function runOnboardingPathB(workspaceName) {
11
+ trackEvent('setup_started', { mode: 'llm', path: 'B' });
12
+ const messages = [];
13
+ let totalUserWords = 0;
14
+ let lastExtraction = null;
15
+ // Exchange 1: Opening question
16
+ let greeting;
17
+ try {
18
+ const result = await kernelCall('onboarding.chat', {
19
+ messages: [],
20
+ workspaceName,
21
+ style: 'facilitator',
22
+ turnNumber: 1,
23
+ totalUserWords: 0,
24
+ });
25
+ if (!result?.content) {
26
+ await runPathBFallback(workspaceName);
27
+ return;
28
+ }
29
+ greeting = result.content;
30
+ }
31
+ catch {
32
+ await runPathBFallback(workspaceName);
33
+ return;
34
+ }
35
+ process.stdout.write(`\n ${greeting}\n\n`);
36
+ messages.push({ role: 'assistant', content: greeting });
37
+ // Get user's first answer
38
+ let userInput;
39
+ try {
40
+ userInput = await ask({
41
+ message: 'You',
42
+ placeholder: 'Tell me about your product...',
43
+ });
44
+ }
45
+ catch {
46
+ process.stdout.write(`\n ${dim('No worries! Run')} ${bold('pb capture')} ${dim('anytime to add knowledge.')}\n\n`);
47
+ return;
48
+ }
49
+ if (!userInput.trim()) {
50
+ process.stdout.write(`\n ${dim('No problem — explore with')} ${bold('pb orient -b')} ${dim('or capture with')} ${bold('pb capture')}\n\n`);
51
+ return;
52
+ }
53
+ messages.push({ role: 'user', content: userInput });
54
+ totalUserWords += countWords(userInput);
55
+ // Silent extraction after first answer (parallel with follow-up)
56
+ const [followUpResult, extractResult] = await Promise.allSettled([
57
+ kernelCall('onboarding.chat', {
58
+ messages,
59
+ workspaceName,
60
+ style: 'facilitator',
61
+ turnNumber: 2,
62
+ totalUserWords,
63
+ }),
64
+ kernelCall('onboarding.chat', {
65
+ messages,
66
+ workspaceName,
67
+ mode: 'extract',
68
+ }),
69
+ ]);
70
+ // Store first extraction if available
71
+ if (extractResult.status === 'fulfilled' && extractResult.value?.extraction) {
72
+ lastExtraction = extractResult.value.extraction;
73
+ }
74
+ // Show follow-up question
75
+ if (followUpResult.status === 'fulfilled' && followUpResult.value?.content) {
76
+ const followUp = followUpResult.value.content;
77
+ process.stdout.write(`\n ${followUp}\n\n`);
78
+ messages.push({ role: 'assistant', content: followUp });
79
+ // Get second answer
80
+ try {
81
+ const secondInput = await ask({ message: 'You', placeholder: '' });
82
+ if (secondInput.trim()) {
83
+ messages.push({ role: 'user', content: secondInput });
84
+ totalUserWords += countWords(secondInput);
85
+ // Second extraction — merge with first
86
+ try {
87
+ const result2 = await kernelCall('onboarding.chat', {
88
+ messages,
89
+ workspaceName,
90
+ mode: 'extract',
91
+ });
92
+ if (result2?.extraction) {
93
+ lastExtraction = mergeExtractions(lastExtraction, result2.extraction);
94
+ }
95
+ }
96
+ catch {
97
+ // Use first extraction if second fails
98
+ }
99
+ }
100
+ }
101
+ catch {
102
+ // User cancelled — use what we have
103
+ }
104
+ }
105
+ // Content floor — need at least something to extract
106
+ if (totalUserWords < 5 || !lastExtraction?.vision) {
107
+ // Try one final extraction if we don't have one
108
+ if (!lastExtraction?.vision && messages.filter((m) => m.role === 'user').length > 0) {
109
+ try {
110
+ const finalExtract = await kernelCall('onboarding.chat', {
111
+ messages,
112
+ workspaceName,
113
+ mode: 'extract',
114
+ });
115
+ if (finalExtract?.extraction) {
116
+ lastExtraction = finalExtract.extraction;
117
+ }
118
+ }
119
+ catch {
120
+ // Nothing to do
121
+ }
122
+ }
123
+ if (!lastExtraction?.vision) {
124
+ process.stdout.write(`\n ${dim('No problem — add knowledge anytime with')} ${bold('pb capture')}\n\n`);
125
+ trackEvent('setup_completed', { path: 'B', capturedCount: 0, reason: 'insufficient_content' });
126
+ return;
127
+ }
128
+ }
129
+ trackEvent('first_capture_prompted', { mode: 'llm', path: 'B' });
130
+ // Auto-capture — no approval UI in Path B
131
+ const allEntries = extractionToEntries(lastExtraction);
132
+ const entriesToCapture = allEntries
133
+ .filter((e) => e.name.trim().split(/\s+/).length >= 2 || e.collection === 'glossary')
134
+ .slice(0, 5);
135
+ if (entriesToCapture.length === 0) {
136
+ process.stdout.write(`\n ${dim('Nothing to save yet. Try')} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
137
+ return;
138
+ }
139
+ const { capturedCount, errors } = await batchCaptureEntries(entriesToCapture);
140
+ if (capturedCount > 0) {
141
+ process.stdout.write(`\n ${green(icons.pass)} Saved ${capturedCount} item${capturedCount === 1 ? '' : 's'} to your product brain.\n`);
142
+ trackEvent('capture_completed', { mode: 'llm', path: 'B', count: capturedCount });
143
+ }
144
+ if (errors.length > 0) {
145
+ process.stdout.write(`\n ${dim(`${errors.length} couldn't be saved.`)}\n`);
146
+ }
147
+ // Governance proof moment — show how captured knowledge participates in governance
148
+ await showGovernanceProof(lastExtraction.vision);
149
+ process.stdout.write(` ${dim('Explore with')} ${bold('pb orient -b')} ${dim('or add more with')} ${bold('pb capture')}\n\n`);
150
+ trackEvent('setup_completed', { path: 'B', capturedCount });
151
+ }
152
+ /** Merge two extractions — second takes precedence for scalar fields, arrays concatenate. */
153
+ export function mergeExtractions(first, second) {
154
+ if (!first)
155
+ return second;
156
+ return {
157
+ vision: second.vision || first.vision,
158
+ audience: second.audience || first.audience,
159
+ techStack: dedupe([...(first.techStack ?? []), ...(second.techStack ?? [])]),
160
+ keyTerms: dedupe([...(first.keyTerms ?? []), ...(second.keyTerms ?? [])]),
161
+ keyDecisions: dedupe([...(first.keyDecisions ?? []), ...(second.keyDecisions ?? [])]),
162
+ tensions: dedupe([...(first.tensions ?? []), ...(second.tensions ?? [])]),
163
+ };
164
+ }
165
+ export function dedupe(arr) {
166
+ return [...new Set(arr.map((s) => s.toLowerCase()))].map((lower) => arr.find((s) => s.toLowerCase() === lower) ?? lower);
167
+ }
168
+ /** Governance proof — show binding governance from captured knowledge via resolveTaskStartup. */
169
+ async function showGovernanceProof(vision) {
170
+ try {
171
+ const result = await kernelCall('chain.resolveTaskStartup', { task: vision });
172
+ const governance = result?.bindingGovernance;
173
+ const steering = result?.steeringContext ?? [];
174
+ const allItems = [
175
+ ...(governance?.principles ?? []),
176
+ ...(governance?.standards ?? []),
177
+ ...(governance?.businessRules ?? []),
178
+ ...steering.slice(0, 3),
179
+ ].filter((i) => i.name);
180
+ if (allItems.length > 0) {
181
+ process.stdout.write(`\n ${bold('Your product knowledge is now wired in:')}\n\n`);
182
+ for (const item of allItems.slice(0, 4)) {
183
+ process.stdout.write(` ${dim(icons.dot)} ${item.name}\n`);
184
+ }
185
+ if (allItems.length > 4) {
186
+ process.stdout.write(` ${dim(`...and ${allItems.length - 4} more`)}\n`);
187
+ }
188
+ process.stdout.write('\n');
189
+ }
190
+ }
191
+ catch {
192
+ // Governance proof is best-effort — fall back to orient-based proof
193
+ try {
194
+ const orient = await kernelCall('orient', { brief: true });
195
+ const items = orient?.sections?.flatMap((s) => s.items ?? []).filter((i) => i.name) ?? [];
196
+ if (items.length > 0) {
197
+ process.stdout.write(`\n ${bold("Here's how your product brain will use this:")}\n\n`);
198
+ for (const item of items.slice(0, 5)) {
199
+ process.stdout.write(` ${dim(icons.dot)} ${item.name}\n`);
200
+ }
201
+ process.stdout.write('\n');
202
+ }
203
+ }
204
+ catch {
205
+ // Both proofs failed — skip silently
206
+ }
207
+ }
208
+ }
209
+ /** Deterministic fallback when LLM is unavailable. Dynamic import avoids circular dependency with onboarding.ts. */
210
+ async function runPathBFallback(workspaceName) {
211
+ const { runFallbackOnboarding } = await import('./onboarding.js');
212
+ await runFallbackOnboarding(workspaceName);
213
+ }
214
+ //# sourceMappingURL=onboarding-path-b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-path-b.js","sourceRoot":"","sources":["../../src/lib/onboarding-path-b.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Onboarding conversation phases — the 5-phase arc for first-time setup.
3
+ * WP-304: Each phase has a directive (what the LLM should do) and exit criteria (what the CLI checks).
4
+ */
5
+ import type { ConversationPhase } from './conversation-phases.js';
6
+ export declare const ONBOARDING_PHASES: ConversationPhase[];
7
+ /** Check if user wants to skip the conversation. */
8
+ export declare function userWantsToSkip(text: string): boolean;
9
+ //# sourceMappingURL=onboarding-phases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-phases.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding-phases.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EA4GhD,CAAC;AAKF,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Onboarding conversation phases — the 5-phase arc for first-time setup.
3
+ * WP-304: Each phase has a directive (what the LLM should do) and exit criteria (what the CLI checks).
4
+ */
5
+ export const ONBOARDING_PHASES = [
6
+ {
7
+ id: 'greet',
8
+ directive: `Your job: Say hello and ask what they're building. One sentence. No fluff.
9
+ Example: "Hey! What are you building?"
10
+ Do NOT ask multiple questions. Do NOT explain Product Brain yet.`,
11
+ exitCriteria: [
12
+ {
13
+ name: 'greeting_sent',
14
+ check: (s) => s.phaseExchanges['greet'] !== undefined && (s.phaseExchanges['greet'] ?? 0) >= 0,
15
+ required: true,
16
+ },
17
+ ],
18
+ maxExchanges: 1,
19
+ },
20
+ {
21
+ id: 'explore',
22
+ directive: `Your job: Learn what they're building. Get specific.
23
+ If they gave a vague answer ("something big", "a tool", "an app"), pick one concrete detail and dig in.
24
+ Ask who uses it, what it actually does, or how it works today.
25
+ Good questions: "Who's using it?" / "What does it replace?" / "How does that work today?"
26
+ Bad questions: "What domain are you operating in?" / "Can you elaborate on that?"
27
+ Do NOT ask why they're trying Product Brain yet.
28
+ One question only.`,
29
+ exitCriteria: [
30
+ {
31
+ name: 'user_mentioned_product',
32
+ check: (s) => s.signals.mentionedProduct,
33
+ required: true,
34
+ },
35
+ {
36
+ name: 'has_substantive_answer',
37
+ check: (s) => s.signals.hasSubstantiveAnswer,
38
+ required: true,
39
+ },
40
+ ],
41
+ maxExchanges: 3,
42
+ },
43
+ {
44
+ id: 'deepen',
45
+ directive: `Your job: Understand what's hard about what they're building.
46
+ Pick ONE specific thing they mentioned and ask what breaks or why it's hard. Be direct and short.
47
+ Good: "What breaks when the agent doesn't have that context?" / "Where does the rework hit hardest?"
48
+ Bad: "What makes it hard to ensure X?" / "Can you tell me more about the challenges?"
49
+ Do NOT ask why they're trying Product Brain yet.
50
+ One question only.`,
51
+ exitCriteria: [
52
+ {
53
+ name: 'user_mentioned_challenge',
54
+ check: (s) => s.signals.mentionedChallenge,
55
+ required: false,
56
+ },
57
+ {
58
+ name: 'min_2_substantive_messages',
59
+ check: (s) => s.signals.substantiveMessageCount >= 2,
60
+ required: true,
61
+ },
62
+ ],
63
+ maxExchanges: 2,
64
+ },
65
+ {
66
+ id: 'why_pb',
67
+ directive: `Your job: Ask what made them try Product Brain. Be direct.
68
+ Examples: "What made you try Product Brain?" or "What problem are you hoping Product Brain solves?"
69
+ Do NOT summarize or synthesize yet.
70
+ One question only.`,
71
+ exitCriteria: [
72
+ {
73
+ name: 'user_answered_why_pb',
74
+ check: (s) => s.signals.mentionedWhyPB,
75
+ required: false,
76
+ },
77
+ {
78
+ name: 'min_total_words_25',
79
+ check: (s) => s.totalUserWords >= 25,
80
+ required: true,
81
+ },
82
+ {
83
+ name: 'min_3_substantive_messages',
84
+ check: (s) => s.signals.substantiveMessageCount >= 3,
85
+ required: true,
86
+ },
87
+ ],
88
+ maxExchanges: 2,
89
+ },
90
+ {
91
+ id: 'bridge',
92
+ directive: `Your job: Bridge the conversation to Product Brain's value. Speak as Product Brain (first person "I").
93
+ Keep it SHORT — 2-3 sentences max. Do NOT list bullet items. The CLI will handle showing examples.
94
+
95
+ Structure:
96
+ 1. One sentence connecting their problem to what you (PB) do. Use first person.
97
+ 2. One sentence showing you understood something specific they said.
98
+
99
+ Good example: "I can remember all of that across your AI sessions — so next time you open your AI tools, they already know about the decision rot problem and your cashflow automation. No more re-explaining."
100
+ Bad example: "Product Brain can help — it remembers context. Here's what I'd save: * item 1 * item 2 * item 3"
101
+
102
+ Do NOT list items. Do NOT use bullet points or asterisks. The CLI shows examples separately.
103
+ This is a STATEMENT. Do NOT ask a question. Do NOT end with a question mark.`,
104
+ exitCriteria: [
105
+ {
106
+ name: 'bridge_delivered',
107
+ check: (s) => (s.phaseExchanges['bridge'] ?? 0) >= 1,
108
+ required: true,
109
+ },
110
+ ],
111
+ maxExchanges: 1,
112
+ },
113
+ ];
114
+ /** User wants to skip — detected by regex on user input. */
115
+ const SKIP_PATTERNS = [/\b(?:skip|done|that'?s it|wrap up|let'?s go|finish|end)\b/i];
116
+ /** Check if user wants to skip the conversation. */
117
+ export function userWantsToSkip(text) {
118
+ return SKIP_PATTERNS.some((p) => p.test(text));
119
+ }
120
+ //# sourceMappingURL=onboarding-phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-phases.js","sourceRoot":"","sources":["../../src/lib/onboarding-phases.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAwB;IACpD;QACE,EAAE,EAAE,OAAO;QACX,SAAS,EAAE;;iEAEkD;QAC7D,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBAC9F,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC;KAChB;IACD;QACE,EAAE,EAAE,SAAS;QACb,SAAS,EAAE;;;;;;mBAMI;QACf,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB;gBACxC,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;gBAC5C,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC;KAChB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,SAAS,EAAE;;;;;mBAKI;QACf,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,0BAA0B;gBAChC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB;gBAC1C,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,IAAI,CAAC;gBACpD,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC;KAChB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,SAAS,EAAE;;;mBAGI;QACf,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc;gBACtC,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE;gBACpC,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,IAAI,CAAC;gBACpD,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC;KAChB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,SAAS,EAAE;;;;;;;;;;;6EAW8D;QACzE,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBACpD,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC;KAChB;CACF,CAAC;AAEF,4DAA4D;AAC5D,MAAM,aAAa,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAErF,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Shared onboarding utilities — types, extraction mapping, batch capture, retrieval proof.
3
+ * WP-304: Extracted from onboarding.ts to support both Path A and future Path B.
4
+ *
5
+ * DIVERGED from packages/mcp-server/src/tools/start-interview.ts:extractionToBatchEntries per DEC-522.
6
+ * Copy-and-own: CLI uses 120-char truncate limits (vs MCP's 80). Shared package deferred.
7
+ * Duplicated due to monorepo import boundary (BR-108).
8
+ */
9
+ /** @deprecated Use CaptureEntry[] directly — LLM now outputs entry-shaped data. */
10
+ export interface OnboardingExtraction {
11
+ vision: string;
12
+ audience?: string | null;
13
+ techStack?: string[] | null;
14
+ keyTerms?: string[] | null;
15
+ keyDecisions?: string[] | null;
16
+ tensions?: string[] | null;
17
+ }
18
+ /** Result from chain.createEntry. */
19
+ export interface CreateEntryResult {
20
+ entryId: string;
21
+ collection: string;
22
+ name: string;
23
+ status: string;
24
+ }
25
+ /** A single entry to capture. */
26
+ export interface CaptureEntry {
27
+ collection: string;
28
+ name: string;
29
+ description: string;
30
+ typeLabel: string;
31
+ }
32
+ /** Result from the onboarding.chat action — chat mode. */
33
+ export interface OnboardingChatResult {
34
+ content: string;
35
+ /** Coach pattern (Path A): whether the LLM judged the current topic's criteria as met. */
36
+ topicComplete?: boolean;
37
+ /** @deprecated Path B facilitator only. */
38
+ phase?: string;
39
+ signals?: {
40
+ describedProduct?: boolean;
41
+ describedProblem?: boolean;
42
+ answeredWhyPB?: boolean;
43
+ quotableFragments?: string[];
44
+ } | null;
45
+ }
46
+ /** Result from the onboarding.chat action — extract mode. */
47
+ export interface OnboardingExtractResult {
48
+ entries: CaptureEntry[];
49
+ /** @deprecated Backward-compat for Path B. Remove when Path B migrates to entries[]. */
50
+ extraction?: OnboardingExtraction;
51
+ }
52
+ export declare function truncate(str: string, maxLen: number): string;
53
+ export declare function firstNWords(str: string, n: number): string;
54
+ export declare function countWords(text: string): number;
55
+ /**
56
+ * Validate and clean LLM-extracted entries. The LLM outputs entry-shaped data directly;
57
+ * this function validates shape, deduplicates, and caps the result.
58
+ */
59
+ export declare function validateExtractedEntries(entries: unknown[]): CaptureEntry[];
60
+ /** @deprecated Use validateExtractedEntries instead — kept for backward compat during migration. */
61
+ export declare function extractionToEntries(extracted: OnboardingExtraction): CaptureEntry[];
62
+ /**
63
+ * Display one entry example with schema structure.
64
+ * Shows typeLabel (from LLM), name, and description in a clean format.
65
+ */
66
+ export declare function displayEntryExample(entry: CaptureEntry): void;
67
+ /**
68
+ * Batch-capture entries via MCP chain.createEntry.
69
+ * Returns count of captured entries and any error messages.
70
+ */
71
+ export declare function batchCaptureEntries(entries: CaptureEntry[]): Promise<{
72
+ capturedCount: number;
73
+ errors: string[];
74
+ }>;
75
+ /**
76
+ * Show deterministic proof of what was captured — displays the entries that were just saved.
77
+ * Guaranteed to show content (no network call that can fail or return empty).
78
+ * Satisfies BR-141: "First-session flow MUST end with retrieval demonstration."
79
+ */
80
+ export declare function showCapturedSummary(entries: CaptureEntry[], capturedCount: number): void;
81
+ //# sourceMappingURL=onboarding-shared.d.ts.map