@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
@@ -1,12 +1,14 @@
1
1
  /**
2
- * pb capture extensions — --link, --json flags.
2
+ * pb capture extensions — --link, --json flags, WP-319 grounding.
3
3
  * TEN-341 test contract: capture --link calls createEntryRelation, capture --json outputs JSON.
4
+ * WP-319 S3: grounding fires in parallel, fail-open, --suggest-only, --strict, PB_GROUNDING_MODE.
4
5
  */
5
6
  import { beforeEach, describe, expect, it, vi } from 'vitest';
6
7
  import { runCapture } from '../commands/capture.js';
7
- const mcpCallWithSessionMock = vi.fn();
8
+ import { CLIError, ErrorCode } from '../lib/errors.js';
9
+ const kernelCallWithSessionMock = vi.fn();
8
10
  vi.mock('../lib/client.js', () => ({
9
- mcpCallWithSession: (...args) => mcpCallWithSessionMock(...args),
11
+ kernelCallWithSession: (...args) => kernelCallWithSessionMock(...args),
10
12
  }));
11
13
  vi.mock('../lib/config.js', () => ({
12
14
  getConfigOrGuide: vi.fn(() => Promise.resolve({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' })),
@@ -18,17 +20,30 @@ vi.mock('../lib/session.js', () => ({
18
20
  }));
19
21
  describe('runCapture --link', () => {
20
22
  beforeEach(() => {
21
- mcpCallWithSessionMock.mockReset();
23
+ kernelCallWithSessionMock.mockReset();
22
24
  mockSession = { sessionId: 'sess-test' };
23
25
  });
24
26
  it('creates entry then links to target with default relation type', async () => {
25
- mcpCallWithSessionMock
26
- .mockResolvedValueOnce({ collection: 'tensions', confidence: 0.9, tier: 'high' })
27
- .mockResolvedValueOnce({ docId: 'doc-1', entryId: 'TEN-710' })
28
- .mockResolvedValueOnce({});
27
+ // Prefix "TEN:" is extracted → skips classification, routes directly to tensions
28
+ kernelCallWithSessionMock.mockImplementation((fn) => {
29
+ if (fn === 'chain.suggestLinksForCapture')
30
+ return Promise.resolve([]);
31
+ if (fn === 'chain.createEntry')
32
+ return Promise.resolve({ docId: 'doc-1', entryId: 'TEN-710' });
33
+ if (fn === 'chain.createEntryRelation')
34
+ return Promise.resolve({});
35
+ return Promise.resolve({});
36
+ });
29
37
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
30
38
  await runCapture({ text: 'TEN: missing validation', link: 'BET-151' });
31
- expect(mcpCallWithSessionMock).toHaveBeenCalledWith('chain.createEntryRelation', {
39
+ // Verify classification was skipped (no resolveCollection call)
40
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.resolveCollection', expect.anything());
41
+ // Verify prefix was stripped from entry name and routed to correct collection
42
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.objectContaining({
43
+ collectionSlug: 'tensions',
44
+ name: 'missing validation',
45
+ }));
46
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntryRelation', {
32
47
  fromEntryId: 'TEN-710',
33
48
  toEntryId: 'BET-151',
34
49
  type: 'surfaces_tension_in',
@@ -36,13 +51,20 @@ describe('runCapture --link', () => {
36
51
  writeSpy.mockRestore();
37
52
  });
38
53
  it('uses custom relation type when --type provided', async () => {
39
- mcpCallWithSessionMock
40
- .mockResolvedValueOnce({ collection: 'insights', confidence: 0.8, tier: 'high' })
41
- .mockResolvedValueOnce({ docId: 'doc-2', entryId: 'INS-50' })
42
- .mockResolvedValueOnce({});
54
+ // Prefix "INS:" is extracted → skips classification, routes directly to insights
55
+ kernelCallWithSessionMock.mockImplementation((fn) => {
56
+ if (fn === 'chain.suggestLinksForCapture')
57
+ return Promise.resolve([]);
58
+ if (fn === 'chain.createEntry')
59
+ return Promise.resolve({ docId: 'doc-2', entryId: 'INS-50' });
60
+ if (fn === 'chain.createEntryRelation')
61
+ return Promise.resolve({});
62
+ return Promise.resolve({});
63
+ });
43
64
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
44
65
  await runCapture({ text: 'INS: discovered X', link: 'DEC-264', type: 'informed_by' });
45
- expect(mcpCallWithSessionMock).toHaveBeenCalledWith('chain.createEntryRelation', {
66
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.resolveCollection', expect.anything());
67
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntryRelation', {
46
68
  fromEntryId: 'INS-50',
47
69
  toEntryId: 'DEC-264',
48
70
  type: 'informed_by',
@@ -52,13 +74,18 @@ describe('runCapture --link', () => {
52
74
  });
53
75
  describe('runCapture --json', () => {
54
76
  beforeEach(() => {
55
- mcpCallWithSessionMock.mockReset();
77
+ kernelCallWithSessionMock.mockReset();
56
78
  mockSession = { sessionId: 'sess-test' };
57
79
  });
58
80
  it('outputs valid JSON with id field and no other stdout', async () => {
59
- mcpCallWithSessionMock
60
- .mockResolvedValueOnce({ collection: 'tensions', confidence: 0.9, tier: 'high' })
61
- .mockResolvedValueOnce({ docId: 'doc-1', entryId: 'TEN-711' });
81
+ // Prefix "TEN:" is extracted → skips classification
82
+ kernelCallWithSessionMock.mockImplementation((fn) => {
83
+ if (fn === 'chain.suggestLinksForCapture')
84
+ return Promise.resolve([]);
85
+ if (fn === 'chain.createEntry')
86
+ return Promise.resolve({ docId: 'doc-1', entryId: 'TEN-711' });
87
+ return Promise.resolve({});
88
+ });
62
89
  let stdoutOutput = '';
63
90
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
64
91
  stdoutOutput += String(chunk);
@@ -83,37 +110,431 @@ describe('runCapture --json', () => {
83
110
  expect(output).toHaveProperty('confidence');
84
111
  });
85
112
  });
86
- describe('runCapture classification guard', () => {
113
+ describe('runCapture coaching passthrough (WP-475 E1)', () => {
87
114
  beforeEach(() => {
88
- mcpCallWithSessionMock.mockReset();
115
+ kernelCallWithSessionMock.mockReset();
89
116
  mockSession = { sessionId: 'sess-test' };
90
117
  });
91
- it('exits cleanly when classification requires review', async () => {
92
- mcpCallWithSessionMock.mockResolvedValueOnce(null);
93
- const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
94
- const exitSpy = vi
95
- .spyOn(process, 'exit')
96
- .mockImplementation(((code) => {
97
- throw new Error(`EXIT:${code ?? ''}`);
118
+ const coaching = {
119
+ source: 'heuristic',
120
+ verdict: {
121
+ entryId: 'DEC-77',
122
+ canonicalKey: 'decision',
123
+ tier: 'assertive',
124
+ context: 'capture',
125
+ passed: false,
126
+ criteria: [
127
+ { id: 'specificity', passed: false, weight: 2, hint: 'Be specific.', questionTemplate: 'What exactly?' },
128
+ ],
129
+ weakest: { criterion: 'specificity', hint: 'Be specific.', questionTemplate: 'What exactly?' },
130
+ overridden: false,
131
+ },
132
+ };
133
+ it('--json output includes the raw coaching object from the write response', async () => {
134
+ kernelCallWithSessionMock.mockImplementation((fn) => {
135
+ if (fn === 'chain.suggestLinksForCapture')
136
+ return Promise.resolve([]);
137
+ if (fn === 'chain.createEntry')
138
+ return Promise.resolve({ docId: 'doc-c1', entryId: 'DEC-77', coaching });
139
+ return Promise.resolve({});
140
+ });
141
+ let stdoutOutput = '';
142
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
143
+ stdoutOutput += String(chunk);
144
+ return true;
145
+ });
146
+ await runCapture({ text: 'DEC: chose something', json: true });
147
+ writeSpy.mockRestore();
148
+ const jsonLines = stdoutOutput.split('\n').filter((line) => {
149
+ try {
150
+ JSON.parse(line);
151
+ return true;
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ });
157
+ expect(jsonLines).toHaveLength(1);
158
+ const output = JSON.parse(jsonLines[0]);
159
+ expect(output.coaching).toEqual(coaching);
160
+ });
161
+ it('--json output omits coaching when the write response has none (backward compat)', async () => {
162
+ kernelCallWithSessionMock.mockImplementation((fn) => {
163
+ if (fn === 'chain.suggestLinksForCapture')
164
+ return Promise.resolve([]);
165
+ if (fn === 'chain.createEntry')
166
+ return Promise.resolve({ docId: 'doc-c2', entryId: 'DEC-78' });
167
+ return Promise.resolve({});
168
+ });
169
+ let stdoutOutput = '';
170
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
171
+ stdoutOutput += String(chunk);
172
+ return true;
173
+ });
174
+ await runCapture({ text: 'DEC: chose another thing', json: true });
175
+ writeSpy.mockRestore();
176
+ const jsonLines = stdoutOutput.split('\n').filter((line) => {
177
+ try {
178
+ JSON.parse(line);
179
+ return true;
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ });
185
+ expect(jsonLines).toHaveLength(1);
186
+ expect(JSON.parse(jsonLines[0])).not.toHaveProperty('coaching');
187
+ });
188
+ // ── WP-475 E1 fix: relation-aware receipt on --link ────────────────────────
189
+ // The create-response verdict is computed BEFORE the --link relation exists,
190
+ // so relation-dependent criteria (wired-in checks) read falsely failed. When
191
+ // the capture created a relation, the CLI re-evaluates AFTER it lands and
192
+ // renders THAT verdict.
193
+ const reEvalCoaching = {
194
+ source: 'heuristic',
195
+ verdict: {
196
+ ...coaching.verdict,
197
+ passed: true,
198
+ criteria: [{ id: 'specificity', passed: true, weight: 2, hint: 'Be specific.', questionTemplate: 'What exactly?' }],
199
+ weakest: null,
200
+ },
201
+ };
202
+ it('--link: re-evaluates after the relation lands and renders the post-relation verdict', async () => {
203
+ kernelCallWithSessionMock.mockImplementation((fn) => {
204
+ if (fn === 'chain.suggestLinksForCapture')
205
+ return Promise.resolve([]);
206
+ if (fn === 'chain.createEntry')
207
+ return Promise.resolve({ docId: 'doc-c3', entryId: 'DEC-79', coaching });
208
+ if (fn === 'chain.createEntryRelation')
209
+ return Promise.resolve({});
210
+ if (fn === 'quality.evaluateHeuristicAndSchedule')
211
+ return Promise.resolve(reEvalCoaching);
212
+ return Promise.resolve({});
213
+ });
214
+ let stdoutOutput = '';
215
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
216
+ stdoutOutput += String(chunk);
217
+ return true;
218
+ });
219
+ await runCapture({ text: 'DEC: chose with a link', link: 'TEN-1', json: true });
220
+ writeSpy.mockRestore();
221
+ // Deterministic --link fix: the CREATE call defers the LLM schedule (the
222
+ // post-relation re-eval owns the single LLM run)…
223
+ const createCall = kernelCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
224
+ expect(createCall?.[1]).toMatchObject({ deferLLMSchedule: true });
225
+ // …and the re-eval fires with the created entry, AFTER the relation write,
226
+ // WITHOUT the defer flag (it schedules the LLM run as normal).
227
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('quality.evaluateHeuristicAndSchedule', {
228
+ entryId: 'DEC-79',
229
+ context: 'capture',
230
+ });
231
+ const callOrder = kernelCallWithSessionMock.mock.calls.map(([fn]) => fn);
232
+ expect(callOrder.indexOf('chain.createEntryRelation')).toBeLessThan(callOrder.indexOf('quality.evaluateHeuristicAndSchedule'));
233
+ // The receipt carries the POST-relation verdict, not the create-response one.
234
+ const jsonLines = stdoutOutput.split('\n').filter((line) => {
235
+ try {
236
+ JSON.parse(line);
237
+ return true;
238
+ }
239
+ catch {
240
+ return false;
241
+ }
242
+ });
243
+ expect(jsonLines).toHaveLength(1);
244
+ expect(JSON.parse(jsonLines[0]).coaching).toEqual(reEvalCoaching);
245
+ });
246
+ it('--link: keeps the create-response verdict when the re-eval fails (fail-open, BR-144)', async () => {
247
+ kernelCallWithSessionMock.mockImplementation((fn) => {
248
+ if (fn === 'chain.suggestLinksForCapture')
249
+ return Promise.resolve([]);
250
+ if (fn === 'chain.createEntry')
251
+ return Promise.resolve({ docId: 'doc-c4', entryId: 'DEC-80', coaching });
252
+ if (fn === 'chain.createEntryRelation')
253
+ return Promise.resolve({});
254
+ if (fn === 'quality.evaluateHeuristicAndSchedule')
255
+ return Promise.reject(new Error('network'));
256
+ return Promise.resolve({});
257
+ });
258
+ let stdoutOutput = '';
259
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
260
+ stdoutOutput += String(chunk);
261
+ return true;
262
+ });
263
+ await runCapture({ text: 'DEC: chose with a broken re-eval', link: 'TEN-2', json: true });
264
+ writeSpy.mockRestore();
265
+ const jsonLines = stdoutOutput.split('\n').filter((line) => {
266
+ try {
267
+ JSON.parse(line);
268
+ return true;
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ });
274
+ expect(jsonLines).toHaveLength(1);
275
+ expect(JSON.parse(jsonLines[0]).coaching).toEqual(coaching);
276
+ });
277
+ it('no --link: does NOT call the re-evaluation and does NOT defer the LLM schedule (plain capture unchanged)', async () => {
278
+ kernelCallWithSessionMock.mockImplementation((fn) => {
279
+ if (fn === 'chain.suggestLinksForCapture')
280
+ return Promise.resolve([]);
281
+ if (fn === 'chain.createEntry')
282
+ return Promise.resolve({ docId: 'doc-c5', entryId: 'DEC-81', coaching });
283
+ return Promise.resolve({});
284
+ });
285
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
286
+ await runCapture({ text: 'DEC: chose without a link', json: true });
287
+ writeSpy.mockRestore();
288
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('quality.evaluateHeuristicAndSchedule', expect.anything());
289
+ const createCall = kernelCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
290
+ expect(createCall?.[1]).not.toHaveProperty('deferLLMSchedule');
291
+ });
292
+ });
293
+ describe('runCapture description field routing', () => {
294
+ beforeEach(() => {
295
+ kernelCallWithSessionMock.mockReset();
296
+ mockSession = { sessionId: 'sess-test' };
297
+ });
298
+ it('passes description key to createEntry for assumptions (TEN-1258 — remap happens in Convex)', async () => {
299
+ // The CLI always sends `description` — the Convex write gate remaps it to `belief`
300
+ // for the assumptions collection (TEN-1258). Verify the CLI routes correctly and
301
+ // sends the text as description so the Convex remap can fire.
302
+ kernelCallWithSessionMock.mockImplementation((fn) => {
303
+ if (fn === 'chain.suggestLinksForCapture')
304
+ return Promise.resolve([]);
305
+ if (fn === 'chain.createEntry')
306
+ return Promise.resolve({ docId: 'doc-5', entryId: 'ASM-1' });
307
+ return Promise.resolve({});
308
+ });
309
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
310
+ await runCapture({ text: 'ASM: users won\'t pay before seeing value' });
311
+ const createCall = kernelCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
312
+ expect(createCall?.[1]).toMatchObject({
313
+ collectionSlug: 'assumptions',
314
+ name: "users won't pay before seeing value",
315
+ data: { description: "users won't pay before seeing value" },
316
+ });
317
+ writeSpy.mockRestore();
318
+ });
319
+ });
320
+ describe('runCapture --field passthrough', () => {
321
+ beforeEach(() => {
322
+ kernelCallWithSessionMock.mockReset();
323
+ mockSession = { sessionId: 'sess-test' };
324
+ });
325
+ it('merges --field pairs into data', async () => {
326
+ kernelCallWithSessionMock.mockImplementation((fn) => {
327
+ if (fn === 'chain.suggestLinksForCapture')
328
+ return Promise.resolve([]);
329
+ if (fn === 'chain.createEntry')
330
+ return Promise.resolve({ docId: 'doc-6', entryId: 'STD-1' });
331
+ return Promise.resolve({});
332
+ });
333
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
334
+ await runCapture({
335
+ text: 'touched-code stewardship',
336
+ collection: 'standards',
337
+ field: ['rationale=signed specs define scope but agents need permission'],
338
+ });
339
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.objectContaining({
340
+ data: expect.objectContaining({
341
+ description: 'touched-code stewardship',
342
+ rationale: 'signed specs define scope but agents need permission',
343
+ }),
98
344
  }));
99
- await expect(runCapture({ text: 'Ambiguous capture' })).rejects.toThrow('EXIT:1');
100
- expect(stderrSpy).toHaveBeenCalledWith('Classification needs review before capture can continue. Re-run with `--collection <slug>`.\n');
101
- stderrSpy.mockRestore();
102
- exitSpy.mockRestore();
345
+ writeSpy.mockRestore();
346
+ });
347
+ it('--field description=X overrides the derived description', async () => {
348
+ kernelCallWithSessionMock.mockImplementation((fn) => {
349
+ if (fn === 'chain.suggestLinksForCapture')
350
+ return Promise.resolve([]);
351
+ if (fn === 'chain.createEntry')
352
+ return Promise.resolve({ docId: 'doc-7', entryId: 'TEN-1' });
353
+ return Promise.resolve({});
354
+ });
355
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
356
+ await runCapture({
357
+ text: 'derived',
358
+ collection: 'tensions',
359
+ field: ['description=explicit'],
360
+ });
361
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.objectContaining({
362
+ data: expect.objectContaining({ description: 'explicit' }),
363
+ }));
364
+ writeSpy.mockRestore();
365
+ });
366
+ });
367
+ describe('runCapture WHY pre-flight', () => {
368
+ beforeEach(() => {
369
+ kernelCallWithSessionMock.mockReset();
370
+ mockSession = { sessionId: 'sess-test' };
371
+ });
372
+ it('blocks with guidance when governed and whyField is missing', async () => {
373
+ kernelCallWithSessionMock.mockImplementation((fn) => {
374
+ if (fn === 'chain.suggestLinksForCapture')
375
+ return Promise.resolve([]);
376
+ if (fn === 'chain.getCollectionFields') {
377
+ return Promise.resolve({ governed: true, whyField: 'rationale', minChars: 12, fields: [] });
378
+ }
379
+ if (fn === 'chain.createEntry')
380
+ return Promise.resolve({ docId: 'doc-8', entryId: 'STD-2' });
381
+ return Promise.resolve({});
382
+ });
383
+ await expect(runCapture({ text: 'x', collection: 'standards' })).rejects.toThrow(/rationale/);
384
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.createEntry', expect.anything());
385
+ });
386
+ it('does not block when whyField is description', async () => {
387
+ kernelCallWithSessionMock.mockImplementation((fn) => {
388
+ if (fn === 'chain.suggestLinksForCapture')
389
+ return Promise.resolve([]);
390
+ if (fn === 'chain.getCollectionFields') {
391
+ return Promise.resolve({ governed: true, whyField: 'description', minChars: 12, fields: [] });
392
+ }
393
+ if (fn === 'chain.createEntry')
394
+ return Promise.resolve({ docId: 'doc-9', entryId: 'ARCH-1' });
395
+ return Promise.resolve({});
396
+ });
397
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
398
+ await runCapture({ text: 'an architecture note body', collection: 'architecture' });
399
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
400
+ writeSpy.mockRestore();
401
+ });
402
+ it('does not block when description remaps to the whyField (descriptionFieldKey === whyField)', async () => {
403
+ // TEN-1258 regression: `decisions` sets descriptionFieldKey='rationale' and the server
404
+ // remaps data.description → rationale before the WHY gate. A bare `pb capture "DEC: …"`
405
+ // (description set, no --field rationale) must NOT be false-blocked client-side.
406
+ kernelCallWithSessionMock.mockImplementation((fn) => {
407
+ if (fn === 'chain.suggestLinksForCapture')
408
+ return Promise.resolve([]);
409
+ if (fn === 'chain.getCollectionFields') {
410
+ return Promise.resolve({
411
+ governed: true,
412
+ whyField: 'rationale',
413
+ minChars: 12,
414
+ descriptionFieldKey: 'rationale',
415
+ fields: [],
416
+ });
417
+ }
418
+ if (fn === 'chain.createEntry')
419
+ return Promise.resolve({ docId: 'doc-12', entryId: 'DEC-5' });
420
+ return Promise.resolve({});
421
+ });
422
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
423
+ await runCapture({ text: 'chose X because it is simpler', collection: 'decisions' });
424
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
425
+ writeSpy.mockRestore();
426
+ });
427
+ it('still blocks a governed collection whose descriptionFieldKey does NOT map to the whyField', async () => {
428
+ // proof_governed has whyField='rationale' but no descriptionFieldKey remap, so a bare
429
+ // capture (no --field rationale) is correctly blocked — the description will not satisfy it.
430
+ kernelCallWithSessionMock.mockImplementation((fn) => {
431
+ if (fn === 'chain.suggestLinksForCapture')
432
+ return Promise.resolve([]);
433
+ if (fn === 'chain.getCollectionFields') {
434
+ return Promise.resolve({
435
+ governed: true,
436
+ whyField: 'rationale',
437
+ minChars: 12,
438
+ descriptionFieldKey: null,
439
+ fields: [],
440
+ });
441
+ }
442
+ if (fn === 'chain.createEntry')
443
+ return Promise.resolve({ docId: 'doc-13', entryId: 'PGV-9' });
444
+ return Promise.resolve({});
445
+ });
446
+ await expect(runCapture({ text: 'x', collection: 'proof_governed' })).rejects.toThrow(/rationale/);
447
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.createEntry', expect.anything());
448
+ });
449
+ it('fails open and proceeds when the contract fetch fails', async () => {
450
+ kernelCallWithSessionMock.mockImplementation((fn) => {
451
+ if (fn === 'chain.suggestLinksForCapture')
452
+ return Promise.resolve([]);
453
+ if (fn === 'chain.getCollectionFields')
454
+ return Promise.reject(new Error('network'));
455
+ if (fn === 'chain.createEntry')
456
+ return Promise.resolve({ docId: 'doc-10', entryId: 'STD-3' });
457
+ return Promise.resolve({});
458
+ });
459
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
460
+ await runCapture({
461
+ text: 'x',
462
+ collection: 'standards',
463
+ field: ['rationale=enough characters here ok'],
464
+ });
465
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
466
+ writeSpy.mockRestore();
467
+ });
468
+ it('fails open when the contract fetch rejects with a CLIError (server 4xx/5xx surfaces as McpError, an instanceof CLIError)', async () => {
469
+ kernelCallWithSessionMock.mockImplementation((fn) => {
470
+ if (fn === 'chain.suggestLinksForCapture')
471
+ return Promise.resolve([]);
472
+ if (fn === 'chain.getCollectionFields') {
473
+ return Promise.reject(new CLIError('Could not reach test.convex.site.', {
474
+ code: ErrorCode.NETWORK_UNREACHABLE,
475
+ category: 'network',
476
+ }));
477
+ }
478
+ if (fn === 'chain.createEntry')
479
+ return Promise.resolve({ docId: 'doc-11', entryId: 'STD-4' });
480
+ return Promise.resolve({});
481
+ });
482
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
483
+ await runCapture({
484
+ text: 'x',
485
+ collection: 'standards',
486
+ field: ['rationale=enough characters here ok'],
487
+ });
488
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
489
+ writeSpy.mockRestore();
490
+ });
491
+ it('surfaces the server WHY-gate reason on rejection', async () => {
492
+ const serverReason = 'Governance entries (standard) require an explicit WHY before they can be created. Set "rationale" to at least 12 characters.';
493
+ kernelCallWithSessionMock.mockImplementation((fn) => {
494
+ if (fn === 'chain.suggestLinksForCapture')
495
+ return Promise.resolve([]);
496
+ if (fn === 'chain.getCollectionFields') {
497
+ return Promise.resolve({ governed: true, whyField: 'rationale', minChars: 12, fields: [] });
498
+ }
499
+ if (fn === 'chain.createEntry')
500
+ return Promise.reject(new Error(serverReason));
501
+ return Promise.resolve({});
502
+ });
503
+ await expect(runCapture({
504
+ text: 'x',
505
+ collection: 'standards',
506
+ field: ['rationale=short'],
507
+ })).rejects.toThrow(/at least 12 characters/);
508
+ });
509
+ });
510
+ describe('runCapture classification guard', () => {
511
+ beforeEach(() => {
512
+ kernelCallWithSessionMock.mockReset();
513
+ mockSession = { sessionId: 'sess-test' };
514
+ });
515
+ it('throws CLIError when classification requires review', async () => {
516
+ kernelCallWithSessionMock.mockResolvedValueOnce(null);
517
+ await expect(runCapture({ text: 'Ambiguous capture' })).rejects.toThrow('Classification needs review before capture can continue.');
103
518
  });
104
519
  });
105
520
  describe('runCapture date inference', () => {
106
521
  beforeEach(() => {
107
- mcpCallWithSessionMock.mockReset();
522
+ kernelCallWithSessionMock.mockReset();
108
523
  mockSession = { sessionId: 'sess-test' };
109
524
  });
110
525
  it('does not default date to today when no source date is present', async () => {
111
- mcpCallWithSessionMock
112
- .mockResolvedValueOnce({ collection: 'decisions', confidence: 0.9, tier: 'high' })
113
- .mockResolvedValueOnce({ docId: 'doc-3', entryId: 'DEC-10' });
526
+ kernelCallWithSessionMock.mockImplementation((fn) => {
527
+ if (fn === 'chain.suggestLinksForCapture')
528
+ return Promise.resolve([]);
529
+ if (fn === 'chain.resolveCollection')
530
+ return Promise.resolve({ collection: 'decisions', confidence: 0.9, tier: 'high' });
531
+ if (fn === 'chain.createEntry')
532
+ return Promise.resolve({ docId: 'doc-3', entryId: 'DEC-10' });
533
+ return Promise.resolve({});
534
+ });
114
535
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
115
536
  await runCapture({ text: 'Decision without explicit source date' });
116
- const createCall = mcpCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
537
+ const createCall = kernelCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
117
538
  expect(createCall?.[1]).toMatchObject({
118
539
  collectionSlug: 'decisions',
119
540
  data: { description: 'Decision without explicit source date' },
@@ -122,14 +543,206 @@ describe('runCapture date inference', () => {
122
543
  writeSpy.mockRestore();
123
544
  });
124
545
  it('uses inferred source date when the capture text includes one', async () => {
125
- mcpCallWithSessionMock
126
- .mockResolvedValueOnce({ collection: 'decisions', confidence: 0.9, tier: 'high' })
127
- .mockResolvedValueOnce({ docId: 'doc-4', entryId: 'DEC-11' });
546
+ kernelCallWithSessionMock.mockImplementation((fn) => {
547
+ if (fn === 'chain.suggestLinksForCapture')
548
+ return Promise.resolve([]);
549
+ if (fn === 'chain.resolveCollection')
550
+ return Promise.resolve({ collection: 'decisions', confidence: 0.9, tier: 'high' });
551
+ if (fn === 'chain.createEntry')
552
+ return Promise.resolve({ docId: 'doc-4', entryId: 'DEC-11' });
553
+ return Promise.resolve({});
554
+ });
128
555
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
129
556
  await runCapture({ text: 'Decision from April 1, 2026 steering meeting' });
130
- const createCall = mcpCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
557
+ const createCall = kernelCallWithSessionMock.mock.calls.find(([fn]) => fn === 'chain.createEntry');
131
558
  expect((createCall?.[1]).data.date).toBe('2026-04-01');
132
559
  writeSpy.mockRestore();
133
560
  });
134
561
  });
562
+ // ---------------------------------------------------------------------------
563
+ // WP-319 S3: Pre-write grounding tests
564
+ // ---------------------------------------------------------------------------
565
+ describe('runCapture WP-319 grounding', () => {
566
+ const emptyGrounding = { index: 0, related: [], duplicates: [], governance: [], v: 1 };
567
+ const groundingWithDuplicate = {
568
+ index: 0,
569
+ related: [],
570
+ duplicates: [{ entryId: 'TEN-5', name: 'Similar tension', collectionSlug: 'tensions', matchType: 'possible_duplicate', overlapRatio: 0.9 }],
571
+ governance: [],
572
+ v: 1,
573
+ };
574
+ beforeEach(() => {
575
+ kernelCallWithSessionMock.mockReset();
576
+ mockSession = { sessionId: 'sess-test' };
577
+ delete process.env.PB_GROUNDING_MODE;
578
+ });
579
+ it('fires chain.suggestLinksForCapture in parallel and still calls createEntry', async () => {
580
+ // Prefix-based route skips classification; grounding fires for TEN prefix
581
+ kernelCallWithSessionMock
582
+ .mockImplementation((fn) => {
583
+ if (fn === 'chain.suggestLinksForCapture')
584
+ return Promise.resolve([emptyGrounding]);
585
+ if (fn === 'chain.createEntry')
586
+ return Promise.resolve({ docId: 'doc-1', entryId: 'TEN-720' });
587
+ return Promise.resolve({});
588
+ });
589
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
590
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
591
+ await runCapture({ text: 'TEN: grounding test tension' });
592
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.suggestLinksForCapture', expect.objectContaining({
593
+ entries: expect.arrayContaining([expect.objectContaining({ name: 'grounding test tension' })]),
594
+ }));
595
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
596
+ writeSpy.mockRestore();
597
+ stderrSpy.mockRestore();
598
+ });
599
+ it('does NOT block capture when grounding call fails', async () => {
600
+ kernelCallWithSessionMock
601
+ .mockImplementation((fn) => {
602
+ if (fn === 'chain.suggestLinksForCapture')
603
+ return Promise.reject(new Error('network error'));
604
+ if (fn === 'chain.createEntry')
605
+ return Promise.resolve({ docId: 'doc-2', entryId: 'TEN-721' });
606
+ return Promise.resolve({});
607
+ });
608
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
609
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
610
+ // Must not throw — grounding failure is fail-open
611
+ await expect(runCapture({ text: 'TEN: grounding failure test' })).resolves.toBeUndefined();
612
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
613
+ writeSpy.mockRestore();
614
+ stderrSpy.mockRestore();
615
+ });
616
+ it('--suggest-only does NOT call createEntry and outputs grounding data', async () => {
617
+ // In test env (non-TTY), isJsonMode() returns true → JSON path is taken.
618
+ kernelCallWithSessionMock
619
+ .mockImplementation((fn) => {
620
+ if (fn === 'chain.suggestLinksForCapture')
621
+ return Promise.resolve([groundingWithDuplicate]);
622
+ return Promise.resolve({});
623
+ });
624
+ let stdoutOutput = '';
625
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
626
+ stdoutOutput += String(chunk);
627
+ return true;
628
+ });
629
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
630
+ await runCapture({ text: 'TEN: duplicate candidate', suggestOnly: true });
631
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.createEntry', expect.anything());
632
+ // JSON output contains suggestOnly flag and grounding report
633
+ const jsonLines = stdoutOutput.split('\n').filter((l) => { try {
634
+ JSON.parse(l);
635
+ return true;
636
+ }
637
+ catch {
638
+ return false;
639
+ } });
640
+ expect(jsonLines).toHaveLength(1);
641
+ const parsed = JSON.parse(jsonLines[0]);
642
+ expect(parsed.suggestOnly).toBe(true);
643
+ expect(parsed.groundingReport).toBeDefined();
644
+ writeSpy.mockRestore();
645
+ stderrSpy.mockRestore();
646
+ });
647
+ it('--suggest-only with --json outputs machine-readable object without calling createEntry', async () => {
648
+ kernelCallWithSessionMock
649
+ .mockImplementation((fn) => {
650
+ if (fn === 'chain.suggestLinksForCapture')
651
+ return Promise.resolve([emptyGrounding]);
652
+ return Promise.resolve({});
653
+ });
654
+ let stdoutOutput = '';
655
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
656
+ stdoutOutput += String(chunk);
657
+ return true;
658
+ });
659
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
660
+ await runCapture({ text: 'TEN: dry run json', json: true, suggestOnly: true });
661
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.createEntry', expect.anything());
662
+ const jsonLines = stdoutOutput.split('\n').filter((l) => { try {
663
+ JSON.parse(l);
664
+ return true;
665
+ }
666
+ catch {
667
+ return false;
668
+ } });
669
+ expect(jsonLines).toHaveLength(1);
670
+ const parsed = JSON.parse(jsonLines[0]);
671
+ expect(parsed.suggestOnly).toBe(true);
672
+ writeSpy.mockRestore();
673
+ stderrSpy.mockRestore();
674
+ });
675
+ it('banner is suppressed when grounding has no matches (zero-noise floor)', async () => {
676
+ kernelCallWithSessionMock
677
+ .mockImplementation((fn) => {
678
+ if (fn === 'chain.suggestLinksForCapture')
679
+ return Promise.resolve([emptyGrounding]);
680
+ if (fn === 'chain.createEntry')
681
+ return Promise.resolve({ docId: 'doc-3', entryId: 'TEN-722' });
682
+ return Promise.resolve({});
683
+ });
684
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
685
+ const stderrLines = [];
686
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
687
+ stderrLines.push(String(chunk));
688
+ return true;
689
+ });
690
+ await runCapture({ text: 'TEN: no matches tension' });
691
+ // No "Grounding" banner in stderr when zero matches
692
+ const groundingInStderr = stderrLines.some((l) => l.includes('Grounding'));
693
+ expect(groundingInStderr).toBe(false);
694
+ writeSpy.mockRestore();
695
+ stderrSpy.mockRestore();
696
+ });
697
+ it('PB_GROUNDING_MODE=off skips grounding call entirely', async () => {
698
+ process.env.PB_GROUNDING_MODE = 'off';
699
+ kernelCallWithSessionMock
700
+ .mockImplementation((fn) => {
701
+ if (fn === 'chain.createEntry')
702
+ return Promise.resolve({ docId: 'doc-4', entryId: 'TEN-723' });
703
+ return Promise.resolve({});
704
+ });
705
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
706
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
707
+ await runCapture({ text: 'TEN: no grounding env off' });
708
+ expect(kernelCallWithSessionMock).not.toHaveBeenCalledWith('chain.suggestLinksForCapture', expect.anything());
709
+ expect(kernelCallWithSessionMock).toHaveBeenCalledWith('chain.createEntry', expect.anything());
710
+ delete process.env.PB_GROUNDING_MODE;
711
+ writeSpy.mockRestore();
712
+ stderrSpy.mockRestore();
713
+ });
714
+ it('--json output stdout is clean (no grounding on stdout)', async () => {
715
+ kernelCallWithSessionMock
716
+ .mockImplementation((fn) => {
717
+ if (fn === 'chain.suggestLinksForCapture')
718
+ return Promise.resolve([groundingWithDuplicate]);
719
+ if (fn === 'chain.createEntry')
720
+ return Promise.resolve({ docId: 'doc-5', entryId: 'TEN-724' });
721
+ return Promise.resolve({});
722
+ });
723
+ let stdoutOutput = '';
724
+ const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
725
+ stdoutOutput += String(chunk);
726
+ return true;
727
+ });
728
+ const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
729
+ await runCapture({ text: 'TEN: json clean stdout', json: true });
730
+ // Stdout must be exactly one valid JSON line (jq .id must work)
731
+ const jsonLines = stdoutOutput.split('\n').filter((l) => { try {
732
+ JSON.parse(l);
733
+ return true;
734
+ }
735
+ catch {
736
+ return false;
737
+ } });
738
+ expect(jsonLines).toHaveLength(1);
739
+ const parsed = JSON.parse(jsonLines[0]);
740
+ expect(parsed.id).toBe('TEN-724');
741
+ // No grounding content in stdout
742
+ expect(stdoutOutput).not.toContain('Grounding');
743
+ expect(stdoutOutput).not.toContain('duplicate');
744
+ writeSpy.mockRestore();
745
+ stderrSpy.mockRestore();
746
+ });
747
+ });
135
748
  //# sourceMappingURL=capture.test.js.map