@productbrain/cli 0.1.0-beta.6 → 0.1.0-beta.6046

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 (1608) hide show
  1. package/README.md +100 -30
  2. package/dist/__tests__/adapters.test.d.ts +2 -0
  3. package/dist/__tests__/adapters.test.d.ts.map +1 -0
  4. package/dist/__tests__/adapters.test.js +470 -0
  5. package/dist/__tests__/adapters.test.js.map +1 -0
  6. package/dist/__tests__/adminConfig.test.d.ts +18 -0
  7. package/dist/__tests__/adminConfig.test.d.ts.map +1 -0
  8. package/dist/__tests__/adminConfig.test.js +221 -0
  9. package/dist/__tests__/adminConfig.test.js.map +1 -0
  10. package/dist/__tests__/audit.test.d.ts +2 -0
  11. package/dist/__tests__/audit.test.d.ts.map +1 -0
  12. package/dist/__tests__/audit.test.js +427 -0
  13. package/dist/__tests__/audit.test.js.map +1 -0
  14. package/dist/__tests__/authority-domains-queue.test.d.ts +2 -0
  15. package/dist/__tests__/authority-domains-queue.test.d.ts.map +1 -0
  16. package/dist/__tests__/authority-domains-queue.test.js +169 -0
  17. package/dist/__tests__/authority-domains-queue.test.js.map +1 -0
  18. package/dist/__tests__/authority-domains.test.d.ts +2 -0
  19. package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
  20. package/dist/__tests__/authority-domains.test.js +48 -0
  21. package/dist/__tests__/authority-domains.test.js.map +1 -0
  22. package/dist/__tests__/batch-transformations.test.d.ts +2 -0
  23. package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
  24. package/dist/__tests__/batch-transformations.test.js +263 -0
  25. package/dist/__tests__/batch-transformations.test.js.map +1 -0
  26. package/dist/__tests__/canonicalRefs.vocab.test.d.ts +2 -0
  27. package/dist/__tests__/canonicalRefs.vocab.test.d.ts.map +1 -0
  28. package/dist/__tests__/canonicalRefs.vocab.test.js +251 -0
  29. package/dist/__tests__/canonicalRefs.vocab.test.js.map +1 -0
  30. package/dist/__tests__/capture-receipt-coaching.test.d.ts +2 -0
  31. package/dist/__tests__/capture-receipt-coaching.test.d.ts.map +1 -0
  32. package/dist/__tests__/capture-receipt-coaching.test.js +89 -0
  33. package/dist/__tests__/capture-receipt-coaching.test.js.map +1 -0
  34. package/dist/__tests__/capture-receipt-domain.test.d.ts +2 -0
  35. package/dist/__tests__/capture-receipt-domain.test.d.ts.map +1 -0
  36. package/dist/__tests__/capture-receipt-domain.test.js +29 -0
  37. package/dist/__tests__/capture-receipt-domain.test.js.map +1 -0
  38. package/dist/__tests__/capture-receipt-spine-floor.test.d.ts +2 -0
  39. package/dist/__tests__/capture-receipt-spine-floor.test.d.ts.map +1 -0
  40. package/dist/__tests__/capture-receipt-spine-floor.test.js +45 -0
  41. package/dist/__tests__/capture-receipt-spine-floor.test.js.map +1 -0
  42. package/dist/__tests__/capture.test.d.ts +2 -0
  43. package/dist/__tests__/capture.test.d.ts.map +1 -0
  44. package/dist/__tests__/capture.test.js +1374 -0
  45. package/dist/__tests__/capture.test.js.map +1 -0
  46. package/dist/__tests__/client-binding-guard.test.d.ts +2 -0
  47. package/dist/__tests__/client-binding-guard.test.d.ts.map +1 -0
  48. package/dist/__tests__/client-binding-guard.test.js +84 -0
  49. package/dist/__tests__/client-binding-guard.test.js.map +1 -0
  50. package/dist/__tests__/coaching-mirror-drift.test.d.ts +2 -0
  51. package/dist/__tests__/coaching-mirror-drift.test.d.ts.map +1 -0
  52. package/dist/__tests__/coaching-mirror-drift.test.js +47 -0
  53. package/dist/__tests__/coaching-mirror-drift.test.js.map +1 -0
  54. package/dist/__tests__/codex-prep-parity.test.d.ts +2 -0
  55. package/dist/__tests__/codex-prep-parity.test.d.ts.map +1 -0
  56. package/dist/__tests__/codex-prep-parity.test.js +107 -0
  57. package/dist/__tests__/codex-prep-parity.test.js.map +1 -0
  58. package/dist/__tests__/collection-registry-seed-drift.test.d.ts +2 -0
  59. package/dist/__tests__/collection-registry-seed-drift.test.d.ts.map +1 -0
  60. package/dist/__tests__/collection-registry-seed-drift.test.js +81 -0
  61. package/dist/__tests__/collection-registry-seed-drift.test.js.map +1 -0
  62. package/dist/__tests__/config-prod-fallthrough.test.d.ts +2 -0
  63. package/dist/__tests__/config-prod-fallthrough.test.d.ts.map +1 -0
  64. package/dist/__tests__/config-prod-fallthrough.test.js +93 -0
  65. package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -0
  66. package/dist/__tests__/config.test.d.ts +8 -0
  67. package/dist/__tests__/config.test.d.ts.map +1 -0
  68. package/dist/__tests__/config.test.js +993 -0
  69. package/dist/__tests__/config.test.js.map +1 -0
  70. package/dist/__tests__/constants.test.d.ts +2 -0
  71. package/dist/__tests__/constants.test.d.ts.map +1 -0
  72. package/dist/__tests__/constants.test.js +146 -0
  73. package/dist/__tests__/constants.test.js.map +1 -0
  74. package/dist/__tests__/constellation.test.d.ts +2 -0
  75. package/dist/__tests__/constellation.test.d.ts.map +1 -0
  76. package/dist/__tests__/constellation.test.js +266 -0
  77. package/dist/__tests__/constellation.test.js.map +1 -0
  78. package/dist/__tests__/context-strategy.test.d.ts +2 -0
  79. package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
  80. package/dist/__tests__/context-strategy.test.js +79 -0
  81. package/dist/__tests__/context-strategy.test.js.map +1 -0
  82. package/dist/__tests__/conversation.test.d.ts +2 -0
  83. package/dist/__tests__/conversation.test.d.ts.map +1 -0
  84. package/dist/__tests__/conversation.test.js +113 -0
  85. package/dist/__tests__/conversation.test.js.map +1 -0
  86. package/dist/__tests__/entry-formatter.test.d.ts +2 -0
  87. package/dist/__tests__/entry-formatter.test.d.ts.map +1 -0
  88. package/dist/__tests__/entry-formatter.test.js +82 -0
  89. package/dist/__tests__/entry-formatter.test.js.map +1 -0
  90. package/dist/__tests__/entry-preflight.test.d.ts +2 -0
  91. package/dist/__tests__/entry-preflight.test.d.ts.map +1 -0
  92. package/dist/__tests__/entry-preflight.test.js +58 -0
  93. package/dist/__tests__/entry-preflight.test.js.map +1 -0
  94. package/dist/__tests__/entryArchive.test.d.ts +2 -0
  95. package/dist/__tests__/entryArchive.test.d.ts.map +1 -0
  96. package/dist/__tests__/entryArchive.test.js +35 -0
  97. package/dist/__tests__/entryArchive.test.js.map +1 -0
  98. package/dist/__tests__/envelope-contract.test.d.ts +15 -0
  99. package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
  100. package/dist/__tests__/envelope-contract.test.js +154 -0
  101. package/dist/__tests__/envelope-contract.test.js.map +1 -0
  102. package/dist/__tests__/errors.test.d.ts +2 -0
  103. package/dist/__tests__/errors.test.d.ts.map +1 -0
  104. package/dist/__tests__/errors.test.js +147 -0
  105. package/dist/__tests__/errors.test.js.map +1 -0
  106. package/dist/__tests__/experiment.test.d.ts +6 -0
  107. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  108. package/dist/__tests__/experiment.test.js +69 -0
  109. package/dist/__tests__/experiment.test.js.map +1 -0
  110. package/dist/__tests__/fields.test.d.ts +2 -0
  111. package/dist/__tests__/fields.test.d.ts.map +1 -0
  112. package/dist/__tests__/fields.test.js +238 -0
  113. package/dist/__tests__/fields.test.js.map +1 -0
  114. package/dist/__tests__/gateway-dry-run-timeout.test.d.ts +2 -0
  115. package/dist/__tests__/gateway-dry-run-timeout.test.d.ts.map +1 -0
  116. package/dist/__tests__/gateway-dry-run-timeout.test.js +70 -0
  117. package/dist/__tests__/gateway-dry-run-timeout.test.js.map +1 -0
  118. package/dist/__tests__/gateway-timeout-body-phase.test.d.ts +2 -0
  119. package/dist/__tests__/gateway-timeout-body-phase.test.d.ts.map +1 -0
  120. package/dist/__tests__/gateway-timeout-body-phase.test.js +121 -0
  121. package/dist/__tests__/gateway-timeout-body-phase.test.js.map +1 -0
  122. package/dist/__tests__/glossary.test.d.ts +2 -0
  123. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  124. package/dist/__tests__/glossary.test.js +32 -0
  125. package/dist/__tests__/glossary.test.js.map +1 -0
  126. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  127. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  128. package/dist/__tests__/handshake-augment.test.js +424 -0
  129. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  130. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  131. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  132. package/dist/__tests__/handshake-dormancy.test.js +82 -0
  133. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  134. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  135. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  136. package/dist/__tests__/handshake-formatter.test.js +84 -0
  137. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  138. package/dist/__tests__/handshake-preview.test.d.ts +2 -0
  139. package/dist/__tests__/handshake-preview.test.d.ts.map +1 -0
  140. package/dist/__tests__/handshake-preview.test.js +1073 -0
  141. package/dist/__tests__/handshake-preview.test.js.map +1 -0
  142. package/dist/__tests__/handshake.e2e.test.d.ts +2 -0
  143. package/dist/__tests__/handshake.e2e.test.d.ts.map +1 -0
  144. package/dist/__tests__/handshake.e2e.test.js +487 -0
  145. package/dist/__tests__/handshake.e2e.test.js.map +1 -0
  146. package/dist/__tests__/handshake.test.d.ts +2 -0
  147. package/dist/__tests__/handshake.test.d.ts.map +1 -0
  148. package/dist/__tests__/handshake.test.js +1102 -0
  149. package/dist/__tests__/handshake.test.js.map +1 -0
  150. package/dist/__tests__/health-gap-kinds-drift.test.d.ts +2 -0
  151. package/dist/__tests__/health-gap-kinds-drift.test.d.ts.map +1 -0
  152. package/dist/__tests__/health-gap-kinds-drift.test.js +41 -0
  153. package/dist/__tests__/health-gap-kinds-drift.test.js.map +1 -0
  154. package/dist/__tests__/hook-intents.test.d.ts +2 -0
  155. package/dist/__tests__/hook-intents.test.d.ts.map +1 -0
  156. package/dist/__tests__/hook-intents.test.js +184 -0
  157. package/dist/__tests__/hook-intents.test.js.map +1 -0
  158. package/dist/__tests__/ingest.test.js +119 -12
  159. package/dist/__tests__/ingest.test.js.map +1 -1
  160. package/dist/__tests__/init.test.d.ts +7 -0
  161. package/dist/__tests__/init.test.d.ts.map +1 -0
  162. package/dist/__tests__/init.test.js +183 -0
  163. package/dist/__tests__/init.test.js.map +1 -0
  164. package/dist/__tests__/kernel-value-sets-drift.test.d.ts +2 -0
  165. package/dist/__tests__/kernel-value-sets-drift.test.d.ts.map +1 -0
  166. package/dist/__tests__/kernel-value-sets-drift.test.js +46 -0
  167. package/dist/__tests__/kernel-value-sets-drift.test.js.map +1 -0
  168. package/dist/__tests__/kernel-value-sets-generator.test.d.ts +2 -0
  169. package/dist/__tests__/kernel-value-sets-generator.test.d.ts.map +1 -0
  170. package/dist/__tests__/kernel-value-sets-generator.test.js +108 -0
  171. package/dist/__tests__/kernel-value-sets-generator.test.js.map +1 -0
  172. package/dist/__tests__/login.test.d.ts +2 -0
  173. package/dist/__tests__/login.test.d.ts.map +1 -0
  174. package/dist/__tests__/login.test.js +167 -0
  175. package/dist/__tests__/login.test.js.map +1 -0
  176. package/dist/__tests__/manifest.test.d.ts +6 -0
  177. package/dist/__tests__/manifest.test.d.ts.map +1 -0
  178. package/dist/__tests__/manifest.test.js +255 -0
  179. package/dist/__tests__/manifest.test.js.map +1 -0
  180. package/dist/__tests__/method-publish-coherency.test.d.ts +9 -0
  181. package/dist/__tests__/method-publish-coherency.test.d.ts.map +1 -0
  182. package/dist/__tests__/method-publish-coherency.test.js +71 -0
  183. package/dist/__tests__/method-publish-coherency.test.js.map +1 -0
  184. package/dist/__tests__/method-registry.integration.test.d.ts +6 -0
  185. package/dist/__tests__/method-registry.integration.test.d.ts.map +1 -0
  186. package/dist/__tests__/method-registry.integration.test.js +17 -0
  187. package/dist/__tests__/method-registry.integration.test.js.map +1 -0
  188. package/dist/__tests__/method-registry.test.d.ts +12 -0
  189. package/dist/__tests__/method-registry.test.d.ts.map +1 -0
  190. package/dist/__tests__/method-registry.test.js +86 -0
  191. package/dist/__tests__/method-registry.test.js.map +1 -0
  192. package/dist/__tests__/migrate-setup-session-refusal.test.d.ts +2 -0
  193. package/dist/__tests__/migrate-setup-session-refusal.test.d.ts.map +1 -0
  194. package/dist/__tests__/migrate-setup-session-refusal.test.js +65 -0
  195. package/dist/__tests__/migrate-setup-session-refusal.test.js.map +1 -0
  196. package/dist/__tests__/missingPin.test.d.ts +11 -0
  197. package/dist/__tests__/missingPin.test.d.ts.map +1 -0
  198. package/dist/__tests__/missingPin.test.js +233 -0
  199. package/dist/__tests__/missingPin.test.js.map +1 -0
  200. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  201. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  202. package/dist/__tests__/notice-marker.test.js +176 -0
  203. package/dist/__tests__/notice-marker.test.js.map +1 -0
  204. package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
  205. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  206. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  207. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  208. package/dist/__tests__/onboarding.test.d.ts +6 -0
  209. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  210. package/dist/__tests__/onboarding.test.js +347 -0
  211. package/dist/__tests__/onboarding.test.js.map +1 -0
  212. package/dist/__tests__/orient.test.d.ts +2 -0
  213. package/dist/__tests__/orient.test.d.ts.map +1 -0
  214. package/dist/__tests__/orient.test.js +633 -0
  215. package/dist/__tests__/orient.test.js.map +1 -0
  216. package/dist/__tests__/perimeter.test.d.ts +2 -0
  217. package/dist/__tests__/perimeter.test.d.ts.map +1 -0
  218. package/dist/__tests__/perimeter.test.js +165 -0
  219. package/dist/__tests__/perimeter.test.js.map +1 -0
  220. package/dist/__tests__/personal-layer.test.d.ts +11 -0
  221. package/dist/__tests__/personal-layer.test.d.ts.map +1 -0
  222. package/dist/__tests__/personal-layer.test.js +268 -0
  223. package/dist/__tests__/personal-layer.test.js.map +1 -0
  224. package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
  225. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  226. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  227. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  228. package/dist/__tests__/profiles.test.d.ts +2 -0
  229. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  230. package/dist/__tests__/profiles.test.js +543 -0
  231. package/dist/__tests__/profiles.test.js.map +1 -0
  232. package/dist/__tests__/promote-batch.test.d.ts +2 -0
  233. package/dist/__tests__/promote-batch.test.d.ts.map +1 -0
  234. package/dist/__tests__/promote-batch.test.js +185 -0
  235. package/dist/__tests__/promote-batch.test.js.map +1 -0
  236. package/dist/__tests__/promote.test.d.ts +2 -0
  237. package/dist/__tests__/promote.test.d.ts.map +1 -0
  238. package/dist/__tests__/promote.test.js +430 -0
  239. package/dist/__tests__/promote.test.js.map +1 -0
  240. package/dist/__tests__/prompts.test.d.ts +6 -0
  241. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  242. package/dist/__tests__/prompts.test.js +146 -0
  243. package/dist/__tests__/prompts.test.js.map +1 -0
  244. package/dist/__tests__/proof-run.test.d.ts +2 -0
  245. package/dist/__tests__/proof-run.test.d.ts.map +1 -0
  246. package/dist/__tests__/proof-run.test.js +255 -0
  247. package/dist/__tests__/proof-run.test.js.map +1 -0
  248. package/dist/__tests__/proposals.test.d.ts +2 -0
  249. package/dist/__tests__/proposals.test.d.ts.map +1 -0
  250. package/dist/__tests__/proposals.test.js +167 -0
  251. package/dist/__tests__/proposals.test.js.map +1 -0
  252. package/dist/__tests__/rate-limit-resilience.test.d.ts +7 -0
  253. package/dist/__tests__/rate-limit-resilience.test.d.ts.map +1 -0
  254. package/dist/__tests__/rate-limit-resilience.test.js +209 -0
  255. package/dist/__tests__/rate-limit-resilience.test.js.map +1 -0
  256. package/dist/__tests__/read-target-notice.test.d.ts +2 -0
  257. package/dist/__tests__/read-target-notice.test.d.ts.map +1 -0
  258. package/dist/__tests__/read-target-notice.test.js +129 -0
  259. package/dist/__tests__/read-target-notice.test.js.map +1 -0
  260. package/dist/__tests__/relate.test.d.ts +2 -0
  261. package/dist/__tests__/relate.test.d.ts.map +1 -0
  262. package/dist/__tests__/relate.test.js +321 -0
  263. package/dist/__tests__/relate.test.js.map +1 -0
  264. package/dist/__tests__/repo-detect.test.d.ts +2 -0
  265. package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
  266. package/dist/__tests__/repo-detect.test.js +218 -0
  267. package/dist/__tests__/repo-detect.test.js.map +1 -0
  268. package/dist/__tests__/reportedProfile.test.d.ts +2 -0
  269. package/dist/__tests__/reportedProfile.test.d.ts.map +1 -0
  270. package/dist/__tests__/reportedProfile.test.js +328 -0
  271. package/dist/__tests__/reportedProfile.test.js.map +1 -0
  272. package/dist/__tests__/restore.test.d.ts +2 -0
  273. package/dist/__tests__/restore.test.d.ts.map +1 -0
  274. package/dist/__tests__/restore.test.js +85 -0
  275. package/dist/__tests__/restore.test.js.map +1 -0
  276. package/dist/__tests__/route-latency-budget.test.d.ts +2 -0
  277. package/dist/__tests__/route-latency-budget.test.d.ts.map +1 -0
  278. package/dist/__tests__/route-latency-budget.test.js +103 -0
  279. package/dist/__tests__/route-latency-budget.test.js.map +1 -0
  280. package/dist/__tests__/runner.test.d.ts +2 -0
  281. package/dist/__tests__/runner.test.d.ts.map +1 -0
  282. package/dist/__tests__/runner.test.js +234 -0
  283. package/dist/__tests__/runner.test.js.map +1 -0
  284. package/dist/__tests__/session-binding-refusal-tenant.test.d.ts +2 -0
  285. package/dist/__tests__/session-binding-refusal-tenant.test.d.ts.map +1 -0
  286. package/dist/__tests__/session-binding-refusal-tenant.test.js +112 -0
  287. package/dist/__tests__/session-binding-refusal-tenant.test.js.map +1 -0
  288. package/dist/__tests__/session-close-loop.test.d.ts +2 -0
  289. package/dist/__tests__/session-close-loop.test.d.ts.map +1 -0
  290. package/dist/__tests__/session-close-loop.test.js +231 -0
  291. package/dist/__tests__/session-close-loop.test.js.map +1 -0
  292. package/dist/__tests__/session-label.test.d.ts +2 -0
  293. package/dist/__tests__/session-label.test.d.ts.map +1 -0
  294. package/dist/__tests__/session-label.test.js +46 -0
  295. package/dist/__tests__/session-label.test.js.map +1 -0
  296. package/dist/__tests__/session-list-show.test.d.ts +2 -0
  297. package/dist/__tests__/session-list-show.test.d.ts.map +1 -0
  298. package/dist/__tests__/session-list-show.test.js +174 -0
  299. package/dist/__tests__/session-list-show.test.js.map +1 -0
  300. package/dist/__tests__/session-reset.test.d.ts +2 -0
  301. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  302. package/dist/__tests__/session-reset.test.js +138 -0
  303. package/dist/__tests__/session-reset.test.js.map +1 -0
  304. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  305. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  306. package/dist/__tests__/session-resume-backstop.test.js +107 -0
  307. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  308. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  309. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  310. package/dist/__tests__/session-start-key-refresh.test.js +212 -0
  311. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  312. package/dist/__tests__/session-state-machine.test.d.ts +2 -0
  313. package/dist/__tests__/session-state-machine.test.d.ts.map +1 -0
  314. package/dist/__tests__/session-state-machine.test.js +379 -0
  315. package/dist/__tests__/session-state-machine.test.js.map +1 -0
  316. package/dist/__tests__/session-switch.test.d.ts +2 -0
  317. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  318. package/dist/__tests__/session-switch.test.js +267 -0
  319. package/dist/__tests__/session-switch.test.js.map +1 -0
  320. package/dist/__tests__/session-touch.test.d.ts +2 -0
  321. package/dist/__tests__/session-touch.test.d.ts.map +1 -0
  322. package/dist/__tests__/session-touch.test.js +139 -0
  323. package/dist/__tests__/session-touch.test.js.map +1 -0
  324. package/dist/__tests__/session.test.d.ts +2 -0
  325. package/dist/__tests__/session.test.d.ts.map +1 -0
  326. package/dist/__tests__/session.test.js +46 -0
  327. package/dist/__tests__/session.test.js.map +1 -0
  328. package/dist/__tests__/sessionBinding.test.d.ts +2 -0
  329. package/dist/__tests__/sessionBinding.test.d.ts.map +1 -0
  330. package/dist/__tests__/sessionBinding.test.js +118 -0
  331. package/dist/__tests__/sessionBinding.test.js.map +1 -0
  332. package/dist/__tests__/sessionByIdLookup.test.d.ts +2 -0
  333. package/dist/__tests__/sessionByIdLookup.test.d.ts.map +1 -0
  334. package/dist/__tests__/sessionByIdLookup.test.js +63 -0
  335. package/dist/__tests__/sessionByIdLookup.test.js.map +1 -0
  336. package/dist/__tests__/setup-ingest.test.d.ts +2 -0
  337. package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
  338. package/dist/__tests__/setup-ingest.test.js +71 -0
  339. package/dist/__tests__/setup-ingest.test.js.map +1 -0
  340. package/dist/__tests__/setup-resolver.test.d.ts +14 -0
  341. package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
  342. package/dist/__tests__/setup-resolver.test.js +228 -0
  343. package/dist/__tests__/setup-resolver.test.js.map +1 -0
  344. package/dist/__tests__/setupShFallbackWarning.test.d.ts +2 -0
  345. package/dist/__tests__/setupShFallbackWarning.test.d.ts.map +1 -0
  346. package/dist/__tests__/setupShFallbackWarning.test.js +15 -0
  347. package/dist/__tests__/setupShFallbackWarning.test.js.map +1 -0
  348. package/dist/__tests__/skill-vocabulary.test.d.ts +21 -0
  349. package/dist/__tests__/skill-vocabulary.test.d.ts.map +1 -0
  350. package/dist/__tests__/skill-vocabulary.test.js +192 -0
  351. package/dist/__tests__/skill-vocabulary.test.js.map +1 -0
  352. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  353. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  354. package/dist/__tests__/spinner-labels.test.js +23 -0
  355. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  356. package/dist/__tests__/state.test.d.ts +6 -0
  357. package/dist/__tests__/state.test.d.ts.map +1 -0
  358. package/dist/__tests__/state.test.js +117 -0
  359. package/dist/__tests__/state.test.js.map +1 -0
  360. package/dist/__tests__/strip.test.d.ts +2 -0
  361. package/dist/__tests__/strip.test.d.ts.map +1 -0
  362. package/dist/__tests__/strip.test.js +164 -0
  363. package/dist/__tests__/strip.test.js.map +1 -0
  364. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  365. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  366. package/dist/__tests__/surface-profiles.test.js +233 -0
  367. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  368. package/dist/__tests__/surfaces.test.d.ts +2 -0
  369. package/dist/__tests__/surfaces.test.d.ts.map +1 -0
  370. package/dist/__tests__/surfaces.test.js +46 -0
  371. package/dist/__tests__/surfaces.test.js.map +1 -0
  372. package/dist/__tests__/tenant-notice-write-path.test.d.ts +2 -0
  373. package/dist/__tests__/tenant-notice-write-path.test.d.ts.map +1 -0
  374. package/dist/__tests__/tenant-notice-write-path.test.js +169 -0
  375. package/dist/__tests__/tenant-notice-write-path.test.js.map +1 -0
  376. package/dist/__tests__/update-check.test.d.ts +2 -0
  377. package/dist/__tests__/update-check.test.d.ts.map +1 -0
  378. package/dist/__tests__/update-check.test.js +215 -0
  379. package/dist/__tests__/update-check.test.js.map +1 -0
  380. package/dist/__tests__/update.test.d.ts +2 -0
  381. package/dist/__tests__/update.test.d.ts.map +1 -0
  382. package/dist/__tests__/update.test.js +469 -0
  383. package/dist/__tests__/update.test.js.map +1 -0
  384. package/dist/__tests__/upgrade-runner.test.d.ts +2 -0
  385. package/dist/__tests__/upgrade-runner.test.d.ts.map +1 -0
  386. package/dist/__tests__/upgrade-runner.test.js +54 -0
  387. package/dist/__tests__/upgrade-runner.test.js.map +1 -0
  388. package/dist/__tests__/upgrade.test.d.ts +2 -0
  389. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  390. package/dist/__tests__/upgrade.test.js +56 -0
  391. package/dist/__tests__/upgrade.test.js.map +1 -0
  392. package/dist/__tests__/verify-formatter.test.d.ts +2 -0
  393. package/dist/__tests__/verify-formatter.test.d.ts.map +1 -0
  394. package/dist/__tests__/verify-formatter.test.js +85 -0
  395. package/dist/__tests__/verify-formatter.test.js.map +1 -0
  396. package/dist/__tests__/vocabulary-leak.test.d.ts +39 -0
  397. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -0
  398. package/dist/__tests__/vocabulary-leak.test.js +539 -0
  399. package/dist/__tests__/vocabulary-leak.test.js.map +1 -0
  400. package/dist/__tests__/workspace.test.d.ts +2 -0
  401. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  402. package/dist/__tests__/workspace.test.js +328 -0
  403. package/dist/__tests__/workspace.test.js.map +1 -0
  404. package/dist/__tests__/workspaceNotice.test.d.ts +2 -0
  405. package/dist/__tests__/workspaceNotice.test.d.ts.map +1 -0
  406. package/dist/__tests__/workspaceNotice.test.js +567 -0
  407. package/dist/__tests__/workspaceNotice.test.js.map +1 -0
  408. package/dist/commands/__tests__/connect-handoff.test.d.ts +11 -0
  409. package/dist/commands/__tests__/connect-handoff.test.d.ts.map +1 -0
  410. package/dist/commands/__tests__/connect-handoff.test.js +111 -0
  411. package/dist/commands/__tests__/connect-handoff.test.js.map +1 -0
  412. package/dist/commands/__tests__/quality.test.d.ts +2 -0
  413. package/dist/commands/__tests__/quality.test.d.ts.map +1 -0
  414. package/dist/commands/__tests__/quality.test.js +156 -0
  415. package/dist/commands/__tests__/quality.test.js.map +1 -0
  416. package/dist/commands/__tests__/rework.test.d.ts +2 -0
  417. package/dist/commands/__tests__/rework.test.d.ts.map +1 -0
  418. package/dist/commands/__tests__/rework.test.js +149 -0
  419. package/dist/commands/__tests__/rework.test.js.map +1 -0
  420. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  421. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  422. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  423. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  424. package/dist/commands/__tests__/setup-state.test.d.ts +2 -0
  425. package/dist/commands/__tests__/setup-state.test.d.ts.map +1 -0
  426. package/dist/commands/__tests__/setup-state.test.js +194 -0
  427. package/dist/commands/__tests__/setup-state.test.js.map +1 -0
  428. package/dist/commands/accept-policy.d.ts +10 -0
  429. package/dist/commands/accept-policy.d.ts.map +1 -0
  430. package/dist/commands/accept-policy.js +107 -0
  431. package/dist/commands/accept-policy.js.map +1 -0
  432. package/dist/commands/accept.d.ts +18 -0
  433. package/dist/commands/accept.d.ts.map +1 -0
  434. package/dist/commands/accept.js +76 -0
  435. package/dist/commands/accept.js.map +1 -0
  436. package/dist/commands/admin/cockpit.d.ts +80 -0
  437. package/dist/commands/admin/cockpit.d.ts.map +1 -0
  438. package/dist/commands/admin/cockpit.js +618 -0
  439. package/dist/commands/admin/cockpit.js.map +1 -0
  440. package/dist/commands/admin/index.d.ts +70 -0
  441. package/dist/commands/admin/index.d.ts.map +1 -0
  442. package/dist/commands/admin/index.js +372 -0
  443. package/dist/commands/admin/index.js.map +1 -0
  444. package/dist/commands/admin/index.test.d.ts +2 -0
  445. package/dist/commands/admin/index.test.d.ts.map +1 -0
  446. package/dist/commands/admin/index.test.js +84 -0
  447. package/dist/commands/admin/index.test.js.map +1 -0
  448. package/dist/commands/admin/inspect.d.ts +30 -0
  449. package/dist/commands/admin/inspect.d.ts.map +1 -0
  450. package/dist/commands/admin/inspect.js +555 -0
  451. package/dist/commands/admin/inspect.js.map +1 -0
  452. package/dist/commands/admin/inspect.test.d.ts +7 -0
  453. package/dist/commands/admin/inspect.test.d.ts.map +1 -0
  454. package/dist/commands/admin/inspect.test.js +90 -0
  455. package/dist/commands/admin/inspect.test.js.map +1 -0
  456. package/dist/commands/admin/manage.d.ts +8 -0
  457. package/dist/commands/admin/manage.d.ts.map +1 -0
  458. package/dist/commands/admin/manage.js +260 -0
  459. package/dist/commands/admin/manage.js.map +1 -0
  460. package/dist/commands/admin/manage.test.d.ts +16 -0
  461. package/dist/commands/admin/manage.test.d.ts.map +1 -0
  462. package/dist/commands/admin/manage.test.js +159 -0
  463. package/dist/commands/admin/manage.test.js.map +1 -0
  464. package/dist/commands/admin/probe.d.ts +75 -0
  465. package/dist/commands/admin/probe.d.ts.map +1 -0
  466. package/dist/commands/admin/probe.js +224 -0
  467. package/dist/commands/admin/probe.js.map +1 -0
  468. package/dist/commands/admin/probe.test.d.ts +2 -0
  469. package/dist/commands/admin/probe.test.d.ts.map +1 -0
  470. package/dist/commands/admin/probe.test.js +193 -0
  471. package/dist/commands/admin/probe.test.js.map +1 -0
  472. package/dist/commands/admin/run.d.ts +43 -0
  473. package/dist/commands/admin/run.d.ts.map +1 -0
  474. package/dist/commands/admin/run.js +78 -0
  475. package/dist/commands/admin/run.js.map +1 -0
  476. package/dist/commands/admin/run.test.d.ts +18 -0
  477. package/dist/commands/admin/run.test.d.ts.map +1 -0
  478. package/dist/commands/admin/run.test.js +168 -0
  479. package/dist/commands/admin/run.test.js.map +1 -0
  480. package/dist/commands/admin/seed.d.ts +75 -0
  481. package/dist/commands/admin/seed.d.ts.map +1 -0
  482. package/dist/commands/admin/seed.js +947 -0
  483. package/dist/commands/admin/seed.js.map +1 -0
  484. package/dist/commands/admin/seed.test.d.ts +11 -0
  485. package/dist/commands/admin/seed.test.d.ts.map +1 -0
  486. package/dist/commands/admin/seed.test.js +147 -0
  487. package/dist/commands/admin/seed.test.js.map +1 -0
  488. package/dist/commands/admin/seedRegistryEntries.generated.d.ts +14 -0
  489. package/dist/commands/admin/seedRegistryEntries.generated.d.ts.map +1 -0
  490. package/dist/commands/admin/seedRegistryEntries.generated.js +153 -0
  491. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -0
  492. package/dist/commands/admin/seedRegistryEntries.test.d.ts +13 -0
  493. package/dist/commands/admin/seedRegistryEntries.test.d.ts.map +1 -0
  494. package/dist/commands/admin/seedRegistryEntries.test.js +91 -0
  495. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -0
  496. package/dist/commands/admin/seedRowType.d.ts +22 -0
  497. package/dist/commands/admin/seedRowType.d.ts.map +1 -0
  498. package/dist/commands/admin/seedRowType.js +2 -0
  499. package/dist/commands/admin/seedRowType.js.map +1 -0
  500. package/dist/commands/admin/seedStatusColor.d.ts +9 -0
  501. package/dist/commands/admin/seedStatusColor.d.ts.map +1 -0
  502. package/dist/commands/admin/seedStatusColor.js +18 -0
  503. package/dist/commands/admin/seedStatusColor.js.map +1 -0
  504. package/dist/commands/admin/seedStatusColor.test.d.ts +2 -0
  505. package/dist/commands/admin/seedStatusColor.test.d.ts.map +1 -0
  506. package/dist/commands/admin/seedStatusColor.test.js +25 -0
  507. package/dist/commands/admin/seedStatusColor.test.js.map +1 -0
  508. package/dist/commands/audit.d.ts +25 -0
  509. package/dist/commands/audit.d.ts.map +1 -0
  510. package/dist/commands/audit.js +223 -0
  511. package/dist/commands/audit.js.map +1 -0
  512. package/dist/commands/authority-domains.d.ts +154 -0
  513. package/dist/commands/authority-domains.d.ts.map +1 -0
  514. package/dist/commands/authority-domains.js +365 -0
  515. package/dist/commands/authority-domains.js.map +1 -0
  516. package/dist/commands/brand-pack.d.ts +2 -0
  517. package/dist/commands/brand-pack.d.ts.map +1 -0
  518. package/dist/commands/brand-pack.js +25 -0
  519. package/dist/commands/brand-pack.js.map +1 -0
  520. package/dist/commands/brief.d.ts +28 -0
  521. package/dist/commands/brief.d.ts.map +1 -0
  522. package/dist/commands/brief.js +93 -0
  523. package/dist/commands/brief.js.map +1 -0
  524. package/dist/commands/capture.d.ts +37 -0
  525. package/dist/commands/capture.d.ts.map +1 -0
  526. package/dist/commands/capture.js +405 -0
  527. package/dist/commands/capture.js.map +1 -0
  528. package/dist/commands/chain-walk.d.ts +14 -0
  529. package/dist/commands/chain-walk.d.ts.map +1 -0
  530. package/dist/commands/chain-walk.js +38 -0
  531. package/dist/commands/chain-walk.js.map +1 -0
  532. package/dist/commands/changes.d.ts +11 -0
  533. package/dist/commands/changes.d.ts.map +1 -0
  534. package/dist/commands/changes.js +46 -0
  535. package/dist/commands/changes.js.map +1 -0
  536. package/dist/commands/codex-prep.d.ts +23 -0
  537. package/dist/commands/codex-prep.d.ts.map +1 -0
  538. package/dist/commands/codex-prep.js +56 -0
  539. package/dist/commands/codex-prep.js.map +1 -0
  540. package/dist/commands/collections.d.ts +22 -0
  541. package/dist/commands/collections.d.ts.map +1 -0
  542. package/dist/commands/collections.js +77 -0
  543. package/dist/commands/collections.js.map +1 -0
  544. package/dist/commands/conflicts.d.ts +40 -0
  545. package/dist/commands/conflicts.d.ts.map +1 -0
  546. package/dist/commands/conflicts.js +267 -0
  547. package/dist/commands/conflicts.js.map +1 -0
  548. package/dist/commands/conflicts.test.d.ts +2 -0
  549. package/dist/commands/conflicts.test.d.ts.map +1 -0
  550. package/dist/commands/conflicts.test.js +219 -0
  551. package/dist/commands/conflicts.test.js.map +1 -0
  552. package/dist/commands/connect-config.test.d.ts +2 -0
  553. package/dist/commands/connect-config.test.d.ts.map +1 -0
  554. package/dist/commands/connect-config.test.js +44 -0
  555. package/dist/commands/connect-config.test.js.map +1 -0
  556. package/dist/commands/connect-context.d.ts +57 -0
  557. package/dist/commands/connect-context.d.ts.map +1 -0
  558. package/dist/commands/connect-context.js +93 -0
  559. package/dist/commands/connect-context.js.map +1 -0
  560. package/dist/commands/connect-context.test.d.ts +2 -0
  561. package/dist/commands/connect-context.test.d.ts.map +1 -0
  562. package/dist/commands/connect-context.test.js +187 -0
  563. package/dist/commands/connect-context.test.js.map +1 -0
  564. package/dist/commands/connect-handoff.d.ts +51 -0
  565. package/dist/commands/connect-handoff.d.ts.map +1 -0
  566. package/dist/commands/connect-handoff.js +70 -0
  567. package/dist/commands/connect-handoff.js.map +1 -0
  568. package/dist/commands/connect-integration.test.d.ts +7 -0
  569. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  570. package/dist/commands/connect-integration.test.js +223 -0
  571. package/dist/commands/connect-integration.test.js.map +1 -0
  572. package/dist/commands/connect-legacy-migration.test.d.ts +2 -0
  573. package/dist/commands/connect-legacy-migration.test.d.ts.map +1 -0
  574. package/dist/commands/connect-legacy-migration.test.js +109 -0
  575. package/dist/commands/connect-legacy-migration.test.js.map +1 -0
  576. package/dist/commands/connect-screens.d.ts +33 -0
  577. package/dist/commands/connect-screens.d.ts.map +1 -0
  578. package/dist/commands/connect-screens.js +138 -0
  579. package/dist/commands/connect-screens.js.map +1 -0
  580. package/dist/commands/connect.d.ts +42 -0
  581. package/dist/commands/connect.d.ts.map +1 -0
  582. package/dist/commands/connect.js +416 -0
  583. package/dist/commands/connect.js.map +1 -0
  584. package/dist/commands/connect.test.d.ts +6 -0
  585. package/dist/commands/connect.test.d.ts.map +1 -0
  586. package/dist/commands/connect.test.js +571 -0
  587. package/dist/commands/connect.test.js.map +1 -0
  588. package/dist/commands/constellation.d.ts +11 -0
  589. package/dist/commands/constellation.d.ts.map +1 -0
  590. package/dist/commands/constellation.js +33 -0
  591. package/dist/commands/constellation.js.map +1 -0
  592. package/dist/commands/context.d.ts +2 -1
  593. package/dist/commands/context.d.ts.map +1 -1
  594. package/dist/commands/context.js +21 -10
  595. package/dist/commands/context.js.map +1 -1
  596. package/dist/commands/cross-cut.d.ts +11 -0
  597. package/dist/commands/cross-cut.d.ts.map +1 -0
  598. package/dist/commands/cross-cut.js +23 -0
  599. package/dist/commands/cross-cut.js.map +1 -0
  600. package/dist/commands/direction.d.ts +10 -0
  601. package/dist/commands/direction.d.ts.map +1 -0
  602. package/dist/commands/direction.js +79 -0
  603. package/dist/commands/direction.js.map +1 -0
  604. package/dist/commands/doctor.d.ts +18 -0
  605. package/dist/commands/doctor.d.ts.map +1 -0
  606. package/dist/commands/doctor.js +367 -0
  607. package/dist/commands/doctor.js.map +1 -0
  608. package/dist/commands/doctor.test.d.ts +8 -0
  609. package/dist/commands/doctor.test.d.ts.map +1 -0
  610. package/dist/commands/doctor.test.js +657 -0
  611. package/dist/commands/doctor.test.js.map +1 -0
  612. package/dist/commands/entryArchive.d.ts +8 -0
  613. package/dist/commands/entryArchive.d.ts.map +1 -0
  614. package/dist/commands/entryArchive.js +37 -0
  615. package/dist/commands/entryArchive.js.map +1 -0
  616. package/dist/commands/entryPreflight.d.ts +8 -0
  617. package/dist/commands/entryPreflight.d.ts.map +1 -0
  618. package/dist/commands/entryPreflight.js +48 -0
  619. package/dist/commands/entryPreflight.js.map +1 -0
  620. package/dist/commands/feedback.d.ts +36 -0
  621. package/dist/commands/feedback.d.ts.map +1 -0
  622. package/dist/commands/feedback.js +193 -0
  623. package/dist/commands/feedback.js.map +1 -0
  624. package/dist/commands/feedback.test.d.ts +2 -0
  625. package/dist/commands/feedback.test.d.ts.map +1 -0
  626. package/dist/commands/feedback.test.js +125 -0
  627. package/dist/commands/feedback.test.js.map +1 -0
  628. package/dist/commands/fields.d.ts +9 -0
  629. package/dist/commands/fields.d.ts.map +1 -0
  630. package/dist/commands/fields.js +30 -0
  631. package/dist/commands/fields.js.map +1 -0
  632. package/dist/commands/files.d.ts +26 -0
  633. package/dist/commands/files.d.ts.map +1 -0
  634. package/dist/commands/files.js +160 -0
  635. package/dist/commands/files.js.map +1 -0
  636. package/dist/commands/files.test.d.ts +2 -0
  637. package/dist/commands/files.test.d.ts.map +1 -0
  638. package/dist/commands/files.test.js +278 -0
  639. package/dist/commands/files.test.js.map +1 -0
  640. package/dist/commands/get.d.ts +8 -1
  641. package/dist/commands/get.d.ts.map +1 -1
  642. package/dist/commands/get.js +61 -8
  643. package/dist/commands/get.js.map +1 -1
  644. package/dist/commands/handshake.d.ts +115 -0
  645. package/dist/commands/handshake.d.ts.map +1 -0
  646. package/dist/commands/handshake.js +2128 -0
  647. package/dist/commands/handshake.js.map +1 -0
  648. package/dist/commands/handshakeCursorSkillCleanup.d.ts +36 -0
  649. package/dist/commands/handshakeCursorSkillCleanup.d.ts.map +1 -0
  650. package/dist/commands/handshakeCursorSkillCleanup.js +102 -0
  651. package/dist/commands/handshakeCursorSkillCleanup.js.map +1 -0
  652. package/dist/commands/handshakeDriftClassification.d.ts +33 -0
  653. package/dist/commands/handshakeDriftClassification.d.ts.map +1 -0
  654. package/dist/commands/handshakeDriftClassification.js +62 -0
  655. package/dist/commands/handshakeDriftClassification.js.map +1 -0
  656. package/dist/commands/ingest.d.ts +8 -2
  657. package/dist/commands/ingest.d.ts.map +1 -1
  658. package/dist/commands/ingest.js +160 -28
  659. package/dist/commands/ingest.js.map +1 -1
  660. package/dist/commands/init.d.ts +14 -0
  661. package/dist/commands/init.d.ts.map +1 -0
  662. package/dist/commands/init.js +120 -0
  663. package/dist/commands/init.js.map +1 -0
  664. package/dist/commands/login.d.ts +4 -0
  665. package/dist/commands/login.d.ts.map +1 -1
  666. package/dist/commands/login.js +101 -38
  667. package/dist/commands/login.js.map +1 -1
  668. package/dist/commands/method.d.ts +99 -0
  669. package/dist/commands/method.d.ts.map +1 -0
  670. package/dist/commands/method.js +804 -0
  671. package/dist/commands/method.js.map +1 -0
  672. package/dist/commands/migrate-setup.d.ts +18 -0
  673. package/dist/commands/migrate-setup.d.ts.map +1 -0
  674. package/dist/commands/migrate-setup.js +162 -0
  675. package/dist/commands/migrate-setup.js.map +1 -0
  676. package/dist/commands/organisation.d.ts +41 -0
  677. package/dist/commands/organisation.d.ts.map +1 -0
  678. package/dist/commands/organisation.js +353 -0
  679. package/dist/commands/organisation.js.map +1 -0
  680. package/dist/commands/organisation.test.d.ts +2 -0
  681. package/dist/commands/organisation.test.d.ts.map +1 -0
  682. package/dist/commands/organisation.test.js +233 -0
  683. package/dist/commands/organisation.test.js.map +1 -0
  684. package/dist/commands/organisationHierarchy.d.ts +8 -0
  685. package/dist/commands/organisationHierarchy.d.ts.map +1 -0
  686. package/dist/commands/organisationHierarchy.js +73 -0
  687. package/dist/commands/organisationHierarchy.js.map +1 -0
  688. package/dist/commands/organisationHierarchy.test.d.ts +2 -0
  689. package/dist/commands/organisationHierarchy.test.d.ts.map +1 -0
  690. package/dist/commands/organisationHierarchy.test.js +72 -0
  691. package/dist/commands/organisationHierarchy.test.js.map +1 -0
  692. package/dist/commands/organisationWrite.d.ts +18 -0
  693. package/dist/commands/organisationWrite.d.ts.map +1 -0
  694. package/dist/commands/organisationWrite.js +50 -0
  695. package/dist/commands/organisationWrite.js.map +1 -0
  696. package/dist/commands/orient.d.ts +235 -3
  697. package/dist/commands/orient.d.ts.map +1 -1
  698. package/dist/commands/orient.js +242 -10
  699. package/dist/commands/orient.js.map +1 -1
  700. package/dist/commands/outcome.d.ts +92 -0
  701. package/dist/commands/outcome.d.ts.map +1 -0
  702. package/dist/commands/outcome.js +203 -0
  703. package/dist/commands/outcome.js.map +1 -0
  704. package/dist/commands/outcome.test.d.ts +2 -0
  705. package/dist/commands/outcome.test.d.ts.map +1 -0
  706. package/dist/commands/outcome.test.js +308 -0
  707. package/dist/commands/outcome.test.js.map +1 -0
  708. package/dist/commands/profile.d.ts +48 -0
  709. package/dist/commands/profile.d.ts.map +1 -0
  710. package/dist/commands/profile.js +241 -0
  711. package/dist/commands/profile.js.map +1 -0
  712. package/dist/commands/promote.d.ts +23 -0
  713. package/dist/commands/promote.d.ts.map +1 -0
  714. package/dist/commands/promote.js +276 -0
  715. package/dist/commands/promote.js.map +1 -0
  716. package/dist/commands/proof-run.d.ts +51 -0
  717. package/dist/commands/proof-run.d.ts.map +1 -0
  718. package/dist/commands/proof-run.js +209 -0
  719. package/dist/commands/proof-run.js.map +1 -0
  720. package/dist/commands/proposals.d.ts +9 -0
  721. package/dist/commands/proposals.d.ts.map +1 -0
  722. package/dist/commands/proposals.js +24 -0
  723. package/dist/commands/proposals.js.map +1 -0
  724. package/dist/commands/quality.d.ts +16 -0
  725. package/dist/commands/quality.d.ts.map +1 -0
  726. package/dist/commands/quality.js +29 -0
  727. package/dist/commands/quality.js.map +1 -0
  728. package/dist/commands/questions.d.ts +34 -0
  729. package/dist/commands/questions.d.ts.map +1 -0
  730. package/dist/commands/questions.js +316 -0
  731. package/dist/commands/questions.js.map +1 -0
  732. package/dist/commands/questions.test.d.ts +2 -0
  733. package/dist/commands/questions.test.d.ts.map +1 -0
  734. package/dist/commands/questions.test.js +186 -0
  735. package/dist/commands/questions.test.js.map +1 -0
  736. package/dist/commands/reject.d.ts +14 -0
  737. package/dist/commands/reject.d.ts.map +1 -0
  738. package/dist/commands/reject.js +44 -0
  739. package/dist/commands/reject.js.map +1 -0
  740. package/dist/commands/relate.d.ts +17 -0
  741. package/dist/commands/relate.d.ts.map +1 -0
  742. package/dist/commands/relate.js +182 -0
  743. package/dist/commands/relate.js.map +1 -0
  744. package/dist/commands/restore.d.ts +2 -0
  745. package/dist/commands/restore.d.ts.map +1 -0
  746. package/dist/commands/restore.js +83 -0
  747. package/dist/commands/restore.js.map +1 -0
  748. package/dist/commands/rework.d.ts +24 -0
  749. package/dist/commands/rework.d.ts.map +1 -0
  750. package/dist/commands/rework.js +97 -0
  751. package/dist/commands/rework.js.map +1 -0
  752. package/dist/commands/role.d.ts +48 -0
  753. package/dist/commands/role.d.ts.map +1 -0
  754. package/dist/commands/role.js +122 -0
  755. package/dist/commands/role.js.map +1 -0
  756. package/dist/commands/role.test.d.ts +2 -0
  757. package/dist/commands/role.test.d.ts.map +1 -0
  758. package/dist/commands/role.test.js +173 -0
  759. package/dist/commands/role.test.js.map +1 -0
  760. package/dist/commands/scoreboard.d.ts +28 -0
  761. package/dist/commands/scoreboard.d.ts.map +1 -0
  762. package/dist/commands/scoreboard.js +40 -0
  763. package/dist/commands/scoreboard.js.map +1 -0
  764. package/dist/commands/search.d.ts +1 -0
  765. package/dist/commands/search.d.ts.map +1 -1
  766. package/dist/commands/search.js +6 -4
  767. package/dist/commands/search.js.map +1 -1
  768. package/dist/commands/session.d.ts +72 -0
  769. package/dist/commands/session.d.ts.map +1 -0
  770. package/dist/commands/session.js +593 -0
  771. package/dist/commands/session.js.map +1 -0
  772. package/dist/commands/setup-audit.d.ts +59 -0
  773. package/dist/commands/setup-audit.d.ts.map +1 -0
  774. package/dist/commands/setup-audit.js +250 -0
  775. package/dist/commands/setup-audit.js.map +1 -0
  776. package/dist/commands/setup-detect-surfaces.d.ts +38 -0
  777. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -0
  778. package/dist/commands/setup-detect-surfaces.js +76 -0
  779. package/dist/commands/setup-detect-surfaces.js.map +1 -0
  780. package/dist/commands/setup-ingest.d.ts +17 -0
  781. package/dist/commands/setup-ingest.d.ts.map +1 -0
  782. package/dist/commands/setup-ingest.js +179 -0
  783. package/dist/commands/setup-ingest.js.map +1 -0
  784. package/dist/commands/setup-resolver.d.ts +58 -0
  785. package/dist/commands/setup-resolver.d.ts.map +1 -0
  786. package/dist/commands/setup-resolver.js +150 -0
  787. package/dist/commands/setup-resolver.js.map +1 -0
  788. package/dist/commands/setup-state.d.ts +42 -0
  789. package/dist/commands/setup-state.d.ts.map +1 -0
  790. package/dist/commands/setup-state.js +93 -0
  791. package/dist/commands/setup-state.js.map +1 -0
  792. package/dist/commands/setup.d.ts +23 -0
  793. package/dist/commands/setup.d.ts.map +1 -0
  794. package/dist/commands/setup.js +69 -0
  795. package/dist/commands/setup.js.map +1 -0
  796. package/dist/commands/shape.d.ts +16 -0
  797. package/dist/commands/shape.d.ts.map +1 -0
  798. package/dist/commands/shape.js +149 -0
  799. package/dist/commands/shape.js.map +1 -0
  800. package/dist/commands/shape.test.d.ts +2 -0
  801. package/dist/commands/shape.test.d.ts.map +1 -0
  802. package/dist/commands/shape.test.js +148 -0
  803. package/dist/commands/shape.test.js.map +1 -0
  804. package/dist/commands/status.d.ts +7 -0
  805. package/dist/commands/status.d.ts.map +1 -0
  806. package/dist/commands/status.js +102 -0
  807. package/dist/commands/status.js.map +1 -0
  808. package/dist/commands/status.test.d.ts +2 -0
  809. package/dist/commands/status.test.d.ts.map +1 -0
  810. package/dist/commands/status.test.js +75 -0
  811. package/dist/commands/status.test.js.map +1 -0
  812. package/dist/commands/update.d.ts +37 -0
  813. package/dist/commands/update.d.ts.map +1 -0
  814. package/dist/commands/update.js +235 -0
  815. package/dist/commands/update.js.map +1 -0
  816. package/dist/commands/upgrade.d.ts +5 -0
  817. package/dist/commands/upgrade.d.ts.map +1 -0
  818. package/dist/commands/upgrade.js +110 -0
  819. package/dist/commands/upgrade.js.map +1 -0
  820. package/dist/commands/usage.d.ts +40 -0
  821. package/dist/commands/usage.d.ts.map +1 -0
  822. package/dist/commands/usage.js +214 -0
  823. package/dist/commands/usage.js.map +1 -0
  824. package/dist/commands/verify.d.ts +13 -0
  825. package/dist/commands/verify.d.ts.map +1 -0
  826. package/dist/commands/verify.js +55 -0
  827. package/dist/commands/verify.js.map +1 -0
  828. package/dist/commands/welcome.d.ts +21 -0
  829. package/dist/commands/welcome.d.ts.map +1 -0
  830. package/dist/commands/welcome.js +53 -0
  831. package/dist/commands/welcome.js.map +1 -0
  832. package/dist/commands/whoami.d.ts +20 -0
  833. package/dist/commands/whoami.d.ts.map +1 -0
  834. package/dist/commands/whoami.js +126 -0
  835. package/dist/commands/whoami.js.map +1 -0
  836. package/dist/commands/whoami.test.d.ts +2 -0
  837. package/dist/commands/whoami.test.d.ts.map +1 -0
  838. package/dist/commands/whoami.test.js +130 -0
  839. package/dist/commands/whoami.test.js.map +1 -0
  840. package/dist/commands/workspace.d.ts +115 -0
  841. package/dist/commands/workspace.d.ts.map +1 -0
  842. package/dist/commands/workspace.js +263 -0
  843. package/dist/commands/workspace.js.map +1 -0
  844. package/dist/formatters/__tests__/orient-possibleConflict.test.d.ts +2 -0
  845. package/dist/formatters/__tests__/orient-possibleConflict.test.d.ts.map +1 -0
  846. package/dist/formatters/__tests__/orient-possibleConflict.test.js +68 -0
  847. package/dist/formatters/__tests__/orient-possibleConflict.test.js.map +1 -0
  848. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  849. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  850. package/dist/formatters/__tests__/orient-provenance.test.js +548 -0
  851. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  852. package/dist/formatters/__tests__/session-list-show.test.d.ts +2 -0
  853. package/dist/formatters/__tests__/session-list-show.test.d.ts.map +1 -0
  854. package/dist/formatters/__tests__/session-list-show.test.js +159 -0
  855. package/dist/formatters/__tests__/session-list-show.test.js.map +1 -0
  856. package/dist/formatters/__tests__/session.test.d.ts +2 -0
  857. package/dist/formatters/__tests__/session.test.d.ts.map +1 -0
  858. package/dist/formatters/__tests__/session.test.js +206 -0
  859. package/dist/formatters/__tests__/session.test.js.map +1 -0
  860. package/dist/formatters/audit.d.ts +52 -0
  861. package/dist/formatters/audit.d.ts.map +1 -0
  862. package/dist/formatters/audit.js +81 -0
  863. package/dist/formatters/audit.js.map +1 -0
  864. package/dist/formatters/brief.d.ts +108 -0
  865. package/dist/formatters/brief.d.ts.map +1 -0
  866. package/dist/formatters/brief.js +190 -0
  867. package/dist/formatters/brief.js.map +1 -0
  868. package/dist/formatters/brief.test.d.ts +2 -0
  869. package/dist/formatters/brief.test.d.ts.map +1 -0
  870. package/dist/formatters/brief.test.js +21 -0
  871. package/dist/formatters/brief.test.js.map +1 -0
  872. package/dist/formatters/capture.d.ts +66 -0
  873. package/dist/formatters/capture.d.ts.map +1 -0
  874. package/dist/formatters/capture.js +101 -0
  875. package/dist/formatters/capture.js.map +1 -0
  876. package/dist/formatters/chain-walk.d.ts +33 -0
  877. package/dist/formatters/chain-walk.d.ts.map +1 -0
  878. package/dist/formatters/chain-walk.js +54 -0
  879. package/dist/formatters/chain-walk.js.map +1 -0
  880. package/dist/formatters/changes.d.ts +25 -0
  881. package/dist/formatters/changes.d.ts.map +1 -0
  882. package/dist/formatters/changes.js +60 -0
  883. package/dist/formatters/changes.js.map +1 -0
  884. package/dist/formatters/coaching.d.ts +55 -0
  885. package/dist/formatters/coaching.d.ts.map +1 -0
  886. package/dist/formatters/coaching.js +46 -0
  887. package/dist/formatters/coaching.js.map +1 -0
  888. package/dist/formatters/collections.d.ts +40 -0
  889. package/dist/formatters/collections.d.ts.map +1 -0
  890. package/dist/formatters/collections.js +93 -0
  891. package/dist/formatters/collections.js.map +1 -0
  892. package/dist/formatters/conflicts.d.ts +69 -0
  893. package/dist/formatters/conflicts.d.ts.map +1 -0
  894. package/dist/formatters/conflicts.js +87 -0
  895. package/dist/formatters/conflicts.js.map +1 -0
  896. package/dist/formatters/conflicts.test.d.ts +2 -0
  897. package/dist/formatters/conflicts.test.d.ts.map +1 -0
  898. package/dist/formatters/conflicts.test.js +136 -0
  899. package/dist/formatters/conflicts.test.js.map +1 -0
  900. package/dist/formatters/constellation.d.ts +34 -0
  901. package/dist/formatters/constellation.d.ts.map +1 -0
  902. package/dist/formatters/constellation.js +38 -0
  903. package/dist/formatters/constellation.js.map +1 -0
  904. package/dist/formatters/context.d.ts +1 -1
  905. package/dist/formatters/context.d.ts.map +1 -1
  906. package/dist/formatters/context.js.map +1 -1
  907. package/dist/formatters/cross-cut.d.ts +21 -0
  908. package/dist/formatters/cross-cut.d.ts.map +1 -0
  909. package/dist/formatters/cross-cut.js +32 -0
  910. package/dist/formatters/cross-cut.js.map +1 -0
  911. package/dist/formatters/direction.d.ts +48 -0
  912. package/dist/formatters/direction.d.ts.map +1 -0
  913. package/dist/formatters/direction.js +75 -0
  914. package/dist/formatters/direction.js.map +1 -0
  915. package/dist/formatters/direction.test.d.ts +2 -0
  916. package/dist/formatters/direction.test.d.ts.map +1 -0
  917. package/dist/formatters/direction.test.js +70 -0
  918. package/dist/formatters/direction.test.js.map +1 -0
  919. package/dist/formatters/entry.d.ts +89 -4
  920. package/dist/formatters/entry.d.ts.map +1 -1
  921. package/dist/formatters/entry.js +112 -12
  922. package/dist/formatters/entry.js.map +1 -1
  923. package/dist/formatters/feedback.d.ts +56 -0
  924. package/dist/formatters/feedback.d.ts.map +1 -0
  925. package/dist/formatters/feedback.js +89 -0
  926. package/dist/formatters/feedback.js.map +1 -0
  927. package/dist/formatters/feedback.test.d.ts +2 -0
  928. package/dist/formatters/feedback.test.d.ts.map +1 -0
  929. package/dist/formatters/feedback.test.js +112 -0
  930. package/dist/formatters/feedback.test.js.map +1 -0
  931. package/dist/formatters/fields.d.ts +32 -0
  932. package/dist/formatters/fields.d.ts.map +1 -0
  933. package/dist/formatters/fields.js +49 -0
  934. package/dist/formatters/fields.js.map +1 -0
  935. package/dist/formatters/handshake.d.ts +75 -0
  936. package/dist/formatters/handshake.d.ts.map +1 -0
  937. package/dist/formatters/handshake.js +213 -0
  938. package/dist/formatters/handshake.js.map +1 -0
  939. package/dist/formatters/orient.coherencyCheckTag.test.d.ts +2 -0
  940. package/dist/formatters/orient.coherencyCheckTag.test.d.ts.map +1 -0
  941. package/dist/formatters/orient.coherencyCheckTag.test.js +22 -0
  942. package/dist/formatters/orient.coherencyCheckTag.test.js.map +1 -0
  943. package/dist/formatters/orient.d.ts +350 -10
  944. package/dist/formatters/orient.d.ts.map +1 -1
  945. package/dist/formatters/orient.js +395 -46
  946. package/dist/formatters/orient.js.map +1 -1
  947. package/dist/formatters/orient.rcrtMiss.test.d.ts +2 -0
  948. package/dist/formatters/orient.rcrtMiss.test.d.ts.map +1 -0
  949. package/dist/formatters/orient.rcrtMiss.test.js +146 -0
  950. package/dist/formatters/orient.rcrtMiss.test.js.map +1 -0
  951. package/dist/formatters/orient.rituals.test.d.ts +2 -0
  952. package/dist/formatters/orient.rituals.test.d.ts.map +1 -0
  953. package/dist/formatters/orient.rituals.test.js +77 -0
  954. package/dist/formatters/orient.rituals.test.js.map +1 -0
  955. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts +2 -0
  956. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts.map +1 -0
  957. package/dist/formatters/orient.shapeAdvisorySummary.test.js +62 -0
  958. package/dist/formatters/orient.shapeAdvisorySummary.test.js.map +1 -0
  959. package/dist/formatters/orientDegradation.d.ts +21 -0
  960. package/dist/formatters/orientDegradation.d.ts.map +1 -0
  961. package/dist/formatters/orientDegradation.js +33 -0
  962. package/dist/formatters/orientDegradation.js.map +1 -0
  963. package/dist/formatters/orientDirection.d.ts +67 -0
  964. package/dist/formatters/orientDirection.d.ts.map +1 -0
  965. package/dist/formatters/orientDirection.js +82 -0
  966. package/dist/formatters/orientDirection.js.map +1 -0
  967. package/dist/formatters/orientDirection.test.d.ts +2 -0
  968. package/dist/formatters/orientDirection.test.d.ts.map +1 -0
  969. package/dist/formatters/orientDirection.test.js +171 -0
  970. package/dist/formatters/orientDirection.test.js.map +1 -0
  971. package/dist/formatters/orientRetrievalMiss.d.ts +30 -0
  972. package/dist/formatters/orientRetrievalMiss.d.ts.map +1 -0
  973. package/dist/formatters/orientRetrievalMiss.js +24 -0
  974. package/dist/formatters/orientRetrievalMiss.js.map +1 -0
  975. package/dist/formatters/promote.d.ts +79 -0
  976. package/dist/formatters/promote.d.ts.map +1 -0
  977. package/dist/formatters/promote.js +79 -0
  978. package/dist/formatters/promote.js.map +1 -0
  979. package/dist/formatters/proposals.d.ts +45 -0
  980. package/dist/formatters/proposals.d.ts.map +1 -0
  981. package/dist/formatters/proposals.js +62 -0
  982. package/dist/formatters/proposals.js.map +1 -0
  983. package/dist/formatters/questions.d.ts +100 -0
  984. package/dist/formatters/questions.d.ts.map +1 -0
  985. package/dist/formatters/questions.js +163 -0
  986. package/dist/formatters/questions.js.map +1 -0
  987. package/dist/formatters/questions.test.d.ts +2 -0
  988. package/dist/formatters/questions.test.d.ts.map +1 -0
  989. package/dist/formatters/questions.test.js +211 -0
  990. package/dist/formatters/questions.test.js.map +1 -0
  991. package/dist/formatters/relate.d.ts +27 -0
  992. package/dist/formatters/relate.d.ts.map +1 -0
  993. package/dist/formatters/relate.js +25 -0
  994. package/dist/formatters/relate.js.map +1 -0
  995. package/dist/formatters/relate.test.d.ts +2 -0
  996. package/dist/formatters/relate.test.d.ts.map +1 -0
  997. package/dist/formatters/relate.test.js +81 -0
  998. package/dist/formatters/relate.test.js.map +1 -0
  999. package/dist/formatters/scoreboard.d.ts +11 -0
  1000. package/dist/formatters/scoreboard.d.ts.map +1 -0
  1001. package/dist/formatters/scoreboard.js +164 -0
  1002. package/dist/formatters/scoreboard.js.map +1 -0
  1003. package/dist/formatters/scoreboard.test.d.ts +2 -0
  1004. package/dist/formatters/scoreboard.test.d.ts.map +1 -0
  1005. package/dist/formatters/scoreboard.test.js +303 -0
  1006. package/dist/formatters/scoreboard.test.js.map +1 -0
  1007. package/dist/formatters/search.d.ts +0 -4
  1008. package/dist/formatters/search.d.ts.map +1 -1
  1009. package/dist/formatters/search.js +20 -1
  1010. package/dist/formatters/search.js.map +1 -1
  1011. package/dist/formatters/search.test.d.ts +2 -0
  1012. package/dist/formatters/search.test.d.ts.map +1 -0
  1013. package/dist/formatters/search.test.js +46 -0
  1014. package/dist/formatters/search.test.js.map +1 -0
  1015. package/dist/formatters/session-feedback.test.d.ts +2 -0
  1016. package/dist/formatters/session-feedback.test.d.ts.map +1 -0
  1017. package/dist/formatters/session-feedback.test.js +61 -0
  1018. package/dist/formatters/session-feedback.test.js.map +1 -0
  1019. package/dist/formatters/session.d.ts +129 -0
  1020. package/dist/formatters/session.d.ts.map +1 -0
  1021. package/dist/formatters/session.js +356 -0
  1022. package/dist/formatters/session.js.map +1 -0
  1023. package/dist/formatters/shape.d.ts +54 -0
  1024. package/dist/formatters/shape.d.ts.map +1 -0
  1025. package/dist/formatters/shape.js +97 -0
  1026. package/dist/formatters/shape.js.map +1 -0
  1027. package/dist/formatters/shape.test.d.ts +2 -0
  1028. package/dist/formatters/shape.test.d.ts.map +1 -0
  1029. package/dist/formatters/shape.test.js +80 -0
  1030. package/dist/formatters/shape.test.js.map +1 -0
  1031. package/dist/formatters/spineCheck.d.ts +13 -0
  1032. package/dist/formatters/spineCheck.d.ts.map +1 -0
  1033. package/dist/formatters/spineCheck.js +113 -0
  1034. package/dist/formatters/spineCheck.js.map +1 -0
  1035. package/dist/formatters/spineCheck.test.d.ts +2 -0
  1036. package/dist/formatters/spineCheck.test.d.ts.map +1 -0
  1037. package/dist/formatters/spineCheck.test.js +76 -0
  1038. package/dist/formatters/spineCheck.test.js.map +1 -0
  1039. package/dist/formatters/update.d.ts +20 -0
  1040. package/dist/formatters/update.d.ts.map +1 -0
  1041. package/dist/formatters/update.js +49 -0
  1042. package/dist/formatters/update.js.map +1 -0
  1043. package/dist/formatters/verify.d.ts +19 -0
  1044. package/dist/formatters/verify.d.ts.map +1 -0
  1045. package/dist/formatters/verify.js +29 -0
  1046. package/dist/formatters/verify.js.map +1 -0
  1047. package/dist/generated/healthGapKinds.generated.d.ts +12 -0
  1048. package/dist/generated/healthGapKinds.generated.d.ts.map +1 -0
  1049. package/dist/generated/healthGapKinds.generated.js +24 -0
  1050. package/dist/generated/healthGapKinds.generated.js.map +1 -0
  1051. package/dist/generated/relationTypes.generated.d.ts +12 -0
  1052. package/dist/generated/relationTypes.generated.d.ts.map +1 -0
  1053. package/dist/generated/relationTypes.generated.js +11 -0
  1054. package/dist/generated/relationTypes.generated.js.map +1 -0
  1055. package/dist/generated/routeLatencyBudget.generated.d.ts +55 -0
  1056. package/dist/generated/routeLatencyBudget.generated.d.ts.map +1 -0
  1057. package/dist/generated/routeLatencyBudget.generated.js +353 -0
  1058. package/dist/generated/routeLatencyBudget.generated.js.map +1 -0
  1059. package/dist/generated/sourceSurfaces.generated.d.ts +12 -0
  1060. package/dist/generated/sourceSurfaces.generated.d.ts.map +1 -0
  1061. package/dist/generated/sourceSurfaces.generated.js +11 -0
  1062. package/dist/generated/sourceSurfaces.generated.js.map +1 -0
  1063. package/dist/generators/adapters.d.ts +77 -0
  1064. package/dist/generators/adapters.d.ts.map +1 -0
  1065. package/dist/generators/adapters.js +350 -0
  1066. package/dist/generators/adapters.js.map +1 -0
  1067. package/dist/generators/adapters.test.d.ts +2 -0
  1068. package/dist/generators/adapters.test.d.ts.map +1 -0
  1069. package/dist/generators/adapters.test.js +27 -0
  1070. package/dist/generators/adapters.test.js.map +1 -0
  1071. package/dist/generators/archetypes.d.ts +52 -0
  1072. package/dist/generators/archetypes.d.ts.map +1 -0
  1073. package/dist/generators/archetypes.js +190 -0
  1074. package/dist/generators/archetypes.js.map +1 -0
  1075. package/dist/generators/archetypes.test.d.ts +2 -0
  1076. package/dist/generators/archetypes.test.d.ts.map +1 -0
  1077. package/dist/generators/archetypes.test.js +272 -0
  1078. package/dist/generators/archetypes.test.js.map +1 -0
  1079. package/dist/generators/boundary-manifest.d.ts +29 -0
  1080. package/dist/generators/boundary-manifest.d.ts.map +1 -0
  1081. package/dist/generators/boundary-manifest.js +183 -0
  1082. package/dist/generators/boundary-manifest.js.map +1 -0
  1083. package/dist/generators/boundary-manifest.real-file.test.d.ts +2 -0
  1084. package/dist/generators/boundary-manifest.real-file.test.d.ts.map +1 -0
  1085. package/dist/generators/boundary-manifest.real-file.test.js +70 -0
  1086. package/dist/generators/boundary-manifest.real-file.test.js.map +1 -0
  1087. package/dist/generators/boundary-manifest.test.d.ts +2 -0
  1088. package/dist/generators/boundary-manifest.test.d.ts.map +1 -0
  1089. package/dist/generators/boundary-manifest.test.js +91 -0
  1090. package/dist/generators/boundary-manifest.test.js.map +1 -0
  1091. package/dist/generators/briefing-md.d.ts +8 -0
  1092. package/dist/generators/briefing-md.d.ts.map +1 -0
  1093. package/dist/generators/briefing-md.js +51 -0
  1094. package/dist/generators/briefing-md.js.map +1 -0
  1095. package/dist/generators/chain-classifier-kernel-client-drift.test.d.ts +2 -0
  1096. package/dist/generators/chain-classifier-kernel-client-drift.test.d.ts.map +1 -0
  1097. package/dist/generators/chain-classifier-kernel-client-drift.test.js +41 -0
  1098. package/dist/generators/chain-classifier-kernel-client-drift.test.js.map +1 -0
  1099. package/dist/generators/chain-classifier.d.ts +102 -0
  1100. package/dist/generators/chain-classifier.d.ts.map +1 -0
  1101. package/dist/generators/chain-classifier.js +52 -0
  1102. package/dist/generators/chain-classifier.js.map +1 -0
  1103. package/dist/generators/chain-rules.d.ts +42 -0
  1104. package/dist/generators/chain-rules.d.ts.map +1 -0
  1105. package/dist/generators/chain-rules.js +256 -0
  1106. package/dist/generators/chain-rules.js.map +1 -0
  1107. package/dist/generators/chain-rules.test.d.ts +2 -0
  1108. package/dist/generators/chain-rules.test.d.ts.map +1 -0
  1109. package/dist/generators/chain-rules.test.js +448 -0
  1110. package/dist/generators/chain-rules.test.js.map +1 -0
  1111. package/dist/generators/context-md.d.ts +8 -0
  1112. package/dist/generators/context-md.d.ts.map +1 -0
  1113. package/dist/generators/context-md.js +134 -0
  1114. package/dist/generators/context-md.js.map +1 -0
  1115. package/dist/generators/handshake-diff.d.ts +67 -0
  1116. package/dist/generators/handshake-diff.d.ts.map +1 -0
  1117. package/dist/generators/handshake-diff.js +183 -0
  1118. package/dist/generators/handshake-diff.js.map +1 -0
  1119. package/dist/generators/handshake-diff.test.d.ts +2 -0
  1120. package/dist/generators/handshake-diff.test.d.ts.map +1 -0
  1121. package/dist/generators/handshake-diff.test.js +264 -0
  1122. package/dist/generators/handshake-diff.test.js.map +1 -0
  1123. package/dist/generators/manifest.d.ts +115 -0
  1124. package/dist/generators/manifest.d.ts.map +1 -0
  1125. package/dist/generators/manifest.js +277 -0
  1126. package/dist/generators/manifest.js.map +1 -0
  1127. package/dist/generators/portable-knowledge.d.ts +165 -0
  1128. package/dist/generators/portable-knowledge.d.ts.map +1 -0
  1129. package/dist/generators/portable-knowledge.js +599 -0
  1130. package/dist/generators/portable-knowledge.js.map +1 -0
  1131. package/dist/generators/portable-knowledge.test.d.ts +2 -0
  1132. package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
  1133. package/dist/generators/portable-knowledge.test.js +970 -0
  1134. package/dist/generators/portable-knowledge.test.js.map +1 -0
  1135. package/dist/generators/region-projections.d.ts +18 -0
  1136. package/dist/generators/region-projections.d.ts.map +1 -0
  1137. package/dist/generators/region-projections.js +49 -0
  1138. package/dist/generators/region-projections.js.map +1 -0
  1139. package/dist/generators/region-projections.test.d.ts +2 -0
  1140. package/dist/generators/region-projections.test.d.ts.map +1 -0
  1141. package/dist/generators/region-projections.test.js +63 -0
  1142. package/dist/generators/region-projections.test.js.map +1 -0
  1143. package/dist/generators/region.d.ts +24 -0
  1144. package/dist/generators/region.d.ts.map +1 -0
  1145. package/dist/generators/region.js +87 -0
  1146. package/dist/generators/region.js.map +1 -0
  1147. package/dist/generators/region.test.d.ts +2 -0
  1148. package/dist/generators/region.test.d.ts.map +1 -0
  1149. package/dist/generators/region.test.js +126 -0
  1150. package/dist/generators/region.test.js.map +1 -0
  1151. package/dist/generators/surface-profiles.d.ts +48 -0
  1152. package/dist/generators/surface-profiles.d.ts.map +1 -0
  1153. package/dist/generators/surface-profiles.js +98 -0
  1154. package/dist/generators/surface-profiles.js.map +1 -0
  1155. package/dist/index.d.ts +0 -4
  1156. package/dist/index.d.ts.map +1 -1
  1157. package/dist/index.js +870 -39
  1158. package/dist/index.js.map +1 -1
  1159. package/dist/lib/__tests__/legalRelationTypes.test.d.ts +2 -0
  1160. package/dist/lib/__tests__/legalRelationTypes.test.d.ts.map +1 -0
  1161. package/dist/lib/__tests__/legalRelationTypes.test.js +98 -0
  1162. package/dist/lib/__tests__/legalRelationTypes.test.js.map +1 -0
  1163. package/dist/lib/__tests__/parseFields.test.d.ts +2 -0
  1164. package/dist/lib/__tests__/parseFields.test.d.ts.map +1 -0
  1165. package/dist/lib/__tests__/parseFields.test.js +40 -0
  1166. package/dist/lib/__tests__/parseFields.test.js.map +1 -0
  1167. package/dist/lib/activation.d.ts +28 -0
  1168. package/dist/lib/activation.d.ts.map +1 -0
  1169. package/dist/lib/activation.js +61 -0
  1170. package/dist/lib/activation.js.map +1 -0
  1171. package/dist/lib/activation.test.d.ts +6 -0
  1172. package/dist/lib/activation.test.d.ts.map +1 -0
  1173. package/dist/lib/activation.test.js +121 -0
  1174. package/dist/lib/activation.test.js.map +1 -0
  1175. package/dist/lib/adminConfig.d.ts +48 -0
  1176. package/dist/lib/adminConfig.d.ts.map +1 -0
  1177. package/dist/lib/adminConfig.js +130 -0
  1178. package/dist/lib/adminConfig.js.map +1 -0
  1179. package/dist/lib/canonicalRefs.d.ts +160 -0
  1180. package/dist/lib/canonicalRefs.d.ts.map +1 -0
  1181. package/dist/lib/canonicalRefs.js +169 -0
  1182. package/dist/lib/canonicalRefs.js.map +1 -0
  1183. package/dist/lib/captureGrounding.d.ts +54 -0
  1184. package/dist/lib/captureGrounding.d.ts.map +1 -0
  1185. package/dist/lib/captureGrounding.js +115 -0
  1186. package/dist/lib/captureGrounding.js.map +1 -0
  1187. package/dist/lib/captureGrounding.test.d.ts +2 -0
  1188. package/dist/lib/captureGrounding.test.d.ts.map +1 -0
  1189. package/dist/lib/captureGrounding.test.js +40 -0
  1190. package/dist/lib/captureGrounding.test.js.map +1 -0
  1191. package/dist/lib/client.d.ts +89 -1
  1192. package/dist/lib/client.d.ts.map +1 -1
  1193. package/dist/lib/client.js +419 -13
  1194. package/dist/lib/client.js.map +1 -1
  1195. package/dist/lib/collectionRegistry.d.ts +80 -0
  1196. package/dist/lib/collectionRegistry.d.ts.map +1 -0
  1197. package/dist/lib/collectionRegistry.js +170 -0
  1198. package/dist/lib/collectionRegistry.js.map +1 -0
  1199. package/dist/lib/commanderOptions.d.ts +8 -0
  1200. package/dist/lib/commanderOptions.d.ts.map +1 -0
  1201. package/dist/lib/commanderOptions.js +10 -0
  1202. package/dist/lib/commanderOptions.js.map +1 -0
  1203. package/dist/lib/compose-wrapup-view.d.ts +48 -0
  1204. package/dist/lib/compose-wrapup-view.d.ts.map +1 -0
  1205. package/dist/lib/compose-wrapup-view.js +37 -0
  1206. package/dist/lib/compose-wrapup-view.js.map +1 -0
  1207. package/dist/lib/config.d.ts +132 -4
  1208. package/dist/lib/config.d.ts.map +1 -1
  1209. package/dist/lib/config.js +418 -42
  1210. package/dist/lib/config.js.map +1 -1
  1211. package/dist/lib/configResult.d.ts +103 -0
  1212. package/dist/lib/configResult.d.ts.map +1 -0
  1213. package/dist/lib/configResult.js +180 -0
  1214. package/dist/lib/configResult.js.map +1 -0
  1215. package/dist/lib/connectKeyLabel.d.ts +9 -0
  1216. package/dist/lib/connectKeyLabel.d.ts.map +1 -0
  1217. package/dist/lib/connectKeyLabel.js +12 -0
  1218. package/dist/lib/connectKeyLabel.js.map +1 -0
  1219. package/dist/lib/constants.d.ts +46 -0
  1220. package/dist/lib/constants.d.ts.map +1 -0
  1221. package/dist/lib/constants.js +83 -0
  1222. package/dist/lib/constants.js.map +1 -0
  1223. package/dist/lib/conversation-engine.d.ts +45 -0
  1224. package/dist/lib/conversation-engine.d.ts.map +1 -0
  1225. package/dist/lib/conversation-engine.js +112 -0
  1226. package/dist/lib/conversation-engine.js.map +1 -0
  1227. package/dist/lib/conversation-phases.d.ts +59 -0
  1228. package/dist/lib/conversation-phases.d.ts.map +1 -0
  1229. package/dist/lib/conversation-phases.js +11 -0
  1230. package/dist/lib/conversation-phases.js.map +1 -0
  1231. package/dist/lib/conversation-signals.d.ts +30 -0
  1232. package/dist/lib/conversation-signals.d.ts.map +1 -0
  1233. package/dist/lib/conversation-signals.js +64 -0
  1234. package/dist/lib/conversation-signals.js.map +1 -0
  1235. package/dist/lib/conversation.d.ts +36 -0
  1236. package/dist/lib/conversation.d.ts.map +1 -0
  1237. package/dist/lib/conversation.js +66 -0
  1238. package/dist/lib/conversation.js.map +1 -0
  1239. package/dist/lib/createEntryResult.d.ts +34 -0
  1240. package/dist/lib/createEntryResult.d.ts.map +1 -0
  1241. package/dist/lib/createEntryResult.js +12 -0
  1242. package/dist/lib/createEntryResult.js.map +1 -0
  1243. package/dist/lib/deployment.d.ts +23 -0
  1244. package/dist/lib/deployment.d.ts.map +1 -0
  1245. package/dist/lib/deployment.js +78 -0
  1246. package/dist/lib/deployment.js.map +1 -0
  1247. package/dist/lib/deployment.test.d.ts +5 -0
  1248. package/dist/lib/deployment.test.d.ts.map +1 -0
  1249. package/dist/lib/deployment.test.js +73 -0
  1250. package/dist/lib/deployment.test.js.map +1 -0
  1251. package/dist/lib/envKeySnapshot.d.ts +10 -0
  1252. package/dist/lib/envKeySnapshot.d.ts.map +1 -0
  1253. package/dist/lib/envKeySnapshot.js +30 -0
  1254. package/dist/lib/envKeySnapshot.js.map +1 -0
  1255. package/dist/lib/errors.d.ts +126 -0
  1256. package/dist/lib/errors.d.ts.map +1 -0
  1257. package/dist/lib/errors.js +135 -0
  1258. package/dist/lib/errors.js.map +1 -0
  1259. package/dist/lib/experiment.d.ts +18 -0
  1260. package/dist/lib/experiment.d.ts.map +1 -0
  1261. package/dist/lib/experiment.js +28 -0
  1262. package/dist/lib/experiment.js.map +1 -0
  1263. package/dist/lib/format.d.ts +10 -0
  1264. package/dist/lib/format.d.ts.map +1 -0
  1265. package/dist/lib/format.js +27 -0
  1266. package/dist/lib/format.js.map +1 -0
  1267. package/dist/lib/frontmatter.d.ts +55 -0
  1268. package/dist/lib/frontmatter.d.ts.map +1 -0
  1269. package/dist/lib/frontmatter.js +92 -0
  1270. package/dist/lib/frontmatter.js.map +1 -0
  1271. package/dist/lib/frontmatter.test.d.ts +15 -0
  1272. package/dist/lib/frontmatter.test.d.ts.map +1 -0
  1273. package/dist/lib/frontmatter.test.js +98 -0
  1274. package/dist/lib/frontmatter.test.js.map +1 -0
  1275. package/dist/lib/gatewayTimeout.d.ts +88 -0
  1276. package/dist/lib/gatewayTimeout.d.ts.map +1 -0
  1277. package/dist/lib/gatewayTimeout.js +118 -0
  1278. package/dist/lib/gatewayTimeout.js.map +1 -0
  1279. package/dist/lib/gitEnvLeakKeysParity.test.d.ts +2 -0
  1280. package/dist/lib/gitEnvLeakKeysParity.test.d.ts.map +1 -0
  1281. package/dist/lib/gitEnvLeakKeysParity.test.js +73 -0
  1282. package/dist/lib/gitEnvLeakKeysParity.test.js.map +1 -0
  1283. package/dist/lib/glossary.d.ts +19 -0
  1284. package/dist/lib/glossary.d.ts.map +1 -0
  1285. package/dist/lib/glossary.js +53 -0
  1286. package/dist/lib/glossary.js.map +1 -0
  1287. package/dist/lib/hook-intents.d.ts +51 -0
  1288. package/dist/lib/hook-intents.d.ts.map +1 -0
  1289. package/dist/lib/hook-intents.js +85 -0
  1290. package/dist/lib/hook-intents.js.map +1 -0
  1291. package/dist/lib/inferSourceDate.d.ts +12 -0
  1292. package/dist/lib/inferSourceDate.d.ts.map +1 -0
  1293. package/dist/lib/inferSourceDate.js +44 -0
  1294. package/dist/lib/inferSourceDate.js.map +1 -0
  1295. package/dist/lib/kernelEnvelope.d.ts +31 -0
  1296. package/dist/lib/kernelEnvelope.d.ts.map +1 -0
  1297. package/dist/lib/kernelEnvelope.js +52 -0
  1298. package/dist/lib/kernelEnvelope.js.map +1 -0
  1299. package/dist/lib/legalRelationTypes.d.ts +25 -0
  1300. package/dist/lib/legalRelationTypes.d.ts.map +1 -0
  1301. package/dist/lib/legalRelationTypes.js +94 -0
  1302. package/dist/lib/legalRelationTypes.js.map +1 -0
  1303. package/dist/lib/localBinding.d.ts +86 -0
  1304. package/dist/lib/localBinding.d.ts.map +1 -0
  1305. package/dist/lib/localBinding.js +173 -0
  1306. package/dist/lib/localBinding.js.map +1 -0
  1307. package/dist/lib/method-registry.d.ts +37 -0
  1308. package/dist/lib/method-registry.d.ts.map +1 -0
  1309. package/dist/lib/method-registry.js +41 -0
  1310. package/dist/lib/method-registry.js.map +1 -0
  1311. package/dist/lib/normalizeMaterializedFilename.d.ts +28 -0
  1312. package/dist/lib/normalizeMaterializedFilename.d.ts.map +1 -0
  1313. package/dist/lib/normalizeMaterializedFilename.js +56 -0
  1314. package/dist/lib/normalizeMaterializedFilename.js.map +1 -0
  1315. package/dist/lib/normalizeMaterializedFilename.test.d.ts +16 -0
  1316. package/dist/lib/normalizeMaterializedFilename.test.d.ts.map +1 -0
  1317. package/dist/lib/normalizeMaterializedFilename.test.js +90 -0
  1318. package/dist/lib/normalizeMaterializedFilename.test.js.map +1 -0
  1319. package/dist/lib/notice-marker.d.ts +3 -0
  1320. package/dist/lib/notice-marker.d.ts.map +1 -0
  1321. package/dist/lib/notice-marker.js +223 -0
  1322. package/dist/lib/notice-marker.js.map +1 -0
  1323. package/dist/lib/onboarding-path-b.d.ts +10 -0
  1324. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  1325. package/dist/lib/onboarding-path-b.js +243 -0
  1326. package/dist/lib/onboarding-path-b.js.map +1 -0
  1327. package/dist/lib/onboarding-shared.d.ts +81 -0
  1328. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  1329. package/dist/lib/onboarding-shared.js +175 -0
  1330. package/dist/lib/onboarding-shared.js.map +1 -0
  1331. package/dist/lib/onboarding-topics.d.ts +27 -0
  1332. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  1333. package/dist/lib/onboarding-topics.js +57 -0
  1334. package/dist/lib/onboarding-topics.js.map +1 -0
  1335. package/dist/lib/onboarding.d.ts +17 -0
  1336. package/dist/lib/onboarding.d.ts.map +1 -0
  1337. package/dist/lib/onboarding.js +358 -0
  1338. package/dist/lib/onboarding.js.map +1 -0
  1339. package/dist/lib/parseFields.d.ts +19 -0
  1340. package/dist/lib/parseFields.d.ts.map +1 -0
  1341. package/dist/lib/parseFields.js +49 -0
  1342. package/dist/lib/parseFields.js.map +1 -0
  1343. package/dist/lib/previewBanner.d.ts +9 -0
  1344. package/dist/lib/previewBanner.d.ts.map +1 -0
  1345. package/dist/lib/previewBanner.js +37 -0
  1346. package/dist/lib/previewBanner.js.map +1 -0
  1347. package/dist/lib/productbrain-files.d.ts +94 -0
  1348. package/dist/lib/productbrain-files.d.ts.map +1 -0
  1349. package/dist/lib/productbrain-files.js +214 -0
  1350. package/dist/lib/productbrain-files.js.map +1 -0
  1351. package/dist/lib/productbrain-files.test.d.ts +2 -0
  1352. package/dist/lib/productbrain-files.test.d.ts.map +1 -0
  1353. package/dist/lib/productbrain-files.test.js +293 -0
  1354. package/dist/lib/productbrain-files.test.js.map +1 -0
  1355. package/dist/lib/profiles.d.ts +87 -0
  1356. package/dist/lib/profiles.d.ts.map +1 -0
  1357. package/dist/lib/profiles.js +239 -0
  1358. package/dist/lib/profiles.js.map +1 -0
  1359. package/dist/lib/projectConfig.d.ts +81 -0
  1360. package/dist/lib/projectConfig.d.ts.map +1 -0
  1361. package/dist/lib/projectConfig.js +157 -0
  1362. package/dist/lib/projectConfig.js.map +1 -0
  1363. package/dist/lib/prompts.d.ts +65 -0
  1364. package/dist/lib/prompts.d.ts.map +1 -0
  1365. package/dist/lib/prompts.js +132 -0
  1366. package/dist/lib/prompts.js.map +1 -0
  1367. package/dist/lib/rate-limit.d.ts +38 -0
  1368. package/dist/lib/rate-limit.d.ts.map +1 -0
  1369. package/dist/lib/rate-limit.js +83 -0
  1370. package/dist/lib/rate-limit.js.map +1 -0
  1371. package/dist/lib/readinessNotices.d.ts +15 -0
  1372. package/dist/lib/readinessNotices.d.ts.map +1 -0
  1373. package/dist/lib/readinessNotices.js +15 -0
  1374. package/dist/lib/readinessNotices.js.map +1 -0
  1375. package/dist/lib/repo-detect.d.ts +33 -0
  1376. package/dist/lib/repo-detect.d.ts.map +1 -0
  1377. package/dist/lib/repo-detect.js +87 -0
  1378. package/dist/lib/repo-detect.js.map +1 -0
  1379. package/dist/lib/reportedProfile.d.ts +18 -0
  1380. package/dist/lib/reportedProfile.d.ts.map +1 -0
  1381. package/dist/lib/reportedProfile.js +144 -0
  1382. package/dist/lib/reportedProfile.js.map +1 -0
  1383. package/dist/lib/runner.d.ts +41 -0
  1384. package/dist/lib/runner.d.ts.map +1 -0
  1385. package/dist/lib/runner.js +105 -0
  1386. package/dist/lib/runner.js.map +1 -0
  1387. package/dist/lib/session.d.ts +126 -0
  1388. package/dist/lib/session.d.ts.map +1 -0
  1389. package/dist/lib/session.js +353 -0
  1390. package/dist/lib/session.js.map +1 -0
  1391. package/dist/lib/sessionBinding.d.ts +61 -0
  1392. package/dist/lib/sessionBinding.d.ts.map +1 -0
  1393. package/dist/lib/sessionBinding.js +125 -0
  1394. package/dist/lib/sessionBinding.js.map +1 -0
  1395. package/dist/lib/sessionNotices.d.ts +57 -0
  1396. package/dist/lib/sessionNotices.d.ts.map +1 -0
  1397. package/dist/lib/sessionNotices.js +128 -0
  1398. package/dist/lib/sessionNotices.js.map +1 -0
  1399. package/dist/lib/sessionNotices.test.d.ts +2 -0
  1400. package/dist/lib/sessionNotices.test.d.ts.map +1 -0
  1401. package/dist/lib/sessionNotices.test.js +48 -0
  1402. package/dist/lib/sessionNotices.test.js.map +1 -0
  1403. package/dist/lib/spineVerdictRead.d.ts +65 -0
  1404. package/dist/lib/spineVerdictRead.d.ts.map +1 -0
  1405. package/dist/lib/spineVerdictRead.js +64 -0
  1406. package/dist/lib/spineVerdictRead.js.map +1 -0
  1407. package/dist/lib/spinner.d.ts +27 -0
  1408. package/dist/lib/spinner.d.ts.map +1 -0
  1409. package/dist/lib/spinner.js +76 -0
  1410. package/dist/lib/spinner.js.map +1 -0
  1411. package/dist/lib/spinner.test.d.ts +2 -0
  1412. package/dist/lib/spinner.test.d.ts.map +1 -0
  1413. package/dist/lib/spinner.test.js +39 -0
  1414. package/dist/lib/spinner.test.js.map +1 -0
  1415. package/dist/lib/startup-resolution-signals.d.ts +34 -0
  1416. package/dist/lib/startup-resolution-signals.d.ts.map +1 -0
  1417. package/dist/lib/startup-resolution-signals.js +116 -0
  1418. package/dist/lib/startup-resolution-signals.js.map +1 -0
  1419. package/dist/lib/startup-resolution-signals.test.d.ts +2 -0
  1420. package/dist/lib/startup-resolution-signals.test.d.ts.map +1 -0
  1421. package/dist/lib/startup-resolution-signals.test.js +113 -0
  1422. package/dist/lib/startup-resolution-signals.test.js.map +1 -0
  1423. package/dist/lib/startup-signals.d.ts +12 -0
  1424. package/dist/lib/startup-signals.d.ts.map +1 -0
  1425. package/dist/lib/startup-signals.js +172 -0
  1426. package/dist/lib/startup-signals.js.map +1 -0
  1427. package/dist/lib/startup-signals.test.d.ts +2 -0
  1428. package/dist/lib/startup-signals.test.d.ts.map +1 -0
  1429. package/dist/lib/startup-signals.test.js +165 -0
  1430. package/dist/lib/startup-signals.test.js.map +1 -0
  1431. package/dist/lib/state.d.ts +58 -0
  1432. package/dist/lib/state.d.ts.map +1 -0
  1433. package/dist/lib/state.js +95 -0
  1434. package/dist/lib/state.js.map +1 -0
  1435. package/dist/lib/strip.d.ts +20 -0
  1436. package/dist/lib/strip.d.ts.map +1 -0
  1437. package/dist/lib/strip.js +63 -0
  1438. package/dist/lib/strip.js.map +1 -0
  1439. package/dist/lib/style.d.ts +102 -0
  1440. package/dist/lib/style.d.ts.map +1 -0
  1441. package/dist/lib/style.js +176 -0
  1442. package/dist/lib/style.js.map +1 -0
  1443. package/dist/lib/style.test.d.ts +7 -0
  1444. package/dist/lib/style.test.d.ts.map +1 -0
  1445. package/dist/lib/style.test.js +263 -0
  1446. package/dist/lib/style.test.js.map +1 -0
  1447. package/dist/lib/telemetry.d.ts +15 -0
  1448. package/dist/lib/telemetry.d.ts.map +1 -0
  1449. package/dist/lib/telemetry.js +47 -0
  1450. package/dist/lib/telemetry.js.map +1 -0
  1451. package/dist/lib/tokenConstants.d.ts +19 -0
  1452. package/dist/lib/tokenConstants.d.ts.map +1 -0
  1453. package/dist/lib/tokenConstants.js +19 -0
  1454. package/dist/lib/tokenConstants.js.map +1 -0
  1455. package/dist/lib/update-check.d.ts +56 -0
  1456. package/dist/lib/update-check.d.ts.map +1 -0
  1457. package/dist/lib/update-check.js +296 -0
  1458. package/dist/lib/update-check.js.map +1 -0
  1459. package/dist/lib/upgrade-runner.d.ts +22 -0
  1460. package/dist/lib/upgrade-runner.d.ts.map +1 -0
  1461. package/dist/lib/upgrade-runner.js +110 -0
  1462. package/dist/lib/upgrade-runner.js.map +1 -0
  1463. package/dist/lib/wizard-surfaces.d.ts +47 -0
  1464. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  1465. package/dist/lib/wizard-surfaces.js +176 -0
  1466. package/dist/lib/wizard-surfaces.js.map +1 -0
  1467. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  1468. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  1469. package/dist/lib/wizard-surfaces.test.js +127 -0
  1470. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  1471. package/dist/lib/wizard-trust.d.ts +31 -0
  1472. package/dist/lib/wizard-trust.d.ts.map +1 -0
  1473. package/dist/lib/wizard-trust.js +66 -0
  1474. package/dist/lib/wizard-trust.js.map +1 -0
  1475. package/dist/lib/wizard-trust.test.d.ts +2 -0
  1476. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  1477. package/dist/lib/wizard-trust.test.js +32 -0
  1478. package/dist/lib/wizard-trust.test.js.map +1 -0
  1479. package/dist/lib/workspace-probe.d.ts +19 -0
  1480. package/dist/lib/workspace-probe.d.ts.map +1 -0
  1481. package/dist/lib/workspace-probe.js +27 -0
  1482. package/dist/lib/workspace-probe.js.map +1 -0
  1483. package/dist/lib/workspaceNotice.d.ts +202 -0
  1484. package/dist/lib/workspaceNotice.d.ts.map +1 -0
  1485. package/dist/lib/workspaceNotice.js +345 -0
  1486. package/dist/lib/workspaceNotice.js.map +1 -0
  1487. package/dist/lib/workspaceVocabCache.d.ts +60 -0
  1488. package/dist/lib/workspaceVocabCache.d.ts.map +1 -0
  1489. package/dist/lib/workspaceVocabCache.js +98 -0
  1490. package/dist/lib/workspaceVocabCache.js.map +1 -0
  1491. package/dist/registerEntryCommands.d.ts +17 -0
  1492. package/dist/registerEntryCommands.d.ts.map +1 -0
  1493. package/dist/registerEntryCommands.js +92 -0
  1494. package/dist/registerEntryCommands.js.map +1 -0
  1495. package/dist/registerOutcomeCommands.d.ts +24 -0
  1496. package/dist/registerOutcomeCommands.d.ts.map +1 -0
  1497. package/dist/registerOutcomeCommands.js +27 -0
  1498. package/dist/registerOutcomeCommands.js.map +1 -0
  1499. package/dist/registerProposalCommands.d.ts +13 -0
  1500. package/dist/registerProposalCommands.d.ts.map +1 -0
  1501. package/dist/registerProposalCommands.js +76 -0
  1502. package/dist/registerProposalCommands.js.map +1 -0
  1503. package/dist/registerRoleCommands.d.ts +10 -0
  1504. package/dist/registerRoleCommands.d.ts.map +1 -0
  1505. package/dist/registerRoleCommands.js +14 -0
  1506. package/dist/registerRoleCommands.js.map +1 -0
  1507. package/dist/scoreboard/diagnose.d.ts +226 -0
  1508. package/dist/scoreboard/diagnose.d.ts.map +1 -0
  1509. package/dist/scoreboard/diagnose.js +344 -0
  1510. package/dist/scoreboard/diagnose.js.map +1 -0
  1511. package/dist/scoreboard/diagnose.test.d.ts +15 -0
  1512. package/dist/scoreboard/diagnose.test.d.ts.map +1 -0
  1513. package/dist/scoreboard/diagnose.test.js +355 -0
  1514. package/dist/scoreboard/diagnose.test.js.map +1 -0
  1515. package/dist/scoreboard/floors.d.ts +47 -0
  1516. package/dist/scoreboard/floors.d.ts.map +1 -0
  1517. package/dist/scoreboard/floors.js +33 -0
  1518. package/dist/scoreboard/floors.js.map +1 -0
  1519. package/dist/scoreboard/localDrift.d.ts +23 -0
  1520. package/dist/scoreboard/localDrift.d.ts.map +1 -0
  1521. package/dist/scoreboard/localDrift.js +111 -0
  1522. package/dist/scoreboard/localDrift.js.map +1 -0
  1523. package/dist/scoreboard/localDrift.test.d.ts +9 -0
  1524. package/dist/scoreboard/localDrift.test.d.ts.map +1 -0
  1525. package/dist/scoreboard/localDrift.test.js +82 -0
  1526. package/dist/scoreboard/localDrift.test.js.map +1 -0
  1527. package/dist/setup/__tests__/coach-traces.test.d.ts +2 -0
  1528. package/dist/setup/__tests__/coach-traces.test.d.ts.map +1 -0
  1529. package/dist/setup/__tests__/coach-traces.test.js +189 -0
  1530. package/dist/setup/__tests__/coach-traces.test.js.map +1 -0
  1531. package/dist/setup/__tests__/setup-commands.test.d.ts +2 -0
  1532. package/dist/setup/__tests__/setup-commands.test.d.ts.map +1 -0
  1533. package/dist/setup/__tests__/setup-commands.test.js +177 -0
  1534. package/dist/setup/__tests__/setup-commands.test.js.map +1 -0
  1535. package/dist/setup/__tests__/state-machine.test.d.ts +2 -0
  1536. package/dist/setup/__tests__/state-machine.test.d.ts.map +1 -0
  1537. package/dist/setup/__tests__/state-machine.test.js +341 -0
  1538. package/dist/setup/__tests__/state-machine.test.js.map +1 -0
  1539. package/dist/setup/detect-surfaces.d.ts +21 -0
  1540. package/dist/setup/detect-surfaces.d.ts.map +1 -0
  1541. package/dist/setup/detect-surfaces.js +39 -0
  1542. package/dist/setup/detect-surfaces.js.map +1 -0
  1543. package/dist/setup/manifest-writer.d.ts +17 -0
  1544. package/dist/setup/manifest-writer.d.ts.map +1 -0
  1545. package/dist/setup/manifest-writer.js +153 -0
  1546. package/dist/setup/manifest-writer.js.map +1 -0
  1547. package/dist/setup/perimeter.d.ts +72 -0
  1548. package/dist/setup/perimeter.d.ts.map +1 -0
  1549. package/dist/setup/perimeter.js +128 -0
  1550. package/dist/setup/perimeter.js.map +1 -0
  1551. package/dist/setup/state-machine.d.ts +67 -0
  1552. package/dist/setup/state-machine.d.ts.map +1 -0
  1553. package/dist/setup/state-machine.js +124 -0
  1554. package/dist/setup/state-machine.js.map +1 -0
  1555. package/dist/surfaces/__tests__/adapter.test.d.ts +2 -0
  1556. package/dist/surfaces/__tests__/adapter.test.d.ts.map +1 -0
  1557. package/dist/surfaces/__tests__/adapter.test.js +90 -0
  1558. package/dist/surfaces/__tests__/adapter.test.js.map +1 -0
  1559. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts +2 -0
  1560. package/dist/surfaces/__tests__/pb-setup-passthrough.test.d.ts.map +1 -0
  1561. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js +132 -0
  1562. package/dist/surfaces/__tests__/pb-setup-passthrough.test.js.map +1 -0
  1563. package/dist/surfaces/__tests__/telemetry.test.d.ts +2 -0
  1564. package/dist/surfaces/__tests__/telemetry.test.d.ts.map +1 -0
  1565. package/dist/surfaces/__tests__/telemetry.test.js +55 -0
  1566. package/dist/surfaces/__tests__/telemetry.test.js.map +1 -0
  1567. package/dist/surfaces/adapter.d.ts +70 -0
  1568. package/dist/surfaces/adapter.d.ts.map +1 -0
  1569. package/dist/surfaces/adapter.js +2 -0
  1570. package/dist/surfaces/adapter.js.map +1 -0
  1571. package/dist/surfaces/adapters/claude.d.ts +3 -0
  1572. package/dist/surfaces/adapters/claude.d.ts.map +1 -0
  1573. package/dist/surfaces/adapters/claude.js +67 -0
  1574. package/dist/surfaces/adapters/claude.js.map +1 -0
  1575. package/dist/surfaces/adapters/codex.d.ts +3 -0
  1576. package/dist/surfaces/adapters/codex.d.ts.map +1 -0
  1577. package/dist/surfaces/adapters/codex.js +61 -0
  1578. package/dist/surfaces/adapters/codex.js.map +1 -0
  1579. package/dist/surfaces/adapters/copilot.d.ts +3 -0
  1580. package/dist/surfaces/adapters/copilot.d.ts.map +1 -0
  1581. package/dist/surfaces/adapters/copilot.js +59 -0
  1582. package/dist/surfaces/adapters/copilot.js.map +1 -0
  1583. package/dist/surfaces/adapters/cursor.d.ts +3 -0
  1584. package/dist/surfaces/adapters/cursor.d.ts.map +1 -0
  1585. package/dist/surfaces/adapters/cursor.js +78 -0
  1586. package/dist/surfaces/adapters/cursor.js.map +1 -0
  1587. package/dist/surfaces/registry.d.ts +76 -0
  1588. package/dist/surfaces/registry.d.ts.map +1 -0
  1589. package/dist/surfaces/registry.js +117 -0
  1590. package/dist/surfaces/registry.js.map +1 -0
  1591. package/dist/surfaces/telemetry.d.ts +17 -0
  1592. package/dist/surfaces/telemetry.d.ts.map +1 -0
  1593. package/dist/surfaces/telemetry.js +31 -0
  1594. package/dist/surfaces/telemetry.js.map +1 -0
  1595. package/package.json +20 -7
  1596. package/templates/archetypes/boundary.md +23 -0
  1597. package/templates/archetypes/constraint.md +23 -0
  1598. package/templates/archetypes/convention.md +23 -0
  1599. package/templates/archetypes/policy.md +23 -0
  1600. package/templates/archetypes/quality-gate.md +23 -0
  1601. package/templates/archetypes/workflow.md +23 -0
  1602. package/templates/general/code-integrity.md +11 -0
  1603. package/templates/general/getting-started.md +12 -0
  1604. package/templates/method-registry.json +16 -0
  1605. package/templates/node-ts/code-integrity.md +13 -0
  1606. package/templates/node-ts/testing.md +12 -0
  1607. package/templates/python/code-integrity.md +13 -0
  1608. package/templates/python/testing.md +12 -0
@@ -0,0 +1,1102 @@
1
+ /**
2
+ * pb handshake --init — unit tests.
3
+ * DEC-271: two-file split (team vs personal). DEC-272: permission whitelist.
4
+ * TEN-712: hooks must fail silently (|| true suffix).
5
+ *
6
+ * WP-379 S3b: probeStarterSetupSeeded + pollUntilSeedsReady tests.
7
+ */
8
+ import { beforeEach, afterEach, describe, expect, it, vi } from 'vitest';
9
+ import { join } from 'path';
10
+ // Import the mocked fs functions so we can use vi.mocked() to change their implementations per-test.
11
+ // vi.mock('fs', ...) below hoists this mock, so these imports resolve to the mocked versions.
12
+ import { readdirSync as readdirSyncMock } from 'fs';
13
+ // vi.mock calls are hoisted — use vi.hoisted() for constants referenced inside factories.
14
+ const { vfs, vfsMtimes, vfsDirs, vfsSymlinks, vfsRealpaths, vfsInodes, MOCK_CWD, MOCK_HOME } = vi.hoisted(() => ({
15
+ vfs: {},
16
+ // WP-379 S5b: mtime map used by statSync mock for case-collision ordering tests.
17
+ vfsMtimes: {},
18
+ // PR #912 follow-up: lstatSync needs dir-vs-file-vs-symlink distinction, which the flat
19
+ // `vfs` content map doesn't carry (a directory marker is stored as `vfs[dir] = ''`, same
20
+ // shape as an empty file) — these two sets disambiguate for the Cursor nested-skills tests.
21
+ vfsDirs: new Set(),
22
+ vfsSymlinks: new Set(),
23
+ // PR #912 follow-up (Cursor security review): explicit path→realpath overrides so a test can
24
+ // simulate an INTERMEDIATE symlinked component (e.g. .cursor/skills itself) resolving outside
25
+ // the repo, distinct from vfsSymlinks which only marks the final path component as a link.
26
+ vfsRealpaths: new Map(),
27
+ // Round 13: explicit path→ino override so a test can make two case-variant paths resolve to
28
+ // the SAME filesystem entry (case-insensitive FS simulation). Unset paths fall back to a
29
+ // deterministic per-path hash in the statSync mock below.
30
+ vfsInodes: new Map(),
31
+ MOCK_CWD: '/tmp/pb-test-cwd',
32
+ MOCK_HOME: '/tmp/pb-test-home',
33
+ }));
34
+ vi.mock('fs', () => ({
35
+ mkdirSync: vi.fn(),
36
+ writeFileSync: vi.fn((path, content) => {
37
+ vfs[path] = content;
38
+ }),
39
+ appendFileSync: vi.fn((path, content) => {
40
+ vfs[path] = (vfs[path] ?? '') + content;
41
+ }),
42
+ existsSync: vi.fn((path) => path in vfs),
43
+ readFileSync: vi.fn((path, _enc) => {
44
+ if (path in vfs)
45
+ return vfs[path];
46
+ throw Object.assign(new Error(`ENOENT: no such file '${path}'`), { code: 'ENOENT' });
47
+ }),
48
+ readdirSync: vi.fn((_dir) => []),
49
+ copyFileSync: vi.fn(),
50
+ // WP-379 S5b: unlinkSync + statSync for orphan unlink + case-collision resolution.
51
+ unlinkSync: vi.fn((path) => {
52
+ delete vfs[path];
53
+ }),
54
+ statSync: vi.fn((path) => {
55
+ if (path in vfs) {
56
+ // Return a fake stat with an incrementing mtime based on path hash (deterministic).
57
+ // Tests that need specific mtime ordering should set vfs[path] before calling.
58
+ const mtimeMs = vfsMtimes[path] ?? 1000;
59
+ // Round 13: dev/ino for case-insensitive-alias detection. dev is constant (single fake
60
+ // filesystem); ino defaults to a deterministic per-path hash unless a test overrides it
61
+ // via vfsInodes to make two case-variant paths resolve to the same entry.
62
+ let ino = vfsInodes.get(path);
63
+ if (ino === undefined) {
64
+ let h = 0;
65
+ for (let i = 0; i < path.length; i++)
66
+ h = (h * 31 + path.charCodeAt(i)) | 0;
67
+ ino = h;
68
+ }
69
+ return { mtimeMs, dev: 1, ino };
70
+ }
71
+ throw Object.assign(new Error(`ENOENT: stat '${path}'`), { code: 'ENOENT' });
72
+ }),
73
+ // PR #912 follow-up: lstatSync backs the Cursor nested-skills symlink refusal — never
74
+ // follows a link, so a path marked in vfsSymlinks reports neither isDirectory() nor isFile().
75
+ lstatSync: vi.fn((path) => {
76
+ const isSymlink = vfsSymlinks.has(path);
77
+ const isDir = vfsDirs.has(path);
78
+ const isFile = !isSymlink && !isDir && path in vfs;
79
+ if (!isSymlink && !isDir && !isFile) {
80
+ throw Object.assign(new Error(`ENOENT: lstat '${path}'`), { code: 'ENOENT' });
81
+ }
82
+ return {
83
+ isDirectory: () => isDir,
84
+ isFile: () => isFile,
85
+ isSymbolicLink: () => isSymlink,
86
+ };
87
+ }),
88
+ // PR #912 follow-up: realpathSync backs the Cursor-skills-root containment check — an explicit
89
+ // vfsRealpaths override simulates an intermediate symlinked component; otherwise identity.
90
+ // Identity by default (a real fs resolves an ordinary path, including MOCK_CWD itself, to
91
+ // itself) — vfsRealpaths overrides model a specific symlinked path resolving elsewhere.
92
+ realpathSync: vi.fn((path) => vfsRealpaths.get(path) ?? path),
93
+ }));
94
+ vi.mock('os', () => ({
95
+ homedir: vi.fn(() => MOCK_HOME),
96
+ }));
97
+ // prompts mock: select returns 'work' (second option)
98
+ vi.mock('../lib/prompts.js', () => ({
99
+ select: () => Promise.resolve('work'),
100
+ confirm: () => Promise.resolve(false),
101
+ ask: () => Promise.resolve(''),
102
+ password: () => Promise.resolve(''),
103
+ isInteractive: () => true,
104
+ }));
105
+ import { runHandshakeInit, normalizeHandshakeContentForComparison, findLeftoverProjections, classifyDriftBucket, deriveHandshakeStartupSignals, dereferencePrRefToPaths } from '../commands/handshake.js';
106
+ import { findLeftoverCursorSkills, LEFTOVER_FILES_MAX } from '../commands/handshakeCursorSkillCleanup.js';
107
+ import { MARKER } from '../generators/adapters.js';
108
+ /** PR #911 review (Codex P2): findLeftoverProjections scopes reporting to allowedTargets — tests that want every surface scanned pass this. */
109
+ const ALL_SURFACES = new Set(['cursor', 'claude', 'codex', 'copilot']);
110
+ import { createHash } from 'crypto';
111
+ const TEAM_PATH = join(MOCK_CWD, '.claude', 'settings.json');
112
+ const PERSONAL_PATH = join(MOCK_HOME, '.claude', 'settings.json');
113
+ describe('runHandshakeInit', () => {
114
+ let cwdSpy;
115
+ beforeEach(() => {
116
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
117
+ vi.clearAllMocks();
118
+ cwdSpy = vi.spyOn(process, 'cwd').mockReturnValue(MOCK_CWD);
119
+ vi.spyOn(console, 'log').mockImplementation(() => { });
120
+ vi.spyOn(console, 'error').mockImplementation(() => { });
121
+ });
122
+ afterEach(() => {
123
+ cwdSpy.mockRestore();
124
+ });
125
+ describe('basic writes (DEC-271)', () => {
126
+ it('writes hooks to team config (.claude/settings.json relative to cwd)', async () => {
127
+ await runHandshakeInit({ level: 'work', dryRun: false });
128
+ expect(vfs[TEAM_PATH]).toBeDefined();
129
+ const team = JSON.parse(vfs[TEAM_PATH]);
130
+ expect(team.hooks.SessionStart).toHaveLength(1);
131
+ expect(team.hooks.Stop).toHaveLength(1);
132
+ expect(team.hooks.PreCompact).toHaveLength(1);
133
+ expect(team.permissions.allow).toContain('Bash(pb:*)');
134
+ });
135
+ it('writes trust level to personal config (~/.claude/settings.json)', async () => {
136
+ await runHandshakeInit({ level: 'work', dryRun: false });
137
+ expect(vfs[PERSONAL_PATH]).toBeDefined();
138
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
139
+ expect(personal.permissions.defaultMode).toBe('auto');
140
+ expect(personal.permissions.allow).toContain('Bash(pb:*)');
141
+ expect(personal.permissions.allow).toContain('Bash(git:*)');
142
+ expect(personal.permissions.allow).toContain('Bash(npm run:*)');
143
+ });
144
+ it('guide level sets auto mode with minimal permissions', async () => {
145
+ await runHandshakeInit({ level: 'guide', dryRun: false });
146
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
147
+ expect(personal.permissions.defaultMode).toBe('auto');
148
+ expect(personal.permissions.allow).toContain('Bash(pb:*)');
149
+ expect(personal.permissions.allow).toContain('Bash(git:*)');
150
+ });
151
+ it('full-trust level sets bypassPermissions mode', async () => {
152
+ await runHandshakeInit({ level: 'full-trust', dryRun: false });
153
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
154
+ expect(personal.permissions.defaultMode).toBe('bypassPermissions');
155
+ });
156
+ });
157
+ describe('idempotency', () => {
158
+ it('running twice produces no duplicate hooks in team config', async () => {
159
+ await runHandshakeInit({ level: 'work', dryRun: false });
160
+ await runHandshakeInit({ level: 'work', dryRun: false });
161
+ const team = JSON.parse(vfs[TEAM_PATH]);
162
+ expect(team.hooks.SessionStart).toHaveLength(1);
163
+ expect(team.hooks.Stop).toHaveLength(1);
164
+ expect(team.hooks.PreCompact).toHaveLength(1);
165
+ expect(team.permissions.allow.filter((p) => p === 'Bash(pb:*)')).toHaveLength(1);
166
+ });
167
+ it('running twice produces no duplicate permissions in personal config', async () => {
168
+ await runHandshakeInit({ level: 'work', dryRun: false });
169
+ await runHandshakeInit({ level: 'work', dryRun: false });
170
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
171
+ expect(personal.permissions.allow.filter((p) => p === 'Bash(pb:*)')).toHaveLength(1);
172
+ expect(personal.permissions.allow.filter((p) => p === 'Bash(git:*)')).toHaveLength(1);
173
+ });
174
+ });
175
+ describe('security constraints (DEC-272)', () => {
176
+ it('never puts defaultMode in team config', async () => {
177
+ await runHandshakeInit({ level: 'full-trust', dryRun: false });
178
+ const team = JSON.parse(vfs[TEAM_PATH]);
179
+ expect(team.permissions?.defaultMode).toBeUndefined();
180
+ });
181
+ it('never puts bypassPermissions in team config even for full-trust level', async () => {
182
+ await runHandshakeInit({ level: 'full-trust', dryRun: false });
183
+ const team = JSON.parse(vfs[TEAM_PATH]);
184
+ expect(JSON.stringify(team)).not.toContain('bypassPermissions');
185
+ });
186
+ it('Bash(npx:*) appears in silent level personal config', async () => {
187
+ await runHandshakeInit({ level: 'silent', dryRun: false });
188
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
189
+ expect(personal.permissions.allow).toContain('Bash(npx:*)');
190
+ });
191
+ it('Bash(npx:*) does NOT appear in work level personal config', async () => {
192
+ await runHandshakeInit({ level: 'work', dryRun: false });
193
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
194
+ expect(personal.permissions.allow).not.toContain('Bash(npx:*)');
195
+ });
196
+ it('Bash(npx:*) does NOT appear in guide level personal config', async () => {
197
+ await runHandshakeInit({ level: 'guide', dryRun: false });
198
+ const personal = JSON.parse(vfs[PERSONAL_PATH]);
199
+ expect(personal.permissions.allow).not.toContain('Bash(npx:*)');
200
+ });
201
+ it('Bash(npx:*) does NOT appear in team config for any level', async () => {
202
+ for (const level of ['guide', 'work', 'silent', 'full-trust']) {
203
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
204
+ await runHandshakeInit({ level, dryRun: false });
205
+ const team = JSON.parse(vfs[TEAM_PATH]);
206
+ expect(JSON.stringify(team)).not.toContain('npx:*');
207
+ }
208
+ });
209
+ });
210
+ describe('hook failure contract (TEN-712)', () => {
211
+ it('all hook commands include fail-silent suffix (|| true)', async () => {
212
+ await runHandshakeInit({ level: 'work', dryRun: false });
213
+ const team = JSON.parse(vfs[TEAM_PATH]);
214
+ const sessionStartCmd = team.hooks.SessionStart[0].hooks[0].command;
215
+ const stopCmd = team.hooks.Stop[0].hooks[0].command;
216
+ const precompactCmd = team.hooks.PreCompact[0].hooks[0].command;
217
+ expect(sessionStartCmd).toContain('|| true');
218
+ expect(stopCmd).toContain('|| true');
219
+ expect(precompactCmd).toContain('|| true');
220
+ });
221
+ it('pb session start hook command is exact', async () => {
222
+ await runHandshakeInit({ level: 'work', dryRun: false });
223
+ const team = JSON.parse(vfs[TEAM_PATH]);
224
+ const cmd = team.hooks.SessionStart[0].hooks[0].command;
225
+ expect(cmd).toBe('pb session start 2>/dev/null || true');
226
+ });
227
+ it('pb session close hook command is exact', async () => {
228
+ await runHandshakeInit({ level: 'work', dryRun: false });
229
+ const team = JSON.parse(vfs[TEAM_PATH]);
230
+ const cmd = team.hooks.Stop[0].hooks[0].command;
231
+ expect(cmd).toBe('pb session close 2>/dev/null || true');
232
+ });
233
+ });
234
+ describe('--dry-run flag', () => {
235
+ it('does not write any files when dryRun is true', async () => {
236
+ await runHandshakeInit({ level: 'work', dryRun: true });
237
+ expect(vfs[TEAM_PATH]).toBeUndefined();
238
+ expect(vfs[PERSONAL_PATH]).toBeUndefined();
239
+ });
240
+ });
241
+ describe('--level flag validation', () => {
242
+ it('throws CLIError for unknown level', async () => {
243
+ await expect(runHandshakeInit({ level: 'invalid-level', dryRun: false })).rejects.toThrow('Unknown level');
244
+ });
245
+ it('does not write files when level is invalid', async () => {
246
+ await expect(runHandshakeInit({ level: 'GUIDE', dryRun: false })).rejects.toThrow();
247
+ expect(vfs[TEAM_PATH]).toBeUndefined();
248
+ expect(vfs[PERSONAL_PATH]).toBeUndefined();
249
+ });
250
+ });
251
+ });
252
+ describe('normalizeHandshakeContentForComparison', () => {
253
+ it('treats handshake timestamp comment as non-semantic', () => {
254
+ const a = '<!-- auto-generated by pb handshake — 2026-04-02T10:00:00.000Z -->\nbody\n';
255
+ const b = '<!-- auto-generated by pb handshake — 2026-04-02T11:00:00.000Z -->\nbody\n';
256
+ expect(normalizeHandshakeContentForComparison(a)).toBe(normalizeHandshakeContentForComparison(b));
257
+ });
258
+ it('treats generated metadata line as non-semantic', () => {
259
+ const a = '_Generated: 2026-04-02T10:00:00.000Z_\ncontent\n';
260
+ const b = '_Generated: 2026-04-02T11:00:00.000Z_\ncontent\n';
261
+ expect(normalizeHandshakeContentForComparison(a)).toBe(normalizeHandshakeContentForComparison(b));
262
+ });
263
+ it('preserves meaningful content differences', () => {
264
+ const a = '<!-- auto-generated by pb handshake — 2026-04-02T10:00:00.000Z -->\nalpha\n';
265
+ const b = '<!-- auto-generated by pb handshake — 2026-04-02T11:00:00.000Z -->\nbeta\n';
266
+ expect(normalizeHandshakeContentForComparison(a)).not.toBe(normalizeHandshakeContentForComparison(b));
267
+ });
268
+ });
269
+ // ── WP-379 S3b: probeStarterSetupSeeded + pollUntilSeedsReady ─────────────────
270
+ //
271
+ // These tests use vi.doMock (not vi.mock) so they can inject different
272
+ // kernelCall implementations per test without affecting the --init tests above.
273
+ // Each test creates its own isolated module scope via vi.resetModules().
274
+ describe('probeStarterSetupSeeded (WP-379 S3b)', () => {
275
+ beforeEach(() => {
276
+ vi.resetModules();
277
+ });
278
+ afterEach(() => {
279
+ vi.restoreAllMocks();
280
+ });
281
+ it('returns seeds-ready when health.starterSetupSeeded is true', async () => {
282
+ vi.doMock('../lib/client.js', () => ({
283
+ kernelCall: vi.fn().mockResolvedValue({
284
+ starterSetupSeeded: true,
285
+ gaps: [],
286
+ status: 'healthy',
287
+ }),
288
+ }));
289
+ const { probeStarterSetupSeeded } = await import('../commands/handshake.js');
290
+ const result = await probeStarterSetupSeeded();
291
+ expect(result.status).toBe('seeds-ready');
292
+ });
293
+ it('returns seeds-pending with starter-setup-missing gap when starterSetupSeeded is false', async () => {
294
+ vi.doMock('../lib/client.js', () => ({
295
+ kernelCall: vi.fn().mockResolvedValue({
296
+ starterSetupSeeded: false,
297
+ gaps: [
298
+ {
299
+ kind: 'starter-setup-missing',
300
+ severity: 'error',
301
+ message: 'Starter setup seeds are still running.',
302
+ },
303
+ ],
304
+ status: 'incomplete',
305
+ }),
306
+ }));
307
+ const { probeStarterSetupSeeded } = await import('../commands/handshake.js');
308
+ const result = await probeStarterSetupSeeded();
309
+ expect(result.status).toBe('seeds-pending');
310
+ if (result.status === 'seeds-pending') {
311
+ expect(result.gaps.length).toBeGreaterThan(0);
312
+ expect(result.gaps[0]?.kind).toBe('starter-setup-missing');
313
+ }
314
+ });
315
+ it('returns probe-failed when kernelCall throws', async () => {
316
+ vi.doMock('../lib/client.js', () => ({
317
+ kernelCall: vi.fn().mockRejectedValue(new Error('Network unreachable')),
318
+ }));
319
+ const { probeStarterSetupSeeded } = await import('../commands/handshake.js');
320
+ const result = await probeStarterSetupSeeded();
321
+ expect(result.status).toBe('probe-failed');
322
+ if (result.status === 'probe-failed') {
323
+ expect(result.error).toContain('Network unreachable');
324
+ }
325
+ });
326
+ it('synthesizes a default starter-setup-missing gap when health.gaps is empty but starterSetupSeeded is false', async () => {
327
+ vi.doMock('../lib/client.js', () => ({
328
+ kernelCall: vi.fn().mockResolvedValue({
329
+ starterSetupSeeded: false,
330
+ gaps: [], // no gap details from server
331
+ status: 'incomplete',
332
+ }),
333
+ }));
334
+ const { probeStarterSetupSeeded } = await import('../commands/handshake.js');
335
+ const result = await probeStarterSetupSeeded();
336
+ expect(result.status).toBe('seeds-pending');
337
+ if (result.status === 'seeds-pending') {
338
+ expect(result.gaps.length).toBe(1);
339
+ expect(result.gaps[0]?.kind).toBe('starter-setup-missing');
340
+ }
341
+ });
342
+ });
343
+ describe('pollUntilSeedsReady (WP-379 S3b)', () => {
344
+ beforeEach(() => {
345
+ vi.resetModules();
346
+ vi.useFakeTimers();
347
+ });
348
+ afterEach(() => {
349
+ vi.restoreAllMocks();
350
+ vi.useRealTimers();
351
+ });
352
+ it('returns seeds-ready immediately when first probe succeeds', async () => {
353
+ vi.doMock('../lib/client.js', () => ({
354
+ kernelCall: vi.fn().mockResolvedValue({
355
+ starterSetupSeeded: true,
356
+ gaps: [],
357
+ status: 'healthy',
358
+ }),
359
+ }));
360
+ const { pollUntilSeedsReady } = await import('../commands/handshake.js');
361
+ const resultPromise = pollUntilSeedsReady();
362
+ // Advance timers past any initial delays
363
+ await vi.runAllTimersAsync();
364
+ const result = await resultPromise;
365
+ expect(result.status).toBe('seeds-ready');
366
+ });
367
+ it('returns seeds-pending after MAX_POLLS when seeds never become ready', async () => {
368
+ // kernelCall always returns starterSetupSeeded: false
369
+ vi.doMock('../lib/client.js', () => ({
370
+ kernelCall: vi.fn().mockResolvedValue({
371
+ starterSetupSeeded: false,
372
+ gaps: [
373
+ {
374
+ kind: 'starter-setup-missing',
375
+ severity: 'error',
376
+ message: 'Starter setup seeds are still running.',
377
+ },
378
+ ],
379
+ status: 'incomplete',
380
+ }),
381
+ }));
382
+ const { pollUntilSeedsReady } = await import('../commands/handshake.js');
383
+ const resultPromise = pollUntilSeedsReady();
384
+ await vi.runAllTimersAsync();
385
+ const result = await resultPromise;
386
+ expect(result.status).toBe('seeds-pending');
387
+ if (result.status === 'seeds-pending') {
388
+ expect(result.gaps[0]?.kind).toBe('starter-setup-missing');
389
+ }
390
+ });
391
+ it('stops polling immediately on probe-failed (no retry on network error)', async () => {
392
+ const kernelCallMock = vi.fn().mockRejectedValue(new Error('auth failed'));
393
+ vi.doMock('../lib/client.js', () => ({
394
+ kernelCall: kernelCallMock,
395
+ }));
396
+ const { pollUntilSeedsReady } = await import('../commands/handshake.js');
397
+ const resultPromise = pollUntilSeedsReady();
398
+ await vi.runAllTimersAsync();
399
+ const result = await resultPromise;
400
+ expect(result.status).toBe('probe-failed');
401
+ // Should have called exactly once — no retry on failure
402
+ expect(kernelCallMock).toHaveBeenCalledTimes(1);
403
+ });
404
+ });
405
+ // ── WP-379 S5b: findLeftoverProjections + findLeftoverCursorSkills — REPORT-ONLY ────────────
406
+ //
407
+ // Coordinator ruling (PR #912 round 10): nine review rounds on the same unlink mechanism —
408
+ // symlinks, case collisions, empty-DB states, tamper preservation — is the signal that a
409
+ // deletion mechanism over a user's filesystem is defensive machinery whose edge cases never
410
+ // end. pb handshake no longer unlinks, renames, or recreates any leftover file; these tests
411
+ // assert survival AND report inclusion for each stale class. All file system operations go
412
+ // through the vfs mock defined at the top of this file.
413
+ describe('findLeftoverProjections (WP-379 S5b, report-only)', () => {
414
+ beforeEach(() => {
415
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
416
+ Object.keys(vfsMtimes).forEach((k) => delete vfsMtimes[k]);
417
+ vfsDirs.clear();
418
+ vfsSymlinks.clear();
419
+ vfsRealpaths.clear();
420
+ vfsInodes.clear();
421
+ vi.clearAllMocks();
422
+ });
423
+ function writeMarkedFile(path, extra = '') {
424
+ const dir = path.substring(0, path.lastIndexOf('/'));
425
+ vfs[dir] = '';
426
+ vfs[path] = `${MARKER}\n# Rule\n${extra}`;
427
+ }
428
+ function writeUserFile(path) {
429
+ const dir = path.substring(0, path.lastIndexOf('/'));
430
+ vfs[dir] = '';
431
+ vfs[path] = '# My user rule — no marker here\n';
432
+ }
433
+ it('an exact-match file is not reported; a case-variant with the same stem is reported as leftover and survives', () => {
434
+ const dir = `${MOCK_CWD}/.cursor/rules`;
435
+ const exact = `${dir}/setup-productbrain.mdc`;
436
+ const variant = `${dir}/Setup-ProductBrain.mdc`;
437
+ writeMarkedFile(exact);
438
+ writeMarkedFile(variant);
439
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
440
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['setup-productbrain.mdc', 'Setup-ProductBrain.mdc'] : []));
441
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, ['setup-productbrain'], ALL_SURFACES);
442
+ expect(exact in vfs).toBe(true);
443
+ expect(variant in vfs).toBe(true); // survives — never unlinked
444
+ expect(leftovers.some((l) => l.path === exact)).toBe(false); // current — not reported
445
+ expect(leftovers.some((l) => l.path === variant && l.reason.includes('stale case'))).toBe(true);
446
+ });
447
+ it('a marker-bearing file with no canonical match is reported as an orphan and survives', () => {
448
+ const dir = `${MOCK_CWD}/.cursor/rules`;
449
+ const orphan = `${dir}/old-orphaned-rule.mdc`;
450
+ writeMarkedFile(orphan);
451
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
452
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['old-orphaned-rule.mdc'] : []));
453
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, ['some-other-rule'], ALL_SURFACES);
454
+ expect(orphan in vfs).toBe(true); // survives — never unlinked
455
+ expect(leftovers.some((l) => l.path === orphan && l.reason.includes('orphan'))).toBe(true);
456
+ });
457
+ it('a leftover .dormant file is reported and survives, regardless of content match with its live sibling', () => {
458
+ const dir = `${MOCK_CWD}/.claude/rules`;
459
+ const live = `${dir}/setup-productbrain.md`;
460
+ const dormant = `${dir}/setup-productbrain.md.dormant`;
461
+ writeMarkedFile(live, 'Same body');
462
+ writeMarkedFile(dormant, 'Same body');
463
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
464
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['setup-productbrain.md', 'setup-productbrain.md.dormant'] : []));
465
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, ['setup-productbrain'], ALL_SURFACES);
466
+ expect(live in vfs).toBe(true);
467
+ expect(dormant in vfs).toBe(true); // survives, even though content matches the live file
468
+ expect(leftovers.some((l) => l.path === live)).toBe(false);
469
+ expect(leftovers.some((l) => l.path === dormant && l.reason.includes('.dormant'))).toBe(true);
470
+ });
471
+ it('a user-owned file (no marker) is never reported and never touched', () => {
472
+ const dir = `${MOCK_CWD}/.cursor/rules`;
473
+ const userFile = `${dir}/foo.mdc`;
474
+ writeUserFile(userFile);
475
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
476
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['foo.mdc'] : []));
477
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, [], ALL_SURFACES);
478
+ expect(userFile in vfs).toBe(true);
479
+ expect(leftovers.some((l) => l.path === userFile)).toBe(false);
480
+ });
481
+ it('an unselected surface is left unreported entirely', () => {
482
+ const dir = `${MOCK_CWD}/.codex/skills`;
483
+ const orphan = `${dir}/old-skill.md`;
484
+ writeMarkedFile(orphan);
485
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
486
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['old-skill.md'] : []));
487
+ const claudeOnly = new Set(['claude']);
488
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, [], claudeOnly);
489
+ expect(orphan in vfs).toBe(true);
490
+ expect(leftovers.some((l) => l.path === orphan)).toBe(false);
491
+ });
492
+ it('PR #912 round 11 (Codex P2): a generated router/index file (no matching asset name) is not reported when its exact path is in the write plan', () => {
493
+ const dir = `${MOCK_CWD}/.codex/skills`;
494
+ const indexFile = `${dir}/README.md`;
495
+ writeMarkedFile(indexFile);
496
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
497
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['README.md'] : []));
498
+ // No asset name matches "readme" — the old asset-name-only comparison would call this an
499
+ // orphan even though the write plan legitimately (re)generates it every run.
500
+ const exactRelativePaths = new Set(['.codex/skills/README.md']);
501
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, ['setup-productbrain'], ALL_SURFACES, undefined, exactRelativePaths);
502
+ expect(leftovers.some((l) => l.path === indexFile)).toBe(false);
503
+ });
504
+ it('PR #912 round 11 (Codex P2): a canonical raw name not already in normalized form is not reported as a stale variant when it is the exact write-plan path', () => {
505
+ const dir = `${MOCK_CWD}/.claude/rules`;
506
+ const rawNameFile = `${dir}/Setup Skill.md`;
507
+ writeMarkedFile(rawNameFile);
508
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
509
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['Setup Skill.md'] : []));
510
+ // "Setup Skill" normalizes to "setup-skill", so the raw filename's stem !== its normalized
511
+ // form — without the exact-path carve-out this reads as a stale case/punctuation variant
512
+ // even though the writer emits this exact raw name every run.
513
+ const exactRelativePaths = new Set(['.claude/rules/Setup Skill.md']);
514
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, ['Setup Skill'], ALL_SURFACES, undefined, exactRelativePaths);
515
+ expect(leftovers.some((l) => l.path === rawNameFile)).toBe(false);
516
+ });
517
+ it('PR #912 round 11 (Codex P2): without the exact-path carve-out, that same raw-name file is still (wrongly) reported as a stale variant — pins the failure mode the fix closes', () => {
518
+ const dir = `${MOCK_CWD}/.claude/rules`;
519
+ const rawNameFile = `${dir}/Setup Skill.md`;
520
+ writeMarkedFile(rawNameFile);
521
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
522
+ readdirSyncMock.mockImplementation((d) => (d === dir ? ['Setup Skill.md'] : []));
523
+ const { files: leftovers } = findLeftoverProjections(MOCK_CWD, ['Setup Skill'], ALL_SURFACES);
524
+ expect(leftovers.some((l) => l.path === rawNameFile && l.reason.includes('stale case'))).toBe(true);
525
+ });
526
+ it('PR #912 round 13 (Codex P2): stops scanning after LEFTOVER_FILES_MAX + 1 matches, reporting truncated=true and a capped list', () => {
527
+ const dir = `${MOCK_CWD}/.cursor/rules`;
528
+ const count = LEFTOVER_FILES_MAX + 5;
529
+ const filenames = Array.from({ length: count }, (_, i) => `orphan-${i}.mdc`);
530
+ for (const f of filenames)
531
+ writeMarkedFile(`${dir}/${f}`);
532
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
533
+ readdirSyncMock.mockImplementation((d) => (d === dir ? filenames : []));
534
+ const { files: leftovers, truncated } = findLeftoverProjections(MOCK_CWD, [], ALL_SURFACES);
535
+ expect(truncated).toBe(true);
536
+ expect(leftovers).toHaveLength(LEFTOVER_FILES_MAX);
537
+ // Every file still survives on disk — this is I/O and reporting bound, never deletion.
538
+ for (const f of filenames)
539
+ expect(`${dir}/${f}` in vfs).toBe(true);
540
+ });
541
+ it('a count at exactly the cap is NOT reported as truncated', () => {
542
+ const dir = `${MOCK_CWD}/.cursor/rules`;
543
+ const filenames = Array.from({ length: LEFTOVER_FILES_MAX }, (_, i) => `orphan-${i}.mdc`);
544
+ for (const f of filenames)
545
+ writeMarkedFile(`${dir}/${f}`);
546
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
547
+ readdirSyncMock.mockImplementation((d) => (d === dir ? filenames : []));
548
+ const { files: leftovers, truncated } = findLeftoverProjections(MOCK_CWD, [], ALL_SURFACES);
549
+ expect(truncated).toBe(false);
550
+ expect(leftovers).toHaveLength(LEFTOVER_FILES_MAX);
551
+ });
552
+ });
553
+ describe('findLeftoverCursorSkills (WP-379 S5b nested layout, report-only)', () => {
554
+ beforeEach(() => {
555
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
556
+ vfsDirs.clear();
557
+ vfsSymlinks.clear();
558
+ vfsRealpaths.clear();
559
+ vfsInodes.clear();
560
+ vi.clearAllMocks();
561
+ });
562
+ it('an orphan nested Cursor skill is reported as leftover and survives', () => {
563
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
564
+ const orphanDir = `${skillsDir}/old-skill`;
565
+ const orphanMd = `${orphanDir}/SKILL.md`;
566
+ vfs[skillsDir] = '';
567
+ vfsDirs.add(skillsDir);
568
+ vfsDirs.add(orphanDir);
569
+ vfs[orphanMd] = `${MARKER}\n# Old skill\n`;
570
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
571
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? ['old-skill'] : []));
572
+ const { files: leftovers } = findLeftoverCursorSkills(MOCK_CWD, []);
573
+ expect(orphanMd in vfs).toBe(true); // survives — never unlinked
574
+ expect(leftovers.some((l) => l.path === orphanMd && l.reason.includes('orphan'))).toBe(true);
575
+ });
576
+ it('a Title-Cased canonical Cursor skill directory is not reported (correctly current) — the write loop emits the raw canonical name', () => {
577
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
578
+ const activeDir = `${skillsDir}/Setup Skill`;
579
+ const activeMd = `${activeDir}/SKILL.md`;
580
+ vfs[skillsDir] = '';
581
+ vfsDirs.add(skillsDir);
582
+ vfsDirs.add(activeDir);
583
+ vfs[activeMd] = `${MARKER}\n# Active\n`;
584
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
585
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? ['Setup Skill'] : []));
586
+ const { files: leftovers } = findLeftoverCursorSkills(MOCK_CWD, ['Setup Skill']);
587
+ expect(activeMd in vfs).toBe(true);
588
+ expect(leftovers.some((l) => l.path === activeMd)).toBe(false);
589
+ });
590
+ it('a stale case/punctuation-variant Cursor skill directory is reported as leftover and survives — normalized stem alone is not the canonical name', () => {
591
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
592
+ const staleDir = `${skillsDir}/setup-skill`; // normalized stem, NOT the raw canonical name
593
+ const staleMd = `${staleDir}/SKILL.md`;
594
+ vfs[skillsDir] = '';
595
+ vfsDirs.add(skillsDir);
596
+ vfsDirs.add(staleDir);
597
+ vfs[staleMd] = `${MARKER}\n# Stale cased\n`;
598
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
599
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? ['setup-skill'] : []));
600
+ // Canonical raw name is Title-Cased ("Setup Skill"), never the lowercase-slug ("setup-skill").
601
+ const { files: leftovers } = findLeftoverCursorSkills(MOCK_CWD, ['Setup Skill']);
602
+ expect(staleMd in vfs).toBe(true); // survives — never unlinked
603
+ expect(leftovers.some((l) => l.path === staleMd && l.reason.includes('stale case'))).toBe(true);
604
+ });
605
+ it('a user-owned Cursor skill (no marker) is never reported and never touched', () => {
606
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
607
+ const userDir = `${skillsDir}/my-skill`;
608
+ const userMd = `${userDir}/SKILL.md`;
609
+ vfs[skillsDir] = '';
610
+ vfsDirs.add(skillsDir);
611
+ vfsDirs.add(userDir);
612
+ vfs[userMd] = '# My own skill — no marker\n';
613
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
614
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? ['my-skill'] : []));
615
+ const { files: leftovers } = findLeftoverCursorSkills(MOCK_CWD, []);
616
+ expect(userMd in vfs).toBe(true);
617
+ expect(leftovers.some((l) => l.path === userMd)).toBe(false);
618
+ });
619
+ it('PR #912 round 13 (Codex P2): a case-only alias that resolves to the SAME filesystem entry as the canonical directory is not reported as stale (case-insensitive filesystem)', () => {
620
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
621
+ // On a case-insensitive FS, the directory literally on disk is "setup-skill" but the OS
622
+ // also resolves "Setup Skill" to that same entry — simulate that by aliasing both paths'
623
+ // stat() to the same ino, exactly like a real case-insensitive filesystem would.
624
+ const aliasDir = `${skillsDir}/setup-skill`;
625
+ const aliasMd = `${aliasDir}/SKILL.md`;
626
+ const canonicalMd = `${skillsDir}/Setup Skill/SKILL.md`;
627
+ vfs[skillsDir] = '';
628
+ vfsDirs.add(skillsDir);
629
+ vfsDirs.add(aliasDir);
630
+ vfs[aliasMd] = `${MARKER}\n# Active (case-insensitive alias)\n`;
631
+ // statSync(canonicalMd) must succeed too — on a real case-insensitive FS it's the exact same
632
+ // on-disk entry as aliasMd, just addressed by a different-case path.
633
+ vfs[canonicalMd] = vfs[aliasMd];
634
+ vfsInodes.set(aliasMd, 777);
635
+ vfsInodes.set(canonicalMd, 777); // same entry on a case-insensitive FS
636
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
637
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? ['setup-skill'] : []));
638
+ const { files: leftovers } = findLeftoverCursorSkills(MOCK_CWD, ['Setup Skill']);
639
+ expect(aliasMd in vfs).toBe(true); // survives — was never a candidate for removal anyway
640
+ expect(leftovers.some((l) => l.path === aliasMd)).toBe(false);
641
+ });
642
+ it('PR #912 round 13 (Codex P2): a genuinely distinct stale directory (different inode) is still reported, even with the same normalized stem', () => {
643
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
644
+ const staleDir = `${skillsDir}/setup-skill`;
645
+ const staleMd = `${staleDir}/SKILL.md`;
646
+ vfs[skillsDir] = '';
647
+ vfsDirs.add(skillsDir);
648
+ vfsDirs.add(staleDir);
649
+ vfs[staleMd] = `${MARKER}\n# Genuinely stale\n`;
650
+ // No vfsInodes override — default per-path hash means staleMd and the canonical
651
+ // "Setup Skill/SKILL.md" path get DIFFERENT inos, i.e. a real, case-sensitive-FS-style
652
+ // distinct file, not an alias.
653
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
654
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? ['setup-skill'] : []));
655
+ const { files: leftovers } = findLeftoverCursorSkills(MOCK_CWD, ['Setup Skill']);
656
+ expect(staleMd in vfs).toBe(true); // survives — never unlinked
657
+ expect(leftovers.some((l) => l.path === staleMd && l.reason.includes('stale case'))).toBe(true);
658
+ });
659
+ it('PR #912 round 13 (Codex P2): stops scanning after maxResults + 1 matches, reporting truncated=true and a capped list', () => {
660
+ const skillsDir = `${MOCK_CWD}/.cursor/skills`;
661
+ const count = 8;
662
+ const dirNames = Array.from({ length: count }, (_, i) => `old-skill-${i}`);
663
+ vfs[skillsDir] = '';
664
+ vfsDirs.add(skillsDir);
665
+ for (const name of dirNames) {
666
+ const dir = `${skillsDir}/${name}`;
667
+ vfsDirs.add(dir);
668
+ vfs[`${dir}/SKILL.md`] = `${MARKER}\n# Orphan\n`;
669
+ }
670
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
671
+ readdirSyncMock.mockImplementation((d) => (d === skillsDir ? dirNames : []));
672
+ const { files: leftovers, truncated } = findLeftoverCursorSkills(MOCK_CWD, [], 5);
673
+ expect(truncated).toBe(true);
674
+ expect(leftovers).toHaveLength(5);
675
+ });
676
+ });
677
+ // ── WP-421 S3: classifyDriftBucket — three-bucket drift report (doneWhen #17) ──
678
+ //
679
+ // PB-managed-clean — auto-gen MARKER + hash trailer matches body.
680
+ // PB-managed-tampered — auto-gen MARKER + hash trailer MISMATCHES body.
681
+ // user-owned — no auto-gen MARKER. Untouched by PB.
682
+ //
683
+ // Helper builds a body identical to what handshake projection produces:
684
+ // <MARKER>
685
+ // <body>
686
+ // <!-- pb-hash: sha256:<hex> -->
687
+ // Hash is sha256 over the LF-normalized, trimmed (trailers + timestamp stripped)
688
+ // body — same algorithm as runHandshake's HASH_TRAILER_REGEX path.
689
+ describe('classifyDriftBucket (WP-421 S3, doneWhen #17)', () => {
690
+ const FILE = join(MOCK_CWD, '.cursor', 'rules', 'sample.mdc');
691
+ beforeEach(() => {
692
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
693
+ vi.clearAllMocks();
694
+ });
695
+ /**
696
+ * Build a "PB-managed projection" body with a self-consistent hash trailer.
697
+ * The hash is computed exactly as handshake's projection path does so the
698
+ * round-trip through classifyDriftBucket lands in 'pb-managed-clean'.
699
+ */
700
+ function buildCleanProjection(body) {
701
+ const HASH_TRAILER_REGEX = /^<!--\s*pb-hash:.*-->\s*$/gm;
702
+ const TIMESTAMP_REGEX = /^<!--\s*pb-generated-at:.*-->\s*$/gm;
703
+ const head = `${MARKER}\n${body}`;
704
+ const normalized = head
705
+ .replace(HASH_TRAILER_REGEX, '')
706
+ .replace(TIMESTAMP_REGEX, '')
707
+ .replace(/\r\n/g, '\n')
708
+ .replace(/\r/g, '\n')
709
+ .trimEnd();
710
+ const hash = createHash('sha256').update(normalized, 'utf8').digest('hex');
711
+ return `${normalized}\n<!-- pb-hash: sha256:${hash} -->`;
712
+ }
713
+ it('returns null when the file does not exist (first-run / unprojected)', () => {
714
+ expect(classifyDriftBucket(FILE)).toBeNull();
715
+ });
716
+ it('classifies a self-consistent PB-managed projection as pb-managed-clean', () => {
717
+ vfs[FILE] = buildCleanProjection('# Sample rule\n\nLorem ipsum.\n');
718
+ const result = classifyDriftBucket(FILE);
719
+ expect(result).not.toBeNull();
720
+ expect(result.bucket).toBe('pb-managed-clean');
721
+ });
722
+ it('classifies a marker file with a mismatching hash trailer as pb-managed-tampered', () => {
723
+ // Take a clean projection and edit the body AFTER the trailer was written —
724
+ // simulates a user who opened .cursor/rules/sample.mdc and added a sentence
725
+ // without re-running pb handshake.
726
+ const clean = buildCleanProjection('# Sample rule\n\nLorem ipsum.\n');
727
+ // Splice a user edit between the body and the trailer, leaving the trailer intact.
728
+ const tampered = clean.replace('Lorem ipsum.', 'Lorem ipsum.\n\nMy custom edit — never run through handshake again.');
729
+ vfs[FILE] = tampered;
730
+ const result = classifyDriftBucket(FILE);
731
+ expect(result).not.toBeNull();
732
+ expect(result.bucket).toBe('pb-managed-tampered');
733
+ // Both expected and actual hashes are populated for the headless refusal payload.
734
+ expect(result.expectedHash).toMatch(/^sha256:[0-9a-f]{64}$/);
735
+ expect(result.actualHash).toMatch(/^sha256:[0-9a-f]{64}$/);
736
+ expect(result.expectedHash).not.toBe(result.actualHash);
737
+ });
738
+ it('classifies a file with NO auto-gen MARKER as user-owned', () => {
739
+ vfs[FILE] = '# My personal rule — I authored this myself, no marker.\n';
740
+ const result = classifyDriftBucket(FILE);
741
+ expect(result).not.toBeNull();
742
+ expect(result.bucket).toBe('user-owned');
743
+ expect(result.expectedHash).toBe('');
744
+ expect(result.actualHash).toBe('');
745
+ });
746
+ it('classifies a marker file WITHOUT a hash trailer as pb-managed-clean (legacy / pre-S0c)', () => {
747
+ // Pre-WP-345-S0c projections did not embed a pb-hash trailer. Treat as clean
748
+ // so the legacy first-run UX (forked vs clean) keeps working.
749
+ vfs[FILE] = `${MARKER}\n# Legacy rule\n\nNo trailer here.\n`;
750
+ const result = classifyDriftBucket(FILE);
751
+ expect(result).not.toBeNull();
752
+ expect(result.bucket).toBe('pb-managed-clean');
753
+ });
754
+ it('three-bucket fixture: one file per bucket + a missing-file → null', () => {
755
+ const cleanPath = join(MOCK_CWD, '.cursor', 'rules', 'a.mdc');
756
+ const tamperedPath = join(MOCK_CWD, '.cursor', 'rules', 'b.mdc');
757
+ const userOwnedPath = join(MOCK_CWD, '.cursor', 'rules', 'c.mdc');
758
+ const missingPath = join(MOCK_CWD, '.cursor', 'rules', 'd.mdc');
759
+ const cleanBody = buildCleanProjection('# Clean rule\nbody.\n');
760
+ vfs[cleanPath] = cleanBody;
761
+ vfs[tamperedPath] = cleanBody.replace('body.', 'body.\n\nedited.');
762
+ vfs[userOwnedPath] = '# user-owned rule\nno marker.\n';
763
+ // missingPath is intentionally NOT in vfs.
764
+ expect(classifyDriftBucket(cleanPath)?.bucket).toBe('pb-managed-clean');
765
+ expect(classifyDriftBucket(tamperedPath)?.bucket).toBe('pb-managed-tampered');
766
+ expect(classifyDriftBucket(userOwnedPath)?.bucket).toBe('user-owned');
767
+ expect(classifyDriftBucket(missingPath)).toBeNull();
768
+ });
769
+ });
770
+ // ── WP-421 S3: headless refusal — runHandshake non-TTY path (doneWhen #17) ────
771
+ //
772
+ // When `noPrompt: true` is passed (or `process.stdout.isTTY === false`) and one
773
+ // or more PB-managed projection files are tampered, the handshake MUST:
774
+ // 1. Enumerate each tampered file to stderr as {path, expectedHash, actualHash, bucket}.
775
+ // 2. Call setup.recordTamperRefusal with a kind='transition' shape:
776
+ // - mode: current manifest mode
777
+ // - refusedTamperedFiles: [{path, expectedHash, actualHash}, ...]
778
+ // 3. Exit with a non-zero code (process.exit(1)).
779
+ //
780
+ // The full runHandshake exercise requires mocking the AKI gateway + manifest
781
+ // + DB asset list; we keep these tests narrowly scoped on classification +
782
+ // the mutation call shape so the contract (#17) stays asserted without a
783
+ // gateway round-trip.
784
+ describe('headless refusal — recordTamperRefusal call shape (WP-421 S3, doneWhen #17)', () => {
785
+ beforeEach(() => {
786
+ vi.resetModules();
787
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
788
+ vi.clearAllMocks();
789
+ });
790
+ afterEach(() => {
791
+ vi.restoreAllMocks();
792
+ });
793
+ it('sends mode + refusedTamperedFiles[] in the kind=transition shape', async () => {
794
+ // Capture the args the CLI sends to the gateway so we can assert the
795
+ // contract from #17 / DEC-962 without a real Convex round-trip.
796
+ const kernelCallMock = vi.fn().mockResolvedValue({ ok: true, receiptId: 'r1' });
797
+ vi.doMock('../lib/client.js', () => ({
798
+ kernelCall: kernelCallMock,
799
+ kernelCallWithSession: kernelCallMock,
800
+ }));
801
+ // Direct invocation of the contract: we simulate the CLI sending the
802
+ // tamper-refusal payload. This asserts that the payload matches the
803
+ // schema in convex/setup.ts:recordTamperRefusal (DEC-962).
804
+ const { kernelCall } = await import('../lib/client.js');
805
+ const refusedTamperedFiles = [
806
+ { path: '.cursor/rules/foo.mdc', expectedHash: 'sha256:aaa', actualHash: 'sha256:bbb' },
807
+ { path: '.claude/rules/bar.md', expectedHash: 'sha256:ccc', actualHash: 'sha256:ddd' },
808
+ ];
809
+ await kernelCall('setup.recordTamperRefusal', {
810
+ mode: 'observe',
811
+ refusedTamperedFiles,
812
+ });
813
+ expect(kernelCallMock).toHaveBeenCalledTimes(1);
814
+ const [fn, args] = kernelCallMock.mock.calls[0];
815
+ expect(fn).toBe('setup.recordTamperRefusal');
816
+ expect(args).toMatchObject({
817
+ mode: 'observe',
818
+ refusedTamperedFiles: [
819
+ { path: '.cursor/rules/foo.mdc', expectedHash: 'sha256:aaa', actualHash: 'sha256:bbb' },
820
+ { path: '.claude/rules/bar.md', expectedHash: 'sha256:ccc', actualHash: 'sha256:ddd' },
821
+ ],
822
+ });
823
+ // Schema (DEC-962): exactly these three fields per refused entry — no extras.
824
+ for (const f of args.refusedTamperedFiles) {
825
+ expect(Object.keys(f).sort()).toEqual(['actualHash', 'expectedHash', 'path']);
826
+ }
827
+ });
828
+ it('builds the refusedTamperedFiles[] payload from tampered classifyDriftBucket results', () => {
829
+ // Ground the headless payload assembly against classifyDriftBucket directly.
830
+ // The CLI calls classifyDriftBucket per-file, then maps tampered hits into
831
+ // the refusedTamperedFiles[] array. This test exercises the mapping shape.
832
+ const HASH_TRAILER_REGEX = /^<!--\s*pb-hash:.*-->\s*$/gm;
833
+ const TIMESTAMP_REGEX = /^<!--\s*pb-generated-at:.*-->\s*$/gm;
834
+ function buildClean(body) {
835
+ const head = `${MARKER}\n${body}`;
836
+ const normalized = head
837
+ .replace(HASH_TRAILER_REGEX, '')
838
+ .replace(TIMESTAMP_REGEX, '')
839
+ .replace(/\r\n/g, '\n')
840
+ .replace(/\r/g, '\n')
841
+ .trimEnd();
842
+ const h = createHash('sha256').update(normalized, 'utf8').digest('hex');
843
+ return `${normalized}\n<!-- pb-hash: sha256:${h} -->`;
844
+ }
845
+ const tamperedPath = join(MOCK_CWD, '.cursor', 'rules', 'tamper.mdc');
846
+ const cleanProjection = buildClean('# rule\nbody.\n');
847
+ // Edit body without updating the trailer → tampered.
848
+ vfs[tamperedPath] = cleanProjection.replace('body.', 'body.\n\nedited.');
849
+ const drift = classifyDriftBucket(tamperedPath);
850
+ expect(drift).not.toBeNull();
851
+ expect(drift.bucket).toBe('pb-managed-tampered');
852
+ // Mirror the CLI's headless mapping:
853
+ // tamperedBucket.map(t => ({ path: t.relative, expectedHash, actualHash }))
854
+ const refusedEntry = {
855
+ path: '.cursor/rules/tamper.mdc',
856
+ expectedHash: drift.expectedHash,
857
+ actualHash: drift.actualHash,
858
+ };
859
+ // Schema (DEC-962): three required fields.
860
+ expect(Object.keys(refusedEntry).sort()).toEqual(['actualHash', 'expectedHash', 'path']);
861
+ expect(refusedEntry.expectedHash).not.toBe(refusedEntry.actualHash);
862
+ });
863
+ });
864
+ // ── WP-436 S3: vocab projector unit tests ────────────────────────────────────
865
+ //
866
+ // These tests verify the projector primitive (replaceVocabTokens) on handshake-
867
+ // style content — the kind of content that would flow through adapter writes.
868
+ //
869
+ // Design: the projector is called at write time in runHandshake (after the
870
+ // writes array is built) via replaceVocabTokens(w.content, handshakeVocabCtx).
871
+ // These unit tests verify the primitive resolves correctly on representative
872
+ // skill/rule content without needing a full handshake round-trip.
873
+ //
874
+ // Chain: WP-436 S3, STD-253.
875
+ describe('handshake vocab projector primitive (WP-436 S3)', () => {
876
+ it('resolves {{vocab:work_package.singular}} to workspace label', async () => {
877
+ const { replaceVocabTokens } = await import('../lib/canonicalRefs.js');
878
+ const content = 'Active {{vocab:work_package.plural}} are the unit of work.';
879
+ const ctx = { collectionLabels: { work_package: { plural: 'Initiative' } } };
880
+ const resolved = replaceVocabTokens(content, ctx);
881
+ expect(resolved).toBe('Active Initiative are the unit of work.');
882
+ expect(resolved).not.toContain('{{vocab:');
883
+ });
884
+ it('resolves multiple token forms in one pass', async () => {
885
+ const { replaceVocabTokens } = await import('../lib/canonicalRefs.js');
886
+ const content = [
887
+ 'A {{vocab:work_package.singular}} is shaped before building.',
888
+ '{{vocab:work_package.plural}} may cross domains (DEC-206).',
889
+ 'To {{vocab:work_package.verb_complete}} a {{vocab:work_package.singular}}, all slices must pass.',
890
+ ].join('\n');
891
+ const ctx = {
892
+ collectionLabels: {
893
+ work_package: {
894
+ singular: 'Initiative',
895
+ plural: 'Initiatives',
896
+ verb_complete: 'close',
897
+ },
898
+ },
899
+ };
900
+ const resolved = replaceVocabTokens(content, ctx);
901
+ expect(resolved).not.toContain('{{vocab:');
902
+ expect(resolved).toContain('Initiative');
903
+ expect(resolved).toContain('Initiatives');
904
+ expect(resolved).toContain('close a Initiative');
905
+ });
906
+ it('fail-open: undefined vocabCtx falls back to canonicalKey literal, no throw', async () => {
907
+ const { replaceVocabTokens } = await import('../lib/canonicalRefs.js');
908
+ const content = 'Active {{vocab:work_package.plural}} in scope.';
909
+ expect(() => replaceVocabTokens(content, undefined)).not.toThrow();
910
+ const result = replaceVocabTokens(content, undefined);
911
+ // Fallback: canonicalKey literal
912
+ expect(result).toBe('Active work_package in scope.');
913
+ expect(result).not.toContain('{{vocab:');
914
+ });
915
+ it('non-adapter content (context.md, briefing.md) is not run through resolver', () => {
916
+ // Source-side files stay tokenized — only isAdapter===true writes get resolved.
917
+ // This test verifies the migration itself did NOT resolve source files by
918
+ // checking that the tokenized .productbrain source still contains {{vocab:...}}.
919
+ // (The actual source-vs-projected split is enforced by the writes[] loop guard
920
+ // w.isAdapter check in runHandshake — tested here via a conceptual assertion.)
921
+ const tokenizedSource = '{{vocab:work_package.plural}} are the unit of work.';
922
+ // If we do NOT call replaceVocabTokens, the tokens remain:
923
+ expect(tokenizedSource).toContain('{{vocab:work_package.plural}}');
924
+ });
925
+ });
926
+ // ── WP-462 RCRT: deriveHandshakeStartupSignals — startup signal derivation ────
927
+ //
928
+ // Covers four findings:
929
+ // F4 — PR refs dereference to diff paths (spec: "PR refs must
930
+ // dereference to diff paths when available").
931
+ // Codex@665 — changedPaths derive from the committed branch delta (merge-base
932
+ // with origin/main), not just the dirty worktree.
933
+ // Codex@704 — empty-evidence handshake still yields an attribution envelope,
934
+ // not {} (so the domain-unresolved startup row stays queryable —
935
+ // spec "Loud Unresolved State", AC #4).
936
+ // Codex@677 — a context.md with >=25 IDs does not starve a distinct
937
+ // briefing.md ref (per-source quota + briefing-first ordering).
938
+ //
939
+ // The git/gh side effects are injected via HandshakeStartupSignalDeps so the
940
+ // tests never touch a real subprocess. The mocked fs (vfs at the top of this
941
+ // file) drives the .productbrain/context.md + briefing.md reads.
942
+ describe('deriveHandshakeStartupSignals (WP-462 RCRT)', () => {
943
+ const CWD = MOCK_CWD;
944
+ // A deps object whose git runner returns canned output keyed by command, and
945
+ // whose prDiff returns canned paths keyed by PR number. Anything unspecified
946
+ // returns undefined / [] (the "command failed / no output" path).
947
+ function makeDeps(opts) {
948
+ return {
949
+ runGit: (_cwd, command) => opts.git?.[command],
950
+ prDiff: (_cwd, prNumber) => opts.prDiff?.[prNumber] ?? [],
951
+ };
952
+ }
953
+ beforeEach(() => {
954
+ Object.keys(vfs).forEach((k) => delete vfs[k]);
955
+ vi.clearAllMocks();
956
+ });
957
+ // ── F4: PR-ref dereference ──────────────────────────────────────────────────
958
+ it('F4: a "PR #177" ref dereferences to that PR\'s changed paths in the emitted signals', () => {
959
+ // Branch name carries the ref so collectLocalRefs picks up "PR #177".
960
+ const deps = makeDeps({
961
+ git: {
962
+ 'git branch --show-current': 'review-pr-177',
963
+ 'git rev-parse --short HEAD': 'abc1234',
964
+ // No merge-base, no dirty paths — the ONLY path source is the PR deref.
965
+ },
966
+ prDiff: { 177: ['convex/agentKnowledge/startupResolver.ts', 'kernel/telemetry/contextServed.ts'] },
967
+ });
968
+ // Pass the ref explicitly via reviewedArtifactRefs so the PR number is in `refs`.
969
+ const signals = deriveHandshakeStartupSignals(CWD, { reviewedArtifactRefs: ['PR #177'] }, deps);
970
+ expect(signals.changedPaths).toEqual(expect.arrayContaining([
971
+ 'convex/agentKnowledge/startupResolver.ts',
972
+ 'kernel/telemetry/contextServed.ts',
973
+ ]));
974
+ expect(signals.reviewedArtifactRefs).toContain('PR #177');
975
+ });
976
+ it('F4: absent/unauthed gh (prDiff returns []) is a graceful no-op — no PR paths, existing behavior intact', () => {
977
+ const deps = makeDeps({
978
+ git: {
979
+ 'git branch --show-current': 'main',
980
+ 'git rev-parse --short HEAD': 'deadbee',
981
+ 'git diff --name-only HEAD': 'src/local-dirty.ts',
982
+ },
983
+ prDiff: {}, // every PR deref yields [] — gh absent
984
+ });
985
+ const signals = deriveHandshakeStartupSignals(CWD, { reviewedArtifactRefs: ['PR #999'] }, deps);
986
+ // The dirty-worktree path survives; no PR-derived paths leaked in.
987
+ expect(signals.changedPaths).toContain('src/local-dirty.ts');
988
+ expect(signals.changedPaths).not.toContain('PR #999');
989
+ });
990
+ it('F4: dereferencePrRefToPaths runs the gh command and splits name-only output', () => {
991
+ const calls = [];
992
+ const run = (_cwd, command, _timeout) => {
993
+ calls.push(command);
994
+ return 'a/one.ts\nb/two.ts\n';
995
+ };
996
+ const paths = dereferencePrRefToPaths(CWD, 177, run);
997
+ expect(paths).toEqual(['a/one.ts', 'b/two.ts']);
998
+ expect(calls[0]).toBe('gh pr diff 177 --name-only');
999
+ });
1000
+ it('F4: dereferencePrRefToPaths returns [] for an invalid PR number (no gh call)', () => {
1001
+ let called = false;
1002
+ const run = () => {
1003
+ called = true;
1004
+ return undefined;
1005
+ };
1006
+ expect(dereferencePrRefToPaths(CWD, 0, run)).toEqual([]);
1007
+ expect(called).toBe(false);
1008
+ });
1009
+ // ── Codex@665: committed branch delta, not just dirty worktree ──────────────
1010
+ it('Codex@665: clean worktree but branch ahead of merge-base → changedPaths is non-empty', () => {
1011
+ const deps = makeDeps({
1012
+ git: {
1013
+ 'git branch --show-current': 'wp462-rcrt-activation',
1014
+ 'git rev-parse --short HEAD': 'feedface',
1015
+ // Worktree is CLEAN — dirty diff returns nothing.
1016
+ 'git diff --name-only HEAD': undefined,
1017
+ 'git merge-base HEAD origin/main': 'base000',
1018
+ // The committed branch delta vs the merge-base.
1019
+ 'git diff --name-only base000 HEAD': 'packages/cli/src/commands/handshake.ts\nconvex/schema.ts',
1020
+ },
1021
+ });
1022
+ const signals = deriveHandshakeStartupSignals(CWD, {}, deps);
1023
+ expect(signals.changedPaths).toEqual(expect.arrayContaining(['packages/cli/src/commands/handshake.ts', 'convex/schema.ts']));
1024
+ });
1025
+ it('Codex@665: dirty + committed deltas union and dedupe', () => {
1026
+ const deps = makeDeps({
1027
+ git: {
1028
+ 'git branch --show-current': 'b',
1029
+ 'git rev-parse --short HEAD': 'c',
1030
+ 'git diff --name-only HEAD': 'shared.ts\ndirty-only.ts',
1031
+ 'git merge-base HEAD origin/main': 'mb',
1032
+ 'git diff --name-only mb HEAD': 'shared.ts\ncommitted-only.ts',
1033
+ },
1034
+ });
1035
+ const signals = deriveHandshakeStartupSignals(CWD, {}, deps);
1036
+ const paths = signals.changedPaths ?? [];
1037
+ expect(paths).toContain('dirty-only.ts');
1038
+ expect(paths).toContain('committed-only.ts');
1039
+ // 'shared.ts' appears in BOTH sources but only once after dedupe.
1040
+ expect(paths.filter((p) => p === 'shared.ts')).toHaveLength(1);
1041
+ });
1042
+ it('Codex@665: missing origin/main merge-base falls back gracefully to dirty paths only', () => {
1043
+ const deps = makeDeps({
1044
+ git: {
1045
+ 'git branch --show-current': 'b',
1046
+ 'git rev-parse --short HEAD': 'c',
1047
+ 'git diff --name-only HEAD': 'only-dirty.ts',
1048
+ 'git merge-base HEAD origin/main': undefined, // no origin/main
1049
+ },
1050
+ });
1051
+ const signals = deriveHandshakeStartupSignals(CWD, {}, deps);
1052
+ expect(signals.changedPaths).toEqual(['only-dirty.ts']);
1053
+ });
1054
+ // ── Codex@704: empty-evidence still yields an attribution envelope ──────────
1055
+ it('Codex@704: empty-evidence handshake still returns a signals object with attribution fields', () => {
1056
+ // No task, no scope, no refs, no changed paths — but git still attributes.
1057
+ const deps = makeDeps({
1058
+ git: {
1059
+ 'git branch --show-current': 'lonely-branch',
1060
+ 'git rev-parse --short HEAD': 'cafef00d',
1061
+ // no dirty paths, no merge-base
1062
+ },
1063
+ });
1064
+ const signals = deriveHandshakeStartupSignals(CWD, {}, deps);
1065
+ // NOT {} — the envelope must carry attribution so a domain-unresolved
1066
+ // startup row is emitted and queryable.
1067
+ expect(Object.keys(signals).length).toBeGreaterThan(0);
1068
+ expect(signals.resolverVersion).toBeDefined();
1069
+ expect(signals.branchName).toBe('lonely-branch');
1070
+ expect(signals.commitSha).toBe('cafef00d');
1071
+ // No fabricated evidence — there is genuinely none.
1072
+ expect(signals.changedPaths ?? []).toHaveLength(0);
1073
+ expect(signals.reviewedArtifactRefs ?? []).toHaveLength(0);
1074
+ expect(signals.taskText).toBeUndefined();
1075
+ });
1076
+ it('Codex@704: even with zero git facts the envelope still carries resolverVersion + sourceSurface', () => {
1077
+ const deps = makeDeps({ git: {} }); // every git command fails
1078
+ const signals = deriveHandshakeStartupSignals(CWD, {}, deps);
1079
+ expect(signals.resolverVersion).toBeDefined();
1080
+ expect(signals.sourceSurface).toBe('cli');
1081
+ });
1082
+ // ── Codex@677: briefing refs not starved by broad context cap ───────────────
1083
+ it('Codex@677: a context.md with >=25 IDs still lets a distinct briefing.md ref through', () => {
1084
+ // 25 distinct DEC ids in the broad context file.
1085
+ const contextIds = Array.from({ length: 30 }, (_, i) => `DEC-${1000 + i}`).join(' ');
1086
+ vfs[join(CWD, '.productbrain', 'context.md')] = `Context: ${contextIds}\n`;
1087
+ // A task-specific briefing carrying a ref that does NOT appear in context.
1088
+ vfs[join(CWD, '.productbrain', 'briefing.md')] = 'Briefing for WP-462 — see DEC-9999.\n';
1089
+ const deps = makeDeps({
1090
+ git: {
1091
+ 'git branch --show-current': 'wp462-rcrt-activation',
1092
+ 'git rev-parse --short HEAD': 'abc',
1093
+ },
1094
+ });
1095
+ const signals = deriveHandshakeStartupSignals(CWD, {}, deps);
1096
+ const refs = signals.reviewedArtifactRefs ?? [];
1097
+ // The briefing-specific refs survive despite the flood of context IDs.
1098
+ expect(refs).toContain('WP-462');
1099
+ expect(refs).toContain('DEC-9999');
1100
+ });
1101
+ });
1102
+ //# sourceMappingURL=handshake.test.js.map