devchain-cli 0.12.4 → 0.13.1

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 (1003) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +63 -104
  3. package/dist/drizzle/0062_provider_probe_proofs.sql +6 -0
  4. package/dist/drizzle/0063_session_name.sql +1 -0
  5. package/dist/drizzle/meta/0062_snapshot.json +5208 -0
  6. package/dist/drizzle/meta/0063_snapshot.json +5215 -0
  7. package/dist/drizzle/meta/_journal.json +14 -0
  8. package/dist/node_modules/@devchain/shared/host-resolver.d.ts +18 -0
  9. package/dist/node_modules/@devchain/shared/host-resolver.d.ts.map +1 -0
  10. package/dist/node_modules/@devchain/shared/host-resolver.js +69 -0
  11. package/dist/node_modules/@devchain/shared/host-resolver.js.map +1 -0
  12. package/dist/node_modules/@devchain/shared/index.d.ts +1 -0
  13. package/dist/node_modules/@devchain/shared/index.d.ts.map +1 -1
  14. package/dist/node_modules/@devchain/shared/index.js +1 -0
  15. package/dist/node_modules/@devchain/shared/index.js.map +1 -1
  16. package/dist/node_modules/@devchain/shared/package.json +2 -0
  17. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  18. package/dist/server/app.main.module.js +12 -6
  19. package/dist/server/app.main.module.js.map +1 -1
  20. package/dist/server/app.normal.module.js +14 -6
  21. package/dist/server/app.normal.module.js.map +1 -1
  22. package/dist/server/common/config/env.config.d.ts +7 -0
  23. package/dist/server/common/config/env.config.js +11 -0
  24. package/dist/server/common/config/env.config.js.map +1 -1
  25. package/dist/server/common/config/host-helpers.d.ts +3 -3
  26. package/dist/server/common/config/host-helpers.js +5 -28
  27. package/dist/server/common/config/host-helpers.js.map +1 -1
  28. package/dist/server/common/errors/service-unavailable.error.d.ts +4 -0
  29. package/dist/server/common/errors/service-unavailable.error.js +12 -0
  30. package/dist/server/common/errors/service-unavailable.error.js.map +1 -0
  31. package/dist/server/common/process-identity.d.ts +1 -0
  32. package/dist/server/common/process-identity.js +6 -0
  33. package/dist/server/common/process-identity.js.map +1 -0
  34. package/dist/server/common/resolve-binary.d.ts +2 -1
  35. package/dist/server/common/resolve-binary.js +7 -6
  36. package/dist/server/common/resolve-binary.js.map +1 -1
  37. package/dist/server/common/template/prompt-render-context.d.ts +12 -0
  38. package/dist/server/common/template/prompt-render-context.js +37 -0
  39. package/dist/server/common/template/prompt-render-context.js.map +1 -0
  40. package/dist/server/common/test/app-bootstrap.helper.d.ts +13 -0
  41. package/dist/server/common/test/app-bootstrap.helper.js +184 -0
  42. package/dist/server/common/test/app-bootstrap.helper.js.map +1 -0
  43. package/dist/server/main.js +2 -2
  44. package/dist/server/main.js.map +1 -1
  45. package/dist/server/modules/agent-message-delivery/adapters/legacy-delivery-formatter.adapter.d.ts +5 -0
  46. package/dist/server/modules/agent-message-delivery/adapters/legacy-delivery-formatter.adapter.js +33 -0
  47. package/dist/server/modules/agent-message-delivery/adapters/legacy-delivery-formatter.adapter.js.map +1 -0
  48. package/dist/server/modules/agent-message-delivery/adapters/legacy-recipient-resolver.adapter.d.ts +6 -0
  49. package/dist/server/modules/agent-message-delivery/adapters/legacy-recipient-resolver.adapter.js +22 -0
  50. package/dist/server/modules/agent-message-delivery/adapters/legacy-recipient-resolver.adapter.js.map +1 -0
  51. package/dist/server/modules/agent-message-delivery/agent-message-delivery.module.d.ts +2 -0
  52. package/dist/server/modules/agent-message-delivery/agent-message-delivery.module.js +45 -0
  53. package/dist/server/modules/agent-message-delivery/agent-message-delivery.module.js.map +1 -0
  54. package/dist/server/modules/agent-message-delivery/agent-message-delivery.service.d.ts +21 -0
  55. package/dist/server/modules/agent-message-delivery/agent-message-delivery.service.js +107 -0
  56. package/dist/server/modules/agent-message-delivery/agent-message-delivery.service.js.map +1 -0
  57. package/dist/server/modules/agent-message-delivery/dtos/delivery.types.d.ts +32 -0
  58. package/dist/server/modules/agent-message-delivery/dtos/delivery.types.js +3 -0
  59. package/dist/server/modules/agent-message-delivery/dtos/delivery.types.js.map +1 -0
  60. package/dist/server/modules/agent-message-delivery/ports/delivery-formatter.d.ts +4 -0
  61. package/dist/server/modules/agent-message-delivery/ports/delivery-formatter.js +7 -0
  62. package/dist/server/modules/agent-message-delivery/ports/delivery-formatter.js.map +1 -0
  63. package/dist/server/modules/agent-message-delivery/ports/delivery-recipient-resolver.d.ts +8 -0
  64. package/dist/server/modules/agent-message-delivery/ports/delivery-recipient-resolver.js +7 -0
  65. package/dist/server/modules/agent-message-delivery/ports/delivery-recipient-resolver.js.map +1 -0
  66. package/dist/server/modules/{events/subscribers/chat-message-broadcaster.subscriber.d.ts → agent-message-delivery/subscribers/chat-message-delivery.subscriber.d.ts} +6 -4
  67. package/dist/server/modules/agent-message-delivery/subscribers/chat-message-delivery.subscriber.js +63 -0
  68. package/dist/server/modules/agent-message-delivery/subscribers/chat-message-delivery.subscriber.js.map +1 -0
  69. package/dist/server/modules/agents/agents.module.js +2 -2
  70. package/dist/server/modules/agents/agents.module.js.map +1 -1
  71. package/dist/server/modules/agents/controllers/agents.controller.d.ts +3 -1
  72. package/dist/server/modules/agents/controllers/agents.controller.js +6 -5
  73. package/dist/server/modules/agents/controllers/agents.controller.js.map +1 -1
  74. package/dist/server/modules/chat/chat.module.js +14 -4
  75. package/dist/server/modules/chat/chat.module.js.map +1 -1
  76. package/dist/server/modules/chat/services/chat-session-invite.service.d.ts +16 -0
  77. package/dist/server/modules/chat/services/chat-session-invite.service.js +194 -0
  78. package/dist/server/modules/chat/services/chat-session-invite.service.js.map +1 -0
  79. package/dist/server/modules/chat/services/chat-settings.service.js +2 -1
  80. package/dist/server/modules/chat/services/chat-settings.service.js.map +1 -1
  81. package/dist/server/modules/chat/services/chat.service.d.ts +6 -4
  82. package/dist/server/modules/chat/services/chat.service.js +64 -105
  83. package/dist/server/modules/chat/services/chat.service.js.map +1 -1
  84. package/dist/server/modules/cloud/cloud.module.d.ts +2 -0
  85. package/dist/server/modules/cloud/cloud.module.js +54 -0
  86. package/dist/server/modules/cloud/cloud.module.js.map +1 -0
  87. package/dist/server/modules/cloud/controllers/activity-proxy.controller.d.ts +6 -0
  88. package/dist/server/modules/cloud/controllers/activity-proxy.controller.js +39 -0
  89. package/dist/server/modules/cloud/controllers/activity-proxy.controller.js.map +1 -0
  90. package/dist/server/modules/cloud/controllers/auth-callback.controller.d.ts +11 -0
  91. package/dist/server/modules/cloud/controllers/auth-callback.controller.js +72 -0
  92. package/dist/server/modules/cloud/controllers/auth-callback.controller.js.map +1 -0
  93. package/dist/server/modules/cloud/controllers/devices-proxy.controller.d.ts +9 -0
  94. package/dist/server/modules/cloud/controllers/devices-proxy.controller.js +75 -0
  95. package/dist/server/modules/cloud/controllers/devices-proxy.controller.js.map +1 -0
  96. package/dist/server/modules/cloud/controllers/egress-config.controller.d.ts +12 -0
  97. package/dist/server/modules/cloud/controllers/egress-config.controller.js +66 -0
  98. package/dist/server/modules/cloud/controllers/egress-config.controller.js.map +1 -0
  99. package/dist/server/modules/cloud/controllers/preferences-proxy.controller.d.ts +30 -0
  100. package/dist/server/modules/cloud/controllers/preferences-proxy.controller.js +159 -0
  101. package/dist/server/modules/cloud/controllers/preferences-proxy.controller.js.map +1 -0
  102. package/dist/server/modules/cloud/controllers/qr-initiate-proxy.controller.d.ts +11 -0
  103. package/dist/server/modules/cloud/controllers/qr-initiate-proxy.controller.js +89 -0
  104. package/dist/server/modules/cloud/controllers/qr-initiate-proxy.controller.js.map +1 -0
  105. package/dist/server/modules/cloud/dtos/cloud-tokens.dto.d.ts +20 -0
  106. package/dist/server/modules/cloud/dtos/cloud-tokens.dto.js +12 -0
  107. package/dist/server/modules/cloud/dtos/cloud-tokens.dto.js.map +1 -0
  108. package/dist/server/modules/cloud/services/cloud-egress-bridge.service.d.ts +24 -0
  109. package/dist/server/modules/cloud/services/cloud-egress-bridge.service.js +111 -0
  110. package/dist/server/modules/cloud/services/cloud-egress-bridge.service.js.map +1 -0
  111. package/dist/server/modules/cloud/services/cloud-session-manager.service.d.ts +27 -0
  112. package/dist/server/modules/cloud/services/cloud-session-manager.service.js +257 -0
  113. package/dist/server/modules/cloud/services/cloud-session-manager.service.js.map +1 -0
  114. package/dist/server/modules/cloud/services/egress-queue.service.d.ts +20 -0
  115. package/dist/server/modules/cloud/services/egress-queue.service.js +136 -0
  116. package/dist/server/modules/cloud/services/egress-queue.service.js.map +1 -0
  117. package/dist/server/modules/cloud/services/encrypted-token-store.service.d.ts +15 -0
  118. package/dist/server/modules/cloud/services/encrypted-token-store.service.js +131 -0
  119. package/dist/server/modules/cloud/services/encrypted-token-store.service.js.map +1 -0
  120. package/dist/server/modules/cloud/services/event-mapper.service.d.ts +42 -0
  121. package/dist/server/modules/cloud/services/event-mapper.service.js +44 -0
  122. package/dist/server/modules/cloud/services/event-mapper.service.js.map +1 -0
  123. package/dist/server/modules/cloud/services/project-activity-reporter.service.d.ts +21 -0
  124. package/dist/server/modules/cloud/services/project-activity-reporter.service.js +138 -0
  125. package/dist/server/modules/cloud/services/project-activity-reporter.service.js.map +1 -0
  126. package/dist/server/modules/cloud/services/project-egress-config.service.d.ts +13 -0
  127. package/dist/server/modules/cloud/services/project-egress-config.service.js +87 -0
  128. package/dist/server/modules/cloud/services/project-egress-config.service.js.map +1 -0
  129. package/dist/server/modules/cloud/services/refresh-gate.service.d.ts +9 -0
  130. package/dist/server/modules/cloud/services/refresh-gate.service.js +63 -0
  131. package/dist/server/modules/cloud/services/refresh-gate.service.js.map +1 -0
  132. package/dist/server/modules/cloud/types/index.d.ts +14 -0
  133. package/dist/server/modules/cloud/types/index.js +3 -0
  134. package/dist/server/modules/cloud/types/index.js.map +1 -0
  135. package/dist/server/modules/cloud-tunnel/cloud-tunnel.module.d.ts +2 -0
  136. package/dist/server/modules/cloud-tunnel/cloud-tunnel.module.js +25 -0
  137. package/dist/server/modules/cloud-tunnel/cloud-tunnel.module.js.map +1 -0
  138. package/dist/server/modules/cloud-tunnel/services/tunnel-client.service.d.ts +39 -0
  139. package/dist/server/modules/cloud-tunnel/services/tunnel-client.service.js +319 -0
  140. package/dist/server/modules/cloud-tunnel/services/tunnel-client.service.js.map +1 -0
  141. package/dist/server/modules/cloud-tunnel/services/tunnel-handler.service.d.ts +44 -0
  142. package/dist/server/modules/cloud-tunnel/services/tunnel-handler.service.js +456 -0
  143. package/dist/server/modules/cloud-tunnel/services/tunnel-handler.service.js.map +1 -0
  144. package/dist/server/modules/cloud-tunnel/services/tunnel-keypair.service.d.ts +22 -0
  145. package/dist/server/modules/cloud-tunnel/services/tunnel-keypair.service.js +146 -0
  146. package/dist/server/modules/cloud-tunnel/services/tunnel-keypair.service.js.map +1 -0
  147. package/dist/server/modules/codebase-overview-analyzer/codebase-overview-analyzer.module.js +2 -1
  148. package/dist/server/modules/codebase-overview-analyzer/codebase-overview-analyzer.module.js.map +1 -1
  149. package/dist/server/modules/codebase-overview-analyzer/services/codebase-overview-analyzer.service.d.ts +3 -1
  150. package/dist/server/modules/codebase-overview-analyzer/services/codebase-overview-analyzer.service.js +14 -20
  151. package/dist/server/modules/codebase-overview-analyzer/services/codebase-overview-analyzer.service.js.map +1 -1
  152. package/dist/server/modules/core/controllers/preflight.controller.d.ts +0 -4
  153. package/dist/server/modules/core/controllers/preflight.controller.js +0 -17
  154. package/dist/server/modules/core/controllers/preflight.controller.js.map +1 -1
  155. package/dist/server/modules/core/controllers/runtime.controller.d.ts +4 -0
  156. package/dist/server/modules/core/controllers/runtime.controller.js +5 -0
  157. package/dist/server/modules/core/controllers/runtime.controller.js.map +1 -1
  158. package/dist/server/modules/core/core-normal-health.module.js +2 -0
  159. package/dist/server/modules/core/core-normal-health.module.js.map +1 -1
  160. package/dist/server/modules/core/core-normal.module.js +12 -6
  161. package/dist/server/modules/core/core-normal.module.js.map +1 -1
  162. package/dist/server/modules/core/services/gemini-trusted-folders.module.d.ts +2 -0
  163. package/dist/server/modules/core/services/gemini-trusted-folders.module.js +21 -0
  164. package/dist/server/modules/core/services/gemini-trusted-folders.module.js.map +1 -0
  165. package/dist/server/modules/core/services/normal-readiness-checker.service.d.ts +3 -1
  166. package/dist/server/modules/core/services/normal-readiness-checker.service.js +9 -11
  167. package/dist/server/modules/core/services/normal-readiness-checker.service.js.map +1 -1
  168. package/dist/server/modules/core/services/preflight.service.d.ts +4 -3
  169. package/dist/server/modules/core/services/preflight.service.js +21 -17
  170. package/dist/server/modules/core/services/preflight.service.js.map +1 -1
  171. package/dist/server/modules/epics/controllers/epic-comments.controller.d.ts +3 -1
  172. package/dist/server/modules/epics/controllers/epic-comments.controller.js +5 -7
  173. package/dist/server/modules/epics/controllers/epic-comments.controller.js.map +1 -1
  174. package/dist/server/modules/epics/epics.module.js +13 -4
  175. package/dist/server/modules/epics/epics.module.js.map +1 -1
  176. package/dist/server/modules/epics/services/epics.service.d.ts +21 -7
  177. package/dist/server/modules/epics/services/epics.service.js +176 -50
  178. package/dist/server/modules/epics/services/epics.service.js.map +1 -1
  179. package/dist/server/modules/epics/subscribers/epic-assignment-notifier.subscriber.d.ts +25 -0
  180. package/dist/server/modules/{events → epics}/subscribers/epic-assignment-notifier.subscriber.js +47 -105
  181. package/dist/server/modules/epics/subscribers/epic-assignment-notifier.subscriber.js.map +1 -0
  182. package/dist/server/modules/epics/subscribers/sub-epic-created-notifier.subscriber.d.ts +15 -0
  183. package/dist/server/modules/{events → epics}/subscribers/sub-epic-created-notifier.subscriber.js +43 -52
  184. package/dist/server/modules/epics/subscribers/sub-epic-created-notifier.subscriber.js.map +1 -0
  185. package/dist/server/modules/events/catalog/broadcast-metadata.d.ts +8 -0
  186. package/dist/server/modules/events/catalog/broadcast-metadata.js +3 -0
  187. package/dist/server/modules/events/catalog/broadcast-metadata.js.map +1 -0
  188. package/dist/server/modules/events/catalog/broadcast-registry.d.ts +4 -0
  189. package/dist/server/modules/events/catalog/broadcast-registry.js +335 -0
  190. package/dist/server/modules/events/catalog/broadcast-registry.js.map +1 -0
  191. package/dist/server/modules/events/catalog/chat.message.read.d.ts +21 -0
  192. package/dist/server/modules/events/catalog/chat.message.read.js +14 -0
  193. package/dist/server/modules/events/catalog/chat.message.read.js.map +1 -0
  194. package/dist/server/modules/events/catalog/epic.comment.created.d.ts +57 -0
  195. package/dist/server/modules/events/catalog/epic.comment.created.js +28 -0
  196. package/dist/server/modules/events/catalog/epic.comment.created.js.map +1 -0
  197. package/dist/server/modules/events/catalog/epic.created.d.ts +18 -0
  198. package/dist/server/modules/events/catalog/epic.created.js +6 -0
  199. package/dist/server/modules/events/catalog/epic.created.js.map +1 -1
  200. package/dist/server/modules/events/catalog/epic.deleted.d.ts +39 -0
  201. package/dist/server/modules/events/catalog/epic.deleted.js +22 -0
  202. package/dist/server/modules/events/catalog/epic.deleted.js.map +1 -0
  203. package/dist/server/modules/events/catalog/epic.updated.d.ts +6 -0
  204. package/dist/server/modules/events/catalog/epic.updated.js +2 -0
  205. package/dist/server/modules/events/catalog/epic.updated.js.map +1 -1
  206. package/dist/server/modules/events/catalog/guest.unregistered.d.ts +2 -2
  207. package/dist/server/modules/events/catalog/index.d.ts +272 -2
  208. package/dist/server/modules/events/catalog/index.js +18 -0
  209. package/dist/server/modules/events/catalog/index.js.map +1 -1
  210. package/dist/server/modules/events/catalog/review.comment.created.d.ts +6 -0
  211. package/dist/server/modules/events/catalog/review.comment.created.js +2 -0
  212. package/dist/server/modules/events/catalog/review.comment.created.js.map +1 -1
  213. package/dist/server/modules/events/catalog/session.activity.changed.d.ts +21 -0
  214. package/dist/server/modules/events/catalog/session.activity.changed.js +14 -0
  215. package/dist/server/modules/events/catalog/session.activity.changed.js.map +1 -0
  216. package/dist/server/modules/events/catalog/session.cloud-connected.d.ts +12 -0
  217. package/dist/server/modules/events/catalog/session.cloud-connected.js +11 -0
  218. package/dist/server/modules/events/catalog/session.cloud-connected.js.map +1 -0
  219. package/dist/server/modules/events/catalog/session.cloud-disconnected.d.ts +12 -0
  220. package/dist/server/modules/events/catalog/session.cloud-disconnected.js +11 -0
  221. package/dist/server/modules/events/catalog/session.cloud-disconnected.js.map +1 -0
  222. package/dist/server/modules/events/catalog/session.presence.changed.d.ts +18 -0
  223. package/dist/server/modules/events/catalog/session.presence.changed.js +13 -0
  224. package/dist/server/modules/events/catalog/session.presence.changed.js.map +1 -0
  225. package/dist/server/modules/events/catalog/session.provider-session-id.discovered.d.ts +18 -0
  226. package/dist/server/modules/events/catalog/session.provider-session-id.discovered.js +13 -0
  227. package/dist/server/modules/events/catalog/session.provider-session-id.discovered.js.map +1 -0
  228. package/dist/server/modules/events/catalog/session.recommendation.d.ts +30 -0
  229. package/dist/server/modules/events/catalog/session.recommendation.js +17 -0
  230. package/dist/server/modules/events/catalog/session.recommendation.js.map +1 -0
  231. package/dist/server/modules/events/catalog/session.restored.d.ts +3 -0
  232. package/dist/server/modules/events/catalog/session.restored.js +1 -0
  233. package/dist/server/modules/events/catalog/session.restored.js.map +1 -1
  234. package/dist/server/modules/events/catalog/session.transcript.updated.d.ts +21 -0
  235. package/dist/server/modules/events/catalog/session.transcript.updated.js +7 -0
  236. package/dist/server/modules/events/catalog/session.transcript.updated.js.map +1 -1
  237. package/dist/server/modules/events/catalog/team.config.updated.d.ts +9 -0
  238. package/dist/server/modules/events/catalog/team.config.updated.js +3 -0
  239. package/dist/server/modules/events/catalog/team.config.updated.js.map +1 -1
  240. package/dist/server/modules/events/catalog/team.member.added.d.ts +12 -0
  241. package/dist/server/modules/events/catalog/team.member.added.js +4 -0
  242. package/dist/server/modules/events/catalog/team.member.added.js.map +1 -1
  243. package/dist/server/modules/events/catalog/team.member.removed.d.ts +12 -0
  244. package/dist/server/modules/events/catalog/team.member.removed.js +4 -0
  245. package/dist/server/modules/events/catalog/team.member.removed.js.map +1 -1
  246. package/dist/server/modules/events/events-core.module.d.ts +2 -0
  247. package/dist/server/modules/events/{events-domain.module.js → events-core.module.js} +13 -24
  248. package/dist/server/modules/events/events-core.module.js.map +1 -0
  249. package/dist/server/modules/events/events.module.js +3 -4
  250. package/dist/server/modules/events/events.module.js.map +1 -1
  251. package/dist/server/modules/events/index.d.ts +2 -1
  252. package/dist/server/modules/events/index.js +2 -1
  253. package/dist/server/modules/events/index.js.map +1 -1
  254. package/dist/server/modules/events/services/catalog-broadcaster.service.d.ts +9 -0
  255. package/dist/server/modules/events/services/catalog-broadcaster.service.js +56 -0
  256. package/dist/server/modules/events/services/catalog-broadcaster.service.js.map +1 -0
  257. package/dist/server/modules/events/services/events-stream.service.d.ts +3 -3
  258. package/dist/server/modules/events/services/events-stream.service.js +6 -6
  259. package/dist/server/modules/events/services/events-stream.service.js.map +1 -1
  260. package/dist/server/modules/git/git.module.js +2 -1
  261. package/dist/server/modules/git/git.module.js.map +1 -1
  262. package/dist/server/modules/git/services/git.service.d.ts +3 -1
  263. package/dist/server/modules/git/services/git.service.js +17 -19
  264. package/dist/server/modules/git/services/git.service.js.map +1 -1
  265. package/dist/server/modules/guests/guests.module.js +2 -2
  266. package/dist/server/modules/guests/guests.module.js.map +1 -1
  267. package/dist/server/modules/guests/services/guest-health.service.d.ts +3 -3
  268. package/dist/server/modules/guests/services/guest-health.service.js +7 -7
  269. package/dist/server/modules/guests/services/guest-health.service.js.map +1 -1
  270. package/dist/server/modules/guests/services/guests.service.d.ts +3 -3
  271. package/dist/server/modules/guests/services/guests.service.js +7 -7
  272. package/dist/server/modules/guests/services/guests.service.js.map +1 -1
  273. package/dist/server/modules/hooks/hooks.module.js +2 -2
  274. package/dist/server/modules/hooks/hooks.module.js.map +1 -1
  275. package/dist/server/modules/mcp/controllers/mcp-http.controller.js +2 -2
  276. package/dist/server/modules/mcp/controllers/mcp-http.controller.js.map +1 -1
  277. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js +2 -2
  278. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js.map +1 -1
  279. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +40 -27
  280. package/dist/server/modules/mcp/dtos/mcp.dto.js +20 -4
  281. package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
  282. package/dist/server/modules/mcp/mcp-full.module.d.ts +2 -0
  283. package/dist/server/modules/mcp/{mcp.module.js → mcp-full.module.js} +15 -21
  284. package/dist/server/modules/mcp/mcp-full.module.js.map +1 -0
  285. package/dist/server/modules/mcp/services/handlers/activity-context.d.ts +6 -0
  286. package/dist/server/modules/mcp/services/handlers/activity-context.js +3 -0
  287. package/dist/server/modules/mcp/services/handlers/activity-context.js.map +1 -0
  288. package/dist/server/modules/mcp/services/handlers/activity-tools.d.ts +3 -3
  289. package/dist/server/modules/mcp/services/handlers/activity-tools.js +87 -101
  290. package/dist/server/modules/mcp/services/handlers/activity-tools.js.map +1 -1
  291. package/dist/server/modules/mcp/services/handlers/agent-context.d.ts +16 -0
  292. package/dist/server/modules/mcp/services/handlers/agent-context.js +3 -0
  293. package/dist/server/modules/mcp/services/handlers/agent-context.js.map +1 -0
  294. package/dist/server/modules/mcp/services/handlers/agent-tools.d.ts +5 -0
  295. package/dist/server/modules/mcp/services/handlers/agent-tools.js +194 -0
  296. package/dist/server/modules/mcp/services/handlers/agent-tools.js.map +1 -0
  297. package/dist/server/modules/mcp/services/handlers/chat-context.d.ts +17 -0
  298. package/dist/server/modules/mcp/services/handlers/chat-context.js +3 -0
  299. package/dist/server/modules/mcp/services/handlers/chat-context.js.map +1 -0
  300. package/dist/server/modules/mcp/services/handlers/chat-tools/recipient-resolution.d.ts +13 -0
  301. package/dist/server/modules/mcp/services/handlers/chat-tools/recipient-resolution.js +40 -0
  302. package/dist/server/modules/mcp/services/handlers/chat-tools/recipient-resolution.js.map +1 -0
  303. package/dist/server/modules/mcp/services/handlers/chat-tools.d.ts +5 -5
  304. package/dist/server/modules/mcp/services/handlers/chat-tools.js +149 -306
  305. package/dist/server/modules/mcp/services/handlers/chat-tools.js.map +1 -1
  306. package/dist/server/modules/mcp/services/handlers/document-context.d.ts +8 -0
  307. package/dist/server/modules/mcp/services/handlers/document-context.js +3 -0
  308. package/dist/server/modules/mcp/services/handlers/document-context.js.map +1 -0
  309. package/dist/server/modules/mcp/services/handlers/document-tools.d.ts +5 -5
  310. package/dist/server/modules/mcp/services/handlers/document-tools.js +20 -54
  311. package/dist/server/modules/mcp/services/handlers/document-tools.js.map +1 -1
  312. package/dist/server/modules/mcp/services/handlers/epic-context.d.ts +9 -0
  313. package/dist/server/modules/mcp/services/handlers/epic-context.js +3 -0
  314. package/dist/server/modules/mcp/services/handlers/epic-context.js.map +1 -0
  315. package/dist/server/modules/mcp/services/handlers/epic-tools.d.ts +8 -10
  316. package/dist/server/modules/mcp/services/handlers/epic-tools.js +186 -397
  317. package/dist/server/modules/mcp/services/handlers/epic-tools.js.map +1 -1
  318. package/dist/server/modules/mcp/services/handlers/null-adapter.d.ts +1 -0
  319. package/dist/server/modules/mcp/services/handlers/null-adapter.js +20 -0
  320. package/dist/server/modules/mcp/services/handlers/null-adapter.js.map +1 -0
  321. package/dist/server/modules/mcp/services/handlers/prompt-context.d.ts +9 -0
  322. package/dist/server/modules/mcp/services/handlers/prompt-context.js +3 -0
  323. package/dist/server/modules/mcp/services/handlers/prompt-context.js.map +1 -0
  324. package/dist/server/modules/mcp/services/handlers/prompt-tools.d.ts +3 -3
  325. package/dist/server/modules/mcp/services/handlers/prompt-tools.js +22 -51
  326. package/dist/server/modules/mcp/services/handlers/prompt-tools.js.map +1 -1
  327. package/dist/server/modules/mcp/services/handlers/record-context.d.ts +5 -0
  328. package/dist/server/modules/mcp/services/handlers/record-context.js +3 -0
  329. package/dist/server/modules/mcp/services/handlers/record-context.js.map +1 -0
  330. package/dist/server/modules/mcp/services/handlers/record-tools.d.ts +7 -7
  331. package/dist/server/modules/mcp/services/handlers/record-tools.js +6 -7
  332. package/dist/server/modules/mcp/services/handlers/record-tools.js.map +1 -1
  333. package/dist/server/modules/mcp/services/handlers/review-context.d.ts +11 -0
  334. package/dist/server/modules/mcp/services/handlers/review-context.js +3 -0
  335. package/dist/server/modules/mcp/services/handlers/review-context.js.map +1 -0
  336. package/dist/server/modules/mcp/services/handlers/review-tools.d.ts +7 -7
  337. package/dist/server/modules/mcp/services/handlers/review-tools.js +164 -362
  338. package/dist/server/modules/mcp/services/handlers/review-tools.js.map +1 -1
  339. package/dist/server/modules/mcp/services/handlers/session-context.d.ts +9 -0
  340. package/dist/server/modules/mcp/services/handlers/session-context.js +3 -0
  341. package/dist/server/modules/mcp/services/handlers/session-context.js.map +1 -0
  342. package/dist/server/modules/mcp/services/handlers/session-tools.d.ts +3 -3
  343. package/dist/server/modules/mcp/services/handlers/session-tools.js +21 -23
  344. package/dist/server/modules/mcp/services/handlers/session-tools.js.map +1 -1
  345. package/dist/server/modules/mcp/services/handlers/skill-context.d.ts +6 -0
  346. package/dist/server/modules/mcp/services/handlers/skill-context.js +3 -0
  347. package/dist/server/modules/mcp/services/handlers/skill-context.js.map +1 -0
  348. package/dist/server/modules/mcp/services/handlers/skill-tools.d.ts +3 -3
  349. package/dist/server/modules/mcp/services/handlers/skill-tools.js +55 -75
  350. package/dist/server/modules/mcp/services/handlers/skill-tools.js.map +1 -1
  351. package/dist/server/modules/mcp/services/handlers/teams-context.d.ts +9 -0
  352. package/dist/server/modules/mcp/services/handlers/teams-context.js +3 -0
  353. package/dist/server/modules/mcp/services/handlers/teams-context.js.map +1 -0
  354. package/dist/server/modules/mcp/services/handlers/teams-tools.d.ts +7 -7
  355. package/dist/server/modules/mcp/services/handlers/teams-tools.js +260 -267
  356. package/dist/server/modules/mcp/services/handlers/teams-tools.js.map +1 -1
  357. package/dist/server/modules/mcp/services/handlers/types.d.ts +2 -35
  358. package/dist/server/modules/mcp/services/instructions-resolver.d.ts +2 -2
  359. package/dist/server/modules/mcp/services/instructions-resolver.js.map +1 -1
  360. package/dist/server/modules/mcp/services/mcp.service.d.ts +21 -8
  361. package/dist/server/modules/mcp/services/mcp.service.js +208 -109
  362. package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
  363. package/dist/server/modules/mcp/services/utils/agent-name-resolver.d.ts +2 -0
  364. package/dist/server/modules/mcp/services/utils/agent-name-resolver.js +27 -0
  365. package/dist/server/modules/mcp/services/utils/agent-name-resolver.js.map +1 -0
  366. package/dist/server/modules/mcp/services/utils/redact.d.ts +2 -0
  367. package/dist/server/modules/mcp/services/utils/redact.js +19 -0
  368. package/dist/server/modules/mcp/services/utils/redact.js.map +1 -0
  369. package/dist/server/modules/mcp/services/utils/require-project.d.ts +5 -0
  370. package/dist/server/modules/mcp/services/utils/require-project.js +20 -0
  371. package/dist/server/modules/mcp/services/utils/require-project.js.map +1 -0
  372. package/dist/server/modules/mcp/services/utils/resolve-epic-id.d.ts +2 -2
  373. package/dist/server/modules/mcp/services/utils/resolve-epic-id.js.map +1 -1
  374. package/dist/server/modules/mcp/services/utils/resource-resolver.d.ts +2 -2
  375. package/dist/server/modules/mcp/services/utils/resource-resolver.js.map +1 -1
  376. package/dist/server/modules/mcp/services/utils/session-context-helpers.d.ts +12 -0
  377. package/dist/server/modules/mcp/services/utils/session-context-helpers.js +34 -0
  378. package/dist/server/modules/mcp/services/utils/session-context-helpers.js.map +1 -0
  379. package/dist/server/modules/mcp/services/utils/session-context-resolver.d.ts +4 -4
  380. package/dist/server/modules/mcp/services/utils/session-context-resolver.js +9 -13
  381. package/dist/server/modules/mcp/services/utils/session-context-resolver.js.map +1 -1
  382. package/dist/server/modules/mcp/standalone-mcp.module.d.ts +2 -0
  383. package/dist/server/modules/mcp/standalone-mcp.module.js +36 -0
  384. package/dist/server/modules/mcp/standalone-mcp.module.js.map +1 -0
  385. package/dist/server/modules/mcp/tool-descriptors/activity.bindings.d.ts +2 -0
  386. package/dist/server/modules/mcp/tool-descriptors/activity.bindings.js +9 -0
  387. package/dist/server/modules/mcp/tool-descriptors/activity.bindings.js.map +1 -0
  388. package/dist/server/modules/mcp/tool-descriptors/activity.metadata.d.ts +2 -0
  389. package/dist/server/modules/mcp/tool-descriptors/activity.metadata.js +49 -0
  390. package/dist/server/modules/mcp/tool-descriptors/activity.metadata.js.map +1 -0
  391. package/dist/server/modules/mcp/tool-descriptors/agent.bindings.d.ts +2 -0
  392. package/dist/server/modules/mcp/tool-descriptors/agent.bindings.js +10 -0
  393. package/dist/server/modules/mcp/tool-descriptors/agent.bindings.js.map +1 -0
  394. package/dist/server/modules/mcp/tool-descriptors/agent.metadata.d.ts +2 -0
  395. package/dist/server/modules/mcp/tool-descriptors/agent.metadata.js +65 -0
  396. package/dist/server/modules/mcp/tool-descriptors/agent.metadata.js.map +1 -0
  397. package/dist/server/modules/mcp/tool-descriptors/chat.bindings.d.ts +2 -0
  398. package/dist/server/modules/mcp/tool-descriptors/chat.bindings.js +11 -0
  399. package/dist/server/modules/mcp/tool-descriptors/chat.bindings.js.map +1 -0
  400. package/dist/server/modules/mcp/tool-descriptors/chat.metadata.d.ts +2 -0
  401. package/dist/server/modules/mcp/tool-descriptors/chat.metadata.js +89 -0
  402. package/dist/server/modules/mcp/tool-descriptors/chat.metadata.js.map +1 -0
  403. package/dist/server/modules/mcp/tool-descriptors/document.bindings.d.ts +2 -0
  404. package/dist/server/modules/mcp/tool-descriptors/document.bindings.js +11 -0
  405. package/dist/server/modules/mcp/tool-descriptors/document.bindings.js.map +1 -0
  406. package/dist/server/modules/mcp/tool-descriptors/document.metadata.d.ts +2 -0
  407. package/dist/server/modules/mcp/tool-descriptors/document.metadata.js +96 -0
  408. package/dist/server/modules/mcp/tool-descriptors/document.metadata.js.map +1 -0
  409. package/dist/server/modules/mcp/tool-descriptors/epic.bindings.d.ts +2 -0
  410. package/dist/server/modules/mcp/tool-descriptors/epic.bindings.js +17 -0
  411. package/dist/server/modules/mcp/tool-descriptors/epic.bindings.js.map +1 -0
  412. package/dist/server/modules/mcp/tool-descriptors/epic.metadata.d.ts +2 -0
  413. package/dist/server/modules/mcp/tool-descriptors/epic.metadata.js +229 -0
  414. package/dist/server/modules/mcp/tool-descriptors/epic.metadata.js.map +1 -0
  415. package/dist/server/modules/mcp/tool-descriptors/index.d.ts +4 -0
  416. package/dist/server/modules/mcp/tool-descriptors/index.js +52 -0
  417. package/dist/server/modules/mcp/tool-descriptors/index.js.map +1 -0
  418. package/dist/server/modules/mcp/tool-descriptors/prompt.bindings.d.ts +2 -0
  419. package/dist/server/modules/mcp/tool-descriptors/prompt.bindings.js +9 -0
  420. package/dist/server/modules/mcp/tool-descriptors/prompt.bindings.js.map +1 -0
  421. package/dist/server/modules/mcp/tool-descriptors/prompt.metadata.d.ts +2 -0
  422. package/dist/server/modules/mcp/tool-descriptors/prompt.metadata.js +43 -0
  423. package/dist/server/modules/mcp/tool-descriptors/prompt.metadata.js.map +1 -0
  424. package/dist/server/modules/mcp/tool-descriptors/record.bindings.d.ts +2 -0
  425. package/dist/server/modules/mcp/tool-descriptors/record.bindings.js +13 -0
  426. package/dist/server/modules/mcp/tool-descriptors/record.bindings.js.map +1 -0
  427. package/dist/server/modules/mcp/tool-descriptors/record.metadata.d.ts +2 -0
  428. package/dist/server/modules/mcp/tool-descriptors/record.metadata.js +106 -0
  429. package/dist/server/modules/mcp/tool-descriptors/record.metadata.js.map +1 -0
  430. package/dist/server/modules/mcp/tool-descriptors/review.bindings.d.ts +2 -0
  431. package/dist/server/modules/mcp/tool-descriptors/review.bindings.js +13 -0
  432. package/dist/server/modules/mcp/tool-descriptors/review.bindings.js.map +1 -0
  433. package/dist/server/modules/mcp/tool-descriptors/review.metadata.d.ts +2 -0
  434. package/dist/server/modules/mcp/tool-descriptors/review.metadata.js +158 -0
  435. package/dist/server/modules/mcp/tool-descriptors/review.metadata.js.map +1 -0
  436. package/dist/server/modules/mcp/tool-descriptors/session.bindings.d.ts +2 -0
  437. package/dist/server/modules/mcp/tool-descriptors/session.bindings.js +9 -0
  438. package/dist/server/modules/mcp/tool-descriptors/session.bindings.js.map +1 -0
  439. package/dist/server/modules/mcp/tool-descriptors/session.metadata.d.ts +4 -0
  440. package/dist/server/modules/mcp/tool-descriptors/session.metadata.js +43 -0
  441. package/dist/server/modules/mcp/tool-descriptors/session.metadata.js.map +1 -0
  442. package/dist/server/modules/mcp/tool-descriptors/skill.bindings.d.ts +2 -0
  443. package/dist/server/modules/mcp/tool-descriptors/skill.bindings.js +9 -0
  444. package/dist/server/modules/mcp/tool-descriptors/skill.bindings.js.map +1 -0
  445. package/dist/server/modules/mcp/tool-descriptors/skill.metadata.d.ts +2 -0
  446. package/dist/server/modules/mcp/tool-descriptors/skill.metadata.js +47 -0
  447. package/dist/server/modules/mcp/tool-descriptors/skill.metadata.js.map +1 -0
  448. package/dist/server/modules/mcp/tool-descriptors/team.bindings.d.ts +2 -0
  449. package/dist/server/modules/mcp/tool-descriptors/team.bindings.js +13 -0
  450. package/dist/server/modules/mcp/tool-descriptors/team.bindings.js.map +1 -0
  451. package/dist/server/modules/mcp/tool-descriptors/team.metadata.d.ts +2 -0
  452. package/dist/server/modules/mcp/tool-descriptors/team.metadata.js +142 -0
  453. package/dist/server/modules/mcp/tool-descriptors/team.metadata.js.map +1 -0
  454. package/dist/server/modules/mcp/tool-descriptors/types.d.ts +9 -0
  455. package/dist/server/modules/mcp/tool-descriptors/types.js +3 -0
  456. package/dist/server/modules/mcp/tool-descriptors/types.js.map +1 -0
  457. package/dist/server/modules/mcp/utils/param-suggestion.js +4 -3
  458. package/dist/server/modules/mcp/utils/param-suggestion.js.map +1 -1
  459. package/dist/server/modules/orchestrator/docker/docker.module.js +2 -0
  460. package/dist/server/modules/orchestrator/docker/docker.module.js.map +1 -1
  461. package/dist/server/modules/orchestrator/docker/services/docker.service.d.ts +4 -1
  462. package/dist/server/modules/orchestrator/docker/services/docker.service.js +20 -14
  463. package/dist/server/modules/orchestrator/docker/services/docker.service.js.map +1 -1
  464. package/dist/server/modules/orchestrator/git/git.module.js +2 -1
  465. package/dist/server/modules/orchestrator/git/git.module.js.map +1 -1
  466. package/dist/server/modules/orchestrator/git/services/git-worktree.service.d.ts +4 -2
  467. package/dist/server/modules/orchestrator/git/services/git-worktree.service.js +19 -26
  468. package/dist/server/modules/orchestrator/git/services/git-worktree.service.js.map +1 -1
  469. package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.js.map +1 -1
  470. package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.d.ts +3 -2
  471. package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.js +31 -53
  472. package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.js.map +1 -1
  473. package/dist/server/modules/orchestrator/worktrees/worktrees.module.js +4 -4
  474. package/dist/server/modules/orchestrator/worktrees/worktrees.module.js.map +1 -1
  475. package/dist/server/modules/profiles/controllers/provider-configs.controller.d.ts +3 -1
  476. package/dist/server/modules/profiles/controllers/provider-configs.controller.js +5 -3
  477. package/dist/server/modules/profiles/controllers/provider-configs.controller.js.map +1 -1
  478. package/dist/server/modules/profiles/profiles.module.js +4 -1
  479. package/dist/server/modules/profiles/profiles.module.js.map +1 -1
  480. package/dist/server/modules/profiles/services/provider-configs.service.d.ts +13 -0
  481. package/dist/server/modules/profiles/services/provider-configs.service.js +88 -0
  482. package/dist/server/modules/profiles/services/provider-configs.service.js.map +1 -0
  483. package/dist/server/modules/projects/controllers/projects.controller.d.ts +20 -1
  484. package/dist/server/modules/projects/controllers/projects.controller.js +132 -2
  485. package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
  486. package/dist/server/modules/projects/dtos/export.dto.d.ts +6 -6
  487. package/dist/server/modules/projects/dtos/template-upgrade.dto.d.ts +20 -0
  488. package/dist/server/modules/projects/dtos/template-upgrade.dto.js +90 -0
  489. package/dist/server/modules/projects/dtos/template-upgrade.dto.js.map +1 -0
  490. package/dist/server/modules/projects/helpers/project-import.d.ts +14 -0
  491. package/dist/server/modules/projects/helpers/project-import.js +76 -1
  492. package/dist/server/modules/projects/helpers/project-import.js.map +1 -1
  493. package/dist/server/modules/projects/helpers/template-loader.js +3 -2
  494. package/dist/server/modules/projects/helpers/template-loader.js.map +1 -1
  495. package/dist/server/modules/projects/projects.module.js +21 -2
  496. package/dist/server/modules/projects/projects.module.js.map +1 -1
  497. package/dist/server/modules/projects/services/project-provider-provisioning.service.d.ts +1 -1
  498. package/dist/server/modules/projects/services/project-provider-provisioning.service.js +1 -1
  499. package/dist/server/modules/projects/services/project-provider-provisioning.service.js.map +1 -1
  500. package/dist/server/modules/projects/services/project-registry-import.service.d.ts +38 -0
  501. package/dist/server/modules/projects/services/project-registry-import.service.js +140 -0
  502. package/dist/server/modules/projects/services/project-registry-import.service.js.map +1 -0
  503. package/dist/server/modules/{registry/services/template-upgrade.service.d.ts → projects/services/project-template-upgrade.service.d.ts} +6 -8
  504. package/dist/server/modules/{registry/services/template-upgrade.service.js → projects/services/project-template-upgrade.service.js} +14 -21
  505. package/dist/server/modules/projects/services/project-template-upgrade.service.js.map +1 -0
  506. package/dist/server/modules/projects/services/projects.service.d.ts +3 -1
  507. package/dist/server/modules/projects/services/projects.service.js +7 -4
  508. package/dist/server/modules/projects/services/projects.service.js.map +1 -1
  509. package/dist/server/modules/providers/adapters/capabilities/context-window.capability.d.ts +20 -0
  510. package/dist/server/modules/providers/adapters/capabilities/context-window.capability.js +3 -0
  511. package/dist/server/modules/providers/adapters/capabilities/context-window.capability.js.map +1 -0
  512. package/dist/server/modules/providers/adapters/capabilities/hook.capability.d.ts +13 -0
  513. package/dist/server/modules/providers/adapters/capabilities/hook.capability.js +3 -0
  514. package/dist/server/modules/providers/adapters/capabilities/hook.capability.js.map +1 -0
  515. package/dist/server/modules/providers/adapters/capabilities/index.d.ts +2 -0
  516. package/dist/server/modules/providers/adapters/capabilities/index.js +12 -0
  517. package/dist/server/modules/providers/adapters/capabilities/index.js.map +1 -0
  518. package/dist/server/modules/providers/adapters/capabilities/project-mcp-settings.capability.d.ts +3 -0
  519. package/dist/server/modules/providers/adapters/capabilities/project-mcp-settings.capability.js +3 -0
  520. package/dist/server/modules/providers/adapters/capabilities/project-mcp-settings.capability.js.map +1 -0
  521. package/dist/server/modules/providers/adapters/capabilities/project-provisioning.capability.d.ts +14 -0
  522. package/dist/server/modules/providers/adapters/capabilities/project-provisioning.capability.js +3 -0
  523. package/dist/server/modules/providers/adapters/capabilities/project-provisioning.capability.js.map +1 -0
  524. package/dist/server/modules/providers/adapters/capabilities/transcript-discovery.capability.d.ts +6 -0
  525. package/dist/server/modules/providers/adapters/capabilities/transcript-discovery.capability.js +3 -0
  526. package/dist/server/modules/providers/adapters/capabilities/transcript-discovery.capability.js.map +1 -0
  527. package/dist/server/modules/providers/adapters/capabilities/type-guards.d.ts +35 -0
  528. package/dist/server/modules/providers/adapters/capabilities/type-guards.js +33 -0
  529. package/dist/server/modules/providers/adapters/capabilities/type-guards.js.map +1 -0
  530. package/dist/server/modules/providers/adapters/claude.adapter.d.ts +23 -2
  531. package/dist/server/modules/providers/adapters/claude.adapter.js +134 -0
  532. package/dist/server/modules/providers/adapters/claude.adapter.js.map +1 -1
  533. package/dist/server/modules/providers/adapters/codex.adapter.d.ts +7 -2
  534. package/dist/server/modules/providers/adapters/codex.adapter.js +4 -0
  535. package/dist/server/modules/providers/adapters/codex.adapter.js.map +1 -1
  536. package/dist/server/modules/providers/adapters/gemini.adapter.d.ts +11 -2
  537. package/dist/server/modules/providers/adapters/gemini.adapter.js +47 -2
  538. package/dist/server/modules/providers/adapters/gemini.adapter.js.map +1 -1
  539. package/dist/server/modules/providers/adapters/index.d.ts +1 -0
  540. package/dist/server/modules/providers/adapters/index.js +1 -0
  541. package/dist/server/modules/providers/adapters/index.js.map +1 -1
  542. package/dist/server/modules/providers/adapters/opencode.adapter.d.ts +1 -1
  543. package/dist/server/modules/providers/adapters/opencode.adapter.js.map +1 -1
  544. package/dist/server/modules/providers/adapters/provider-adapter.interface.d.ts +4 -8
  545. package/dist/server/modules/providers/adapters/provider-adapters.module.js +2 -1
  546. package/dist/server/modules/providers/adapters/provider-adapters.module.js.map +1 -1
  547. package/dist/server/modules/providers/controllers/provider-models.controller.d.ts +4 -3
  548. package/dist/server/modules/providers/controllers/provider-models.controller.js +29 -36
  549. package/dist/server/modules/providers/controllers/provider-models.controller.js.map +1 -1
  550. package/dist/server/modules/providers/controllers/providers.controller.d.ts +7 -13
  551. package/dist/server/modules/providers/controllers/providers.controller.js +19 -239
  552. package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
  553. package/dist/server/modules/providers/providers.module.js +24 -6
  554. package/dist/server/modules/providers/providers.module.js.map +1 -1
  555. package/dist/server/modules/providers/services/mcp-provider-registration.service.d.ts +23 -0
  556. package/dist/server/modules/providers/services/mcp-provider-registration.service.js +111 -0
  557. package/dist/server/modules/providers/services/mcp-provider-registration.service.js.map +1 -0
  558. package/dist/server/modules/providers/services/mcp-registration/cli-mcp-registration.adapter.d.ts +26 -0
  559. package/dist/server/modules/providers/services/mcp-registration/cli-mcp-registration.adapter.js +274 -0
  560. package/dist/server/modules/providers/services/mcp-registration/cli-mcp-registration.adapter.js.map +1 -0
  561. package/dist/server/modules/providers/services/mcp-registration/config-file-mcp-registration.adapter.d.ts +14 -0
  562. package/dist/server/modules/providers/services/mcp-registration/config-file-mcp-registration.adapter.js +328 -0
  563. package/dist/server/modules/providers/services/mcp-registration/config-file-mcp-registration.adapter.js.map +1 -0
  564. package/dist/server/modules/providers/services/mcp-registration/index.d.ts +5 -0
  565. package/dist/server/modules/providers/services/mcp-registration/index.js +10 -0
  566. package/dist/server/modules/providers/services/mcp-registration/index.js.map +1 -0
  567. package/dist/server/modules/providers/services/mcp-registration/mcp-registration.port.d.ts +20 -0
  568. package/dist/server/modules/providers/services/mcp-registration/mcp-registration.port.js +47 -0
  569. package/dist/server/modules/providers/services/mcp-registration/mcp-registration.port.js.map +1 -0
  570. package/dist/server/modules/providers/services/mcp-registration/mcp-registration.types.d.ts +43 -0
  571. package/dist/server/modules/providers/services/mcp-registration/mcp-registration.types.js +3 -0
  572. package/dist/server/modules/providers/services/mcp-registration/mcp-registration.types.js.map +1 -0
  573. package/dist/server/modules/providers/services/probe-proof.service.d.ts +3 -1
  574. package/dist/server/modules/providers/services/probe-proof.service.js +23 -9
  575. package/dist/server/modules/providers/services/probe-proof.service.js.map +1 -1
  576. package/dist/server/modules/{core → providers}/services/provider-mcp-ensure.service.d.ts +3 -8
  577. package/dist/server/modules/providers/services/provider-mcp-ensure.service.js +175 -0
  578. package/dist/server/modules/providers/services/provider-mcp-ensure.service.js.map +1 -0
  579. package/dist/server/modules/providers/services/provider-state-manager.service.d.ts +53 -0
  580. package/dist/server/modules/providers/services/provider-state-manager.service.js +249 -0
  581. package/dist/server/modules/providers/services/provider-state-manager.service.js.map +1 -0
  582. package/dist/server/modules/providers/utils/probe-1m.d.ts +2 -1
  583. package/dist/server/modules/providers/utils/probe-1m.js +13 -19
  584. package/dist/server/modules/providers/utils/probe-1m.js.map +1 -1
  585. package/dist/server/modules/realtime/dtos/ws-envelope.dto.d.ts +19 -0
  586. package/dist/server/modules/realtime/dtos/ws-envelope.dto.js +20 -0
  587. package/dist/server/modules/realtime/dtos/ws-envelope.dto.js.map +1 -0
  588. package/dist/server/modules/realtime/ports/realtime-broadcaster.port.d.ts +4 -0
  589. package/dist/server/modules/realtime/ports/realtime-broadcaster.port.js +5 -0
  590. package/dist/server/modules/realtime/ports/realtime-broadcaster.port.js.map +1 -0
  591. package/dist/server/modules/realtime/realtime-broadcast.module.d.ts +2 -0
  592. package/dist/server/modules/realtime/realtime-broadcast.module.js +25 -0
  593. package/dist/server/modules/realtime/realtime-broadcast.module.js.map +1 -0
  594. package/dist/server/modules/realtime/services/noop-realtime-broadcast.adapter.d.ts +4 -0
  595. package/dist/server/modules/realtime/services/noop-realtime-broadcast.adapter.js +19 -0
  596. package/dist/server/modules/realtime/services/noop-realtime-broadcast.adapter.js.map +1 -0
  597. package/dist/server/modules/realtime/services/realtime-broadcast.service.d.ts +7 -0
  598. package/dist/server/modules/realtime/services/realtime-broadcast.service.js +33 -0
  599. package/dist/server/modules/realtime/services/realtime-broadcast.service.js.map +1 -0
  600. package/dist/server/modules/registry/controllers/registry.controller.d.ts +1 -30
  601. package/dist/server/modules/registry/controllers/registry.controller.js +2 -105
  602. package/dist/server/modules/registry/controllers/registry.controller.js.map +1 -1
  603. package/dist/server/modules/registry/index.d.ts +0 -1
  604. package/dist/server/modules/registry/index.js +0 -1
  605. package/dist/server/modules/registry/index.js.map +1 -1
  606. package/dist/server/modules/registry/registry.module.js +1 -5
  607. package/dist/server/modules/registry/registry.module.js.map +1 -1
  608. package/dist/server/modules/registry/services/registry-orchestration.service.d.ts +1 -29
  609. package/dist/server/modules/registry/services/registry-orchestration.service.js +2 -94
  610. package/dist/server/modules/registry/services/registry-orchestration.service.js.map +1 -1
  611. package/dist/server/modules/reviews/reviews.module.js +8 -4
  612. package/dist/server/modules/reviews/reviews.module.js.map +1 -1
  613. package/dist/server/modules/reviews/services/review-suggestion-applier.service.d.ts +29 -0
  614. package/dist/server/modules/reviews/services/review-suggestion-applier.service.js +116 -0
  615. package/dist/server/modules/reviews/services/review-suggestion-applier.service.js.map +1 -0
  616. package/dist/server/modules/reviews/services/reviews.service.js +11 -0
  617. package/dist/server/modules/reviews/services/reviews.service.js.map +1 -1
  618. package/dist/server/modules/reviews/subscribers/review-comment-notifier.subscriber.d.ts +16 -0
  619. package/dist/server/modules/{events → reviews}/subscribers/review-comment-notifier.subscriber.js +26 -75
  620. package/dist/server/modules/reviews/subscribers/review-comment-notifier.subscriber.js.map +1 -0
  621. package/dist/server/modules/seeders/seeders/0001_seed_compact_on_idle_watcher.d.ts +1 -1
  622. package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.d.ts +1 -1
  623. package/dist/server/modules/seeders/seeders/0003_seed_preseed_jeffallan_claude_skills.d.ts +1 -1
  624. package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.d.ts +1 -1
  625. package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.d.ts +1 -1
  626. package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.d.ts +1 -1
  627. package/dist/server/modules/seeders/seeders/0007_seed_claude_no_flicker_env.d.ts +1 -1
  628. package/dist/server/modules/seeders/services/data-seeder.service.d.ts +2 -12
  629. package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
  630. package/dist/server/modules/seeders/types/seeder.types.d.ts +15 -0
  631. package/dist/server/modules/seeders/types/seeder.types.js +3 -0
  632. package/dist/server/modules/seeders/types/seeder.types.js.map +1 -0
  633. package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.d.ts +8 -0
  634. package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.js +63 -3
  635. package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.js.map +1 -1
  636. package/dist/server/modules/session-reader/controllers/session-reader.controller.d.ts +19 -410
  637. package/dist/server/modules/session-reader/controllers/session-reader.controller.js +159 -69
  638. package/dist/server/modules/session-reader/controllers/session-reader.controller.js.map +1 -1
  639. package/dist/server/modules/session-reader/data/pricing.json +19 -0
  640. package/dist/server/modules/session-reader/dtos/unified-chunk.types.d.ts +1 -2
  641. package/dist/server/modules/session-reader/dtos/unified-chunk.types.js.map +1 -1
  642. package/dist/server/modules/session-reader/dtos/unified-message.types.d.ts +66 -0
  643. package/dist/server/modules/session-reader/dtos/unified-message.types.js +3 -0
  644. package/dist/server/modules/session-reader/dtos/unified-message.types.js.map +1 -0
  645. package/dist/server/modules/session-reader/dtos/unified-session.types.d.ts +2 -66
  646. package/dist/server/modules/session-reader/dtos/unified-session.types.js.map +1 -1
  647. package/dist/server/modules/session-reader/services/codex-provider-session-id-backfill.service.d.ts +25 -0
  648. package/dist/server/modules/session-reader/services/codex-provider-session-id-backfill.service.js +175 -0
  649. package/dist/server/modules/session-reader/services/codex-provider-session-id-backfill.service.js.map +1 -0
  650. package/dist/server/modules/session-reader/services/session-cache.service.d.ts +9 -0
  651. package/dist/server/modules/session-reader/services/session-cache.service.js +15 -0
  652. package/dist/server/modules/session-reader/services/session-cache.service.js.map +1 -1
  653. package/dist/server/modules/session-reader/services/session-reader.service.d.ts +50 -4
  654. package/dist/server/modules/session-reader/services/session-reader.service.js +173 -116
  655. package/dist/server/modules/session-reader/services/session-reader.service.js.map +1 -1
  656. package/dist/server/modules/session-reader/services/transcript-cursor.d.ts +6 -0
  657. package/dist/server/modules/session-reader/services/transcript-cursor.js +27 -0
  658. package/dist/server/modules/session-reader/services/transcript-cursor.js.map +1 -0
  659. package/dist/server/modules/session-reader/services/transcript-persistence.listener.d.ts +45 -2
  660. package/dist/server/modules/session-reader/services/transcript-persistence.listener.js +472 -54
  661. package/dist/server/modules/session-reader/services/transcript-persistence.listener.js.map +1 -1
  662. package/dist/server/modules/session-reader/services/transcript-serialization.d.ts +4 -0
  663. package/dist/server/modules/session-reader/services/transcript-serialization.js +31 -0
  664. package/dist/server/modules/session-reader/services/transcript-serialization.js.map +1 -0
  665. package/dist/server/modules/session-reader/services/transcript-truncation.d.ts +6 -0
  666. package/dist/server/modules/session-reader/services/transcript-truncation.js +175 -0
  667. package/dist/server/modules/session-reader/services/transcript-truncation.js.map +1 -0
  668. package/dist/server/modules/session-reader/services/transcript-watcher.service.js +52 -2
  669. package/dist/server/modules/session-reader/services/transcript-watcher.service.js.map +1 -1
  670. package/dist/server/modules/session-reader/session-reader.module.js +6 -2
  671. package/dist/server/modules/session-reader/session-reader.module.js.map +1 -1
  672. package/dist/server/modules/sessions/controllers/sessions.controller.d.ts +9 -1
  673. package/dist/server/modules/sessions/controllers/sessions.controller.js +74 -4
  674. package/dist/server/modules/sessions/controllers/sessions.controller.js.map +1 -1
  675. package/dist/server/modules/sessions/dtos/active-session-info.dto.d.ts +21 -0
  676. package/dist/server/modules/sessions/dtos/active-session-info.dto.js +12 -0
  677. package/dist/server/modules/sessions/dtos/active-session-info.dto.js.map +1 -0
  678. package/dist/server/modules/sessions/dtos/sessions.dto.d.ts +2 -0
  679. package/dist/server/modules/sessions/dtos/sessions.dto.js.map +1 -1
  680. package/dist/server/modules/sessions/services/active-session-lookup.service.d.ts +9 -0
  681. package/dist/server/modules/sessions/services/active-session-lookup.service.js +70 -0
  682. package/dist/server/modules/sessions/services/active-session-lookup.service.js.map +1 -0
  683. package/dist/server/modules/sessions/services/agent-presence-aggregator.d.ts +13 -0
  684. package/dist/server/modules/sessions/services/agent-presence-aggregator.js +36 -0
  685. package/dist/server/modules/sessions/services/agent-presence-aggregator.js.map +1 -0
  686. package/dist/server/modules/sessions/services/delivery-failure-notifier.service.d.ts +9 -0
  687. package/dist/server/modules/sessions/services/delivery-failure-notifier.service.js +64 -0
  688. package/dist/server/modules/sessions/services/delivery-failure-notifier.service.js.map +1 -0
  689. package/dist/server/modules/sessions/services/message-activity-stream.service.d.ts +4 -4
  690. package/dist/server/modules/sessions/services/message-activity-stream.service.js +6 -6
  691. package/dist/server/modules/sessions/services/message-activity-stream.service.js.map +1 -1
  692. package/dist/server/modules/sessions/services/message-enqueue.service.d.ts +30 -0
  693. package/dist/server/modules/sessions/services/message-enqueue.service.js +55 -0
  694. package/dist/server/modules/sessions/services/message-enqueue.service.js.map +1 -0
  695. package/dist/server/modules/sessions/services/message-log.service.d.ts +24 -0
  696. package/dist/server/modules/sessions/services/message-log.service.js +110 -0
  697. package/dist/server/modules/sessions/services/message-log.service.js.map +1 -0
  698. package/dist/server/modules/sessions/services/message-pool.types.d.ts +69 -0
  699. package/dist/server/modules/sessions/services/message-pool.types.js +5 -0
  700. package/dist/server/modules/sessions/services/message-pool.types.js.map +1 -0
  701. package/dist/server/modules/sessions/services/provider-launch-config/index.d.ts +2 -0
  702. package/dist/server/modules/sessions/services/provider-launch-config/index.js +9 -0
  703. package/dist/server/modules/sessions/services/provider-launch-config/index.js.map +1 -0
  704. package/dist/server/modules/sessions/services/provider-launch-config/provider-launch-config.service.d.ts +24 -0
  705. package/dist/server/modules/sessions/services/provider-launch-config/provider-launch-config.service.js +45 -0
  706. package/dist/server/modules/sessions/services/provider-launch-config/provider-launch-config.service.js.map +1 -0
  707. package/dist/server/modules/sessions/services/session-launcher-facade.service.d.ts +13 -0
  708. package/dist/server/modules/sessions/services/session-launcher-facade.service.js +73 -0
  709. package/dist/server/modules/sessions/services/session-launcher-facade.service.js.map +1 -0
  710. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.d.ts +262 -0
  711. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.js +329 -0
  712. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.js.map +1 -0
  713. package/dist/server/modules/sessions/services/session-runtime/cleanup-stack.d.ts +11 -0
  714. package/dist/server/modules/sessions/services/session-runtime/cleanup-stack.js +27 -0
  715. package/dist/server/modules/sessions/services/session-runtime/cleanup-stack.js.map +1 -0
  716. package/dist/server/modules/sessions/services/session-runtime/index.d.ts +4 -0
  717. package/dist/server/modules/sessions/services/session-runtime/index.js +12 -0
  718. package/dist/server/modules/sessions/services/session-runtime/index.js.map +1 -0
  719. package/dist/server/modules/sessions/services/session-runtime/session-launch-pipeline.service.d.ts +38 -0
  720. package/dist/server/modules/sessions/services/session-runtime/session-launch-pipeline.service.js +404 -0
  721. package/dist/server/modules/sessions/services/session-runtime/session-launch-pipeline.service.js.map +1 -0
  722. package/dist/server/modules/sessions/services/session-runtime/session-restore-pipeline.service.d.ts +26 -0
  723. package/dist/server/modules/sessions/services/session-runtime/session-restore-pipeline.service.js +265 -0
  724. package/dist/server/modules/sessions/services/session-runtime/session-restore-pipeline.service.js.map +1 -0
  725. package/dist/server/modules/sessions/services/session-runtime/session-runtime.service.d.ts +10 -0
  726. package/dist/server/modules/sessions/services/session-runtime/session-runtime.service.js +34 -0
  727. package/dist/server/modules/sessions/services/session-runtime/session-runtime.service.js.map +1 -0
  728. package/dist/server/modules/sessions/services/sessions-message-pool.service.d.ts +11 -84
  729. package/dist/server/modules/sessions/services/sessions-message-pool.service.js +60 -185
  730. package/dist/server/modules/sessions/services/sessions-message-pool.service.js.map +1 -1
  731. package/dist/server/modules/sessions/services/sessions.service.d.ts +25 -52
  732. package/dist/server/modules/sessions/services/sessions.service.js +134 -840
  733. package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
  734. package/dist/server/modules/sessions/sessions-delivery.module.d.ts +2 -0
  735. package/dist/server/modules/sessions/sessions-delivery.module.js +26 -0
  736. package/dist/server/modules/sessions/sessions-delivery.module.js.map +1 -0
  737. package/dist/server/modules/sessions/sessions-read.module.d.ts +2 -0
  738. package/dist/server/modules/sessions/sessions-read.module.js +23 -0
  739. package/dist/server/modules/sessions/sessions-read.module.js.map +1 -0
  740. package/dist/server/modules/sessions/sessions.module.js +22 -5
  741. package/dist/server/modules/sessions/sessions.module.js.map +1 -1
  742. package/dist/server/modules/sessions/utils/claude-config.d.ts +1 -1
  743. package/dist/server/modules/sessions/utils/claude-config.js +2 -2
  744. package/dist/server/modules/sessions/utils/env-builder.d.ts +1 -1
  745. package/dist/server/modules/sessions/utils/env-builder.js +8 -3
  746. package/dist/server/modules/sessions/utils/env-builder.js.map +1 -1
  747. package/dist/server/modules/sessions/utils/tmux-naming.util.d.ts +1 -0
  748. package/dist/server/modules/sessions/utils/tmux-naming.util.js +10 -0
  749. package/dist/server/modules/sessions/utils/tmux-naming.util.js.map +1 -0
  750. package/dist/server/modules/settings/dtos/settings.dto.d.ts +14 -0
  751. package/dist/server/modules/settings/dtos/settings.dto.js +3 -3
  752. package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -1
  753. package/dist/server/modules/settings/local/delegates/core-settings.delegate.d.ts +20 -0
  754. package/dist/server/modules/settings/local/delegates/core-settings.delegate.js +499 -0
  755. package/dist/server/modules/settings/local/delegates/core-settings.delegate.js.map +1 -0
  756. package/dist/server/modules/settings/local/delegates/message-pool-settings.delegate.d.ts +14 -0
  757. package/dist/server/modules/settings/local/delegates/message-pool-settings.delegate.js +67 -0
  758. package/dist/server/modules/settings/local/delegates/message-pool-settings.delegate.js.map +1 -0
  759. package/dist/server/modules/settings/local/delegates/preset-settings.delegate.d.ts +36 -0
  760. package/dist/server/modules/settings/local/delegates/preset-settings.delegate.js +393 -0
  761. package/dist/server/modules/settings/local/delegates/preset-settings.delegate.js.map +1 -0
  762. package/dist/server/modules/settings/local/delegates/registry-settings.delegate.d.ts +20 -0
  763. package/dist/server/modules/settings/local/delegates/registry-settings.delegate.js +82 -0
  764. package/dist/server/modules/settings/local/delegates/registry-settings.delegate.js.map +1 -0
  765. package/dist/server/modules/settings/local/delegates/skills-settings.delegate.d.ts +16 -0
  766. package/dist/server/modules/settings/local/delegates/skills-settings.delegate.js +107 -0
  767. package/dist/server/modules/settings/local/delegates/skills-settings.delegate.js.map +1 -0
  768. package/dist/server/modules/settings/services/settings.constants.d.ts +31 -0
  769. package/dist/server/modules/settings/services/settings.constants.js +24 -0
  770. package/dist/server/modules/settings/services/settings.constants.js.map +1 -0
  771. package/dist/server/modules/settings/services/settings.service.d.ts +15 -54
  772. package/dist/server/modules/settings/services/settings.service.js +85 -897
  773. package/dist/server/modules/settings/services/settings.service.js.map +1 -1
  774. package/dist/server/modules/skills/services/skill-search.utils.d.ts +18 -0
  775. package/dist/server/modules/skills/services/skill-search.utils.js +87 -0
  776. package/dist/server/modules/skills/services/skill-search.utils.js.map +1 -0
  777. package/dist/server/modules/skills/services/skills.service.js +25 -27
  778. package/dist/server/modules/skills/services/skills.service.js.map +1 -1
  779. package/dist/server/modules/storage/db/schema.d.ts +81 -0
  780. package/dist/server/modules/storage/db/schema.js +10 -2
  781. package/dist/server/modules/storage/db/schema.js.map +1 -1
  782. package/dist/server/modules/storage/db/transaction-runner.d.ts +8 -0
  783. package/dist/server/modules/storage/db/transaction-runner.js +44 -0
  784. package/dist/server/modules/storage/db/transaction-runner.js.map +1 -0
  785. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +4 -0
  786. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  787. package/dist/server/modules/storage/local/delegates/base-storage.delegate.d.ts +2 -0
  788. package/dist/server/modules/storage/local/delegates/base-storage.delegate.js +2 -0
  789. package/dist/server/modules/storage/local/delegates/base-storage.delegate.js.map +1 -1
  790. package/dist/server/modules/storage/local/delegates/epic.delegate.d.ts +2 -1
  791. package/dist/server/modules/storage/local/delegates/epic.delegate.js +36 -1
  792. package/dist/server/modules/storage/local/delegates/epic.delegate.js.map +1 -1
  793. package/dist/server/modules/storage/local/delegates/profile-provider-config.delegate.js +5 -35
  794. package/dist/server/modules/storage/local/delegates/profile-provider-config.delegate.js.map +1 -1
  795. package/dist/server/modules/storage/local/delegates/project.delegate.js +12 -20
  796. package/dist/server/modules/storage/local/delegates/project.delegate.js.map +1 -1
  797. package/dist/server/modules/storage/local/delegates/provider-model.delegate.js +2 -12
  798. package/dist/server/modules/storage/local/delegates/provider-model.delegate.js.map +1 -1
  799. package/dist/server/modules/storage/local/delegates/review.delegate.js +22 -38
  800. package/dist/server/modules/storage/local/delegates/review.delegate.js.map +1 -1
  801. package/dist/server/modules/storage/local/delegates/skill-source.delegate.js +2 -17
  802. package/dist/server/modules/storage/local/delegates/skill-source.delegate.js.map +1 -1
  803. package/dist/server/modules/storage/local/local-storage.service.d.ts +2 -1
  804. package/dist/server/modules/storage/local/local-storage.service.js +3 -0
  805. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  806. package/dist/server/modules/subscribers/actions/action.interface.d.ts +6 -6
  807. package/dist/server/modules/subscribers/actions/restart-agent.action.js +4 -3
  808. package/dist/server/modules/subscribers/actions/restart-agent.action.js.map +1 -1
  809. package/dist/server/modules/subscribers/actions/send-message.action.js +12 -7
  810. package/dist/server/modules/subscribers/actions/send-message.action.js.map +1 -1
  811. package/dist/server/modules/subscribers/events/event-fields-catalog.js +1 -0
  812. package/dist/server/modules/subscribers/events/event-fields-catalog.js.map +1 -1
  813. package/dist/server/modules/subscribers/services/automation-scheduler.service.d.ts +2 -13
  814. package/dist/server/modules/subscribers/services/automation-scheduler.service.js.map +1 -1
  815. package/dist/server/modules/subscribers/services/subscriber-executor.service.d.ts +9 -18
  816. package/dist/server/modules/subscribers/services/subscriber-executor.service.js +29 -24
  817. package/dist/server/modules/subscribers/services/subscriber-executor.service.js.map +1 -1
  818. package/dist/server/modules/subscribers/services/subscriber-scheduler.types.d.ts +23 -0
  819. package/dist/server/modules/subscribers/services/subscriber-scheduler.types.js +3 -0
  820. package/dist/server/modules/subscribers/services/subscriber-scheduler.types.js.map +1 -0
  821. package/dist/server/modules/subscribers/subscribers.module.js +7 -5
  822. package/dist/server/modules/subscribers/subscribers.module.js.map +1 -1
  823. package/dist/server/modules/teams/dtos/recipient-context.dto.d.ts +6 -0
  824. package/dist/server/modules/teams/dtos/recipient-context.dto.js +3 -0
  825. package/dist/server/modules/teams/dtos/recipient-context.dto.js.map +1 -0
  826. package/dist/server/modules/teams/services/teams.service.d.ts +4 -0
  827. package/dist/server/modules/teams/services/teams.service.js +68 -0
  828. package/dist/server/modules/teams/services/teams.service.js.map +1 -1
  829. package/dist/server/modules/teams/storage/teams.store.d.ts +2 -0
  830. package/dist/server/modules/teams/storage/teams.store.js +110 -167
  831. package/dist/server/modules/teams/storage/teams.store.js.map +1 -1
  832. package/dist/server/modules/teams/subscribers/team-config-updated-notifier.subscriber.d.ts +18 -0
  833. package/dist/server/modules/{events → teams}/subscribers/team-config-updated-notifier.subscriber.js +38 -43
  834. package/dist/server/modules/teams/subscribers/team-config-updated-notifier.subscriber.js.map +1 -0
  835. package/dist/server/modules/teams/subscribers/team-membership-changed-notifier.subscriber.d.ts +18 -0
  836. package/dist/server/modules/{events → teams}/subscribers/team-membership-changed-notifier.subscriber.js +29 -44
  837. package/dist/server/modules/teams/subscribers/team-membership-changed-notifier.subscriber.js.map +1 -0
  838. package/dist/server/modules/teams/teams.module.js +11 -3
  839. package/dist/server/modules/teams/teams.module.js.map +1 -1
  840. package/dist/server/modules/terminal/gateways/terminal.gateway.d.ts +25 -15
  841. package/dist/server/modules/terminal/gateways/terminal.gateway.js +328 -383
  842. package/dist/server/modules/terminal/gateways/terminal.gateway.js.map +1 -1
  843. package/dist/server/modules/terminal/services/guest-delivery.service.d.ts +7 -0
  844. package/dist/server/modules/terminal/services/guest-delivery.service.js +37 -0
  845. package/dist/server/modules/terminal/services/guest-delivery.service.js.map +1 -0
  846. package/dist/server/modules/terminal/services/process-executor/child-process-executor.d.ts +5 -0
  847. package/dist/server/modules/terminal/services/process-executor/child-process-executor.js +195 -0
  848. package/dist/server/modules/terminal/services/process-executor/child-process-executor.js.map +1 -0
  849. package/dist/server/modules/terminal/services/process-executor/fake-process-executor.d.ts +44 -0
  850. package/dist/server/modules/terminal/services/process-executor/fake-process-executor.js +106 -0
  851. package/dist/server/modules/terminal/services/process-executor/fake-process-executor.js.map +1 -0
  852. package/dist/server/modules/terminal/services/process-executor/process-executor.module.d.ts +2 -0
  853. package/dist/server/modules/terminal/services/process-executor/process-executor.module.js +31 -0
  854. package/dist/server/modules/terminal/services/process-executor/process-executor.module.js.map +1 -0
  855. package/dist/server/modules/terminal/services/process-executor/process-executor.port.d.ts +33 -0
  856. package/dist/server/modules/terminal/services/process-executor/process-executor.port.js +20 -0
  857. package/dist/server/modules/terminal/services/process-executor/process-executor.port.js.map +1 -0
  858. package/dist/server/modules/terminal/services/process-executor/pty-executor.d.ts +5 -0
  859. package/dist/server/modules/terminal/services/process-executor/pty-executor.js +157 -0
  860. package/dist/server/modules/terminal/services/process-executor/pty-executor.js.map +1 -0
  861. package/dist/server/modules/terminal/services/process-executor/routing-process-executor.d.ts +10 -0
  862. package/dist/server/modules/terminal/services/process-executor/routing-process-executor.js +36 -0
  863. package/dist/server/modules/terminal/services/process-executor/routing-process-executor.js.map +1 -0
  864. package/dist/server/modules/terminal/services/pty.service.d.ts +11 -14
  865. package/dist/server/modules/terminal/services/pty.service.js +43 -72
  866. package/dist/server/modules/terminal/services/pty.service.js.map +1 -1
  867. package/dist/server/modules/terminal/services/terminal-activity.service.d.ts +24 -0
  868. package/dist/server/modules/terminal/services/terminal-activity.service.js +164 -0
  869. package/dist/server/modules/terminal/services/terminal-activity.service.js.map +1 -0
  870. package/dist/server/modules/terminal/services/terminal-delivery-facade.service.d.ts +9 -0
  871. package/dist/server/modules/terminal/services/terminal-delivery-facade.service.js +47 -0
  872. package/dist/server/modules/terminal/services/terminal-delivery-facade.service.js.map +1 -0
  873. package/dist/server/modules/terminal/services/terminal-delivery.types.d.ts +10 -0
  874. package/dist/server/modules/terminal/services/terminal-delivery.types.js +3 -0
  875. package/dist/server/modules/terminal/services/terminal-delivery.types.js.map +1 -0
  876. package/dist/server/modules/terminal/services/terminal-io/capture.d.ts +6 -0
  877. package/dist/server/modules/terminal/services/terminal-io/capture.js +77 -0
  878. package/dist/server/modules/terminal/services/terminal-io/capture.js.map +1 -0
  879. package/dist/server/modules/terminal/services/terminal-io/delivery.d.ts +19 -0
  880. package/dist/server/modules/terminal/services/terminal-io/delivery.js +230 -0
  881. package/dist/server/modules/terminal/services/terminal-io/delivery.js.map +1 -0
  882. package/dist/server/modules/terminal/services/terminal-io/lifecycle.d.ts +7 -0
  883. package/dist/server/modules/terminal/services/terminal-io/lifecycle.js +87 -0
  884. package/dist/server/modules/terminal/services/terminal-io/lifecycle.js.map +1 -0
  885. package/dist/server/modules/terminal/services/terminal-io/monitoring.d.ts +4 -0
  886. package/dist/server/modules/terminal/services/terminal-io/monitoring.js +65 -0
  887. package/dist/server/modules/terminal/services/terminal-io/monitoring.js.map +1 -0
  888. package/dist/server/modules/terminal/services/terminal-io/quote-shell-arg.d.ts +1 -0
  889. package/dist/server/modules/terminal/services/terminal-io/quote-shell-arg.js +9 -0
  890. package/dist/server/modules/terminal/services/terminal-io/quote-shell-arg.js.map +1 -0
  891. package/dist/server/modules/terminal/services/terminal-io/terminal-io.service.d.ts +35 -0
  892. package/dist/server/modules/terminal/services/terminal-io/terminal-io.service.js +210 -0
  893. package/dist/server/modules/terminal/services/terminal-io/terminal-io.service.js.map +1 -0
  894. package/dist/server/modules/terminal/services/terminal-io/types.d.ts +42 -0
  895. package/dist/server/modules/terminal/services/terminal-io/types.js +3 -0
  896. package/dist/server/modules/terminal/services/terminal-io/types.js.map +1 -0
  897. package/dist/server/modules/terminal/services/terminal-registry-rehydrator.service.d.ts +11 -0
  898. package/dist/server/modules/terminal/services/terminal-registry-rehydrator.service.js +63 -0
  899. package/dist/server/modules/terminal/services/terminal-registry-rehydrator.service.js.map +1 -0
  900. package/dist/server/modules/terminal/services/terminal-seed.service.d.ts +7 -5
  901. package/dist/server/modules/terminal/services/terminal-seed.service.js +46 -45
  902. package/dist/server/modules/terminal/services/terminal-seed.service.js.map +1 -1
  903. package/dist/server/modules/terminal/services/terminal-session/terminal-frame-stream.d.ts +11 -0
  904. package/dist/server/modules/terminal/services/terminal-session/terminal-frame-stream.js +17 -0
  905. package/dist/server/modules/terminal/services/terminal-session/terminal-frame-stream.js.map +1 -0
  906. package/dist/server/modules/terminal/services/terminal-session/terminal-session-registry.d.ts +15 -0
  907. package/dist/server/modules/terminal/services/terminal-session/terminal-session-registry.js +62 -0
  908. package/dist/server/modules/terminal/services/terminal-session/terminal-session-registry.js.map +1 -0
  909. package/dist/server/modules/terminal/services/terminal-session/terminal-session.d.ts +77 -0
  910. package/dist/server/modules/terminal/services/terminal-session/terminal-session.js +252 -0
  911. package/dist/server/modules/terminal/services/terminal-session/terminal-session.js.map +1 -0
  912. package/dist/server/modules/terminal/terminal-delivery.module.d.ts +2 -0
  913. package/dist/server/modules/terminal/terminal-delivery.module.js +26 -0
  914. package/dist/server/modules/terminal/terminal-delivery.module.js.map +1 -0
  915. package/dist/server/modules/terminal/terminal.module.js +29 -9
  916. package/dist/server/modules/terminal/terminal.module.js.map +1 -1
  917. package/dist/server/modules/terminal/utils/normalize-line-endings.d.ts +1 -0
  918. package/dist/server/modules/terminal/utils/normalize-line-endings.js +8 -0
  919. package/dist/server/modules/terminal/utils/normalize-line-endings.js.map +1 -0
  920. package/dist/server/modules/watchers/services/watcher-runner.service.d.ts +3 -3
  921. package/dist/server/modules/watchers/services/watcher-runner.service.js +20 -14
  922. package/dist/server/modules/watchers/services/watcher-runner.service.js.map +1 -1
  923. package/dist/server/modules/watchers/watchers.module.js +2 -2
  924. package/dist/server/modules/watchers/watchers.module.js.map +1 -1
  925. package/dist/server/templates/teams-dev.json +15 -14
  926. package/dist/server/tsconfig.tsbuildinfo +1 -1
  927. package/dist/server/ui/assets/{ReviewDetailPage-CoOg-QZq.js → ReviewDetailPage-CEqKCtbS.js} +1 -1
  928. package/dist/server/ui/assets/ReviewsPage-KUZqxdFY.js +6 -0
  929. package/dist/server/ui/assets/index-59euy2RV.css +32 -0
  930. package/dist/server/ui/assets/index-BFSzo9O6.js +1085 -0
  931. package/dist/server/ui/assets/{useReviewSubscription-CnFCUxkN.js → useReviewSubscription-q_e_8Dd4.js} +22 -27
  932. package/dist/server/ui/index.html +2 -2
  933. package/dist/templates/teams-dev.json +15 -14
  934. package/package.json +18 -2
  935. package/dist/server/modules/core/services/provider-mcp-ensure.service.js +0 -307
  936. package/dist/server/modules/core/services/provider-mcp-ensure.service.js.map +0 -1
  937. package/dist/server/modules/events/events-domain.module.d.ts +0 -2
  938. package/dist/server/modules/events/events-domain.module.js.map +0 -1
  939. package/dist/server/modules/events/subscribers/chat-message-broadcaster.subscriber.js +0 -47
  940. package/dist/server/modules/events/subscribers/chat-message-broadcaster.subscriber.js.map +0 -1
  941. package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.d.ts +0 -28
  942. package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js +0 -120
  943. package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js.map +0 -1
  944. package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.d.ts +0 -29
  945. package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js.map +0 -1
  946. package/dist/server/modules/events/subscribers/index.d.ts +0 -2
  947. package/dist/server/modules/events/subscribers/index.js +0 -28
  948. package/dist/server/modules/events/subscribers/index.js.map +0 -1
  949. package/dist/server/modules/events/subscribers/project-state-broadcaster.subscriber.d.ts +0 -16
  950. package/dist/server/modules/events/subscribers/project-state-broadcaster.subscriber.js +0 -101
  951. package/dist/server/modules/events/subscribers/project-state-broadcaster.subscriber.js.map +0 -1
  952. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.d.ts +0 -16
  953. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.js +0 -163
  954. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.js.map +0 -1
  955. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.d.ts +0 -24
  956. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js.map +0 -1
  957. package/dist/server/modules/events/subscribers/sub-epic-created-notifier.subscriber.d.ts +0 -18
  958. package/dist/server/modules/events/subscribers/sub-epic-created-notifier.subscriber.js.map +0 -1
  959. package/dist/server/modules/events/subscribers/team-config-updated-notifier.subscriber.d.ts +0 -18
  960. package/dist/server/modules/events/subscribers/team-config-updated-notifier.subscriber.js.map +0 -1
  961. package/dist/server/modules/events/subscribers/team-membership-changed-notifier.subscriber.d.ts +0 -18
  962. package/dist/server/modules/events/subscribers/team-membership-changed-notifier.subscriber.js.map +0 -1
  963. package/dist/server/modules/events/subscribers/transcript-broadcaster.subscriber.d.ts +0 -12
  964. package/dist/server/modules/events/subscribers/transcript-broadcaster.subscriber.js +0 -88
  965. package/dist/server/modules/events/subscribers/transcript-broadcaster.subscriber.js.map +0 -1
  966. package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.d.ts +0 -8
  967. package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.js +0 -48
  968. package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.js.map +0 -1
  969. package/dist/server/modules/mcp/dtos/schema-registry.d.ts +0 -7
  970. package/dist/server/modules/mcp/dtos/schema-registry.js +0 -64
  971. package/dist/server/modules/mcp/dtos/schema-registry.js.map +0 -1
  972. package/dist/server/modules/mcp/mcp.module.d.ts +0 -2
  973. package/dist/server/modules/mcp/mcp.module.js.map +0 -1
  974. package/dist/server/modules/mcp/services/mcp-provider-registration.service.d.ts +0 -64
  975. package/dist/server/modules/mcp/services/mcp-provider-registration.service.js +0 -663
  976. package/dist/server/modules/mcp/services/mcp-provider-registration.service.js.map +0 -1
  977. package/dist/server/modules/mcp/services/terminal-activity.service.d.ts +0 -9
  978. package/dist/server/modules/mcp/services/terminal-activity.service.js +0 -68
  979. package/dist/server/modules/mcp/services/terminal-activity.service.js.map +0 -1
  980. package/dist/server/modules/mcp/tool-definitions.d.ts +0 -3077
  981. package/dist/server/modules/mcp/tool-definitions.js +0 -913
  982. package/dist/server/modules/mcp/tool-definitions.js.map +0 -1
  983. package/dist/server/modules/registry/services/template-upgrade.service.js.map +0 -1
  984. package/dist/server/modules/sessions/services/activity-tracker.service.d.ts +0 -17
  985. package/dist/server/modules/sessions/services/activity-tracker.service.js +0 -121
  986. package/dist/server/modules/sessions/services/activity-tracker.service.js.map +0 -1
  987. package/dist/server/modules/sessions/utils/template-renderer.d.ts +0 -33
  988. package/dist/server/modules/sessions/utils/template-renderer.js +0 -44
  989. package/dist/server/modules/sessions/utils/template-renderer.js.map +0 -1
  990. package/dist/server/modules/terminal/services/confirmed-delivery.helper.d.ts +0 -17
  991. package/dist/server/modules/terminal/services/confirmed-delivery.helper.js +0 -65
  992. package/dist/server/modules/terminal/services/confirmed-delivery.helper.js.map +0 -1
  993. package/dist/server/modules/terminal/services/terminal-send-coordinator.service.d.ts +0 -5
  994. package/dist/server/modules/terminal/services/terminal-send-coordinator.service.js +0 -36
  995. package/dist/server/modules/terminal/services/terminal-send-coordinator.service.js.map +0 -1
  996. package/dist/server/modules/terminal/services/tmux.service.d.ts +0 -78
  997. package/dist/server/modules/terminal/services/tmux.service.js +0 -548
  998. package/dist/server/modules/terminal/services/tmux.service.js.map +0 -1
  999. package/dist/server/templates/5-agents-dev.json +0 -1084
  1000. package/dist/server/ui/assets/ReviewsPage-DVBA6KIu.js +0 -6
  1001. package/dist/server/ui/assets/index-D6-SAeCU.css +0 -32
  1002. package/dist/server/ui/assets/index-DylwMbnX.js +0 -1032
  1003. package/dist/templates/5-agents-dev.json +0 -1084
@@ -16,536 +16,483 @@ exports.TerminalGateway = void 0;
16
16
  const websockets_1 = require("@nestjs/websockets");
17
17
  const common_1 = require("@nestjs/common");
18
18
  const event_emitter_1 = require("@nestjs/event-emitter");
19
- const core_1 = require("@nestjs/core");
20
19
  const socket_io_1 = require("socket.io");
21
20
  const logger_1 = require("../../../common/logging/logger");
22
21
  const terminal_stream_service_1 = require("../services/terminal-stream.service");
23
22
  const pty_service_1 = require("../services/pty.service");
24
- const tmux_service_1 = require("../services/tmux.service");
25
- const sessions_service_1 = require("../../sessions/services/sessions.service");
23
+ const terminal_io_service_1 = require("../services/terminal-io/terminal-io.service");
24
+ const terminal_session_registry_1 = require("../services/terminal-session/terminal-session-registry");
26
25
  const terminal_seed_service_1 = require("../services/terminal-seed.service");
27
26
  const control_keys_1 = require("../utils/control-keys");
28
27
  const settings_service_1 = require("../../settings/services/settings.service");
29
28
  const ws_envelope_dto_1 = require("../dtos/ws-envelope.dto");
29
+ const sessions_service_1 = require("../../sessions/services/sessions.service");
30
+ const normalize_line_endings_1 = require("../utils/normalize-line-endings");
31
+ const realtime_broadcast_service_1 = require("../../realtime/services/realtime-broadcast.service");
30
32
  const logger = (0, logger_1.createLogger)('TerminalGateway');
33
+ const THEME_HEX_RE = /^#[0-9a-fA-F]{6}$/;
34
+ const HEARTBEAT_INTERVAL = 30000;
35
+ const HEARTBEAT_TIMEOUT = 45000;
36
+ const INPUT_RATE_WINDOW_MS = 5000;
37
+ const INPUT_RATE_MSG_THRESHOLD = 500;
38
+ const INPUT_RATE_BYTES_THRESHOLD = 512000;
31
39
  let TerminalGateway = class TerminalGateway {
32
- constructor(streamService, settingsService, ptyService, moduleRef, seedService) {
40
+ constructor(streamService, settingsService, ptyService, seedService, terminalIO, registry, sessionsService, realtimeBroadcast) {
33
41
  this.streamService = streamService;
34
42
  this.settingsService = settingsService;
35
43
  this.ptyService = ptyService;
36
- this.moduleRef = moduleRef;
37
44
  this.seedService = seedService;
45
+ this.terminalIO = terminalIO;
46
+ this.registry = registry;
47
+ this.sessionsService = sessionsService;
48
+ this.realtimeBroadcast = realtimeBroadcast;
38
49
  this.clientSessions = new Map();
39
- this.authorityBySession = new Map();
40
- this.lastDimensions = new Map();
41
- this.HEARTBEAT_INTERVAL = 30000;
42
- this.HEARTBEAT_TIMEOUT = 45000;
50
+ this.frameListeners = new Map();
51
+ this.inputRateTracker = new Map();
52
+ this.themeCache = new Map();
43
53
  }
44
54
  afterInit() {
55
+ this.realtimeBroadcast.setServer(this.server);
45
56
  logger.info('WebSocket gateway initialized');
46
57
  this.startHeartbeat();
47
58
  }
48
59
  handleConnection(client) {
49
- logger.info({ clientId: client.id, transport: client.conn.transport.name }, 'Client connected to WebSocket gateway');
60
+ logger.info({ clientId: client.id, transport: client.conn?.transport?.name }, 'Client connected');
50
61
  this.clientSessions.set(client.id, {
51
62
  sessionId: '',
52
63
  lastHeartbeat: new Date(),
53
64
  subscriptions: new Set(),
54
65
  });
55
66
  this.sendHeartbeat(client);
56
- setTimeout(() => {
57
- const session = this.clientSessions.get(client.id);
58
- if (session && session.subscriptions.size === 0) {
59
- logger.warn({ clientId: client.id, connected: client.connected }, 'Client connected but has not subscribed to any topics after 5s');
60
- }
61
- }, 5000);
62
67
  }
63
68
  handleDisconnect(client) {
64
69
  logger.info({ clientId: client.id }, 'Client disconnected');
65
- for (const [sessionId, clientId] of this.authorityBySession.entries()) {
66
- if (clientId === client.id) {
67
- this.authorityBySession.delete(sessionId);
68
- const room = this.server.sockets.adapter.rooms.get(`terminal:${sessionId}`);
69
- const nextClientId = room ? Array.from(room)[0] : undefined;
70
- if (nextClientId) {
71
- this.setAuthority(sessionId, nextClientId);
72
- }
73
- else {
74
- const envelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'focus_changed', {
75
- sessionId,
76
- clientId: null,
77
- });
78
- this.server.to(`terminal:${sessionId}`).emit('message', envelope);
79
- }
70
+ const clientSession = this.clientSessions.get(client.id);
71
+ if (clientSession?.sessionId) {
72
+ const session = this.registry.get(clientSession.sessionId);
73
+ if (session) {
74
+ session.unsubscribe(client.id);
80
75
  }
81
76
  }
82
77
  this.clientSessions.delete(client.id);
83
78
  }
84
79
  async handleSubscribe(client, payload) {
85
80
  const { sessionId, lastSequence, rows, cols } = payload;
86
- const engine = 'chat';
87
- let sanitize = false;
88
- try {
89
- sanitize = this.ptyService.isSanitizerEnabled();
90
- }
91
- catch { }
92
- logger.info({ clientId: client.id, sessionId, lastSequence, rows, cols, engine, sanitize }, 'Client subscribing to session');
81
+ logger.info({ clientId: client.id, sessionId, lastSequence, rows, cols }, 'Client subscribing');
93
82
  const clientSession = this.clientSessions.get(client.id);
94
- if (!clientSession) {
83
+ if (!clientSession)
95
84
  return;
96
- }
97
85
  clientSession.sessionId = sessionId;
98
86
  clientSession.subscriptions.add(`session/${sessionId}`);
99
87
  client.join(`session:${sessionId}`);
100
88
  this.streamService.initializeBuffer(sessionId);
101
- await this.ensurePtyStreaming(sessionId);
102
- if (!this.authorityBySession.has(sessionId)) {
103
- this.setAuthority(sessionId, client.id);
104
- logger.info({ sessionId, clientId: client.id }, 'Granted authority to subscribing client');
89
+ const session = this.registry.get(sessionId);
90
+ if (!session) {
91
+ logger.warn({ sessionId }, 'No registry entry — using fallback seed path');
92
+ client.emit('message', (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'subscribed', {
93
+ sessionId,
94
+ currentSequence: 0,
95
+ }));
96
+ clientSession.subscriptions.add(`terminal/${sessionId}`);
97
+ client.join(`terminal:${sessionId}`);
98
+ if (typeof lastSequence !== 'number') {
99
+ const { maxBytes: seedMaxBytes } = this.seedService.resolveSeedingConfig();
100
+ this.seedService
101
+ .emitSeedToClient({
102
+ client,
103
+ sessionId,
104
+ maxBytes: seedMaxBytes,
105
+ cols,
106
+ rows,
107
+ })
108
+ .catch((error) => {
109
+ logger.error({ sessionId, clientId: client.id, error }, 'Fallback seed failed');
110
+ });
111
+ }
112
+ return;
105
113
  }
106
- else {
107
- const previousAuthority = this.authorityBySession.get(sessionId);
108
- this.setAuthority(sessionId, client.id);
109
- logger.info({ sessionId, clientId: client.id, previousAuthority }, 'Transferred authority to subscribing client');
114
+ const tmuxAlive = await this.terminalIO.sessionExists({ name: session.tmuxSessionName });
115
+ if (!tmuxAlive) {
116
+ await this.handleDeadTmuxSession(sessionId, client);
117
+ return;
110
118
  }
119
+ await this.ensurePtyStreaming(sessionId, session.tmuxSessionName, { cols, rows });
111
120
  const isFirstAttach = typeof lastSequence !== 'number';
112
- const hasResizeDimensions = typeof rows === 'number' && rows > 0 && typeof cols === 'number' && cols > 0;
113
- if (hasResizeDimensions) {
114
- const forceResize = isFirstAttach;
115
- this.tryResizePty(sessionId, cols, rows, forceResize);
121
+ if (typeof rows === 'number' && rows > 0 && typeof cols === 'number' && cols > 0) {
122
+ this.ptyService.resize(sessionId, cols, rows);
116
123
  if (isFirstAttach) {
117
124
  this.seedService.invalidateCache(sessionId);
118
- await new Promise((resolve) => setTimeout(resolve, 50));
119
- logger.debug({ sessionId, cols, rows }, 'Resized PTY and invalidated cache for first attach (cursor position via tmux)');
125
+ await new Promise((r) => setTimeout(r, 50));
120
126
  }
121
127
  }
122
- else if (typeof rows === 'number' || typeof cols === 'number') {
123
- logger.warn({ sessionId, rows, cols }, 'Ignoring resize request with partial dimensions');
124
- }
125
- const { maxBytes: seedMaxBytes } = this.seedService.resolveSeedingConfig();
126
- logger.info({ sessionId, seedMaxBytes, source: 'tmux-ansi' }, 'Resolved seeding config');
127
- const confirmEnvelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'subscribed', {
128
+ client.emit('message', (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'subscribed', {
128
129
  sessionId,
129
130
  currentSequence: this.streamService.getCurrentSequence(sessionId),
130
- });
131
- client.emit('message', confirmEnvelope);
131
+ }));
132
132
  clientSession.subscriptions.add(`terminal/${sessionId}`);
133
133
  client.join(`terminal:${sessionId}`);
134
- if (isFirstAttach) {
135
- this.seedService
136
- .emitSeedToClient({
137
- client,
138
- sessionId,
139
- maxBytes: seedMaxBytes,
140
- cols,
141
- rows,
142
- })
143
- .catch((error) => {
144
- logger.error({ sessionId, clientId: client.id, error }, 'Seed failed');
145
- });
146
- }
147
- else {
134
+ this.wireFrameListener(sessionId);
135
+ session.subscribe(client.id);
136
+ if (!isFirstAttach) {
148
137
  const bufferedFrames = this.streamService.getFramesSince(sessionId, lastSequence);
149
- if (bufferedFrames.length > 0) {
150
- logger.info({ clientId: client.id, sessionId, frameCount: bufferedFrames.length }, 'Replaying buffered frames');
151
- bufferedFrames.forEach((frame) => {
152
- client.emit('message', frame);
153
- });
138
+ for (const frame of bufferedFrames) {
139
+ client.emit('message', frame);
154
140
  }
155
141
  }
156
142
  }
157
143
  handleEventsSubscribe(client) {
158
- const clientSession = this.clientSessions.get(client.id);
159
- if (!clientSession) {
160
- logger.warn({ clientId: client.id }, 'Skipping events subscribe with no client session');
144
+ const cs = this.clientSessions.get(client.id);
145
+ if (!cs)
161
146
  return;
162
- }
163
- clientSession.subscriptions.add('events/logs');
164
- const confirmEnvelope = (0, ws_envelope_dto_1.createEnvelope)('events/logs', 'subscribed', { ok: true });
165
- client.emit('message', confirmEnvelope);
147
+ cs.subscriptions.add('events');
148
+ client.join('events');
149
+ logger.debug({ clientId: client.id }, 'Subscribed to events');
166
150
  }
167
151
  handleChatSubscribe(client, payload) {
168
- const { threadId } = payload;
169
- logger.info({ clientId: client.id, threadId }, 'Client subscribing to chat thread');
170
- const clientSession = this.clientSessions.get(client.id);
171
- if (!clientSession) {
152
+ const cs = this.clientSessions.get(client.id);
153
+ if (!cs)
172
154
  return;
173
- }
174
- clientSession.subscriptions.add(`chat/${threadId}`);
175
- client.join(`chat:${threadId}`);
176
- const confirmEnvelope = (0, ws_envelope_dto_1.createEnvelope)(`chat/${threadId}`, 'subscribed', { threadId });
177
- client.emit('message', confirmEnvelope);
155
+ const topic = `chat/${payload.threadId}`;
156
+ cs.subscriptions.add(topic);
157
+ client.join(`chat:${payload.threadId}`);
158
+ logger.debug({ clientId: client.id, threadId: payload.threadId }, 'Joined chat room');
178
159
  }
179
160
  handleChatUnsubscribe(client, payload) {
180
- const { threadId } = payload;
181
- logger.info({ clientId: client.id, threadId }, 'Client unsubscribing from chat thread');
182
- const clientSession = this.clientSessions.get(client.id);
183
- if (clientSession) {
184
- clientSession.subscriptions.delete(`chat/${threadId}`);
185
- }
186
- client.leave(`chat:${threadId}`);
161
+ const cs = this.clientSessions.get(client.id);
162
+ if (!cs)
163
+ return;
164
+ cs.subscriptions.delete(`chat/${payload.threadId}`);
165
+ client.leave(`chat:${payload.threadId}`);
187
166
  }
188
167
  handleUnsubscribe(client, payload) {
189
168
  const { sessionId } = payload;
190
- logger.info({ clientId: client.id, sessionId }, 'Client unsubscribing from session');
191
- const clientSession = this.clientSessions.get(client.id);
192
- if (clientSession) {
193
- clientSession.subscriptions.delete(`terminal/${sessionId}`);
194
- clientSession.subscriptions.delete(`session/${sessionId}`);
195
- }
169
+ const cs = this.clientSessions.get(client.id);
170
+ if (!cs)
171
+ return;
172
+ cs.subscriptions.delete(`terminal/${sessionId}`);
173
+ cs.subscriptions.delete(`session/${sessionId}`);
196
174
  client.leave(`terminal:${sessionId}`);
197
175
  client.leave(`session:${sessionId}`);
176
+ const session = this.registry.get(sessionId);
177
+ if (session)
178
+ session.unsubscribe(client.id);
198
179
  }
199
- handleFocus(client, payload) {
200
- const { sessionId } = payload;
201
- const clientSession = this.clientSessions.get(client.id);
202
- if (!clientSession) {
203
- logger.warn({ clientId: client.id }, 'Ignoring focus with no client session');
180
+ async handleTheme(client, payload) {
181
+ const cs = this.clientSessions.get(client.id);
182
+ if (!cs)
204
183
  return;
184
+ const { foregroundHex, backgroundHex } = payload ?? {};
185
+ if (!THEME_HEX_RE.test(foregroundHex) || !THEME_HEX_RE.test(backgroundHex)) {
186
+ throw new websockets_1.WsException('Invalid terminal:theme payload: foregroundHex and backgroundHex must be strict #RRGGBB hex');
187
+ }
188
+ const subscribedSessionIds = [...cs.subscriptions]
189
+ .filter((s) => s.startsWith('terminal/'))
190
+ .map((s) => s.slice('terminal/'.length));
191
+ for (const sessionId of subscribedSessionIds) {
192
+ const session = this.registry.get(sessionId);
193
+ if (!session)
194
+ continue;
195
+ const cached = this.themeCache.get(sessionId);
196
+ if (cached?.foregroundHex === foregroundHex && cached?.backgroundHex === backgroundHex) {
197
+ logger.debug({ sessionId }, 'terminal_theme_skipped_unchanged');
198
+ continue;
199
+ }
200
+ try {
201
+ await this.terminalIO.applyWindowTheme({ name: session.tmuxSessionName }, foregroundHex, backgroundHex);
202
+ this.themeCache.set(sessionId, { foregroundHex, backgroundHex });
203
+ logger.debug({ sessionId }, 'terminal_theme_applied');
204
+ void this.ptyService.triggerRedraw(sessionId);
205
+ }
206
+ catch (error) {
207
+ logger.debug({ sessionId, error: String(error) }, 'terminal_theme_apply_failed');
208
+ }
205
209
  }
206
- if (!clientSession.subscriptions.has(`terminal/${sessionId}`)) {
207
- logger.warn({ clientId: client.id, sessionId }, 'Client not subscribed to session; focus ignored');
210
+ }
211
+ handleFocus(client, payload) {
212
+ const session = this.registry.get(payload.sessionId);
213
+ if (!session)
214
+ return;
215
+ if (!session.hasSubscriber(client.id)) {
216
+ logger.warn({ sessionId: payload.sessionId, clientId: client.id, reason: 'not_subscriber' }, 'Focus rejected');
208
217
  return;
209
218
  }
210
- this.setAuthority(sessionId, client.id);
219
+ session.claimAuthority(client.id);
211
220
  }
212
- handleResize(client, payload) {
221
+ async handleResize(client, payload) {
213
222
  const { sessionId, rows, cols } = payload;
214
- const currentAuthority = this.authorityBySession.get(sessionId);
215
- if (currentAuthority && currentAuthority !== client.id) {
216
- logger.debug({ clientId: client.id, sessionId, rows, cols, authority: currentAuthority }, 'Ignoring resize from non-authoritative client');
223
+ const session = this.registry.get(sessionId);
224
+ if (!session)
225
+ return;
226
+ const tmuxAlive = await this.terminalIO.sessionExists({ name: session.tmuxSessionName });
227
+ if (!tmuxAlive) {
228
+ await this.handleDeadTmuxSession(sessionId, client);
217
229
  return;
218
230
  }
219
- const didResize = this.tryResizePty(sessionId, cols, rows);
220
- if (didResize) {
221
- const envelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'resize', { rows, cols });
222
- this.server.to(`terminal:${sessionId}`).emit('message', envelope);
231
+ const result = session.resize(client.id, { cols, rows });
232
+ if (result.applied) {
233
+ this.ptyService.resize(sessionId, cols, rows);
234
+ this.server
235
+ .to(`terminal:${sessionId}`)
236
+ .emit('message', (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'resize', { rows, cols }));
223
237
  }
224
238
  }
225
239
  async handleInput(client, payload) {
226
240
  const { sessionId, data, ttyMode = false } = payload;
227
- logger.debug({ clientId: client.id, sessionId, dataLength: data.length }, 'Terminal input');
228
- const sessionsService = this.moduleRef.get(sessions_service_1.SessionsService, { strict: false });
229
- const tmuxService = this.moduleRef.get(tmux_service_1.TmuxService, { strict: false });
230
- if (!sessionsService) {
231
- logger.error({ sessionId }, 'SessionsService not available');
232
- throw new Error('SessionsService not available');
241
+ const session = this.registry.get(sessionId);
242
+ if (!session) {
243
+ logger.warn({ sessionId }, 'Input for unknown session');
244
+ return;
233
245
  }
234
- if (!tmuxService) {
235
- logger.error({ sessionId }, 'TmuxService not available');
236
- throw new Error('TmuxService not available');
246
+ if (!session.hasSubscriber(client.id)) {
247
+ logger.warn({ sessionId, clientId: client.id, reason: 'not_subscriber' }, 'Input rejected');
248
+ return;
237
249
  }
238
- const session = sessionsService.getSession(sessionId);
239
- if (!session) {
240
- logger.error({ sessionId }, 'Session not found');
241
- throw new Error(`Session not found: ${sessionId}`);
250
+ if (session.getAuthority() !== client.id) {
251
+ logger.warn({ sessionId, clientId: client.id, reason: 'not_authority' }, 'Input rejected');
252
+ return;
242
253
  }
243
- if (!session.tmuxSessionId) {
244
- logger.error({ sessionId }, 'Session has no tmux session ID');
245
- throw new Error(`Session has no tmux session ID: ${sessionId}`);
254
+ this.trackInputRate(client.id, sessionId, data.length);
255
+ const tmuxAlive = await this.terminalIO.sessionExists({ name: session.tmuxSessionName });
256
+ if (!tmuxAlive) {
257
+ await this.handleDeadTmuxSession(sessionId, client);
258
+ return;
246
259
  }
260
+ session.signalInput();
261
+ const target = { name: session.tmuxSessionName };
247
262
  if ((0, control_keys_1.isControlKey)(data)) {
248
- const keys = (0, control_keys_1.toTmuxKeys)(data);
249
- await tmuxService.sendKeys(session.tmuxSessionId, keys);
250
- logger.debug({ sessionId, tmuxSessionId: session.tmuxSessionId, keys }, 'Sent raw keys');
263
+ await this.terminalIO.sendControl(target, (0, control_keys_1.toTmuxKeys)(data));
251
264
  }
252
265
  else if (ttyMode) {
253
- await tmuxService.sendKeys(session.tmuxSessionId, ['-l', data]);
254
- logger.debug({ sessionId, tmuxSessionId: session.tmuxSessionId, dataLength: data.length }, 'Sent TTY literal keys');
266
+ await this.terminalIO.sendControl(target, ['-l', '--', data]);
255
267
  }
256
268
  else {
257
269
  try {
258
- await tmuxService.pasteAndSubmit(session.tmuxSessionId, data, { bracketed: true });
259
- logger.debug({ sessionId, tmuxSessionId: session.tmuxSessionId }, 'Text pasted and submitted');
270
+ await this.terminalIO.deliverImmediate(target, data, { bracketed: true });
260
271
  }
261
272
  catch (error) {
262
- logger.warn({ sessionId, tmuxSessionId: session.tmuxSessionId, error: String(error) }, 'pasteAndSubmit failed in form-mode input');
273
+ logger.warn({ sessionId, error: String(error) }, 'deliverImmediate failed');
263
274
  }
264
275
  }
265
276
  }
266
- isControlCharacter(data) {
267
- return (0, control_keys_1.isControlKey)(data);
268
- }
269
- convertToTmuxKeys(data) {
270
- const mapped = (0, control_keys_1.toTmuxKeys)(data);
271
- if (mapped.length === 1 && mapped[0] === data) {
272
- logger.warn({ data }, 'Unknown control character, sending as literal');
273
- }
274
- return mapped;
275
- }
276
277
  async handleRequestFullHistory(client, payload) {
277
278
  const { sessionId } = payload;
278
- let clientMaxLines = 10000;
279
+ let maxLines = 10000;
279
280
  if (payload.maxLines !== undefined && payload.maxLines !== null) {
280
281
  const parsed = Math.floor(Number(payload.maxLines));
281
282
  if (!Number.isFinite(parsed) || parsed < 1) {
282
- logger.warn({ clientId: client.id, sessionId, rawMaxLines: payload.maxLines }, 'Invalid maxLines value, must be positive integer');
283
283
  throw new websockets_1.WsException('maxLines must be a positive integer');
284
284
  }
285
- clientMaxLines = parsed;
285
+ maxLines = parsed;
286
286
  }
287
- const effectiveScrollback = this.settingsService.getScrollbackLines();
288
- const maxLines = Math.min(clientMaxLines, effectiveScrollback);
289
- if (clientMaxLines > effectiveScrollback) {
290
- logger.warn({
291
- clientId: client.id,
292
- sessionId,
293
- clientMaxLines,
294
- effectiveScrollback,
295
- clampedTo: maxLines,
296
- }, 'Client requested more lines than scrollback setting allows, clamping');
297
- }
298
- logger.debug({ clientId: client.id, sessionId, maxLines }, 'Requesting full history');
299
- const clientSession = this.clientSessions.get(client.id);
300
- if (!clientSession?.subscriptions.has(`terminal/${sessionId}`)) {
301
- logger.warn({ sessionId, clientId: client.id }, 'History request from unsubscribed client');
287
+ maxLines = Math.min(maxLines, this.settingsService.getScrollbackLines());
288
+ const cs = this.clientSessions.get(client.id);
289
+ if (!cs?.subscriptions.has(`terminal/${sessionId}`))
290
+ return;
291
+ const session = this.registry.get(sessionId);
292
+ if (!session)
302
293
  return;
303
- }
304
294
  const capturedSequence = this.streamService.getCurrentSequence(sessionId);
305
- logger.debug({ sessionId, capturedSequence }, 'Captured sequence for history deduplication');
306
- let history = '';
307
- try {
308
- const sessionsService = this.moduleRef.get(sessions_service_1.SessionsService, { strict: false });
309
- const tmuxService = this.moduleRef.get(tmux_service_1.TmuxService, { strict: false });
310
- if (sessionsService && tmuxService) {
311
- const session = sessionsService.getSession(sessionId);
312
- if (session?.tmuxSessionId) {
313
- logger.info({ sessionId, tmuxSessionId: session.tmuxSessionId, maxLines }, 'Capturing full tmux history');
314
- history = await tmuxService.capturePane(session.tmuxSessionId, maxLines, true);
315
- if (history && history.length > 0) {
316
- logger.info({ sessionId, historyBytes: history.length }, 'Captured full tmux history successfully');
317
- }
318
- }
319
- }
320
- }
321
- catch (error) {
322
- logger.warn({ sessionId, error }, 'Failed to capture tmux history');
323
- }
324
- if (!history || history.length === 0) {
325
- logger.info({ sessionId }, 'No tmux history available, returning empty history');
326
- }
327
- if (history.endsWith('\n')) {
295
+ const target = { name: session.tmuxSessionName };
296
+ const captureResult = await this.terminalIO.captureHistory(target, maxLines, true);
297
+ let history = captureResult.ok ? captureResult.output : '';
298
+ if (history.endsWith('\n'))
328
299
  history = history.slice(0, -1);
329
- }
330
300
  const { maxBytes } = this.seedService.resolveSeedingConfig();
331
301
  let hasHistory = false;
332
- const historyByteLength = Buffer.byteLength(history, 'utf-8');
333
- if (historyByteLength > maxBytes) {
302
+ if (Buffer.byteLength(history, 'utf-8') > maxBytes) {
334
303
  const { truncated, wasTruncated } = this.seedService.truncateToMaxBytes(history, maxBytes);
335
304
  history = truncated;
336
305
  hasHistory = wasTruncated;
337
- if (wasTruncated) {
338
- logger.info({ sessionId, originalBytes: historyByteLength, maxBytes, truncatedBytes: history.length }, 'Truncated full history response to fit maxBytes limit');
339
- }
340
306
  }
341
- let cursorX;
342
- let cursorY;
343
- try {
344
- const sessionsService = this.moduleRef.get(sessions_service_1.SessionsService, { strict: false });
345
- const tmuxService = this.moduleRef.get(tmux_service_1.TmuxService, { strict: false });
346
- if (sessionsService && tmuxService) {
347
- const session = sessionsService.getSession(sessionId);
348
- if (session?.tmuxSessionId) {
349
- const cursorPos = await tmuxService.getCursorPosition(session.tmuxSessionId);
350
- if (cursorPos) {
351
- cursorX = cursorPos.x;
352
- cursorY = cursorPos.y;
353
- logger.debug({ sessionId, cursorX, cursorY }, 'Captured cursor position for history');
354
- }
355
- }
356
- }
357
- }
358
- catch (error) {
359
- logger.warn({ sessionId, error }, 'Failed to get cursor position for history');
360
- }
361
- const envelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'full_history', {
307
+ history = (0, normalize_line_endings_1.normalizeLineEndings)(history);
308
+ const cursorPos = await this.terminalIO.getCursorPosition(target);
309
+ client.emit('message', (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'full_history', {
362
310
  history,
363
- cursorX,
364
- cursorY,
365
- hasHistory,
366
- capturedSequence,
367
- });
368
- client.emit('message', envelope);
369
- logger.debug({
370
- clientId: client.id,
371
- sessionId,
372
- historyBytes: history.length,
373
- cursorX,
374
- cursorY,
311
+ cursorX: cursorPos?.x,
312
+ cursorY: cursorPos?.y,
375
313
  hasHistory,
376
314
  capturedSequence,
377
- }, 'Sent full ANSI history with cursor position and sequence');
315
+ }));
378
316
  }
379
317
  handlePong(client) {
380
- const clientSession = this.clientSessions.get(client.id);
381
- if (clientSession) {
382
- clientSession.lastHeartbeat = new Date();
383
- }
318
+ const cs = this.clientSessions.get(client.id);
319
+ if (cs)
320
+ cs.lastHeartbeat = new Date();
384
321
  }
385
322
  broadcastTerminalData(sessionId, data) {
323
+ this.registry.get(sessionId)?.pushFrame(data);
386
324
  const envelope = this.streamService.addFrame(sessionId, data);
387
325
  this.server.to(`terminal:${sessionId}`).emit('message', envelope);
388
326
  }
389
- broadcastEvent(topic, type, payload) {
390
- const envelope = (0, ws_envelope_dto_1.createEnvelope)(topic, type, payload);
391
- logger.debug({ topic, type }, 'Broadcasting event');
392
- this.server.emit('message', envelope);
393
- }
394
327
  handleSessionCrashed(payload) {
395
- const { sessionId, sessionName } = payload;
396
- logger.info({ sessionId, sessionName }, 'Session crashed - broadcasting to clients');
397
- const eventPayload = {
398
- sessionId,
328
+ this.unwireFrameListener(payload.sessionId);
329
+ const ep = {
330
+ sessionId: payload.sessionId,
399
331
  status: 'crashed',
400
332
  message: 'Session unexpectedly terminated',
401
333
  };
402
- const envelope = (0, ws_envelope_dto_1.createEnvelope)(`session/${sessionId}`, 'state_change', eventPayload);
403
- this.server.to(`session:${sessionId}`).emit('message', envelope);
404
- setTimeout(() => {
405
- this.streamService.clearBuffer(sessionId);
406
- }, 60000);
334
+ this.server
335
+ .to(`session:${payload.sessionId}`)
336
+ .emit('message', (0, ws_envelope_dto_1.createEnvelope)(`session/${payload.sessionId}`, 'state_change', ep));
337
+ setTimeout(() => this.streamService.clearBuffer(payload.sessionId), 60000);
338
+ this.themeCache.delete(payload.sessionId);
407
339
  }
408
340
  handleSessionStarted(payload) {
409
- const { sessionId, epicId, agentId } = payload;
410
- logger.info({ sessionId, epicId, agentId }, 'Session started - broadcasting to clients');
411
- const eventPayload = {
412
- sessionId,
341
+ const ep = {
342
+ sessionId: payload.sessionId,
413
343
  status: 'started',
414
344
  message: 'Session started successfully',
415
345
  };
416
- const envelope = (0, ws_envelope_dto_1.createEnvelope)('sessions', 'started', eventPayload);
417
- this.server.emit('message', envelope);
346
+ this.server.emit('message', (0, ws_envelope_dto_1.createEnvelope)('sessions', 'started', ep));
418
347
  }
419
348
  handleSessionRestored(payload) {
420
- const { sessionId, epicId, agentId } = payload;
421
- logger.info({ sessionId, epicId, agentId }, 'Session restored - broadcasting to clients');
422
- const eventPayload = {
423
- sessionId,
349
+ if (!this.registry.get(payload.sessionId) && payload.tmuxSessionName) {
350
+ try {
351
+ this.registry.create(payload.sessionId, payload.tmuxSessionName, {
352
+ normalizeCapturedLineEndings: true,
353
+ });
354
+ this.registry.bind(payload.sessionId, this.terminalIO);
355
+ }
356
+ catch {
357
+ }
358
+ }
359
+ const ep = {
360
+ sessionId: payload.sessionId,
424
361
  status: 'started',
425
362
  message: 'Session restored successfully',
426
363
  };
427
- const envelope = (0, ws_envelope_dto_1.createEnvelope)('sessions', 'started', eventPayload);
428
- this.server.emit('message', envelope);
364
+ this.server.emit('message', (0, ws_envelope_dto_1.createEnvelope)('sessions', 'started', ep));
429
365
  }
430
366
  handleSessionStopped(payload) {
431
- const { sessionId } = payload;
432
- logger.info({ sessionId }, 'Session stopped - broadcasting to clients');
433
- const eventPayload = {
434
- sessionId,
367
+ this.unwireFrameListener(payload.sessionId);
368
+ const ep = {
369
+ sessionId: payload.sessionId,
435
370
  status: 'ended',
436
371
  message: 'Session terminated',
437
372
  };
438
- const envelope = (0, ws_envelope_dto_1.createEnvelope)('sessions', 'stopped', eventPayload);
439
- this.server.emit('message', envelope);
440
- setTimeout(() => {
441
- this.streamService.clearBuffer(sessionId);
442
- }, 60000);
443
- this.seedService.invalidateCache(sessionId);
373
+ this.server.emit('message', (0, ws_envelope_dto_1.createEnvelope)('sessions', 'stopped', ep));
374
+ setTimeout(() => this.streamService.clearBuffer(payload.sessionId), 60000);
375
+ this.seedService.invalidateCache(payload.sessionId);
376
+ this.themeCache.delete(payload.sessionId);
444
377
  }
445
378
  startHeartbeat() {
446
379
  this.heartbeatInterval = setInterval(() => {
447
380
  const now = new Date();
448
- this.clientSessions.forEach((session, clientId) => {
449
- const timeSinceLastHeartbeat = now.getTime() - session.lastHeartbeat.getTime();
450
- if (timeSinceLastHeartbeat > this.HEARTBEAT_TIMEOUT) {
451
- logger.warn({ clientId }, 'Client heartbeat timeout - disconnecting');
452
- const client = this.server.sockets.sockets.get(clientId);
453
- if (client) {
454
- client.disconnect(true);
455
- }
381
+ this.clientSessions.forEach((cs, clientId) => {
382
+ if (now.getTime() - cs.lastHeartbeat.getTime() > HEARTBEAT_TIMEOUT) {
383
+ logger.warn({ clientId }, 'Client heartbeat timeout');
384
+ this.server.sockets.sockets.get(clientId)?.disconnect(true);
456
385
  this.clientSessions.delete(clientId);
457
386
  }
458
387
  else {
459
- const client = this.server.sockets.sockets.get(clientId);
460
- if (client) {
461
- this.sendHeartbeat(client);
462
- }
388
+ const sock = this.server.sockets.sockets.get(clientId);
389
+ if (sock)
390
+ this.sendHeartbeat(sock);
463
391
  }
464
392
  });
465
- }, this.HEARTBEAT_INTERVAL);
466
- logger.info({ intervalMs: this.HEARTBEAT_INTERVAL }, 'Heartbeat started');
393
+ }, HEARTBEAT_INTERVAL);
467
394
  }
468
395
  sendHeartbeat(client) {
469
- const payload = {
470
- timestamp: new Date().toISOString(),
396
+ const p = { timestamp: new Date().toISOString() };
397
+ client.emit('message', (0, ws_envelope_dto_1.createEnvelope)('system', 'ping', p));
398
+ }
399
+ wireFrameListener(sessionId) {
400
+ const session = this.registry.get(sessionId);
401
+ if (!session)
402
+ return;
403
+ const existing = this.frameListeners.get(sessionId);
404
+ if (existing?.session === session)
405
+ return;
406
+ if (existing) {
407
+ existing.session.stream.off('frame', existing.listener);
408
+ logger.info({ sessionId }, 'Rewiring stale frame listener for restored session');
409
+ this.frameListeners.delete(sessionId);
410
+ }
411
+ const FORWARDED_FRAME_TYPES = new Set([
412
+ 'focus_changed',
413
+ 'seed_ansi',
414
+ 'resize_jiggle',
415
+ 'full_history',
416
+ ]);
417
+ const listener = (frame) => {
418
+ if (FORWARDED_FRAME_TYPES.has(frame.type)) {
419
+ this.server
420
+ .to(`terminal:${sessionId}`)
421
+ .emit('message', (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, frame.type, frame.payload));
422
+ }
471
423
  };
472
- const envelope = (0, ws_envelope_dto_1.createEnvelope)('system', 'ping', payload);
473
- client.emit('message', envelope);
424
+ session.stream.on('frame', listener);
425
+ this.frameListeners.set(sessionId, { session, listener });
474
426
  }
475
- setAuthority(sessionId, clientId) {
476
- const current = this.authorityBySession.get(sessionId);
477
- if (current === clientId)
427
+ unwireFrameListener(sessionId) {
428
+ const existing = this.frameListeners.get(sessionId);
429
+ if (!existing)
478
430
  return;
479
- this.authorityBySession.set(sessionId, clientId);
480
- const focusEnvelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'focus_changed', {
481
- sessionId,
482
- clientId,
483
- });
484
- this.server.to(`terminal:${sessionId}`).emit('message', focusEnvelope);
431
+ existing.session.stream.off('frame', existing.listener);
432
+ this.frameListeners.delete(sessionId);
485
433
  }
486
- tryResizePty(sessionId, cols, rows, force = false) {
487
- let actualPtyDims = null;
488
- try {
489
- actualPtyDims = this.ptyService.getDimensions(sessionId);
490
- }
491
- catch (error) {
492
- logger.warn({ sessionId, error }, 'Failed to get PTY dimensions, will resize anyway');
493
- }
494
- if (!force && actualPtyDims && actualPtyDims.cols === cols && actualPtyDims.rows === rows) {
495
- this.lastDimensions.set(sessionId, { cols, rows });
496
- return false;
497
- }
498
- this.lastDimensions.set(sessionId, { cols, rows });
499
- logger.debug({ sessionId, cols, rows, forced: force }, 'Resizing PTY');
500
- this.ptyService.resize(sessionId, cols, rows);
501
- return true;
434
+ async handleDeadTmuxSession(sessionId, client) {
435
+ logger.warn({ sessionId }, 'Dead tmux detected — marking session failed');
436
+ this.sessionsService.markSessionFailed(sessionId, 'tmux session no longer exists');
437
+ this.ptyService.stopStreaming(sessionId);
438
+ this.unwireFrameListener(sessionId);
439
+ this.registry.dispose(sessionId);
440
+ this.themeCache.delete(sessionId);
441
+ const ep = {
442
+ sessionId,
443
+ status: 'crashed',
444
+ message: 'Terminal session is no longer available',
445
+ };
446
+ const envelope = (0, ws_envelope_dto_1.createEnvelope)(`session/${sessionId}`, 'state_change', ep);
447
+ client.emit('message', envelope);
448
+ this.server.to(`session:${sessionId}`).emit('message', envelope);
502
449
  }
503
- async ensurePtyStreaming(sessionId) {
504
- if (this.ptyService.isStreaming(sessionId)) {
505
- logger.debug({ sessionId }, 'PTY already streaming');
450
+ async ensurePtyStreaming(sessionId, tmuxSessionName, options) {
451
+ if (this.ptyService.isStreaming(sessionId))
506
452
  return;
507
- }
508
- logger.info({ sessionId }, 'PTY not streaming, checking if session is still active');
509
- try {
510
- const sessionsService = this.moduleRef.get(sessions_service_1.SessionsService, { strict: false });
511
- if (!sessionsService) {
512
- logger.error({ sessionId }, 'SessionsService not available');
513
- return;
514
- }
515
- const session = sessionsService.getSession(sessionId);
516
- if (!session) {
517
- logger.warn({ sessionId }, 'Session not found in database');
518
- return;
519
- }
520
- if (session.status !== 'running') {
521
- logger.warn({ sessionId, status: session.status }, 'Session is not running');
522
- return;
523
- }
524
- if (!session.tmuxSessionId) {
525
- logger.warn({ sessionId }, 'Session has no tmux session ID');
526
- return;
527
- }
528
- const tmuxService = this.moduleRef.get(tmux_service_1.TmuxService, { strict: false });
529
- if (!tmuxService) {
530
- logger.error({ sessionId }, 'TmuxService not available');
531
- return;
532
- }
533
- const tmuxExists = await tmuxService.hasSession(session.tmuxSessionId);
534
- if (!tmuxExists) {
535
- logger.warn({ sessionId, tmuxSessionId: session.tmuxSessionId }, 'Tmux session no longer exists');
536
- return;
453
+ const alive = await this.terminalIO.sessionExists({ name: tmuxSessionName });
454
+ if (!alive)
455
+ return;
456
+ await this.ptyService.startStreaming(sessionId, tmuxSessionName, options);
457
+ }
458
+ trackInputRate(clientId, sessionId, dataBytes) {
459
+ const key = `${clientId}:${sessionId}`;
460
+ const now = Date.now();
461
+ let entry = this.inputRateTracker.get(key);
462
+ if (!entry) {
463
+ entry = { messages: 0, bytes: 0, windowStart: now, warned: false };
464
+ this.inputRateTracker.set(key, entry);
465
+ }
466
+ const elapsed = now - entry.windowStart;
467
+ if (elapsed >= INPUT_RATE_WINDOW_MS) {
468
+ if (!entry.warned &&
469
+ (entry.messages > INPUT_RATE_MSG_THRESHOLD || entry.bytes > INPUT_RATE_BYTES_THRESHOLD)) {
470
+ const windowSec = elapsed / 1000;
471
+ logger.warn({
472
+ clientId,
473
+ sessionId,
474
+ msgRate: Math.round(entry.messages / windowSec),
475
+ byteRate: Math.round(entry.bytes / windowSec),
476
+ messages: entry.messages,
477
+ bytes: entry.bytes,
478
+ windowMs: elapsed,
479
+ }, 'Input rate threshold exceeded');
537
480
  }
538
- logger.info({ sessionId, tmuxSessionId: session.tmuxSessionId }, 'Restarting PTY streaming for active session');
539
- await this.ptyService.startStreaming(sessionId, session.tmuxSessionId);
540
- }
541
- catch (error) {
542
- logger.error({ sessionId, error }, 'Error ensuring PTY streaming');
481
+ entry.messages = 0;
482
+ entry.bytes = 0;
483
+ entry.windowStart = now;
484
+ entry.warned = false;
543
485
  }
486
+ entry.messages++;
487
+ entry.bytes += dataBytes;
544
488
  }
545
489
  onModuleDestroy() {
546
- if (this.heartbeatInterval) {
490
+ if (this.heartbeatInterval)
547
491
  clearInterval(this.heartbeatInterval);
492
+ for (const sessionId of [...this.frameListeners.keys()]) {
493
+ this.unwireFrameListener(sessionId);
548
494
  }
495
+ this.themeCache.clear();
549
496
  }
550
497
  };
551
498
  exports.TerminalGateway = TerminalGateway;
@@ -553,18 +500,6 @@ __decorate([
553
500
  (0, websockets_1.WebSocketServer)(),
554
501
  __metadata("design:type", socket_io_1.Server)
555
502
  ], TerminalGateway.prototype, "server", void 0);
556
- __decorate([
557
- __param(0, (0, websockets_1.ConnectedSocket)()),
558
- __metadata("design:type", Function),
559
- __metadata("design:paramtypes", [socket_io_1.Socket]),
560
- __metadata("design:returntype", void 0)
561
- ], TerminalGateway.prototype, "handleConnection", null);
562
- __decorate([
563
- __param(0, (0, websockets_1.ConnectedSocket)()),
564
- __metadata("design:type", Function),
565
- __metadata("design:paramtypes", [socket_io_1.Socket]),
566
- __metadata("design:returntype", void 0)
567
- ], TerminalGateway.prototype, "handleDisconnect", null);
568
503
  __decorate([
569
504
  (0, websockets_1.SubscribeMessage)('terminal:subscribe'),
570
505
  __param(0, (0, websockets_1.ConnectedSocket)()),
@@ -604,6 +539,14 @@ __decorate([
604
539
  __metadata("design:paramtypes", [socket_io_1.Socket, Object]),
605
540
  __metadata("design:returntype", void 0)
606
541
  ], TerminalGateway.prototype, "handleUnsubscribe", null);
542
+ __decorate([
543
+ (0, websockets_1.SubscribeMessage)('terminal:theme'),
544
+ __param(0, (0, websockets_1.ConnectedSocket)()),
545
+ __param(1, (0, websockets_1.MessageBody)()),
546
+ __metadata("design:type", Function),
547
+ __metadata("design:paramtypes", [socket_io_1.Socket, Object]),
548
+ __metadata("design:returntype", Promise)
549
+ ], TerminalGateway.prototype, "handleTheme", null);
607
550
  __decorate([
608
551
  (0, websockets_1.SubscribeMessage)('terminal:focus'),
609
552
  __param(0, (0, websockets_1.ConnectedSocket)()),
@@ -618,7 +561,7 @@ __decorate([
618
561
  __param(1, (0, websockets_1.MessageBody)()),
619
562
  __metadata("design:type", Function),
620
563
  __metadata("design:paramtypes", [socket_io_1.Socket, Object]),
621
- __metadata("design:returntype", void 0)
564
+ __metadata("design:returntype", Promise)
622
565
  ], TerminalGateway.prototype, "handleResize", null);
623
566
  __decorate([
624
567
  (0, websockets_1.SubscribeMessage)('terminal:input'),
@@ -668,16 +611,18 @@ __decorate([
668
611
  __metadata("design:returntype", void 0)
669
612
  ], TerminalGateway.prototype, "handleSessionStopped", null);
670
613
  exports.TerminalGateway = TerminalGateway = __decorate([
671
- (0, websockets_1.WebSocketGateway)({
672
- cors: false,
673
- transports: ['websocket'],
674
- }),
614
+ (0, websockets_1.WebSocketGateway)({ cors: false, transports: ['websocket'] }),
675
615
  (0, common_1.Injectable)(),
676
616
  __param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => pty_service_1.PtyService))),
617
+ __param(4, (0, common_1.Inject)((0, common_1.forwardRef)(() => terminal_io_service_1.TerminalIOService))),
618
+ __param(6, (0, common_1.Inject)((0, common_1.forwardRef)(() => sessions_service_1.SessionsService))),
677
619
  __metadata("design:paramtypes", [terminal_stream_service_1.TerminalStreamService,
678
620
  settings_service_1.SettingsService,
679
621
  pty_service_1.PtyService,
680
- core_1.ModuleRef,
681
- terminal_seed_service_1.TerminalSeedService])
622
+ terminal_seed_service_1.TerminalSeedService,
623
+ terminal_io_service_1.TerminalIOService,
624
+ terminal_session_registry_1.TerminalSessionRegistry,
625
+ sessions_service_1.SessionsService,
626
+ realtime_broadcast_service_1.RealtimeBroadcastService])
682
627
  ], TerminalGateway);
683
628
  //# sourceMappingURL=terminal.gateway.js.map