@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
@@ -26,33 +26,37 @@ export interface InReviewAssignment {
26
26
  * recovery-row type — NOT an extension of the live `TrackAssignedPayload` (so the
27
27
  * live Class B contract stays unpolluted). Mirrors the engine handler's camelCase
28
28
  * `TeamTrackRecoveryRow` serde:
29
- * - ALWAYS present: `taskGroupId`, `trackIndex`, `relaunch`, and `encryptedBrief?`
29
+ * - ALWAYS present: `taskGroupId`, `trackIndex`, `taskId`,
30
+ * `dispatchGeneration`, `relaunch`, and `encryptedBrief?`
30
31
  * (omitted when the track had no description → recovery treats it as an empty
31
- * brief). `taskGroupId` is on EVERY row (seed-only too) so the desktop keys its
32
- * recovered brief + corrupt-brief tombstone by `(taskGroupId, trackIndex)` —
33
- * B.2 aggregates across groups, so a bare `trackIndex` key could cross-blend
34
- * two groups (#593 Stage-2 r2 Codex MEDIUM).
32
+ * brief). The four identity fields bind recovered brief and tombstone
33
+ * authority to `(taskGroupId, trackIndex, taskId, dispatchGeneration)`;
34
+ * reused group/index slots cannot cross-contaminate generations.
35
35
  * - ONLY when `relaunch === true` (flattened at top level): the full live
36
- * `TrackAssigned` wire-field set (`taskId`, `implementorAgent`,
37
- * `ownershipScope`, `isSharedTestOwner`, `stateDir`, `dispatchId`,
38
- * `dispatchGeneration`, `conflictContext`) PLUS recovery metadata (`gateRunId`,
36
+ * `TrackAssigned` wire-field set (the always-present identity fields plus
37
+ * `implementorAgent`, `ownershipScope`, `isSharedTestOwner`, `stateDir`,
38
+ * `dispatchId`, `conflictContext`) and recovery metadata (`gateRunId`,
39
39
  * `gateType`). These camelCase keys are byte-identical to the live
40
40
  * `TrackAssigned` Class B packet, so `normalizeTrackAssignedWire(row)` accepts
41
41
  * a relaunch row directly (it picks the expected keys and ignores the extras).
42
42
  *
43
43
  * Typed loosely (`unknown` payload past the always-present fields) because the
44
- * relaunch keys are present-or-absent; the recovery loop runs the shared
45
- * `normalizeTrackAssignedWire` + `isValidTrackAssignedPayload` validators on the
46
- * raw row (never a divergent second validator), so the SDK does not re-type them.
44
+ * relaunch keys are present-or-absent. Recovery first validates complete row
45
+ * shape/correlation, then runs the shared `normalizeTrackAssignedWire` +
46
+ * `isValidTrackAssignedPayload` live validators.
47
47
  */
48
48
  export interface TeamTrackRecoveryRow {
49
49
  /**
50
50
  * The owning task group's id — present on EVERY row (seed-only + relaunch) so
51
- * recovered briefs + tombstones key by `(taskGroupId, trackIndex)` and B.2's
52
- * cross-group aggregation can't collide on a shared `trackIndex` (#593 r2).
51
+ * recovered rows carry complete authority, so B.2's cross-group aggregation
52
+ * cannot collide on a shared `trackIndex`.
53
53
  */
54
54
  taskGroupId: string;
55
55
  trackIndex: number;
56
+ /** Child task identity; present on seed-only and relaunch rows. */
57
+ taskId: string;
58
+ /** Current u32 dispatch generation; present on every recovery row. */
59
+ dispatchGeneration: number;
56
60
  /** Bare base64 ciphertext; absent when the track had no description. */
57
61
  encryptedBrief?: string;
58
62
  relaunch: boolean;
@@ -89,6 +93,15 @@ export interface PutContextItemInput {
89
93
  trackId?: string;
90
94
  ciphertext: string;
91
95
  }
96
+ /** Host-emittable audit surface used by the signed Class A transport. */
97
+ export interface RecordExecutionEventInput {
98
+ taskId: string;
99
+ sessionId: string;
100
+ kind: 'TASK_CREATED' | 'TASK_TERMINATED' | 'PROGRESS_EVENT' | 'TOOL_USE' | 'DESTRUCTIVE_ACTION_ESCALATED' | 'FLAG_BAD_APPROVAL';
101
+ /** Free-form JSON; encrypted before crossing AppSync. */
102
+ payload: unknown;
103
+ dedupKeyHex: string;
104
+ }
92
105
  /**
93
106
  * PHASE-CP-1-F.1 Part A (LOCK L2) — tolerant `AWSJSON!` object read.
94
107
  *
@@ -133,6 +146,42 @@ export interface TaskReviewSummaryReviewer {
133
146
  reasoning: string;
134
147
  /** ReviewerVerdict.suggested_changes (may be empty). */
135
148
  suggestedChanges: string[];
149
+ /** Non-blocking observations that did not request another revision. */
150
+ residualObservations?: string[];
151
+ }
152
+ export interface TaskReviewSummaryRequirements {
153
+ problem: string;
154
+ expectedOutputs: string[];
155
+ }
156
+ export interface TaskReviewSummaryImplementor {
157
+ agent: string;
158
+ trackIndex?: number;
159
+ taskId: string;
160
+ }
161
+ export interface TaskReviewSummaryQuorumSeat {
162
+ seatId: number;
163
+ role: string;
164
+ agent: string;
165
+ }
166
+ export interface TaskReviewSummaryQuorum {
167
+ seats: TaskReviewSummaryQuorumSeat[];
168
+ roundCount: number;
169
+ revisionCount: number;
170
+ }
171
+ export interface TaskReviewSummaryMergeGate {
172
+ applicable: boolean;
173
+ outcome: string;
174
+ resolution?: string;
175
+ }
176
+ export interface TaskReviewSummaryDurations {
177
+ taskElapsedMs?: number;
178
+ reviewerElapsedMs?: number;
179
+ availability: string;
180
+ }
181
+ export interface TaskReviewSummaryTokenUsage {
182
+ knownTotal?: number;
183
+ availability: string;
184
+ unavailableRoles: string[];
136
185
  }
137
186
  /** One round in the per-round summary (decrypted). */
138
187
  export interface TaskReviewSummaryRound {
@@ -153,6 +202,15 @@ export interface TaskReviewSummaryRound {
153
202
  * projection; `truncatedForSize`/`omittedRounds` flag the size-cap degrade.
154
203
  */
155
204
  export interface TaskReviewSummary {
205
+ /** Present on the additive P15 terminal-report shape; absent on legacy v1. */
206
+ schemaVersion?: number;
207
+ requirements?: TaskReviewSummaryRequirements;
208
+ implementors?: TaskReviewSummaryImplementor[];
209
+ reviewQuorum?: TaskReviewSummaryQuorum;
210
+ mergeGate?: TaskReviewSummaryMergeGate;
211
+ durations?: TaskReviewSummaryDurations;
212
+ tokenUsage?: TaskReviewSummaryTokenUsage;
213
+ residualRisks?: string[];
156
214
  rounds: TaskReviewSummaryRound[];
157
215
  /** The resolution that produced the final-approval prompt (normally proceed). */
158
216
  finalOutcome: string;
@@ -282,8 +340,31 @@ export declare class AppSyncClient {
282
340
  */
283
341
  private lastRefreshNetworkError;
284
342
  private pendingRefresh;
343
+ private pendingRefreshCredential;
344
+ /**
345
+ * All five WebSocket watcher families reconcile the same process-wide token
346
+ * cache. Collapse concurrent reconnects onto one bounded durable read /
347
+ * refresh operation so a keyring stall cannot multiply native calls.
348
+ */
349
+ private pendingReconnectReconciliation;
350
+ /**
351
+ * A stopped watcher cancels only its wait on the shared reconciliation. The
352
+ * flight remains live for other watcher families and owns its own deadline.
353
+ */
354
+ private reconnectReconciliationWaiters;
355
+ /**
356
+ * Every in-process credential replacement advances this generation. Async
357
+ * refresh/reconciliation work captures it before starting and may mutate the
358
+ * token cache only while that captured generation is still current.
359
+ */
360
+ private tokenStateGeneration;
285
361
  private lastRefreshFailureAt;
362
+ private lastRefreshFailureCredential;
286
363
  private static readonly REFRESH_BACKOFF_MS;
364
+ /** Bounds the shared Cognito flight even when a transport ignores abort. */
365
+ private static readonly COGNITO_REFRESH_TIMEOUT_MS;
366
+ /** Bounds the durable read and any refresh as one reconnect operation. */
367
+ private static readonly RECONNECT_RECONCILIATION_TIMEOUT_MS;
287
368
  private deviceKeyWatcher;
288
369
  private sessionUpdateWatchers;
289
370
  private applyUserDecisionWatchers;
@@ -322,6 +403,23 @@ export declare class AppSyncClient {
322
403
  /**
323
404
  * Refresh expired tokens
324
405
  */
406
+ private static abortReason;
407
+ private static throwIfAborted;
408
+ /**
409
+ * Bound one stage by its owning operation's absolute deadline. Every stage
410
+ * receives the same `deadlineAtMs`; a storage-backed retry therefore consumes
411
+ * the first attempt's elapsed time instead of acquiring another full timeout.
412
+ * `onTimeout` is used by network stages to abort their transport, while the
413
+ * explicit race remains authoritative when it ignores that signal.
414
+ */
415
+ private static awaitWithinAbsoluteDeadline;
416
+ /**
417
+ * Cancel only this caller's wait. The shared operation remains live for
418
+ * concurrent callers and its owner clears the single-flight slot only when
419
+ * the operation itself settles.
420
+ */
421
+ private static awaitSharedFlightForCaller;
422
+ private replaceTokens;
325
423
  private refreshTokens;
326
424
  /**
327
425
  * Do the work of refreshing tokens. Tries the caller-supplied tokens
@@ -345,25 +443,35 @@ export declare class AppSyncClient {
345
443
  */
346
444
  private callCognitoRefresh;
347
445
  /**
348
- * Apply a successful refresh response: update in-memory cache first,
349
- * clear the backoff sentinel, then persist to storage. Success here
350
- * is defined as "the process has usable fresh tokens in memory" —
351
- * storage persistence is degraded-success, not a failure mode.
446
+ * Apply a successful refresh response to this process's in-memory cache.
447
+ * Cognito's refresh response does not rotate the durable refresh token, so
448
+ * the already-stored credentials remain sufficient to refresh again after a
449
+ * restart.
352
450
  *
353
- * Ordering matters. The API call to Cognito already succeeded, which
354
- * means we hold valid access/id tokens right now. If we delayed the
355
- * in-memory update until after persistence and the keychain write
356
- * threw (keychain locked, disk full, file-backend permission error),
357
- * we'd be stuck with stale-and-known-dead tokens in memory while
358
- * holding valid fresh tokens in local scope that vanish at the end
359
- * of this function. That would re-break both guarantees this hotfix
360
- * makes: no-restart recovery becomes "restart required to escape
361
- * the keychain-lock window," and backoff stays unarmed so the
362
- * caller hot-loops against a working Cognito endpoint — R1's MEDIUM
363
- * on round 1 of this review. Persistence-failure is loud-logged
364
- * so operators can see degraded durability without losing availability.
451
+ * Do not rewrite durable login credentials from this background refresh.
452
+ * Native keychain writes are not cancellable: once a deadline wins, a late
453
+ * write could otherwise overwrite a newer out-of-band login or resurrect
454
+ * credentials deleted by a concurrent logout process. Login/logout remain
455
+ * the sole durable credential writers; refresh remains one bounded,
456
+ * memory-only operation.
365
457
  */
366
458
  private applyRefreshedTokens;
459
+ /**
460
+ * Reconcile durable login credentials with this process's token cache before
461
+ * reconnecting a WebSocket watcher.
462
+ *
463
+ * Background refresh deliberately leaves the durable refresh credential
464
+ * unchanged. When storage still contains the older access/id pair for that
465
+ * same refresh token, a newer non-expired in-memory pair must therefore win;
466
+ * otherwise every reconnect would issue a redundant Cognito refresh. A
467
+ * different stored refresh token is an out-of-band login and remains
468
+ * authoritative.
469
+ */
470
+ private reconcileTokensBeforeReconnect;
471
+ private performReconnectTokenReconciliation;
472
+ private beginReconnectReconciliationWait;
473
+ private finishReconnectReconciliationWait;
474
+ private cancelReconnectReconciliationWait;
367
475
  /**
368
476
  * Check if authenticated
369
477
  */
@@ -387,6 +495,14 @@ export declare class AppSyncClient {
387
495
  * available for retry/diagnosis.
388
496
  */
389
497
  putContextItem(input: PutContextItemInput): Promise<void>;
498
+ /**
499
+ * Persist one host-authenticated execution fact. The payload is encrypted
500
+ * under the task's session key; for team child tasks the backend performs the
501
+ * same conditional write as the audit append to renew that exact track lease.
502
+ */
503
+ recordExecutionEvent(input: RecordExecutionEventInput, sessionKeyBase64: string, options?: {
504
+ signal?: AbortSignal;
505
+ }): Promise<void>;
390
506
  /**
391
507
  * Update a session
392
508
  */
@@ -400,6 +516,16 @@ export declare class AppSyncClient {
400
516
  * Create an event
401
517
  */
402
518
  createEvent(input: CreateEventInput): Promise<Event>;
519
+ /**
520
+ * E1 (§3.1) — liveness TTL co-refresh for the caller's still-open prompt rows
521
+ * (+ their deep-linked Events). Plugins call this heartbeat-driven for their
522
+ * durable open-prompt ledger so a >7-day-open prompt's row is NOT TTL-deleted
523
+ * (under-nag). The backend is scoped to `$ctx.identity.sub` + `attribute_exists`
524
+ * per promptId, so it works post-retirement too. Returns the promptIds whose
525
+ * row/Event had already aged out — the caller re-raises those (§6a-4
526
+ * return-driven re-raise). No-ops on an empty list (no network call).
527
+ */
528
+ refreshOpenPromptTtl(promptIds: string[]): Promise<string[]>;
403
529
  /**
404
530
  * Update event status
405
531
  */
@@ -666,7 +792,9 @@ export declare class AppSyncClient {
666
792
  * real classification; the signing helper is `signMergeClassification` in
667
793
  * `local-executor/class-a-sign.ts`). W2.a ships the SDK surface only.
668
794
  */
669
- submitMergeGateVerdict(input: SubmitMergeGateVerdictInput): Promise<SubmitMergeGateVerdictResult>;
795
+ submitMergeGateVerdict(input: SubmitMergeGateVerdictInput, opts?: {
796
+ signal?: AbortSignal;
797
+ }): Promise<SubmitMergeGateVerdictResult>;
670
798
  /**
671
799
  * PHASE-589/469 W1 (LOCK #589-F) — report that ONE team track HARD-FAILED
672
800
  * its own local gate (a declared-test failure or an out-of-scope write). The
@@ -718,6 +846,7 @@ export declare class AppSyncClient {
718
846
  sessionId: string;
719
847
  decision: PlannerDecision;
720
848
  availableAgents?: string[];
849
+ implementorAgent?: string;
721
850
  }): Promise<{
722
851
  workflowState: string;
723
852
  }>;
@@ -1085,6 +1214,8 @@ export declare class AppSyncClient {
1085
1214
  /** Shared initial confirmation makes duplicate start calls idempotent. */
1086
1215
  private heartbeatInitialPulses;
1087
1216
  private heartbeatInitialOutcomes;
1217
+ /** Every pulse that may still persist a timestamp, including periodic pulses. */
1218
+ private heartbeatInFlight;
1088
1219
  /**
1089
1220
  * Start periodic heartbeat for a session.
1090
1221
  * Updates lastHeartbeatAt on the session every intervalMs (default 2 minutes).
@@ -1095,6 +1226,15 @@ export declare class AppSyncClient {
1095
1226
  * Stop heartbeat for a session.
1096
1227
  */
1097
1228
  stopHeartbeat(sessionId: string): void;
1229
+ /**
1230
+ * Fence every heartbeat generation, wait for already-issued timestamp writes,
1231
+ * then persist an expired timestamp so mobile immediately renders the desktop
1232
+ * disconnected. The ordering is load-bearing: writing the tombstone before an
1233
+ * in-flight pulse settles would let that older pulse make the row look live
1234
+ * again after this method returned.
1235
+ */
1236
+ invalidateHeartbeat(sessionId: string): Promise<boolean>;
1237
+ private trackHeartbeatPulse;
1098
1238
  /**
1099
1239
  * Send a single heartbeat update.
1100
1240
  */
@@ -24,10 +24,12 @@ export declare const queries: {
24
24
  getTaskReviewSummary: string;
25
25
  };
26
26
  export declare const mutations: {
27
+ recordExecutionEvent: string;
27
28
  putContextItem: string;
28
29
  createSession: string;
29
30
  updateSession: string;
30
31
  createEvent: string;
32
+ refreshOpenPromptTtl: string;
31
33
  updateEventStatus: string;
32
34
  registerDeviceKey: string;
33
35
  grantSessionKey: string;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Run the `keychain` subcommand group. Returns the process exit code (does NOT
3
+ * call `process.exit` — the caller does, keeping this unit-testable). `argv` is
4
+ * the raw process argv (node, script, "keychain", subcommand, flags…).
5
+ */
6
+ export declare function runKeychainCli(argv: string[]): Promise<number>;
@@ -53,6 +53,20 @@ export interface CompanionProcessResult {
53
53
  * both PATH alias dependency and a manifest path traversal/symlink escape.
54
54
  */
55
55
  export declare function resolveDeclaredCompanionLauncher(packageJsonPath: string): string | null;
56
+ /**
57
+ * Resolve a Companion plugin manifest from either:
58
+ *
59
+ * 1. this core package's ordinary dependency graph (published install), or
60
+ * 2. the node_modules graph that contains the CLI path used to start Node
61
+ * (local npm-link/dev-link install).
62
+ *
63
+ * Node resolves a symlinked module from its real path by default. Consequently,
64
+ * a locally linked codevibe-core cannot see the plugin siblings that remain
65
+ * under the meta-package's node_modules when it uses lexical `require.resolve`
66
+ * alone. `process.argv[1]` retains the invoked, meta-package-owned CLI path, so
67
+ * a require anchored there reproduces the dependency graph the user launched.
68
+ */
69
+ export declare function resolveCompanionPluginManifest(packageName: string, invokedCliPath?: string | undefined): string | null;
56
70
  /**
57
71
  * §4 LOCK lines 232-273. Detect → resolve → persist → exec.
58
72
  *
@@ -18,6 +18,15 @@ export interface OAuthAccountLockOptions {
18
18
  heartbeatMs?: number;
19
19
  /** Contention deadline. Default 60s. */
20
20
  maxWaitMs?: number;
21
+ /**
22
+ * OWNERLESS-strand grace (F6). A lockdir present with NO readable `owner.json`
23
+ * is a crash strand (mkdir succeeded but the owner write / rmdir did not) that is
24
+ * FENCED-recovered once its mtime has been idle THIS long. Default = 2×TTL — far
25
+ * larger than the sub-millisecond mkdir→owner.json write window, so a live
26
+ * mid-acquire is never mistaken for a strand. Set high to disable recovery in
27
+ * practice.
28
+ */
29
+ ownerlessGraceMs?: number;
21
30
  /** Base retry backoff. Default 25ms (capped 1s). */
22
31
  backoffMs?: number;
23
32
  now?: () => number;
@@ -59,6 +68,7 @@ export declare class OAuthAccountLock {
59
68
  private readonly ttlMs;
60
69
  private readonly heartbeatMs;
61
70
  private readonly maxWaitMs;
71
+ private readonly ownerlessGraceMs;
62
72
  private readonly backoffMs;
63
73
  private readonly now;
64
74
  private readonly delayFn;
@@ -76,7 +86,8 @@ export declare class OAuthAccountLock {
76
86
  * ZERO side effects on the persisted bundle on any fail-closed path.
77
87
  */
78
88
  acquire(): Promise<LockHandle>;
79
- /** Whether the EXISTING lockdir holder is reclaimable (dead), or must be waited on. */
89
+ /** Whether the EXISTING lockdir holder is reclaimable (dead), an ownerless strand
90
+ * (F6), or must be waited on. */
80
91
  private classifyExistingHolder;
81
92
  /**
82
93
  * Reclaim a stale, provably-dead lockdir under the SEPARATE reclaim guard.
@@ -85,9 +96,44 @@ export declare class OAuthAccountLock {
85
96
  * the guard is dead/stranded (fail-closed → offline cleanup).
86
97
  */
87
98
  private tryReclaim;
99
+ /**
100
+ * FENCED recovery of a stranded OWNERLESS lockdir (F6) — the same reclaim-guard
101
+ * mutex + rename primitive as the dead-owner path, so at most one recoverer ever
102
+ * proceeds and no live successor is displaced. Returns a fresh {@link LockHandle}
103
+ * on success, or `null` if aborted (guard held/stranded, an owner appeared, or the
104
+ * dir freshened/vanished under the guard).
105
+ *
106
+ * RESIDUAL (documented): the ONE window this cannot fully close is a live acquirer
107
+ * OS-suspended (SIGSTOP) or GC-frozen for LONGER than `ownerlessGraceMs` precisely
108
+ * within the sub-millisecond gap between its `mkdir(lockDir)` and its
109
+ * `writeFile(owner.json)`. If that acquirer's owner-write lands AFTER our rename +
110
+ * fresh mkdir, it overwrites our `owner.json`; our `reassertOwnership()` (the
111
+ * broker's before-every-mutation backstop) then returns false and we abort — no two
112
+ * committed writers for vendor-key callers. For the keychain file-store lock (which
113
+ * does not reassert) this leaves a vanishingly-narrow two-writer window, strictly
114
+ * better than the previous PERMANENT strand that broke all auth until offline
115
+ * cleanup. The grace (default 2×TTL) makes the precondition astronomically unlikely.
116
+ */
117
+ private tryReclaimOwnerless;
118
+ /** Remove a renamed-away ownerless strand (it holds no owner.json by definition). */
119
+ private removeOwnerlessStaleDir;
88
120
  /** Write `owner.json`, start the heartbeat, and build the handle. */
89
121
  private onAcquired;
90
122
  private tryMkdir;
123
+ /**
124
+ * Tri-state read of a lockdir's owner.json (R4-2). Only a genuine ENOENT is
125
+ * `absent`; a present-but-unreadable (EACCES/EIO/…) or unparseable/invalid file is
126
+ * `unreadable` (fail closed — never treated as ownerless or dead).
127
+ */
128
+ private readOwnerState;
129
+ /**
130
+ * Boolean-owner accessor for the non-recovery paths (heartbeat tick, reassert,
131
+ * release, dead-owner reclaim, stale-dir cleanup): an `unreadable` owner maps to
132
+ * `null`, which is the SAFE direction for every one of those (reassert→false→abort;
133
+ * tick→skip; release→don't touch; dead-reclaim re-read→abort). The
134
+ * ownerless-recovery path uses `readOwnerState` directly so it can tell `absent`
135
+ * (recoverable) from `unreadable` (must wait).
136
+ */
91
137
  private readOwner;
92
138
  private lockDirAge;
93
139
  private removeStaleDir;
@@ -1,3 +1,4 @@
1
1
  export { CryptoService, cryptoService, CryptoError, ENCRYPTION_VERSION } from './crypto-service';
2
2
  export { encryptForEmit } from './encrypt-for-emit';
3
3
  export type { EncryptedEmitPayload } from './encrypt-for-emit';
4
+ export { E1_PROMPT_ID_DOMAIN, deriveOpenPromptId, mintOwnerToken, } from './open-prompt-id';
@@ -0,0 +1,36 @@
1
+ /**
2
+ * E1 "missed-prompt recovery" — the producer-side self-certifying promptId
3
+ * commitment (PHASE-E1-MISSED-PROMPT-RECOVERY-DESIGN.md §3.1 / §4).
4
+ *
5
+ * A producer (a plugin, or core's own planner-offer path) mints a secret
6
+ * `ownerToken` per raise and emits `promptId = deriveOpenPromptId(ownerToken)`.
7
+ * The backend's `classifyRaise` re-derives and admits the openPrompts row ONLY
8
+ * when `promptId == derive(ownerToken)` (WRITE_ROW). Because SHA-256 is
9
+ * preimage-resistant, an attacker who knows a victim's promptId cannot produce a
10
+ * token that derives to it, so ownership survives the token never being stored
11
+ * server-side (it is NEVER projected back to clients).
12
+ *
13
+ * THIS IS A CROSS-PRODUCER BYTE CONTRACT. This file is the byte-for-byte port of
14
+ * the backend `lambda/shared/e1-open-prompts.ts` derive. core / codex / claude /
15
+ * agy MUST all reproduce the SAME bytes: same domain string, the SINGLE `\0`
16
+ * (0x00) separator, UTF-8 encoding of the token, SHA-256, first 16 bytes, and the
17
+ * v4 UUID version/variant shaping. A single divergent byte yields a different
18
+ * promptId → the backend REJECTs the raise → a HIDDEN prompt (under-nag). The
19
+ * pinned golden vectors in `__tests__/open-prompt-id.test.ts` (identical to the
20
+ * backend's `cdk/test/e1-open-prompts.test.ts`) lock this. Do NOT alter the
21
+ * domain, drop/duplicate the separator, or re-encode.
22
+ */
23
+ /** Pinned domain separator for the promptId commitment (never change post-ship). */
24
+ export declare const E1_PROMPT_ID_DOMAIN = "codevibe.e1.openprompt.promptid.v1";
25
+ /**
26
+ * `derive(ownerToken) = uuidFormat( SHA-256(E1_DOMAIN ‖ 0x00 ‖ ownerToken)[:16] )`
27
+ * A BARE UUID — NO `synth-` prefix. Preimage-resistant.
28
+ */
29
+ export declare function deriveOpenPromptId(ownerToken: string): string;
30
+ /**
31
+ * Mint a fresh 256-bit secret `ownerToken` for one raise. Hex-encoded so it is a
32
+ * safe plaintext GraphQL string. Never persisted server-side; the producer
33
+ * stashes it in its durable PromptRaiseRecord so a retirement/resume re-raise can
34
+ * re-commit the SAME promptId.
35
+ */
36
+ export declare function mintOwnerToken(): string;
@@ -0,0 +1,2 @@
1
+ export { newPromptRaise, raiseFieldsFromRecord, } from './prompt-raise';
2
+ export type { E1ProducerKind, PromptRaiseRecord, E1RaiseFields, } from './prompt-raise';
@@ -0,0 +1,65 @@
1
+ /**
2
+ * E1 missed-prompt recovery — the SHARED producer-side raise identity
3
+ * (PHASE-E1-MISSED-PROMPT-RECOVERY-DESIGN.md §4 / §6a-4). core + claude + codex +
4
+ * agy all mint + emit + persist the SAME shape so a retirement/resume re-raise
5
+ * re-commits the SAME `promptId`.
6
+ *
7
+ * A producer mints a fresh `ownerToken` at FIRST raise and stashes it in a
8
+ * durable `PromptRaiseRecord`. Every raise/re-raise emits
9
+ * `promptId = deriveOpenPromptId(ownerToken)` + the token, so the backend
10
+ * `classifyRaise` WRITE_ROWs the durable open-prompt row (first raise on the
11
+ * `attribute_not_exists` branch, a re-raise on the `ownerToken = :token` branch).
12
+ *
13
+ * SECRECY INVARIANT (design Stage-1 v37): `ownerToken` is the secret behind the
14
+ * commitment — it must be stripped from EVERY same-user-readable surface (it is
15
+ * never in a Query/fan-out/listEvents projection). Persist it ONLY in the local
16
+ * durable record on the producer's own machine.
17
+ *
18
+ * Scope: this is the shared E1 IDENTITY. Each plugin's persistence adapter wraps
19
+ * this record with its own re-raise CONTENT (the prompt text / options), because
20
+ * those shapes differ per agent (claude tmux options, codex tool-input, agy pane
21
+ * capture). Keep the identity here; keep the content in the plugin.
22
+ */
23
+ export type E1ProducerKind = 'PLUGIN_APPROVAL' | 'CORE_OFFER';
24
+ /** The durable, per-producer record (§6a-4). Persisted locally; never uploaded. */
25
+ export interface PromptRaiseRecord {
26
+ /** = deriveOpenPromptId(ownerToken). The stable cross-surface prompt identity. */
27
+ promptId: string;
28
+ /** IMMUTABLE 256-bit secret minted ONCE at first raise. NEVER surface it. */
29
+ ownerToken: string;
30
+ /** The session this prompt belongs to (for the resolve-delete origin binding). */
31
+ sessionId: string;
32
+ producerKind: E1ProducerKind;
33
+ /** CLAUDE | CODEX | ANTIGRAVITY (for the mobile row + fan-out). */
34
+ agentType?: string;
35
+ title?: string;
36
+ /** false = SUPPRESSED (options unparseable → badge-only NOTIFICATION carrier). */
37
+ mobileActionable: boolean;
38
+ /** First-raise wall clock (ms); record-creation time, for local ordering/debug. */
39
+ raisedAtMs: number;
40
+ }
41
+ /** The additive `CreateEventInput` fields a raise/re-raise puts on the wire. */
42
+ export interface E1RaiseFields {
43
+ ownerToken: string;
44
+ promptId: string;
45
+ producerKind: E1ProducerKind;
46
+ mobileActionable: boolean;
47
+ }
48
+ /** Derive the wire fields from a (new or persisted) record — pure. */
49
+ export declare function raiseFieldsFromRecord(r: PromptRaiseRecord): E1RaiseFields;
50
+ /**
51
+ * FIRST raise: mint a fresh secret, derive its committed promptId, and return
52
+ * both the wire fields and the durable record to persist. The caller persists
53
+ * `record` (via its per-plugin adapter) so a later restart can re-raise.
54
+ */
55
+ export declare function newPromptRaise(opts: {
56
+ sessionId: string;
57
+ producerKind: E1ProducerKind;
58
+ mobileActionable: boolean;
59
+ agentType?: string;
60
+ title?: string;
61
+ nowMs?: number;
62
+ }): {
63
+ record: PromptRaiseRecord;
64
+ fields: E1RaiseFields;
65
+ };
@@ -2,6 +2,9 @@ export { KeychainManager, keychainManager, KeychainError } from './keychain';
2
2
  export { CryptoService, cryptoService, CryptoError, ENCRYPTION_VERSION } from './crypto';
3
3
  export { encryptForEmit } from './crypto';
4
4
  export type { EncryptedEmitPayload } from './crypto';
5
+ export { E1_PROMPT_ID_DOMAIN, deriveOpenPromptId, mintOwnerToken } from './crypto';
6
+ export { newPromptRaise, raiseFieldsFromRecord } from './e1';
7
+ export type { E1ProducerKind, PromptRaiseRecord, E1RaiseFields } from './e1';
5
8
  export { installDaemonProcessGuards, isNetworkClass } from './daemon';
6
9
  export type { DaemonGuardLogger, DaemonProcessGuardOptions } from './daemon';
7
10
  export { AppSyncClient, AppSyncGraphQLError, DownloadUrlResponse } from './appsync';
@@ -38,7 +41,7 @@ export { emitShellEvent, createShellEventEmitter } from './orchestration-shell';
38
41
  export { processMarkers, withRoleMarker } from './orchestration-shell';
39
42
  export { ToolActivityOutbox, type ToolActivityOutboxOptions, type ListPendingResult, } from './tool-activity';
40
43
  export { ToolActivityLedger, LedgerEntrySchema, LedgerFileSchema, LegacyOwnedFileSchema, type LedgerEntry, type LedgerFile, type LegacyOwnedFile, type OccurrenceRef, type ToolActivityLedgerOptions, } from './tool-activity';
41
- export { ToolReplayCursor, ReplayCursorStateSchema, type ReplayCursorState, type ReplayFrame, type ReadFramesResult, type ToolReplayCursorOptions, } from './tool-activity';
44
+ export { ToolReplayCursor, ReplayFrameTooLargeError, ReplayCursorStateSchema, DEFAULT_REPLAY_READ_BYTES, DEFAULT_REPLAY_MAX_FRAME_BYTES, type ReplayCursorState, type ReplayFrame, type ReadFramesResult, type ToolReplayCursorOptions, } from './tool-activity';
42
45
  export { ToolActivitySessionMap, InProcessRolloutLock, SessionMapRecordSchema, type RolloutLock, type RolloutOwnership, type SessionMapRecord, type ToolActivitySessionMapOptions, } from './tool-activity';
43
46
  export { ToolActivityConsolidator, isSessionKeyStaleError, type ObservedOccurrence, type ObserveDisposition, type ToolActivityTransport, type ToolActivityConsolidatorOptions, } from './tool-activity';
44
47
  export { SocketRolloutLock, type SocketRolloutLockOptions, FlockRolloutLock, type FlockRolloutLockOptions, type FlockSyncFn, type FlockFlag, createRolloutLock, type CreateRolloutLockOptions, } from './tool-activity';