@productbrain/cli 0.1.0-beta.20 → 0.1.0-beta.2065

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 (991) hide show
  1. package/README.md +72 -172
  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 +470 -0
  5. package/dist/__tests__/adapters.test.js.map +1 -0
  6. package/dist/__tests__/audit.test.js +65 -44
  7. package/dist/__tests__/audit.test.js.map +1 -1
  8. package/dist/__tests__/authority-domains-queue.test.d.ts +2 -0
  9. package/dist/__tests__/authority-domains-queue.test.d.ts.map +1 -0
  10. package/dist/__tests__/authority-domains-queue.test.js +169 -0
  11. package/dist/__tests__/authority-domains-queue.test.js.map +1 -0
  12. package/dist/__tests__/authority-domains.test.d.ts +2 -0
  13. package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
  14. package/dist/__tests__/authority-domains.test.js +48 -0
  15. package/dist/__tests__/authority-domains.test.js.map +1 -0
  16. package/dist/__tests__/batch-transformations.test.d.ts +2 -0
  17. package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
  18. package/dist/__tests__/batch-transformations.test.js +263 -0
  19. package/dist/__tests__/batch-transformations.test.js.map +1 -0
  20. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  21. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  22. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  23. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  24. package/dist/__tests__/capture-receipt-coaching.test.d.ts +2 -0
  25. package/dist/__tests__/capture-receipt-coaching.test.d.ts.map +1 -0
  26. package/dist/__tests__/capture-receipt-coaching.test.js +89 -0
  27. package/dist/__tests__/capture-receipt-coaching.test.js.map +1 -0
  28. package/dist/__tests__/capture-receipt-domain.test.d.ts +2 -0
  29. package/dist/__tests__/capture-receipt-domain.test.d.ts.map +1 -0
  30. package/dist/__tests__/capture-receipt-domain.test.js +29 -0
  31. package/dist/__tests__/capture-receipt-domain.test.js.map +1 -0
  32. package/dist/__tests__/capture.test.js +653 -40
  33. package/dist/__tests__/capture.test.js.map +1 -1
  34. package/dist/__tests__/coaching-mirror-drift.test.d.ts +2 -0
  35. package/dist/__tests__/coaching-mirror-drift.test.d.ts.map +1 -0
  36. package/dist/__tests__/coaching-mirror-drift.test.js +47 -0
  37. package/dist/__tests__/coaching-mirror-drift.test.js.map +1 -0
  38. package/dist/__tests__/codex-prep-parity.test.d.ts +2 -0
  39. package/dist/__tests__/codex-prep-parity.test.d.ts.map +1 -0
  40. package/dist/__tests__/codex-prep-parity.test.js +107 -0
  41. package/dist/__tests__/codex-prep-parity.test.js.map +1 -0
  42. package/dist/__tests__/config-prod-fallthrough.test.d.ts +2 -0
  43. package/dist/__tests__/config-prod-fallthrough.test.d.ts.map +1 -0
  44. package/dist/__tests__/config-prod-fallthrough.test.js +82 -0
  45. package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -0
  46. package/dist/__tests__/config.test.d.ts +8 -0
  47. package/dist/__tests__/config.test.d.ts.map +1 -0
  48. package/dist/__tests__/config.test.js +566 -0
  49. package/dist/__tests__/config.test.js.map +1 -0
  50. package/dist/__tests__/constants.test.d.ts +2 -0
  51. package/dist/__tests__/constants.test.d.ts.map +1 -0
  52. package/dist/__tests__/constants.test.js +146 -0
  53. package/dist/__tests__/constants.test.js.map +1 -0
  54. package/dist/__tests__/constellation.test.js +16 -22
  55. package/dist/__tests__/constellation.test.js.map +1 -1
  56. package/dist/__tests__/context-strategy.test.js +8 -8
  57. package/dist/__tests__/context-strategy.test.js.map +1 -1
  58. package/dist/__tests__/conversation.test.d.ts +2 -0
  59. package/dist/__tests__/conversation.test.d.ts.map +1 -0
  60. package/dist/__tests__/conversation.test.js +113 -0
  61. package/dist/__tests__/conversation.test.js.map +1 -0
  62. package/dist/__tests__/envelope-contract.test.d.ts +15 -0
  63. package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
  64. package/dist/__tests__/envelope-contract.test.js +152 -0
  65. package/dist/__tests__/envelope-contract.test.js.map +1 -0
  66. package/dist/__tests__/errors.test.d.ts +2 -0
  67. package/dist/__tests__/errors.test.d.ts.map +1 -0
  68. package/dist/__tests__/errors.test.js +125 -0
  69. package/dist/__tests__/errors.test.js.map +1 -0
  70. package/dist/__tests__/experiment.test.d.ts +6 -0
  71. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  72. package/dist/__tests__/experiment.test.js +69 -0
  73. package/dist/__tests__/experiment.test.js.map +1 -0
  74. package/dist/__tests__/fields.test.js +36 -36
  75. package/dist/__tests__/fields.test.js.map +1 -1
  76. package/dist/__tests__/glossary.test.d.ts +2 -0
  77. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  78. package/dist/__tests__/glossary.test.js +32 -0
  79. package/dist/__tests__/glossary.test.js.map +1 -0
  80. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  81. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  82. package/dist/__tests__/handshake-augment.test.js +424 -0
  83. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  84. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  85. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  86. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  87. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  88. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  89. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  90. package/dist/__tests__/handshake-formatter.test.js +67 -0
  91. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  92. package/dist/__tests__/handshake-preview.test.d.ts +2 -0
  93. package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
  94. package/dist/__tests__/handshake-preview.test.js +950 -0
  95. package/dist/__tests__/handshake-preview.test.js.map +1 -0
  96. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  97. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  98. package/dist/__tests__/handshake.e2e.test.js +1255 -0
  99. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  100. package/dist/__tests__/handshake.test.js +796 -19
  101. package/dist/__tests__/handshake.test.js.map +1 -1
  102. package/dist/__tests__/hook-intents.test.d.ts +2 -0
  103. package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
  104. package/dist/__tests__/hook-intents.test.js +184 -0
  105. package/dist/__tests__/hook-intents.test.js.map +1 -0
  106. package/dist/__tests__/ingest.test.js +37 -28
  107. package/dist/__tests__/ingest.test.js.map +1 -1
  108. package/dist/__tests__/init.test.d.ts +7 -0
  109. package/dist/__tests__/init.test.d.ts.map +1 -0
  110. package/dist/__tests__/init.test.js +146 -0
  111. package/dist/__tests__/init.test.js.map +1 -0
  112. package/dist/__tests__/login.test.d.ts +2 -0
  113. package/dist/__tests__/login.test.d.ts.map +1 -0
  114. package/dist/__tests__/login.test.js +167 -0
  115. package/dist/__tests__/login.test.js.map +1 -0
  116. package/dist/__tests__/manifest.test.d.ts +6 -0
  117. package/dist/__tests__/manifest.test.d.ts.map +1 -0
  118. package/dist/__tests__/manifest.test.js +255 -0
  119. package/dist/__tests__/manifest.test.js.map +1 -0
  120. package/dist/__tests__/method-publish-coherency.test.d.ts +9 -0
  121. package/dist/__tests__/method-publish-coherency.test.d.ts.map +1 -0
  122. package/dist/__tests__/method-publish-coherency.test.js +71 -0
  123. package/dist/__tests__/method-publish-coherency.test.js.map +1 -0
  124. package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
  125. package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
  126. package/dist/__tests__/method-registry.integration.test.js +18 -0
  127. package/dist/__tests__/method-registry.integration.test.js.map +1 -0
  128. package/dist/__tests__/method-registry.test.d.ts +14 -0
  129. package/dist/__tests__/method-registry.test.d.ts.map +1 -0
  130. package/dist/__tests__/method-registry.test.js +134 -0
  131. package/dist/__tests__/method-registry.test.js.map +1 -0
  132. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  133. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  134. package/dist/__tests__/notice-marker.test.js +41 -0
  135. package/dist/__tests__/notice-marker.test.js.map +1 -0
  136. package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
  137. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  138. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  139. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  140. package/dist/__tests__/onboarding.test.d.ts +6 -0
  141. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  142. package/dist/__tests__/onboarding.test.js +347 -0
  143. package/dist/__tests__/onboarding.test.js.map +1 -0
  144. package/dist/__tests__/orient.test.js +325 -11
  145. package/dist/__tests__/orient.test.js.map +1 -1
  146. package/dist/__tests__/perimeter.test.d.ts +2 -0
  147. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  148. package/dist/__tests__/perimeter.test.js +165 -0
  149. package/dist/__tests__/perimeter.test.js.map +1 -0
  150. package/dist/__tests__/personal-layer.test.d.ts +11 -0
  151. package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
  152. package/dist/__tests__/personal-layer.test.js +268 -0
  153. package/dist/__tests__/personal-layer.test.js.map +1 -0
  154. package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
  155. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  156. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  157. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  158. package/dist/__tests__/profiles.test.d.ts +2 -0
  159. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  160. package/dist/__tests__/profiles.test.js +320 -0
  161. package/dist/__tests__/profiles.test.js.map +1 -0
  162. package/dist/__tests__/promote-batch.test.d.ts +2 -0
  163. package/dist/__tests__/promote-batch.test.d.ts.map +1 -0
  164. package/dist/__tests__/promote-batch.test.js +185 -0
  165. package/dist/__tests__/promote-batch.test.js.map +1 -0
  166. package/dist/__tests__/promote.test.js +182 -37
  167. package/dist/__tests__/promote.test.js.map +1 -1
  168. package/dist/__tests__/prompts.test.d.ts +6 -0
  169. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  170. package/dist/__tests__/prompts.test.js +146 -0
  171. package/dist/__tests__/prompts.test.js.map +1 -0
  172. package/dist/__tests__/proof-run.test.d.ts +2 -0
  173. package/dist/__tests__/proof-run.test.d.ts.map +1 -0
  174. package/dist/__tests__/proof-run.test.js +255 -0
  175. package/dist/__tests__/proof-run.test.js.map +1 -0
  176. package/dist/__tests__/proposals.test.js +24 -47
  177. package/dist/__tests__/proposals.test.js.map +1 -1
  178. package/dist/__tests__/relate.test.js +34 -36
  179. package/dist/__tests__/relate.test.js.map +1 -1
  180. package/dist/__tests__/runner.test.js +19 -15
  181. package/dist/__tests__/runner.test.js.map +1 -1
  182. package/dist/__tests__/session-close-loop.test.d.ts +2 -0
  183. package/dist/__tests__/session-close-loop.test.d.ts.map +1 -0
  184. package/dist/__tests__/session-close-loop.test.js +231 -0
  185. package/dist/__tests__/session-close-loop.test.js.map +1 -0
  186. package/dist/__tests__/session-label.test.d.ts +2 -0
  187. package/dist/__tests__/session-label.test.d.ts.map +1 -0
  188. package/dist/__tests__/session-label.test.js +46 -0
  189. package/dist/__tests__/session-label.test.js.map +1 -0
  190. package/dist/__tests__/session-list-show.test.d.ts +2 -0
  191. package/dist/__tests__/session-list-show.test.d.ts.map +1 -0
  192. package/dist/__tests__/session-list-show.test.js +174 -0
  193. package/dist/__tests__/session-list-show.test.js.map +1 -0
  194. package/dist/__tests__/session-reset.test.d.ts +2 -0
  195. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  196. package/dist/__tests__/session-reset.test.js +138 -0
  197. package/dist/__tests__/session-reset.test.js.map +1 -0
  198. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  199. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  200. package/dist/__tests__/session-resume-backstop.test.js +99 -0
  201. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  202. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  203. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  204. package/dist/__tests__/session-start-key-refresh.test.js +179 -0
  205. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  206. package/dist/__tests__/session-state-machine.test.d.ts +2 -0
  207. package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
  208. package/dist/__tests__/session-state-machine.test.js +379 -0
  209. package/dist/__tests__/session-state-machine.test.js.map +1 -0
  210. package/dist/__tests__/session-switch.test.d.ts +2 -0
  211. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  212. package/dist/__tests__/session-switch.test.js +132 -0
  213. package/dist/__tests__/session-switch.test.js.map +1 -0
  214. package/dist/__tests__/session-touch.test.js +11 -11
  215. package/dist/__tests__/session-touch.test.js.map +1 -1
  216. package/dist/__tests__/session.test.js +4 -10
  217. package/dist/__tests__/session.test.js.map +1 -1
  218. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  219. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  220. package/dist/__tests__/setup-ingest.test.js +71 -0
  221. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  222. package/dist/__tests__/setup-resolver.test.d.ts +14 -0
  223. package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
  224. package/dist/__tests__/setup-resolver.test.js +228 -0
  225. package/dist/__tests__/setup-resolver.test.js.map +1 -0
  226. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  227. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  228. package/dist/__tests__/skill-vocabulary.test.js +192 -0
  229. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  230. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  231. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  232. package/dist/__tests__/spinner-labels.test.js +23 -0
  233. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  234. package/dist/__tests__/state.test.d.ts +6 -0
  235. package/dist/__tests__/state.test.d.ts.map +1 -0
  236. package/dist/__tests__/state.test.js +97 -0
  237. package/dist/__tests__/state.test.js.map +1 -0
  238. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  239. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  240. package/dist/__tests__/surface-profiles.test.js +233 -0
  241. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  242. package/dist/__tests__/surfaces.test.d.ts +2 -0
  243. package/dist/__tests__/surfaces.test.d.ts.map +1 -0
  244. package/dist/__tests__/surfaces.test.js +46 -0
  245. package/dist/__tests__/surfaces.test.js.map +1 -0
  246. package/dist/__tests__/update-check.test.d.ts +2 -0
  247. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  248. package/dist/__tests__/update-check.test.js +215 -0
  249. package/dist/__tests__/update-check.test.js.map +1 -0
  250. package/dist/__tests__/update.test.js +88 -81
  251. package/dist/__tests__/update.test.js.map +1 -1
  252. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  253. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  254. package/dist/__tests__/upgrade-runner.test.js +54 -0
  255. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  256. package/dist/__tests__/upgrade.test.d.ts +2 -0
  257. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  258. package/dist/__tests__/upgrade.test.js +56 -0
  259. package/dist/__tests__/upgrade.test.js.map +1 -0
  260. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  261. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  262. package/dist/__tests__/vocabulary-leak.test.js +539 -0
  263. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  264. package/dist/__tests__/workspace.test.d.ts +2 -0
  265. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  266. package/dist/__tests__/workspace.test.js +328 -0
  267. package/dist/__tests__/workspace.test.js.map +1 -0
  268. package/dist/__tests__/workspaceNotice.test.d.ts +2 -0
  269. package/dist/__tests__/workspaceNotice.test.d.ts.map +1 -0
  270. package/dist/__tests__/workspaceNotice.test.js +338 -0
  271. package/dist/__tests__/workspaceNotice.test.js.map +1 -0
  272. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  273. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  274. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  275. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  276. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  277. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  278. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  279. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  280. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  281. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  282. package/dist/commands/__tests__/setup-state.test.js +194 -0
  283. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  284. package/dist/commands/accept.d.ts.map +1 -1
  285. package/dist/commands/accept.js +10 -6
  286. package/dist/commands/accept.js.map +1 -1
  287. package/dist/commands/admin/cockpit.d.ts +90 -0
  288. package/dist/commands/admin/cockpit.d.ts.map +1 -0
  289. package/dist/commands/admin/cockpit.js +618 -0
  290. package/dist/commands/admin/cockpit.js.map +1 -0
  291. package/dist/commands/admin/index.d.ts +21 -0
  292. package/dist/commands/admin/index.d.ts.map +1 -0
  293. package/dist/commands/admin/index.js +256 -0
  294. package/dist/commands/admin/index.js.map +1 -0
  295. package/dist/commands/admin/inspect.d.ts +30 -0
  296. package/dist/commands/admin/inspect.d.ts.map +1 -0
  297. package/dist/commands/admin/inspect.js +555 -0
  298. package/dist/commands/admin/inspect.js.map +1 -0
  299. package/dist/commands/admin/inspect.test.d.ts +7 -0
  300. package/dist/commands/admin/inspect.test.d.ts.map +1 -0
  301. package/dist/commands/admin/inspect.test.js +90 -0
  302. package/dist/commands/admin/inspect.test.js.map +1 -0
  303. package/dist/commands/admin/manage.d.ts +8 -0
  304. package/dist/commands/admin/manage.d.ts.map +1 -0
  305. package/dist/commands/admin/manage.js +260 -0
  306. package/dist/commands/admin/manage.js.map +1 -0
  307. package/dist/commands/admin/manage.test.d.ts +16 -0
  308. package/dist/commands/admin/manage.test.d.ts.map +1 -0
  309. package/dist/commands/admin/manage.test.js +159 -0
  310. package/dist/commands/admin/manage.test.js.map +1 -0
  311. package/dist/commands/admin/seed.d.ts +75 -0
  312. package/dist/commands/admin/seed.d.ts.map +1 -0
  313. package/dist/commands/admin/seed.js +944 -0
  314. package/dist/commands/admin/seed.js.map +1 -0
  315. package/dist/commands/admin/seed.test.d.ts +11 -0
  316. package/dist/commands/admin/seed.test.d.ts.map +1 -0
  317. package/dist/commands/admin/seed.test.js +127 -0
  318. package/dist/commands/admin/seed.test.js.map +1 -0
  319. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  320. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  321. package/dist/commands/admin/seedRegistryEntries.generated.js +144 -0
  322. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  323. package/dist/commands/admin/seedRegistryEntries.test.d.ts +11 -0
  324. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  325. package/dist/commands/admin/seedRegistryEntries.test.js +70 -0
  326. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  327. package/dist/commands/audit.d.ts.map +1 -1
  328. package/dist/commands/audit.js +42 -7
  329. package/dist/commands/audit.js.map +1 -1
  330. package/dist/commands/authority-domains.d.ts +157 -0
  331. package/dist/commands/authority-domains.d.ts.map +1 -0
  332. package/dist/commands/authority-domains.js +356 -0
  333. package/dist/commands/authority-domains.js.map +1 -0
  334. package/dist/commands/brief.d.ts.map +1 -1
  335. package/dist/commands/brief.js +10 -5
  336. package/dist/commands/brief.js.map +1 -1
  337. package/dist/commands/capture.d.ts +9 -0
  338. package/dist/commands/capture.d.ts.map +1 -1
  339. package/dist/commands/capture.js +316 -57
  340. package/dist/commands/capture.js.map +1 -1
  341. package/dist/commands/chain-walk.d.ts.map +1 -1
  342. package/dist/commands/chain-walk.js +8 -3
  343. package/dist/commands/chain-walk.js.map +1 -1
  344. package/dist/commands/changes.d.ts.map +1 -1
  345. package/dist/commands/changes.js +8 -3
  346. package/dist/commands/changes.js.map +1 -1
  347. package/dist/commands/codex-prep.d.ts +12 -1
  348. package/dist/commands/codex-prep.d.ts.map +1 -1
  349. package/dist/commands/codex-prep.js +25 -87
  350. package/dist/commands/codex-prep.js.map +1 -1
  351. package/dist/commands/collections.d.ts +22 -0
  352. package/dist/commands/collections.d.ts.map +1 -0
  353. package/dist/commands/collections.js +77 -0
  354. package/dist/commands/collections.js.map +1 -0
  355. package/dist/commands/connect-config.test.d.ts +2 -0
  356. package/dist/commands/connect-config.test.d.ts.map +1 -0
  357. package/dist/commands/connect-config.test.js +44 -0
  358. package/dist/commands/connect-config.test.js.map +1 -0
  359. package/dist/commands/connect-context.d.ts +45 -0
  360. package/dist/commands/connect-context.d.ts.map +1 -0
  361. package/dist/commands/connect-context.js +83 -0
  362. package/dist/commands/connect-context.js.map +1 -0
  363. package/dist/commands/connect-context.test.d.ts +2 -0
  364. package/dist/commands/connect-context.test.d.ts.map +1 -0
  365. package/dist/commands/connect-context.test.js +158 -0
  366. package/dist/commands/connect-context.test.js.map +1 -0
  367. package/dist/commands/connect-handoff.d.ts +51 -0
  368. package/dist/commands/connect-handoff.d.ts.map +1 -0
  369. package/dist/commands/connect-handoff.js +70 -0
  370. package/dist/commands/connect-handoff.js.map +1 -0
  371. package/dist/commands/connect-integration.test.d.ts +7 -0
  372. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  373. package/dist/commands/connect-integration.test.js +219 -0
  374. package/dist/commands/connect-integration.test.js.map +1 -0
  375. package/dist/commands/connect-screens.d.ts +33 -0
  376. package/dist/commands/connect-screens.d.ts.map +1 -0
  377. package/dist/commands/connect-screens.js +124 -0
  378. package/dist/commands/connect-screens.js.map +1 -0
  379. package/dist/commands/connect.d.ts +42 -0
  380. package/dist/commands/connect.d.ts.map +1 -0
  381. package/dist/commands/connect.js +339 -0
  382. package/dist/commands/connect.js.map +1 -0
  383. package/dist/commands/connect.test.d.ts +6 -0
  384. package/dist/commands/connect.test.d.ts.map +1 -0
  385. package/dist/commands/connect.test.js +380 -0
  386. package/dist/commands/connect.test.js.map +1 -0
  387. package/dist/commands/constellation.d.ts.map +1 -1
  388. package/dist/commands/constellation.js +8 -3
  389. package/dist/commands/constellation.js.map +1 -1
  390. package/dist/commands/context.d.ts.map +1 -1
  391. package/dist/commands/context.js +8 -3
  392. package/dist/commands/context.js.map +1 -1
  393. package/dist/commands/cross-cut.js +2 -2
  394. package/dist/commands/cross-cut.js.map +1 -1
  395. package/dist/commands/doctor.d.ts +18 -0
  396. package/dist/commands/doctor.d.ts.map +1 -0
  397. package/dist/commands/doctor.js +297 -0
  398. package/dist/commands/doctor.js.map +1 -0
  399. package/dist/commands/doctor.test.d.ts +8 -0
  400. package/dist/commands/doctor.test.d.ts.map +1 -0
  401. package/dist/commands/doctor.test.js +461 -0
  402. package/dist/commands/doctor.test.js.map +1 -0
  403. package/dist/commands/fields.d.ts.map +1 -1
  404. package/dist/commands/fields.js +8 -4
  405. package/dist/commands/fields.js.map +1 -1
  406. package/dist/commands/files.d.ts +26 -0
  407. package/dist/commands/files.d.ts.map +1 -0
  408. package/dist/commands/files.js +160 -0
  409. package/dist/commands/files.js.map +1 -0
  410. package/dist/commands/files.test.d.ts +2 -0
  411. package/dist/commands/files.test.d.ts.map +1 -0
  412. package/dist/commands/files.test.js +243 -0
  413. package/dist/commands/files.test.js.map +1 -0
  414. package/dist/commands/get.d.ts.map +1 -1
  415. package/dist/commands/get.js +14 -6
  416. package/dist/commands/get.js.map +1 -1
  417. package/dist/commands/handshake.d.ts +227 -2
  418. package/dist/commands/handshake.d.ts.map +1 -1
  419. package/dist/commands/handshake.js +2226 -85
  420. package/dist/commands/handshake.js.map +1 -1
  421. package/dist/commands/ingest.d.ts.map +1 -1
  422. package/dist/commands/ingest.js +26 -9
  423. package/dist/commands/ingest.js.map +1 -1
  424. package/dist/commands/init.d.ts +14 -0
  425. package/dist/commands/init.d.ts.map +1 -0
  426. package/dist/commands/init.js +109 -0
  427. package/dist/commands/init.js.map +1 -0
  428. package/dist/commands/login.d.ts +4 -0
  429. package/dist/commands/login.d.ts.map +1 -1
  430. package/dist/commands/login.js +101 -38
  431. package/dist/commands/login.js.map +1 -1
  432. package/dist/commands/method.d.ts +99 -0
  433. package/dist/commands/method.d.ts.map +1 -0
  434. package/dist/commands/method.js +804 -0
  435. package/dist/commands/method.js.map +1 -0
  436. package/dist/commands/migrate-setup.d.ts +18 -0
  437. package/dist/commands/migrate-setup.d.ts.map +1 -0
  438. package/dist/commands/migrate-setup.js +148 -0
  439. package/dist/commands/migrate-setup.js.map +1 -0
  440. package/dist/commands/orient.d.ts +113 -2
  441. package/dist/commands/orient.d.ts.map +1 -1
  442. package/dist/commands/orient.js +162 -7
  443. package/dist/commands/orient.js.map +1 -1
  444. package/dist/commands/profile.d.ts +34 -0
  445. package/dist/commands/profile.d.ts.map +1 -0
  446. package/dist/commands/profile.js +170 -0
  447. package/dist/commands/profile.js.map +1 -0
  448. package/dist/commands/promote.d.ts +12 -1
  449. package/dist/commands/promote.d.ts.map +1 -1
  450. package/dist/commands/promote.js +198 -54
  451. package/dist/commands/promote.js.map +1 -1
  452. package/dist/commands/proof-run.d.ts +51 -0
  453. package/dist/commands/proof-run.d.ts.map +1 -0
  454. package/dist/commands/proof-run.js +209 -0
  455. package/dist/commands/proof-run.js.map +1 -0
  456. package/dist/commands/proposals.js +2 -2
  457. package/dist/commands/proposals.js.map +1 -1
  458. package/dist/commands/reject.d.ts.map +1 -1
  459. package/dist/commands/reject.js +14 -7
  460. package/dist/commands/reject.js.map +1 -1
  461. package/dist/commands/relate.d.ts.map +1 -1
  462. package/dist/commands/relate.js +55 -17
  463. package/dist/commands/relate.js.map +1 -1
  464. package/dist/commands/scoreboard.d.ts +28 -0
  465. package/dist/commands/scoreboard.d.ts.map +1 -0
  466. package/dist/commands/scoreboard.js +40 -0
  467. package/dist/commands/scoreboard.js.map +1 -0
  468. package/dist/commands/search.js +2 -2
  469. package/dist/commands/search.js.map +1 -1
  470. package/dist/commands/session.d.ts +55 -2
  471. package/dist/commands/session.d.ts.map +1 -1
  472. package/dist/commands/session.js +477 -45
  473. package/dist/commands/session.js.map +1 -1
  474. package/dist/commands/setup-audit.d.ts +59 -0
  475. package/dist/commands/setup-audit.d.ts.map +1 -0
  476. package/dist/commands/setup-audit.js +250 -0
  477. package/dist/commands/setup-audit.js.map +1 -0
  478. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  479. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  480. package/dist/commands/setup-detect-surfaces.js +76 -0
  481. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  482. package/dist/commands/setup-ingest.d.ts +17 -0
  483. package/dist/commands/setup-ingest.d.ts.map +1 -0
  484. package/dist/commands/setup-ingest.js +174 -0
  485. package/dist/commands/setup-ingest.js.map +1 -0
  486. package/dist/commands/setup-resolver.d.ts +58 -0
  487. package/dist/commands/setup-resolver.d.ts.map +1 -0
  488. package/dist/commands/setup-resolver.js +150 -0
  489. package/dist/commands/setup-resolver.js.map +1 -0
  490. package/dist/commands/setup-state.d.ts +42 -0
  491. package/dist/commands/setup-state.d.ts.map +1 -0
  492. package/dist/commands/setup-state.js +93 -0
  493. package/dist/commands/setup-state.js.map +1 -0
  494. package/dist/commands/setup.d.ts +23 -0
  495. package/dist/commands/setup.d.ts.map +1 -0
  496. package/dist/commands/setup.js +69 -0
  497. package/dist/commands/setup.js.map +1 -0
  498. package/dist/commands/update.d.ts +8 -0
  499. package/dist/commands/update.d.ts.map +1 -1
  500. package/dist/commands/update.js +71 -49
  501. package/dist/commands/update.js.map +1 -1
  502. package/dist/commands/upgrade.d.ts +5 -0
  503. package/dist/commands/upgrade.d.ts.map +1 -0
  504. package/dist/commands/upgrade.js +110 -0
  505. package/dist/commands/upgrade.js.map +1 -0
  506. package/dist/commands/usage.d.ts +40 -0
  507. package/dist/commands/usage.d.ts.map +1 -0
  508. package/dist/commands/usage.js +232 -0
  509. package/dist/commands/usage.js.map +1 -0
  510. package/dist/commands/verify.d.ts.map +1 -1
  511. package/dist/commands/verify.js +14 -7
  512. package/dist/commands/verify.js.map +1 -1
  513. package/dist/commands/welcome.d.ts +21 -0
  514. package/dist/commands/welcome.d.ts.map +1 -0
  515. package/dist/commands/welcome.js +50 -0
  516. package/dist/commands/welcome.js.map +1 -0
  517. package/dist/commands/whoami.d.ts +12 -0
  518. package/dist/commands/whoami.d.ts.map +1 -0
  519. package/dist/commands/whoami.js +70 -0
  520. package/dist/commands/whoami.js.map +1 -0
  521. package/dist/commands/whoami.test.d.ts +2 -0
  522. package/dist/commands/whoami.test.d.ts.map +1 -0
  523. package/dist/commands/whoami.test.js +50 -0
  524. package/dist/commands/whoami.test.js.map +1 -0
  525. package/dist/commands/workspace.d.ts +113 -0
  526. package/dist/commands/workspace.d.ts.map +1 -0
  527. package/dist/commands/workspace.js +263 -0
  528. package/dist/commands/workspace.js.map +1 -0
  529. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  530. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  531. package/dist/formatters/__tests__/orient-provenance.test.js +493 -0
  532. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  533. package/dist/formatters/__tests__/session-list-show.test.d.ts +2 -0
  534. package/dist/formatters/__tests__/session-list-show.test.d.ts.map +1 -0
  535. package/dist/formatters/__tests__/session-list-show.test.js +159 -0
  536. package/dist/formatters/__tests__/session-list-show.test.js.map +1 -0
  537. package/dist/formatters/__tests__/session.test.d.ts +2 -0
  538. package/dist/formatters/__tests__/session.test.d.ts.map +1 -0
  539. package/dist/formatters/__tests__/session.test.js +113 -0
  540. package/dist/formatters/__tests__/session.test.js.map +1 -0
  541. package/dist/formatters/audit.d.ts +6 -0
  542. package/dist/formatters/audit.d.ts.map +1 -1
  543. package/dist/formatters/audit.js.map +1 -1
  544. package/dist/formatters/capture.d.ts +26 -0
  545. package/dist/formatters/capture.d.ts.map +1 -1
  546. package/dist/formatters/capture.js +27 -0
  547. package/dist/formatters/capture.js.map +1 -1
  548. package/dist/formatters/coaching.d.ts +51 -0
  549. package/dist/formatters/coaching.d.ts.map +1 -0
  550. package/dist/formatters/coaching.js +46 -0
  551. package/dist/formatters/coaching.js.map +1 -0
  552. package/dist/formatters/collections.d.ts +40 -0
  553. package/dist/formatters/collections.d.ts.map +1 -0
  554. package/dist/formatters/collections.js +93 -0
  555. package/dist/formatters/collections.js.map +1 -0
  556. package/dist/formatters/entry.d.ts +30 -0
  557. package/dist/formatters/entry.d.ts.map +1 -1
  558. package/dist/formatters/entry.js +51 -5
  559. package/dist/formatters/entry.js.map +1 -1
  560. package/dist/formatters/handshake.d.ts +43 -0
  561. package/dist/formatters/handshake.d.ts.map +1 -1
  562. package/dist/formatters/handshake.js +141 -3
  563. package/dist/formatters/handshake.js.map +1 -1
  564. package/dist/formatters/orient.d.ts +190 -4
  565. package/dist/formatters/orient.d.ts.map +1 -1
  566. package/dist/formatters/orient.js +273 -22
  567. package/dist/formatters/orient.js.map +1 -1
  568. package/dist/formatters/orient.rcrtMiss.test.d.ts +2 -0
  569. package/dist/formatters/orient.rcrtMiss.test.d.ts.map +1 -0
  570. package/dist/formatters/orient.rcrtMiss.test.js +146 -0
  571. package/dist/formatters/orient.rcrtMiss.test.js.map +1 -0
  572. package/dist/formatters/promote.d.ts +6 -0
  573. package/dist/formatters/promote.d.ts.map +1 -1
  574. package/dist/formatters/promote.js +8 -0
  575. package/dist/formatters/promote.js.map +1 -1
  576. package/dist/formatters/relate.d.ts +2 -0
  577. package/dist/formatters/relate.d.ts.map +1 -1
  578. package/dist/formatters/relate.js +3 -0
  579. package/dist/formatters/relate.js.map +1 -1
  580. package/dist/formatters/scoreboard.d.ts +11 -0
  581. package/dist/formatters/scoreboard.d.ts.map +1 -0
  582. package/dist/formatters/scoreboard.js +48 -0
  583. package/dist/formatters/scoreboard.js.map +1 -0
  584. package/dist/formatters/session.d.ts +85 -2
  585. package/dist/formatters/session.d.ts.map +1 -1
  586. package/dist/formatters/session.js +241 -9
  587. package/dist/formatters/session.js.map +1 -1
  588. package/dist/formatters/update.d.ts +3 -0
  589. package/dist/formatters/update.d.ts.map +1 -1
  590. package/dist/formatters/update.js +4 -0
  591. package/dist/formatters/update.js.map +1 -1
  592. package/dist/generators/adapters.d.ts +70 -4
  593. package/dist/generators/adapters.d.ts.map +1 -1
  594. package/dist/generators/adapters.js +211 -11
  595. package/dist/generators/adapters.js.map +1 -1
  596. package/dist/generators/archetypes.d.ts +52 -0
  597. package/dist/generators/archetypes.d.ts.map +1 -0
  598. package/dist/generators/archetypes.js +190 -0
  599. package/dist/generators/archetypes.js.map +1 -0
  600. package/dist/generators/archetypes.test.d.ts +2 -0
  601. package/dist/generators/archetypes.test.d.ts.map +1 -0
  602. package/dist/generators/archetypes.test.js +272 -0
  603. package/dist/generators/archetypes.test.js.map +1 -0
  604. package/dist/generators/boundary-manifest.d.ts +29 -0
  605. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  606. package/dist/generators/boundary-manifest.js +183 -0
  607. package/dist/generators/boundary-manifest.js.map +1 -0
  608. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  609. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  610. package/dist/generators/boundary-manifest.test.js +91 -0
  611. package/dist/generators/boundary-manifest.test.js.map +1 -0
  612. package/dist/generators/chain-classifier.d.ts +63 -0
  613. package/dist/generators/chain-classifier.d.ts.map +1 -0
  614. package/dist/generators/chain-classifier.js +131 -0
  615. package/dist/generators/chain-classifier.js.map +1 -0
  616. package/dist/generators/chain-classifier.test.d.ts +2 -0
  617. package/dist/generators/chain-classifier.test.d.ts.map +1 -0
  618. package/dist/generators/chain-classifier.test.js +371 -0
  619. package/dist/generators/chain-classifier.test.js.map +1 -0
  620. package/dist/generators/chain-rules.d.ts +42 -0
  621. package/dist/generators/chain-rules.d.ts.map +1 -0
  622. package/dist/generators/chain-rules.js +152 -0
  623. package/dist/generators/chain-rules.js.map +1 -0
  624. package/dist/generators/chain-rules.test.d.ts +2 -0
  625. package/dist/generators/chain-rules.test.d.ts.map +1 -0
  626. package/dist/generators/chain-rules.test.js +211 -0
  627. package/dist/generators/chain-rules.test.js.map +1 -0
  628. package/dist/generators/context-md.d.ts +1 -1
  629. package/dist/generators/context-md.d.ts.map +1 -1
  630. package/dist/generators/context-md.js +18 -7
  631. package/dist/generators/context-md.js.map +1 -1
  632. package/dist/generators/handshake-diff.d.ts +67 -0
  633. package/dist/generators/handshake-diff.d.ts.map +1 -0
  634. package/dist/generators/handshake-diff.js +183 -0
  635. package/dist/generators/handshake-diff.js.map +1 -0
  636. package/dist/generators/handshake-diff.test.d.ts +2 -0
  637. package/dist/generators/handshake-diff.test.d.ts.map +1 -0
  638. package/dist/generators/handshake-diff.test.js +264 -0
  639. package/dist/generators/handshake-diff.test.js.map +1 -0
  640. package/dist/generators/manifest.d.ts +115 -0
  641. package/dist/generators/manifest.d.ts.map +1 -0
  642. package/dist/generators/manifest.js +277 -0
  643. package/dist/generators/manifest.js.map +1 -0
  644. package/dist/generators/portable-knowledge.d.ts +46 -6
  645. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  646. package/dist/generators/portable-knowledge.js +151 -8
  647. package/dist/generators/portable-knowledge.js.map +1 -1
  648. package/dist/generators/portable-knowledge.test.js +43 -0
  649. package/dist/generators/portable-knowledge.test.js.map +1 -1
  650. package/dist/generators/region-projections.d.ts +18 -0
  651. package/dist/generators/region-projections.d.ts.map +1 -0
  652. package/dist/generators/region-projections.js +49 -0
  653. package/dist/generators/region-projections.js.map +1 -0
  654. package/dist/generators/region-projections.test.d.ts +2 -0
  655. package/dist/generators/region-projections.test.d.ts.map +1 -0
  656. package/dist/generators/region-projections.test.js +63 -0
  657. package/dist/generators/region-projections.test.js.map +1 -0
  658. package/dist/generators/region.d.ts +24 -0
  659. package/dist/generators/region.d.ts.map +1 -0
  660. package/dist/generators/region.js +87 -0
  661. package/dist/generators/region.js.map +1 -0
  662. package/dist/generators/region.test.d.ts +2 -0
  663. package/dist/generators/region.test.d.ts.map +1 -0
  664. package/dist/generators/region.test.js +126 -0
  665. package/dist/generators/region.test.js.map +1 -0
  666. package/dist/generators/surface-profiles.d.ts +48 -0
  667. package/dist/generators/surface-profiles.d.ts.map +1 -0
  668. package/dist/generators/surface-profiles.js +98 -0
  669. package/dist/generators/surface-profiles.js.map +1 -0
  670. package/dist/index.js +811 -259
  671. package/dist/index.js.map +1 -1
  672. package/dist/lib/__tests__/parseFields.test.d.ts +2 -0
  673. package/dist/lib/__tests__/parseFields.test.d.ts.map +1 -0
  674. package/dist/lib/__tests__/parseFields.test.js +19 -0
  675. package/dist/lib/__tests__/parseFields.test.js.map +1 -0
  676. package/dist/lib/activation.d.ts +28 -0
  677. package/dist/lib/activation.d.ts.map +1 -0
  678. package/dist/lib/activation.js +57 -0
  679. package/dist/lib/activation.js.map +1 -0
  680. package/dist/lib/activation.test.d.ts +6 -0
  681. package/dist/lib/activation.test.d.ts.map +1 -0
  682. package/dist/lib/activation.test.js +121 -0
  683. package/dist/lib/activation.test.js.map +1 -0
  684. package/dist/lib/canonicalRefs.d.ts +141 -0
  685. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  686. package/dist/lib/canonicalRefs.js +150 -0
  687. package/dist/lib/canonicalRefs.js.map +1 -0
  688. package/dist/lib/client.d.ts +33 -6
  689. package/dist/lib/client.d.ts.map +1 -1
  690. package/dist/lib/client.js +213 -42
  691. package/dist/lib/client.js.map +1 -1
  692. package/dist/lib/collectionRegistry.d.ts +40 -0
  693. package/dist/lib/collectionRegistry.d.ts.map +1 -0
  694. package/dist/lib/collectionRegistry.js +112 -0
  695. package/dist/lib/collectionRegistry.js.map +1 -0
  696. package/dist/lib/compose-wrapup-view.d.ts +48 -0
  697. package/dist/lib/compose-wrapup-view.d.ts.map +1 -0
  698. package/dist/lib/compose-wrapup-view.js +37 -0
  699. package/dist/lib/compose-wrapup-view.js.map +1 -0
  700. package/dist/lib/config.d.ts +204 -4
  701. package/dist/lib/config.d.ts.map +1 -1
  702. package/dist/lib/config.js +594 -42
  703. package/dist/lib/config.js.map +1 -1
  704. package/dist/lib/connectKeyLabel.d.ts +9 -0
  705. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  706. package/dist/lib/connectKeyLabel.js +12 -0
  707. package/dist/lib/connectKeyLabel.js.map +1 -0
  708. package/dist/lib/constants.d.ts +46 -0
  709. package/dist/lib/constants.d.ts.map +1 -0
  710. package/dist/lib/constants.js +83 -0
  711. package/dist/lib/constants.js.map +1 -0
  712. package/dist/lib/conversation-engine.d.ts +45 -0
  713. package/dist/lib/conversation-engine.d.ts.map +1 -0
  714. package/dist/lib/conversation-engine.js +112 -0
  715. package/dist/lib/conversation-engine.js.map +1 -0
  716. package/dist/lib/conversation-phases.d.ts +59 -0
  717. package/dist/lib/conversation-phases.d.ts.map +1 -0
  718. package/dist/lib/conversation-phases.js +11 -0
  719. package/dist/lib/conversation-phases.js.map +1 -0
  720. package/dist/lib/conversation-signals.d.ts +30 -0
  721. package/dist/lib/conversation-signals.d.ts.map +1 -0
  722. package/dist/lib/conversation-signals.js +64 -0
  723. package/dist/lib/conversation-signals.js.map +1 -0
  724. package/dist/lib/conversation.d.ts +36 -0
  725. package/dist/lib/conversation.d.ts.map +1 -0
  726. package/dist/lib/conversation.js +66 -0
  727. package/dist/lib/conversation.js.map +1 -0
  728. package/dist/lib/deployment.d.ts +23 -0
  729. package/dist/lib/deployment.d.ts.map +1 -0
  730. package/dist/lib/deployment.js +78 -0
  731. package/dist/lib/deployment.js.map +1 -0
  732. package/dist/lib/deployment.test.d.ts +5 -0
  733. package/dist/lib/deployment.test.d.ts.map +1 -0
  734. package/dist/lib/deployment.test.js +54 -0
  735. package/dist/lib/deployment.test.js.map +1 -0
  736. package/dist/lib/errors.d.ts +96 -0
  737. package/dist/lib/errors.d.ts.map +1 -0
  738. package/dist/lib/errors.js +105 -0
  739. package/dist/lib/errors.js.map +1 -0
  740. package/dist/lib/experiment.d.ts +18 -0
  741. package/dist/lib/experiment.d.ts.map +1 -0
  742. package/dist/lib/experiment.js +28 -0
  743. package/dist/lib/experiment.js.map +1 -0
  744. package/dist/lib/format.d.ts +10 -0
  745. package/dist/lib/format.d.ts.map +1 -0
  746. package/dist/lib/format.js +27 -0
  747. package/dist/lib/format.js.map +1 -0
  748. package/dist/lib/frontmatter.d.ts +55 -0
  749. package/dist/lib/frontmatter.d.ts.map +1 -0
  750. package/dist/lib/frontmatter.js +92 -0
  751. package/dist/lib/frontmatter.js.map +1 -0
  752. package/dist/lib/frontmatter.test.d.ts +15 -0
  753. package/dist/lib/frontmatter.test.d.ts.map +1 -0
  754. package/dist/lib/frontmatter.test.js +98 -0
  755. package/dist/lib/frontmatter.test.js.map +1 -0
  756. package/dist/lib/glossary.d.ts +19 -0
  757. package/dist/lib/glossary.d.ts.map +1 -0
  758. package/dist/lib/glossary.js +53 -0
  759. package/dist/lib/glossary.js.map +1 -0
  760. package/dist/lib/hook-intents.d.ts +51 -0
  761. package/dist/lib/hook-intents.d.ts.map +1 -0
  762. package/dist/lib/hook-intents.js +85 -0
  763. package/dist/lib/hook-intents.js.map +1 -0
  764. package/dist/lib/inferSourceDate.d.ts +12 -0
  765. package/dist/lib/inferSourceDate.d.ts.map +1 -0
  766. package/dist/lib/inferSourceDate.js +44 -0
  767. package/dist/lib/inferSourceDate.js.map +1 -0
  768. package/dist/lib/method-registry.d.ts +32 -0
  769. package/dist/lib/method-registry.d.ts.map +1 -0
  770. package/dist/lib/method-registry.js +53 -0
  771. package/dist/lib/method-registry.js.map +1 -0
  772. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  773. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  774. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  775. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  776. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  777. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  778. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  779. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  780. package/dist/lib/notice-marker.d.ts +3 -0
  781. package/dist/lib/notice-marker.d.ts.map +1 -0
  782. package/dist/lib/notice-marker.js +53 -0
  783. package/dist/lib/notice-marker.js.map +1 -0
  784. package/dist/lib/onboarding-path-b.d.ts +10 -0
  785. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  786. package/dist/lib/onboarding-path-b.js +213 -0
  787. package/dist/lib/onboarding-path-b.js.map +1 -0
  788. package/dist/lib/onboarding-shared.d.ts +80 -0
  789. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  790. package/dist/lib/onboarding-shared.js +174 -0
  791. package/dist/lib/onboarding-shared.js.map +1 -0
  792. package/dist/lib/onboarding-topics.d.ts +27 -0
  793. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  794. package/dist/lib/onboarding-topics.js +57 -0
  795. package/dist/lib/onboarding-topics.js.map +1 -0
  796. package/dist/lib/onboarding.d.ts +17 -0
  797. package/dist/lib/onboarding.d.ts.map +1 -0
  798. package/dist/lib/onboarding.js +350 -0
  799. package/dist/lib/onboarding.js.map +1 -0
  800. package/dist/lib/parseFields.d.ts +6 -0
  801. package/dist/lib/parseFields.d.ts.map +1 -0
  802. package/dist/lib/parseFields.js +30 -0
  803. package/dist/lib/parseFields.js.map +1 -0
  804. package/dist/lib/productbrain-files.d.ts +94 -0
  805. package/dist/lib/productbrain-files.d.ts.map +1 -0
  806. package/dist/lib/productbrain-files.js +213 -0
  807. package/dist/lib/productbrain-files.js.map +1 -0
  808. package/dist/lib/productbrain-files.test.d.ts +2 -0
  809. package/dist/lib/productbrain-files.test.d.ts.map +1 -0
  810. package/dist/lib/productbrain-files.test.js +239 -0
  811. package/dist/lib/productbrain-files.test.js.map +1 -0
  812. package/dist/lib/profiles.d.ts +41 -0
  813. package/dist/lib/profiles.d.ts.map +1 -0
  814. package/dist/lib/profiles.js +188 -0
  815. package/dist/lib/profiles.js.map +1 -0
  816. package/dist/lib/prompts.d.ts +65 -0
  817. package/dist/lib/prompts.d.ts.map +1 -0
  818. package/dist/lib/prompts.js +132 -0
  819. package/dist/lib/prompts.js.map +1 -0
  820. package/dist/lib/runner.d.ts +10 -0
  821. package/dist/lib/runner.d.ts.map +1 -1
  822. package/dist/lib/runner.js +44 -7
  823. package/dist/lib/runner.js.map +1 -1
  824. package/dist/lib/session.d.ts +85 -4
  825. package/dist/lib/session.d.ts.map +1 -1
  826. package/dist/lib/session.js +276 -13
  827. package/dist/lib/session.js.map +1 -1
  828. package/dist/lib/spinner.d.ts +27 -0
  829. package/dist/lib/spinner.d.ts.map +1 -0
  830. package/dist/lib/spinner.js +76 -0
  831. package/dist/lib/spinner.js.map +1 -0
  832. package/dist/lib/spinner.test.d.ts +2 -0
  833. package/dist/lib/spinner.test.d.ts.map +1 -0
  834. package/dist/lib/spinner.test.js +39 -0
  835. package/dist/lib/spinner.test.js.map +1 -0
  836. package/dist/lib/startup-resolution-signals.d.ts +34 -0
  837. package/dist/lib/startup-resolution-signals.d.ts.map +1 -0
  838. package/dist/lib/startup-resolution-signals.js +118 -0
  839. package/dist/lib/startup-resolution-signals.js.map +1 -0
  840. package/dist/lib/startup-resolution-signals.test.d.ts +2 -0
  841. package/dist/lib/startup-resolution-signals.test.d.ts.map +1 -0
  842. package/dist/lib/startup-resolution-signals.test.js +113 -0
  843. package/dist/lib/startup-resolution-signals.test.js.map +1 -0
  844. package/dist/lib/state.d.ts +51 -0
  845. package/dist/lib/state.d.ts.map +1 -0
  846. package/dist/lib/state.js +90 -0
  847. package/dist/lib/state.js.map +1 -0
  848. package/dist/lib/style.d.ts +96 -0
  849. package/dist/lib/style.d.ts.map +1 -0
  850. package/dist/lib/style.js +169 -0
  851. package/dist/lib/style.js.map +1 -0
  852. package/dist/lib/style.test.d.ts +7 -0
  853. package/dist/lib/style.test.d.ts.map +1 -0
  854. package/dist/lib/style.test.js +263 -0
  855. package/dist/lib/style.test.js.map +1 -0
  856. package/dist/lib/telemetry.d.ts +15 -0
  857. package/dist/lib/telemetry.d.ts.map +1 -0
  858. package/dist/lib/telemetry.js +47 -0
  859. package/dist/lib/telemetry.js.map +1 -0
  860. package/dist/lib/tokenConstants.d.ts +19 -0
  861. package/dist/lib/tokenConstants.d.ts.map +1 -0
  862. package/dist/lib/tokenConstants.js +19 -0
  863. package/dist/lib/tokenConstants.js.map +1 -0
  864. package/dist/lib/update-check.d.ts +56 -0
  865. package/dist/lib/update-check.d.ts.map +1 -0
  866. package/dist/lib/update-check.js +296 -0
  867. package/dist/lib/update-check.js.map +1 -0
  868. package/dist/lib/upgrade-runner.d.ts +22 -0
  869. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  870. package/dist/lib/upgrade-runner.js +110 -0
  871. package/dist/lib/upgrade-runner.js.map +1 -0
  872. package/dist/lib/wizard-surfaces.d.ts +47 -0
  873. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  874. package/dist/lib/wizard-surfaces.js +176 -0
  875. package/dist/lib/wizard-surfaces.js.map +1 -0
  876. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  877. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  878. package/dist/lib/wizard-surfaces.test.js +127 -0
  879. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  880. package/dist/lib/wizard-trust.d.ts +31 -0
  881. package/dist/lib/wizard-trust.d.ts.map +1 -0
  882. package/dist/lib/wizard-trust.js +66 -0
  883. package/dist/lib/wizard-trust.js.map +1 -0
  884. package/dist/lib/wizard-trust.test.d.ts +2 -0
  885. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  886. package/dist/lib/wizard-trust.test.js +32 -0
  887. package/dist/lib/wizard-trust.test.js.map +1 -0
  888. package/dist/lib/workspace-probe.d.ts +19 -0
  889. package/dist/lib/workspace-probe.d.ts.map +1 -0
  890. package/dist/lib/workspace-probe.js +27 -0
  891. package/dist/lib/workspace-probe.js.map +1 -0
  892. package/dist/lib/workspaceNotice.d.ts +59 -0
  893. package/dist/lib/workspaceNotice.d.ts.map +1 -0
  894. package/dist/lib/workspaceNotice.js +77 -0
  895. package/dist/lib/workspaceNotice.js.map +1 -0
  896. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  897. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  898. package/dist/lib/workspaceVocabCache.js +98 -0
  899. package/dist/lib/workspaceVocabCache.js.map +1 -0
  900. package/dist/scoreboard/diagnose.d.ts +189 -0
  901. package/dist/scoreboard/diagnose.d.ts.map +1 -0
  902. package/dist/scoreboard/diagnose.js +255 -0
  903. package/dist/scoreboard/diagnose.js.map +1 -0
  904. package/dist/scoreboard/diagnose.test.d.ts +12 -0
  905. package/dist/scoreboard/diagnose.test.d.ts.map +1 -0
  906. package/dist/scoreboard/diagnose.test.js +204 -0
  907. package/dist/scoreboard/diagnose.test.js.map +1 -0
  908. package/dist/scoreboard/localDrift.d.ts +23 -0
  909. package/dist/scoreboard/localDrift.d.ts.map +1 -0
  910. package/dist/scoreboard/localDrift.js +111 -0
  911. package/dist/scoreboard/localDrift.js.map +1 -0
  912. package/dist/scoreboard/localDrift.test.d.ts +9 -0
  913. package/dist/scoreboard/localDrift.test.d.ts.map +1 -0
  914. package/dist/scoreboard/localDrift.test.js +82 -0
  915. package/dist/scoreboard/localDrift.test.js.map +1 -0
  916. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  917. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  918. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  919. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  920. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  921. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  922. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  923. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  924. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  925. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  926. package/dist/setup/__tests__/state-machine.test.js +341 -0
  927. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  928. package/dist/setup/detect-surfaces.d.ts +21 -0
  929. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  930. package/dist/setup/detect-surfaces.js +39 -0
  931. package/dist/setup/detect-surfaces.js.map +1 -0
  932. package/dist/setup/manifest-writer.d.ts +17 -0
  933. package/dist/setup/manifest-writer.d.ts.map +1 -0
  934. package/dist/setup/manifest-writer.js +153 -0
  935. package/dist/setup/manifest-writer.js.map +1 -0
  936. package/dist/setup/perimeter.d.ts +72 -0
  937. package/dist/setup/perimeter.d.ts.map +1 -0
  938. package/dist/setup/perimeter.js +128 -0
  939. package/dist/setup/perimeter.js.map +1 -0
  940. package/dist/setup/state-machine.d.ts +67 -0
  941. package/dist/setup/state-machine.d.ts.map +1 -0
  942. package/dist/setup/state-machine.js +124 -0
  943. package/dist/setup/state-machine.js.map +1 -0
  944. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  945. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  946. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  947. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  948. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  949. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  950. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  951. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  952. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  953. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  954. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  955. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  956. package/dist/surfaces/adapter.d.ts +70 -0
  957. package/dist/surfaces/adapter.d.ts.map +1 -0
  958. package/dist/surfaces/adapter.js +2 -0
  959. package/dist/surfaces/adapter.js.map +1 -0
  960. package/dist/surfaces/adapters/claude.d.ts +3 -0
  961. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  962. package/dist/surfaces/adapters/claude.js +67 -0
  963. package/dist/surfaces/adapters/claude.js.map +1 -0
  964. package/dist/surfaces/adapters/codex.d.ts +3 -0
  965. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  966. package/dist/surfaces/adapters/codex.js +61 -0
  967. package/dist/surfaces/adapters/codex.js.map +1 -0
  968. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  969. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  970. package/dist/surfaces/adapters/copilot.js +59 -0
  971. package/dist/surfaces/adapters/copilot.js.map +1 -0
  972. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  973. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  974. package/dist/surfaces/adapters/cursor.js +78 -0
  975. package/dist/surfaces/adapters/cursor.js.map +1 -0
  976. package/dist/surfaces/registry.d.ts +76 -0
  977. package/dist/surfaces/registry.d.ts.map +1 -0
  978. package/dist/surfaces/registry.js +117 -0
  979. package/dist/surfaces/registry.js.map +1 -0
  980. package/dist/surfaces/telemetry.d.ts +17 -0
  981. package/dist/surfaces/telemetry.d.ts.map +1 -0
  982. package/dist/surfaces/telemetry.js +31 -0
  983. package/dist/surfaces/telemetry.js.map +1 -0
  984. package/package.json +11 -4
  985. package/templates/archetypes/boundary.md +23 -0
  986. package/templates/archetypes/constraint.md +23 -0
  987. package/templates/archetypes/convention.md +23 -0
  988. package/templates/archetypes/policy.md +23 -0
  989. package/templates/archetypes/quality-gate.md +23 -0
  990. package/templates/archetypes/workflow.md +23 -0
  991. package/templates/method-registry.json +16 -0
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Manifest reader — reads .productbrain/manifest.yaml for adoption state.
3
+ * WP-310 E1: personal workspace layer — manifest-based filtering.
4
+ * WP-421 S1 (#35): extends Manifest with DEC-951 authority keys (`materialize`,
5
+ * `surfaces`, `lock`) and adds `readManifestStatus()` — a typed reader that
6
+ * returns the FULL UNION of legacy + new fields plus a `parseStatus`
7
+ * discriminator (DEC-955, DEC-963 "Authority mode parse semantics").
8
+ *
9
+ * No external YAML dependency is required; the manifest schema is
10
+ * simple enough to parse with a minimal line-by-line parser.
11
+ */
12
+ import { existsSync, readFileSync } from 'fs';
13
+ import { join } from 'path';
14
+ // ── Minimal YAML parser ────────────────────────────────────────────────
15
+ //
16
+ // Handles the subset of YAML used by manifest.yaml:
17
+ // - Top-level key: value pairs (strings, booleans)
18
+ // - Nested objects (one level deep, e.g. hooks.cursor: true)
19
+ // - Sequence lists under a key:
20
+ // adopted:
21
+ // - rule-a
22
+ // - rule-b
23
+ //
24
+ // Does NOT handle: multi-line strings, anchors, complex quoting, etc.
25
+ function parseManifestYaml(raw) {
26
+ const result = {};
27
+ const lines = raw.split('\n');
28
+ let currentKey = null;
29
+ let currentArray = null;
30
+ let currentObject = null;
31
+ const commitCurrent = () => {
32
+ if (currentKey !== null) {
33
+ if (currentArray !== null) {
34
+ result[currentKey] = currentArray;
35
+ }
36
+ else if (currentObject !== null) {
37
+ result[currentKey] = currentObject;
38
+ }
39
+ }
40
+ currentKey = null;
41
+ currentArray = null;
42
+ currentObject = null;
43
+ };
44
+ for (let i = 0; i < lines.length; i++) {
45
+ const rawLine = lines[i];
46
+ const line = rawLine;
47
+ // Skip comments and blank lines
48
+ const trimmed = line.trim();
49
+ if (!trimmed || trimmed.startsWith('#'))
50
+ continue;
51
+ // Array item: " - value"
52
+ const arrayItemMatch = line.match(/^(\s+)-\s+(.+)$/);
53
+ if (arrayItemMatch && currentKey !== null) {
54
+ const indent = arrayItemMatch[1].length;
55
+ const value = arrayItemMatch[2].trim().replace(/^['"]|['"]$/g, '');
56
+ if (indent >= 2) {
57
+ if (currentArray !== null) {
58
+ currentArray.push(value);
59
+ continue;
60
+ }
61
+ }
62
+ }
63
+ // Nested key-value: " key: value"
64
+ const nestedKvMatch = line.match(/^(\s{2,})([a-zA-Z_][a-zA-Z0-9_-]*):\s*(.*)$/);
65
+ if (nestedKvMatch && currentKey !== null) {
66
+ if (currentObject === null) {
67
+ // Transition: previous currentArray (if any) is lost — nested objects start fresh
68
+ currentArray = null;
69
+ currentObject = {};
70
+ }
71
+ const nestedVal = nestedKvMatch[3].trim();
72
+ currentObject[nestedKvMatch[2]] = parseScalar(nestedVal);
73
+ continue;
74
+ }
75
+ // Top-level key: value
76
+ const kvMatch = line.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):\s*(.*)$/);
77
+ if (kvMatch) {
78
+ commitCurrent();
79
+ const key = kvMatch[1];
80
+ const val = kvMatch[2].trim();
81
+ if (val === '') {
82
+ // Value will come on subsequent lines (array or object)
83
+ currentKey = key;
84
+ currentArray = null;
85
+ currentObject = null;
86
+ // Peek ahead using index — avoid indexOf which breaks on duplicate lines
87
+ const nextContent = lines.slice(i + 1).find((l) => l.trim() && !l.trim().startsWith('#'));
88
+ if (nextContent && nextContent.match(/^\s+-\s+/)) {
89
+ currentArray = [];
90
+ }
91
+ else if (nextContent && nextContent.match(/^\s{2,}[a-zA-Z]/)) {
92
+ currentObject = {};
93
+ }
94
+ }
95
+ else {
96
+ result[key] = parseScalar(val);
97
+ }
98
+ continue;
99
+ }
100
+ }
101
+ commitCurrent();
102
+ return result;
103
+ }
104
+ function parseScalar(val) {
105
+ const stripped = val.replace(/^['"]|['"]$/g, '');
106
+ if (stripped === 'true')
107
+ return true;
108
+ if (stripped === 'false')
109
+ return false;
110
+ if (stripped === 'null' || stripped === '~')
111
+ return null;
112
+ if (/^\d+$/.test(stripped))
113
+ return parseInt(stripped, 10);
114
+ return stripped;
115
+ }
116
+ // ── Public API ─────────────────────────────────────────────────────────
117
+ /** Valid AuthorityMode values, derived once for runtime guards. */
118
+ const VALID_AUTHORITY_MODES = new Set([
119
+ 'off',
120
+ 'observe',
121
+ 'project',
122
+ 'govern',
123
+ ]);
124
+ /** Valid LockLevel values. */
125
+ const VALID_LOCK_LEVELS = new Set([
126
+ 'platform',
127
+ 'workspace',
128
+ 'personal',
129
+ ]);
130
+ /**
131
+ * Validate a parsed manifest object against the union schema.
132
+ * Returns the typed Manifest on success, null on any shape violation.
133
+ *
134
+ * Shared between `readManifest()` and `readManifestStatus()` so legacy
135
+ * callers and the WP-421 typed reader agree on what counts as parseable.
136
+ */
137
+ function validateManifestShape(parsed) {
138
+ // Require version to be a string; reject missing or non-string values
139
+ if (typeof parsed.version !== 'string')
140
+ return null;
141
+ // Validate array fields — scalar values (e.g. adopted: "rule-a") must be rejected
142
+ if (parsed.adopted !== undefined && !Array.isArray(parsed.adopted))
143
+ return null;
144
+ if (parsed.rejected !== undefined && !Array.isArray(parsed.rejected))
145
+ return null;
146
+ // Validate method_source if present — only 'chain' | 'bundled' are valid
147
+ if (parsed.method_source !== undefined &&
148
+ parsed.method_source !== 'chain' &&
149
+ parsed.method_source !== 'bundled')
150
+ return null;
151
+ // ── WP-421 S1 — DEC-951 keys ─────────────────────────────────────────
152
+ // materialize: optional; if present, must be a known AuthorityMode.
153
+ if (parsed.materialize !== undefined &&
154
+ !(typeof parsed.materialize === 'string' && VALID_AUTHORITY_MODES.has(parsed.materialize))) {
155
+ return null;
156
+ }
157
+ // surfaces: optional; if present, must be an array of strings.
158
+ if (parsed.surfaces !== undefined) {
159
+ if (!Array.isArray(parsed.surfaces))
160
+ return null;
161
+ if (!parsed.surfaces.every((s) => typeof s === 'string'))
162
+ return null;
163
+ }
164
+ // lock: optional; if present, must be a plain object whose values are valid LockLevels.
165
+ if (parsed.lock !== undefined) {
166
+ if (parsed.lock === null ||
167
+ typeof parsed.lock !== 'object' ||
168
+ Array.isArray(parsed.lock)) {
169
+ return null;
170
+ }
171
+ for (const value of Object.values(parsed.lock)) {
172
+ if (typeof value !== 'string' || !VALID_LOCK_LEVELS.has(value)) {
173
+ return null;
174
+ }
175
+ }
176
+ }
177
+ return parsed;
178
+ }
179
+ /**
180
+ * Read .productbrain/manifest.yaml.
181
+ * Returns null if the file is absent or unparseable (treat as no-op).
182
+ *
183
+ * Legacy reader — kept for callers that only need adoption-state filtering.
184
+ * WP-421 callers should prefer `readManifestStatus()` for typed authority
185
+ * mode + parse-status discriminator.
186
+ */
187
+ export function readManifest(productbrainDir) {
188
+ const manifestPath = join(productbrainDir, 'manifest.yaml');
189
+ if (!existsSync(manifestPath))
190
+ return null;
191
+ try {
192
+ const raw = readFileSync(manifestPath, 'utf8');
193
+ const parsed = parseManifestYaml(raw);
194
+ return validateManifestShape(parsed);
195
+ }
196
+ catch {
197
+ return null; // malformed manifest = treat as absent
198
+ }
199
+ }
200
+ /**
201
+ * Read manifest with full WP-421 authority typing (#35).
202
+ *
203
+ * Returns the FULL UNION of legacy + DEC-951 keys plus a `parseStatus`
204
+ * discriminator. Defaults per DEC-955 / DEC-963:
205
+ * - `.productbrain/` directory absent → mode='off', parseStatus='absent'
206
+ * - Directory present, manifest absent → mode='observe', parseStatus='absent'
207
+ * - Manifest present, no `materialize:` → mode='observe', parseStatus='ok'
208
+ * - Manifest unparseable / fails shape validation → mode='observe',
209
+ * parseStatus='unparseable' (NEVER 'project'/'govern' — fail closed).
210
+ *
211
+ * @param productbrainDir Absolute path to the `.productbrain/` directory.
212
+ * The directory itself MAY be absent — caller passes the candidate path
213
+ * regardless and this reader infers the mode from filesystem state.
214
+ */
215
+ export function readManifestStatus(productbrainDir) {
216
+ // No `.productbrain/` directory at all → mode 'off' (DEC-955).
217
+ if (!existsSync(productbrainDir)) {
218
+ return { mode: 'off', surfaces: [], lock: {}, parseStatus: 'absent', manifest: null };
219
+ }
220
+ const manifestPath = join(productbrainDir, 'manifest.yaml');
221
+ // Directory present but no manifest file → mode 'observe', absent.
222
+ if (!existsSync(manifestPath)) {
223
+ return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'absent', manifest: null };
224
+ }
225
+ let raw;
226
+ try {
227
+ raw = readFileSync(manifestPath, 'utf8');
228
+ }
229
+ catch {
230
+ // I/O failure — treat as unparseable, fail closed to observe (DEC-963).
231
+ return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'unparseable', manifest: null };
232
+ }
233
+ let parsed;
234
+ try {
235
+ parsed = parseManifestYaml(raw);
236
+ }
237
+ catch {
238
+ return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'unparseable', manifest: null };
239
+ }
240
+ const validated = validateManifestShape(parsed);
241
+ if (validated === null) {
242
+ // Shape violation (e.g. invalid materialize value, malformed lock map).
243
+ // Fail closed to observe per DEC-963 — NEVER project/govern.
244
+ return { mode: 'observe', surfaces: [], lock: {}, parseStatus: 'unparseable', manifest: null };
245
+ }
246
+ return {
247
+ mode: validated.materialize ?? 'observe',
248
+ surfaces: validated.surfaces ?? [],
249
+ lock: validated.lock ?? {},
250
+ parseStatus: 'ok',
251
+ manifest: validated,
252
+ };
253
+ }
254
+ /**
255
+ * Filter a list of items by the manifest's adopted/rejected lists.
256
+ *
257
+ * Rules:
258
+ * - No manifest → return all items unchanged (no-op, preserves current behaviour).
259
+ * - rejected denylist applied first — excluded regardless of adopted.
260
+ * - adopted allowlist applied second — only items in the list pass (only when non-empty).
261
+ * - Empty adopted array → allowlist is inactive, all non-rejected items pass.
262
+ */
263
+ export function filterByAdoptionState(items, manifest) {
264
+ if (!manifest)
265
+ return items;
266
+ const adopted = manifest.adopted ?? [];
267
+ const rejected = new Set(manifest.rejected ?? []);
268
+ // Apply rejected denylist first
269
+ let filtered = items.filter((item) => !rejected.has(item.name));
270
+ // Apply adopted allowlist (only when non-empty)
271
+ if (adopted.length > 0) {
272
+ const adoptedSet = new Set(adopted);
273
+ filtered = filtered.filter((item) => adoptedSet.has(item.name));
274
+ }
275
+ return filtered;
276
+ }
277
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/generators/manifest.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@
2
2
  * Portable knowledge — reads canonical skills/rules from .productbrain/
3
3
  * and generates tool-specific copies for Cursor, Claude Code, etc.
4
4
  */
5
+ import type { SurfaceProfile, TargetName } from './surface-profiles.js';
6
+ export type { TargetName };
5
7
  export interface WhenConditions {
6
8
  when_stack?: string;
7
9
  when_minStage?: string;
@@ -16,19 +18,28 @@ export interface CanonicalSkill {
16
18
  targets?: string[];
17
19
  level?: string;
18
20
  conditions?: WhenConditions;
21
+ /** 'team' = default; 'local' = local surface files only, never committed. */
22
+ persist?: 'local' | 'team';
19
23
  }
20
24
  export interface CanonicalRule {
21
25
  name: string;
22
26
  description: string;
23
27
  scope?: string;
28
+ /**
29
+ * Path-scope glob for path-aware surfaces (e.g. "convex/**\/*.ts"). Drives the
30
+ * GitHub Copilot `.github/instructions/<name>.instructions.md` fan-out (applyTo frontmatter)
31
+ * and, in principle, nested CLAUDE.md/AGENTS.md placement. Absent = repo-wide only.
32
+ */
33
+ applyTo?: string;
24
34
  autoApply: boolean;
25
35
  body: string;
26
36
  sourcePath: string;
27
37
  targets?: string[];
28
38
  level?: string;
29
39
  conditions?: WhenConditions;
40
+ /** 'team' = default; 'local' = local surface files only, never committed. */
41
+ persist?: 'local' | 'team';
30
42
  }
31
- export type TargetName = 'cursor' | 'claude' | 'copilot' | 'codex';
32
43
  /** Returns true if the entry should be emitted to the given target. */
33
44
  export declare function shouldEmitToTarget(entry: CanonicalRule | CanonicalSkill, target: TargetName): boolean;
34
45
  export type HandshakeLevel = 'beginner' | 'intermediate' | 'expert';
@@ -69,6 +80,18 @@ export declare function evaluateConditions(conditions: WhenConditions, profile:
69
80
  };
70
81
  export declare function readCanonicalSkills(productbrainDir: string): CanonicalSkill[];
71
82
  export declare function readCanonicalRules(productbrainDir: string): CanonicalRule[];
83
+ /**
84
+ * Read machine-local personal rules from .productbrain/.local/rules/.
85
+ * Returns [] when the directory is absent — no-op when personal layer is not set up.
86
+ * Every returned rule has persist: 'local' set, marking it as part of the personal layer.
87
+ */
88
+ export declare function readPersonalLayer(productbrainDir: string): CanonicalRule[];
89
+ /**
90
+ * Read machine-local personal skills from .productbrain/.local/skills/.
91
+ * Returns [] when the directory is absent — no-op when personal layer is not set up.
92
+ * Every returned skill has persist: 'local' set, marking it as part of the personal layer.
93
+ */
94
+ export declare function readPersonalSkillsLayer(productbrainDir: string): CanonicalSkill[];
72
95
  /**
73
96
  * Strip transport-conditional sections from a skill body.
74
97
  *
@@ -86,17 +109,34 @@ export declare function stripTransportSections(body: string, target: TargetName)
86
109
  * Generate a Cursor SKILL.md from a canonical skill.
87
110
  * Cursor expects: name, description (with triggers embedded).
88
111
  */
89
- export declare function generateCursorSkill(skill: CanonicalSkill): string;
112
+ export declare function generateCursorSkill(skill: CanonicalSkill, profile?: SurfaceProfile): string;
90
113
  /**
91
114
  * Generate a Cursor .mdc rule from a canonical rule.
92
115
  * Cursor expects: description, globs, alwaysApply.
93
116
  */
94
- export declare function generateCursorRule(rule: CanonicalRule): string;
117
+ export declare function generateCursorRule(rule: CanonicalRule, profile?: SurfaceProfile): string;
118
+ /**
119
+ * Apply batch-mode transformations to a skill body (DEC-283).
120
+ *
121
+ * Skills describe WHAT (intent). This generator produces HOW (batch-appropriate
122
+ * instructions). We transform interactive patterns without gutting the skill's
123
+ * logical structure and purpose.
124
+ *
125
+ * Transformations applied:
126
+ * 1. Strip sub-agent spawn patterns → inline steps
127
+ * 2. Strip user confirmation gates → autonomous proceed
128
+ * 3. Strip streaming/interactive references
129
+ * 4. Add batch governance header after first `#` heading
130
+ */
131
+ export declare function applyBatchTransformations(body: string): string;
95
132
  /**
96
133
  * Generate a Codex skill projection from a canonical skill.
97
134
  * This is a repo-local markdown projection, not a separate authoring source.
135
+ *
136
+ * When profile.executionModel === 'batch', batch transformations are applied
137
+ * AFTER transport stripping and path replacement (DEC-283).
98
138
  */
99
- export declare function generateCodexSkill(skill: CanonicalSkill): string;
139
+ export declare function generateCodexSkill(skill: CanonicalSkill, profile?: SurfaceProfile): string;
100
140
  /**
101
141
  * Generate a Codex skill index/router file.
102
142
  * AGENTS.md can point here so Codex has one obvious place to find available workflows.
@@ -116,10 +156,10 @@ export declare function validateCodexSkills(skills: CanonicalSkill[]): CodexVali
116
156
  * Generate a Claude Code .md rule from a canonical rule.
117
157
  * Claude Code expects: description, optional paths (array).
118
158
  */
119
- export declare function generateClaudeRule(rule: CanonicalRule): string;
159
+ export declare function generateClaudeRule(rule: CanonicalRule, profile?: SurfaceProfile): string;
120
160
  /**
121
161
  * Generate a Claude Code skill-router.md — imperative skill activation rule.
122
162
  * Loaded automatically by Claude Code via .claude/rules/ with no paths (always active).
123
163
  */
124
- export declare function generateClaudeSkillRouter(skills: CanonicalSkill[]): string;
164
+ export declare function generateClaudeSkillRouter(skills: CanonicalSkill[], profile?: SurfaceProfile): string;
125
165
  //# sourceMappingURL=portable-knowledge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portable-knowledge.d.ts","sourceRoot":"","sources":["../../src/generators/portable-knowledge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portable-knowledge.d.ts","sourceRoot":"","sources":["../../src/generators/portable-knowledge.ts"],"names":[],"mappings":"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"}
@@ -222,6 +222,7 @@ export function readCanonicalRules(productbrainDir) {
222
222
  const name = fields.get('name') ?? basename(file, '.md');
223
223
  const description = fields.get('description') ?? '';
224
224
  const scope = fields.get('scope');
225
+ const applyTo = fields.get('applyTo');
225
226
  const autoApply = fields.get('autoApply') === 'true';
226
227
  const targets = arrayFields.get('targets');
227
228
  const level = fields.get('level');
@@ -236,10 +237,104 @@ export function readCanonicalRules(productbrainDir) {
236
237
  if (whenMinGovernance)
237
238
  conditions.when_minGovernance = whenMinGovernance;
238
239
  const hasConditions = Object.keys(conditions).length > 0;
239
- rules.push({ name, description, scope, autoApply, body, sourcePath: filePath, targets: targets?.length ? targets : undefined, level: level || undefined, conditions: hasConditions ? conditions : undefined });
240
+ rules.push({ name, description, scope, applyTo: applyTo || undefined, autoApply, body, sourcePath: filePath, targets: targets?.length ? targets : undefined, level: level || undefined, conditions: hasConditions ? conditions : undefined });
240
241
  }
241
242
  return rules.sort((a, b) => a.name.localeCompare(b.name));
242
243
  }
244
+ /**
245
+ * Read machine-local personal rules from .productbrain/.local/rules/.
246
+ * Returns [] when the directory is absent — no-op when personal layer is not set up.
247
+ * Every returned rule has persist: 'local' set, marking it as part of the personal layer.
248
+ */
249
+ export function readPersonalLayer(productbrainDir) {
250
+ const localRulesDir = join(productbrainDir, '.local', 'rules');
251
+ if (!existsSync(localRulesDir))
252
+ return [];
253
+ const files = readdirSync(localRulesDir).filter((f) => f.endsWith('.md'));
254
+ const rules = [];
255
+ for (const file of files) {
256
+ const filePath = join(localRulesDir, file);
257
+ const raw = readFileSync(filePath, 'utf8');
258
+ const { fields, arrayFields, body } = parseFrontmatter(raw);
259
+ const name = fields.get('name') ?? basename(file, '.md');
260
+ const description = fields.get('description') ?? '';
261
+ const scope = fields.get('scope');
262
+ const applyTo = fields.get('applyTo');
263
+ const autoApply = fields.get('autoApply') === 'true';
264
+ const targets = arrayFields.get('targets');
265
+ const level = fields.get('level');
266
+ const conditions = {};
267
+ const whenStack = fields.get('when_stack');
268
+ const whenMinStage = fields.get('when_minStage');
269
+ const whenMinGovernance = fields.get('when_minGovernance');
270
+ if (whenStack)
271
+ conditions.when_stack = whenStack;
272
+ if (whenMinStage)
273
+ conditions.when_minStage = whenMinStage;
274
+ if (whenMinGovernance)
275
+ conditions.when_minGovernance = whenMinGovernance;
276
+ const hasConditions = Object.keys(conditions).length > 0;
277
+ rules.push({
278
+ name,
279
+ description,
280
+ scope,
281
+ applyTo: applyTo || undefined,
282
+ autoApply,
283
+ body,
284
+ sourcePath: filePath,
285
+ targets: targets?.length ? targets : undefined,
286
+ level: level || undefined,
287
+ conditions: hasConditions ? conditions : undefined,
288
+ persist: 'local',
289
+ });
290
+ }
291
+ return rules.sort((a, b) => a.name.localeCompare(b.name));
292
+ }
293
+ /**
294
+ * Read machine-local personal skills from .productbrain/.local/skills/.
295
+ * Returns [] when the directory is absent — no-op when personal layer is not set up.
296
+ * Every returned skill has persist: 'local' set, marking it as part of the personal layer.
297
+ */
298
+ export function readPersonalSkillsLayer(productbrainDir) {
299
+ const localSkillsDir = join(productbrainDir, '.local', 'skills');
300
+ if (!existsSync(localSkillsDir))
301
+ return [];
302
+ const files = readdirSync(localSkillsDir).filter((f) => f.endsWith('.md'));
303
+ const skills = [];
304
+ for (const file of files) {
305
+ const filePath = join(localSkillsDir, file);
306
+ const raw = readFileSync(filePath, 'utf8');
307
+ const { fields, arrayFields, body } = parseFrontmatter(raw);
308
+ const name = fields.get('name') ?? basename(file, '.md');
309
+ const description = fields.get('description') ?? '';
310
+ const triggers = arrayFields.get('triggers') ?? [];
311
+ const targets = arrayFields.get('targets');
312
+ const level = fields.get('level');
313
+ const conditions = {};
314
+ const whenStack = fields.get('when_stack');
315
+ const whenMinStage = fields.get('when_minStage');
316
+ const whenMinGovernance = fields.get('when_minGovernance');
317
+ if (whenStack)
318
+ conditions.when_stack = whenStack;
319
+ if (whenMinStage)
320
+ conditions.when_minStage = whenMinStage;
321
+ if (whenMinGovernance)
322
+ conditions.when_minGovernance = whenMinGovernance;
323
+ const hasConditions = Object.keys(conditions).length > 0;
324
+ skills.push({
325
+ name,
326
+ description,
327
+ triggers,
328
+ body,
329
+ sourcePath: filePath,
330
+ targets: targets?.length ? targets : undefined,
331
+ level: level || undefined,
332
+ conditions: hasConditions ? conditions : undefined,
333
+ persist: 'local',
334
+ });
335
+ }
336
+ return skills.sort((a, b) => a.name.localeCompare(b.name));
337
+ }
243
338
  // ── Transport section stripping ───────────────────────────────────────
244
339
  /**
245
340
  * Strip transport-conditional sections from a skill body.
@@ -271,7 +366,7 @@ export function stripTransportSections(body, target) {
271
366
  * Generate a Cursor SKILL.md from a canonical skill.
272
367
  * Cursor expects: name, description (with triggers embedded).
273
368
  */
274
- export function generateCursorSkill(skill) {
369
+ export function generateCursorSkill(skill, profile) {
275
370
  // Cursor puts trigger phrases in the description field
276
371
  const triggerLine = skill.triggers.length > 0
277
372
  ? ` Use when the user says ${skill.triggers.map((t) => `"${t}"`).join(', ')}.`
@@ -296,7 +391,7 @@ ${body}`;
296
391
  * Generate a Cursor .mdc rule from a canonical rule.
297
392
  * Cursor expects: description, globs, alwaysApply.
298
393
  */
299
- export function generateCursorRule(rule) {
394
+ export function generateCursorRule(rule, profile) {
300
395
  // Replace canonical paths with Cursor paths in body
301
396
  const body = rule.body
302
397
  .replace(/\.productbrain\/rules\/(\S+)\.md/g, '.cursor/rules/$1.mdc')
@@ -311,17 +406,65 @@ alwaysApply: ${!rule.scope && rule.autoApply}
311
406
  ${body}`;
312
407
  }
313
408
  // ── Codex generators ───────────────────────────────────────────────────
409
+ /**
410
+ * Apply batch-mode transformations to a skill body (DEC-283).
411
+ *
412
+ * Skills describe WHAT (intent). This generator produces HOW (batch-appropriate
413
+ * instructions). We transform interactive patterns without gutting the skill's
414
+ * logical structure and purpose.
415
+ *
416
+ * Transformations applied:
417
+ * 1. Strip sub-agent spawn patterns → inline steps
418
+ * 2. Strip user confirmation gates → autonomous proceed
419
+ * 3. Strip streaming/interactive references
420
+ * 4. Add batch governance header after first `#` heading
421
+ */
422
+ export function applyBatchTransformations(body) {
423
+ // Split into fenced code blocks vs prose so transforms only apply to prose.
424
+ // Fenced blocks (``` or ~~~) may contain examples of interactive patterns
425
+ // that must be preserved verbatim.
426
+ const segments = body.split(/(^```[^\n]*\n[\s\S]*?^```\s*$|^~~~[^\n]*\n[\s\S]*?^~~~\s*$)/m);
427
+ let result = segments
428
+ .map((segment, i) => {
429
+ // Odd indices are fenced code blocks — pass through unchanged
430
+ if (i % 2 === 1)
431
+ return segment;
432
+ return applyProseTransformations(segment);
433
+ })
434
+ .join('');
435
+ // 4. Add batch governance header after the first `#` heading line
436
+ const batchHeader = '> Batch execution mode: This skill runs autonomously without interactive gates. Decisions are logged, not prompted.';
437
+ result = result.replace(/^(#\s+[^\n]+)(\n)/m, `$1$2\n${batchHeader}\n`);
438
+ return result;
439
+ }
440
+ /** Apply interactive-pattern transforms to a prose segment (not inside code fences). */
441
+ function applyProseTransformations(text) {
442
+ let result = text;
443
+ // 1. Sub-agent spawn patterns — lines that dispatch to sub-agents or fresh conversations
444
+ result = result.replace(/^.*\b(spawn\s+(a\s+)?(sub-agent|build\s+sub-agent|review\s+sub-agent|judge|system\s+verification\s+agent)|Agent\s+tool\s+dispatch|fresh\s+conversation\s+handoff|open\s+a\s+(new|fresh)\s+(conversation|chat)|start\s+a\s+(new|fresh)\s+(conversation|chat))\b.*$/gim, 'Execute as inline steps within this session.');
445
+ // 2. User confirmation gates — lines that halt for human input
446
+ result = result.replace(/^.*\b(ask\s+the\s+(user|human)|wait\s+for\s+(user\s+)?input|present\s+gate\s+to\s+(the\s+)?user|stop\s+and\s+ask|pause\s+and\s+ask|get\s+user\s+confirmation|awaiting\s+your\s+feedback|wait\s+for\s+(human|user)\s+(sign-?off|approval|input))\b.*$/gim, 'Proceed autonomously. Log decision rationale.');
447
+ // 3. Streaming / persistent-connection references
448
+ result = result.replace(/^.*\b(real-time\s+feedback|streaming\s+output|interactive\s+mcp\s+tool\s+calls?\s+that\s+assume\s+a\s+persistent\s+connection)\b.*$/gim, '');
449
+ return result;
450
+ }
314
451
  /**
315
452
  * Generate a Codex skill projection from a canonical skill.
316
453
  * This is a repo-local markdown projection, not a separate authoring source.
454
+ *
455
+ * When profile.executionModel === 'batch', batch transformations are applied
456
+ * AFTER transport stripping and path replacement (DEC-283).
317
457
  */
318
- export function generateCodexSkill(skill) {
458
+ export function generateCodexSkill(skill, profile) {
319
459
  const triggerLine = skill.triggers.length > 0
320
460
  ? `\n\n**Triggers:** ${skill.triggers.map((t) => `\`${t}\``).join(', ')}`
321
461
  : '';
322
462
  const stripped = stripTransportSections(skill.body, 'codex');
323
- const body = stripped
463
+ const pathReplaced = stripped
324
464
  .replace(/\.productbrain\/skills\/(\S+)\.md/g, '.codex/skills/$1.md');
465
+ const body = profile?.executionModel === 'batch'
466
+ ? applyBatchTransformations(pathReplaced)
467
+ : pathReplaced;
325
468
  return `<!-- ${MARKER} — source: .productbrain/skills/${skill.name}.md -->
326
469
 
327
470
  # ${skill.name}
@@ -372,7 +515,7 @@ const CODEX_DEAD_REFERENCE_PATTERNS = [
372
515
  { pattern: /\bpb\s+(session|orient|get|capture|search|update|handshake|context|constellation)\b/, label: 'pb CLI command' },
373
516
  { pattern: /\bsub-agent\b/i, label: 'sub-agent reference' },
374
517
  { pattern: /\bAgent\s+tool\b/, label: 'Agent tool reference' },
375
- { pattern: /\bmcpCall\b/, label: 'mcpCall reference' },
518
+ { pattern: /\bkernelCall\b/, label: 'kernelCall reference' },
376
519
  { pattern: /\bpb\s+session\s+(start|close)\b/, label: 'pb session lifecycle' },
377
520
  ];
378
521
  /**
@@ -403,7 +546,7 @@ export function validateCodexSkills(skills) {
403
546
  * Generate a Claude Code .md rule from a canonical rule.
404
547
  * Claude Code expects: description, optional paths (array).
405
548
  */
406
- export function generateClaudeRule(rule) {
549
+ export function generateClaudeRule(rule, profile) {
407
550
  // Replace canonical paths with Claude Code paths in body
408
551
  const body = rule.body
409
552
  .replace(/\.productbrain\/rules\/(\S+)\.md/g, '.claude/rules/$1.md')
@@ -425,7 +568,7 @@ ${body}`;
425
568
  * Generate a Claude Code skill-router.md — imperative skill activation rule.
426
569
  * Loaded automatically by Claude Code via .claude/rules/ with no paths (always active).
427
570
  */
428
- export function generateClaudeSkillRouter(skills) {
571
+ export function generateClaudeSkillRouter(skills, profile) {
429
572
  if (skills.length === 0)
430
573
  return '';
431
574
  const triggerBlocks = skills.map((skill) => {