@vibesdotdev/session 0.0.0-stage → 1.0.0-rc.2

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 (1071) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +69 -2
  3. package/dist/admission/admit-caller.context.descriptor.d.ts +33 -0
  4. package/dist/admission/admit-caller.context.descriptor.d.ts.map +1 -0
  5. package/dist/admission/admit-caller.context.descriptor.js +10 -0
  6. package/dist/admission/admit-caller.context.descriptor.js.map +1 -0
  7. package/dist/admission/admit-caller.context.impl.d.ts +8 -0
  8. package/dist/admission/admit-caller.context.impl.d.ts.map +1 -0
  9. package/dist/admission/admit-caller.context.impl.js +15 -0
  10. package/dist/admission/admit-caller.context.impl.js.map +1 -0
  11. package/dist/admission/admit-caller.d.ts +57 -0
  12. package/dist/admission/admit-caller.d.ts.map +1 -0
  13. package/dist/admission/admit-caller.js +163 -0
  14. package/dist/admission/admit-caller.js.map +1 -0
  15. package/dist/backup/session.sessions.target.descriptor.d.ts +47 -0
  16. package/dist/backup/session.sessions.target.descriptor.d.ts.map +1 -0
  17. package/dist/backup/session.sessions.target.descriptor.js +41 -0
  18. package/dist/backup/session.sessions.target.descriptor.js.map +1 -0
  19. package/dist/cli/chat/session.chat.descriptor.d.ts +4 -0
  20. package/dist/cli/chat/session.chat.descriptor.d.ts.map +1 -0
  21. package/dist/cli/chat/session.chat.descriptor.js +19 -0
  22. package/dist/cli/chat/session.chat.descriptor.js.map +1 -0
  23. package/dist/cli/chat/session.chat.impl.d.ts +6 -0
  24. package/dist/cli/chat/session.chat.impl.d.ts.map +1 -0
  25. package/dist/cli/chat/session.chat.impl.js +37 -0
  26. package/dist/cli/chat/session.chat.impl.js.map +1 -0
  27. package/dist/cli/chat/session.jobs.descriptor.d.ts +4 -0
  28. package/dist/cli/chat/session.jobs.descriptor.d.ts.map +1 -0
  29. package/dist/cli/chat/session.jobs.descriptor.js +17 -0
  30. package/dist/cli/chat/session.jobs.descriptor.js.map +1 -0
  31. package/dist/cli/chat/session.jobs.impl.d.ts +6 -0
  32. package/dist/cli/chat/session.jobs.impl.d.ts.map +1 -0
  33. package/dist/cli/chat/session.jobs.impl.js +29 -0
  34. package/dist/cli/chat/session.jobs.impl.js.map +1 -0
  35. package/dist/cli/chat/session.participants.descriptor.d.ts +4 -0
  36. package/dist/cli/chat/session.participants.descriptor.d.ts.map +1 -0
  37. package/dist/cli/chat/session.participants.descriptor.js +18 -0
  38. package/dist/cli/chat/session.participants.descriptor.js.map +1 -0
  39. package/dist/cli/chat/session.participants.impl.d.ts +12 -0
  40. package/dist/cli/chat/session.participants.impl.d.ts.map +1 -0
  41. package/dist/cli/chat/session.participants.impl.js +37 -0
  42. package/dist/cli/chat/session.participants.impl.js.map +1 -0
  43. package/dist/cli/command.d.ts +44 -0
  44. package/dist/cli/command.d.ts.map +1 -0
  45. package/dist/cli/command.js +57 -0
  46. package/dist/cli/command.js.map +1 -0
  47. package/dist/cli/display.d.ts +10 -0
  48. package/dist/cli/display.d.ts.map +1 -0
  49. package/dist/cli/display.js +16 -0
  50. package/dist/cli/display.js.map +1 -0
  51. package/dist/cli/index.d.ts +8 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +7 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/cli/lifecycle/session.archive.descriptor.d.ts +4 -0
  56. package/dist/cli/lifecycle/session.archive.descriptor.d.ts.map +1 -0
  57. package/dist/cli/lifecycle/session.archive.descriptor.js +16 -0
  58. package/dist/cli/lifecycle/session.archive.descriptor.js.map +1 -0
  59. package/dist/cli/lifecycle/session.archive.impl.d.ts +6 -0
  60. package/dist/cli/lifecycle/session.archive.impl.d.ts.map +1 -0
  61. package/dist/cli/lifecycle/session.archive.impl.js +18 -0
  62. package/dist/cli/lifecycle/session.archive.impl.js.map +1 -0
  63. package/dist/cli/lifecycle/session.init.descriptor.d.ts +4 -0
  64. package/dist/cli/lifecycle/session.init.descriptor.d.ts.map +1 -0
  65. package/dist/cli/lifecycle/session.init.descriptor.js +31 -0
  66. package/dist/cli/lifecycle/session.init.descriptor.js.map +1 -0
  67. package/dist/cli/lifecycle/session.init.impl.d.ts +6 -0
  68. package/dist/cli/lifecycle/session.init.impl.d.ts.map +1 -0
  69. package/dist/cli/lifecycle/session.init.impl.js +38 -0
  70. package/dist/cli/lifecycle/session.init.impl.js.map +1 -0
  71. package/dist/cli/lifecycle/session.list.descriptor.d.ts +4 -0
  72. package/dist/cli/lifecycle/session.list.descriptor.d.ts.map +1 -0
  73. package/dist/cli/lifecycle/session.list.descriptor.js +27 -0
  74. package/dist/cli/lifecycle/session.list.descriptor.js.map +1 -0
  75. package/dist/cli/lifecycle/session.list.impl.d.ts +12 -0
  76. package/dist/cli/lifecycle/session.list.impl.d.ts.map +1 -0
  77. package/dist/cli/lifecycle/session.list.impl.js +46 -0
  78. package/dist/cli/lifecycle/session.list.impl.js.map +1 -0
  79. package/dist/cli/lifecycle/session.pause.descriptor.d.ts +4 -0
  80. package/dist/cli/lifecycle/session.pause.descriptor.d.ts.map +1 -0
  81. package/dist/cli/lifecycle/session.pause.descriptor.js +13 -0
  82. package/dist/cli/lifecycle/session.pause.descriptor.js.map +1 -0
  83. package/dist/cli/lifecycle/session.pause.impl.d.ts +6 -0
  84. package/dist/cli/lifecycle/session.pause.impl.d.ts.map +1 -0
  85. package/dist/cli/lifecycle/session.pause.impl.js +18 -0
  86. package/dist/cli/lifecycle/session.pause.impl.js.map +1 -0
  87. package/dist/cli/lifecycle/session.resume.descriptor.d.ts +4 -0
  88. package/dist/cli/lifecycle/session.resume.descriptor.d.ts.map +1 -0
  89. package/dist/cli/lifecycle/session.resume.descriptor.js +21 -0
  90. package/dist/cli/lifecycle/session.resume.descriptor.js.map +1 -0
  91. package/dist/cli/lifecycle/session.resume.impl.d.ts +6 -0
  92. package/dist/cli/lifecycle/session.resume.impl.d.ts.map +1 -0
  93. package/dist/cli/lifecycle/session.resume.impl.js +18 -0
  94. package/dist/cli/lifecycle/session.resume.impl.js.map +1 -0
  95. package/dist/cli/lifecycle/session.search.descriptor.d.ts +4 -0
  96. package/dist/cli/lifecycle/session.search.descriptor.d.ts.map +1 -0
  97. package/dist/cli/lifecycle/session.search.descriptor.js +17 -0
  98. package/dist/cli/lifecycle/session.search.descriptor.js.map +1 -0
  99. package/dist/cli/lifecycle/session.search.impl.d.ts +12 -0
  100. package/dist/cli/lifecycle/session.search.impl.d.ts.map +1 -0
  101. package/dist/cli/lifecycle/session.search.impl.js +43 -0
  102. package/dist/cli/lifecycle/session.search.impl.js.map +1 -0
  103. package/dist/cli/lifecycle/session.status.descriptor.d.ts +4 -0
  104. package/dist/cli/lifecycle/session.status.descriptor.d.ts.map +1 -0
  105. package/dist/cli/lifecycle/session.status.descriptor.js +13 -0
  106. package/dist/cli/lifecycle/session.status.descriptor.js.map +1 -0
  107. package/dist/cli/lifecycle/session.status.impl.d.ts +6 -0
  108. package/dist/cli/lifecycle/session.status.impl.d.ts.map +1 -0
  109. package/dist/cli/lifecycle/session.status.impl.js +38 -0
  110. package/dist/cli/lifecycle/session.status.impl.js.map +1 -0
  111. package/dist/cli/output.d.ts +14 -0
  112. package/dist/cli/output.d.ts.map +1 -0
  113. package/dist/cli/output.js +19 -0
  114. package/dist/cli/output.js.map +1 -0
  115. package/dist/cli/schemas/commands.d.ts +709 -0
  116. package/dist/cli/schemas/commands.d.ts.map +1 -0
  117. package/dist/cli/schemas/commands.js +359 -0
  118. package/dist/cli/schemas/commands.js.map +1 -0
  119. package/dist/cli/scratchpad/session.scratchpad.cli-group.descriptor.d.ts +4 -0
  120. package/dist/cli/scratchpad/session.scratchpad.cli-group.descriptor.d.ts.map +1 -0
  121. package/dist/cli/scratchpad/session.scratchpad.cli-group.descriptor.js +13 -0
  122. package/dist/cli/scratchpad/session.scratchpad.cli-group.descriptor.js.map +1 -0
  123. package/dist/cli/scratchpad/session.scratchpad.list.descriptor.d.ts +4 -0
  124. package/dist/cli/scratchpad/session.scratchpad.list.descriptor.d.ts.map +1 -0
  125. package/dist/cli/scratchpad/session.scratchpad.list.descriptor.js +16 -0
  126. package/dist/cli/scratchpad/session.scratchpad.list.descriptor.js.map +1 -0
  127. package/dist/cli/scratchpad/session.scratchpad.list.impl.d.ts +6 -0
  128. package/dist/cli/scratchpad/session.scratchpad.list.impl.d.ts.map +1 -0
  129. package/dist/cli/scratchpad/session.scratchpad.list.impl.js +33 -0
  130. package/dist/cli/scratchpad/session.scratchpad.list.impl.js.map +1 -0
  131. package/dist/cli/scratchpad/session.scratchpad.read.descriptor.d.ts +4 -0
  132. package/dist/cli/scratchpad/session.scratchpad.read.descriptor.d.ts.map +1 -0
  133. package/dist/cli/scratchpad/session.scratchpad.read.descriptor.js +13 -0
  134. package/dist/cli/scratchpad/session.scratchpad.read.descriptor.js.map +1 -0
  135. package/dist/cli/scratchpad/session.scratchpad.read.impl.d.ts +6 -0
  136. package/dist/cli/scratchpad/session.scratchpad.read.impl.d.ts.map +1 -0
  137. package/dist/cli/scratchpad/session.scratchpad.read.impl.js +18 -0
  138. package/dist/cli/scratchpad/session.scratchpad.read.impl.js.map +1 -0
  139. package/dist/cli/scratchpad/session.scratchpad.search.descriptor.d.ts +4 -0
  140. package/dist/cli/scratchpad/session.scratchpad.search.descriptor.d.ts.map +1 -0
  141. package/dist/cli/scratchpad/session.scratchpad.search.descriptor.js +18 -0
  142. package/dist/cli/scratchpad/session.scratchpad.search.descriptor.js.map +1 -0
  143. package/dist/cli/scratchpad/session.scratchpad.search.impl.d.ts +6 -0
  144. package/dist/cli/scratchpad/session.scratchpad.search.impl.d.ts.map +1 -0
  145. package/dist/cli/scratchpad/session.scratchpad.search.impl.js +29 -0
  146. package/dist/cli/scratchpad/session.scratchpad.search.impl.js.map +1 -0
  147. package/dist/cli/scratchpad/session.scratchpad.write.descriptor.d.ts +4 -0
  148. package/dist/cli/scratchpad/session.scratchpad.write.descriptor.d.ts.map +1 -0
  149. package/dist/cli/scratchpad/session.scratchpad.write.descriptor.js +23 -0
  150. package/dist/cli/scratchpad/session.scratchpad.write.descriptor.js.map +1 -0
  151. package/dist/cli/scratchpad/session.scratchpad.write.impl.d.ts +6 -0
  152. package/dist/cli/scratchpad/session.scratchpad.write.impl.d.ts.map +1 -0
  153. package/dist/cli/scratchpad/session.scratchpad.write.impl.js +18 -0
  154. package/dist/cli/scratchpad/session.scratchpad.write.impl.js.map +1 -0
  155. package/dist/cli/services/session/jobs.d.ts +61 -0
  156. package/dist/cli/services/session/jobs.d.ts.map +1 -0
  157. package/dist/cli/services/session/jobs.js +36 -0
  158. package/dist/cli/services/session/jobs.js.map +1 -0
  159. package/dist/cli/services/session/participant.d.ts +9 -0
  160. package/dist/cli/services/session/participant.d.ts.map +1 -0
  161. package/dist/cli/services/session/participant.js +93 -0
  162. package/dist/cli/services/session/participant.js.map +1 -0
  163. package/dist/cli/services/session/participants.d.ts +84 -0
  164. package/dist/cli/services/session/participants.d.ts.map +1 -0
  165. package/dist/cli/services/session/participants.js +33 -0
  166. package/dist/cli/services/session/participants.js.map +1 -0
  167. package/dist/cli/services/session/refusals.d.ts +15 -0
  168. package/dist/cli/services/session/refusals.d.ts.map +1 -0
  169. package/dist/cli/services/session/refusals.js +28 -0
  170. package/dist/cli/services/session/refusals.js.map +1 -0
  171. package/dist/cli/services/session/scratchpad.d.ts +89 -0
  172. package/dist/cli/services/session/scratchpad.d.ts.map +1 -0
  173. package/dist/cli/services/session/scratchpad.js +63 -0
  174. package/dist/cli/services/session/scratchpad.js.map +1 -0
  175. package/dist/cli/services/session/sessions.d.ts +277 -0
  176. package/dist/cli/services/session/sessions.d.ts.map +1 -0
  177. package/dist/cli/services/session/sessions.js +149 -0
  178. package/dist/cli/services/session/sessions.js.map +1 -0
  179. package/dist/cli/services/session/todos.d.ts +132 -0
  180. package/dist/cli/services/session/todos.d.ts.map +1 -0
  181. package/dist/cli/services/session/todos.js +85 -0
  182. package/dist/cli/services/session/todos.js.map +1 -0
  183. package/dist/cli/services/session-cli-context.d.ts +29 -0
  184. package/dist/cli/services/session-cli-context.d.ts.map +1 -0
  185. package/dist/cli/services/session-cli-context.js +21 -0
  186. package/dist/cli/services/session-cli-context.js.map +1 -0
  187. package/dist/cli/services/session.cli.consumer.d.ts +58 -0
  188. package/dist/cli/services/session.cli.consumer.d.ts.map +1 -0
  189. package/dist/cli/services/session.cli.consumer.js +13 -0
  190. package/dist/cli/services/session.cli.consumer.js.map +1 -0
  191. package/dist/cli/session-cli.plugin.d.ts +3 -0
  192. package/dist/cli/session-cli.plugin.d.ts.map +1 -0
  193. package/dist/cli/session-cli.plugin.js +150 -0
  194. package/dist/cli/session-cli.plugin.js.map +1 -0
  195. package/dist/cli/session.cli-group.descriptor.d.ts +4 -0
  196. package/dist/cli/session.cli-group.descriptor.d.ts.map +1 -0
  197. package/dist/cli/session.cli-group.descriptor.js +12 -0
  198. package/dist/cli/session.cli-group.descriptor.js.map +1 -0
  199. package/dist/cli/session.cli.descriptor.d.ts +4 -0
  200. package/dist/cli/session.cli.descriptor.d.ts.map +1 -0
  201. package/dist/cli/session.cli.descriptor.js +13 -0
  202. package/dist/cli/session.cli.descriptor.js.map +1 -0
  203. package/dist/cli/todo/session.todo.add.descriptor.d.ts +4 -0
  204. package/dist/cli/todo/session.todo.add.descriptor.d.ts.map +1 -0
  205. package/dist/cli/todo/session.todo.add.descriptor.js +23 -0
  206. package/dist/cli/todo/session.todo.add.descriptor.js.map +1 -0
  207. package/dist/cli/todo/session.todo.add.impl.d.ts +6 -0
  208. package/dist/cli/todo/session.todo.add.impl.d.ts.map +1 -0
  209. package/dist/cli/todo/session.todo.add.impl.js +22 -0
  210. package/dist/cli/todo/session.todo.add.impl.js.map +1 -0
  211. package/dist/cli/todo/session.todo.cli-group.descriptor.d.ts +4 -0
  212. package/dist/cli/todo/session.todo.cli-group.descriptor.d.ts.map +1 -0
  213. package/dist/cli/todo/session.todo.cli-group.descriptor.js +12 -0
  214. package/dist/cli/todo/session.todo.cli-group.descriptor.js.map +1 -0
  215. package/dist/cli/todo/session.todo.complete.descriptor.d.ts +4 -0
  216. package/dist/cli/todo/session.todo.complete.descriptor.d.ts.map +1 -0
  217. package/dist/cli/todo/session.todo.complete.descriptor.js +16 -0
  218. package/dist/cli/todo/session.todo.complete.descriptor.js.map +1 -0
  219. package/dist/cli/todo/session.todo.complete.impl.d.ts +6 -0
  220. package/dist/cli/todo/session.todo.complete.impl.d.ts.map +1 -0
  221. package/dist/cli/todo/session.todo.complete.impl.js +18 -0
  222. package/dist/cli/todo/session.todo.complete.impl.js.map +1 -0
  223. package/dist/cli/todo/session.todo.list.descriptor.d.ts +4 -0
  224. package/dist/cli/todo/session.todo.list.descriptor.d.ts.map +1 -0
  225. package/dist/cli/todo/session.todo.list.descriptor.js +19 -0
  226. package/dist/cli/todo/session.todo.list.descriptor.js.map +1 -0
  227. package/dist/cli/todo/session.todo.list.impl.d.ts +6 -0
  228. package/dist/cli/todo/session.todo.list.impl.d.ts.map +1 -0
  229. package/dist/cli/todo/session.todo.list.impl.js +34 -0
  230. package/dist/cli/todo/session.todo.list.impl.js.map +1 -0
  231. package/dist/cli/todo/session.todo.tree.descriptor.d.ts +4 -0
  232. package/dist/cli/todo/session.todo.tree.descriptor.d.ts.map +1 -0
  233. package/dist/cli/todo/session.todo.tree.descriptor.js +21 -0
  234. package/dist/cli/todo/session.todo.tree.descriptor.js.map +1 -0
  235. package/dist/cli/todo/session.todo.tree.impl.d.ts +6 -0
  236. package/dist/cli/todo/session.todo.tree.impl.d.ts.map +1 -0
  237. package/dist/cli/todo/session.todo.tree.impl.js +26 -0
  238. package/dist/cli/todo/session.todo.tree.impl.js.map +1 -0
  239. package/dist/cli/todo/session.todo.update.descriptor.d.ts +4 -0
  240. package/dist/cli/todo/session.todo.update.descriptor.d.ts.map +1 -0
  241. package/dist/cli/todo/session.todo.update.descriptor.js +21 -0
  242. package/dist/cli/todo/session.todo.update.descriptor.js.map +1 -0
  243. package/dist/cli/todo/session.todo.update.impl.d.ts +6 -0
  244. package/dist/cli/todo/session.todo.update.impl.d.ts.map +1 -0
  245. package/dist/cli/todo/session.todo.update.impl.js +18 -0
  246. package/dist/cli/todo/session.todo.update.impl.js.map +1 -0
  247. package/dist/client.d.ts +40 -0
  248. package/dist/client.d.ts.map +1 -0
  249. package/dist/client.js +114 -0
  250. package/dist/client.js.map +1 -0
  251. package/dist/cockpit/build-state.d.ts +104 -0
  252. package/dist/cockpit/build-state.d.ts.map +1 -0
  253. package/dist/cockpit/build-state.js +273 -0
  254. package/dist/cockpit/build-state.js.map +1 -0
  255. package/dist/cockpit/resolve-participant.d.ts +55 -0
  256. package/dist/cockpit/resolve-participant.d.ts.map +1 -0
  257. package/dist/cockpit/resolve-participant.js +116 -0
  258. package/dist/cockpit/resolve-participant.js.map +1 -0
  259. package/dist/docs/session.docs.descriptor.d.ts +24 -0
  260. package/dist/docs/session.docs.descriptor.d.ts.map +1 -0
  261. package/dist/docs/session.docs.descriptor.js +589 -0
  262. package/dist/docs/session.docs.descriptor.js.map +1 -0
  263. package/dist/events/session.bound.event.descriptor.d.ts +100 -0
  264. package/dist/events/session.bound.event.descriptor.d.ts.map +1 -0
  265. package/dist/events/session.bound.event.descriptor.js +121 -0
  266. package/dist/events/session.bound.event.descriptor.js.map +1 -0
  267. package/dist/events/session.unbound.event.descriptor.d.ts +58 -0
  268. package/dist/events/session.unbound.event.descriptor.d.ts.map +1 -0
  269. package/dist/events/session.unbound.event.descriptor.js +45 -0
  270. package/dist/events/session.unbound.event.descriptor.js.map +1 -0
  271. package/dist/helper.d.ts +15 -0
  272. package/dist/helper.d.ts.map +1 -0
  273. package/dist/helper.js +23 -0
  274. package/dist/helper.js.map +1 -0
  275. package/dist/index.d.ts +17 -0
  276. package/dist/index.d.ts.map +1 -0
  277. package/dist/index.js +15 -0
  278. package/dist/index.js.map +1 -0
  279. package/dist/knowledge-source/vibes.descriptor.d.ts +10 -0
  280. package/dist/knowledge-source/vibes.descriptor.d.ts.map +1 -0
  281. package/dist/knowledge-source/vibes.descriptor.js +10 -0
  282. package/dist/knowledge-source/vibes.descriptor.js.map +1 -0
  283. package/dist/knowledge-source/vibes.impl.consumer.d.ts +47 -0
  284. package/dist/knowledge-source/vibes.impl.consumer.d.ts.map +1 -0
  285. package/dist/knowledge-source/vibes.impl.consumer.js +457 -0
  286. package/dist/knowledge-source/vibes.impl.consumer.js.map +1 -0
  287. package/dist/manager/cli-body-connection.d.ts +4 -0
  288. package/dist/manager/cli-body-connection.d.ts.map +1 -0
  289. package/dist/manager/cli-body-connection.js +7 -0
  290. package/dist/manager/cli-body-connection.js.map +1 -0
  291. package/dist/manager/index.d.ts +3 -0
  292. package/dist/manager/index.d.ts.map +1 -0
  293. package/dist/manager/index.js +2 -0
  294. package/dist/manager/index.js.map +1 -0
  295. package/dist/manager/resolve-bound-session.d.ts +95 -0
  296. package/dist/manager/resolve-bound-session.d.ts.map +1 -0
  297. package/dist/manager/resolve-bound-session.js +163 -0
  298. package/dist/manager/resolve-bound-session.js.map +1 -0
  299. package/dist/manager.d.ts +715 -0
  300. package/dist/manager.d.ts.map +1 -0
  301. package/dist/manager.js +3029 -0
  302. package/dist/manager.js.map +1 -0
  303. package/dist/mcp/index.d.ts +14 -0
  304. package/dist/mcp/index.d.ts.map +1 -0
  305. package/dist/mcp/index.js +11 -0
  306. package/dist/mcp/index.js.map +1 -0
  307. package/dist/mcp/schemas/coordination.d.ts +20 -0
  308. package/dist/mcp/schemas/coordination.d.ts.map +1 -0
  309. package/dist/mcp/schemas/coordination.js +5 -0
  310. package/dist/mcp/schemas/coordination.js.map +1 -0
  311. package/dist/mcp/schemas/tools.d.ts +351 -0
  312. package/dist/mcp/schemas/tools.d.ts.map +1 -0
  313. package/dist/mcp/schemas/tools.js +279 -0
  314. package/dist/mcp/schemas/tools.js.map +1 -0
  315. package/dist/mcp/types.d.ts +3 -0
  316. package/dist/mcp/types.d.ts.map +1 -0
  317. package/dist/mcp/types.js +2 -0
  318. package/dist/mcp/types.js.map +1 -0
  319. package/dist/mcp/utils/coordination.d.ts +17 -0
  320. package/dist/mcp/utils/coordination.d.ts.map +1 -0
  321. package/dist/mcp/utils/coordination.js +56 -0
  322. package/dist/mcp/utils/coordination.js.map +1 -0
  323. package/dist/mcp/utils/knowledge.d.ts +90 -0
  324. package/dist/mcp/utils/knowledge.d.ts.map +1 -0
  325. package/dist/mcp/utils/knowledge.js +455 -0
  326. package/dist/mcp/utils/knowledge.js.map +1 -0
  327. package/dist/mcp/utils/mcp-session-resolver.d.ts +19 -0
  328. package/dist/mcp/utils/mcp-session-resolver.d.ts.map +1 -0
  329. package/dist/mcp/utils/mcp-session-resolver.js +28 -0
  330. package/dist/mcp/utils/mcp-session-resolver.js.map +1 -0
  331. package/dist/mcp/utils/participant.d.ts +426 -0
  332. package/dist/mcp/utils/participant.d.ts.map +1 -0
  333. package/dist/mcp/utils/participant.js +1420 -0
  334. package/dist/mcp/utils/participant.js.map +1 -0
  335. package/dist/mcp/utils/session-registry.d.ts +194 -0
  336. package/dist/mcp/utils/session-registry.d.ts.map +1 -0
  337. package/dist/mcp/utils/session-registry.js +479 -0
  338. package/dist/mcp/utils/session-registry.js.map +1 -0
  339. package/dist/mcp/utils/surface-sessions.d.ts +54 -0
  340. package/dist/mcp/utils/surface-sessions.d.ts.map +1 -0
  341. package/dist/mcp/utils/surface-sessions.js +118 -0
  342. package/dist/mcp/utils/surface-sessions.js.map +1 -0
  343. package/dist/mcp/utils/unbound-guidance.d.ts +97 -0
  344. package/dist/mcp/utils/unbound-guidance.d.ts.map +1 -0
  345. package/dist/mcp/utils/unbound-guidance.js +236 -0
  346. package/dist/mcp/utils/unbound-guidance.js.map +1 -0
  347. package/dist/schemas/chatter.d.ts +228 -0
  348. package/dist/schemas/chatter.d.ts.map +1 -0
  349. package/dist/schemas/chatter.js +130 -0
  350. package/dist/schemas/chatter.js.map +1 -0
  351. package/dist/schemas/cockpit.d.ts +332 -0
  352. package/dist/schemas/cockpit.d.ts.map +1 -0
  353. package/dist/schemas/cockpit.js +139 -0
  354. package/dist/schemas/cockpit.js.map +1 -0
  355. package/dist/schemas/harness-seat.d.ts +41 -0
  356. package/dist/schemas/harness-seat.d.ts.map +1 -0
  357. package/dist/schemas/harness-seat.js +61 -0
  358. package/dist/schemas/harness-seat.js.map +1 -0
  359. package/dist/schemas/index.d.ts +29 -0
  360. package/dist/schemas/index.d.ts.map +1 -0
  361. package/dist/schemas/index.js +29 -0
  362. package/dist/schemas/index.js.map +1 -0
  363. package/dist/schemas/job.d.ts +261 -0
  364. package/dist/schemas/job.d.ts.map +1 -0
  365. package/dist/schemas/job.js +144 -0
  366. package/dist/schemas/job.js.map +1 -0
  367. package/dist/schemas/json-text.d.ts +9 -0
  368. package/dist/schemas/json-text.d.ts.map +1 -0
  369. package/dist/schemas/json-text.js +129 -0
  370. package/dist/schemas/json-text.js.map +1 -0
  371. package/dist/schemas/knowledge.d.ts +109 -0
  372. package/dist/schemas/knowledge.d.ts.map +1 -0
  373. package/dist/schemas/knowledge.js +81 -0
  374. package/dist/schemas/knowledge.js.map +1 -0
  375. package/dist/schemas/mcp.d.ts +179 -0
  376. package/dist/schemas/mcp.d.ts.map +1 -0
  377. package/dist/schemas/mcp.js +46 -0
  378. package/dist/schemas/mcp.js.map +1 -0
  379. package/dist/schemas/participant.d.ts +407 -0
  380. package/dist/schemas/participant.d.ts.map +1 -0
  381. package/dist/schemas/participant.js +225 -0
  382. package/dist/schemas/participant.js.map +1 -0
  383. package/dist/schemas/presence-core.d.ts +93 -0
  384. package/dist/schemas/presence-core.d.ts.map +1 -0
  385. package/dist/schemas/presence-core.js +53 -0
  386. package/dist/schemas/presence-core.js.map +1 -0
  387. package/dist/schemas/presence.d.ts +69 -0
  388. package/dist/schemas/presence.d.ts.map +1 -0
  389. package/dist/schemas/presence.js +44 -0
  390. package/dist/schemas/presence.js.map +1 -0
  391. package/dist/schemas/registry-state.d.ts +64 -0
  392. package/dist/schemas/registry-state.d.ts.map +1 -0
  393. package/dist/schemas/registry-state.js +30 -0
  394. package/dist/schemas/registry-state.js.map +1 -0
  395. package/dist/schemas/scratchpad.d.ts +163 -0
  396. package/dist/schemas/scratchpad.d.ts.map +1 -0
  397. package/dist/schemas/scratchpad.js +119 -0
  398. package/dist/schemas/scratchpad.js.map +1 -0
  399. package/dist/schemas/session.d.ts +266 -0
  400. package/dist/schemas/session.d.ts.map +1 -0
  401. package/dist/schemas/session.js +179 -0
  402. package/dist/schemas/session.js.map +1 -0
  403. package/dist/schemas/todo-status-category.d.ts +21 -0
  404. package/dist/schemas/todo-status-category.d.ts.map +1 -0
  405. package/dist/schemas/todo-status-category.js +27 -0
  406. package/dist/schemas/todo-status-category.js.map +1 -0
  407. package/dist/schemas/todo.d.ts +293 -0
  408. package/dist/schemas/todo.d.ts.map +1 -0
  409. package/dist/schemas/todo.js +130 -0
  410. package/dist/schemas/todo.js.map +1 -0
  411. package/dist/schemas/types.d.ts +15 -0
  412. package/dist/schemas/types.d.ts.map +1 -0
  413. package/dist/schemas/types.js +9 -0
  414. package/dist/schemas/types.js.map +1 -0
  415. package/dist/schemas.d.ts +2 -0
  416. package/dist/schemas.d.ts.map +1 -0
  417. package/dist/schemas.js +2 -0
  418. package/dist/schemas.js.map +1 -0
  419. package/dist/search/providers/scratchpad.d.ts +9 -0
  420. package/dist/search/providers/scratchpad.d.ts.map +1 -0
  421. package/dist/search/providers/scratchpad.js +64 -0
  422. package/dist/search/providers/scratchpad.js.map +1 -0
  423. package/dist/search/providers/session.d.ts +13 -0
  424. package/dist/search/providers/session.d.ts.map +1 -0
  425. package/dist/search/providers/session.js +48 -0
  426. package/dist/search/providers/session.js.map +1 -0
  427. package/dist/session.client.descriptor.d.ts +27 -0
  428. package/dist/session.client.descriptor.d.ts.map +1 -0
  429. package/dist/session.client.descriptor.js +8 -0
  430. package/dist/session.client.descriptor.js.map +1 -0
  431. package/dist/session.client.impl.d.ts +7 -0
  432. package/dist/session.client.impl.d.ts.map +1 -0
  433. package/dist/session.client.impl.js +9 -0
  434. package/dist/session.client.impl.js.map +1 -0
  435. package/dist/session.cloud.plugin.d.ts +3 -0
  436. package/dist/session.cloud.plugin.d.ts.map +1 -0
  437. package/dist/session.cloud.plugin.js +16 -0
  438. package/dist/session.cloud.plugin.js.map +1 -0
  439. package/dist/session.consumer.plugin.d.ts +3 -0
  440. package/dist/session.consumer.plugin.d.ts.map +1 -0
  441. package/dist/session.consumer.plugin.js +28 -0
  442. package/dist/session.consumer.plugin.js.map +1 -0
  443. package/dist/session.context.descriptor.d.ts +33 -0
  444. package/dist/session.context.descriptor.d.ts.map +1 -0
  445. package/dist/session.context.descriptor.js +9 -0
  446. package/dist/session.context.descriptor.js.map +1 -0
  447. package/dist/session.context.impl.consumer.d.ts +3 -0
  448. package/dist/session.context.impl.consumer.d.ts.map +1 -0
  449. package/dist/session.context.impl.consumer.js +3 -0
  450. package/dist/session.context.impl.consumer.js.map +1 -0
  451. package/dist/session.context.impl.d.ts +8 -0
  452. package/dist/session.context.impl.d.ts.map +1 -0
  453. package/dist/session.context.impl.js +13 -0
  454. package/dist/session.context.impl.js.map +1 -0
  455. package/dist/session.plugin.d.ts +3 -0
  456. package/dist/session.plugin.d.ts.map +1 -0
  457. package/dist/session.plugin.js +132 -0
  458. package/dist/session.plugin.js.map +1 -0
  459. package/dist/storage/record-draft.d.ts +9 -0
  460. package/dist/storage/record-draft.d.ts.map +1 -0
  461. package/dist/storage/record-draft.js +2 -0
  462. package/dist/storage/record-draft.js.map +1 -0
  463. package/dist/storage/session-connections.record.descriptor.d.ts +46 -0
  464. package/dist/storage/session-connections.record.descriptor.d.ts.map +1 -0
  465. package/dist/storage/session-connections.record.descriptor.js +126 -0
  466. package/dist/storage/session-connections.record.descriptor.js.map +1 -0
  467. package/dist/storage/session-jobs.record.descriptor.d.ts +86 -0
  468. package/dist/storage/session-jobs.record.descriptor.d.ts.map +1 -0
  469. package/dist/storage/session-jobs.record.descriptor.js +135 -0
  470. package/dist/storage/session-jobs.record.descriptor.js.map +1 -0
  471. package/dist/storage/session-knowledge-refs.record.descriptor.d.ts +48 -0
  472. package/dist/storage/session-knowledge-refs.record.descriptor.d.ts.map +1 -0
  473. package/dist/storage/session-knowledge-refs.record.descriptor.js +103 -0
  474. package/dist/storage/session-knowledge-refs.record.descriptor.js.map +1 -0
  475. package/dist/storage/session-membership-leases.record.descriptor.d.ts +39 -0
  476. package/dist/storage/session-membership-leases.record.descriptor.d.ts.map +1 -0
  477. package/dist/storage/session-membership-leases.record.descriptor.js +185 -0
  478. package/dist/storage/session-membership-leases.record.descriptor.js.map +1 -0
  479. package/dist/storage/session-messages.record.descriptor.d.ts +79 -0
  480. package/dist/storage/session-messages.record.descriptor.d.ts.map +1 -0
  481. package/dist/storage/session-messages.record.descriptor.js +142 -0
  482. package/dist/storage/session-messages.record.descriptor.js.map +1 -0
  483. package/dist/storage/session-participants.record.descriptor.d.ts +78 -0
  484. package/dist/storage/session-participants.record.descriptor.d.ts.map +1 -0
  485. package/dist/storage/session-participants.record.descriptor.js +119 -0
  486. package/dist/storage/session-participants.record.descriptor.js.map +1 -0
  487. package/dist/storage/session-presence.record.descriptor.d.ts +43 -0
  488. package/dist/storage/session-presence.record.descriptor.d.ts.map +1 -0
  489. package/dist/storage/session-presence.record.descriptor.js +141 -0
  490. package/dist/storage/session-presence.record.descriptor.js.map +1 -0
  491. package/dist/storage/session-scratchpad.record.descriptor.d.ts +54 -0
  492. package/dist/storage/session-scratchpad.record.descriptor.d.ts.map +1 -0
  493. package/dist/storage/session-scratchpad.record.descriptor.js +134 -0
  494. package/dist/storage/session-scratchpad.record.descriptor.js.map +1 -0
  495. package/dist/storage/session-sessions.record.descriptor.d.ts +68 -0
  496. package/dist/storage/session-sessions.record.descriptor.d.ts.map +1 -0
  497. package/dist/storage/session-sessions.record.descriptor.js +260 -0
  498. package/dist/storage/session-sessions.record.descriptor.js.map +1 -0
  499. package/dist/storage/session-state.record.descriptor.d.ts +37 -0
  500. package/dist/storage/session-state.record.descriptor.d.ts.map +1 -0
  501. package/dist/storage/session-state.record.descriptor.js +84 -0
  502. package/dist/storage/session-state.record.descriptor.js.map +1 -0
  503. package/dist/storage/session-todo.record.descriptor.d.ts +84 -0
  504. package/dist/storage/session-todo.record.descriptor.d.ts.map +1 -0
  505. package/dist/storage/session-todo.record.descriptor.js +245 -0
  506. package/dist/storage/session-todo.record.descriptor.js.map +1 -0
  507. package/dist/subscriptions/session.bound.scope.descriptor.d.ts +21 -0
  508. package/dist/subscriptions/session.bound.scope.descriptor.d.ts.map +1 -0
  509. package/dist/subscriptions/session.bound.scope.descriptor.js +21 -0
  510. package/dist/subscriptions/session.bound.scope.descriptor.js.map +1 -0
  511. package/dist/subscriptions/session.bound.scope.impl.d.ts +29 -0
  512. package/dist/subscriptions/session.bound.scope.impl.d.ts.map +1 -0
  513. package/dist/subscriptions/session.bound.scope.impl.js +40 -0
  514. package/dist/subscriptions/session.bound.scope.impl.js.map +1 -0
  515. package/dist/svelte/components/SessionCockpit.svelte +360 -0
  516. package/dist/svelte/components/SessionCockpit.svelte.d.ts +17 -0
  517. package/dist/svelte/components/SessionCockpit.svelte.d.ts.map +1 -0
  518. package/dist/svelte/index.d.ts +18 -0
  519. package/dist/svelte/index.d.ts.map +1 -0
  520. package/dist/svelte/index.js +16 -0
  521. package/dist/svelte/session-svelte.plugin.d.ts +10 -0
  522. package/dist/svelte/session-svelte.plugin.d.ts.map +1 -0
  523. package/dist/svelte/session-svelte.plugin.js +54 -0
  524. package/dist/svelte/styles.css +6 -0
  525. package/dist/svelte/tool-widgets/SessionCollaborateToolCard.svelte +53 -0
  526. package/dist/svelte/tool-widgets/SessionCollaborateToolCard.svelte.d.ts +5 -0
  527. package/dist/svelte/tool-widgets/SessionCollaborateToolCard.svelte.d.ts.map +1 -0
  528. package/dist/svelte/tool-widgets/SessionScratchpadToolCard.svelte +47 -0
  529. package/dist/svelte/tool-widgets/SessionScratchpadToolCard.svelte.d.ts +5 -0
  530. package/dist/svelte/tool-widgets/SessionScratchpadToolCard.svelte.d.ts.map +1 -0
  531. package/dist/svelte/tool-widgets/SessionTodoToolCard.svelte +43 -0
  532. package/dist/svelte/tool-widgets/SessionTodoToolCard.svelte.d.ts +5 -0
  533. package/dist/svelte/tool-widgets/SessionTodoToolCard.svelte.d.ts.map +1 -0
  534. package/dist/svelte/tool-widgets/SessionToolCard.svelte +47 -0
  535. package/dist/svelte/tool-widgets/SessionToolCard.svelte.d.ts +5 -0
  536. package/dist/svelte/tool-widgets/SessionToolCard.svelte.d.ts.map +1 -0
  537. package/dist/svelte/tool-widgets/SessionWorkspaceToolCard.svelte +44 -0
  538. package/dist/svelte/tool-widgets/SessionWorkspaceToolCard.svelte.d.ts +5 -0
  539. package/dist/svelte/tool-widgets/SessionWorkspaceToolCard.svelte.d.ts.map +1 -0
  540. package/dist/svelte/tool-widgets/card-fields.d.ts +68 -0
  541. package/dist/svelte/tool-widgets/card-fields.d.ts.map +1 -0
  542. package/dist/svelte/tool-widgets/card-fields.js +274 -0
  543. package/dist/testing/harness/transport-mocks.d.ts +380 -0
  544. package/dist/testing/harness/transport-mocks.d.ts.map +1 -0
  545. package/dist/testing/harness/transport-mocks.js +809 -0
  546. package/dist/testing/harness/transport-mocks.js.map +1 -0
  547. package/dist/tools/best-effort.d.ts +27 -0
  548. package/dist/tools/best-effort.d.ts.map +1 -0
  549. package/dist/tools/best-effort.js +31 -0
  550. package/dist/tools/best-effort.js.map +1 -0
  551. package/dist/tools/lifecycle/archive/handler.d.ts +19 -0
  552. package/dist/tools/lifecycle/archive/handler.d.ts.map +1 -0
  553. package/dist/tools/lifecycle/archive/handler.js +31 -0
  554. package/dist/tools/lifecycle/archive/handler.js.map +1 -0
  555. package/dist/tools/lifecycle/archive/schemas.d.ts +24 -0
  556. package/dist/tools/lifecycle/archive/schemas.d.ts.map +1 -0
  557. package/dist/tools/lifecycle/archive/schemas.js +22 -0
  558. package/dist/tools/lifecycle/archive/schemas.js.map +1 -0
  559. package/dist/tools/lifecycle/context/handler.d.ts +115 -0
  560. package/dist/tools/lifecycle/context/handler.d.ts.map +1 -0
  561. package/dist/tools/lifecycle/context/handler.js +82 -0
  562. package/dist/tools/lifecycle/context/handler.js.map +1 -0
  563. package/dist/tools/lifecycle/context/schemas.d.ts +44 -0
  564. package/dist/tools/lifecycle/context/schemas.d.ts.map +1 -0
  565. package/dist/tools/lifecycle/context/schemas.js +42 -0
  566. package/dist/tools/lifecycle/context/schemas.js.map +1 -0
  567. package/dist/tools/lifecycle/delete/handler.d.ts +7 -0
  568. package/dist/tools/lifecycle/delete/handler.d.ts.map +1 -0
  569. package/dist/tools/lifecycle/delete/handler.js +29 -0
  570. package/dist/tools/lifecycle/delete/handler.js.map +1 -0
  571. package/dist/tools/lifecycle/delete/schemas.d.ts +16 -0
  572. package/dist/tools/lifecycle/delete/schemas.d.ts.map +1 -0
  573. package/dist/tools/lifecycle/delete/schemas.js +14 -0
  574. package/dist/tools/lifecycle/delete/schemas.js.map +1 -0
  575. package/dist/tools/lifecycle/get/handler.d.ts +18 -0
  576. package/dist/tools/lifecycle/get/handler.d.ts.map +1 -0
  577. package/dist/tools/lifecycle/get/handler.js +28 -0
  578. package/dist/tools/lifecycle/get/handler.js.map +1 -0
  579. package/dist/tools/lifecycle/get/schemas.d.ts +26 -0
  580. package/dist/tools/lifecycle/get/schemas.d.ts.map +1 -0
  581. package/dist/tools/lifecycle/get/schemas.js +24 -0
  582. package/dist/tools/lifecycle/get/schemas.js.map +1 -0
  583. package/dist/tools/lifecycle/init/atlas.consumer.d.ts +17 -0
  584. package/dist/tools/lifecycle/init/atlas.consumer.d.ts.map +1 -0
  585. package/dist/tools/lifecycle/init/atlas.consumer.js +180 -0
  586. package/dist/tools/lifecycle/init/atlas.consumer.js.map +1 -0
  587. package/dist/tools/lifecycle/init/handler.d.ts +4 -0
  588. package/dist/tools/lifecycle/init/handler.d.ts.map +1 -0
  589. package/dist/tools/lifecycle/init/handler.js +369 -0
  590. package/dist/tools/lifecycle/init/handler.js.map +1 -0
  591. package/dist/tools/lifecycle/init/knowledge.d.ts +18 -0
  592. package/dist/tools/lifecycle/init/knowledge.d.ts.map +1 -0
  593. package/dist/tools/lifecycle/init/knowledge.js +86 -0
  594. package/dist/tools/lifecycle/init/knowledge.js.map +1 -0
  595. package/dist/tools/lifecycle/init/language.d.ts +10 -0
  596. package/dist/tools/lifecycle/init/language.d.ts.map +1 -0
  597. package/dist/tools/lifecycle/init/language.js +26 -0
  598. package/dist/tools/lifecycle/init/language.js.map +1 -0
  599. package/dist/tools/lifecycle/init/participant.d.ts +58 -0
  600. package/dist/tools/lifecycle/init/participant.d.ts.map +1 -0
  601. package/dist/tools/lifecycle/init/participant.js +219 -0
  602. package/dist/tools/lifecycle/init/participant.js.map +1 -0
  603. package/dist/tools/lifecycle/init/schemas.d.ts +106 -0
  604. package/dist/tools/lifecycle/init/schemas.d.ts.map +1 -0
  605. package/dist/tools/lifecycle/init/schemas.js +94 -0
  606. package/dist/tools/lifecycle/init/schemas.js.map +1 -0
  607. package/dist/tools/lifecycle/init/types.d.ts +143 -0
  608. package/dist/tools/lifecycle/init/types.d.ts.map +1 -0
  609. package/dist/tools/lifecycle/init/types.js +3 -0
  610. package/dist/tools/lifecycle/init/types.js.map +1 -0
  611. package/dist/tools/lifecycle/init/workspace.consumer.d.ts +13 -0
  612. package/dist/tools/lifecycle/init/workspace.consumer.d.ts.map +1 -0
  613. package/dist/tools/lifecycle/init/workspace.consumer.js +58 -0
  614. package/dist/tools/lifecycle/init/workspace.consumer.js.map +1 -0
  615. package/dist/tools/lifecycle/list/handler.d.ts +47 -0
  616. package/dist/tools/lifecycle/list/handler.d.ts.map +1 -0
  617. package/dist/tools/lifecycle/list/handler.js +48 -0
  618. package/dist/tools/lifecycle/list/handler.js.map +1 -0
  619. package/dist/tools/lifecycle/list/schemas.d.ts +37 -0
  620. package/dist/tools/lifecycle/list/schemas.d.ts.map +1 -0
  621. package/dist/tools/lifecycle/list/schemas.js +30 -0
  622. package/dist/tools/lifecycle/list/schemas.js.map +1 -0
  623. package/dist/tools/lifecycle/packet/handler.d.ts +490 -0
  624. package/dist/tools/lifecycle/packet/handler.d.ts.map +1 -0
  625. package/dist/tools/lifecycle/packet/handler.js +428 -0
  626. package/dist/tools/lifecycle/packet/handler.js.map +1 -0
  627. package/dist/tools/lifecycle/packet/schemas.d.ts +100 -0
  628. package/dist/tools/lifecycle/packet/schemas.d.ts.map +1 -0
  629. package/dist/tools/lifecycle/packet/schemas.js +36 -0
  630. package/dist/tools/lifecycle/packet/schemas.js.map +1 -0
  631. package/dist/tools/lifecycle/packet/todos.d.ts +30 -0
  632. package/dist/tools/lifecycle/packet/todos.d.ts.map +1 -0
  633. package/dist/tools/lifecycle/packet/todos.js +47 -0
  634. package/dist/tools/lifecycle/packet/todos.js.map +1 -0
  635. package/dist/tools/lifecycle/search/handler.d.ts +36 -0
  636. package/dist/tools/lifecycle/search/handler.d.ts.map +1 -0
  637. package/dist/tools/lifecycle/search/handler.js +44 -0
  638. package/dist/tools/lifecycle/search/handler.js.map +1 -0
  639. package/dist/tools/lifecycle/search/schemas.d.ts +37 -0
  640. package/dist/tools/lifecycle/search/schemas.d.ts.map +1 -0
  641. package/dist/tools/lifecycle/search/schemas.js +30 -0
  642. package/dist/tools/lifecycle/search/schemas.js.map +1 -0
  643. package/dist/tools/lifecycle/snapshot/handler.d.ts +144 -0
  644. package/dist/tools/lifecycle/snapshot/handler.d.ts.map +1 -0
  645. package/dist/tools/lifecycle/snapshot/handler.js +31 -0
  646. package/dist/tools/lifecycle/snapshot/handler.js.map +1 -0
  647. package/dist/tools/lifecycle/snapshot/schemas.d.ts +27 -0
  648. package/dist/tools/lifecycle/snapshot/schemas.d.ts.map +1 -0
  649. package/dist/tools/lifecycle/snapshot/schemas.js +25 -0
  650. package/dist/tools/lifecycle/snapshot/schemas.js.map +1 -0
  651. package/dist/tools/lifecycle/state/pause/handler.d.ts +13 -0
  652. package/dist/tools/lifecycle/state/pause/handler.d.ts.map +1 -0
  653. package/dist/tools/lifecycle/state/pause/handler.js +33 -0
  654. package/dist/tools/lifecycle/state/pause/handler.js.map +1 -0
  655. package/dist/tools/lifecycle/state/pause/schemas.d.ts +21 -0
  656. package/dist/tools/lifecycle/state/pause/schemas.d.ts.map +1 -0
  657. package/dist/tools/lifecycle/state/pause/schemas.js +19 -0
  658. package/dist/tools/lifecycle/state/pause/schemas.js.map +1 -0
  659. package/dist/tools/lifecycle/state/resume/handler.d.ts +13 -0
  660. package/dist/tools/lifecycle/state/resume/handler.d.ts.map +1 -0
  661. package/dist/tools/lifecycle/state/resume/handler.js +31 -0
  662. package/dist/tools/lifecycle/state/resume/handler.js.map +1 -0
  663. package/dist/tools/lifecycle/state/resume/schemas.d.ts +21 -0
  664. package/dist/tools/lifecycle/state/resume/schemas.d.ts.map +1 -0
  665. package/dist/tools/lifecycle/state/resume/schemas.js +19 -0
  666. package/dist/tools/lifecycle/state/resume/schemas.js.map +1 -0
  667. package/dist/tools/lifecycle/state/status/handler.d.ts +133 -0
  668. package/dist/tools/lifecycle/state/status/handler.d.ts.map +1 -0
  669. package/dist/tools/lifecycle/state/status/handler.js +232 -0
  670. package/dist/tools/lifecycle/state/status/handler.js.map +1 -0
  671. package/dist/tools/lifecycle/state/status/schemas.d.ts +85 -0
  672. package/dist/tools/lifecycle/state/status/schemas.d.ts.map +1 -0
  673. package/dist/tools/lifecycle/state/status/schemas.js +84 -0
  674. package/dist/tools/lifecycle/state/status/schemas.js.map +1 -0
  675. package/dist/tools/lifecycle/tool/schemas/index.d.ts +133 -0
  676. package/dist/tools/lifecycle/tool/schemas/index.d.ts.map +1 -0
  677. package/dist/tools/lifecycle/tool/schemas/index.js +66 -0
  678. package/dist/tools/lifecycle/tool/schemas/index.js.map +1 -0
  679. package/dist/tools/lifecycle/tool/session.tool.descriptor.d.ts +8 -0
  680. package/dist/tools/lifecycle/tool/session.tool.descriptor.d.ts.map +1 -0
  681. package/dist/tools/lifecycle/tool/session.tool.descriptor.js +44 -0
  682. package/dist/tools/lifecycle/tool/session.tool.descriptor.js.map +1 -0
  683. package/dist/tools/lifecycle/tool/session.variant.archive.impl.d.ts +7 -0
  684. package/dist/tools/lifecycle/tool/session.variant.archive.impl.d.ts.map +1 -0
  685. package/dist/tools/lifecycle/tool/session.variant.archive.impl.js +4 -0
  686. package/dist/tools/lifecycle/tool/session.variant.archive.impl.js.map +1 -0
  687. package/dist/tools/lifecycle/tool/session.variant.context.impl.d.ts +6 -0
  688. package/dist/tools/lifecycle/tool/session.variant.context.impl.d.ts.map +1 -0
  689. package/dist/tools/lifecycle/tool/session.variant.context.impl.js +4 -0
  690. package/dist/tools/lifecycle/tool/session.variant.context.impl.js.map +1 -0
  691. package/dist/tools/lifecycle/tool/session.variant.delete.impl.d.ts +7 -0
  692. package/dist/tools/lifecycle/tool/session.variant.delete.impl.d.ts.map +1 -0
  693. package/dist/tools/lifecycle/tool/session.variant.delete.impl.js +4 -0
  694. package/dist/tools/lifecycle/tool/session.variant.delete.impl.js.map +1 -0
  695. package/dist/tools/lifecycle/tool/session.variant.get.impl.d.ts +6 -0
  696. package/dist/tools/lifecycle/tool/session.variant.get.impl.d.ts.map +1 -0
  697. package/dist/tools/lifecycle/tool/session.variant.get.impl.js +4 -0
  698. package/dist/tools/lifecycle/tool/session.variant.get.impl.js.map +1 -0
  699. package/dist/tools/lifecycle/tool/session.variant.init.impl.cloud.d.ts +34 -0
  700. package/dist/tools/lifecycle/tool/session.variant.init.impl.cloud.d.ts.map +1 -0
  701. package/dist/tools/lifecycle/tool/session.variant.init.impl.cloud.js +6 -0
  702. package/dist/tools/lifecycle/tool/session.variant.init.impl.cloud.js.map +1 -0
  703. package/dist/tools/lifecycle/tool/session.variant.init.impl.consumer.d.ts +34 -0
  704. package/dist/tools/lifecycle/tool/session.variant.init.impl.consumer.d.ts.map +1 -0
  705. package/dist/tools/lifecycle/tool/session.variant.init.impl.consumer.js +4 -0
  706. package/dist/tools/lifecycle/tool/session.variant.init.impl.consumer.js.map +1 -0
  707. package/dist/tools/lifecycle/tool/session.variant.list.impl.d.ts +8 -0
  708. package/dist/tools/lifecycle/tool/session.variant.list.impl.d.ts.map +1 -0
  709. package/dist/tools/lifecycle/tool/session.variant.list.impl.js +4 -0
  710. package/dist/tools/lifecycle/tool/session.variant.list.impl.js.map +1 -0
  711. package/dist/tools/lifecycle/tool/session.variant.packet.impl.d.ts +9 -0
  712. package/dist/tools/lifecycle/tool/session.variant.packet.impl.d.ts.map +1 -0
  713. package/dist/tools/lifecycle/tool/session.variant.packet.impl.js +4 -0
  714. package/dist/tools/lifecycle/tool/session.variant.packet.impl.js.map +1 -0
  715. package/dist/tools/lifecycle/tool/session.variant.pause.impl.d.ts +6 -0
  716. package/dist/tools/lifecycle/tool/session.variant.pause.impl.d.ts.map +1 -0
  717. package/dist/tools/lifecycle/tool/session.variant.pause.impl.js +4 -0
  718. package/dist/tools/lifecycle/tool/session.variant.pause.impl.js.map +1 -0
  719. package/dist/tools/lifecycle/tool/session.variant.resume.impl.d.ts +6 -0
  720. package/dist/tools/lifecycle/tool/session.variant.resume.impl.d.ts.map +1 -0
  721. package/dist/tools/lifecycle/tool/session.variant.resume.impl.js +4 -0
  722. package/dist/tools/lifecycle/tool/session.variant.resume.impl.js.map +1 -0
  723. package/dist/tools/lifecycle/tool/session.variant.search.impl.d.ts +8 -0
  724. package/dist/tools/lifecycle/tool/session.variant.search.impl.d.ts.map +1 -0
  725. package/dist/tools/lifecycle/tool/session.variant.search.impl.js +4 -0
  726. package/dist/tools/lifecycle/tool/session.variant.search.impl.js.map +1 -0
  727. package/dist/tools/lifecycle/tool/session.variant.snapshot.impl.d.ts +6 -0
  728. package/dist/tools/lifecycle/tool/session.variant.snapshot.impl.d.ts.map +1 -0
  729. package/dist/tools/lifecycle/tool/session.variant.snapshot.impl.js +4 -0
  730. package/dist/tools/lifecycle/tool/session.variant.snapshot.impl.js.map +1 -0
  731. package/dist/tools/lifecycle/tool/session.variant.status.impl.d.ts +8 -0
  732. package/dist/tools/lifecycle/tool/session.variant.status.impl.d.ts.map +1 -0
  733. package/dist/tools/lifecycle/tool/session.variant.status.impl.js +4 -0
  734. package/dist/tools/lifecycle/tool/session.variant.status.impl.js.map +1 -0
  735. package/dist/tools/lifecycle/tool/session.variant.update.impl.d.ts +10 -0
  736. package/dist/tools/lifecycle/tool/session.variant.update.impl.d.ts.map +1 -0
  737. package/dist/tools/lifecycle/tool/session.variant.update.impl.js +4 -0
  738. package/dist/tools/lifecycle/tool/session.variant.update.impl.js.map +1 -0
  739. package/dist/tools/lifecycle/update/handler.d.ts +47 -0
  740. package/dist/tools/lifecycle/update/handler.d.ts.map +1 -0
  741. package/dist/tools/lifecycle/update/handler.js +30 -0
  742. package/dist/tools/lifecycle/update/handler.js.map +1 -0
  743. package/dist/tools/lifecycle/update/schemas.d.ts +25 -0
  744. package/dist/tools/lifecycle/update/schemas.d.ts.map +1 -0
  745. package/dist/tools/lifecycle/update/schemas.js +24 -0
  746. package/dist/tools/lifecycle/update/schemas.js.map +1 -0
  747. package/dist/tools/lifecycle/workspace-capabilities.consumer.d.ts +3 -0
  748. package/dist/tools/lifecycle/workspace-capabilities.consumer.d.ts.map +1 -0
  749. package/dist/tools/lifecycle/workspace-capabilities.consumer.js +3 -0
  750. package/dist/tools/lifecycle/workspace-capabilities.consumer.js.map +1 -0
  751. package/dist/tools/lifecycle/workspace-capabilities.d.ts +14 -0
  752. package/dist/tools/lifecycle/workspace-capabilities.d.ts.map +1 -0
  753. package/dist/tools/lifecycle/workspace-capabilities.js +38 -0
  754. package/dist/tools/lifecycle/workspace-capabilities.js.map +1 -0
  755. package/dist/tools/messages/delete/schemas.d.ts +37 -0
  756. package/dist/tools/messages/delete/schemas.d.ts.map +1 -0
  757. package/dist/tools/messages/delete/schemas.js +50 -0
  758. package/dist/tools/messages/delete/schemas.js.map +1 -0
  759. package/dist/tools/messages/handlers.d.ts +143 -0
  760. package/dist/tools/messages/handlers.d.ts.map +1 -0
  761. package/dist/tools/messages/handlers.js +564 -0
  762. package/dist/tools/messages/handlers.js.map +1 -0
  763. package/dist/tools/messages/list/schemas.d.ts +38 -0
  764. package/dist/tools/messages/list/schemas.d.ts.map +1 -0
  765. package/dist/tools/messages/list/schemas.js +40 -0
  766. package/dist/tools/messages/list/schemas.js.map +1 -0
  767. package/dist/tools/messages/mark-read/schemas.d.ts +63 -0
  768. package/dist/tools/messages/mark-read/schemas.d.ts.map +1 -0
  769. package/dist/tools/messages/mark-read/schemas.js +60 -0
  770. package/dist/tools/messages/mark-read/schemas.js.map +1 -0
  771. package/dist/tools/messages/send/schemas.d.ts +50 -0
  772. package/dist/tools/messages/send/schemas.d.ts.map +1 -0
  773. package/dist/tools/messages/send/schemas.js +61 -0
  774. package/dist/tools/messages/send/schemas.js.map +1 -0
  775. package/dist/tools/messages/tool/schemas/index.d.ts +70 -0
  776. package/dist/tools/messages/tool/schemas/index.d.ts.map +1 -0
  777. package/dist/tools/messages/tool/schemas/index.js +22 -0
  778. package/dist/tools/messages/tool/schemas/index.js.map +1 -0
  779. package/dist/tools/messages/tool/session-collaborate.descriptor.d.ts +8 -0
  780. package/dist/tools/messages/tool/session-collaborate.descriptor.d.ts.map +1 -0
  781. package/dist/tools/messages/tool/session-collaborate.descriptor.js +32 -0
  782. package/dist/tools/messages/tool/session-collaborate.descriptor.js.map +1 -0
  783. package/dist/tools/messages/tool/session-collaborate.variant.delete.impl.d.ts +10 -0
  784. package/dist/tools/messages/tool/session-collaborate.variant.delete.impl.d.ts.map +1 -0
  785. package/dist/tools/messages/tool/session-collaborate.variant.delete.impl.js +4 -0
  786. package/dist/tools/messages/tool/session-collaborate.variant.delete.impl.js.map +1 -0
  787. package/dist/tools/messages/tool/session-collaborate.variant.list.impl.d.ts +12 -0
  788. package/dist/tools/messages/tool/session-collaborate.variant.list.impl.d.ts.map +1 -0
  789. package/dist/tools/messages/tool/session-collaborate.variant.list.impl.js +4 -0
  790. package/dist/tools/messages/tool/session-collaborate.variant.list.impl.js.map +1 -0
  791. package/dist/tools/messages/tool/session-collaborate.variant.mark-read.impl.d.ts +11 -0
  792. package/dist/tools/messages/tool/session-collaborate.variant.mark-read.impl.d.ts.map +1 -0
  793. package/dist/tools/messages/tool/session-collaborate.variant.mark-read.impl.js +4 -0
  794. package/dist/tools/messages/tool/session-collaborate.variant.mark-read.impl.js.map +1 -0
  795. package/dist/tools/messages/tool/session-collaborate.variant.send.impl.d.ts +18 -0
  796. package/dist/tools/messages/tool/session-collaborate.variant.send.impl.d.ts.map +1 -0
  797. package/dist/tools/messages/tool/session-collaborate.variant.send.impl.js +4 -0
  798. package/dist/tools/messages/tool/session-collaborate.variant.send.impl.js.map +1 -0
  799. package/dist/tools/scratchpad/delete/schemas.d.ts +18 -0
  800. package/dist/tools/scratchpad/delete/schemas.d.ts.map +1 -0
  801. package/dist/tools/scratchpad/delete/schemas.js +16 -0
  802. package/dist/tools/scratchpad/delete/schemas.js.map +1 -0
  803. package/dist/tools/scratchpad/handlers.d.ts +88 -0
  804. package/dist/tools/scratchpad/handlers.d.ts.map +1 -0
  805. package/dist/tools/scratchpad/handlers.js +189 -0
  806. package/dist/tools/scratchpad/handlers.js.map +1 -0
  807. package/dist/tools/scratchpad/list/schemas.d.ts +34 -0
  808. package/dist/tools/scratchpad/list/schemas.d.ts.map +1 -0
  809. package/dist/tools/scratchpad/list/schemas.js +27 -0
  810. package/dist/tools/scratchpad/list/schemas.js.map +1 -0
  811. package/dist/tools/scratchpad/read/schemas.d.ts +34 -0
  812. package/dist/tools/scratchpad/read/schemas.d.ts.map +1 -0
  813. package/dist/tools/scratchpad/read/schemas.js +34 -0
  814. package/dist/tools/scratchpad/read/schemas.js.map +1 -0
  815. package/dist/tools/scratchpad/search/schemas.d.ts +28 -0
  816. package/dist/tools/scratchpad/search/schemas.d.ts.map +1 -0
  817. package/dist/tools/scratchpad/search/schemas.js +26 -0
  818. package/dist/tools/scratchpad/search/schemas.js.map +1 -0
  819. package/dist/tools/scratchpad/tool/schemas/index.d.ts +102 -0
  820. package/dist/tools/scratchpad/tool/schemas/index.d.ts.map +1 -0
  821. package/dist/tools/scratchpad/tool/schemas/index.js +42 -0
  822. package/dist/tools/scratchpad/tool/schemas/index.js.map +1 -0
  823. package/dist/tools/scratchpad/tool/session-scratchpad.descriptor.d.ts +8 -0
  824. package/dist/tools/scratchpad/tool/session-scratchpad.descriptor.d.ts.map +1 -0
  825. package/dist/tools/scratchpad/tool/session-scratchpad.descriptor.js +36 -0
  826. package/dist/tools/scratchpad/tool/session-scratchpad.descriptor.js.map +1 -0
  827. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-delete.impl.d.ts +9 -0
  828. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-delete.impl.d.ts.map +1 -0
  829. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-delete.impl.js +4 -0
  830. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-delete.impl.js.map +1 -0
  831. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-read.impl.d.ts +8 -0
  832. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-read.impl.d.ts.map +1 -0
  833. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-read.impl.js +4 -0
  834. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-read.impl.js.map +1 -0
  835. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-write.impl.d.ts +14 -0
  836. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-write.impl.d.ts.map +1 -0
  837. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-write.impl.js +4 -0
  838. package/dist/tools/scratchpad/tool/session-scratchpad.variant.batch-write.impl.js.map +1 -0
  839. package/dist/tools/scratchpad/tool/session-scratchpad.variant.delete.impl.d.ts +9 -0
  840. package/dist/tools/scratchpad/tool/session-scratchpad.variant.delete.impl.d.ts.map +1 -0
  841. package/dist/tools/scratchpad/tool/session-scratchpad.variant.delete.impl.js +4 -0
  842. package/dist/tools/scratchpad/tool/session-scratchpad.variant.delete.impl.js.map +1 -0
  843. package/dist/tools/scratchpad/tool/session-scratchpad.variant.list.impl.d.ts +9 -0
  844. package/dist/tools/scratchpad/tool/session-scratchpad.variant.list.impl.d.ts.map +1 -0
  845. package/dist/tools/scratchpad/tool/session-scratchpad.variant.list.impl.js +4 -0
  846. package/dist/tools/scratchpad/tool/session-scratchpad.variant.list.impl.js.map +1 -0
  847. package/dist/tools/scratchpad/tool/session-scratchpad.variant.read.impl.d.ts +8 -0
  848. package/dist/tools/scratchpad/tool/session-scratchpad.variant.read.impl.d.ts.map +1 -0
  849. package/dist/tools/scratchpad/tool/session-scratchpad.variant.read.impl.js +4 -0
  850. package/dist/tools/scratchpad/tool/session-scratchpad.variant.read.impl.js.map +1 -0
  851. package/dist/tools/scratchpad/tool/session-scratchpad.variant.search.impl.d.ts +8 -0
  852. package/dist/tools/scratchpad/tool/session-scratchpad.variant.search.impl.d.ts.map +1 -0
  853. package/dist/tools/scratchpad/tool/session-scratchpad.variant.search.impl.js +4 -0
  854. package/dist/tools/scratchpad/tool/session-scratchpad.variant.search.impl.js.map +1 -0
  855. package/dist/tools/scratchpad/tool/session-scratchpad.variant.write.impl.d.ts +14 -0
  856. package/dist/tools/scratchpad/tool/session-scratchpad.variant.write.impl.d.ts.map +1 -0
  857. package/dist/tools/scratchpad/tool/session-scratchpad.variant.write.impl.js +4 -0
  858. package/dist/tools/scratchpad/tool/session-scratchpad.variant.write.impl.js.map +1 -0
  859. package/dist/tools/scratchpad/write/schemas/index.d.ts +47 -0
  860. package/dist/tools/scratchpad/write/schemas/index.d.ts.map +1 -0
  861. package/dist/tools/scratchpad/write/schemas/index.js +26 -0
  862. package/dist/tools/scratchpad/write/schemas/index.js.map +1 -0
  863. package/dist/tools/todos/add/handler.d.ts +37 -0
  864. package/dist/tools/todos/add/handler.d.ts.map +1 -0
  865. package/dist/tools/todos/add/handler.js +59 -0
  866. package/dist/tools/todos/add/handler.js.map +1 -0
  867. package/dist/tools/todos/add/schemas.d.ts +92 -0
  868. package/dist/tools/todos/add/schemas.d.ts.map +1 -0
  869. package/dist/tools/todos/add/schemas.js +59 -0
  870. package/dist/tools/todos/add/schemas.js.map +1 -0
  871. package/dist/tools/todos/batch-add/handler.d.ts +21 -0
  872. package/dist/tools/todos/batch-add/handler.d.ts.map +1 -0
  873. package/dist/tools/todos/batch-add/handler.js +46 -0
  874. package/dist/tools/todos/batch-add/handler.js.map +1 -0
  875. package/dist/tools/todos/batch-add/schemas.d.ts +65 -0
  876. package/dist/tools/todos/batch-add/schemas.d.ts.map +1 -0
  877. package/dist/tools/todos/batch-add/schemas.js +47 -0
  878. package/dist/tools/todos/batch-add/schemas.js.map +1 -0
  879. package/dist/tools/todos/batch-update/handler.d.ts +4 -0
  880. package/dist/tools/todos/batch-update/handler.d.ts.map +1 -0
  881. package/dist/tools/todos/batch-update/handler.js +25 -0
  882. package/dist/tools/todos/batch-update/handler.js.map +1 -0
  883. package/dist/tools/todos/batch-update/schemas.d.ts +35 -0
  884. package/dist/tools/todos/batch-update/schemas.d.ts.map +1 -0
  885. package/dist/tools/todos/batch-update/schemas.js +22 -0
  886. package/dist/tools/todos/batch-update/schemas.js.map +1 -0
  887. package/dist/tools/todos/complete/handler.d.ts +22 -0
  888. package/dist/tools/todos/complete/handler.d.ts.map +1 -0
  889. package/dist/tools/todos/complete/handler.js +76 -0
  890. package/dist/tools/todos/complete/handler.js.map +1 -0
  891. package/dist/tools/todos/complete/schemas.d.ts +27 -0
  892. package/dist/tools/todos/complete/schemas.d.ts.map +1 -0
  893. package/dist/tools/todos/complete/schemas.js +25 -0
  894. package/dist/tools/todos/complete/schemas.js.map +1 -0
  895. package/dist/tools/todos/delete/handler.d.ts +4 -0
  896. package/dist/tools/todos/delete/handler.d.ts.map +1 -0
  897. package/dist/tools/todos/delete/handler.js +58 -0
  898. package/dist/tools/todos/delete/handler.js.map +1 -0
  899. package/dist/tools/todos/delete/schemas.d.ts +25 -0
  900. package/dist/tools/todos/delete/schemas.d.ts.map +1 -0
  901. package/dist/tools/todos/delete/schemas.js +23 -0
  902. package/dist/tools/todos/delete/schemas.js.map +1 -0
  903. package/dist/tools/todos/get/handler.d.ts +45 -0
  904. package/dist/tools/todos/get/handler.d.ts.map +1 -0
  905. package/dist/tools/todos/get/handler.js +10 -0
  906. package/dist/tools/todos/get/handler.js.map +1 -0
  907. package/dist/tools/todos/get/schemas.d.ts +17 -0
  908. package/dist/tools/todos/get/schemas.d.ts.map +1 -0
  909. package/dist/tools/todos/get/schemas.js +15 -0
  910. package/dist/tools/todos/get/schemas.js.map +1 -0
  911. package/dist/tools/todos/list/handler.d.ts +58 -0
  912. package/dist/tools/todos/list/handler.d.ts.map +1 -0
  913. package/dist/tools/todos/list/handler.js +91 -0
  914. package/dist/tools/todos/list/handler.js.map +1 -0
  915. package/dist/tools/todos/list/schemas.d.ts +40 -0
  916. package/dist/tools/todos/list/schemas.d.ts.map +1 -0
  917. package/dist/tools/todos/list/schemas.js +34 -0
  918. package/dist/tools/todos/list/schemas.js.map +1 -0
  919. package/dist/tools/todos/project-ref.d.ts +19 -0
  920. package/dist/tools/todos/project-ref.d.ts.map +1 -0
  921. package/dist/tools/todos/project-ref.js +37 -0
  922. package/dist/tools/todos/project-ref.js.map +1 -0
  923. package/dist/tools/todos/tool/schemas/index.d.ts +219 -0
  924. package/dist/tools/todos/tool/schemas/index.d.ts.map +1 -0
  925. package/dist/tools/todos/tool/schemas/index.js +56 -0
  926. package/dist/tools/todos/tool/schemas/index.js.map +1 -0
  927. package/dist/tools/todos/tool/session-todo.descriptor.d.ts +8 -0
  928. package/dist/tools/todos/tool/session-todo.descriptor.d.ts.map +1 -0
  929. package/dist/tools/todos/tool/session-todo.descriptor.js +39 -0
  930. package/dist/tools/todos/tool/session-todo.descriptor.js.map +1 -0
  931. package/dist/tools/todos/tool/session-todo.variant.add.impl.d.ts +40 -0
  932. package/dist/tools/todos/tool/session-todo.variant.add.impl.d.ts.map +1 -0
  933. package/dist/tools/todos/tool/session-todo.variant.add.impl.js +4 -0
  934. package/dist/tools/todos/tool/session-todo.variant.add.impl.js.map +1 -0
  935. package/dist/tools/todos/tool/session-todo.variant.batch-add.impl.d.ts +24 -0
  936. package/dist/tools/todos/tool/session-todo.variant.batch-add.impl.d.ts.map +1 -0
  937. package/dist/tools/todos/tool/session-todo.variant.batch-add.impl.js +4 -0
  938. package/dist/tools/todos/tool/session-todo.variant.batch-add.impl.js.map +1 -0
  939. package/dist/tools/todos/tool/session-todo.variant.batch-complete.impl.d.ts +9 -0
  940. package/dist/tools/todos/tool/session-todo.variant.batch-complete.impl.d.ts.map +1 -0
  941. package/dist/tools/todos/tool/session-todo.variant.batch-complete.impl.js +4 -0
  942. package/dist/tools/todos/tool/session-todo.variant.batch-complete.impl.js.map +1 -0
  943. package/dist/tools/todos/tool/session-todo.variant.batch-delete.impl.d.ts +10 -0
  944. package/dist/tools/todos/tool/session-todo.variant.batch-delete.impl.d.ts.map +1 -0
  945. package/dist/tools/todos/tool/session-todo.variant.batch-delete.impl.js +4 -0
  946. package/dist/tools/todos/tool/session-todo.variant.batch-delete.impl.js.map +1 -0
  947. package/dist/tools/todos/tool/session-todo.variant.batch-update.impl.d.ts +9 -0
  948. package/dist/tools/todos/tool/session-todo.variant.batch-update.impl.d.ts.map +1 -0
  949. package/dist/tools/todos/tool/session-todo.variant.batch-update.impl.js +4 -0
  950. package/dist/tools/todos/tool/session-todo.variant.batch-update.impl.js.map +1 -0
  951. package/dist/tools/todos/tool/session-todo.variant.complete.impl.d.ts +9 -0
  952. package/dist/tools/todos/tool/session-todo.variant.complete.impl.d.ts.map +1 -0
  953. package/dist/tools/todos/tool/session-todo.variant.complete.impl.js +4 -0
  954. package/dist/tools/todos/tool/session-todo.variant.complete.impl.js.map +1 -0
  955. package/dist/tools/todos/tool/session-todo.variant.delete.impl.d.ts +10 -0
  956. package/dist/tools/todos/tool/session-todo.variant.delete.impl.d.ts.map +1 -0
  957. package/dist/tools/todos/tool/session-todo.variant.delete.impl.js +4 -0
  958. package/dist/tools/todos/tool/session-todo.variant.delete.impl.js.map +1 -0
  959. package/dist/tools/todos/tool/session-todo.variant.get.impl.d.ts +6 -0
  960. package/dist/tools/todos/tool/session-todo.variant.get.impl.d.ts.map +1 -0
  961. package/dist/tools/todos/tool/session-todo.variant.get.impl.js +4 -0
  962. package/dist/tools/todos/tool/session-todo.variant.get.impl.js.map +1 -0
  963. package/dist/tools/todos/tool/session-todo.variant.list.impl.d.ts +14 -0
  964. package/dist/tools/todos/tool/session-todo.variant.list.impl.d.ts.map +1 -0
  965. package/dist/tools/todos/tool/session-todo.variant.list.impl.js +4 -0
  966. package/dist/tools/todos/tool/session-todo.variant.list.impl.js.map +1 -0
  967. package/dist/tools/todos/tool/session-todo.variant.tree.impl.d.ts +7 -0
  968. package/dist/tools/todos/tool/session-todo.variant.tree.impl.d.ts.map +1 -0
  969. package/dist/tools/todos/tool/session-todo.variant.tree.impl.js +4 -0
  970. package/dist/tools/todos/tool/session-todo.variant.tree.impl.js.map +1 -0
  971. package/dist/tools/todos/tool/session-todo.variant.update.impl.d.ts +21 -0
  972. package/dist/tools/todos/tool/session-todo.variant.update.impl.d.ts.map +1 -0
  973. package/dist/tools/todos/tool/session-todo.variant.update.impl.js +4 -0
  974. package/dist/tools/todos/tool/session-todo.variant.update.impl.js.map +1 -0
  975. package/dist/tools/todos/tree/handler.d.ts +20 -0
  976. package/dist/tools/todos/tree/handler.d.ts.map +1 -0
  977. package/dist/tools/todos/tree/handler.js +41 -0
  978. package/dist/tools/todos/tree/handler.js.map +1 -0
  979. package/dist/tools/todos/tree/schemas.d.ts +21 -0
  980. package/dist/tools/todos/tree/schemas.d.ts.map +1 -0
  981. package/dist/tools/todos/tree/schemas.js +19 -0
  982. package/dist/tools/todos/tree/schemas.js.map +1 -0
  983. package/dist/tools/todos/update/handler.d.ts +54 -0
  984. package/dist/tools/todos/update/handler.d.ts.map +1 -0
  985. package/dist/tools/todos/update/handler.js +60 -0
  986. package/dist/tools/todos/update/handler.js.map +1 -0
  987. package/dist/tools/todos/update/schemas.d.ts +57 -0
  988. package/dist/tools/todos/update/schemas.d.ts.map +1 -0
  989. package/dist/tools/todos/update/schemas.js +35 -0
  990. package/dist/tools/todos/update/schemas.js.map +1 -0
  991. package/dist/tools/tool-runtime.d.ts +17 -0
  992. package/dist/tools/tool-runtime.d.ts.map +1 -0
  993. package/dist/tools/tool-runtime.js +39 -0
  994. package/dist/tools/tool-runtime.js.map +1 -0
  995. package/dist/tools/workspace/handlers.d.ts +75 -0
  996. package/dist/tools/workspace/handlers.d.ts.map +1 -0
  997. package/dist/tools/workspace/handlers.js +154 -0
  998. package/dist/tools/workspace/handlers.js.map +1 -0
  999. package/dist/tools/workspace/tool/schemas/index.d.ts +47 -0
  1000. package/dist/tools/workspace/tool/schemas/index.d.ts.map +1 -0
  1001. package/dist/tools/workspace/tool/schemas/index.js +33 -0
  1002. package/dist/tools/workspace/tool/schemas/index.js.map +1 -0
  1003. package/dist/tools/workspace/tool/session-workspace.descriptor.d.ts +8 -0
  1004. package/dist/tools/workspace/tool/session-workspace.descriptor.d.ts.map +1 -0
  1005. package/dist/tools/workspace/tool/session-workspace.descriptor.js +31 -0
  1006. package/dist/tools/workspace/tool/session-workspace.descriptor.js.map +1 -0
  1007. package/dist/tools/workspace/tool/session-workspace.variant.list.impl.d.ts +5 -0
  1008. package/dist/tools/workspace/tool/session-workspace.variant.list.impl.d.ts.map +1 -0
  1009. package/dist/tools/workspace/tool/session-workspace.variant.list.impl.js +7 -0
  1010. package/dist/tools/workspace/tool/session-workspace.variant.list.impl.js.map +1 -0
  1011. package/dist/tools/workspace/tool/session-workspace.variant.pair.impl.d.ts +8 -0
  1012. package/dist/tools/workspace/tool/session-workspace.variant.pair.impl.d.ts.map +1 -0
  1013. package/dist/tools/workspace/tool/session-workspace.variant.pair.impl.js +4 -0
  1014. package/dist/tools/workspace/tool/session-workspace.variant.pair.impl.js.map +1 -0
  1015. package/dist/tools/workspace/tool/session-workspace.variant.unpair.impl.d.ts +6 -0
  1016. package/dist/tools/workspace/tool/session-workspace.variant.unpair.impl.d.ts.map +1 -0
  1017. package/dist/tools/workspace/tool/session-workspace.variant.unpair.impl.js +4 -0
  1018. package/dist/tools/workspace/tool/session-workspace.variant.unpair.impl.js.map +1 -0
  1019. package/dist/tui/components/SessionDetailView.d.ts +17 -0
  1020. package/dist/tui/components/SessionDetailView.d.ts.map +1 -0
  1021. package/dist/tui/components/SessionDetailView.js +229 -0
  1022. package/dist/tui/components/SessionDetailView.js.map +1 -0
  1023. package/dist/tui/index.d.ts +7 -0
  1024. package/dist/tui/index.d.ts.map +1 -0
  1025. package/dist/tui/index.js +7 -0
  1026. package/dist/tui/index.js.map +1 -0
  1027. package/dist/tui/session-actions.d.ts +20 -0
  1028. package/dist/tui/session-actions.d.ts.map +1 -0
  1029. package/dist/tui/session-actions.js +27 -0
  1030. package/dist/tui/session-actions.js.map +1 -0
  1031. package/dist/tui/session-tui.plugin.d.ts +10 -0
  1032. package/dist/tui/session-tui.plugin.d.ts.map +1 -0
  1033. package/dist/tui/session-tui.plugin.js +29 -0
  1034. package/dist/tui/session-tui.plugin.js.map +1 -0
  1035. package/dist/tui/sessions-open.descriptor.d.ts +9 -0
  1036. package/dist/tui/sessions-open.descriptor.d.ts.map +1 -0
  1037. package/dist/tui/sessions-open.descriptor.js +18 -0
  1038. package/dist/tui/sessions-open.descriptor.js.map +1 -0
  1039. package/dist/tui/sessions-open.impl.consumer.d.ts +9 -0
  1040. package/dist/tui/sessions-open.impl.consumer.d.ts.map +1 -0
  1041. package/dist/tui/sessions-open.impl.consumer.js +13 -0
  1042. package/dist/tui/sessions-open.impl.consumer.js.map +1 -0
  1043. package/dist/tui/sessions-recovery.d.ts +14 -0
  1044. package/dist/tui/sessions-recovery.d.ts.map +1 -0
  1045. package/dist/tui/sessions-recovery.js +23 -0
  1046. package/dist/tui/sessions-recovery.js.map +1 -0
  1047. package/dist/tui/sessions-registry.descriptor.d.ts +11 -0
  1048. package/dist/tui/sessions-registry.descriptor.d.ts.map +1 -0
  1049. package/dist/tui/sessions-registry.descriptor.js +17 -0
  1050. package/dist/tui/sessions-registry.descriptor.js.map +1 -0
  1051. package/dist/tui/sessions-registry.impl.consumer.d.ts +15 -0
  1052. package/dist/tui/sessions-registry.impl.consumer.d.ts.map +1 -0
  1053. package/dist/tui/sessions-registry.impl.consumer.js +79 -0
  1054. package/dist/tui/sessions-registry.impl.consumer.js.map +1 -0
  1055. package/dist/tui/sessions-registry.state-key.d.ts +32 -0
  1056. package/dist/tui/sessions-registry.state-key.d.ts.map +1 -0
  1057. package/dist/tui/sessions-registry.state-key.js +8 -0
  1058. package/dist/tui/sessions-registry.state-key.js.map +1 -0
  1059. package/dist/tui/sessions.descriptor.d.ts +10 -0
  1060. package/dist/tui/sessions.descriptor.d.ts.map +1 -0
  1061. package/dist/tui/sessions.descriptor.js +25 -0
  1062. package/dist/tui/sessions.descriptor.js.map +1 -0
  1063. package/dist/tui/sessions.impl.consumer.d.ts +4 -0
  1064. package/dist/tui/sessions.impl.consumer.d.ts.map +1 -0
  1065. package/dist/tui/sessions.impl.consumer.js +284 -0
  1066. package/dist/tui/sessions.impl.consumer.js.map +1 -0
  1067. package/dist/tui/sessions.logic.d.ts +33 -0
  1068. package/dist/tui/sessions.logic.d.ts.map +1 -0
  1069. package/dist/tui/sessions.logic.js +94 -0
  1070. package/dist/tui/sessions.logic.js.map +1 -0
  1071. package/package.json +273 -4
@@ -0,0 +1,1420 @@
1
+ import { StoredClientInfoSchema } from "../../schemas/participant.js";
2
+ /**
3
+ * MCP Participant Utilities
4
+ * Auto-registration and identification for MCP clients
5
+ *
6
+ * HTTP transport state is connection-scoped; durable identity and session
7
+ * routing are resolved by the canonical SessionManager.
8
+ */
9
+ import { CapabilityError, CaughtFailureSchema, isCapabilityError, valueFreeFailure } from '@vibesdotdev/kernel';
10
+ import * as z from 'zod/v4';
11
+ import { boundSessionIdOf } from '@vibesdotdev/kernel/schemas/scope';
12
+ import { getLogger } from '@vibesdotdev/logging';
13
+ import { generateId } from '@vibesdotdev/shared/utils';
14
+ import { harnessSeatOf, harnessSeatSlug, harnessSessionSeat } from "../../schemas/harness-seat.js";
15
+ import { McpSessionRegistry, mcpSessionRegistryFor } from "./session-registry.js";
16
+ import { unboundSessionErrorFields } from "./unbound-guidance.js";
17
+ /** The serving root's MCP transport registry: the manager's runtime names the root. */
18
+ function registryOf(session) {
19
+ return mcpSessionRegistryFor(session.servingRuntime);
20
+ }
21
+ /**
22
+ * Get participant cache for an MCP session
23
+ * Uses connection-scoped cache for HTTP and one transport cache for stdio.
24
+ */
25
+ function getParticipantCache(registry, mcpSessionId) {
26
+ return registry.getParticipantCache(mcpSessionId ?? null);
27
+ }
28
+ function getRuntimeClientInfo(registry, mcpSessionId) {
29
+ return registry.getClientInfo(mcpSessionId ?? null) ?? undefined;
30
+ }
31
+ /** Connection-scoped initialize identity for bind/receipt projection, on the manager's root. */
32
+ export function getMcpClientInfo(session, mcpSessionId) {
33
+ return getRuntimeClientInfo(registryOf(session), mcpSessionId);
34
+ }
35
+ function getRuntimeConnectionState(registry, mcpSessionId) {
36
+ return registry.getConnectionState(mcpSessionId ?? null) ?? undefined;
37
+ }
38
+ function updateRuntimeConnectionState(registry, updates, mcpSessionId) {
39
+ const effectiveKey = mcpSessionId || updates.connectionId || undefined;
40
+ const previous = getRuntimeConnectionState(registry, effectiveKey) ?? {
41
+ transport: 'stdio'
42
+ };
43
+ const next = {
44
+ transport: updates.transport ?? previous.transport ?? 'stdio',
45
+ connectionId: updates.connectionId ?? previous.connectionId,
46
+ sessionId: updates.sessionId ?? previous.sessionId,
47
+ participantId: updates.participantId ?? previous.participantId ?? null,
48
+ participantSlug: updates.participantSlug ?? previous.participantSlug ?? null,
49
+ httpPeer: updates.httpPeer ?? previous.httpPeer,
50
+ // Map to base type fields for compatibility
51
+ agentId: updates.participantId ?? previous.participantId ?? previous.agentId ?? null,
52
+ agentSlug: updates.participantSlug ?? previous.participantSlug ?? previous.agentSlug ?? null
53
+ };
54
+ registry.setConnectionState(effectiveKey ?? null, next);
55
+ return next;
56
+ }
57
+ /**
58
+ * Publish an already-authoritative participant/session receipt into one live
59
+ * transport context. This is deliberately memory-only: reconnect recovery has
60
+ * already validated the durable participant mapping and must not create a new
61
+ * connection row, routing row, presence row, or lease merely to teach the
62
+ * replacement HTTP transport what it owns.
63
+ */
64
+ export function bindRuntimeConnectionReceipt(runtime, mcpSessionId, participantId, sessionId) {
65
+ updateRuntimeConnectionState(mcpSessionRegistryFor(runtime), {
66
+ transport: 'http',
67
+ connectionId: mcpSessionId,
68
+ participantId,
69
+ sessionId
70
+ }, mcpSessionId);
71
+ }
72
+ /**
73
+ * Every session refusal code, mapped onto the CapabilityError taxonomy. The
74
+ * session code travels as the kebab-case `reason` and as
75
+ * `details.sessionCode` (compatibility for readers of the old wire code).
76
+ */
77
+ const SESSION_TOOL_ERROR_CODES = {
78
+ AMBIGUOUS_BATCH_SEND: 'CONFLICT',
79
+ BATCH_BROADCAST_UNSUPPORTED: 'INVALID_INPUT',
80
+ CONNECTION_UNBOUND: 'AUTH_REQUIRED',
81
+ FORBIDDEN_MARK_READ: 'PERMISSION_DENIED',
82
+ INVALID_MESSAGE_TARGET: 'INVALID_INPUT',
83
+ INVALID_PATH: 'INVALID_INPUT',
84
+ INVALID_SCRATCHPAD_INPUT: 'INVALID_INPUT',
85
+ INVALID_SCRATCHPAD_TARGET: 'INVALID_INPUT',
86
+ MESSAGE_TOO_LONG: 'INVALID_INPUT',
87
+ MISSING_BATCH_ID: 'INVALID_INPUT',
88
+ MISSING_CONTENT: 'INVALID_INPUT',
89
+ MISSING_RECIPIENT: 'INVALID_INPUT',
90
+ NO_BROADCAST_RECIPIENTS: 'NOT_FOUND',
91
+ NOT_FOUND: 'NOT_FOUND',
92
+ PARTICIPANT_IDENTITY_REQUIRED: 'AUTH_REQUIRED',
93
+ PARTICIPANT_NOT_FOUND: 'NOT_FOUND',
94
+ PROJECT_REF_CONFLICT: 'CONFLICT',
95
+ PROJECT_REF_UNBOUND: 'CONFLICT',
96
+ REQUESTED_SESSION_UNRESOLVABLE: 'NOT_FOUND',
97
+ SCRATCHPAD_ENTRY_NOT_FOUND: 'NOT_FOUND',
98
+ SESSION_MANAGER_UNAVAILABLE: 'UNAVAILABLE',
99
+ SESSION_NOT_ACTIVE: 'CONFLICT',
100
+ SESSION_NOT_FOUND: 'NOT_FOUND',
101
+ SESSION_RECEIPT_STALE: 'CONFLICT',
102
+ SESSION_TARGET_REQUIRED: 'INVALID_INPUT',
103
+ SESSION_REFERENCE_AMBIGUOUS: 'CONFLICT',
104
+ SESSION_REQUIRED: 'AUTH_REQUIRED',
105
+ STALE_SESSION_MANAGER: 'UNAVAILABLE',
106
+ TODO_FILTER_CONFLICT: 'INVALID_INPUT',
107
+ TODO_GRAPH_CYCLE: 'CONFLICT',
108
+ TODO_NOT_FOUND: 'NOT_FOUND',
109
+ UNKNOWN_PARTICIPANT: 'NOT_FOUND',
110
+ UNKNOWN_RECIPIENT: 'NOT_FOUND'
111
+ };
112
+ /** `SESSION_NOT_ACTIVE` → `session-not-active`. */
113
+ export function sessionToolErrorReason(code) {
114
+ return code.toLowerCase().replaceAll('_', '-');
115
+ }
116
+ /**
117
+ * Build a session tool refusal as a typed CapabilityError: the taxonomy code
118
+ * mapped from `code`, `reason` the kebab-case session code, the hint as its
119
+ * `recoveryHint`, and `details` (JSON) plus `details.sessionCode`.
120
+ */
121
+ export function createSessionToolError(code, message, hint, details) {
122
+ const options = {
123
+ reason: sessionToolErrorReason(code),
124
+ details: { ...details, sessionCode: code }
125
+ };
126
+ if (hint)
127
+ options.recoveryHint = hint;
128
+ return new CapabilityError(message, SESSION_TOOL_ERROR_CODES[code], options);
129
+ }
130
+ /** Whether `error` is the session refusal `code` (read from its reason, never its message). */
131
+ export function isSessionToolError(error, code) {
132
+ return isCapabilityError(error) && error.reason === sessionToolErrorReason(code);
133
+ }
134
+ /**
135
+ * Get the one canonical process SessionManager (sync version).
136
+ *
137
+ * @deprecated There is no ambient process manager. Resolve the runtime's own
138
+ * owner instead: `runtime.context('session/manager')` or
139
+ * `getVibesClient<SessionClient>('session', runtime).getManager()`. Kept
140
+ * exported for external callers; it always refuses typed.
141
+ */
142
+ export function getSessionManager() {
143
+ throw createSessionToolError('SESSION_MANAGER_UNAVAILABLE', 'Session manager is not initialized for this runtime.', 'Resolve runtime.context("session/manager") during surface bootstrap.');
144
+ }
145
+ /**
146
+ * Resolve the manager owned by an explicit runtime.
147
+ */
148
+ export async function getSessionManagerAsync(runtime) {
149
+ if (runtime?.hasContext?.('session/manager')) {
150
+ return await runtime.context('session/manager');
151
+ }
152
+ throw createSessionToolError('SESSION_MANAGER_UNAVAILABLE', 'The runtime has no session/manager context.', 'Ensure the session plugin is registered before using session tools.');
153
+ }
154
+ /**
155
+ * Ensure session manager is initialized for the runtime.
156
+ *
157
+ * @deprecated Pass-through to {@link getSessionManagerAsync}. Use the canonical
158
+ * owner directly: `runtime.context('session/manager')` or
159
+ * `getVibesClient<SessionClient>('session', runtime).getManager()`.
160
+ */
161
+ export function ensureSessionManagerAsync(runtime) {
162
+ return getSessionManagerAsync(runtime);
163
+ }
164
+ /**
165
+ * Seed the canonical process SessionManager during surface bootstrap.
166
+ *
167
+ * @deprecated The manager is runtime-owned; this is a no-op. Register the
168
+ * session plugin and resolve `runtime.context('session/manager')` (or
169
+ * `getVibesClient<SessionClient>('session', runtime).getManager()`) instead.
170
+ */
171
+ export function setSessionManager(_manager) {
172
+ // Deprecated: SessionManager is runtime-owned via runtime.context('session/manager').
173
+ }
174
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
175
+ const SLUG_REGEX = /^[a-z0-9](?:[a-z0-9-]{1,62}[a-z0-9])?$/;
176
+ /**
177
+ * Hex soup that reads as a BOTCHED UUID (>=20 hex chars once dashes drop) is a
178
+ * typo'd identity, never a deliberate seat name. Self-identification must
179
+ * refuse to register these: store-writer reproduced the disease live — one
180
+ * mistyped UUID digit in fromParticipant minted a phantom whose slug IS the
181
+ * typo, and the send reported success (stoa L-14, FROM-side).
182
+ */
183
+ function looksLikeBotchedUuid(reference) {
184
+ const compact = reference.replace(/-/g, '');
185
+ return !UUID_REGEX.test(reference) && /^[0-9a-f]{20,}$/i.test(compact);
186
+ }
187
+ export function sanitizeSlugCandidate(candidate) {
188
+ const normalized = candidate
189
+ .trim()
190
+ .toLowerCase()
191
+ .replace(/[^a-z0-9-]+/g, '-')
192
+ .replace(/-+/g, '-')
193
+ .replace(/^-+/, '')
194
+ .replace(/-+$/, '');
195
+ if (normalized.length === 0) {
196
+ return 'participant';
197
+ }
198
+ return normalized.slice(0, 64);
199
+ }
200
+ /** The profile metadata fields identity reads; each parsed independently, a malformed one is absent. */
201
+ const IdentityMetadataSchema = z.object({
202
+ slug: z.string().min(1).optional().catch(undefined),
203
+ clientInfo: z
204
+ .object({ harnessSessionId: z.string().optional().catch(undefined) })
205
+ .optional()
206
+ .catch(undefined),
207
+ source: z.string().optional().catch(undefined),
208
+ connectionId: z.string().optional().catch(undefined),
209
+ registeredAt: z.string().optional().catch(undefined)
210
+ });
211
+ function identityMetadataOf(metadata) {
212
+ const parsed = IdentityMetadataSchema.safeParse(metadata ?? {});
213
+ return parsed.success ? parsed.data : {};
214
+ }
215
+ function extractSlug(metadata) {
216
+ const slug = identityMetadataOf(metadata).slug;
217
+ return slug ? sanitizeSlugCandidate(slug) : null;
218
+ }
219
+ /** A participant's display slug without writing it: its stored slug, else its sanitized name or id. */
220
+ export function participantSlugOf(profile, participantId) {
221
+ const stored = profile ? extractSlug(profile.metadata) : undefined;
222
+ if (stored && SLUG_REGEX.test(stored))
223
+ return stored;
224
+ return sanitizeSlugCandidate(profile?.name || participantId);
225
+ }
226
+ export async function ensureParticipantSlug(session, participantId, profile) {
227
+ const resolvedProfile = profile ?? (await session.getParticipant(participantId));
228
+ if (!resolvedProfile) {
229
+ throw createSessionToolError('PARTICIPANT_NOT_FOUND', `Participant ${participantId} is not registered in this workspace.`, 'Call `session-participant-list` to inspect registered participants or register a new participant before assignment.');
230
+ }
231
+ const existingSlug = extractSlug(resolvedProfile.metadata);
232
+ if (existingSlug && SLUG_REGEX.test(existingSlug)) {
233
+ return { profile: resolvedProfile, slug: existingSlug };
234
+ }
235
+ const slug = sanitizeSlugCandidate(resolvedProfile.name || participantId);
236
+ const metadata = {
237
+ ...resolvedProfile.metadata,
238
+ clientInfo: StoredClientInfoSchema.parse(resolvedProfile.metadata.clientInfo),
239
+ slug
240
+ };
241
+ await session.updateParticipant(resolvedProfile.participantId, { metadata });
242
+ return {
243
+ profile: {
244
+ ...resolvedProfile,
245
+ metadata
246
+ },
247
+ slug
248
+ };
249
+ }
250
+ /**
251
+ * Resolve an already-registered participant without repairing metadata or
252
+ * registering a new seat. Recovery admission uses this read-only lookup before
253
+ * deciding whether a legacy bind can take the parallel receipt lane.
254
+ */
255
+ export async function resolveExistingParticipantReference(reference, session) {
256
+ const trimmed = reference.trim();
257
+ if (UUID_REGEX.test(trimmed)) {
258
+ const profile = await session.getParticipant(trimmed);
259
+ if (!profile)
260
+ return null;
261
+ return {
262
+ participantId: profile.participantId,
263
+ profile,
264
+ slug: extractSlug(profile.metadata) ?? sanitizeSlugCandidate(profile.name || profile.participantId)
265
+ };
266
+ }
267
+ const scan = await scanParticipantsBySlug(session, trimmed);
268
+ if (!scan.match)
269
+ return null;
270
+ return {
271
+ participantId: scan.match.participantId,
272
+ profile: scan.match,
273
+ slug: extractSlug(scan.match.metadata) ??
274
+ sanitizeSlugCandidate(scan.match.name || scan.match.participantId)
275
+ };
276
+ }
277
+ /**
278
+ * Harness conversation ids (Grok TUI, Codex, Claude Code, Muse). Distinct
279
+ * from the MCP transport `connectionId`, which must never seed a slug —
280
+ * that minted a participant per hook handshake and buried the roster.
281
+ * Order is precedence when several are set; a body normally sets one.
282
+ */
283
+ export const HARNESS_SESSION_ENV_KEYS = [
284
+ 'GROK_SESSION_ID',
285
+ 'CODEX_SESSION_ID',
286
+ // Claude Code exports CLAUDE_CODE_SESSION_ID; CLAUDE_SESSION_ID was never
287
+ // set by it, so Claude seats had no harness session and a bare init fell
288
+ // through to the workspace default session.
289
+ 'CLAUDE_CODE_SESSION_ID',
290
+ 'CLAUDE_SESSION_ID',
291
+ 'MUSE_SESSION_ID'
292
+ ];
293
+ export function readHarnessSessionIdFromEnv(runtime, env) {
294
+ // Reads through the handed runtime's environment gateway rather than the
295
+ // `process` global. This module is reachable from unqualified public exports
296
+ // (`./mcp/utils/participant`, `./mcp/utils/mcp-session-resolver`), so its
297
+ // closure has to import in EVERY scope — and `process` does not exist in
298
+ // workerd. An explicit `env` still wins, which is what the tests pass.
299
+ for (const key of HARNESS_SESSION_ENV_KEYS) {
300
+ const value = (env ? env[key] : runtime.getEnv(key))?.trim();
301
+ if (value)
302
+ return value;
303
+ }
304
+ return undefined;
305
+ }
306
+ /** Legacy display key. Never use this truncated value as custody authority. */
307
+ export function shortHarnessSeat(harnessSessionId) {
308
+ const compact = harnessSessionId.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
309
+ return compact.slice(0, 8);
310
+ }
311
+ /** Collision-resistant seat key derived from the complete normalized harness identity. */
312
+ export { harnessSessionSeat };
313
+ /**
314
+ * A slug derived from identity the client DECLARES about itself, never from
315
+ * the transport connection it arrived on.
316
+ *
317
+ * Two identities live on one body:
318
+ * - **Kind** (`agentId`, e.g. `grok`) keys presence/brain/storage. Shared.
319
+ * - **Seat** (participant slug) is this harness conversation. Unique without
320
+ * the agent inventing a nickname.
321
+ *
322
+ * A connection is how a body reached us. Seeding the slug with `connectionId`
323
+ * minted a participant per hook handshake and buried the roster. Harness
324
+ * session id is the interactive seat. `externalToolId` remains the durable
325
+ * seat for short-lived tool runners.
326
+ */
327
+ export function declaredIdentitySlug(clientInfo) {
328
+ if (!clientInfo)
329
+ return undefined;
330
+ const seat = harnessSeatOf(clientInfo);
331
+ if (seat)
332
+ return harnessSeatSlug(seat);
333
+ const kind = sanitizeSlugCandidate(clientInfo.agentId || clientInfo.name || '');
334
+ if (clientInfo.harnessSessionId) {
335
+ const seat = harnessSessionSeat(clientInfo.harnessSessionId);
336
+ if (kind && kind !== 'participant' && seat) {
337
+ const slug = sanitizeSlugCandidate(`${kind}-${seat}`);
338
+ return slug.length > 0 ? slug : undefined;
339
+ }
340
+ }
341
+ const declared = clientInfo.externalToolId ?? clientInfo.agentId;
342
+ if (!declared)
343
+ return undefined;
344
+ const seed = clientInfo.name ? `${clientInfo.name}-${declared}` : declared;
345
+ const slug = sanitizeSlugCandidate(seed);
346
+ return slug.length > 0 ? slug : undefined;
347
+ }
348
+ function legacyDeclaredIdentitySlug(clientInfo) {
349
+ if (!clientInfo.harnessSessionId)
350
+ return undefined;
351
+ const kind = sanitizeSlugCandidate(clientInfo.agentId || clientInfo.name || '');
352
+ const seat = shortHarnessSeat(clientInfo.harnessSessionId);
353
+ if (!kind || kind === 'participant' || !seat)
354
+ return undefined;
355
+ return sanitizeSlugCandidate(`${kind}-${seat}`);
356
+ }
357
+ function storedHarnessSessionId(profile) {
358
+ return identityMetadataOf(profile.metadata).clientInfo?.harnessSessionId?.trim().toLowerCase();
359
+ }
360
+ /**
361
+ * Every participant in STABLE order (participantId ascending), one keyset page
362
+ * at a time: each page is a single range read of the participantId index, so a
363
+ * full scan reads each row once. OFFSET paging re-walked every earlier row on
364
+ * every page, which is quadratic in the directory size.
365
+ */
366
+ export async function* stableParticipantPages(session, pageSize) {
367
+ let after;
368
+ while (true) {
369
+ const page = await session.listParticipants(after === undefined
370
+ ? { limit: pageSize, orderBy: 'stable' }
371
+ : { limit: pageSize, orderBy: 'stable', after });
372
+ if (page.length > 0)
373
+ yield page;
374
+ if (page.length < pageSize)
375
+ return;
376
+ after = page[page.length - 1].participantId;
377
+ }
378
+ }
379
+ /**
380
+ * Scan the participant directory for a slug in STABLE order.
381
+ *
382
+ * Paging over the default recency sort (lastSeenAt desc) is a race: any
383
+ * participant whose lastSeenAt is bumped mid-scan moves across the page
384
+ * cursor, so a registered slug can be SKIPPED (→ duplicate registration) or
385
+ * visited twice (ledger L-19). participantId-ascending is immutable and
386
+ * unique, so every scanner walks the same total order and — when duplicates
387
+ * of a slug do exist — every resolver converges on the same deterministic
388
+ * winner (the first in that order).
389
+ */
390
+ export async function scanParticipantsBySlug(session, slug) {
391
+ const normalized = sanitizeSlugCandidate(slug);
392
+ const knownSlugs = new Set();
393
+ for await (const participants of stableParticipantPages(session, 200)) {
394
+ for (const participant of participants) {
395
+ const metadataSlug = extractSlug(participant.metadata);
396
+ if (metadataSlug)
397
+ knownSlugs.add(sanitizeSlugCandidate(metadataSlug));
398
+ if (participant.name)
399
+ knownSlugs.add(sanitizeSlugCandidate(participant.name));
400
+ if ((metadataSlug && sanitizeSlugCandidate(metadataSlug) === normalized) ||
401
+ sanitizeSlugCandidate(participant.name) === normalized ||
402
+ sanitizeSlugCandidate(participant.participantId) === normalized) {
403
+ return { match: participant, knownSlugs: Array.from(knownSlugs) };
404
+ }
405
+ }
406
+ }
407
+ return { match: null, knownSlugs: Array.from(knownSlugs) };
408
+ }
409
+ async function scanLegacyParticipantByHarness(session, legacySlug, harnessSessionId) {
410
+ const normalizedSlug = sanitizeSlugCandidate(legacySlug);
411
+ const normalizedHarness = harnessSessionId.trim().toLowerCase();
412
+ for await (const participants of stableParticipantPages(session, 200)) {
413
+ for (const participant of participants) {
414
+ if (extractSlug(participant.metadata) === normalizedSlug &&
415
+ storedHarnessSessionId(participant) === normalizedHarness) {
416
+ return participant;
417
+ }
418
+ }
419
+ }
420
+ return null;
421
+ }
422
+ async function resolveDeclaredIdentityParticipant(session, clientInfo) {
423
+ const currentSlug = declaredIdentitySlug(clientInfo);
424
+ if (!currentSlug)
425
+ return null;
426
+ const seat = harnessSeatOf(clientInfo);
427
+ if (seat) {
428
+ const seated = await session.findHarnessSeat(seat);
429
+ if (seated) {
430
+ return { participantId: seated.participantId, profile: seated, slug: currentSlug, legacy: false };
431
+ }
432
+ }
433
+ const current = (await scanParticipantsBySlug(session, currentSlug)).match;
434
+ if (current) {
435
+ return { participantId: current.participantId, profile: current, slug: currentSlug, legacy: false };
436
+ }
437
+ const legacySlug = legacyDeclaredIdentitySlug(clientInfo);
438
+ if (!legacySlug || legacySlug === currentSlug || !clientInfo.harnessSessionId)
439
+ return null;
440
+ const legacy = await scanLegacyParticipantByHarness(session, legacySlug, clientInfo.harnessSessionId);
441
+ if (!legacy)
442
+ return null;
443
+ return { participantId: legacy.participantId, profile: legacy, slug: currentSlug, legacy: true };
444
+ }
445
+ /** Bounded Levenshtein distance (early-exit above `max`) for typo suggestions. */
446
+ function editDistanceAtMost(a, b, max) {
447
+ if (Math.abs(a.length - b.length) > max)
448
+ return max + 1;
449
+ const previous = Array.from({ length: b.length + 1 }, () => 0);
450
+ const current = Array.from({ length: b.length + 1 }, () => 0);
451
+ for (let j = 0; j <= b.length; j++)
452
+ previous[j] = j;
453
+ for (let i = 1; i <= a.length; i++) {
454
+ current[0] = i;
455
+ let rowMin = current[0];
456
+ for (let j = 1; j <= b.length; j++) {
457
+ current[j] = Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
458
+ rowMin = Math.min(rowMin, current[j]);
459
+ }
460
+ if (rowMin > max)
461
+ return max + 1;
462
+ for (let j = 0; j <= b.length; j++)
463
+ previous[j] = current[j];
464
+ }
465
+ return previous[b.length];
466
+ }
467
+ /** Rank known slugs by closeness to a mistyped reference; top 3 within distance 2 or containment. */
468
+ function suggestNearMissSlugs(target, knownSlugs) {
469
+ const scored = [];
470
+ for (const slug of new Set(knownSlugs)) {
471
+ if (!slug || slug === target)
472
+ continue;
473
+ const distance = editDistanceAtMost(target, slug, 2);
474
+ if (distance <= 2) {
475
+ scored.push({ slug, distance });
476
+ }
477
+ else if (slug.includes(target) || target.includes(slug)) {
478
+ scored.push({ slug, distance: 3 });
479
+ }
480
+ }
481
+ scored.sort((a, b) => a.distance - b.distance || a.slug.localeCompare(b.slug));
482
+ return scored.slice(0, 3).map((entry) => entry.slug);
483
+ }
484
+ export async function resolveParticipantReference(reference, sessionManager, mcpSessionId, options = {}) {
485
+ const session = sessionManager ?? getSessionManager();
486
+ const trimmed = reference.trim();
487
+ if (UUID_REGEX.test(trimmed)) {
488
+ const { profile, slug } = await ensureParticipantSlug(session, trimmed);
489
+ return { participantId: trimmed, profile, slug, registered: false };
490
+ }
491
+ // A live instance's handle names exactly one running seat: it resolves to the
492
+ // participant that instance acts as, ahead of any participant slug.
493
+ const instance = await session.liveInstanceByHandle(trimmed);
494
+ if (instance?.participantId) {
495
+ const { profile, slug } = await ensureParticipantSlug(session, instance.participantId);
496
+ return { participantId: instance.participantId, profile, slug, registered: false };
497
+ }
498
+ const scan = await scanParticipantsBySlug(session, trimmed);
499
+ let profile = scan.match;
500
+ let registered = false;
501
+ if (!profile) {
502
+ if (options.registerIfMissing && looksLikeBotchedUuid(trimmed)) {
503
+ throw createSessionToolError(options.missingCode ?? 'UNKNOWN_PARTICIPANT', `"${trimmed}" reads as a mistyped UUID, not a participant name — refusing to register it as a new identity.`, 'Copy the exact UUID from session status / the roster. If you really meant a new seat, pick a human-readable slug.', { reference: trimmed, suggestions: [] });
504
+ }
505
+ if (!options.registerIfMissing) {
506
+ const sanitized = sanitizeSlugCandidate(trimmed);
507
+ const suggestions = suggestNearMissSlugs(sanitized, scan.knownSlugs);
508
+ throw createSessionToolError(options.missingCode ?? 'UNKNOWN_PARTICIPANT', `No participant matches "${trimmed}".${suggestions.length > 0 ? ` Closest registered: ${suggestions.join(', ')}.` : ''}`, 'Copy the exact UUID or slug from session status / the session roster. Participants are only auto-registered when identifying THEMSELVES (init/status participantId, message fromParticipant); a recipient, filter, or assignee must already exist.', { reference: trimmed, suggestions });
509
+ }
510
+ const sanitizedSlug = sanitizeSlugCandidate(trimmed);
511
+ const generatedId = generateId();
512
+ profile = await session.registerParticipant({
513
+ participantId: generatedId,
514
+ name: sanitizedSlug.length > 0 ? sanitizedSlug : `participant-${generatedId.slice(0, 8)}`,
515
+ role: 'participant',
516
+ metadata: {
517
+ source: 'mcp',
518
+ autoRegistered: true,
519
+ slug: sanitizedSlug.length > 0 ? sanitizedSlug : undefined
520
+ }
521
+ });
522
+ registered = true;
523
+ // Registration race guard (ledger L-19): find-then-create has no unique
524
+ // constraint, so two concurrent self-identifications with the same fresh
525
+ // slug can BOTH register. Re-scan in stable order and yield to the
526
+ // deterministic winner, deleting our own extra row so the slug maps to
527
+ // ONE identity everywhere.
528
+ const winner = (await scanParticipantsBySlug(session, sanitizedSlug)).match;
529
+ if (winner && winner.participantId !== profile.participantId) {
530
+ await deleteLosingDuplicate(session, profile.participantId);
531
+ profile = winner;
532
+ registered = false;
533
+ }
534
+ }
535
+ const { profile: ensuredProfile, slug } = await ensureParticipantSlug(session, profile.participantId, profile);
536
+ return { participantId: ensuredProfile.participantId, profile: ensuredProfile, slug, registered };
537
+ }
538
+ /**
539
+ * Best-effort cleanup of a registration race loser: the row is seconds old and
540
+ * unreferenced, so a failed delete leaves it dormant while every resolver
541
+ * converges on the winner. The failure is reported, value-free, once.
542
+ */
543
+ async function deleteLosingDuplicate(session, participantId) {
544
+ // Session's MCP logger on the manager's runtime: that root's sinks and redaction.
545
+ const logger = getLogger('session:mcp', session.servingRuntime);
546
+ try {
547
+ await session.deleteParticipant(participantId);
548
+ }
549
+ catch (error) {
550
+ logger.warn('Failed to delete losing duplicate participant row', {
551
+ participantId,
552
+ error: valueFreeFailure(CaughtFailureSchema.parse(error))
553
+ });
554
+ }
555
+ }
556
+ /**
557
+ * Reserved references that mean "everyone in this session" rather than a single
558
+ * participant slug. Sending to one of these fans out (see
559
+ * {@link resolveSessionBroadcastRecipients}); it must NEVER be resolved as an
560
+ * ordinary slug, because {@link resolveParticipantReference} would auto-register
561
+ * a phantom participant literally named "all"/"everyone" that reaches nobody.
562
+ */
563
+ export const BROADCAST_KEYWORDS = new Set([
564
+ 'all',
565
+ 'everyone',
566
+ 'everybody',
567
+ 'broadcast',
568
+ '*'
569
+ ]);
570
+ export function isBroadcastReference(reference) {
571
+ return BROADCAST_KEYWORDS.has(reference.trim().toLowerCase());
572
+ }
573
+ /**
574
+ * Enumerate the real recipients of a session broadcast: exactly the live
575
+ * members, i.e. the participants holding an unreleased, unexpired membership
576
+ * lease (every admitted instance in the session holds one; see SPEC
577
+ * "Instances, membership, and sessions on write"). Message history, the
578
+ * owner/assignee fields and in-memory bindings are not membership, so a
579
+ * participant who left stops receiving broadcasts once its lease lapses.
580
+ *
581
+ * The sender is excluded, and any legacy phantom broadcast-keyword participants
582
+ * (auto-registered "all"/"everyone" from the pre-fix behavior) are filtered out
583
+ * by slug so a broadcast never re-targets the very phantoms this replaces.
584
+ */
585
+ export async function resolveSessionBroadcastRecipients(session, sessionId, senderParticipantId) {
586
+ const candidateIds = new Set();
587
+ for (const lease of await session.listActiveMembershipLeases(sessionId)) {
588
+ if (lease.participantId)
589
+ candidateIds.add(lease.participantId);
590
+ }
591
+ candidateIds.delete(senderParticipantId);
592
+ const recipients = [];
593
+ for (const participantId of candidateIds) {
594
+ // Only a confirmed-unregistered id is skipped; a failed read propagates.
595
+ const profile = await session.getParticipant(participantId);
596
+ if (!profile)
597
+ continue;
598
+ const { slug } = await ensureParticipantSlug(session, participantId, profile);
599
+ if (BROADCAST_KEYWORDS.has(slug))
600
+ continue;
601
+ recipients.push({ participantId, slug });
602
+ }
603
+ return recipients;
604
+ }
605
+ async function updateTransportSessionBinding(sessionManager, resolved, mcpSessionId, participantId) {
606
+ if (!mcpSessionId)
607
+ return;
608
+ if (resolved?.status === 'active') {
609
+ await sessionManager.linkMcpSession(mcpSessionId, resolved.id);
610
+ await recordTransportPresence(sessionManager, resolved.id, mcpSessionId, participantId);
611
+ return;
612
+ }
613
+ await sessionManager.unlinkMcpSession(mcpSessionId);
614
+ }
615
+ /**
616
+ * Presence is an advisory liveness signal (a five-minute window), recorded
617
+ * after the binding itself is durable: a failed write is reported, value-free,
618
+ * once and never undoes the bind it decorates.
619
+ */
620
+ async function recordTransportPresence(sessionManager, sessionId, mcpSessionId, participantId) {
621
+ const logger = getLogger('session:mcp', sessionManager.servingRuntime);
622
+ try {
623
+ await sessionManager.recordPresence({
624
+ sessionId,
625
+ connectionId: mcpSessionId,
626
+ participantId: participantId ?? undefined,
627
+ metadata: { transport: 'mcp-http' }
628
+ });
629
+ }
630
+ catch (error) {
631
+ logger.warn('Failed to record MCP session presence', {
632
+ mcpSessionId,
633
+ error: valueFreeFailure(CaughtFailureSchema.parse(error))
634
+ });
635
+ }
636
+ }
637
+ async function setResolvedSession(sessionManager, participantId, session, mcpSessionId, options = {}) {
638
+ await sessionManager.setParticipantActiveSession(participantId, session.id);
639
+ if (options.setDefault !== false) {
640
+ await sessionManager.setDefaultActiveSession(session.id);
641
+ }
642
+ await updateTransportSessionBinding(sessionManager, session, mcpSessionId, participantId);
643
+ return session.id;
644
+ }
645
+ async function resolveFromSession(sessionManager, participantId, candidate, mcpSessionId, options) {
646
+ if (!candidate || candidate.status === 'archived')
647
+ return null;
648
+ const writable = candidate.status === 'paused'
649
+ ? await sessionManager.openSessionForWork(candidate.id)
650
+ : candidate;
651
+ return setResolvedSession(sessionManager, participantId, writable, mcpSessionId, options);
652
+ }
653
+ async function resolveFromId(sessionManager, participantId, sessionId, mcpSessionId, options) {
654
+ if (!sessionId)
655
+ return null;
656
+ // Only a confirmed-missing or archived session falls through to the next
657
+ // resolution step; a failed read propagates rather than binding elsewhere.
658
+ const resolved = await sessionManager.getSession(sessionId);
659
+ if (!resolved || resolved.status === 'archived')
660
+ return null;
661
+ const writable = resolved.status === 'paused'
662
+ ? await sessionManager.openSessionForWork(resolved.id)
663
+ : resolved;
664
+ return setResolvedSession(sessionManager, participantId, writable, mcpSessionId, options);
665
+ }
666
+ /**
667
+ * Bind an explicitly-resolved participant identity to THIS transport connection.
668
+ *
669
+ * A seat-scoped `session {action:"status"|"init", participantId}` used to
670
+ * resolve the participant durably but leave the CONNECTION's identity unbound
671
+ * — the very next ambient call (no participantId) then ran the anonymous
672
+ * getOrCreateMCPParticipant path and minted a fresh 'MCP Participant' whose
673
+ * slug equals its UUID (ledger L-15). Stamping the connection state and the
674
+ * participant cache here makes the bound identity the ONE ambient resolution
675
+ * path for the rest of the connection's life.
676
+ */
677
+ /**
678
+ * Stable durable connection key for a unix-RPC (stdio-family) seat, scoped by
679
+ * (workspace, agent).
680
+ *
681
+ * The unix daemon is a long-lived, per-workspace process shared by every agent
682
+ * seated in it (Aris, Rig, ...). A seat bound to it must survive daemon
683
+ * restarts, so its binding persists under this key via recordConnection /
684
+ * getParticipantByConnection — the same durable path HTTP transports use with
685
+ * their connection id. Scoping by agent keeps each seat's binding independent:
686
+ * the last binder on the shared in-memory slot never shadows another seat's
687
+ * durable row.
688
+ *
689
+ * The digest is FNV-1a (non-cryptographic): this is a storage key, not a
690
+ * security boundary.
691
+ */
692
+ export function unixSeatConnectionKey(workspaceRoot, agentId) {
693
+ const root = String(workspaceRoot ?? '').trim();
694
+ const agent = String(agentId ?? '').trim().toLowerCase();
695
+ if (!root || !agent)
696
+ return undefined;
697
+ let hash = 0x811c9dc5;
698
+ for (let i = 0; i < root.length; i++) {
699
+ hash ^= root.charCodeAt(i);
700
+ hash = Math.imul(hash, 0x01000193);
701
+ }
702
+ const digest = (hash >>> 0).toString(16).padStart(8, '0');
703
+ return `unix-${agent}-${digest}`;
704
+ }
705
+ /** The participant currently bound to this transport connection, if any. */
706
+ export function getBoundConnectionParticipantId(session, mcpSessionId) {
707
+ return getRuntimeConnectionState(registryOf(session), mcpSessionId)?.participantId ?? null;
708
+ }
709
+ /**
710
+ * Durable seat key for an MCP client that declared nothing beyond its kind:
711
+ * "the <kind> seat in Vibes session <id>".
712
+ *
713
+ * Identity used to key on the transport connection id — per-process,
714
+ * per-connection state that changes on every body restart and every `/mcp`
715
+ * reconnect. The same Claude Code conversation therefore came back as a NEW
716
+ * participant each time; mail and todos addressed to the old one were
717
+ * orphaned and slug lookups broke (session-hygiene wave, 2026-08-28). Keying
718
+ * the seat on (client kind, session) makes it the same row across restarts.
719
+ *
720
+ * Same durable mechanism unix seats use (`recordConnection` /
721
+ * `getParticipantByConnection`), keyed differently. Two undeclared clients of
722
+ * the same kind in ONE session cannot be told apart by anything on the wire:
723
+ * the second keeps a fresh seat while the first is live (see
724
+ * {@link isSeatLiveElsewhere}); such clients should declare `participantId`
725
+ * or `harnessSessionId`.
726
+ */
727
+ export function mcpSeatConnectionKey(clientInfo, sessionId) {
728
+ if (!sessionId || !UUID_REGEX.test(sessionId))
729
+ return undefined;
730
+ const kind = mcpClientKind(clientInfo);
731
+ if (!kind)
732
+ return undefined;
733
+ return `mcp-seat:${kind}:${sessionId.toLowerCase()}`;
734
+ }
735
+ /** Client kind for seat keys and slug seeds: agent family first, product name second. */
736
+ export function mcpClientKind(clientInfo) {
737
+ if (!clientInfo)
738
+ return undefined;
739
+ const kind = sanitizeSlugCandidate(clientInfo.agentId || clientInfo.name || '');
740
+ return kind && kind !== 'participant' ? kind : undefined;
741
+ }
742
+ const SEAT_LIVE_WINDOW_MS = 2 * 60 * 1000;
743
+ /**
744
+ * True when ANOTHER registered transport connection in this process is bound
745
+ * to the participant and spoke within the liveness window. A fresh daemon has
746
+ * an empty registry, so a restart never blocks a reclaim; a context left
747
+ * behind by a client that vanished without DELETE ages out of "live" after
748
+ * the window even though the registry retains it for hours.
749
+ */
750
+ export function isSeatLiveElsewhere(registry, participantId, mcpSessionId, now = Date.now()) {
751
+ for (const id of registry.getActiveSessionIds()) {
752
+ if (id === mcpSessionId)
753
+ continue;
754
+ const context = registry.peek(id);
755
+ const state = context?.connectionState;
756
+ const bound = state?.participantId ?? state?.agentId ?? null;
757
+ if (bound !== participantId)
758
+ continue;
759
+ if (now - (context?.lastActivityAt ?? 0) < SEAT_LIVE_WINDOW_MS)
760
+ return true;
761
+ }
762
+ return false;
763
+ }
764
+ /** Same-kind undeclared clients sharing one session get ordinal seats up to this. */
765
+ const MCP_SEAT_ORDINALS = 8;
766
+ /**
767
+ * Find the seat this client kind may take in `sessionId`: the first ordinal
768
+ * slot that is either free or recorded for a participant no other live
769
+ * connection holds. Pure lookup: binds and records nothing. Null when the key
770
+ * cannot be formed or every slot is held by a live connection.
771
+ */
772
+ export async function reclaimMcpSeat(session, clientInfo, sessionId, mcpSessionId) {
773
+ const base = mcpSeatConnectionKey(clientInfo, sessionId);
774
+ if (!base)
775
+ return null;
776
+ const registry = registryOf(session);
777
+ for (let ordinal = 1; ordinal <= MCP_SEAT_ORDINALS; ordinal++) {
778
+ const seatKey = ordinal === 1 ? base : `${base}#${ordinal}`;
779
+ // A storage failure propagates: only a confirmed-absent row is a free
780
+ // seat. Reading a failed lookup as "no seat" minted a duplicate identity.
781
+ const profile = await session.getParticipantByConnection(seatKey);
782
+ if (!profile)
783
+ return { seatKey, profile: null };
784
+ if (isSeatLiveElsewhere(registry, profile.participantId, mcpSessionId))
785
+ continue;
786
+ return { seatKey, profile };
787
+ }
788
+ return null;
789
+ }
790
+ /** Persist "this participant is the <kind> seat in <session>" under a resolved key. */
791
+ export async function recordMcpSeat(session, clientInfo, seatKey, participantId) {
792
+ await session.recordConnection({
793
+ connectionId: seatKey,
794
+ participantId,
795
+ clientName: clientInfo?.name ?? 'MCP Client',
796
+ clientVersion: clientInfo?.version
797
+ });
798
+ return seatKey;
799
+ }
800
+ const AMBIENT_MINT_RETIRE_WINDOW_MS = 10 * 60 * 1000;
801
+ /**
802
+ * Retire the participant the ambient pre-call minted for THIS connection once
803
+ * the bind resolved a different durable seat. Without this, every restart left
804
+ * one more ghost row in the roster. Guarded so nothing older, foreign, or
805
+ * referenced is ever removed: the row must be this connection's own auto-mint,
806
+ * minutes old, and own no session. Best-effort — a ghost that survives is
807
+ * dormant, never authoritative.
808
+ */
809
+ export async function retireAmbientMint(session, ghostParticipantId, mcpSessionId) {
810
+ const profile = await session.getParticipant(ghostParticipantId);
811
+ if (!profile)
812
+ return false;
813
+ const metadata = identityMetadataOf(profile.metadata);
814
+ if (metadata.source !== 'mcp')
815
+ return false;
816
+ if (metadata.connectionId !== (mcpSessionId ?? 'mcp-unknown'))
817
+ return false;
818
+ const registeredAt = metadata.registeredAt === undefined ? Number.NaN : Date.parse(metadata.registeredAt);
819
+ if (!Number.isFinite(registeredAt) || Date.now() - registeredAt > AMBIENT_MINT_RETIRE_WINDOW_MS) {
820
+ return false;
821
+ }
822
+ const owned = await session.countSessions({ ownerParticipant: ghostParticipantId });
823
+ if (owned > 0)
824
+ return false;
825
+ await session.clearParticipantActiveSession(ghostParticipantId);
826
+ await session.deleteParticipant(ghostParticipantId);
827
+ return true;
828
+ }
829
+ /**
830
+ * Retire an ambient mint as the advisory cleanup the bind promises: a ghost
831
+ * that survives is dormant, never authoritative, so a failed retirement is
832
+ * reported, value-free, once and never fails the bind that already succeeded.
833
+ */
834
+ export async function retireAmbientMintAfterBind(session, ghostParticipantId, mcpSessionId) {
835
+ const logger = getLogger('session:mcp', session.servingRuntime);
836
+ try {
837
+ await retireAmbientMint(session, ghostParticipantId, mcpSessionId);
838
+ }
839
+ catch (error) {
840
+ logger.warn('Ambient mint retirement failed; leaving the participant in place', {
841
+ participantId: ghostParticipantId,
842
+ error: valueFreeFailure(CaughtFailureSchema.parse(error))
843
+ });
844
+ }
845
+ }
846
+ export async function bindConnectionParticipant(session, participantId, slug, mcpSessionId, seatKey, options = {}) {
847
+ const effectiveConnectionId = mcpSessionId ?? seatKey;
848
+ const registry = registryOf(session);
849
+ const connectionUpdate = { participantId, participantSlug: slug };
850
+ if (effectiveConnectionId)
851
+ connectionUpdate.connectionId = effectiveConnectionId;
852
+ updateRuntimeConnectionState(registry, connectionUpdate, effectiveConnectionId);
853
+ // Seed the ambient participant cache under every key getOrCreateMCPParticipant
854
+ // derives (the participant id AND the connection key), so ambient calls
855
+ // resolve this identity without re-running the registration path. The cache
856
+ // is reset first: after a rebind (seat reclaim, self-identification) a stale
857
+ // connection-key entry would keep answering with the previous, possibly
858
+ // retired, participant.
859
+ const cache = getParticipantCache(registry, effectiveConnectionId);
860
+ cache.clear();
861
+ cache.set(participantId.toLowerCase(), Promise.resolve(participantId));
862
+ const connectionKey = effectiveConnectionId ?? getRuntimeConnectionState(registry, effectiveConnectionId)?.connectionId;
863
+ if (connectionKey)
864
+ cache.set(connectionKey.toLowerCase(), Promise.resolve(participantId));
865
+ // HTTP transports carry a durable connection id; unix seats carry a stable
866
+ // (workspace, agent) seat key. Persist the binding under either so
867
+ // caller-identity lookups (getParticipantByConnection) survive daemon
868
+ // restarts. Plain stdio has no durable connection id; its binding lives in
869
+ // the transport context above for the life of the process.
870
+ const durableConnectionId = effectiveConnectionId;
871
+ if (durableConnectionId && options.persistConnection !== false) {
872
+ const clientInfo = getRuntimeClientInfo(registry, effectiveConnectionId);
873
+ await session.recordConnection({
874
+ connectionId: durableConnectionId,
875
+ participantId,
876
+ clientName: clientInfo?.name ?? (seatKey ? 'unix-seat' : 'MCP Client'),
877
+ clientVersion: clientInfo?.version
878
+ });
879
+ }
880
+ }
881
+ /**
882
+ * Get or create participant ID for MCP client.
883
+ * Uses Layer 2 identification (connection-based) unless a preferred ID is supplied.
884
+ * @param clientInfo - Optional client info from MCP connection
885
+ * @param options - Optional participant options
886
+ * @param mcpSessionId - MCP session ID for HTTP transport isolation
887
+ */
888
+ export async function getOrCreateMCPParticipant(clientInfo, options = {}, mcpSessionId, caller, sessionManager, workspaceRoot) {
889
+ // Durable seat key for unix-RPC (stdio-family) transports: scoped by
890
+ // (workspace, agent) so each seat on the shared per-workspace daemon keeps
891
+ // its own persisted binding. HTTP transports keep their connection id.
892
+ const seatKey = mcpSessionId ? undefined : unixSeatConnectionKey(workspaceRoot, caller?.agentId);
893
+ // The serving root's manager and transport registry: every connection read
894
+ // and write below is that root's, never another root's in this process.
895
+ const session = sessionManager ?? (await getSessionManagerAsync());
896
+ const registry = registryOf(session);
897
+ // The admitted connection this call belongs to: the transport's key, or the
898
+ // seat's own key. Its in-memory state, client info and cache are read and
899
+ // written under this key only; a seat-keyed bind never answers from the
900
+ // process-wide stdio slot, which is whichever connection bound last.
901
+ const connectionScope = mcpSessionId ?? seatKey;
902
+ // The stdio slot (keyed null) is the in-memory home of a plain-stdio bind
903
+ // (no seat key): that bind writes no durable row, so a later seat-keyed
904
+ // ambient read must still resolve it from the slot until the seat persists.
905
+ // A seat-keyed bind never writes the stdio slot, so this fallback cannot
906
+ // leak one agent's seat to another (per-agent scope).
907
+ const runtimeConnection = getRuntimeConnectionState(registry, connectionScope) ??
908
+ (mcpSessionId ? undefined : getRuntimeConnectionState(registry, null));
909
+ const hasExplicitIdentity = Boolean(options.preferredParticipantId?.trim() ||
910
+ options.preferredSlug?.trim() ||
911
+ caller?.participantId?.trim());
912
+ const hasBoundIdentity = Boolean(runtimeConnection?.participantId);
913
+ // The refusal must key on a REGISTERED HTTP transport context — never on
914
+ // the mere truthiness of the mcpSessionId string. Callers that mistake the
915
+ // slot for a session-scoped id (brain passed scope.qualifiers.sessionId
916
+ // here) have no registered context; keying on truthiness let them sail past
917
+ // the guard and phantom-mint (stoa L-23 adversarial, 2026-07-17).
918
+ const isRegisteredTransport = Boolean(mcpSessionId) &&
919
+ (runtimeConnection?.transport === 'http' ||
920
+ runtimeConnection?.transport === 'stdio' ||
921
+ Boolean(runtimeConnection?.connectionId) ||
922
+ Boolean(getRuntimeClientInfo(registry, mcpSessionId)));
923
+ // Anonymous stdio (no transport id and no agent-scoped seat key) may create
924
+ // its connection identity. Once an agent id produces a durable seat key,
925
+ // bind-once applies: a missing row must refuse instead of minting a new seat.
926
+ // A truthy mcpSessionId that is NOT registered HTTP is likewise the L-23
927
+ // injury (a Vibes session UUID stuffed into the transport slot).
928
+ const isAnonymousStdioTransport = !mcpSessionId && !seatKey;
929
+ const runtimeClientInfo = getRuntimeClientInfo(registry, connectionScope);
930
+ const effectiveClientInfo = clientInfo ?? runtimeClientInfo;
931
+ const explicitParticipantId = options.preferredParticipantId?.trim() ??
932
+ caller?.participantId?.trim() ??
933
+ undefined;
934
+ // A seat's key is its admitted identity and wins over any client-supplied
935
+ // connection id, so the same seat always resolves the same durable row.
936
+ const connectionKeySource = seatKey ??
937
+ effectiveClientInfo?.connectionId ??
938
+ runtimeConnection?.connectionId ??
939
+ 'mcp-unknown';
940
+ // Durable binding for this connection key (HTTP connection id or unix seat
941
+ // key), consulted BEFORE the in-memory slot: the slot is last-binder-wins
942
+ // and shared across agents on the unix daemon, while the row is scoped to
943
+ // this seat. On a fresh daemon process the slot is empty but the row
944
+ // survives — this is what makes a unix seat bind-once.
945
+ // A storage failure propagates: the in-memory slot cannot stand in for the
946
+ // durable row, and reading a failed lookup as absence mints a second seat.
947
+ let persistedParticipant = null;
948
+ if (connectionKeySource !== 'mcp-unknown') {
949
+ persistedParticipant = (await session.getParticipantByConnection(connectionKeySource)) ?? null;
950
+ }
951
+ if (!isRegisteredTransport &&
952
+ !isAnonymousStdioTransport &&
953
+ !hasBoundIdentity &&
954
+ !hasExplicitIdentity &&
955
+ !(seatKey && persistedParticipant)) {
956
+ throw createSessionToolError('CONNECTION_UNBOUND', 'Cannot resolve an ambient participant before this connection identifies itself.', 'Call session init or status with participantId first, or pass fromParticipant for a self-identifying message.', { transport: runtimeConnection?.transport ?? 'stdio', requiresIdentity: true });
957
+ }
958
+ const cacheKey = (explicitParticipantId || connectionKeySource).toLowerCase();
959
+ // The admitted connection's own cache (the stdio transport's only when the
960
+ // call has neither a transport key nor a seat key).
961
+ // IMPORTANT: Don't cache for 'mcp-unknown' key to prevent cross-contamination
962
+ // between different Claude Code instances sharing the same MCP server
963
+ const cache = getParticipantCache(registry, connectionScope);
964
+ const shouldCache = cacheKey !== 'mcp-unknown';
965
+ if (shouldCache) {
966
+ const cached = cache.get(cacheKey);
967
+ if (cached) {
968
+ return cached;
969
+ }
970
+ }
971
+ const createParticipantPromise = (async () => {
972
+ // Priority: explicit identity → durable seat row (scoped) → in-memory
973
+ // slot (last-binder-wins) → durable row for non-seat connection keys.
974
+ const preferredIdCandidate = explicitParticipantId ??
975
+ (seatKey ? persistedParticipant?.participantId : undefined) ??
976
+ runtimeConnection?.participantId ??
977
+ persistedParticipant?.participantId;
978
+ // A client that declared a durable identity gets the seat it already owns
979
+ // rather than a fresh one per connection. Reuses the same stable-order
980
+ // scan the self-identification path uses (ledger L-19), so concurrent
981
+ // reconnects converge on one winner instead of racing to register.
982
+ const declaredSlug = declaredIdentitySlug(effectiveClientInfo);
983
+ let declaredSeatId;
984
+ let declaredSeatWasLegacy = false;
985
+ if (!preferredIdCandidate && declaredSlug && effectiveClientInfo) {
986
+ const seated = await resolveDeclaredIdentityParticipant(session, effectiveClientInfo);
987
+ declaredSeatId = seated?.participantId;
988
+ declaredSeatWasLegacy = seated?.legacy === true;
989
+ // A harness conversation's seat is derived, not minted: register it
990
+ // under its derived id so the harness hook resolves the same row.
991
+ const seat = harnessSeatOf(effectiveClientInfo);
992
+ if (!declaredSeatId && seat) {
993
+ declaredSeatId = (await session.ensureHarnessSeat({
994
+ ...seat,
995
+ name: effectiveClientInfo.name,
996
+ source: 'mcp'
997
+ })).participantId;
998
+ }
999
+ }
1000
+ // An UNDECLARED client (bare product name) reaching a fresh body: reclaim
1001
+ // the seat its kind holds in the workspace's durable default session
1002
+ // before minting. Nothing stable arrives on the wire for such a client,
1003
+ // so this — not the transport connection id — is what survives a daemon
1004
+ // restart. `session init` re-keys the seat to the session it binds.
1005
+ // A lookup failure propagates; only a confirmed-free seat falls through to a mint.
1006
+ let reclaimedSeatId;
1007
+ if (!preferredIdCandidate && !declaredSlug) {
1008
+ const anchor = await session.getDefaultActiveSession();
1009
+ const reclaimed = await reclaimMcpSeat(session, effectiveClientInfo, anchor, mcpSessionId);
1010
+ reclaimedSeatId = reclaimed?.profile?.participantId;
1011
+ }
1012
+ // Generate participant identifier from provided references or random UUID
1013
+ let participantId;
1014
+ if (preferredIdCandidate && UUID_REGEX.test(preferredIdCandidate)) {
1015
+ participantId = preferredIdCandidate;
1016
+ }
1017
+ else if (preferredIdCandidate) {
1018
+ const slugCandidate = sanitizeSlugCandidate(preferredIdCandidate);
1019
+ participantId = slugCandidate.startsWith('participant-')
1020
+ ? slugCandidate
1021
+ : `participant-${slugCandidate}`;
1022
+ }
1023
+ else if (declaredSeatId) {
1024
+ participantId = declaredSeatId;
1025
+ }
1026
+ else if (reclaimedSeatId) {
1027
+ participantId = reclaimedSeatId;
1028
+ }
1029
+ else {
1030
+ participantId = generateId();
1031
+ }
1032
+ // Slug seed is NEVER the transport connection id (session/SPEC.md hard
1033
+ // rule). Seeding it minted `claude-code-<Mcp-Session-Id>` on every
1034
+ // reconnect and broke slug lookups after each restart. A fresh seat is
1035
+ // `<kind>-<8 of its own id>`: stable for the row's life and independent
1036
+ // of how it connected.
1037
+ const kind = mcpClientKind(effectiveClientInfo);
1038
+ const slugSeed = options.preferredSlug ??
1039
+ declaredSlug ??
1040
+ (kind
1041
+ ? `${kind}-${participantId.replace(/^participant-/, '').slice(0, 8)}`
1042
+ : runtimeConnection?.httpPeer?.remoteAddress
1043
+ ? `peer-${runtimeConnection.httpPeer.remoteAddress}`
1044
+ : participantId.replace(/^participant-/, ''));
1045
+ const slug = sanitizeSlugCandidate(slugSeed);
1046
+ // Check if participant exists
1047
+ const existing = await session.getParticipant(participantId);
1048
+ if (!existing) {
1049
+ const registration = {
1050
+ source: 'mcp',
1051
+ connectionId: connectionKeySource,
1052
+ transport: runtimeConnection?.transport ?? effectiveClientInfo?.transport ?? 'stdio',
1053
+ httpPeer: runtimeConnection?.httpPeer,
1054
+ registeredAt: new Date().toISOString(),
1055
+ slug
1056
+ };
1057
+ if (effectiveClientInfo)
1058
+ registration.clientInfo = effectiveClientInfo;
1059
+ // Register new participant
1060
+ await session.registerParticipant({
1061
+ participantId,
1062
+ name: effectiveClientInfo?.name || 'MCP Participant',
1063
+ role: 'assistant',
1064
+ capabilities: [
1065
+ 'session-management',
1066
+ 'todo-tracking',
1067
+ 'scratchpad-notes',
1068
+ 'code-analysis',
1069
+ 'planning'
1070
+ ],
1071
+ metadata: registration
1072
+ });
1073
+ }
1074
+ else {
1075
+ if (options.preferredSlug || declaredSeatWasLegacy) {
1076
+ const metadata = { ...existing.metadata, slug };
1077
+ if (effectiveClientInfo)
1078
+ metadata.clientInfo = effectiveClientInfo;
1079
+ await session.updateParticipant(existing.participantId, { metadata });
1080
+ }
1081
+ await ensureParticipantSlug(session, existing.participantId, existing);
1082
+ }
1083
+ const ensured = await session.ensureParticipantSession(participantId);
1084
+ if (ensured) {
1085
+ await updateTransportSessionBinding(session, ensured, mcpSessionId, participantId);
1086
+ }
1087
+ if (connectionKeySource !== 'mcp-unknown') {
1088
+ await session.recordConnection({
1089
+ connectionId: connectionKeySource,
1090
+ participantId,
1091
+ clientName: effectiveClientInfo?.name ?? 'MCP Client',
1092
+ clientVersion: effectiveClientInfo?.version
1093
+ });
1094
+ }
1095
+ updateRuntimeConnectionState(registry, {
1096
+ transport: runtimeConnection?.transport ?? 'stdio',
1097
+ // 'mcp-unknown' is a sentinel for "no durable connection key", not a
1098
+ // real transport id: writing it would store anonymous-stdio state
1099
+ // under a key the next ambient read never consults, minting a fresh
1100
+ // participant on every call (stoa L-23).
1101
+ connectionId: connectionKeySource === 'mcp-unknown' ? undefined : connectionKeySource,
1102
+ sessionId: runtimeConnection?.sessionId,
1103
+ participantId: participantId,
1104
+ participantSlug: slug,
1105
+ httpPeer: runtimeConnection?.httpPeer
1106
+ }, connectionScope);
1107
+ return participantId;
1108
+ })().catch((error) => {
1109
+ cache.delete(cacheKey);
1110
+ throw error;
1111
+ });
1112
+ if (shouldCache) {
1113
+ cache.set(cacheKey, createParticipantPromise);
1114
+ }
1115
+ return createParticipantPromise;
1116
+ }
1117
+ /**
1118
+ * Normalize a caller-supplied participant reference to a registered UUID
1119
+ * before it touches session resolution. The durable participant→session map
1120
+ * is UUID-keyed: a raw slug READ misses it (ghost SESSION_NOT_ACTIVE on
1121
+ * stdio) and a raw slug WRITE pollutes it with slug keys (ledger L-04). This
1122
+ * chokepoint never registers — self-identification sites resolve (and may
1123
+ * register) BEFORE calling into session resolution.
1124
+ */
1125
+ async function normalizeParticipantIdForSessionResolution(reference, session, mcpSessionId) {
1126
+ const trimmed = reference.trim();
1127
+ if (UUID_REGEX.test(trimmed))
1128
+ return trimmed;
1129
+ const resolved = await resolveParticipantReference(trimmed, session, mcpSessionId);
1130
+ return resolved.participantId;
1131
+ }
1132
+ /**
1133
+ * The canonical scope-bound vibes session, when a surface announced one.
1134
+ *
1135
+ * `session.bound` (emitted by session init / MCP serve lifecycle / CLI
1136
+ * bootstrap) records the bind in the session registry, which feeds each
1137
+ * invocation's `scope.actor.sessionId`. Brain already resolves its bound
1138
+ * session from there; the session family ignored it — two resolution paths for
1139
+ * one concern (stoa L-09 seam, cross-lane with cog-writer). The reader is the
1140
+ * runtime's `boundSessionIdOf`; brain uses it too. Note the TRANSPORT key
1141
+ * (the MCP connection id, never a declared-scope qualifier) is deliberately
1142
+ * excluded — transport→session mapping already resolves durably via
1143
+ * getSessionForMcpConnection.
1144
+ */
1145
+ export function getScopeBoundSessionId(runtime, caller) {
1146
+ return boundSessionIdOf(runtime?.scope, caller);
1147
+ }
1148
+ /** The participant identity committed alongside the ambient session bind (the invocation actor's). */
1149
+ export function getScopeBoundParticipantId(runtime, caller) {
1150
+ const callerParticipantId = caller?.participantId?.trim();
1151
+ if (callerParticipantId)
1152
+ return callerParticipantId;
1153
+ const actorParticipantId = runtime?.scope?.actor?.participantId?.trim();
1154
+ return actorParticipantId ? actorParticipantId : null;
1155
+ }
1156
+ /**
1157
+ * Get session ID from input or active session
1158
+ * @param sessionId - Optional explicit session ID
1159
+ * @param participantId - Optional participant ID
1160
+ * @param mcpSessionId - MCP session ID for HTTP transport isolation
1161
+ */
1162
+ export async function resolveSessionIdForParticipant(sessionId, participantId, mcpSessionId, options = {}, sessionManager, runtime) {
1163
+ const session = sessionManager ?? getSessionManager();
1164
+ if (sessionId && options.intent === 'read') {
1165
+ // Pure lookup: no resume, no participant-map write, no workspace-default
1166
+ // retarget, no transport link. Archived sessions stay archived and are
1167
+ // readable in place (ledger L-13).
1168
+ const existing = await session.getSession(sessionId);
1169
+ if (!existing) {
1170
+ throw createSessionToolError('SESSION_NOT_FOUND', `Session ${sessionId} was not found.`, 'Provide a valid sessionId or call session-init first.');
1171
+ }
1172
+ return existing.id;
1173
+ }
1174
+ if (!participantId && options.intent === 'read' && !sessionId) {
1175
+ const scopeBoundId = getScopeBoundSessionId(runtime, options.caller);
1176
+ if (scopeBoundId) {
1177
+ const existing = await session.getSession(scopeBoundId);
1178
+ if (!existing) {
1179
+ throw createSessionToolError('SESSION_NOT_FOUND', `Session ${scopeBoundId} was not found.`, 'Provide a valid sessionId or call session-init first.');
1180
+ }
1181
+ return existing.id;
1182
+ }
1183
+ }
1184
+ if (!participantId && options.intent === 'read') {
1185
+ participantId =
1186
+ getScopeBoundParticipantId(runtime, options.caller) ??
1187
+ (await resolveBoundMCPParticipant(undefined, mcpSessionId, session, options)) ??
1188
+ undefined;
1189
+ if (!participantId) {
1190
+ throw createSessionToolError('CONNECTION_UNBOUND', 'An unbound session read cannot create a participant.', 'Identify this connection or supply an existing sessionId first.');
1191
+ }
1192
+ }
1193
+ const resolvedParticipantId = participantId
1194
+ ? await normalizeParticipantIdForSessionResolution(participantId, session, mcpSessionId)
1195
+ : await getOrCreateMCPParticipant(undefined, {}, mcpSessionId, options.caller, session);
1196
+ if (sessionId) {
1197
+ const existing = await session.getSession(sessionId);
1198
+ if (!existing) {
1199
+ throw createSessionToolError('SESSION_NOT_FOUND', `Session ${sessionId} was not found.`, 'Provide a valid sessionId or call session-init first.');
1200
+ }
1201
+ if (existing.status === 'archived') {
1202
+ throw createSessionToolError('SESSION_NOT_ACTIVE', `Session ${sessionId} is archived; this mutation will not reopen it implicitly.`, `Call session { action: "resume", sessionId: "${sessionId}" } first if reopening this collaboration is intentional.`);
1203
+ }
1204
+ const writable = existing.status === 'paused' ? await session.openSessionForWork(sessionId) : existing;
1205
+ return setResolvedSession(session, resolvedParticipantId, writable, mcpSessionId, {
1206
+ setDefault: !mcpSessionId
1207
+ });
1208
+ }
1209
+ const boundSession = mcpSessionId ? await session.getSessionForMcpConnection(mcpSessionId) : null;
1210
+ const resolvedFromBinding = await resolveFromSession(session, resolvedParticipantId, boundSession, mcpSessionId, { setDefault: false });
1211
+ if (resolvedFromBinding)
1212
+ return resolvedFromBinding;
1213
+ const mappedId = await session.getParticipantActiveSession(resolvedParticipantId);
1214
+ const resolvedFromMap = await resolveFromId(session, resolvedParticipantId, mappedId, mcpSessionId, {
1215
+ setDefault: false
1216
+ });
1217
+ if (resolvedFromMap)
1218
+ return resolvedFromMap;
1219
+ // Canonical scope-bound session (session.bound → session registry →
1220
+ // invocation actor.sessionId) — the SAME source brain resolves. Honored after the
1221
+ // caller's own durable bindings so an explicit participant mapping always
1222
+ // wins, and before failing SESSION_NOT_ACTIVE (stoa L-09 seam).
1223
+ const scopeBoundId = getScopeBoundSessionId(runtime, options.caller);
1224
+ const resolvedFromScope = await resolveFromId(session, resolvedParticipantId, scopeBoundId, mcpSessionId, { setDefault: false });
1225
+ if (resolvedFromScope)
1226
+ return resolvedFromScope;
1227
+ // Do not adopt the workspace default or "the" active session. Listing
1228
+ // related rows is the unbound receipt; attaching is an explicit init.
1229
+ // No session found - provide helpful error
1230
+ // For stdio transport without mcpSessionId, this is expected behavior:
1231
+ // each Claude instance should explicitly init its own session
1232
+ const unbound = await unboundSessionErrorFields(session, {
1233
+ workspacePath: options.workspaceRoot
1234
+ });
1235
+ throw createSessionToolError('SESSION_NOT_ACTIVE', unbound.message, unbound.hint, unbound.details);
1236
+ }
1237
+ /**
1238
+ * Resolve the identity ALREADY bound to this transport connection without
1239
+ * minting, caching, or registering anything. Returns null when the connection
1240
+ * is genuinely unbound. Read-intent callers use this so a bound seat still
1241
+ * satisfies identity-shaped filters (e.g. todo list `mine=true`) while a
1242
+ * virgin stdio connection resolves sessions identity-free (ledger L-23).
1243
+ */
1244
+ export async function resolveBoundMCPParticipant(clientInfo, mcpSessionId, sessionManager, callerOrOptions, workspaceRoot) {
1245
+ const options = resolutionOptionsOf(callerOrOptions, workspaceRoot);
1246
+ const caller = options.caller;
1247
+ const resolvedWorkspaceRoot = options.workspaceRoot;
1248
+ const manager = sessionManager ?? (await getSessionManagerAsync());
1249
+ const registry = registryOf(manager);
1250
+ const callerSeatKey = mcpSessionId
1251
+ ? undefined
1252
+ : unixSeatConnectionKey(resolvedWorkspaceRoot, caller?.agentId);
1253
+ if (callerSeatKey) {
1254
+ const persisted = await manager.getParticipantByConnection(callerSeatKey);
1255
+ if (persisted?.participantId)
1256
+ return persisted.participantId;
1257
+ }
1258
+ const effectiveKey = mcpSessionId ?? callerSeatKey ?? clientInfo?.connectionId;
1259
+ const runtimeConnection = effectiveKey
1260
+ ? getRuntimeConnectionState(registry, effectiveKey)
1261
+ : getRuntimeConnectionState(registry, mcpSessionId);
1262
+ if (runtimeConnection?.participantId) {
1263
+ if (!effectiveKey ||
1264
+ !runtimeConnection.connectionId ||
1265
+ runtimeConnection.connectionId === effectiveKey) {
1266
+ return runtimeConnection.participantId;
1267
+ }
1268
+ }
1269
+ const runtimeClientInfo = getRuntimeClientInfo(registry, effectiveKey ?? mcpSessionId);
1270
+ const connectionId = clientInfo?.connectionId ??
1271
+ effectiveKey ??
1272
+ runtimeClientInfo?.connectionId ??
1273
+ runtimeConnection?.connectionId ??
1274
+ undefined;
1275
+ if (!connectionId)
1276
+ return null;
1277
+ const persisted = await manager.getParticipantByConnection(connectionId);
1278
+ return persisted?.participantId ?? null;
1279
+ }
1280
+ /** The caller and workspace root, from either the options form or the legacy positional caller. */
1281
+ function resolutionOptionsOf(callerOrOptions, workspaceRoot) {
1282
+ if (callerOrOptions === undefined)
1283
+ return { workspaceRoot };
1284
+ if (isResolutionOptions(callerOrOptions)) {
1285
+ return { caller: callerOrOptions.caller, workspaceRoot: callerOrOptions.workspaceRoot };
1286
+ }
1287
+ return { caller: callerOrOptions, workspaceRoot };
1288
+ }
1289
+ function isResolutionOptions(value) {
1290
+ return 'caller' in value || 'workspaceRoot' in value;
1291
+ }
1292
+ /**
1293
+ * Resolve the participant an already-known HTTP client seat owned before a
1294
+ * host replacement. This is deliberately read-only: recovery admission may
1295
+ * reuse durable authority, but it must never mint a participant merely because
1296
+ * an old relay replayed its pre-receipt `session init` request.
1297
+ */
1298
+ export async function resolveExistingMcpParticipant(clientInfo, mcpSessionId, sessionManager) {
1299
+ const bound = await resolveBoundMCPParticipant(clientInfo, mcpSessionId, sessionManager);
1300
+ if (bound)
1301
+ return resolveExistingParticipantReference(bound, sessionManager);
1302
+ const effectiveClientInfo = clientInfo ?? getRuntimeClientInfo(registryOf(sessionManager), mcpSessionId);
1303
+ const declaredSlug = declaredIdentitySlug(effectiveClientInfo);
1304
+ if (declaredSlug && effectiveClientInfo) {
1305
+ const resolved = await resolveDeclaredIdentityParticipant(sessionManager, effectiveClientInfo);
1306
+ if (resolved) {
1307
+ return {
1308
+ participantId: resolved.participantId,
1309
+ profile: resolved.profile,
1310
+ slug: extractSlug(resolved.profile.metadata) ?? resolved.slug
1311
+ };
1312
+ }
1313
+ return null;
1314
+ }
1315
+ const anchor = await sessionManager.getDefaultActiveSession();
1316
+ if (!anchor)
1317
+ return null;
1318
+ const reclaimed = await reclaimMcpSeat(sessionManager, effectiveClientInfo, anchor, mcpSessionId);
1319
+ if (!reclaimed?.profile)
1320
+ return null;
1321
+ return resolveExistingParticipantReference(reclaimed.profile.participantId, sessionManager);
1322
+ }
1323
+ /**
1324
+ * Ensure session context is available
1325
+ * @param sessionId - Optional explicit session ID
1326
+ * @param participantId - Optional participant ID
1327
+ * @param mcpSessionId - MCP session ID for HTTP transport isolation
1328
+ */
1329
+ export async function ensureSessionContext(sessionId, participantId, mcpSessionId, options = {}, runtime) {
1330
+ const session = await getSessionManagerAsync(runtime);
1331
+ return ensureSessionContextWithManager(session, runtime, sessionId, participantId, mcpSessionId, options);
1332
+ }
1333
+ /**
1334
+ * Manager-bound form used by cross-feature consumers resolving the registered
1335
+ * `session/manager` context. It never falls back to a second ambient manager.
1336
+ */
1337
+ export async function ensureSessionContextWithManager(session, runtime, sessionId, participantId, mcpSessionId, options = {}) {
1338
+ const readOnly = options.intent === 'read';
1339
+ const participant = participantId ??
1340
+ (readOnly
1341
+ ? (options.caller?.participantId?.trim() ??
1342
+ (await resolveBoundMCPParticipant(undefined, mcpSessionId, session, { caller: options.caller, workspaceRoot: options.workspaceRoot })) ??
1343
+ getScopeBoundParticipantId(runtime) ??
1344
+ undefined)
1345
+ : await getOrCreateMCPParticipant(undefined, {}, mcpSessionId, options.caller, session, options.workspaceRoot));
1346
+ if (readOnly && !participant && !sessionId && !getScopeBoundSessionId(runtime, options.caller)) {
1347
+ throw createSessionToolError('CONNECTION_UNBOUND', 'An unbound session read cannot create a participant.', 'Identify this connection or supply an existing sessionId first.');
1348
+ }
1349
+ const resolvedSessionId = await resolveSessionIdForParticipant(sessionId, participant, mcpSessionId, options, session, runtime);
1350
+ const sessionData = await session.getSession(resolvedSessionId);
1351
+ return { session, sessionId: resolvedSessionId, participantId: participant, sessionData };
1352
+ }
1353
+ /**
1354
+ * Refresh session state from database
1355
+ * @param sessionManager - Optional session manager instance
1356
+ * @param mcpSessionId - MCP session ID for HTTP transport isolation
1357
+ */
1358
+ export async function refreshSessionState(sessionManager, mcpSessionId) {
1359
+ const session = sessionManager ?? getSessionManager();
1360
+ if (!mcpSessionId)
1361
+ return;
1362
+ const defaultId = await session.getDefaultActiveSession();
1363
+ const resolved = defaultId ? await session.getSession(defaultId) : null;
1364
+ await updateTransportSessionBinding(session, resolved, mcpSessionId);
1365
+ }
1366
+ /**
1367
+ * The participant a transport's connection state names: `participantId`, or
1368
+ * `agentId`, which mirrors it and is the field the MCP surface keeps when it
1369
+ * restamps the connection.
1370
+ */
1371
+ const membershipIdentitySchema = z.object({
1372
+ participantId: z.string().nullish(),
1373
+ agentId: z.string().nullish()
1374
+ });
1375
+ /**
1376
+ * Renew the durable membership lease while the MCP transport remains alive.
1377
+ * Tool-activity heartbeats are useful, but they are insufficient when an agent
1378
+ * is thinking or waiting for another lane; the transport registry supplies the
1379
+ * missing liveness clock.
1380
+ */
1381
+ async function renewTransportMembershipLease(runtime, registry, mcpSessionId) {
1382
+ const state = registry.getConnectionState(mcpSessionId);
1383
+ if (!state)
1384
+ return;
1385
+ const session = await getSessionManagerAsync(runtime);
1386
+ // The live transport keeps its instance live, as any host keeps its seat.
1387
+ if (mcpSessionId)
1388
+ await session.touchInstance(mcpSessionId, { force: true });
1389
+ const identity = membershipIdentitySchema.parse(state);
1390
+ const participantId = identity.participantId ?? identity.agentId;
1391
+ if (!participantId)
1392
+ return;
1393
+ const sessionId = state.sessionId ??
1394
+ (mcpSessionId
1395
+ ? (await session.getSessionForMcpConnection(mcpSessionId))?.id
1396
+ : null) ??
1397
+ (await session.getParticipantActiveSession(participantId));
1398
+ if (!sessionId)
1399
+ return;
1400
+ // Archive closes membership, and only the explicit resume action reopens it:
1401
+ // a transport whose recorded session was archived or removed renews no claim
1402
+ // on it (the rule getSessionForMcpConnection applies to the durable mapping).
1403
+ const target = await session.getSession(sessionId);
1404
+ if (!target || target.status === 'archived')
1405
+ return;
1406
+ await session.acquireMembershipLease({
1407
+ sessionId,
1408
+ participantId,
1409
+ connectionKey: state.connectionId ?? mcpSessionId ?? 'local'
1410
+ });
1411
+ }
1412
+ /** Resolve the declared manager before admitting any renewal timers. */
1413
+ export async function attachMcpMembershipOwner(runtime, registry = mcpSessionRegistryFor(runtime)) {
1414
+ await getSessionManagerAsync(runtime);
1415
+ return registry.attachMembershipOwner(runtime, (id) => renewTransportMembershipLease(runtime, registry, id));
1416
+ }
1417
+ // The registry class and the per-root accessor; no process-wide registry exists.
1418
+ export { McpSessionRegistry, mcpSessionRegistryFor };
1419
+ export { buildUnboundSessionGuidance, isSessionDiscoveryCall, renderUnboundSessionGuidance, UNBOUND_SESSION_HINT, unboundSessionErrorFields } from "./unbound-guidance.js";
1420
+ //# sourceMappingURL=participant.js.map