@productbrain/cli 0.1.0-beta.7 → 0.1.0-beta.71

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 (612) hide show
  1. package/README.md +98 -30
  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__/batch-transformations.test.d.ts +2 -0
  11. package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
  12. package/dist/__tests__/batch-transformations.test.js +263 -0
  13. package/dist/__tests__/batch-transformations.test.js.map +1 -0
  14. package/dist/__tests__/capture.test.d.ts +2 -0
  15. package/dist/__tests__/capture.test.d.ts.map +1 -0
  16. package/dist/__tests__/capture.test.js +377 -0
  17. package/dist/__tests__/capture.test.js.map +1 -0
  18. package/dist/__tests__/config.test.d.ts +8 -0
  19. package/dist/__tests__/config.test.d.ts.map +1 -0
  20. package/dist/__tests__/config.test.js +166 -0
  21. package/dist/__tests__/config.test.js.map +1 -0
  22. package/dist/__tests__/constants.test.d.ts +2 -0
  23. package/dist/__tests__/constants.test.d.ts.map +1 -0
  24. package/dist/__tests__/constants.test.js +141 -0
  25. package/dist/__tests__/constants.test.js.map +1 -0
  26. package/dist/__tests__/constellation.test.d.ts +2 -0
  27. package/dist/__tests__/constellation.test.d.ts.map +1 -0
  28. package/dist/__tests__/constellation.test.js +254 -0
  29. package/dist/__tests__/constellation.test.js.map +1 -0
  30. package/dist/__tests__/context-strategy.test.d.ts +2 -0
  31. package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
  32. package/dist/__tests__/context-strategy.test.js +79 -0
  33. package/dist/__tests__/context-strategy.test.js.map +1 -0
  34. package/dist/__tests__/errors.test.d.ts +2 -0
  35. package/dist/__tests__/errors.test.d.ts.map +1 -0
  36. package/dist/__tests__/errors.test.js +117 -0
  37. package/dist/__tests__/errors.test.js.map +1 -0
  38. package/dist/__tests__/experiment.test.d.ts +6 -0
  39. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  40. package/dist/__tests__/experiment.test.js +69 -0
  41. package/dist/__tests__/experiment.test.js.map +1 -0
  42. package/dist/__tests__/fields.test.d.ts +2 -0
  43. package/dist/__tests__/fields.test.d.ts.map +1 -0
  44. package/dist/__tests__/fields.test.js +238 -0
  45. package/dist/__tests__/fields.test.js.map +1 -0
  46. package/dist/__tests__/glossary.test.d.ts +2 -0
  47. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  48. package/dist/__tests__/glossary.test.js +32 -0
  49. package/dist/__tests__/glossary.test.js.map +1 -0
  50. package/dist/__tests__/handshake.test.d.ts +2 -0
  51. package/dist/__tests__/handshake.test.d.ts.map +1 -0
  52. package/dist/__tests__/handshake.test.js +196 -0
  53. package/dist/__tests__/handshake.test.js.map +1 -0
  54. package/dist/__tests__/ingest.test.js +110 -12
  55. package/dist/__tests__/ingest.test.js.map +1 -1
  56. package/dist/__tests__/init.test.d.ts +7 -0
  57. package/dist/__tests__/init.test.d.ts.map +1 -0
  58. package/dist/__tests__/init.test.js +146 -0
  59. package/dist/__tests__/init.test.js.map +1 -0
  60. package/dist/__tests__/login.test.d.ts +2 -0
  61. package/dist/__tests__/login.test.d.ts.map +1 -0
  62. package/dist/__tests__/login.test.js +167 -0
  63. package/dist/__tests__/login.test.js.map +1 -0
  64. package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
  65. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  66. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  67. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  68. package/dist/__tests__/onboarding.test.d.ts +6 -0
  69. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  70. package/dist/__tests__/onboarding.test.js +347 -0
  71. package/dist/__tests__/onboarding.test.js.map +1 -0
  72. package/dist/__tests__/orient.test.d.ts +2 -0
  73. package/dist/__tests__/orient.test.d.ts.map +1 -0
  74. package/dist/__tests__/orient.test.js +143 -0
  75. package/dist/__tests__/orient.test.js.map +1 -0
  76. package/dist/__tests__/profiles.test.d.ts +2 -0
  77. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  78. package/dist/__tests__/profiles.test.js +168 -0
  79. package/dist/__tests__/profiles.test.js.map +1 -0
  80. package/dist/__tests__/promote.test.d.ts +2 -0
  81. package/dist/__tests__/promote.test.d.ts.map +1 -0
  82. package/dist/__tests__/promote.test.js +161 -0
  83. package/dist/__tests__/promote.test.js.map +1 -0
  84. package/dist/__tests__/prompts.test.d.ts +6 -0
  85. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  86. package/dist/__tests__/prompts.test.js +146 -0
  87. package/dist/__tests__/prompts.test.js.map +1 -0
  88. package/dist/__tests__/proposals.test.d.ts +2 -0
  89. package/dist/__tests__/proposals.test.d.ts.map +1 -0
  90. package/dist/__tests__/proposals.test.js +167 -0
  91. package/dist/__tests__/proposals.test.js.map +1 -0
  92. package/dist/__tests__/relate.test.d.ts +2 -0
  93. package/dist/__tests__/relate.test.d.ts.map +1 -0
  94. package/dist/__tests__/relate.test.js +103 -0
  95. package/dist/__tests__/relate.test.js.map +1 -0
  96. package/dist/__tests__/repo-detect.test.d.ts +2 -0
  97. package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
  98. package/dist/__tests__/repo-detect.test.js +215 -0
  99. package/dist/__tests__/repo-detect.test.js.map +1 -0
  100. package/dist/__tests__/runner.test.d.ts +2 -0
  101. package/dist/__tests__/runner.test.d.ts.map +1 -0
  102. package/dist/__tests__/runner.test.js +219 -0
  103. package/dist/__tests__/runner.test.js.map +1 -0
  104. package/dist/__tests__/session-state-machine.test.d.ts +2 -0
  105. package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
  106. package/dist/__tests__/session-state-machine.test.js +154 -0
  107. package/dist/__tests__/session-state-machine.test.js.map +1 -0
  108. package/dist/__tests__/session-touch.test.d.ts +2 -0
  109. package/dist/__tests__/session-touch.test.d.ts.map +1 -0
  110. package/dist/__tests__/session-touch.test.js +134 -0
  111. package/dist/__tests__/session-touch.test.js.map +1 -0
  112. package/dist/__tests__/session.test.d.ts +2 -0
  113. package/dist/__tests__/session.test.d.ts.map +1 -0
  114. package/dist/__tests__/session.test.js +46 -0
  115. package/dist/__tests__/session.test.js.map +1 -0
  116. package/dist/__tests__/setup.test.d.ts +2 -0
  117. package/dist/__tests__/setup.test.d.ts.map +1 -0
  118. package/dist/__tests__/setup.test.js +141 -0
  119. package/dist/__tests__/setup.test.js.map +1 -0
  120. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  121. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  122. package/dist/__tests__/spinner-labels.test.js +23 -0
  123. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  124. package/dist/__tests__/strip.test.d.ts +2 -0
  125. package/dist/__tests__/strip.test.d.ts.map +1 -0
  126. package/dist/__tests__/strip.test.js +136 -0
  127. package/dist/__tests__/strip.test.js.map +1 -0
  128. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  129. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  130. package/dist/__tests__/surface-profiles.test.js +233 -0
  131. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  132. package/dist/__tests__/update.test.d.ts +2 -0
  133. package/dist/__tests__/update.test.d.ts.map +1 -0
  134. package/dist/__tests__/update.test.js +228 -0
  135. package/dist/__tests__/update.test.js.map +1 -0
  136. package/dist/__tests__/workspace.test.d.ts +2 -0
  137. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  138. package/dist/__tests__/workspace.test.js +308 -0
  139. package/dist/__tests__/workspace.test.js.map +1 -0
  140. package/dist/commands/accept.d.ts +18 -0
  141. package/dist/commands/accept.d.ts.map +1 -0
  142. package/dist/commands/accept.js +76 -0
  143. package/dist/commands/accept.js.map +1 -0
  144. package/dist/commands/admin/cockpit.d.ts +88 -0
  145. package/dist/commands/admin/cockpit.d.ts.map +1 -0
  146. package/dist/commands/admin/cockpit.js +409 -0
  147. package/dist/commands/admin/cockpit.js.map +1 -0
  148. package/dist/commands/admin/index.d.ts +21 -0
  149. package/dist/commands/admin/index.d.ts.map +1 -0
  150. package/dist/commands/admin/index.js +254 -0
  151. package/dist/commands/admin/index.js.map +1 -0
  152. package/dist/commands/admin/inspect.d.ts +21 -0
  153. package/dist/commands/admin/inspect.d.ts.map +1 -0
  154. package/dist/commands/admin/inspect.js +536 -0
  155. package/dist/commands/admin/inspect.js.map +1 -0
  156. package/dist/commands/admin/inspect.test.d.ts +7 -0
  157. package/dist/commands/admin/inspect.test.d.ts.map +1 -0
  158. package/dist/commands/admin/inspect.test.js +71 -0
  159. package/dist/commands/admin/inspect.test.js.map +1 -0
  160. package/dist/commands/admin/seed.d.ts +32 -0
  161. package/dist/commands/admin/seed.d.ts.map +1 -0
  162. package/dist/commands/admin/seed.js +527 -0
  163. package/dist/commands/admin/seed.js.map +1 -0
  164. package/dist/commands/admin/seed.test.d.ts +6 -0
  165. package/dist/commands/admin/seed.test.d.ts.map +1 -0
  166. package/dist/commands/admin/seed.test.js +65 -0
  167. package/dist/commands/admin/seed.test.js.map +1 -0
  168. package/dist/commands/audit.d.ts +25 -0
  169. package/dist/commands/audit.d.ts.map +1 -0
  170. package/dist/commands/audit.js +188 -0
  171. package/dist/commands/audit.js.map +1 -0
  172. package/dist/commands/brand-pack.d.ts +2 -0
  173. package/dist/commands/brand-pack.d.ts.map +1 -0
  174. package/dist/commands/brand-pack.js +25 -0
  175. package/dist/commands/brand-pack.js.map +1 -0
  176. package/dist/commands/brief.d.ts +28 -0
  177. package/dist/commands/brief.d.ts.map +1 -0
  178. package/dist/commands/brief.js +75 -0
  179. package/dist/commands/brief.js.map +1 -0
  180. package/dist/commands/capture.d.ts +30 -0
  181. package/dist/commands/capture.d.ts.map +1 -0
  182. package/dist/commands/capture.js +385 -0
  183. package/dist/commands/capture.js.map +1 -0
  184. package/dist/commands/chain-walk.d.ts +14 -0
  185. package/dist/commands/chain-walk.d.ts.map +1 -0
  186. package/dist/commands/chain-walk.js +38 -0
  187. package/dist/commands/chain-walk.js.map +1 -0
  188. package/dist/commands/changes.d.ts +11 -0
  189. package/dist/commands/changes.d.ts.map +1 -0
  190. package/dist/commands/changes.js +46 -0
  191. package/dist/commands/changes.js.map +1 -0
  192. package/dist/commands/codex-prep.d.ts +12 -0
  193. package/dist/commands/codex-prep.d.ts.map +1 -0
  194. package/dist/commands/codex-prep.js +122 -0
  195. package/dist/commands/codex-prep.js.map +1 -0
  196. package/dist/commands/collections.d.ts +22 -0
  197. package/dist/commands/collections.d.ts.map +1 -0
  198. package/dist/commands/collections.js +77 -0
  199. package/dist/commands/collections.js.map +1 -0
  200. package/dist/commands/connect-integration.test.d.ts +7 -0
  201. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  202. package/dist/commands/connect-integration.test.js +200 -0
  203. package/dist/commands/connect-integration.test.js.map +1 -0
  204. package/dist/commands/connect.d.ts +21 -0
  205. package/dist/commands/connect.d.ts.map +1 -0
  206. package/dist/commands/connect.js +279 -0
  207. package/dist/commands/connect.js.map +1 -0
  208. package/dist/commands/connect.test.d.ts +6 -0
  209. package/dist/commands/connect.test.d.ts.map +1 -0
  210. package/dist/commands/connect.test.js +230 -0
  211. package/dist/commands/connect.test.js.map +1 -0
  212. package/dist/commands/constellation.d.ts +11 -0
  213. package/dist/commands/constellation.d.ts.map +1 -0
  214. package/dist/commands/constellation.js +33 -0
  215. package/dist/commands/constellation.js.map +1 -0
  216. package/dist/commands/context.d.ts +2 -1
  217. package/dist/commands/context.d.ts.map +1 -1
  218. package/dist/commands/context.js +21 -10
  219. package/dist/commands/context.js.map +1 -1
  220. package/dist/commands/cross-cut.d.ts +11 -0
  221. package/dist/commands/cross-cut.d.ts.map +1 -0
  222. package/dist/commands/cross-cut.js +23 -0
  223. package/dist/commands/cross-cut.js.map +1 -0
  224. package/dist/commands/doctor.d.ts +18 -0
  225. package/dist/commands/doctor.d.ts.map +1 -0
  226. package/dist/commands/doctor.js +232 -0
  227. package/dist/commands/doctor.js.map +1 -0
  228. package/dist/commands/doctor.test.d.ts +8 -0
  229. package/dist/commands/doctor.test.d.ts.map +1 -0
  230. package/dist/commands/doctor.test.js +311 -0
  231. package/dist/commands/doctor.test.js.map +1 -0
  232. package/dist/commands/fields.d.ts +9 -0
  233. package/dist/commands/fields.d.ts.map +1 -0
  234. package/dist/commands/fields.js +30 -0
  235. package/dist/commands/fields.js.map +1 -0
  236. package/dist/commands/get.d.ts +8 -1
  237. package/dist/commands/get.d.ts.map +1 -1
  238. package/dist/commands/get.js +61 -8
  239. package/dist/commands/get.js.map +1 -1
  240. package/dist/commands/handshake.d.ts +28 -0
  241. package/dist/commands/handshake.d.ts.map +1 -0
  242. package/dist/commands/handshake.js +617 -0
  243. package/dist/commands/handshake.js.map +1 -0
  244. package/dist/commands/ingest.d.ts +8 -2
  245. package/dist/commands/ingest.d.ts.map +1 -1
  246. package/dist/commands/ingest.js +151 -28
  247. package/dist/commands/ingest.js.map +1 -1
  248. package/dist/commands/init.d.ts +14 -0
  249. package/dist/commands/init.d.ts.map +1 -0
  250. package/dist/commands/init.js +117 -0
  251. package/dist/commands/init.js.map +1 -0
  252. package/dist/commands/login.d.ts +4 -0
  253. package/dist/commands/login.d.ts.map +1 -1
  254. package/dist/commands/login.js +101 -38
  255. package/dist/commands/login.js.map +1 -1
  256. package/dist/commands/orient.d.ts +107 -1
  257. package/dist/commands/orient.d.ts.map +1 -1
  258. package/dist/commands/orient.js +25 -9
  259. package/dist/commands/orient.js.map +1 -1
  260. package/dist/commands/profile.d.ts +24 -0
  261. package/dist/commands/profile.d.ts.map +1 -0
  262. package/dist/commands/profile.js +82 -0
  263. package/dist/commands/profile.js.map +1 -0
  264. package/dist/commands/promote.d.ts +12 -0
  265. package/dist/commands/promote.d.ts.map +1 -0
  266. package/dist/commands/promote.js +90 -0
  267. package/dist/commands/promote.js.map +1 -0
  268. package/dist/commands/proposals.d.ts +9 -0
  269. package/dist/commands/proposals.d.ts.map +1 -0
  270. package/dist/commands/proposals.js +24 -0
  271. package/dist/commands/proposals.js.map +1 -0
  272. package/dist/commands/reject.d.ts +14 -0
  273. package/dist/commands/reject.d.ts.map +1 -0
  274. package/dist/commands/reject.js +43 -0
  275. package/dist/commands/reject.js.map +1 -0
  276. package/dist/commands/relate.d.ts +16 -0
  277. package/dist/commands/relate.d.ts.map +1 -0
  278. package/dist/commands/relate.js +98 -0
  279. package/dist/commands/relate.js.map +1 -0
  280. package/dist/commands/search.d.ts +1 -0
  281. package/dist/commands/search.d.ts.map +1 -1
  282. package/dist/commands/search.js +6 -4
  283. package/dist/commands/search.js.map +1 -1
  284. package/dist/commands/session.d.ts +20 -0
  285. package/dist/commands/session.d.ts.map +1 -0
  286. package/dist/commands/session.js +203 -0
  287. package/dist/commands/session.js.map +1 -0
  288. package/dist/commands/setup.d.ts +15 -0
  289. package/dist/commands/setup.d.ts.map +1 -0
  290. package/dist/commands/setup.js +168 -0
  291. package/dist/commands/setup.js.map +1 -0
  292. package/dist/commands/update.d.ts +17 -0
  293. package/dist/commands/update.d.ts.map +1 -0
  294. package/dist/commands/update.js +178 -0
  295. package/dist/commands/update.js.map +1 -0
  296. package/dist/commands/usage.d.ts +40 -0
  297. package/dist/commands/usage.d.ts.map +1 -0
  298. package/dist/commands/usage.js +232 -0
  299. package/dist/commands/usage.js.map +1 -0
  300. package/dist/commands/verify.d.ts +13 -0
  301. package/dist/commands/verify.d.ts.map +1 -0
  302. package/dist/commands/verify.js +49 -0
  303. package/dist/commands/verify.js.map +1 -0
  304. package/dist/commands/workspace.d.ts +41 -0
  305. package/dist/commands/workspace.d.ts.map +1 -0
  306. package/dist/commands/workspace.js +239 -0
  307. package/dist/commands/workspace.js.map +1 -0
  308. package/dist/formatters/audit.d.ts +46 -0
  309. package/dist/formatters/audit.d.ts.map +1 -0
  310. package/dist/formatters/audit.js +81 -0
  311. package/dist/formatters/audit.js.map +1 -0
  312. package/dist/formatters/brief.d.ts +112 -0
  313. package/dist/formatters/brief.d.ts.map +1 -0
  314. package/dist/formatters/brief.js +179 -0
  315. package/dist/formatters/brief.js.map +1 -0
  316. package/dist/formatters/capture.d.ts +48 -0
  317. package/dist/formatters/capture.d.ts.map +1 -0
  318. package/dist/formatters/capture.js +77 -0
  319. package/dist/formatters/capture.js.map +1 -0
  320. package/dist/formatters/chain-walk.d.ts +33 -0
  321. package/dist/formatters/chain-walk.d.ts.map +1 -0
  322. package/dist/formatters/chain-walk.js +54 -0
  323. package/dist/formatters/chain-walk.js.map +1 -0
  324. package/dist/formatters/changes.d.ts +25 -0
  325. package/dist/formatters/changes.d.ts.map +1 -0
  326. package/dist/formatters/changes.js +60 -0
  327. package/dist/formatters/changes.js.map +1 -0
  328. package/dist/formatters/collections.d.ts +40 -0
  329. package/dist/formatters/collections.d.ts.map +1 -0
  330. package/dist/formatters/collections.js +93 -0
  331. package/dist/formatters/collections.js.map +1 -0
  332. package/dist/formatters/constellation.d.ts +34 -0
  333. package/dist/formatters/constellation.d.ts.map +1 -0
  334. package/dist/formatters/constellation.js +38 -0
  335. package/dist/formatters/constellation.js.map +1 -0
  336. package/dist/formatters/cross-cut.d.ts +21 -0
  337. package/dist/formatters/cross-cut.d.ts.map +1 -0
  338. package/dist/formatters/cross-cut.js +32 -0
  339. package/dist/formatters/cross-cut.js.map +1 -0
  340. package/dist/formatters/entry.d.ts +11 -4
  341. package/dist/formatters/entry.d.ts.map +1 -1
  342. package/dist/formatters/entry.js +24 -8
  343. package/dist/formatters/entry.js.map +1 -1
  344. package/dist/formatters/fields.d.ts +32 -0
  345. package/dist/formatters/fields.d.ts.map +1 -0
  346. package/dist/formatters/fields.js +49 -0
  347. package/dist/formatters/fields.js.map +1 -0
  348. package/dist/formatters/handshake.d.ts +24 -0
  349. package/dist/formatters/handshake.d.ts.map +1 -0
  350. package/dist/formatters/handshake.js +69 -0
  351. package/dist/formatters/handshake.js.map +1 -0
  352. package/dist/formatters/orient.d.ts +104 -1
  353. package/dist/formatters/orient.d.ts.map +1 -1
  354. package/dist/formatters/orient.js +140 -17
  355. package/dist/formatters/orient.js.map +1 -1
  356. package/dist/formatters/promote.d.ts +30 -0
  357. package/dist/formatters/promote.d.ts.map +1 -0
  358. package/dist/formatters/promote.js +39 -0
  359. package/dist/formatters/promote.js.map +1 -0
  360. package/dist/formatters/proposals.d.ts +45 -0
  361. package/dist/formatters/proposals.d.ts.map +1 -0
  362. package/dist/formatters/proposals.js +62 -0
  363. package/dist/formatters/proposals.js.map +1 -0
  364. package/dist/formatters/relate.d.ts +14 -0
  365. package/dist/formatters/relate.d.ts.map +1 -0
  366. package/dist/formatters/relate.js +16 -0
  367. package/dist/formatters/relate.js.map +1 -0
  368. package/dist/formatters/search.d.ts +0 -4
  369. package/dist/formatters/search.d.ts.map +1 -1
  370. package/dist/formatters/search.js +4 -1
  371. package/dist/formatters/search.js.map +1 -1
  372. package/dist/formatters/session.d.ts +11 -0
  373. package/dist/formatters/session.d.ts.map +1 -0
  374. package/dist/formatters/session.js +53 -0
  375. package/dist/formatters/session.js.map +1 -0
  376. package/dist/formatters/update.d.ts +17 -0
  377. package/dist/formatters/update.d.ts.map +1 -0
  378. package/dist/formatters/update.js +45 -0
  379. package/dist/formatters/update.js.map +1 -0
  380. package/dist/formatters/verify.d.ts +11 -0
  381. package/dist/formatters/verify.d.ts.map +1 -0
  382. package/dist/formatters/verify.js +11 -0
  383. package/dist/formatters/verify.js.map +1 -0
  384. package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
  385. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
  386. package/dist/generators/__tests__/surface-profiles.test.js +89 -0
  387. package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
  388. package/dist/generators/adapters.d.ts +44 -0
  389. package/dist/generators/adapters.d.ts.map +1 -0
  390. package/dist/generators/adapters.js +290 -0
  391. package/dist/generators/adapters.js.map +1 -0
  392. package/dist/generators/adapters.test.d.ts +2 -0
  393. package/dist/generators/adapters.test.d.ts.map +1 -0
  394. package/dist/generators/adapters.test.js +27 -0
  395. package/dist/generators/adapters.test.js.map +1 -0
  396. package/dist/generators/archetypes.d.ts +52 -0
  397. package/dist/generators/archetypes.d.ts.map +1 -0
  398. package/dist/generators/archetypes.js +153 -0
  399. package/dist/generators/archetypes.js.map +1 -0
  400. package/dist/generators/archetypes.test.d.ts +2 -0
  401. package/dist/generators/archetypes.test.d.ts.map +1 -0
  402. package/dist/generators/archetypes.test.js +237 -0
  403. package/dist/generators/archetypes.test.js.map +1 -0
  404. package/dist/generators/briefing-md.d.ts +8 -0
  405. package/dist/generators/briefing-md.d.ts.map +1 -0
  406. package/dist/generators/briefing-md.js +51 -0
  407. package/dist/generators/briefing-md.js.map +1 -0
  408. package/dist/generators/chain-classifier.d.ts +49 -0
  409. package/dist/generators/chain-classifier.d.ts.map +1 -0
  410. package/dist/generators/chain-classifier.js +180 -0
  411. package/dist/generators/chain-classifier.js.map +1 -0
  412. package/dist/generators/chain-classifier.test.d.ts +2 -0
  413. package/dist/generators/chain-classifier.test.d.ts.map +1 -0
  414. package/dist/generators/chain-classifier.test.js +257 -0
  415. package/dist/generators/chain-classifier.test.js.map +1 -0
  416. package/dist/generators/chain-rules.d.ts +42 -0
  417. package/dist/generators/chain-rules.d.ts.map +1 -0
  418. package/dist/generators/chain-rules.js +144 -0
  419. package/dist/generators/chain-rules.js.map +1 -0
  420. package/dist/generators/chain-rules.test.d.ts +2 -0
  421. package/dist/generators/chain-rules.test.d.ts.map +1 -0
  422. package/dist/generators/chain-rules.test.js +179 -0
  423. package/dist/generators/chain-rules.test.js.map +1 -0
  424. package/dist/generators/context-md.d.ts +8 -0
  425. package/dist/generators/context-md.d.ts.map +1 -0
  426. package/dist/generators/context-md.js +134 -0
  427. package/dist/generators/context-md.js.map +1 -0
  428. package/dist/generators/handshake-diff.d.ts +67 -0
  429. package/dist/generators/handshake-diff.d.ts.map +1 -0
  430. package/dist/generators/handshake-diff.js +183 -0
  431. package/dist/generators/handshake-diff.js.map +1 -0
  432. package/dist/generators/handshake-diff.test.d.ts +2 -0
  433. package/dist/generators/handshake-diff.test.d.ts.map +1 -0
  434. package/dist/generators/handshake-diff.test.js +264 -0
  435. package/dist/generators/handshake-diff.test.js.map +1 -0
  436. package/dist/generators/portable-knowledge.d.ts +143 -0
  437. package/dist/generators/portable-knowledge.d.ts.map +1 -0
  438. package/dist/generators/portable-knowledge.js +504 -0
  439. package/dist/generators/portable-knowledge.js.map +1 -0
  440. package/dist/generators/portable-knowledge.test.d.ts +2 -0
  441. package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
  442. package/dist/generators/portable-knowledge.test.js +927 -0
  443. package/dist/generators/portable-knowledge.test.js.map +1 -0
  444. package/dist/generators/surface-profiles.d.ts +49 -0
  445. package/dist/generators/surface-profiles.d.ts.map +1 -0
  446. package/dist/generators/surface-profiles.js +98 -0
  447. package/dist/generators/surface-profiles.js.map +1 -0
  448. package/dist/index.d.ts +3 -2
  449. package/dist/index.d.ts.map +1 -1
  450. package/dist/index.js +670 -37
  451. package/dist/index.js.map +1 -1
  452. package/dist/lib/activation.d.ts +28 -0
  453. package/dist/lib/activation.d.ts.map +1 -0
  454. package/dist/lib/activation.js +57 -0
  455. package/dist/lib/activation.js.map +1 -0
  456. package/dist/lib/activation.test.d.ts +6 -0
  457. package/dist/lib/activation.test.d.ts.map +1 -0
  458. package/dist/lib/activation.test.js +121 -0
  459. package/dist/lib/activation.test.js.map +1 -0
  460. package/dist/lib/client.d.ts +62 -1
  461. package/dist/lib/client.d.ts.map +1 -1
  462. package/dist/lib/client.js +258 -12
  463. package/dist/lib/client.js.map +1 -1
  464. package/dist/lib/config.d.ts +84 -4
  465. package/dist/lib/config.d.ts.map +1 -1
  466. package/dist/lib/config.js +322 -42
  467. package/dist/lib/config.js.map +1 -1
  468. package/dist/lib/constants.d.ts +42 -0
  469. package/dist/lib/constants.d.ts.map +1 -0
  470. package/dist/lib/constants.js +76 -0
  471. package/dist/lib/constants.js.map +1 -0
  472. package/dist/lib/conversation-engine.d.ts +45 -0
  473. package/dist/lib/conversation-engine.d.ts.map +1 -0
  474. package/dist/lib/conversation-engine.js +112 -0
  475. package/dist/lib/conversation-engine.js.map +1 -0
  476. package/dist/lib/conversation-phases.d.ts +59 -0
  477. package/dist/lib/conversation-phases.d.ts.map +1 -0
  478. package/dist/lib/conversation-phases.js +11 -0
  479. package/dist/lib/conversation-phases.js.map +1 -0
  480. package/dist/lib/conversation-signals.d.ts +30 -0
  481. package/dist/lib/conversation-signals.d.ts.map +1 -0
  482. package/dist/lib/conversation-signals.js +64 -0
  483. package/dist/lib/conversation-signals.js.map +1 -0
  484. package/dist/lib/deployment.d.ts +23 -0
  485. package/dist/lib/deployment.d.ts.map +1 -0
  486. package/dist/lib/deployment.js +78 -0
  487. package/dist/lib/deployment.js.map +1 -0
  488. package/dist/lib/deployment.test.d.ts +5 -0
  489. package/dist/lib/deployment.test.d.ts.map +1 -0
  490. package/dist/lib/deployment.test.js +54 -0
  491. package/dist/lib/deployment.test.js.map +1 -0
  492. package/dist/lib/errors.d.ts +58 -0
  493. package/dist/lib/errors.d.ts.map +1 -0
  494. package/dist/lib/errors.js +67 -0
  495. package/dist/lib/errors.js.map +1 -0
  496. package/dist/lib/experiment.d.ts +18 -0
  497. package/dist/lib/experiment.d.ts.map +1 -0
  498. package/dist/lib/experiment.js +28 -0
  499. package/dist/lib/experiment.js.map +1 -0
  500. package/dist/lib/format.d.ts +10 -0
  501. package/dist/lib/format.d.ts.map +1 -0
  502. package/dist/lib/format.js +27 -0
  503. package/dist/lib/format.js.map +1 -0
  504. package/dist/lib/glossary.d.ts +19 -0
  505. package/dist/lib/glossary.d.ts.map +1 -0
  506. package/dist/lib/glossary.js +53 -0
  507. package/dist/lib/glossary.js.map +1 -0
  508. package/dist/lib/onboarding-path-b.d.ts +10 -0
  509. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  510. package/dist/lib/onboarding-path-b.js +214 -0
  511. package/dist/lib/onboarding-path-b.js.map +1 -0
  512. package/dist/lib/onboarding-phases.d.ts +9 -0
  513. package/dist/lib/onboarding-phases.d.ts.map +1 -0
  514. package/dist/lib/onboarding-phases.js +120 -0
  515. package/dist/lib/onboarding-phases.js.map +1 -0
  516. package/dist/lib/onboarding-shared.d.ts +81 -0
  517. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  518. package/dist/lib/onboarding-shared.js +190 -0
  519. package/dist/lib/onboarding-shared.js.map +1 -0
  520. package/dist/lib/onboarding-topics.d.ts +27 -0
  521. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  522. package/dist/lib/onboarding-topics.js +57 -0
  523. package/dist/lib/onboarding-topics.js.map +1 -0
  524. package/dist/lib/onboarding.d.ts +17 -0
  525. package/dist/lib/onboarding.d.ts.map +1 -0
  526. package/dist/lib/onboarding.js +350 -0
  527. package/dist/lib/onboarding.js.map +1 -0
  528. package/dist/lib/profiles.d.ts +39 -0
  529. package/dist/lib/profiles.d.ts.map +1 -0
  530. package/dist/lib/profiles.js +185 -0
  531. package/dist/lib/profiles.js.map +1 -0
  532. package/dist/lib/prompts.d.ts +65 -0
  533. package/dist/lib/prompts.d.ts.map +1 -0
  534. package/dist/lib/prompts.js +132 -0
  535. package/dist/lib/prompts.js.map +1 -0
  536. package/dist/lib/repo-detect.d.ts +33 -0
  537. package/dist/lib/repo-detect.d.ts.map +1 -0
  538. package/dist/lib/repo-detect.js +83 -0
  539. package/dist/lib/repo-detect.js.map +1 -0
  540. package/dist/lib/runner.d.ts +33 -0
  541. package/dist/lib/runner.d.ts.map +1 -0
  542. package/dist/lib/runner.js +79 -0
  543. package/dist/lib/runner.js.map +1 -0
  544. package/dist/lib/session.d.ts +42 -0
  545. package/dist/lib/session.d.ts.map +1 -0
  546. package/dist/lib/session.js +109 -0
  547. package/dist/lib/session.js.map +1 -0
  548. package/dist/lib/spinner.d.ts +27 -0
  549. package/dist/lib/spinner.d.ts.map +1 -0
  550. package/dist/lib/spinner.js +76 -0
  551. package/dist/lib/spinner.js.map +1 -0
  552. package/dist/lib/spinner.test.d.ts +2 -0
  553. package/dist/lib/spinner.test.d.ts.map +1 -0
  554. package/dist/lib/spinner.test.js +39 -0
  555. package/dist/lib/spinner.test.js.map +1 -0
  556. package/dist/lib/strip.d.ts +12 -0
  557. package/dist/lib/strip.d.ts.map +1 -0
  558. package/dist/lib/strip.js +41 -0
  559. package/dist/lib/strip.js.map +1 -0
  560. package/dist/lib/style.d.ts +94 -0
  561. package/dist/lib/style.d.ts.map +1 -0
  562. package/dist/lib/style.js +167 -0
  563. package/dist/lib/style.js.map +1 -0
  564. package/dist/lib/style.test.d.ts +7 -0
  565. package/dist/lib/style.test.d.ts.map +1 -0
  566. package/dist/lib/style.test.js +263 -0
  567. package/dist/lib/style.test.js.map +1 -0
  568. package/dist/lib/telemetry.d.ts +15 -0
  569. package/dist/lib/telemetry.d.ts.map +1 -0
  570. package/dist/lib/telemetry.js +47 -0
  571. package/dist/lib/telemetry.js.map +1 -0
  572. package/dist/lib/tokenConstants.d.ts +17 -0
  573. package/dist/lib/tokenConstants.d.ts.map +1 -0
  574. package/dist/lib/tokenConstants.js +17 -0
  575. package/dist/lib/tokenConstants.js.map +1 -0
  576. package/dist/lib/update-check.d.ts +21 -0
  577. package/dist/lib/update-check.d.ts.map +1 -0
  578. package/dist/lib/update-check.js +144 -0
  579. package/dist/lib/update-check.js.map +1 -0
  580. package/dist/lib/wizard-surfaces.d.ts +47 -0
  581. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  582. package/dist/lib/wizard-surfaces.js +176 -0
  583. package/dist/lib/wizard-surfaces.js.map +1 -0
  584. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  585. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  586. package/dist/lib/wizard-surfaces.test.js +127 -0
  587. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  588. package/dist/lib/wizard-trust.d.ts +31 -0
  589. package/dist/lib/wizard-trust.d.ts.map +1 -0
  590. package/dist/lib/wizard-trust.js +66 -0
  591. package/dist/lib/wizard-trust.js.map +1 -0
  592. package/dist/lib/wizard-trust.test.d.ts +2 -0
  593. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  594. package/dist/lib/wizard-trust.test.js +32 -0
  595. package/dist/lib/wizard-trust.test.js.map +1 -0
  596. package/dist/lib/workspace-probe.d.ts +16 -0
  597. package/dist/lib/workspace-probe.d.ts.map +1 -0
  598. package/dist/lib/workspace-probe.js +33 -0
  599. package/dist/lib/workspace-probe.js.map +1 -0
  600. package/package.json +13 -4
  601. package/templates/archetypes/boundary.md +23 -0
  602. package/templates/archetypes/constraint.md +23 -0
  603. package/templates/archetypes/convention.md +23 -0
  604. package/templates/archetypes/policy.md +23 -0
  605. package/templates/archetypes/quality-gate.md +23 -0
  606. package/templates/archetypes/workflow.md +23 -0
  607. package/templates/general/code-integrity.md +11 -0
  608. package/templates/general/getting-started.md +12 -0
  609. package/templates/node-ts/code-integrity.md +13 -0
  610. package/templates/node-ts/testing.md +12 -0
  611. package/templates/python/code-integrity.md +13 -0
  612. package/templates/python/testing.md +12 -0
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Adapter file generators — thin pointers for each AI tool.
3
+ * Each function returns the file content as a string.
4
+ */
5
+ const MARKER = 'auto-generated by pb handshake';
6
+ export { MARKER };
7
+ export function generateAgentsMd(timestamp, options) {
8
+ const { workspaceContext, skills } = options ?? {};
9
+ // Workspace context section (only when data is available)
10
+ let workspaceSection = '';
11
+ if (workspaceContext && Object.values(workspaceContext).some((v) => v !== undefined)) {
12
+ const rows = [];
13
+ if (workspaceContext.stage !== undefined)
14
+ rows.push(`| Stage | \`${workspaceContext.stage}\` |`);
15
+ if (workspaceContext.focus !== undefined)
16
+ rows.push(`| Current focus | ${workspaceContext.focus} |`);
17
+ if (workspaceContext.governanceMode !== undefined)
18
+ rows.push(`| Governance mode | \`${workspaceContext.governanceMode}\` |`);
19
+ if (workspaceContext.totalEntries !== undefined)
20
+ rows.push(`| Chain entries | ${workspaceContext.totalEntries} |`);
21
+ workspaceSection = `
22
+ ## Workspace Context
23
+
24
+ | Field | Value |
25
+ |-------|-------|
26
+ ${rows.join('\n')}
27
+ `;
28
+ }
29
+ // Skill directory section (only when skills provided and non-empty)
30
+ let skillsSection = '';
31
+ if (skills && skills.length > 0) {
32
+ const rows = skills.map((s) => {
33
+ const triggers = s.triggers && s.triggers.length > 0 ? s.triggers.slice(0, 3).join(', ') : '—';
34
+ return `| \`${s.name}\` | ${s.description} | ${triggers} |`;
35
+ });
36
+ skillsSection = `
37
+ ## Skill Directory
38
+
39
+ | Skill | Description | Triggers |
40
+ |-------|-------------|----------|
41
+ ${rows.join('\n')}
42
+ `;
43
+ }
44
+ return `<!-- ${MARKER} — ${timestamp} -->
45
+ <!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
46
+
47
+ # Product Brain Context
48
+
49
+ Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
50
+ Read \`.productbrain/briefing.md\` for entries matched to this repo.
51
+ Read \`.productbrain/soul.md\` when identity, working style, or collaboration preferences matter.
52
+ ${workspaceSection}
53
+ ## The Chain is the SSOT. Use \`pb\` before everything.
54
+
55
+ | Command | Purpose |
56
+ |---------|---------|
57
+ | \`pb orient -b\` | Current workspace focus |
58
+ | \`pb orient --task "<task>"\` | Task-shaped governance and context before implementation, review, or diagnosis |
59
+ | \`pb get <ID>\` | Full entry (BET, DEC, STD, BR, TEN, ARCH) |
60
+ | \`pb context <ID>\` | Constellation context for an entry |
61
+ | \`pb search <query>\` | Find entries across the Chain |
62
+ | \`pb handshake\` | Refresh these context files |
63
+
64
+ **Before implementing any feature, ticket, or fix:** run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
65
+ **Before substantive implementation, review, diagnosis, or security-sensitive reasoning:** run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
66
+
67
+ ## Session lifecycle — close the loop
68
+
69
+ Start every write-heavy session with \`pb session start\`. This opens a tracked write session and refreshes context.
70
+
71
+ For reusable Product Brain workflows in Codex, read \`.codex/skills/README.md\` first, then open the matching skill file under \`.codex/skills/\`.
72
+
73
+ When you make a decision, discover a tension, or learn something during work:
74
+ \`\`\`
75
+ pb capture "TEN: description of the tension"
76
+ pb capture "DEC: decided X because Y"
77
+ pb capture "INS: learned that X"
78
+ \`\`\`
79
+
80
+ Close with \`pb session close\` — reviews what was captured, refreshes context for the next session.
81
+
82
+ All captures are drafts. The human reviews and commits in Product Brain Studio.
83
+ ${skillsSection}
84
+ ## Governance Summary
85
+
86
+ This workspace uses Product Brain governance. Decisions, standards, and tensions are tracked on the Chain. Use \`pb orient -b\` for current focus.
87
+ `;
88
+ }
89
+ export function generateClaudeMd(timestamp, profile) {
90
+ return `<!-- ${MARKER} — ${timestamp} -->
91
+ <!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
92
+
93
+ # Product Brain Context
94
+
95
+ Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
96
+ Read \`.productbrain/briefing.md\` for entries matched to this repo.
97
+
98
+ ## The Chain is the SSOT. Use \`pb\` before everything.
99
+
100
+ | Command | Purpose |
101
+ |---------|---------|
102
+ | \`pb orient -b\` | Current workspace focus |
103
+ | \`pb orient --task "<task>"\` | Task-shaped governance and context before implementation, review, or diagnosis |
104
+ | \`pb get <ID>\` | Full entry (BET, DEC, STD, BR, TEN, ARCH) |
105
+ | \`pb context <ID>\` | Constellation context for an entry |
106
+ | \`pb search <query>\` | Find entries across the Chain |
107
+ | \`pb handshake\` | Refresh these context files |
108
+
109
+ **Before implementing any feature, ticket, or fix:** run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
110
+ **Before substantive implementation, review, diagnosis, or security-sensitive reasoning:** run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
111
+
112
+ ## Session lifecycle — close the loop
113
+
114
+ Start every session with \`pb session start\`. This opens a tracked write session and refreshes context.
115
+
116
+ When you make a decision, discover a tension, or learn something during work:
117
+ \`\`\`
118
+ pb capture "TEN: description of the tension"
119
+ pb capture "DEC: decided X because Y"
120
+ pb capture "INS: learned that X"
121
+ \`\`\`
122
+
123
+ Close with \`pb session close\` — reviews what was captured, refreshes context for the next session.
124
+
125
+ All captures are drafts. The human reviews and commits in Product Brain Studio.
126
+ `;
127
+ }
128
+ export function generateCursorMdc(timestamp, profile) {
129
+ return `---
130
+ description: Product Brain Chain context — workspace knowledge for AI-assisted development
131
+ globs:
132
+ alwaysApply: true
133
+ ---
134
+
135
+ # Product Brain Context
136
+
137
+ Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
138
+ Read \`.productbrain/briefing.md\` for entries matched to this repo.
139
+
140
+ ## The Chain is the SSOT. Use \`pb\` before everything.
141
+
142
+ - \`pb orient -b\` — Current workspace focus
143
+ - \`pb orient --task "<task>"\` — Task-shaped governance and context before implementation, review, or diagnosis
144
+ - \`pb get <ID>\` — Full entry (BET, DEC, STD, BR, TEN, ARCH)
145
+ - \`pb context <ID>\` — Constellation context for an entry
146
+ - \`pb search <query>\` — Find entries across the Chain
147
+ - \`pb handshake\` — Refresh these context files
148
+
149
+ Before implementing any feature, ticket, or fix: run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
150
+ Before substantive implementation, review, diagnosis, or security-sensitive reasoning: run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
151
+
152
+ ## Session lifecycle — close the loop
153
+
154
+ Start with \`pb session start\`. When you make a decision, discover a tension, or learn something:
155
+ - \`pb capture "TEN: description"\` — capture a tension
156
+ - \`pb capture "DEC: decided X because Y"\` — capture a decision
157
+ - \`pb capture "INS: learned that X"\` — capture an insight
158
+ Close with \`pb session close\`. All captures are drafts — human reviews and commits.
159
+
160
+ <!-- ${MARKER} — ${timestamp} -->
161
+ `;
162
+ }
163
+ export function generateCopilotMd(timestamp, options) {
164
+ const { profile, workspaceContext, skills, rules } = options ?? {};
165
+ const budget = profile?.tokenBudget ?? 30000;
166
+ // Workspace context section (only when data is available)
167
+ let workspaceSection = '';
168
+ if (workspaceContext && Object.values(workspaceContext).some((v) => v !== undefined)) {
169
+ const rows = [];
170
+ if (workspaceContext.stage !== undefined)
171
+ rows.push(`| Stage | \`${workspaceContext.stage}\` |`);
172
+ if (workspaceContext.focus !== undefined)
173
+ rows.push(`| Current focus | ${workspaceContext.focus} |`);
174
+ if (workspaceContext.governanceMode !== undefined)
175
+ rows.push(`| Governance mode | \`${workspaceContext.governanceMode}\` |`);
176
+ if (workspaceContext.totalEntries !== undefined)
177
+ rows.push(`| Chain entries | ${workspaceContext.totalEntries} |`);
178
+ workspaceSection = `
179
+ ## Workspace Context
180
+
181
+ | Field | Value |
182
+ |-------|-------|
183
+ ${rows.join('\n')}
184
+ `;
185
+ }
186
+ // Build the invariant base (header + workspace + command ref + session lifecycle)
187
+ const base = `<!-- ${MARKER} — ${timestamp} -->
188
+ <!-- Re-run \`pb handshake\` to refresh. Do not edit manually. -->
189
+
190
+ # Product Brain Context
191
+
192
+ Read \`.productbrain/context.md\` for full workspace briefing (stage, bets, governance, tensions).
193
+ Read \`.productbrain/briefing.md\` for entries matched to this repo.
194
+ ${workspaceSection}
195
+ ## The Chain is the SSOT. Use \`pb\` before everything.
196
+
197
+ - \`pb orient -b\` — Current workspace focus
198
+ - \`pb orient --task "<task>"\` — Task-shaped governance and context before implementation, review, or diagnosis
199
+ - \`pb get <ID>\` — Full entry (BET, DEC, STD, BR, TEN, ARCH)
200
+ - \`pb context <ID>\` — Constellation context for an entry
201
+ - \`pb search <query>\` — Find entries across the Chain
202
+ - \`pb handshake\` — Refresh these context files
203
+
204
+ Before implementing any feature, ticket, or fix: run \`pb get <ID>\` to read the actual spec, exclusions, acceptance criteria, and governance relations. Never assume you know the spec from the conversation alone.
205
+ Before substantive implementation, review, diagnosis, or security-sensitive reasoning: run \`pb orient --task "<what you're doing>"\` so task-relevant governance becomes active before you propose a solution. Treat \`pb orient -b\` as workspace orientation, not sufficient task grounding.
206
+
207
+ ## Session lifecycle — close the loop
208
+
209
+ Start with \`pb session start\`. Capture knowledge during work with \`pb capture "text"\`.
210
+ Close with \`pb session close\`. All captures are drafts — human reviews and commits.
211
+ `;
212
+ // When no enrichment options provided, return base for backward compat
213
+ if (!skills?.length && !rules?.length) {
214
+ return base;
215
+ }
216
+ // Build skill summaries and rule summaries as independent chunks
217
+ // so we can truncate from the end if needed
218
+ const skillChunks = [];
219
+ if (skills && skills.length > 0) {
220
+ skillChunks.push('\n## Skills\n');
221
+ for (const s of skills) {
222
+ let chunk = `\n### ${s.name}\n${s.description}\n`;
223
+ if (s.triggers && s.triggers.length > 0) {
224
+ chunk += `Triggers: ${s.triggers.slice(0, 3).join(', ')}\n`;
225
+ }
226
+ skillChunks.push(chunk);
227
+ }
228
+ }
229
+ const ruleChunks = [];
230
+ if (rules && rules.length > 0) {
231
+ ruleChunks.push('\n## Rules\n');
232
+ for (const r of rules) {
233
+ ruleChunks.push(`\n### ${r.name}\n${r.description}\n`);
234
+ }
235
+ }
236
+ // All appendable chunks: skill section header + individual skills, then rule section header + individual rules
237
+ const allChunks = [...skillChunks, ...ruleChunks];
238
+ // Greedily append chunks while staying within budget
239
+ let result = base;
240
+ let omittedCount = 0;
241
+ const truncationNote = (n) => `\n<!-- Truncated: ${n} skills/rules omitted to stay within token budget -->\n`;
242
+ // Check if base already exceeds budget (rare, but handle gracefully)
243
+ if (base.length >= budget) {
244
+ return base;
245
+ }
246
+ // We need to find how many chunks fit. Reserve space for a truncation note if needed.
247
+ const allChunksText = allChunks.join('');
248
+ if (base.length + allChunksText.length <= budget) {
249
+ // Everything fits — no truncation needed
250
+ return base + allChunksText;
251
+ }
252
+ // Need to truncate. Greedy approach: keep adding chunks while they fit,
253
+ // always reserving space for the worst-case truncation note.
254
+ const isHeader = (c) => c.trimStart().startsWith('## ');
255
+ const itemCount = allChunks.filter((c) => !isHeader(c)).length;
256
+ // Worst-case note reserves for the maximum possible omission count
257
+ const worstCaseNoteLen = truncationNote(itemCount).length;
258
+ let accumulated = base;
259
+ let fittedItemCount = 0;
260
+ for (let i = 0; i < allChunks.length; i++) {
261
+ const chunk = allChunks[i];
262
+ const remaining = allChunks.slice(i + 1).join('');
263
+ // If everything from here fits without any note, append and done
264
+ if (accumulated.length + chunk.length + remaining.length <= budget) {
265
+ accumulated += allChunks.slice(i).join('');
266
+ fittedItemCount = itemCount;
267
+ break;
268
+ }
269
+ // Does this chunk fit if we reserve space for the worst-case note?
270
+ if (accumulated.length + chunk.length + worstCaseNoteLen <= budget) {
271
+ accumulated += chunk;
272
+ if (!isHeader(chunk))
273
+ fittedItemCount++;
274
+ }
275
+ else {
276
+ break;
277
+ }
278
+ }
279
+ omittedCount = itemCount - fittedItemCount;
280
+ if (omittedCount > 0) {
281
+ const note = truncationNote(omittedCount);
282
+ // Only append the note if it fits within budget; if the base alone
283
+ // nearly fills the budget, omit the note to honour the hard cap.
284
+ if (accumulated.length + note.length <= budget) {
285
+ accumulated += note;
286
+ }
287
+ }
288
+ return accumulated;
289
+ }
290
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/generators/adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.test.d.ts","sourceRoot":"","sources":["../../src/generators/adapters.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { generateAgentsMd, generateClaudeMd, generateCopilotMd, generateCursorMdc } from './adapters.js';
3
+ describe('generateAgentsMd', () => {
4
+ it('includes Product Brain bootstrap guidance for Codex-style agents', () => {
5
+ const output = generateAgentsMd('2026-04-02T00:00:00.000Z');
6
+ expect(output).toContain('auto-generated by pb handshake');
7
+ expect(output).toContain('Read `.productbrain/context.md`');
8
+ expect(output).toContain('Read `.productbrain/briefing.md`');
9
+ expect(output).toContain('Read `.productbrain/soul.md`');
10
+ expect(output).toContain('`.codex/skills/README.md`');
11
+ expect(output).toContain('pb orient -b');
12
+ expect(output).toContain('pb orient --task');
13
+ expect(output).toContain('pb session start');
14
+ expect(output).toContain('not sufficient task grounding');
15
+ expect(output).toContain('pb capture "TEN: description of the tension"');
16
+ expect(output).toContain('pb session close');
17
+ });
18
+ });
19
+ describe('adapter variants', () => {
20
+ it('propagates task-shaped startup guidance across generated adapters', () => {
21
+ const timestamp = '2026-04-02T00:00:00.000Z';
22
+ expect(generateClaudeMd(timestamp)).toContain('pb orient --task');
23
+ expect(generateCursorMdc(timestamp)).toContain('pb orient --task');
24
+ expect(generateCopilotMd(timestamp)).toContain('pb orient --task');
25
+ });
26
+ });
27
+ //# sourceMappingURL=adapters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../src/generators/adapters.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEzG,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,MAAM,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,SAAS,GAAG,0BAA0B,CAAC;QAE7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACnE,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Archetype loader and resolver — BET-286 Slice 2
3
+ *
4
+ * Loads archetype templates from packages/cli/templates/archetypes/ and
5
+ * resolves their {{slot}} placeholders using ClassifiedGovernance entries.
6
+ * Each resolved archetype produces a CanonicalRule ready to merge into
7
+ * the canonical rules array.
8
+ *
9
+ * Chain: BET-286 (Chain-Derived Agent Configuration), FEAT-894 (chain:// convention)
10
+ */
11
+ import type { CanonicalRule } from './portable-knowledge.js';
12
+ import type { ClassifiedGovernance, GovernanceFunction } from './chain-classifier.js';
13
+ /** Parsed archetype template, ready for slot resolution. */
14
+ interface ArchetypeTemplate {
15
+ functionKey: GovernanceFunction;
16
+ /** Frontmatter fields */
17
+ name: string;
18
+ description: string;
19
+ autoApply: boolean;
20
+ level: string;
21
+ /** Template body with {{slot}} placeholders */
22
+ body: string;
23
+ }
24
+ /** Result of resolving an archetype against classified governance entries. */
25
+ export interface ResolvedArchetype {
26
+ /** Ready to merge into the canonical rules array */
27
+ rule: CanonicalRule;
28
+ functionKey: GovernanceFunction;
29
+ /** Which entry IDs contributed to this rule */
30
+ resolvedEntryIds: string[];
31
+ }
32
+ /** Discriminated reason when resolveArchetype returns null. */
33
+ export type ArchetypeSkipReason = 'no-template' | 'manual-suppression' | 'zero-entries';
34
+ /**
35
+ * Load the archetype template for a governance function.
36
+ * Returns null if the function is 'unclassified' or no template file exists.
37
+ */
38
+ export declare function loadArchetype(functionKey: GovernanceFunction): ArchetypeTemplate | null;
39
+ /**
40
+ * Resolve an archetype's slots using classified governance entries.
41
+ *
42
+ * Returns a discriminated result:
43
+ * - `{ resolved: ResolvedArchetype }` on success
44
+ * - `{ skipped: ArchetypeSkipReason }` when the archetype cannot be produced
45
+ */
46
+ export declare function resolveArchetype(functionKey: GovernanceFunction, classified: ClassifiedGovernance[], manualRuleNames: Set<string>): {
47
+ resolved: ResolvedArchetype;
48
+ } | {
49
+ skipped: ArchetypeSkipReason;
50
+ };
51
+ export {};
52
+ //# sourceMappingURL=archetypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/generators/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAItF,4DAA4D;AAC5D,UAAU,iBAAiB;IACzB,WAAW,EAAE,kBAAkB,CAAC;IAChC,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,oBAAoB,GAAG,cAAc,CAAC;AAwCxF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAkBvF;AA4CD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,oBAAoB,EAAE,EAClC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B;IAAE,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,CAsDpE"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Archetype loader and resolver — BET-286 Slice 2
3
+ *
4
+ * Loads archetype templates from packages/cli/templates/archetypes/ and
5
+ * resolves their {{slot}} placeholders using ClassifiedGovernance entries.
6
+ * Each resolved archetype produces a CanonicalRule ready to merge into
7
+ * the canonical rules array.
8
+ *
9
+ * Chain: BET-286 (Chain-Derived Agent Configuration), FEAT-894 (chain:// convention)
10
+ */
11
+ import { existsSync, readFileSync } from 'fs';
12
+ import { join, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ // ── Path resolution ───────────────────────────────────────────────────
15
+ /** Resolved archetypes template directory (relative to this module).
16
+ * From dist/generators/archetypes.js → ../../templates/archetypes/
17
+ */
18
+ const TEMPLATES_DIR = (() => {
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = dirname(__filename);
21
+ return join(__dirname, '..', '..', 'templates', 'archetypes');
22
+ })();
23
+ function parseArchetypeFrontmatter(raw) {
24
+ const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
25
+ if (!match)
26
+ return { fields: {}, body: raw };
27
+ const yaml = match[1];
28
+ const body = match[2] ?? '';
29
+ const fields = {};
30
+ for (const line of yaml.split('\n')) {
31
+ const kv = line.match(/^([\w-]+):\s*(.*)/);
32
+ if (kv) {
33
+ fields[kv[1]] = kv[2].trim().replace(/^["']|["']$/g, '');
34
+ }
35
+ }
36
+ return { fields, body };
37
+ }
38
+ // ── Loader ────────────────────────────────────────────────────────────
39
+ /**
40
+ * Load the archetype template for a governance function.
41
+ * Returns null if the function is 'unclassified' or no template file exists.
42
+ */
43
+ export function loadArchetype(functionKey) {
44
+ if (functionKey === 'unclassified')
45
+ return null;
46
+ const filePath = join(TEMPLATES_DIR, `${functionKey}.md`);
47
+ if (!existsSync(filePath))
48
+ return null;
49
+ const raw = readFileSync(filePath, 'utf8');
50
+ const { fields, body } = parseArchetypeFrontmatter(raw);
51
+ return {
52
+ functionKey,
53
+ name: fields['name'] ?? functionKey,
54
+ description: fields['description'] ?? '',
55
+ autoApply: fields['autoApply'] === 'true',
56
+ level: fields['level'] ?? 'core',
57
+ body,
58
+ };
59
+ }
60
+ // ── Slot resolution ───────────────────────────────────────────────────
61
+ /** Replace all {{slot}} placeholders in a string. */
62
+ function resolveSlots(text, slots) {
63
+ return text.replace(/\{\{(\w+)\}\}/g, (_match, key) => slots[key] ?? _match);
64
+ }
65
+ /**
66
+ * Build the *_summary slot value for a given function key.
67
+ * Lists up to 5 entry names then "and N more".
68
+ */
69
+ function buildSummary(entries) {
70
+ if (entries.length === 0)
71
+ return '(none)';
72
+ const MAX_LISTED = 5;
73
+ const names = entries.map((e) => e.name);
74
+ const listed = names.slice(0, MAX_LISTED);
75
+ const remaining = names.length - MAX_LISTED;
76
+ const lines = listed.map((n) => `- ${n}`);
77
+ if (remaining > 0) {
78
+ lines.push(`- ...and ${remaining} more`);
79
+ }
80
+ return lines.join('\n');
81
+ }
82
+ /** Map function key to its summary slot name. */
83
+ function summarySlotName(functionKey) {
84
+ const map = {
85
+ constraint: 'constraint_summary',
86
+ boundary: 'boundary_summary',
87
+ convention: 'convention_summary',
88
+ policy: 'policy_summary',
89
+ workflow: 'workflow_summary',
90
+ 'quality-gate': 'quality_summary',
91
+ };
92
+ return map[functionKey] ?? `${functionKey}_summary`;
93
+ }
94
+ // ── Resolver ──────────────────────────────────────────────────────────
95
+ /**
96
+ * Resolve an archetype's slots using classified governance entries.
97
+ *
98
+ * Returns a discriminated result:
99
+ * - `{ resolved: ResolvedArchetype }` on success
100
+ * - `{ skipped: ArchetypeSkipReason }` when the archetype cannot be produced
101
+ */
102
+ export function resolveArchetype(functionKey, classified, manualRuleNames) {
103
+ const template = loadArchetype(functionKey);
104
+ if (!template)
105
+ return { skipped: 'no-template' };
106
+ // Manual rule suppression: if a manual rule with this name exists, skip
107
+ if (manualRuleNames.has(template.name))
108
+ return { skipped: 'manual-suppression' };
109
+ // Filter to entries matching this function
110
+ const matching = classified.filter((e) => e.governanceFunction === functionKey);
111
+ if (matching.length === 0)
112
+ return { skipped: 'zero-entries' };
113
+ // Build slot values
114
+ const entryIds = matching.map((e) => e.entryId).join(', ');
115
+ const entryNames = matching.map((e) => e.name).join(', ');
116
+ const entryCount = String(matching.length);
117
+ const summary = buildSummary(matching);
118
+ const summarySlot = summarySlotName(functionKey);
119
+ const slots = {
120
+ entry_ids: entryIds,
121
+ entry_names: entryNames,
122
+ entry_count: entryCount,
123
+ // Populate all summary slots — only the relevant one gets the real summary;
124
+ // others get empty string so stale placeholders resolve to blank, not wrong data.
125
+ constraint_summary: '',
126
+ boundary_summary: '',
127
+ convention_summary: '',
128
+ policy_summary: '',
129
+ workflow_summary: '',
130
+ quality_summary: '',
131
+ [summarySlot]: summary,
132
+ };
133
+ const resolvedDescription = resolveSlots(template.description, slots);
134
+ const resolvedBody = resolveSlots(template.body, slots);
135
+ const rule = {
136
+ name: template.name,
137
+ description: resolvedDescription,
138
+ autoApply: template.autoApply,
139
+ level: template.level,
140
+ body: resolvedBody,
141
+ sourcePath: `chain://${functionKey}`,
142
+ scope: undefined,
143
+ targets: undefined,
144
+ };
145
+ return {
146
+ resolved: {
147
+ rule,
148
+ functionKey,
149
+ resolvedEntryIds: matching.map((e) => e.entryId),
150
+ },
151
+ };
152
+ }
153
+ //# sourceMappingURL=archetypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/generators/archetypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=archetypes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archetypes.test.d.ts","sourceRoot":"","sources":["../../src/generators/archetypes.test.ts"],"names":[],"mappings":""}