@quantiya/codevibe-claude-plugin 2.0.7 → 2.0.8

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 (304) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/server.js +11 -11
  3. package/node_modules/@quantiya/codevibe-core/dist/appsync/appsync-client.d.ts +170 -30
  4. package/node_modules/@quantiya/codevibe-core/dist/appsync/queries.d.ts +2 -0
  5. package/node_modules/@quantiya/codevibe-core/dist/auth/__tests__/keychain-cli.test.d.ts +1 -0
  6. package/node_modules/@quantiya/codevibe-core/dist/auth/keychain-cli.d.ts +6 -0
  7. package/node_modules/@quantiya/codevibe-core/dist/companion-mode/index.d.ts +14 -0
  8. package/node_modules/@quantiya/codevibe-core/dist/credential-broker/oauth-account-lock.d.ts +47 -1
  9. package/node_modules/@quantiya/codevibe-core/dist/crypto/__tests__/open-prompt-id.test.d.ts +1 -0
  10. package/node_modules/@quantiya/codevibe-core/dist/crypto/index.d.ts +1 -0
  11. package/node_modules/@quantiya/codevibe-core/dist/crypto/open-prompt-id.d.ts +36 -0
  12. package/node_modules/@quantiya/codevibe-core/dist/e1/__tests__/prompt-raise.test.d.ts +1 -0
  13. package/node_modules/@quantiya/codevibe-core/dist/e1/index.d.ts +2 -0
  14. package/node_modules/@quantiya/codevibe-core/dist/e1/prompt-raise.d.ts +65 -0
  15. package/node_modules/@quantiya/codevibe-core/dist/index.d.ts +4 -1
  16. package/node_modules/@quantiya/codevibe-core/dist/index.js +4480 -252
  17. package/node_modules/@quantiya/codevibe-core/dist/keychain/__tests__/keychain-manager.test.d.ts +1 -0
  18. package/node_modules/@quantiya/codevibe-core/dist/keychain/__tests__/keychain-migrate.test.d.ts +1 -0
  19. package/node_modules/@quantiya/codevibe-core/dist/keychain/keychain-backend.d.ts +105 -0
  20. package/node_modules/@quantiya/codevibe-core/dist/keychain/keychain-manager.d.ts +17 -3
  21. package/node_modules/@quantiya/codevibe-core/dist/keychain/keychain-migrate.d.ts +46 -0
  22. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/anchored-fs.test.d.ts +1 -0
  23. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/bounded-directory.test.d.ts +1 -0
  24. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/bounded-output.test.d.ts +1 -0
  25. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/durable-directory.test.d.ts +1 -0
  26. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/hosted-class-a-sink.test.d.ts +1 -0
  27. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/process-identity.test.d.ts +1 -0
  28. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/process-tree.test.d.ts +1 -0
  29. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/publication-authority-capability.test.d.ts +1 -0
  30. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/snapshot-merge.test.d.ts +1 -0
  31. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/workspace-authority-fixture.d.ts +3 -0
  32. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/workspace-authority.test.d.ts +1 -0
  33. package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/workspace-materializer.test.d.ts +1 -0
  34. package/node_modules/@quantiya/codevibe-core/dist/local-executor/agentic-disposable-repo.d.ts +23 -6
  35. package/node_modules/@quantiya/codevibe-core/dist/local-executor/agentic-resolve.d.ts +16 -0
  36. package/node_modules/@quantiya/codevibe-core/dist/local-executor/anchored-fs.d.ts +243 -0
  37. package/node_modules/@quantiya/codevibe-core/dist/local-executor/bounded-directory.d.ts +64 -0
  38. package/node_modules/@quantiya/codevibe-core/dist/local-executor/bounded-helper.d.ts +22 -0
  39. package/node_modules/@quantiya/codevibe-core/dist/local-executor/bounded-output.d.ts +11 -0
  40. package/node_modules/@quantiya/codevibe-core/dist/local-executor/class-a-emit.d.ts +13 -1
  41. package/node_modules/@quantiya/codevibe-core/dist/local-executor/durable-directory.d.ts +25 -0
  42. package/node_modules/@quantiya/codevibe-core/dist/local-executor/durable-store.d.ts +217 -25
  43. package/node_modules/@quantiya/codevibe-core/dist/local-executor/hosted-class-a-sink.d.ts +27 -0
  44. package/node_modules/@quantiya/codevibe-core/dist/local-executor/index.d.ts +3 -2
  45. package/node_modules/@quantiya/codevibe-core/dist/local-executor/local-executor-impl.d.ts +159 -69
  46. package/node_modules/@quantiya/codevibe-core/dist/local-executor/process-identity.d.ts +16 -0
  47. package/node_modules/@quantiya/codevibe-core/dist/local-executor/process-tree.d.ts +123 -0
  48. package/node_modules/@quantiya/codevibe-core/dist/local-executor/revert-reconcile.d.ts +4 -0
  49. package/node_modules/@quantiya/codevibe-core/dist/local-executor/revert-runner.d.ts +14 -1
  50. package/node_modules/@quantiya/codevibe-core/dist/local-executor/snapshot-merge.d.ts +124 -0
  51. package/node_modules/@quantiya/codevibe-core/dist/local-executor/task-group-types.d.ts +7 -6
  52. package/node_modules/@quantiya/codevibe-core/dist/local-executor/team-execution-flag.d.ts +2 -2
  53. package/node_modules/@quantiya/codevibe-core/dist/local-executor/track-registry.d.ts +2 -0
  54. package/node_modules/@quantiya/codevibe-core/dist/local-executor/types.d.ts +33 -2
  55. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/build.d.ts +5 -0
  56. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/deploy-preflight.d.ts +2 -0
  57. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/diff-sanity.d.ts +12 -0
  58. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/hostile-grep.d.ts +2 -0
  59. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/lint.d.ts +2 -0
  60. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/shell-runner.d.ts +5 -0
  61. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/source-traceability.d.ts +2 -0
  62. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/tests.d.ts +3 -0
  63. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/typecheck.d.ts +3 -0
  64. package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-runner.d.ts +6 -0
  65. package/node_modules/@quantiya/codevibe-core/dist/local-executor/workspace-authority.d.ts +45 -0
  66. package/node_modules/@quantiya/codevibe-core/dist/local-executor/workspace-materializer.d.ts +27 -0
  67. package/node_modules/@quantiya/codevibe-core/dist/local-executor/workspace-shadow.d.ts +378 -85
  68. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/advisory-attachment-journal.test.d.ts +1 -0
  69. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/planner-offer-e1.test.d.ts +1 -0
  70. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/workspace-shutdown.test.d.ts +1 -0
  71. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/advisory-attachment-journal.d.ts +165 -0
  72. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/attachments.d.ts +47 -58
  73. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/bounded-shutdown.d.ts +6 -0
  74. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cli.js +36938 -27120
  75. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/declared-test-runner.d.ts +21 -2
  76. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/emit-shell-event.d.ts +7 -0
  77. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/explicit-tty-exit.d.ts +1 -2
  78. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/gate-decision-submit.d.ts +11 -0
  79. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/gate-prompts.d.ts +75 -0
  80. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/index.d.ts +3 -0
  81. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/planner-offer-e1.d.ts +97 -0
  82. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/quorum-loop.d.ts +270 -60
  83. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/reducer.d.ts +9 -0
  84. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/task-progress.d.ts +15 -4
  85. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/team-decompose.d.ts +10 -10
  86. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/types.d.ts +32 -2
  87. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/workspace-shutdown.d.ts +27 -0
  88. package/node_modules/@quantiya/codevibe-core/dist/reviewer/output-parser.d.ts +19 -0
  89. package/node_modules/@quantiya/codevibe-core/dist/reviewer/types.d.ts +3 -0
  90. package/node_modules/@quantiya/codevibe-core/dist/reviewer/verdict-classifier.d.ts +1 -0
  91. package/node_modules/@quantiya/codevibe-core/dist/session/session-rekey.d.ts +4 -3
  92. package/node_modules/@quantiya/codevibe-core/dist/substrate/command-runner.d.ts +2 -0
  93. package/node_modules/@quantiya/codevibe-core/dist/substrate/docker.d.ts +7 -32
  94. package/node_modules/@quantiya/codevibe-core/dist/substrate/index.d.ts +0 -1
  95. package/node_modules/@quantiya/codevibe-core/dist/substrate/sandbox-exec.d.ts +0 -13
  96. package/node_modules/@quantiya/codevibe-core/dist/substrate/types.d.ts +7 -2
  97. package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/__tests__/reviewer-credential-preflight.test.d.ts +1 -0
  98. package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/engage-substrate.d.ts +3 -0
  99. package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/index.d.ts +2 -0
  100. package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/reviewer-credential-preflight.d.ts +50 -0
  101. package/node_modules/@quantiya/codevibe-core/dist/test-publication-authority-setup.d.ts +1 -0
  102. package/node_modules/@quantiya/codevibe-core/dist/tool-activity/replay-cursor.d.ts +42 -8
  103. package/node_modules/@quantiya/codevibe-core/dist/types/encryption.d.ts +5 -0
  104. package/node_modules/@quantiya/codevibe-core/dist/types/events.d.ts +5 -0
  105. package/node_modules/@quantiya/codevibe-core/package.json +3 -3
  106. package/node_modules/es-toolkit/CHANGELOG.md +46 -0
  107. package/node_modules/es-toolkit/dist/array/partition.d.mts +5 -4
  108. package/node_modules/es-toolkit/dist/array/partition.d.ts +5 -4
  109. package/node_modules/es-toolkit/dist/array/unzipWith.js +1 -1
  110. package/node_modules/es-toolkit/dist/array/unzipWith.mjs +1 -1
  111. package/node_modules/es-toolkit/dist/browser.global.js +3 -3
  112. package/node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.mts +3 -2
  113. package/node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.ts +3 -2
  114. package/node_modules/es-toolkit/dist/compat/_internal/assignValue.js +2 -3
  115. package/node_modules/es-toolkit/dist/compat/_internal/assignValue.mjs +2 -3
  116. package/node_modules/es-toolkit/dist/compat/_internal/createPadding.js +14 -0
  117. package/node_modules/es-toolkit/dist/compat/_internal/createPadding.mjs +13 -0
  118. package/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js +14 -1
  119. package/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.mjs +14 -1
  120. package/node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js +2 -3
  121. package/node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.mjs +2 -3
  122. package/node_modules/es-toolkit/dist/compat/_internal/regexMultiByte.js +11 -0
  123. package/node_modules/es-toolkit/dist/compat/_internal/regexMultiByte.mjs +11 -0
  124. package/node_modules/es-toolkit/dist/compat/array/every.js +5 -24
  125. package/node_modules/es-toolkit/dist/compat/array/every.mjs +5 -24
  126. package/node_modules/es-toolkit/dist/compat/array/filter.d.mts +7 -3
  127. package/node_modules/es-toolkit/dist/compat/array/filter.d.ts +7 -3
  128. package/node_modules/es-toolkit/dist/compat/array/filter.js +11 -11
  129. package/node_modules/es-toolkit/dist/compat/array/filter.mjs +11 -11
  130. package/node_modules/es-toolkit/dist/compat/array/find.d.mts +10 -6
  131. package/node_modules/es-toolkit/dist/compat/array/find.d.ts +10 -6
  132. package/node_modules/es-toolkit/dist/compat/array/find.js +1 -1
  133. package/node_modules/es-toolkit/dist/compat/array/find.mjs +1 -1
  134. package/node_modules/es-toolkit/dist/compat/array/findIndex.d.mts +0 -1
  135. package/node_modules/es-toolkit/dist/compat/array/findIndex.d.ts +0 -1
  136. package/node_modules/es-toolkit/dist/compat/array/findIndex.js +2 -1
  137. package/node_modules/es-toolkit/dist/compat/array/findIndex.mjs +2 -1
  138. package/node_modules/es-toolkit/dist/compat/array/findLast.d.mts +1 -1
  139. package/node_modules/es-toolkit/dist/compat/array/findLast.d.ts +1 -1
  140. package/node_modules/es-toolkit/dist/compat/array/findLast.js +12 -12
  141. package/node_modules/es-toolkit/dist/compat/array/findLast.mjs +12 -12
  142. package/node_modules/es-toolkit/dist/compat/array/findLastIndex.js +1 -0
  143. package/node_modules/es-toolkit/dist/compat/array/findLastIndex.mjs +1 -0
  144. package/node_modules/es-toolkit/dist/compat/array/flatMap.js +3 -2
  145. package/node_modules/es-toolkit/dist/compat/array/flatMap.mjs +3 -2
  146. package/node_modules/es-toolkit/dist/compat/array/flatMapDepth.js +2 -2
  147. package/node_modules/es-toolkit/dist/compat/array/flatMapDepth.mjs +2 -2
  148. package/node_modules/es-toolkit/dist/compat/array/flatten.d.mts +4 -5
  149. package/node_modules/es-toolkit/dist/compat/array/flatten.d.ts +4 -5
  150. package/node_modules/es-toolkit/dist/compat/array/flatten.js +14 -15
  151. package/node_modules/es-toolkit/dist/compat/array/flatten.mjs +14 -15
  152. package/node_modules/es-toolkit/dist/compat/array/flattenDeep.d.mts +1 -1
  153. package/node_modules/es-toolkit/dist/compat/array/flattenDeep.d.ts +1 -1
  154. package/node_modules/es-toolkit/dist/compat/array/flattenDeep.js +2 -2
  155. package/node_modules/es-toolkit/dist/compat/array/flattenDeep.mjs +2 -2
  156. package/node_modules/es-toolkit/dist/compat/array/flattenDepth.js +18 -2
  157. package/node_modules/es-toolkit/dist/compat/array/flattenDepth.mjs +18 -2
  158. package/node_modules/es-toolkit/dist/compat/array/groupBy.js +5 -4
  159. package/node_modules/es-toolkit/dist/compat/array/groupBy.mjs +4 -3
  160. package/node_modules/es-toolkit/dist/compat/array/includes.js +8 -3
  161. package/node_modules/es-toolkit/dist/compat/array/includes.mjs +8 -3
  162. package/node_modules/es-toolkit/dist/compat/array/intersectionBy.js +12 -5
  163. package/node_modules/es-toolkit/dist/compat/array/intersectionBy.mjs +12 -5
  164. package/node_modules/es-toolkit/dist/compat/array/intersectionWith.js +2 -3
  165. package/node_modules/es-toolkit/dist/compat/array/intersectionWith.mjs +2 -3
  166. package/node_modules/es-toolkit/dist/compat/array/invokeMap.js +3 -7
  167. package/node_modules/es-toolkit/dist/compat/array/invokeMap.mjs +3 -4
  168. package/node_modules/es-toolkit/dist/compat/array/lastIndexOf.js +3 -2
  169. package/node_modules/es-toolkit/dist/compat/array/lastIndexOf.mjs +3 -2
  170. package/node_modules/es-toolkit/dist/compat/array/nth.js +2 -2
  171. package/node_modules/es-toolkit/dist/compat/array/nth.mjs +2 -2
  172. package/node_modules/es-toolkit/dist/compat/array/pullAllWith.js +2 -3
  173. package/node_modules/es-toolkit/dist/compat/array/pullAllWith.mjs +2 -3
  174. package/node_modules/es-toolkit/dist/compat/array/size.js +2 -0
  175. package/node_modules/es-toolkit/dist/compat/array/size.mjs +2 -0
  176. package/node_modules/es-toolkit/dist/compat/array/sortedIndexOf.js +2 -3
  177. package/node_modules/es-toolkit/dist/compat/array/sortedIndexOf.mjs +2 -3
  178. package/node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.js +2 -3
  179. package/node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.mjs +2 -3
  180. package/node_modules/es-toolkit/dist/compat/compat.d.mts +4 -3
  181. package/node_modules/es-toolkit/dist/compat/compat.d.ts +4 -3
  182. package/node_modules/es-toolkit/dist/compat/compat.js +10 -11
  183. package/node_modules/es-toolkit/dist/compat/compat.mjs +10 -11
  184. package/node_modules/es-toolkit/dist/compat/index.d.mts +4 -3
  185. package/node_modules/es-toolkit/dist/compat/index.d.ts +4 -3
  186. package/node_modules/es-toolkit/dist/compat/index.js +10 -9
  187. package/node_modules/es-toolkit/dist/compat/index.mjs +10 -9
  188. package/node_modules/es-toolkit/dist/compat/math/inRange.d.mts +5 -2
  189. package/node_modules/es-toolkit/dist/compat/math/inRange.d.ts +5 -2
  190. package/node_modules/es-toolkit/dist/compat/math/inRange.js +14 -11
  191. package/node_modules/es-toolkit/dist/compat/math/inRange.mjs +14 -11
  192. package/node_modules/es-toolkit/dist/compat/math/maxBy.d.mts +1 -1
  193. package/node_modules/es-toolkit/dist/compat/math/maxBy.d.ts +1 -1
  194. package/node_modules/es-toolkit/dist/compat/math/maxBy.js +18 -4
  195. package/node_modules/es-toolkit/dist/compat/math/maxBy.mjs +18 -4
  196. package/node_modules/es-toolkit/dist/compat/math/minBy.d.mts +1 -1
  197. package/node_modules/es-toolkit/dist/compat/math/minBy.d.ts +1 -1
  198. package/node_modules/es-toolkit/dist/compat/math/minBy.js +18 -4
  199. package/node_modules/es-toolkit/dist/compat/math/minBy.mjs +18 -4
  200. package/node_modules/es-toolkit/dist/compat/object/assign.js +2 -3
  201. package/node_modules/es-toolkit/dist/compat/object/assign.mjs +2 -3
  202. package/node_modules/es-toolkit/dist/compat/object/assignIn.js +2 -3
  203. package/node_modules/es-toolkit/dist/compat/object/assignIn.mjs +2 -3
  204. package/node_modules/es-toolkit/dist/compat/object/assignInWith.js +2 -3
  205. package/node_modules/es-toolkit/dist/compat/object/assignInWith.mjs +2 -3
  206. package/node_modules/es-toolkit/dist/compat/object/assignWith.js +2 -3
  207. package/node_modules/es-toolkit/dist/compat/object/assignWith.mjs +2 -3
  208. package/node_modules/es-toolkit/dist/compat/object/create.js +1 -1
  209. package/node_modules/es-toolkit/dist/compat/object/create.mjs +1 -1
  210. package/node_modules/es-toolkit/dist/compat/object/defaults.js +2 -3
  211. package/node_modules/es-toolkit/dist/compat/object/defaults.mjs +2 -3
  212. package/node_modules/es-toolkit/dist/compat/object/has.js +1 -1
  213. package/node_modules/es-toolkit/dist/compat/object/has.mjs +1 -1
  214. package/node_modules/es-toolkit/dist/compat/object/hasIn.js +1 -1
  215. package/node_modules/es-toolkit/dist/compat/object/hasIn.mjs +1 -1
  216. package/node_modules/es-toolkit/dist/compat/object/unset.js +1 -1
  217. package/node_modules/es-toolkit/dist/compat/object/unset.mjs +1 -1
  218. package/node_modules/es-toolkit/dist/compat/object/values.js +5 -1
  219. package/node_modules/es-toolkit/dist/compat/object/values.mjs +5 -1
  220. package/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js +4 -5
  221. package/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.mjs +4 -5
  222. package/node_modules/es-toolkit/dist/compat/string/camelCase.js +6 -2
  223. package/node_modules/es-toolkit/dist/compat/string/camelCase.mjs +6 -2
  224. package/node_modules/es-toolkit/dist/compat/string/kebabCase.js +2 -2
  225. package/node_modules/es-toolkit/dist/compat/string/kebabCase.mjs +2 -2
  226. package/node_modules/es-toolkit/dist/compat/string/lowerCase.js +2 -2
  227. package/node_modules/es-toolkit/dist/compat/string/lowerCase.mjs +2 -2
  228. package/node_modules/es-toolkit/dist/compat/string/pad.js +10 -3
  229. package/node_modules/es-toolkit/dist/compat/string/pad.mjs +10 -3
  230. package/node_modules/es-toolkit/dist/compat/string/padEnd.js +7 -1
  231. package/node_modules/es-toolkit/dist/compat/string/padEnd.mjs +7 -1
  232. package/node_modules/es-toolkit/dist/compat/string/padStart.js +7 -1
  233. package/node_modules/es-toolkit/dist/compat/string/padStart.mjs +7 -1
  234. package/node_modules/es-toolkit/dist/compat/string/snakeCase.js +2 -2
  235. package/node_modules/es-toolkit/dist/compat/string/snakeCase.mjs +2 -2
  236. package/node_modules/es-toolkit/dist/compat/string/startCase.js +1 -1
  237. package/node_modules/es-toolkit/dist/compat/string/startCase.mjs +1 -1
  238. package/node_modules/es-toolkit/dist/compat/string/template.d.mts +1 -1
  239. package/node_modules/es-toolkit/dist/compat/string/template.d.ts +1 -1
  240. package/node_modules/es-toolkit/dist/compat/string/templateSettings.d.mts +18 -1
  241. package/node_modules/es-toolkit/dist/compat/string/templateSettings.d.ts +18 -1
  242. package/node_modules/es-toolkit/dist/compat/string/templateSettings.js +4 -1
  243. package/node_modules/es-toolkit/dist/compat/string/templateSettings.mjs +5 -1
  244. package/node_modules/es-toolkit/dist/compat/string/truncate.js +2 -9
  245. package/node_modules/es-toolkit/dist/compat/string/truncate.mjs +1 -8
  246. package/node_modules/es-toolkit/dist/compat/string/upperCase.js +2 -2
  247. package/node_modules/es-toolkit/dist/compat/string/upperCase.mjs +2 -2
  248. package/node_modules/es-toolkit/dist/compat/util/eq.d.mts +17 -1
  249. package/node_modules/es-toolkit/dist/compat/util/eq.d.ts +17 -1
  250. package/node_modules/es-toolkit/dist/compat/util/eq.js +19 -1
  251. package/node_modules/es-toolkit/dist/compat/util/eq.mjs +19 -1
  252. package/node_modules/es-toolkit/dist/compat/util/toArray.js +2 -1
  253. package/node_modules/es-toolkit/dist/compat/util/toArray.mjs +2 -1
  254. package/node_modules/es-toolkit/dist/fp/flow.d.mts +213 -0
  255. package/node_modules/es-toolkit/dist/fp/flow.d.ts +213 -0
  256. package/node_modules/es-toolkit/dist/fp/flow.js +50 -0
  257. package/node_modules/es-toolkit/dist/fp/flow.mjs +50 -0
  258. package/node_modules/es-toolkit/dist/fp/index.d.mts +2 -1
  259. package/node_modules/es-toolkit/dist/fp/index.d.ts +2 -1
  260. package/node_modules/es-toolkit/dist/fp/index.js +3 -1
  261. package/node_modules/es-toolkit/dist/fp/index.mjs +3 -2
  262. package/node_modules/es-toolkit/dist/fp/pipe.js +8 -12
  263. package/node_modules/es-toolkit/dist/fp/pipe.mjs +8 -12
  264. package/node_modules/es-toolkit/dist/map/hasValue.js +2 -2
  265. package/node_modules/es-toolkit/dist/map/hasValue.mjs +2 -2
  266. package/node_modules/es-toolkit/dist/predicate/isEqualWith.js +2 -3
  267. package/node_modules/es-toolkit/dist/predicate/isEqualWith.mjs +2 -3
  268. package/node_modules/es-toolkit/dist/string/deburr.js +1 -1
  269. package/node_modules/es-toolkit/dist/string/deburr.mjs +1 -1
  270. package/node_modules/es-toolkit/dist/types/DeepPartial.d.mts +21 -0
  271. package/node_modules/es-toolkit/dist/types/DeepPartial.d.ts +21 -0
  272. package/node_modules/es-toolkit/dist/types/DeepReadonly.d.mts +22 -0
  273. package/node_modules/es-toolkit/dist/types/DeepReadonly.d.ts +22 -0
  274. package/node_modules/es-toolkit/dist/types/NonEmptyArray.d.mts +14 -0
  275. package/node_modules/es-toolkit/dist/types/NonEmptyArray.d.ts +14 -0
  276. package/node_modules/es-toolkit/dist/types/Simplify.d.mts +18 -0
  277. package/node_modules/es-toolkit/dist/types/Simplify.d.ts +18 -0
  278. package/node_modules/es-toolkit/dist/types/ValueOf.d.mts +14 -0
  279. package/node_modules/es-toolkit/dist/types/ValueOf.d.ts +14 -0
  280. package/node_modules/es-toolkit/dist/types/Writable.d.mts +15 -0
  281. package/node_modules/es-toolkit/dist/types/Writable.d.ts +15 -0
  282. package/node_modules/es-toolkit/dist/types/index.d.mts +7 -0
  283. package/node_modules/es-toolkit/dist/types/index.d.ts +7 -0
  284. package/node_modules/es-toolkit/package.json +23 -7
  285. package/node_modules/es-toolkit/types.d.ts +1 -0
  286. package/node_modules/fs-ext/build/Makefile +347 -0
  287. package/node_modules/fs-ext/build/Release/.deps/Release/fs_ext.node.d +1 -0
  288. package/node_modules/fs-ext/build/Release/.deps/Release/obj.target/fs_ext/fs-ext.o.d +165 -0
  289. package/node_modules/fs-ext/build/Release/fs_ext.node +0 -0
  290. package/node_modules/fs-ext/build/Release/obj.target/fs_ext/fs-ext.o +0 -0
  291. package/node_modules/fs-ext/build/binding.Makefile +6 -0
  292. package/node_modules/fs-ext/build/config.gypi +503 -0
  293. package/node_modules/fs-ext/build/fs_ext.target.mk +183 -0
  294. package/node_modules/fs-ext/build/gyp-mac-tool +768 -0
  295. package/node_modules/media-typer/README.md +15 -14
  296. package/node_modules/media-typer/index.js +0 -8
  297. package/node_modules/media-typer/package.json +16 -12
  298. package/package.json +2 -2
  299. package/node_modules/@quantiya/codevibe-core/dist/substrate/git-proxy.d.ts +0 -35
  300. package/node_modules/es-toolkit/dist/_internal/isEqualsSameValueZero.d.mts +0 -17
  301. package/node_modules/es-toolkit/dist/_internal/isEqualsSameValueZero.d.ts +0 -17
  302. package/node_modules/es-toolkit/dist/_internal/isEqualsSameValueZero.js +0 -19
  303. package/node_modules/es-toolkit/dist/_internal/isEqualsSameValueZero.mjs +0 -19
  304. /package/node_modules/@quantiya/codevibe-core/dist/{substrate/__tests__/git-proxy.test.d.ts → appsync/__tests__/refresh-open-prompt-ttl-chunk.test.d.ts} +0 -0
@@ -1,6 +1,7 @@
1
1
  import type { AppSyncClient, TeamTrackRecoveryRow } from '../appsync/appsync-client';
2
2
  import type { Session } from '../types';
3
3
  import type { LocalExecutor } from '../local-executor';
4
+ import type { ClassBInbound } from '../local-executor/types';
4
5
  import type { ImageAttachment } from './types';
5
6
  import { type ImplementorMode } from '../local-executor/implementor-argv';
6
7
  import { type FallbackLadderDeps } from '../substrate-launch/fallback-ladder';
@@ -9,8 +10,9 @@ import type { ConflictResolverContext } from '../local-executor/merge-conflict-r
9
10
  import type { AgentKind } from '../local-executor/types';
10
11
  import type { GateDispatchPayload, ReviewerDispatchPayload, ReviseFeedbackPayload } from '../local-executor/types';
11
12
  import type { TeamTrackFailureReason } from '../local-executor/task-group-types';
12
- import { WorkspaceShadow, type ShadowEnv } from '../local-executor/workspace-shadow';
13
+ import { WorkspaceShadow, type RecoveredShadow, type ShadowCleanupResidue, type ShadowEnv } from '../local-executor/workspace-shadow';
13
14
  import type { RevertManifestStore } from '../local-executor/durable-store';
15
+ import { captureWorkspaceRootAuthority } from '../local-executor/workspace-authority';
14
16
  import { type TeamExecution } from '../local-executor/team-execution-flag';
15
17
  import { type RenderedConflict, type TrackIntentDiff } from '../local-executor/wb2-review-bundle';
16
18
  import { ReviewerRegistry } from '../reviewer/registry';
@@ -322,12 +324,10 @@ export interface QuorumLoopDeps {
322
324
  * agent reviewer runs INSIDE the sandbox with no ambient vendor creds and a
323
325
  * broker-routed model call — closing the CP-14 §8/§13 reviewer-sandbox gap.
324
326
  * ABSENT (legacy / companion / tests) → reviewers take the legacy unsandboxed
325
- * path BYTE-IDENTICAL (§7 non-regression). Reviewer-sandboxing is ALSO gated
326
- * behind an opt-in env flag (`CODEVIBE_SANDBOX_REVIEWERS=1`, read in
327
- * `engageSeatSubstrate` on the `spawnOneSeat` path) that DEFAULTS OFF — so
328
- * even when this engager is wired,
329
- * reviewers stay on the legacy path until the broker round-trip is observed
330
- * green in a configured env (see `reviewerSandboxingEnabled`). The flag is
327
+ * path BYTE-IDENTICAL (§7 non-regression). Reviewer-sandboxing DEFAULTS ON
328
+ * when this engager is wired (R7 A4), with an operator opt-out env flag
329
+ * (`CODEVIBE_SANDBOX_REVIEWERS=0`, read in `engageSeatSubstrate` on the
330
+ * `spawnOneSeat` path see `reviewerSandboxingEnabled`). The flag is
331
331
  * independent of implementor sandboxing (which has its own engager).
332
332
  */
333
333
  engageReviewerSubstrate?: ReviewerSubstrateEngager;
@@ -386,6 +386,22 @@ export interface QuorumLoopDeps {
386
386
  * production uses the defaults (`~/.codevibe/shadow-state`, `os.tmpdir()`).
387
387
  */
388
388
  shadowEnv?: ShadowEnv;
389
+ /**
390
+ * Deterministic recovery seams. Production omits this object and uses the
391
+ * imported filesystem implementations. Tests may park an exact recovery
392
+ * await to prove the session-disposal admission/drain boundary without
393
+ * weakening any production timeout or filesystem check.
394
+ */
395
+ shadowRecoveryOps?: {
396
+ listRecoverableShadows?: (env: ShadowEnv) => Promise<RecoveredShadow[]>;
397
+ listShadowCleanupResidue?: (taskIds: ReadonlySet<string>, env: ShadowEnv) => Promise<ShadowCleanupResidue[]>;
398
+ captureWorkspaceRootAuthority?: typeof captureWorkspaceRootAuthority;
399
+ reopenShadow?: (recovered: RecoveredShadow, env: ShadowEnv) => Promise<WorkspaceShadow | null>;
400
+ reapOrphanShadows?: (keepTaskIds: ReadonlySet<string>, env: ShadowEnv) => Promise<{
401
+ reaped: string[];
402
+ retained: string[];
403
+ }>;
404
+ };
389
405
  /**
390
406
  * CP-1.f execute-first (#EF-1 / #SR-2) — surface a user-visible halt /
391
407
  * fail-closed message to the orchestration timeline. Wired by the shell to an
@@ -463,8 +479,10 @@ export interface QuorumLoopDeps {
463
479
  *
464
480
  * SECURITY INVARIANT: events carry ONLY counts/labels/paths/elapsed — never
465
481
  * diff content, file contents, reviewer reasoning, prompts, or any decrypted
466
- * plaintext (the `TaskProgressEvent` union is the allowlist). The loop wraps
467
- * every emit so a throwing listener can NEVER break the loop.
482
+ * plaintext (the `TaskProgressEvent` union is the allowlist, with its ONE
483
+ * documented exception: `halt_notice.message`, controlled operational notice
484
+ * text from `surfaceHalt` — see task-progress.ts's header carve-out). The
485
+ * loop wraps every emit so a throwing listener can NEVER break the loop.
468
486
  */
469
487
  onProgress?: OnProgress;
470
488
  /**
@@ -516,6 +534,21 @@ declare function reviewerAgentToLeAgent(agent: ReviewerAgentKind): AgentKind;
516
534
  * leading token isn't a non-negative integer.
517
535
  */
518
536
  export declare function numericSeatId(resolvedSeatId: string): number | null;
537
+ interface TeamRunAuthority {
538
+ taskGroupId: string;
539
+ trackIndex: number;
540
+ dispatchGeneration: number;
541
+ }
542
+ /**
543
+ * Byte-equivalent to the engine's
544
+ * `round0_gate_id_for_track(task, group, track, generation)`.
545
+ *
546
+ * Live GateDispatch packets intentionally carry no mutable "current" pointer.
547
+ * Their deterministic id is the authenticated correlation between the signed
548
+ * TrackAssigned generation and the signed GateDispatch. Keeping the formula
549
+ * here closes packet-order races without extending or weakening the wire.
550
+ */
551
+ export declare function teamRound0GateId(taskId: string, taskGroupId: string, trackIndex: number, dispatchGeneration: number): string;
519
552
  export declare class QuorumLoop {
520
553
  private readonly deps;
521
554
  private readonly sleep;
@@ -585,6 +618,8 @@ export declare class QuorumLoop {
585
618
  * share a `trackIndex` overwrite each other's brief.
586
619
  */
587
620
  private teamBriefsByKey;
621
+ /** Recovery-authored briefs keyed by task/group/index/generation authority. */
622
+ private readonly recoveredBriefsByAuthority;
588
623
  private readonly activeBriefByTask;
589
624
  /**
590
625
  * CP-1.f revise-context fix (dogfood task 2ac68708, 2026-06-11) — the BINDING
@@ -674,6 +709,60 @@ export declare class QuorumLoop {
674
709
  * desktop suppression closes the late-LOCAL-submit race. Keyed by taskId.
675
710
  */
676
711
  private readonly activeImplementorByTask;
712
+ /** Spawn requests that own a shadow but have not yet returned a killable handle. */
713
+ private readonly pendingImplementorByTask;
714
+ /**
715
+ * Exact lifecycle ownership keyed by gate, including an older generation
716
+ * displaced from the per-task "current" maps above. Group halt and session
717
+ * teardown enumerate these registries so every real pending/active process
718
+ * remains abortable until its own round releases ownership.
719
+ */
720
+ private readonly activeImplementorByGate;
721
+ private readonly pendingImplementorByGate;
722
+ /**
723
+ * Full implementor-round coroutines owned by this session. Process handles
724
+ * cover only the agent subprocess; capture, validation, submission, and
725
+ * failure cleanup continue after that leader exits. Session teardown must
726
+ * await this set before deleting any workspace those continuations can use.
727
+ */
728
+ private readonly implementorRoundPromises;
729
+ /** Exact task ownership for group-local cancellation/drain (no unrelated wait). */
730
+ private readonly implementorRoundPromisesByTask;
731
+ /**
732
+ * Team GateDispatch callbacks admitted before their first await. Supersede,
733
+ * terminal group halt, and session teardown drain this exact registry before
734
+ * retiring snapshots, closing the pre-round ownership gap.
735
+ */
736
+ private readonly teamDispatchAdmissionsByTask;
737
+ /**
738
+ * Per-task registration tail. Every caller publishes its immutable gate /
739
+ * generation intent before joining this queue, so a successor gate received
740
+ * while an earlier registration drains is still correlated exactly.
741
+ */
742
+ private readonly teamTaskRegistrationByTask;
743
+ /** Exact deterministic gate authority, retained through retirement for stale replay refusal. */
744
+ private readonly teamGateBindingByRunId;
745
+ /** All queued/active registration intents, used to publish successor fences synchronously. */
746
+ private readonly teamRegistrationIntentsByTask;
747
+ /** Terminal group ids: set synchronously before any halt await or side effect. */
748
+ private readonly haltedTeamGroups;
749
+ /** Exact non-terminal generation fences retained after a newer dispatch wins. */
750
+ private readonly supersededTeamRuns;
751
+ /**
752
+ * Task ids whose old generation is being aborted/drained before its newer
753
+ * brief is installed. GateDispatch buffers behind this synchronous barrier.
754
+ */
755
+ private readonly supersedingTeamTaskIds;
756
+ /**
757
+ * Child task ids observed for a terminal group. GateDispatch carries only the
758
+ * child task id, so this closes the post-halt/no-brief replay path: after the
759
+ * brief is retired, a late dispatch is rejected instead of being buffered as
760
+ * an apparently early packet. A successful registration for a different,
761
+ * non-halted group clears the tombstone, which keeps task-id reuse safe.
762
+ */
763
+ private readonly haltedTeamTaskIds;
764
+ /** Serializes exact group bundle publication against the terminal halt fence. */
765
+ private readonly teamBundleOpsByGroup;
677
766
  /**
678
767
  * PHASE-CP-10-MIN (#585) §2.3 / #C10M-16 — offers already resumed (the
679
768
  * dedupe set; keyed on `offer_id`, the same axis as the audit slot #C10M-4).
@@ -724,6 +813,8 @@ export declare class QuorumLoop {
724
813
  * cardinality is bounded by those same dedup sets).
725
814
  */
726
815
  private readonly taskByGateId;
816
+ /** Exact immutable team generation that authored each team gate. */
817
+ private readonly teamAuthorityByGateId;
727
818
  /**
728
819
  * GATE_DISPATCH `gateRunId`s already consumed (idempotent re-delivery dedup).
729
820
  * A sweeper / WS re-deliver of the SAME round-0 dispatch must NOT double-spawn
@@ -747,18 +838,25 @@ export declare class QuorumLoop {
747
838
  */
748
839
  private readonly recoveredGateRunIds;
749
840
  /**
750
- * §4.1 — DURABLE per-track tombstone for a present-but-CORRUPT brief
841
+ * §4.1 — in-session per-authority tombstone for a present-but-CORRUPT brief
751
842
  * ciphertext (decrypt threw during recovery PASS 1). Blocks BOTH recovery
752
843
  * relaunch (PASS 2) AND any future LIVE `TrackAssigned`/drain for that track
753
844
  * (§4.3) — a corrupt brief must NEVER spawn an empty-brief implementor on
754
845
  * EITHER path. The track times out via the engine sweeper (bounded). Distinct
755
846
  * from a `null` `encryptedBrief` (a legit empty brief).
756
847
  *
757
- * CP-12 W4 (#593 Stage-2 r2): keyed by the COMPOSITE `teamBriefKey(taskGroupId,
758
- * trackIndex)`, NOT bare `trackIndex` B.2 aggregates across groups, so a
759
- * tombstone on group A's track 0 must not block group B's (valid) track 0.
848
+ * Round 46: keyed by complete `(taskGroupId, trackIndex, taskId,
849
+ * dispatchGeneration)` authority, so a corrupt predecessor cannot block a
850
+ * clean successor that reuses the slot.
760
851
  */
761
852
  private readonly corruptBriefTracks;
853
+ /**
854
+ * The newest fully validated recovery authority seeded for each group/index
855
+ * slot. It prevents an asynchronously late, older recovery response (or stale
856
+ * live TrackAssigned) from replacing the brief selected for a newer
857
+ * generation. The actual tombstone remains keyed by the complete authority.
858
+ */
859
+ private readonly recoveryAuthorityBySlot;
762
860
  /**
763
861
  * #592 PROVENANCE GUARD (2026-06-26) — the task-group ids THIS desktop
764
862
  * ORIGINATED (recorded in `armB1Recovery`, right after a successful
@@ -775,11 +873,12 @@ export declare class QuorumLoop {
775
873
  */
776
874
  private readonly ownedGroupIds;
777
875
  /**
778
- * CP-12 W4 (#593 Stage-2 r2) the composite key for `teamBriefsByKey` +
779
- * `corruptBriefTracks`. `(taskGroupId, trackIndex)` so two in-flight groups
780
- * that share a `trackIndex` (B.2 aggregates session-wide) never collide.
876
+ * Slot key for parse-time briefs and the selected recovery projection.
877
+ * Deletion/launch authority never uses this key alone.
781
878
  */
782
879
  private teamBriefKey;
880
+ private recoveryAuthorityKey;
881
+ private isCorruptBriefAuthority;
783
882
  /**
784
883
  * PHASE-589/469 W3.1 (C1) — the GROUP-WIDE monotonic promote-order counter,
785
884
  * keyed by `taskGroupId`. Each team track promote reserves
@@ -864,6 +963,21 @@ export declare class QuorumLoop {
864
963
  * This also makes concurrent B.1+B.2 safe (no per-op toggle race).
865
964
  */
866
965
  private recoverySeedingDepth;
966
+ /**
967
+ * Every asynchronously delivered session coroutine that can reach a task
968
+ * workspace: Class-B consumption, shadow recovery, and B.1/B.2 team
969
+ * recovery. Admission is synchronous and closes when `shuttingDown` flips.
970
+ * Disposal drains this set before it enumerates task resources, so no
971
+ * accepted callback can mutate a map or filesystem after the boundary.
972
+ */
973
+ private readonly sessionWorkPromises;
974
+ private readonly sessionWorkAdmissions;
975
+ /** TaskAuthorized callbacks accepted before shutdown may finish promotion. */
976
+ private readonly terminalClassBAdmissionsByTask;
977
+ private trackExistingSessionWork;
978
+ private startSessionWork;
979
+ private admittedSessionWorkMayContinue;
980
+ private trackTeamRecovery;
867
981
  /**
868
982
  * §4.3 — TEAM Class B packets buffered while the recovery seed barrier is up
869
983
  * (`recoverySeedingDepth > 0`). Drained through the normal live handlers AFTER
@@ -927,25 +1041,28 @@ export declare class QuorumLoop {
927
1041
  */
928
1042
  private readonly shadowsByTask;
929
1043
  /**
930
- * PHASE-598 (Codex impl-r5 / LOCK #598-11) the REVIEWED diff snapshot per TEAM
931
- * task, stored when a round's gate goes live (reviewers dispatched). `promoteShadow`
932
- * fails-closed if the live shadow drifts from it before promote — the airtight
933
- * backstop for a declared test that spawns a DETACHED writer (the test runner waits
934
- * only on the direct child, so such a writer can mutate the shadow AFTER the
935
- * post-test re-capture passes but BEFORE promote). Presence ⇔ team task: single-impl
936
- * never stores, so its promote path is unchanged. Cleared on promote/discard.
1044
+ * Session-sticky task ids whose snapshots this loop may retire. The set does
1045
+ * not shrink when an in-memory map entry is cleared: normal teardown performs
1046
+ * a fresh durable enumeration and must still recognize an interrupted exact
1047
+ * marker. It also prevents one embedded shell from adopting another shell's
1048
+ * same-workspace snapshot merely because both share a state root.
1049
+ */
1050
+ private readonly workspaceTaskIdsOwned;
1051
+ /**
1052
+ * In-session terminal retirement tombstones. A recovery scan that started
1053
+ * before a terminal discard/promote must not reinstall its stale instance
1054
+ * after that terminal operation wins the task mutex.
1055
+ */
1056
+ private readonly terminallyRetiredWorkspaceTasks;
1057
+ /**
1058
+ * In-memory cache of the crash-durable reviewed artifact for every task. The
1059
+ * authoritative copy lives in the private snapshot marker and is persisted
1060
+ * before submission; promotion always re-reads that copy. Cleared with the
1061
+ * instance on promote/discard.
937
1062
  */
938
1063
  private readonly reviewedSnapshotByTask;
939
1064
  /** Guards concurrent shadow-create for the same task (round-0 + an early re-deliver). */
940
1065
  private readonly shadowCreateInFlight;
941
- /**
942
- * CP-14 Wave A — the ONE pinned base SHA per task group (`worktree_merge`),
943
- * captured (memoized) at the first track of the group BEFORE any shadow is
944
- * created, so EVERY track branches from the same base → a deterministic
945
- * merge-train input (Stage-1 plan-review MED-3). Promise-memoized so concurrent
946
- * track registrations share a single `git rev-parse HEAD`.
947
- */
948
- private readonly groupBaseShaInFlight;
949
1066
  /**
950
1067
  * Per-task async MUTEX for shadow LIFECYCLE mutations (restart-race fix,
951
1068
  * 2026-06-11 Stage-2 Codex r2). A promise-chain serializes EVERY map/stateDir-
@@ -962,10 +1079,12 @@ export declare class QuorumLoop {
962
1079
  * sequencing layer (errors propagate to the OWNING caller, never poison the
963
1080
  * chain for the next op), and clears the entry once the tail it stored is the
964
1081
  * one that settled (so an idle task leaks no entry). The serialized region is
965
- * fs/git-only with NO nested `runExclusiveShadowOp` call (the wrapped methods
1082
+ * filesystem-only with NO nested `runExclusiveShadowOp` call (the wrapped methods
966
1083
  * never call each other), so it cannot self-deadlock.
967
1084
  */
968
1085
  private readonly shadowOpsByTask;
1086
+ /** Once set, no new implementor workspace may be created for this session. */
1087
+ private shuttingDown;
969
1088
  /**
970
1089
  * Serialize one shadow lifecycle op for `taskId` behind any in-flight op for
971
1090
  * the same task. The op's result/rejection is returned to ITS caller; a
@@ -974,6 +1093,30 @@ export declare class QuorumLoop {
974
1093
  * appended is still the current tail (no later op queued behind us).
975
1094
  */
976
1095
  private runExclusiveShadowOp;
1096
+ private static sameTeamAuthority;
1097
+ private static teamAuthorityKey;
1098
+ private static teamAuthorityForEntry;
1099
+ private static immutableTeamTaskEntry;
1100
+ private static sameTeamTaskEntry;
1101
+ private publishTeamRegistrationIntent;
1102
+ private releaseTeamRegistrationIntent;
1103
+ private refreshTeamSupersedingFence;
1104
+ private hasQueuedNewerTeamRegistration;
1105
+ private retireTeamGateBindings;
1106
+ private teamAuthorityForTask;
1107
+ private teamRunIsHalted;
1108
+ private teamEntryMayContinue;
1109
+ private admitTeamDispatch;
1110
+ private drainTeamDispatchAdmissions;
1111
+ private runTeamBundlePublication;
1112
+ /**
1113
+ * Retire one older team dispatch generation before installing its successor.
1114
+ * The exact authority fence is published synchronously, then every pending /
1115
+ * active real handle and the complete round continuation is drained. The old
1116
+ * snapshot is removed only after process ownership is proven empty.
1117
+ */
1118
+ private retireSupersededTeamRun;
1119
+ private rememberWorkspaceLifecycleFailure;
977
1120
  /**
978
1121
  * The last terminal workspace outcome (promote / discard) this loop applied,
979
1122
  * for the `summarize_current_status` shell answer (Fix 2). RELATIVE file paths
@@ -1048,6 +1191,15 @@ export declare class QuorumLoop {
1048
1191
  } | {
1049
1192
  kind: 'discarded';
1050
1193
  } | null;
1194
+ /**
1195
+ * Session-owned Class-B ingress. The subscription calls this wrapper instead
1196
+ * of invoking the LocalExecutor directly, making delivery admission atomic
1197
+ * with the teardown fence. A packet accepted before shutdown is drained;
1198
+ * packets delivered after shutdown are ignored before verification or side
1199
+ * effects. TaskAuthorized gets a narrow terminal admission so its already-
1200
+ * delivered promote can finish before disposal enumerates the task.
1201
+ */
1202
+ consumeClassB(packet: ClassBInbound, envelopeTaskId?: string): Promise<void>;
1051
1203
  /** The DI callbacks the shell wires into its ClassBConsumer. */
1052
1204
  classBConsumerDeps(): {
1053
1205
  classBSignatureVerifier: (packet: import('../local-executor/types').ClassBInbound) => Promise<boolean>;
@@ -1144,14 +1296,15 @@ export declare class QuorumLoop {
1144
1296
  */
1145
1297
  setTeamAttachments(taskGroupId: string, attachments: ImageAttachment[]): void;
1146
1298
  /**
1147
- * CP-12 W2.b (§3.C.3) — read the brief for `(taskGroupId, trackIndex)`. The
1299
+ * CP-12 W2.b (§3.C.3) — read the brief for a team track. The
1148
1300
  * `registerTeamTask` bridge (wired in the shell) reads this when `TrackAssigned`
1149
1301
  * correlates a track to its child `task_id`; recovery PASS 2 reads it for a
1150
1302
  * relaunched track. Empty string when the user issued no `description` for the
1151
1303
  * track (a track with no brief runs an empty-brief round-0; the engine's #EF-1
1152
- * born-halt surfaces it). Composite-keyed (#593 Stage-2 r2) see `teamBriefKey`.
1304
+ * born-halt surfaces it). Recovery callers pass task/generation so the
1305
+ * complete-authority store is consulted; two-argument calls are diagnostic.
1153
1306
  */
1154
- getTeamBrief(taskGroupId: string, trackIndex: number): string;
1307
+ getTeamBrief(taskGroupId: string, trackIndex: number, taskId?: string, dispatchGeneration?: number): string;
1155
1308
  /**
1156
1309
  * CP-12 W2.b (§3.C.3 / M5) — the brief→task_id bridge. `launchTrack` calls this
1157
1310
  * at `TrackAssigned` (the FIRST surface carrying both `track_index` AND the
@@ -1168,10 +1321,19 @@ export declare class QuorumLoop {
1168
1321
  agent: AgentKind;
1169
1322
  taskGroupId: string;
1170
1323
  trackIndex: number;
1324
+ /** Optional only for direct legacy test/recovery callers. */
1325
+ dispatchGeneration?: number;
1326
+ /**
1327
+ * Recovery/direct-call correlation when the caller already has the
1328
+ * engine gate id. Live TrackAssigned callers omit it and use the exact
1329
+ * deterministic engine formula.
1330
+ */
1331
+ gateRunId?: string;
1171
1332
  writePaths: string[];
1172
1333
  autoModifiedFiles: string[];
1173
1334
  testSurfaces: string[];
1174
- }): Promise<void>;
1335
+ }): Promise<'accepted' | 'refused'>;
1336
+ private registerTeamTaskBriefOwned;
1175
1337
  /**
1176
1338
  * CP-12 W2.b (§3.C.2) — the TEAM analogue of the single-impl round-0 spawn.
1177
1339
  * Routes by the OUTER envelope's `task_id` (the payload has none): resolves
@@ -1203,19 +1365,11 @@ export declare class QuorumLoop {
1203
1365
  private replaceShadowForRound0Locked;
1204
1366
  /**
1205
1367
  * CP-14 P1 — the team execution model this session SIGNALS on
1206
- * `createTaskGroup` (`executionModel`). Always `worktree_merge` since the
1207
- * §10 retirement (2026-07-03): overlapping-track dispatch with the
1208
- * merge-train + the server contract gate as the authority.
1368
+ * `createTaskGroup` (`executionModel`). `worktree_merge` is retained as the
1369
+ * wire label; locally it means reviewed bundles integrated in a disposable
1370
+ * filesystem snapshot, with no Git requirement.
1209
1371
  */
1210
1372
  teamExecutionModel(): TeamExecution;
1211
- /**
1212
- * CP-14 Wave A — the ONE pinned group base SHA (memoized): `git rev-parse HEAD`
1213
- * in the workspace, captured at the FIRST track of the group, BEFORE any track
1214
- * shadow/branch is created, so every track roots at the same base (Stage-1
1215
- * MED-3). Concurrent callers share one rev-parse via the in-flight promise.
1216
- * Throws if HEAD can't be resolved (a non-git workspace is ineligible upstream).
1217
- */
1218
- private ensureGroupBaseSha;
1219
1373
  /**
1220
1374
  * CP-1.f execute-first (§4) — ensure the per-task SHADOW exists, creating it
1221
1375
  * BEFORE the round-0 spawn. Idempotent: round-0 + an early GATE_DISPATCH
@@ -1245,6 +1399,8 @@ export declare class QuorumLoop {
1245
1399
  agent: AgentKind;
1246
1400
  sessionKey: string;
1247
1401
  mode?: ImplementorMode;
1402
+ /** Immutable team-generation authority captured at packet admission. */
1403
+ teamAuthority?: TeamRunAuthority;
1248
1404
  /**
1249
1405
  * CP-12 W2.b (§3.C.2b option a / H3) — TEAM only. After `captureDiff` and
1250
1406
  * BEFORE submit, validate every changed file against the track's declared
@@ -1273,6 +1429,7 @@ export declare class QuorumLoop {
1273
1429
  text: string;
1274
1430
  };
1275
1431
  }): Promise<void>;
1432
+ private runImplementorRoundOwned;
1276
1433
  /**
1277
1434
  * Extract the agent's informational stdout summary (audit-only; reviewers
1278
1435
  * never see it — they review the captured diff). Best-effort: a failure to
@@ -1372,6 +1529,21 @@ export declare class QuorumLoop {
1372
1529
  * `TaskGroupHalted` convergence is the authoritative group resolution).
1373
1530
  */
1374
1531
  reportTeamTrackUserResolved(taskId: string, postAction: PostDecisionAction): void;
1532
+ /**
1533
+ * Authoritative TaskGroupHalted bridge from LocalExecutor. Calling this async
1534
+ * method publishes the terminal group fence synchronously (before its first
1535
+ * await), then stops the actual QuorumLoop-owned pending/active implementors,
1536
+ * drains their complete round coroutines and bundle publications, and retires
1537
+ * every exact snapshot for the halted generation.
1538
+ */
1539
+ haltTeamTaskGroup(input: {
1540
+ taskGroupId: string;
1541
+ members: readonly {
1542
+ taskId: string;
1543
+ trackIndex: number;
1544
+ dispatchGeneration: number;
1545
+ }[];
1546
+ }): Promise<void>;
1375
1547
  /**
1376
1548
  * CP-1.f execute-first — discard the task's shadow (a non-TaskAuthorized
1377
1549
  * terminal). Best-effort: a teardown failure is logged + leaves the durable
@@ -1420,6 +1592,18 @@ export declare class QuorumLoop {
1420
1592
  * process end — an accepted, documented residual.
1421
1593
  */
1422
1594
  preserveReviseContext?: boolean;
1595
+ /**
1596
+ * P10 E3 r4 (Stage-1 r4 M-1) — set by `onTerminalDecision` for the
1597
+ * `restart_proposal` discard ONLY: the restart reuses the SAME taskId
1598
+ * and runs a fresh round-0, so the `discarded` closer must NOT carry
1599
+ * the taskId (a stamped closer would flip the session-listing record
1600
+ * to 'cancelled' and the M3 no-resurrect guard would lock it there —
1601
+ * even after the restarted task promotes). Deliberately does NOT touch
1602
+ * the revise-context clear or `terminallyRetiredWorkspaceTasks` — a
1603
+ * restart is a fresh round-0 (context cleared as before); ONLY the
1604
+ * listing stamp is suppressed.
1605
+ */
1606
+ taskContinues?: boolean;
1423
1607
  }): Promise<void>;
1424
1608
  private discardShadowLocked;
1425
1609
  /**
@@ -1561,9 +1745,8 @@ export declare class QuorumLoop {
1561
1745
  * path (that defeats the moat).
1562
1746
  *
1563
1747
  * TRI-STATE (decided here, mirroring the implementor LE):
1564
- * 1. No engager wired OR `CODEVIBE_SANDBOX_REVIEWERS` not opted in (DEFAULT
1565
- * OFF; opt in with `=1`/`=true`) → LEGACY (byte-identical non-regression).
1566
- * No badge.
1748
+ * 1. No engager wired OR `CODEVIBE_SANDBOX_REVIEWERS=0` opted out (the gate
1749
+ * DEFAULTS ON R7 A4) → LEGACY (byte-identical non-regression). No badge.
1567
1750
  * 1b. No resolvable taskId (cannot scope a per-task broker) → LEGACY + a
1568
1751
  * reduced-trust badge (Stage-2 r1 Codex LOW — a trust-downgrade must be
1569
1752
  * VISIBLE, never a silent ambient-cred fallback; see
@@ -1596,8 +1779,8 @@ export declare class QuorumLoop {
1596
1779
  private surfaceReviewerReducedTrust;
1597
1780
  /**
1598
1781
  * Wave B §2.1 confinement TRI-STATE for a merge-gate model/reviewer invocation
1599
- * (LOCK #C14-MOAT). Path A: the CP-7 substrate/broker (opted in + a Trusted agent
1600
- * + engage succeeds → a handle; no ambient vendor cred in the child). Path B: a
1782
+ * (LOCK #C14-MOAT). Path A: the CP-7 substrate/broker (not opted out + a Trusted
1783
+ * agent + engage succeeds → a handle; no ambient vendor cred in the child). Path B: a
1601
1784
  * trusted-container boundary (legacy spawn confined by the OUTER container — the
1602
1785
  * dogfood/E2E path). Path C: neither → NOT confined. A path-A engage that
1603
1786
  * throws/reduced-trusts falls through to B/C (both safe: B confined, C refuses),
@@ -1641,8 +1824,9 @@ export declare class QuorumLoop {
1641
1824
  * converting it into a per-slot spawn-time fail-close.
1642
1825
  *
1643
1826
  * Deliberately DECOUPLED from `engageWaveBConfinement` and its
1644
- * `CODEVIBE_SANDBOX_REVIEWERS` opt-in: that flag gates REVIEWER sandboxing
1645
- * (per-seat, `makeConflictModelCaller`, Tier-2) exactly as before — riding
1827
+ * `CODEVIBE_SANDBOX_REVIEWERS` gate (default-ON, `=0` opts out R7 A4):
1828
+ * that flag gates REVIEWER sandboxing (per-seat, `makeConflictModelCaller`,
1829
+ * Tier-2) exactly as before — riding
1646
1830
  * it here made the A1d resolver row unreachable on the default bare host.
1647
1831
  * The ladder select is side-effect-free (no launch, no broker); test seams
1648
1832
  * via `deps.resolverProbeDeps`.
@@ -1660,7 +1844,8 @@ export declare class QuorumLoop {
1660
1844
  * DISPATCH-time engage could establish a confining substrate on this
1661
1845
  * host (a real §6 Q2 ladder tier, or the preserved trusted-container
1662
1846
  * posture). Deliberately DECOUPLED from `engageWaveBConfinement`'s
1663
- * `CODEVIBE_SANDBOX_REVIEWERS` opt-in — that flag gates REVIEWER
1847
+ * `CODEVIBE_SANDBOX_REVIEWERS` gate (default-ON post-R7-A4) — that flag
1848
+ * gates REVIEWER
1664
1849
  * sandboxing (seat/`makeConflictModelCaller`/Tier-2, unchanged), and
1665
1850
  * riding it here made the A1d write-confined resolver row unreachable
1666
1851
  * on the default bare-host path. Unwired → return `null` →
@@ -1760,6 +1945,26 @@ export declare class QuorumLoop {
1760
1945
  * re-delivered packet (or the next live edge) promotes it.
1761
1946
  */
1762
1947
  recoverShadows(): Promise<void>;
1948
+ private recoverShadowsOwned;
1949
+ /**
1950
+ * Session-exit ownership boundary. Stop future creates, wait behind every
1951
+ * in-flight per-task lifecycle operation, then synchronously reclaim each
1952
+ * live snapshot. Startup TTL cleanup remains only the SIGKILL/power-loss
1953
+ * fallback, not normal lifecycle management.
1954
+ */
1955
+ private reconcileUnresolvedBundleRetention;
1956
+ private retireExactShadow;
1957
+ /**
1958
+ * Strict, exhaustive cleanup for task ids this loop owns. It first attempts
1959
+ * every mapped exact instance, then performs a fresh authenticated marker
1960
+ * enumeration and reopens/retire any same-task instance absent from memory.
1961
+ * A final fresh enumeration is the convergence proof. Live foreign owners and
1962
+ * unresolved authority are preserved, but returned as explicit failures.
1963
+ */
1964
+ private cleanupOwnedTaskSnapshots;
1965
+ disposeWorkspaces(opts?: {
1966
+ strict?: boolean;
1967
+ }): Promise<void>;
1763
1968
  /**
1764
1969
  * §4.3 — true while a team recovery is seeding briefs (the startup barrier is
1765
1970
  * down). The Class B consume path checks this to BUFFER a live TEAM packet
@@ -1769,17 +1974,18 @@ export declare class QuorumLoop {
1769
1974
  */
1770
1975
  isRecoverySeeding(): boolean;
1771
1976
  /**
1772
- * §4.3 (Stage-2 r1 Codex MED) — true if `(taskGroupId, trackIndex)` carries a
1773
- * corrupt-brief TOMBSTONE. The LE consults this at the TOP of `launchTrack`
1977
+ * §4.3 (Stage-2 r1 Codex MED) — true if the complete team generation carries
1978
+ * a corrupt tombstone or is stale relative to recovered authority. The LE
1979
+ * consults this at the TOP of `launchTrack`
1774
1980
  * (before any register / spawn / lease-renewing progress emit) so a tombstoned
1775
1981
  * track is refused on the LIVE path as early as on the recovery path — never
1776
1982
  * spawning an empty-brief implementor or mutating registry state for it. The
1777
1983
  * engine sweeper times the un-launched track out (bounded).
1778
1984
  *
1779
- * CP-12 W4 (#593 Stage-2 r2): keyed by `(taskGroupId, trackIndex)` so a corrupt
1780
- * brief in group A never blocks a different group B's track with the same index.
1985
+ * Production supplies taskId + dispatchGeneration. The optional form remains
1986
+ * only for backward-compatible diagnostics/tests.
1781
1987
  */
1782
- isTrackTombstoned(taskGroupId: string, trackIndex: number): boolean;
1988
+ isTrackTombstoned(taskGroupId: string, trackIndex: number, taskId?: string, dispatchGeneration?: number): boolean;
1783
1989
  /**
1784
1990
  * #592 PROVENANCE GUARD (live path) — true if `taskGroupId` is a team group this
1785
1991
  * desktop did NOT originate AND this desktop owns ≥1 group. Wired to the LE's
@@ -1883,6 +2089,8 @@ export declare class QuorumLoop {
1883
2089
  * so this method just seeds + relaunches (it is always invoked under a barrier
1884
2090
  * that is already down, and may run multiple times within one barrier window).
1885
2091
  */
2092
+ private normalizeTeamRecoveryRow;
2093
+ private normalizeTeamRecoveryRows;
1886
2094
  recoverTeamTracks(rows: TeamTrackRecoveryRow[]): Promise<void>;
1887
2095
  /**
1888
2096
  * §4.1 PASS 2 (one row) — validate → recoverLaunchTrack → repair-on-duplicate →
@@ -2047,6 +2255,7 @@ export declare class QuorumLoop {
2047
2255
  decision: string;
2048
2256
  action: PostDecisionAction;
2049
2257
  }): Promise<void>;
2258
+ private onApplyUserDecisionEchoOwned;
2050
2259
  /**
2051
2260
  * #585 §3.5 / #C10M-11/13 — resume the task with the user's chosen agent.
2052
2261
  * The SERVER has ALREADY minted the `nextGateId` row + advanced to
@@ -2063,6 +2272,7 @@ export declare class QuorumLoop {
2063
2272
  resumeFromContinuation(input: {
2064
2273
  taskId: string;
2065
2274
  targetAgent: AgentKind;
2275
+ sourceGateId?: string;
2066
2276
  nextGateId: string;
2067
2277
  nextRound: number;
2068
2278
  }): Promise<boolean>;
@@ -6,3 +6,12 @@ export declare const CONVERSATION_BUFFER_MAX = 500;
6
6
  * mutates `state` in place. Map fields are cloned via `new Map(state.x)`.
7
7
  */
8
8
  export declare function reducer(state: OrchestrationState, action: OrchestrationAction): OrchestrationState;
9
+ /**
10
+ * P10 E3 r6/r8 — "is a single-implementor task actually running?" from the
11
+ * TRUTHFUL `sessionTasks` lifecycle (the task-end closers terminalize it;
12
+ * `runningTasks` never terminalizes in production and is kept ONLY for the
13
+ * decision-spawned-a-task size heuristic). Shared by the `/status` running
14
+ * line, `deriveCurrentTaskState` (the planner packet), and the reviewer-line
15
+ * SET guard below.
16
+ */
17
+ export declare function hasRunningSingleTask(state: OrchestrationState): boolean;
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * One desktop-local progress phase. Discriminated by `phase`. Every variant is
3
- * counts + labels + paths only — NEVER plaintext (see the module invariant).
3
+ * counts + labels + paths only — never workspace/diff/reasoning plaintext
4
+ * with the module invariant's ONE documented exception: `halt_notice.message`
5
+ * (controlled operational notice text; see the header + the entry's carve-out).
4
6
  */
5
7
  export type TaskProgressEvent = ({
6
8
  phase: 'shadow_created';
@@ -43,6 +45,7 @@ export type TaskProgressEvent = ({
43
45
  phase: 'round_failed';
44
46
  round: number;
45
47
  reason: string;
48
+ taskId?: string;
46
49
  } | {
47
50
  phase: 'continuation_offered';
48
51
  round: number;
@@ -57,10 +60,12 @@ export type TaskProgressEvent = ({
57
60
  } | {
58
61
  phase: 'promoted';
59
62
  files: number;
63
+ taskId?: string;
60
64
  } | {
61
65
  phase: 'discarding';
62
66
  } | {
63
67
  phase: 'discarded';
68
+ taskId?: string;
64
69
  } | {
65
70
  phase: 'waiting_user';
66
71
  } | {
@@ -71,6 +76,9 @@ export type TaskProgressEvent = ({
71
76
  phase: 'agent_advisory';
72
77
  } | {
73
78
  phase: 'progress_cleared';
79
+ } | {
80
+ phase: 'halt_notice';
81
+ message: string;
74
82
  }) & {
75
83
  epoch?: number;
76
84
  tokens?: number;
@@ -109,9 +117,12 @@ export declare function formatTokens(n: number): string;
109
117
  */
110
118
  export declare function isSpinnerPhase(phase: TaskProgressEvent['phase']): boolean;
111
119
  /**
112
- * Render the user-facing ONE-LINE text for a progress event. Pure (no plaintext
113
- * — only counts/labels/paths/elapsed). The TUI shows spinner phases as an
114
- * ephemeral live line and milestone phases as persisted scrollback entries.
120
+ * Render the user-facing ONE-LINE text for a progress event. Pure. No
121
+ * workspace/diff/reasoning plaintext — counts/labels/paths/elapsed, plus the
122
+ * module invariant's ONE documented exception: `halt_notice` renders its
123
+ * controlled operational `message` verbatim (see the header carve-out). The
124
+ * TUI shows spinner phases as an ephemeral live line and milestone phases as
125
+ * persisted scrollback entries.
115
126
  */
116
127
  export declare function renderProgressLine(event: TaskProgressEvent): string;
117
128
  /**