crewly 1.20.194 → 1.20.196

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 (791) hide show
  1. package/config/constants.ts +68 -0
  2. package/config/hooks/agent-status/report.sh +31 -12
  3. package/config/hooks/subagent-guard/subagent.sh +25 -1
  4. package/config/roles/auditor/prompt.md +2 -2
  5. package/config/roles/orchestrator/fragments/communication.md +1 -1
  6. package/config/roles/orchestrator/fragments/lifecycle.md +1 -1
  7. package/config/roles/orchestrator/prompt.md +18 -508
  8. package/config/skills/_common/lib.sh +28 -5
  9. package/config/skills/_common/lib.test.sh +32 -1
  10. package/config/skills/agent/computer-use/SKILL.md +6 -0
  11. package/config/skills/agent/core/create-intent-tasks/execute.sh +2 -0
  12. package/config/skills/agent/core/decompose-intent/execute.sh +2 -0
  13. package/config/skills/agent/core/experiment-card/SKILL.md +38 -5
  14. package/config/skills/agent/core/experiment-card/execute.sh +40 -4
  15. package/config/skills/agent/core/experiment-card/execute.test.sh +17 -0
  16. package/config/skills/agent/core/project-tickets/SKILL.md +35 -2
  17. package/config/skills/agent/core/project-tickets/execute.sh +59 -6
  18. package/config/skills/agent/core/project-tickets/execute.test.sh +24 -0
  19. package/config/skills/agent/core/send-message/execute.sh +16 -0
  20. package/config/skills/agent/core/send-message/execute.test.sh +10 -0
  21. package/config/skills/agent/core/trace-read/SKILL.md +117 -0
  22. package/config/skills/agent/core/trace-read/execute.sh +116 -0
  23. package/config/skills/agent/core/update-intent-task/execute.sh +2 -0
  24. package/config/skills/agent/desktop-app-control/execute.sh +5 -2
  25. package/config/skills/agent/marketing/submit-for-approval/execute.sh +3 -2
  26. package/config/skills/orchestrator/decompose-mission/execute.sh +2 -0
  27. package/config/skills/orchestrator/decompose-okr/execute.sh +1 -0
  28. package/config/skills/orchestrator/design-team/execute.sh +2 -0
  29. package/config/skills/orchestrator/measure-kr/execute.sh +2 -0
  30. package/config/skills/orchestrator/review-mission/execute.sh +2 -0
  31. package/config/skills/orchestrator/send-message/execute.sh +27 -2
  32. package/config/skills/orchestrator/send-message/execute.test.sh +89 -0
  33. package/config/skills/registry.json +6 -5
  34. package/config/skills/team-leader/design-checklist/execute.sh +2 -0
  35. package/config/skills/team-leader/signal-digest/SKILL.md +110 -0
  36. package/config/skills/team-leader/signal-digest/execute.sh +173 -0
  37. package/config/skills/team-leader/signal-digest/execute.test.sh +123 -0
  38. package/config/skills/team-leader/signal-digest/signal-digest.config.example.json +23 -0
  39. package/config/skills/team-leader/signal-digest/signal_digest.py +572 -0
  40. package/config/skills/team-leader/signal-digest/signal_digest.test.py +319 -0
  41. package/dist/backend/backend/src/constants.d.ts +356 -5
  42. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  43. package/dist/backend/backend/src/constants.js +341 -8
  44. package/dist/backend/backend/src/constants.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +9 -3
  46. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
  47. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +38 -5
  48. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
  49. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +4 -9
  50. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
  51. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +6 -14
  52. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
  53. package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts +64 -0
  54. package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts.map +1 -0
  55. package/dist/backend/backend/src/controllers/auth/owner-session.controller.js +164 -0
  56. package/dist/backend/backend/src/controllers/auth/owner-session.controller.js.map +1 -0
  57. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  58. package/dist/backend/backend/src/controllers/browser/browser.routes.js +18 -5
  59. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  60. package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
  61. package/dist/backend/backend/src/controllers/canva/canva.routes.js +8 -1
  62. package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
  63. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/chat/chat.controller.js +16 -1
  65. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  67. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +3 -1
  68. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  69. package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts.map +1 -1
  70. package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js +3 -5
  71. package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js.map +1 -1
  72. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -2
  73. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
  74. package/dist/backend/backend/src/controllers/connector/connector.controller.js +17 -2
  75. package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
  76. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -1
  77. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +2 -3
  78. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -1
  79. package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts +4 -2
  80. package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts.map +1 -1
  81. package/dist/backend/backend/src/controllers/decisions/decisions.controller.js +31 -20
  82. package/dist/backend/backend/src/controllers/decisions/decisions.controller.js.map +1 -1
  83. package/dist/backend/backend/src/controllers/desktop/desktop.controller.d.ts.map +1 -1
  84. package/dist/backend/backend/src/controllers/desktop/desktop.controller.js +16 -0
  85. package/dist/backend/backend/src/controllers/desktop/desktop.controller.js.map +1 -1
  86. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  87. package/dist/backend/backend/src/controllers/google/google.controller.js +9 -5
  88. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  89. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  90. package/dist/backend/backend/src/controllers/google/google.routes.js +16 -3
  91. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  92. package/dist/backend/backend/src/controllers/harness/harness.controller.d.ts.map +1 -1
  93. package/dist/backend/backend/src/controllers/harness/harness.controller.js +3 -5
  94. package/dist/backend/backend/src/controllers/harness/harness.controller.js.map +1 -1
  95. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +1 -0
  96. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  97. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
  98. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  99. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
  100. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +8 -1
  101. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
  102. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +1 -1
  103. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
  104. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  105. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
  106. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  107. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
  108. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +3 -5
  109. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
  110. package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -1
  111. package/dist/backend/backend/src/controllers/people/people.routes.js +3 -5
  112. package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -1
  113. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +35 -2
  114. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  115. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +138 -4
  116. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  117. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +2 -0
  118. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
  119. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +7 -1
  120. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
  121. package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts.map +1 -1
  122. package/dist/backend/backend/src/controllers/request/open-items.controller.js +2 -4
  123. package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -1
  124. package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
  125. package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
  126. package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
  127. package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
  128. package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
  129. package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
  130. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
  131. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
  132. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
  133. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
  134. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  135. package/dist/backend/backend/src/controllers/slack/slack.controller.js +9 -0
  136. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  137. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
  138. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +11 -0
  139. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
  140. package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts +6 -4
  141. package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts.map +1 -1
  142. package/dist/backend/backend/src/controllers/system/system-control.controller.js +20 -13
  143. package/dist/backend/backend/src/controllers/system/system-control.controller.js.map +1 -1
  144. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  145. package/dist/backend/backend/src/controllers/team/team.controller.js +14 -7
  146. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  147. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
  148. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +5 -7
  149. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
  150. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +73 -0
  151. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
  152. package/dist/backend/backend/src/controllers/trace/trace.controller.js +437 -0
  153. package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
  154. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts +3 -3
  155. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts.map +1 -1
  156. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js +4 -2
  157. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js.map +1 -1
  158. package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.d.ts.map +1 -1
  159. package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js +10 -2
  160. package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js.map +1 -1
  161. package/dist/backend/backend/src/index.d.ts +34 -0
  162. package/dist/backend/backend/src/index.d.ts.map +1 -1
  163. package/dist/backend/backend/src/index.js +342 -61
  164. package/dist/backend/backend/src/index.js.map +1 -1
  165. package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts +31 -0
  166. package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
  167. package/dist/backend/backend/src/middleware/agent-origin-correction.js +31 -0
  168. package/dist/backend/backend/src/middleware/agent-origin-correction.js.map +1 -0
  169. package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts +6 -0
  170. package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts.map +1 -1
  171. package/dist/backend/backend/src/middleware/agent-origin.middleware.js +4 -1
  172. package/dist/backend/backend/src/middleware/agent-origin.middleware.js.map +1 -1
  173. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +20 -17
  174. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
  175. package/dist/backend/backend/src/middleware/api-token.middleware.js +27 -37
  176. package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
  177. package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts +213 -0
  178. package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
  179. package/dist/backend/backend/src/middleware/caller-identity.middleware.js +481 -0
  180. package/dist/backend/backend/src/middleware/caller-identity.middleware.js.map +1 -0
  181. package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts +67 -0
  182. package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts.map +1 -0
  183. package/dist/backend/backend/src/middleware/caller-identity.testing.js +108 -0
  184. package/dist/backend/backend/src/middleware/caller-identity.testing.js.map +1 -0
  185. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  186. package/dist/backend/backend/src/routes/api.routes.js +11 -0
  187. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  188. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/agent/agent-registration.service.js +17 -2
  190. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  191. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
  192. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  193. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +19 -10
  194. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  195. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +10 -1
  197. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  198. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  199. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/agent/restore-filter.d.ts +5 -2
  201. package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/agent/restore-filter.js +5 -2
  203. package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
  204. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +4 -0
  206. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  207. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
  208. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  209. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
  210. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  211. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  212. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
  214. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  215. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  216. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  217. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  218. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  219. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  220. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  221. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/backup/backup-archive.service.js +7 -1
  223. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  224. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
  225. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
  226. package/dist/backend/backend/src/services/chat/chat.service.d.ts +175 -2
  227. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  228. package/dist/backend/backend/src/services/chat/chat.service.js +444 -35
  229. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  230. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
  231. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  232. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
  233. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  234. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  235. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  237. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  238. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
  239. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  240. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
  241. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  242. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
  243. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  244. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +8 -4
  245. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  246. package/dist/backend/backend/src/services/chat-v2/types.d.ts +0 -1
  247. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  248. package/dist/backend/backend/src/services/chat-v2/types.js +0 -1
  249. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  250. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  251. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -0
  252. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  253. package/dist/backend/backend/src/services/core/api-token.service.d.ts +28 -0
  254. package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -1
  255. package/dist/backend/backend/src/services/core/api-token.service.js +46 -0
  256. package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -1
  257. package/dist/backend/backend/src/services/core/dashboard-build.d.ts +49 -0
  258. package/dist/backend/backend/src/services/core/dashboard-build.d.ts.map +1 -0
  259. package/dist/backend/backend/src/services/core/dashboard-build.js +68 -0
  260. package/dist/backend/backend/src/services/core/dashboard-build.js.map +1 -0
  261. package/dist/backend/backend/src/services/core/owner-auth.service.d.ts +127 -0
  262. package/dist/backend/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
  263. package/dist/backend/backend/src/services/core/owner-auth.service.js +205 -0
  264. package/dist/backend/backend/src/services/core/owner-auth.service.js.map +1 -0
  265. package/dist/backend/backend/src/services/core/peer-process.service.d.ts +168 -0
  266. package/dist/backend/backend/src/services/core/peer-process.service.d.ts.map +1 -0
  267. package/dist/backend/backend/src/services/core/peer-process.service.js +352 -0
  268. package/dist/backend/backend/src/services/core/peer-process.service.js.map +1 -0
  269. package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  270. package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
  271. package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
  272. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
  273. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  274. package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
  275. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  276. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +1 -1
  277. package/dist/backend/backend/src/services/experiments/experiment-verdict.js +2 -2
  278. package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -1
  279. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +149 -4
  280. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
  281. package/dist/backend/backend/src/services/experiments/experiment.service.js +549 -24
  282. package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
  283. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +20 -5
  284. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -1
  285. package/dist/backend/backend/src/services/experiments/experiment.wiring.js +46 -9
  286. package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -1
  287. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +7 -0
  288. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -1
  289. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +21 -1
  290. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -1
  291. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  293. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  294. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
  295. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +2 -1
  296. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
  297. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
  298. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  299. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +0 -18
  300. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  301. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
  302. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  303. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +41 -5
  304. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  305. package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
  306. package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
  307. package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +391 -0
  308. package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
  309. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +35 -1
  310. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
  311. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +138 -2
  312. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
  313. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
  314. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
  315. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
  316. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
  317. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts +82 -0
  318. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts.map +1 -0
  319. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js +141 -0
  320. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js.map +1 -0
  321. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts +51 -1
  322. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
  323. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +118 -2
  324. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
  325. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  326. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  327. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +4 -0
  328. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  329. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts +103 -0
  330. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts.map +1 -0
  331. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js +86 -0
  332. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js.map +1 -0
  333. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +57 -0
  334. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  335. package/dist/backend/backend/src/services/open-items/open-items.service.js +100 -4
  336. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  337. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  338. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +10 -2
  339. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  340. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  341. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
  342. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  343. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
  344. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +13 -0
  345. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
  346. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
  347. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  348. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +44 -3
  349. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  350. package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.d.ts.map +1 -1
  351. package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js +2 -1
  352. package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js.map +1 -1
  353. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
  354. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +3 -0
  355. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
  356. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts +156 -0
  357. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts.map +1 -0
  358. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js +308 -0
  359. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js.map +1 -0
  360. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts +212 -0
  361. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -0
  362. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +515 -0
  363. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -0
  364. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts +186 -0
  365. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts.map +1 -0
  366. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js +341 -0
  367. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js.map +1 -0
  368. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +309 -0
  369. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  370. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +726 -1
  371. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  372. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  373. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
  374. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  375. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
  376. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  377. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
  378. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  379. package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +61 -3
  380. package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -1
  381. package/dist/backend/backend/src/services/restart/interrupted-turns.js +106 -9
  382. package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -1
  383. package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +22 -0
  384. package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
  385. package/dist/backend/backend/src/services/restart/restart-drain.service.js +37 -5
  386. package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -1
  387. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts +62 -0
  388. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts.map +1 -0
  389. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js +126 -0
  390. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js.map +1 -0
  391. package/dist/backend/backend/src/services/restart/turn-probe.d.ts +17 -2
  392. package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -1
  393. package/dist/backend/backend/src/services/restart/turn-probe.js +29 -4
  394. package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -1
  395. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  396. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
  397. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  398. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  399. package/dist/backend/backend/src/services/session/session-handoff.service.js +8 -5
  400. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  401. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
  402. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
  403. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
  404. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
  405. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
  406. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
  407. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
  408. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
  409. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
  410. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
  411. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
  412. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
  413. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
  414. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
  415. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
  416. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
  417. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
  418. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
  419. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
  420. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
  421. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
  422. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
  423. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
  424. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
  425. package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
  426. package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
  427. package/dist/backend/backend/src/services/slack/slack-auto-working.service.js +66 -3
  428. package/dist/backend/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
  429. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
  430. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  431. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
  432. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  433. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
  434. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  435. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
  436. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  437. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +200 -41
  438. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  439. package/dist/backend/backend/src/services/slack/slack.service.d.ts +43 -1
  440. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  441. package/dist/backend/backend/src/services/slack/slack.service.js +76 -7
  442. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  443. package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
  444. package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
  445. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  446. package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
  447. package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
  448. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  449. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
  450. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  451. package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts +99 -0
  452. package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts.map +1 -0
  453. package/dist/backend/backend/src/services/trace/trace-analysis.service.js +148 -0
  454. package/dist/backend/backend/src/services/trace/trace-analysis.service.js.map +1 -0
  455. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +212 -0
  456. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  457. package/dist/backend/backend/src/services/trace/trace-context.service.js +489 -0
  458. package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
  459. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +46 -0
  460. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
  461. package/dist/backend/backend/src/services/trace/trace-http.middleware.js +176 -0
  462. package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
  463. package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
  464. package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  465. package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
  466. package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
  467. package/dist/backend/backend/src/services/trace/trace-metrics.d.ts +262 -0
  468. package/dist/backend/backend/src/services/trace/trace-metrics.d.ts.map +1 -0
  469. package/dist/backend/backend/src/services/trace/trace-metrics.js +810 -0
  470. package/dist/backend/backend/src/services/trace/trace-metrics.js.map +1 -0
  471. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +338 -0
  472. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  473. package/dist/backend/backend/src/services/trace/trace-recorder.js +789 -0
  474. package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
  475. package/dist/backend/backend/src/services/trace/trace-store.d.ts +308 -0
  476. package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
  477. package/dist/backend/backend/src/services/trace/trace-store.js +714 -0
  478. package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
  479. package/dist/backend/backend/src/services/trace/trace-summary.d.ts +77 -0
  480. package/dist/backend/backend/src/services/trace/trace-summary.d.ts.map +1 -0
  481. package/dist/backend/backend/src/services/trace/trace-summary.js +239 -0
  482. package/dist/backend/backend/src/services/trace/trace-summary.js.map +1 -0
  483. package/dist/backend/backend/src/services/trace/trace-timeline.d.ts +74 -0
  484. package/dist/backend/backend/src/services/trace/trace-timeline.d.ts.map +1 -0
  485. package/dist/backend/backend/src/services/trace/trace-timeline.js +162 -0
  486. package/dist/backend/backend/src/services/trace/trace-timeline.js.map +1 -0
  487. package/dist/backend/backend/src/services/trace/trace.types.d.ts +137 -0
  488. package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
  489. package/dist/backend/backend/src/services/trace/trace.types.js +104 -0
  490. package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
  491. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts +80 -0
  492. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts.map +1 -0
  493. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js +184 -0
  494. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js.map +1 -0
  495. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
  496. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
  497. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +7 -0
  498. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
  499. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +16 -0
  500. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
  501. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +16 -0
  502. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
  503. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
  504. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  505. package/dist/backend/backend/src/services/v3/request.service.js +4 -0
  506. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  507. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
  508. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +2 -1
  509. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
  510. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +8 -0
  511. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  512. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +46 -4
  513. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  514. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts +4 -3
  515. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts.map +1 -1
  516. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js +3 -2
  517. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js.map +1 -1
  518. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  519. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  520. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  521. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  522. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
  523. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  524. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  525. package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
  526. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  527. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -1
  528. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +2 -1
  529. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -1
  530. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  531. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  532. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
  533. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  534. package/dist/backend/backend/src/types/decision.types.d.ts +3 -1
  535. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  536. package/dist/backend/backend/src/types/experiment.types.d.ts +65 -6
  537. package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -1
  538. package/dist/backend/backend/src/types/experiment.types.js.map +1 -1
  539. package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
  540. package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
  541. package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
  542. package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
  543. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +9 -0
  544. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  545. package/dist/backend/backend/src/types/ticket-autopilot.types.js +14 -0
  546. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
  547. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +4 -0
  548. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  549. package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
  550. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  551. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  552. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +5 -1
  553. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  554. package/dist/backend/backend/src/types/v2/work-item.types.js +2 -0
  555. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  556. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +44 -37
  557. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
  558. package/dist/backend/backend/src/utils/agent-caller.utils.js +48 -42
  559. package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
  560. package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -1
  561. package/dist/backend/backend/src/utils/secret-env.js +8 -1
  562. package/dist/backend/backend/src/utils/secret-env.js.map +1 -1
  563. package/dist/backend/backend/src/utils/security.d.ts +2 -0
  564. package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
  565. package/dist/backend/backend/src/utils/security.js +3 -1
  566. package/dist/backend/backend/src/utils/security.js.map +1 -1
  567. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
  568. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  569. package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
  570. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  571. package/dist/backend/build-info.json +2 -2
  572. package/dist/backend/config/constants.d.ts +67 -0
  573. package/dist/backend/config/constants.d.ts.map +1 -1
  574. package/dist/backend/config/constants.js +67 -0
  575. package/dist/backend/config/constants.js.map +1 -1
  576. package/dist/cli/backend/src/constants.d.ts +356 -5
  577. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  578. package/dist/cli/backend/src/constants.js +341 -8
  579. package/dist/cli/backend/src/constants.js.map +1 -1
  580. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  581. package/dist/cli/backend/src/services/agent/agent-registration.service.js +17 -2
  582. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  583. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
  584. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  585. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +19 -10
  586. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  587. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  588. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +10 -1
  589. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  590. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  591. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  592. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  593. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +4 -0
  594. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  595. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
  596. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  597. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
  598. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  599. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  600. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  601. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
  602. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  603. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  604. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  605. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  606. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  607. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  608. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  609. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  610. package/dist/cli/backend/src/services/backup/backup-archive.service.js +7 -1
  611. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  612. package/dist/cli/backend/src/services/chat/chat.service.d.ts +282 -0
  613. package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
  614. package/dist/cli/backend/src/services/chat/chat.service.js +783 -0
  615. package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
  616. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
  617. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  618. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
  619. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  620. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  621. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  622. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  623. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  624. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
  625. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  626. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
  627. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  628. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
  629. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  630. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +8 -4
  631. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  632. package/dist/cli/backend/src/services/chat-v2/types.d.ts +0 -1
  633. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -1
  634. package/dist/cli/backend/src/services/chat-v2/types.js +0 -1
  635. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -1
  636. package/dist/cli/backend/src/services/core/api-token.service.d.ts +28 -0
  637. package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -1
  638. package/dist/cli/backend/src/services/core/api-token.service.js +46 -0
  639. package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -1
  640. package/dist/cli/backend/src/services/core/owner-auth.service.d.ts +127 -0
  641. package/dist/cli/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
  642. package/dist/cli/backend/src/services/core/owner-auth.service.js +205 -0
  643. package/dist/cli/backend/src/services/core/owner-auth.service.js.map +1 -0
  644. package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  645. package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
  646. package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
  647. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  648. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  649. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  650. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
  651. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  652. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +0 -18
  653. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  654. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
  655. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  656. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +41 -5
  657. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  658. package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
  659. package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
  660. package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +391 -0
  661. package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
  662. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
  663. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
  664. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
  665. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
  666. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  667. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  668. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +4 -0
  669. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  670. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +57 -0
  671. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  672. package/dist/cli/backend/src/services/open-items/open-items.service.js +100 -4
  673. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  674. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
  675. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  676. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +44 -3
  677. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  678. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
  679. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  680. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
  681. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  682. package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +22 -0
  683. package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
  684. package/dist/cli/backend/src/services/restart/restart-drain.service.js +37 -5
  685. package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -1
  686. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  687. package/dist/cli/backend/src/services/session/session-handoff.service.js +8 -5
  688. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  689. package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
  690. package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
  691. package/dist/cli/backend/src/services/slack/slack-auto-working.service.js +66 -3
  692. package/dist/cli/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
  693. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
  694. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  695. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
  696. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  697. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
  698. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  699. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +200 -41
  700. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  701. package/dist/cli/backend/src/services/slack/slack.service.d.ts +43 -1
  702. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  703. package/dist/cli/backend/src/services/slack/slack.service.js +76 -7
  704. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  705. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  706. package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
  707. package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
  708. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  709. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
  710. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  711. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +212 -0
  712. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  713. package/dist/cli/backend/src/services/trace/trace-context.service.js +489 -0
  714. package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
  715. package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
  716. package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  717. package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
  718. package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
  719. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +338 -0
  720. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  721. package/dist/cli/backend/src/services/trace/trace-recorder.js +789 -0
  722. package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
  723. package/dist/cli/backend/src/services/trace/trace-store.d.ts +308 -0
  724. package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
  725. package/dist/cli/backend/src/services/trace/trace-store.js +714 -0
  726. package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
  727. package/dist/cli/backend/src/services/trace/trace.types.d.ts +137 -0
  728. package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
  729. package/dist/cli/backend/src/services/trace/trace.types.js +104 -0
  730. package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
  731. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  732. package/dist/cli/backend/src/services/v3/request.service.js +4 -0
  733. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  734. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  735. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  736. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  737. package/dist/cli/backend/src/types/decision.types.d.ts +3 -1
  738. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  739. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +9 -0
  740. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  741. package/dist/cli/backend/src/types/ticket-autopilot.types.js +14 -0
  742. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
  743. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +4 -0
  744. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  745. package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
  746. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  747. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  748. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +5 -1
  749. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  750. package/dist/cli/backend/src/types/v2/work-item.types.js +2 -0
  751. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  752. package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -1
  753. package/dist/cli/backend/src/utils/secret-env.js +8 -1
  754. package/dist/cli/backend/src/utils/secret-env.js.map +1 -1
  755. package/dist/cli/backend/src/utils/security.d.ts +196 -0
  756. package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
  757. package/dist/cli/backend/src/utils/security.js +538 -0
  758. package/dist/cli/backend/src/utils/security.js.map +1 -0
  759. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
  760. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  761. package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
  762. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
  763. package/dist/cli/cli/src/commands/service.d.ts +12 -0
  764. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  765. package/dist/cli/cli/src/commands/service.js +36 -2
  766. package/dist/cli/cli/src/commands/service.js.map +1 -1
  767. package/dist/cli/cli/src/index.js +4 -0
  768. package/dist/cli/cli/src/index.js.map +1 -1
  769. package/dist/cli/cli/src/utils/owner-token-fetch.d.ts +41 -0
  770. package/dist/cli/cli/src/utils/owner-token-fetch.d.ts.map +1 -0
  771. package/dist/cli/cli/src/utils/owner-token-fetch.js +83 -0
  772. package/dist/cli/cli/src/utils/owner-token-fetch.js.map +1 -0
  773. package/dist/cli/cli/src/utils/safe-shutdown.d.ts +13 -3
  774. package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -1
  775. package/dist/cli/cli/src/utils/safe-shutdown.js +26 -4
  776. package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -1
  777. package/dist/cli/config/constants.d.ts +67 -0
  778. package/dist/cli/config/constants.d.ts.map +1 -1
  779. package/dist/cli/config/constants.js +67 -0
  780. package/dist/cli/config/constants.js.map +1 -1
  781. package/frontend/dist/assets/index-bfa0e2e8.css +42 -0
  782. package/frontend/dist/assets/{index-800118ca.js → index-edfa8e04.js} +285 -285
  783. package/frontend/dist/index.html +2 -2
  784. package/package.json +1 -1
  785. package/packages/crewly-agent/src/runtime/api-client.test.ts +42 -0
  786. package/packages/crewly-agent/src/runtime/api-client.ts +6 -0
  787. package/dist/backend/backend/src/services/v3/request-notification.service.d.ts +0 -52
  788. package/dist/backend/backend/src/services/v3/request-notification.service.d.ts.map +0 -1
  789. package/dist/backend/backend/src/services/v3/request-notification.service.js +0 -161
  790. package/dist/backend/backend/src/services/v3/request-notification.service.js.map +0 -1
  791. package/frontend/dist/assets/index-5e967795.css +0 -42
@@ -23,7 +23,7 @@ import { TerminalGateway, setTerminalGateway } from './websocket/terminal.gatewa
23
23
  import { initializeChatGateway } from './websocket/chat.gateway.js';
24
24
  import { LoggerService } from './services/core/logger.service.js';
25
25
  import { retryWithBackoff } from './services/core/retry.util.js';
26
- import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, OWNER_MESSAGE_WATCHDOG_CONSTANTS, CLOUD_DISCONNECT_NOTICE_CONSTANTS, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, API_SECURITY_CONSTANTS, } from './constants.js';
26
+ import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, OWNER_MESSAGE_WATCHDOG_CONSTANTS, TURN_STATE_CONSTANTS, CLOUD_DISCONNECT_NOTICE_CONSTANTS, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, API_SECURITY_CONSTANTS, } from './constants.js';
27
27
  import { getSettingsService } from './services/settings/index.js';
28
28
  import { MemoryService } from './services/memory/memory.service.js';
29
29
  import { getImprovementStartupService } from './services/orchestrator/improvement-startup.service.js';
@@ -68,7 +68,7 @@ import { getSlackAutoWorkingService } from './services/slack/slack-auto-working.
68
68
  import { getSlackAgentDmService } from './services/slack/slack-agent-dm.service.js';
69
69
  import { sendBootAnnouncement, isFirstBoot, markBooted } from './services/boot/boot-announce.service.js';
70
70
  import { SubAgentMessageQueue } from './services/messaging/sub-agent-message-queue.service.js';
71
- import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS } from './constants.js';
71
+ import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS, OWNER_AUTH_CONSTANTS } from './constants.js';
72
72
  import { PtyActivityTrackerService } from './services/agent/pty-activity-tracker.service.js';
73
73
  import { InFlightTurnTracker } from './services/restart/in-flight-turn-tracker.service.js';
74
74
  import { TicketIntakeService, setTicketIntakeService, resolveTicketIdForSession, } from './services/v3/ticket-intake.service.js';
@@ -79,8 +79,12 @@ import { activeAcceptance, formatTicketMarker, formatTicketNumber } from './type
79
79
  import { createWorkItem, TERMINAL_WORK_ITEM_STATUSES } from './types/v2/work-item.types.js';
80
80
  import { runPoolArchiveMigration } from './services/task-pool/pool-archive-migration.js';
81
81
  import { createPtyTurnProbe } from './services/restart/turn-probe.js';
82
- import { RestartDrainService, resolveRestartDrainMs } from './services/restart/restart-drain.service.js';
83
- import { interruptedTurnsPath, loadInterruptedTurns, saveInterruptedTurns, writeInterruptedTurns, resumeInterruptedTurns, } from './services/restart/interrupted-turns.js';
82
+ import { RestartDrainService, resolveRestartDrainMs, resolveBackgroundDrainMs, } from './services/restart/restart-drain.service.js';
83
+ import { interruptedTurnsPath, loadInterruptedTurns, saveInterruptedTurns, writeInterruptedTurns, resumeInterruptedTurns, planCommitmentNotes, } from './services/restart/interrupted-turns.js';
84
+ import { AgentTurnStateService } from './services/monitoring/agent-turn-state.js';
85
+ import { DeferredIdleSettle } from './services/monitoring/deferred-idle-settle.js';
86
+ import { resolveSupervisorStopBudgetMs, capDrainToSupervisor } from './services/restart/supervisor-stop-budget.js';
87
+ import { findClaudeTranscript, defaultClaudeHome } from './services/agent/runtime-session-recovery.js';
84
88
  import { DeviceIdentityService } from './services/cloud/device-identity.service.js';
85
89
  import { CloudSyncService } from './services/cloud/cloud-sync.service.js';
86
90
  import { SlackThreadStoreService, setSlackThreadStore, getSlackThreadStore } from './services/slack/slack-thread-store.service.js';
@@ -95,9 +99,13 @@ import { setMessageQueueService as setMessagingControllerQueueService } from './
95
99
  import { SystemResourceAlertService } from './services/monitoring/system-resource-alert.service.js';
96
100
  import { TokenUsageService } from './services/monitoring/token-usage.service.js';
97
101
  import { agentHeartbeatMiddleware } from './middleware/agent-heartbeat.middleware.js';
98
- import { agentOriginMiddleware } from './middleware/agent-origin.middleware.js';
102
+ import { agentOriginMiddleware, liveSessionPids } from './middleware/agent-origin.middleware.js';
103
+ import { createCallerIdentityMiddleware } from './middleware/caller-identity.middleware.js';
104
+ import { PeerProcessService } from './services/core/peer-process.service.js';
105
+ import { createOwnerSessionPageMiddleware, createOwnerSessionRouter } from './controllers/auth/owner-session.controller.js';
106
+ import { dashboardBuildHeader, dashboardBuildMessage, loadDashboardEntry } from './services/core/dashboard-build.js';
99
107
  import { apiTokenMiddleware, healthGateMiddleware, socketIoAllowRequest, installWebSocketGate, } from './middleware/api-token.middleware.js';
100
- import { resolveApiToken } from './services/core/api-token.service.js';
108
+ import { getApiTokenFilePath, mirrorEnvTokenToFile, resolveApiToken } from './services/core/api-token.service.js';
101
109
  import { isHeadlessEnvironment, describeNetworkExposure } from './utils/network-exposure.utils.js';
102
110
  import { RedisCacheService } from './services/cache/redis-cache.service.js';
103
111
  import { OrchestratorRestartService } from './services/orchestrator/orchestrator-restart.service.js';
@@ -152,6 +160,7 @@ import { sessionsToRestore } from './services/agent/restore-filter.js';
152
160
  import { ProjectMemoryService } from './services/memory/project-memory.service.js';
153
161
  import { TaskHistorySubscriber } from './services/memory/task-history.subscriber.js';
154
162
  import { TeamHealthWatchdogService, LiveTeamHealthDataProvider, loadTeamHealthConfig, setTeamHealthWatchdogSingleton, getTeamHealthWatchdogSingleton, } from './services/team-health/index.js';
163
+ import { traceTurnActivity } from './services/trace/trace-recorder.js';
155
164
  // ESM __dirname equivalent using import.meta.url
156
165
  const __filename = fileURLToPath(import.meta.url);
157
166
  const __dirname = path.dirname(__filename);
@@ -214,10 +223,33 @@ function cloudHealthBlock() {
214
223
  return { status: 'unknown' };
215
224
  }
216
225
  }
226
+ /**
227
+ * Send an alert to the owner as a Slack notification. Shared by the disk
228
+ * janitor's low-disk notice, critical system alerts (#991) and repeated
229
+ * runtime startup exits (#989), so they all reach an away owner the same way.
230
+ *
231
+ * @param notice - Title, message and whether it is urgent
232
+ * @returns True when it was sent, false when Slack is not connected
233
+ */
234
+ async function slackOwnerAlertNotifier(notice) {
235
+ const slack = getSlackService();
236
+ if (!slack.isConnected())
237
+ return false;
238
+ await slack.sendNotification({
239
+ type: 'alert',
240
+ title: notice.title,
241
+ message: notice.message,
242
+ urgency: notice.urgent ? 'critical' : 'normal',
243
+ timestamp: new Date().toISOString(),
244
+ });
245
+ return true;
246
+ }
217
247
  export class CrewlyServer {
218
248
  app;
219
249
  httpServer;
220
250
  io;
251
+ /** Entry script of the dashboard build this backend serves (null: none built) */
252
+ dashboardEntry = null;
221
253
  config;
222
254
  logger = LoggerService.getInstance().createComponentLogger('CrewlyServer');
223
255
  /** Offline-replay summary from this boot, surfaced in the boot announcement. */
@@ -271,6 +303,21 @@ export class CrewlyServer {
271
303
  lastShutdownSignalAt = 0;
272
304
  /** Interrupted turns loaded at boot, resumed once their agents are back */
273
305
  interruptedTurnsAtBoot = [];
306
+ /** Supervisor's SIGTERM→SIGKILL budget (systemd TimeoutStopUSec), read at boot; null = none / unknown */
307
+ supervisorStopBudgetMs = null;
308
+ /**
309
+ * End-of-turn settling skipped while an agent still had background work,
310
+ * re-checked until that work is gone (specs/2026-10-02-restart-busy-and-resume.md).
311
+ */
312
+ deferredIdleSettle = new DeferredIdleSettle({
313
+ hasBackgroundWork: (sessionName) => AgentTurnStateService.getInstance().hasBackgroundWork(sessionName),
314
+ isMidTurn: (sessionName) => AgentTurnStateService.getInstance().getVerdict(sessionName).state === 'turn',
315
+ settle: (sessionName) => this.settleAfterTurn(sessionName),
316
+ intervalMs: TURN_STATE_CONSTANTS.SETTLE_RECHECK_MS,
317
+ maxWaitMs: TURN_STATE_CONSTANTS.OPEN_WORK_MAX_MS,
318
+ });
319
+ /** Owner promises past due and never nudged at boot; their agents are restored and reminded once */
320
+ openCommitmentsAtBoot = [];
274
321
  healthMonitoringInterval = null;
275
322
  constructor(config) {
276
323
  // Resolve ~ to actual home directory
@@ -535,7 +582,30 @@ export class CrewlyServer {
535
582
  readIntakeLog: () => intakeOutcomeLog.read(),
536
583
  });
537
584
  setOwnerReceiptService(receipt);
538
- startOwnerReceiptSchedule(receipt);
585
+ // #856 follow-up: while the receipt is off, show the owner one real
586
+ // sample on a decision card and let him choose (never turned on for him).
587
+ void (async () => {
588
+ const [{ OwnerReceiptFormatAsk }, { DecisionService }] = await Promise.all([
589
+ import('./services/v3/owner-receipt/owner-receipt-format-ask.js'),
590
+ import('./services/decisions/decision.service.js'),
591
+ ]);
592
+ const formatAsk = new OwnerReceiptFormatAsk({
593
+ receipt,
594
+ decisions: () => DecisionService.getInstance(),
595
+ logger: LoggerService.getInstance().createComponentLogger('OwnerReceiptFormat'),
596
+ });
597
+ DecisionService.registerKindHandler('owner_receipt_format', formatAsk);
598
+ startOwnerReceiptSchedule({
599
+ tick: async () => {
600
+ const sent = await receipt.tick();
601
+ await formatAsk.tick();
602
+ return sent;
603
+ },
604
+ });
605
+ })().catch((err) => {
606
+ this.logger.warn('Owner receipt format ask not wired; the receipt runs without it', { error: err instanceof Error ? err.message : String(err) });
607
+ startOwnerReceiptSchedule(receipt);
608
+ });
539
609
  }
540
610
  TaskPoolService.getInstance().setTicketResolver((sessionName) => resolveTicketIdForSession(InFlightTurnTracker.getInstance(), sessionName));
541
611
  // Phase 2: answered → 待验收 → 验过了 / 打回 / silence accepts.
@@ -1224,27 +1294,23 @@ export class CrewlyServer {
1224
1294
  // restart. The owner asked a second question while the agent
1225
1295
  // was mid-answer and never got a reply; the message was still
1226
1296
  // in the queue an hour later (2026-09-21, Ella).
1227
- setImmediate(() => void this.flushQueuedAgentMessages(event.sessionName));
1228
- // The turn ended: a "working on it" it never answered means it chose
1229
- // not to reply (an "ok", "好"). Take it down rather than leave a
1230
- // "still working — the reply will follow" that never follows.
1231
- void getSlackTypingPlaceholderService()
1232
- ?.settleTurnWithoutReply(event.sessionName)
1233
- .catch(() => undefined);
1234
- // Same rule for the DM threads it was owed an answer in: one it
1235
- // chose not to answer must not pull a later unattributed answer
1236
- // back into it (2026-09-28).
1237
- void getSlackAgentDmService()
1238
- ?.settleOpenThreads(event.sessionName)
1239
- .catch(() => undefined);
1240
- // Ticket loop Phase 2: an agent that finished its turn has answered
1241
- // the tickets it replied in — submit them (待验收 or done).
1242
- void getTicketReviewService()
1243
- ?.onAgentIdle(event.sessionName)
1244
- .catch(() => undefined);
1297
+ //
1298
+ // An agent whose turn ended with a subagent or background task
1299
+ // still running is not done: the turn that delivers comes when
1300
+ // that work finishes. Leave its placeholders and tickets alone
1301
+ // (2026-10-02, Eve: "the data inventory is still running").
1302
+ // A re-check settles later, once the background work is gone.
1303
+ // An idle while the runtime still reports a turn (a silent
1304
+ // screen, a forced reset) is not a turn end at all: settle
1305
+ // nothing and flush nothing into the live turn; the turn's own
1306
+ // end publishes agent:idle again (PR #1013 review).
1307
+ const idleOutcome = this.deferredIdleSettle.onIdle(event.sessionName);
1308
+ if (idleOutcome !== 'turn') {
1309
+ setImmediate(() => void this.flushQueuedAgentMessages(event.sessionName));
1310
+ }
1245
1311
  // V3: Auto-close open Requests when the orchestrator goes idle
1246
1312
  // Handles direct responses (no WorkItem delegation)
1247
- if (event.sessionName === ORCHESTRATOR_SESSION_NAME) {
1313
+ if (event.sessionName === ORCHESTRATOR_SESSION_NAME && idleOutcome !== 'turn') {
1248
1314
  setImmediate(() => this.autoCloseOpenRequests());
1249
1315
  }
1250
1316
  }
@@ -1493,12 +1559,24 @@ export class CrewlyServer {
1493
1559
  // and the SPA shell are outside `/api` and stay open; `/health` has its
1494
1560
  // own gate below (#825).
1495
1561
  this.app.use('/api', apiTokenMiddleware);
1562
+ // Which dashboard build is served: a still-open tab running an older
1563
+ // bundle can tell it should reload (#1010 review).
1564
+ this.dashboardEntry = this.config.headless ? null : loadDashboardEntry(path.join(findPackageRoot(__dirname), 'frontend/dist/index.html'));
1565
+ this.app.use('/api', dashboardBuildHeader(this.dashboardEntry));
1496
1566
  // A skill's X-Agent-Session is checked against the agent PTY its process
1497
1567
  // really runs under (X-Agent-Pid) and corrected when it names another
1498
1568
  // agent — before the heartbeat and every controller read it.
1499
1569
  this.app.use('/api', agentOriginMiddleware);
1570
+ // Who is calling, from credentials (#999, specs/2026-10-03-owner-auth.md):
1571
+ // agent badge, owner session (+ CSRF), owner API token (checked against
1572
+ // the process tree when it comes from this machine), relay credential.
1573
+ // A request with none of these is anonymous — never the owner.
1574
+ const peerProcesses = new PeerProcessService({ listSessionPids: liveSessionPids });
1575
+ this.app.use('/api', createCallerIdentityMiddleware(peerProcesses));
1500
1576
  // Agent heartbeat middleware - any API call with X-Agent-Session header updates heartbeat
1501
1577
  this.app.use('/api', agentHeartbeatMiddleware);
1578
+ // The dashboard's owner session + CSRF token (GET /api/auth/session).
1579
+ this.app.use('/api', createOwnerSessionRouter(peerProcesses));
1502
1580
  // API routes
1503
1581
  this.app.use('/api', createApiRoutes(this.apiController));
1504
1582
  // Health check (enhanced with mode and agent info).
@@ -1609,6 +1687,8 @@ export class CrewlyServer {
1609
1687
  // and in compiled/npm-installed mode (dist/backend/backend/src/)
1610
1688
  const projectRoot = findPackageRoot(__dirname);
1611
1689
  const frontendPath = path.join(projectRoot, 'frontend/dist');
1690
+ // A page load from the owner's browser gets the owner session cookie (#999).
1691
+ this.app.use(createOwnerSessionPageMiddleware(peerProcesses));
1612
1692
  this.app.use(express.static(frontendPath));
1613
1693
  // Serve frontend for all other routes (SPA)
1614
1694
  // Skip /api/ and /health paths so addon-registered API routes are reachable
@@ -1649,6 +1729,9 @@ export class CrewlyServer {
1649
1729
  configureWebSocket() {
1650
1730
  this.io.on('connection', (socket) => {
1651
1731
  this.logger.info('Client connected', { socketId: socket.id });
1732
+ // Tell the tab which dashboard build is served now (#1010 review).
1733
+ if (this.dashboardEntry)
1734
+ socket.emit(OWNER_AUTH_CONSTANTS.BUILD_EVENT, dashboardBuildMessage(this.dashboardEntry));
1652
1735
  socket.on('disconnect', () => {
1653
1736
  this.logger.info('Client disconnected', { socketId: socket.id });
1654
1737
  });
@@ -1797,6 +1880,11 @@ export class CrewlyServer {
1797
1880
  }
1798
1881
  // Start activity monitoring
1799
1882
  this.logger.info('Starting activity monitoring...');
1883
+ // Turn busy periods for the autonomy metrics (#984): one `turn.ended`
1884
+ // trace event per PTY turn, from the undelayed status listener.
1885
+ this.activityMonitorService.onWorkingStatusChange((session, status) => {
1886
+ traceTurnActivity(session, status === 'in_progress', 'pty');
1887
+ });
1800
1888
  this.activityMonitorService.startPolling();
1801
1889
  // Start idle detection for agent suspension
1802
1890
  this.logger.info('Starting idle detection service...');
@@ -2034,6 +2122,8 @@ export class CrewlyServer {
2034
2122
  const runtimeExitMonitor = RuntimeExitMonitorService.getInstance();
2035
2123
  runtimeExitMonitor.setAgentRegistrationService(this.apiController.agentRegistrationService);
2036
2124
  runtimeExitMonitor.setEventBusService(this.eventBusService);
2125
+ // #989: a runtime that keeps dying at start is told to the owner once.
2126
+ runtimeExitMonitor.setOwnerNotifier(slackOwnerAlertNotifier);
2037
2127
  }
2038
2128
  catch (error) {
2039
2129
  this.logger.warn('Failed to wire RuntimeExitMonitorService dependencies (non-critical)', {
@@ -3014,14 +3104,15 @@ export class CrewlyServer {
3014
3104
  const slack = getSlackService();
3015
3105
  if (!slack.isConnected())
3016
3106
  return false;
3017
- await slack.sendNotification({
3107
+ // Only a delivered notice counts: sendNotification resolves
3108
+ // false when there was no channel to send it to.
3109
+ return slack.sendNotification({
3018
3110
  type: 'project_update',
3019
3111
  title,
3020
3112
  message,
3021
3113
  urgency: urgent ? 'high' : 'normal',
3022
3114
  timestamp: new Date().toISOString(),
3023
3115
  });
3024
- return true;
3025
3116
  });
3026
3117
  TicketAutopilotService.getInstance()?.stop();
3027
3118
  TicketAutopilotService.setInstance(autopilot);
@@ -3034,6 +3125,16 @@ export class CrewlyServer {
3034
3125
  else {
3035
3126
  this.logger.info('Ticket autopilot off (CREWLY_TICKET_AUTOPILOT=0)');
3036
3127
  }
3128
+ // The one owner card per retro that approves its harness-gap tickets
3129
+ // (specs/2026-10-03-autopilot-experiments.md §4). Registered even with
3130
+ // the autopilot switched off, so a card answered later still lands.
3131
+ {
3132
+ const { DecisionService: RetroDecisions } = await import('./services/decisions/decision.service.js');
3133
+ const { ticketAutopilot } = await import('./controllers/project-tickets/project-tickets.controller.js');
3134
+ RetroDecisions.registerKindHandler(TICKET_AUTOPILOT_CONSTANTS.RETRO_DECISION_KIND, {
3135
+ onSettled: (d) => ticketAutopilot().onRetroDecision(d),
3136
+ });
3137
+ }
3037
3138
  // Experiment cards (specs/experiment-cards.md, issue #986): measure each
3038
3139
  // shipped experiment at the end of its window, label it, log it to the
3039
3140
  // wiki and tell the owner. Kill switch: CREWLY_EXPERIMENTS=0.
@@ -3045,14 +3146,15 @@ export class CrewlyServer {
3045
3146
  const slack = getSlackService();
3046
3147
  if (!slack.isConnected())
3047
3148
  return false;
3048
- await slack.sendNotification({
3149
+ // Only a delivered notice counts: sendNotification resolves
3150
+ // false when there was no channel to send it to.
3151
+ return slack.sendNotification({
3049
3152
  type: 'project_update',
3050
3153
  title,
3051
3154
  message,
3052
3155
  urgency: urgent ? 'high' : 'normal',
3053
3156
  timestamp: new Date().toISOString(),
3054
3157
  });
3055
- return true;
3056
3158
  });
3057
3159
  ExperimentService.getInstance()?.stop();
3058
3160
  ExperimentService.setInstance(experiments);
@@ -3137,7 +3239,10 @@ export class CrewlyServer {
3137
3239
  // Start NOTIFY reconciliation service (retries failed Slack deliveries)
3138
3240
  this.notifyReconciliationService = new NotifyReconciliationService();
3139
3241
  this.notifyReconciliationService.start();
3140
- // Start system resource alert monitoring (proactive disk/memory/CPU alerts)
3242
+ // Start system resource alert monitoring (proactive disk/memory/CPU alerts).
3243
+ // Critical disk/memory alerts and auto-stopped agents also reach the
3244
+ // owner over Slack (#991), through the same path as the low-disk notice.
3245
+ this.systemResourceAlertService.setOwnerNotifier(slackOwnerAlertNotifier);
3141
3246
  this.systemResourceAlertService.startMonitoring();
3142
3247
  // Fire-and-forget background version check (populates cache for /health)
3143
3248
  VersionCheckService.getInstance().checkForUpdate().catch(() => {
@@ -3372,19 +3477,7 @@ export class CrewlyServer {
3372
3477
  // the usual Slack owner-notification path. Kill switch:
3373
3478
  // CREWLY_WORKTREE_JANITOR=0.
3374
3479
  try {
3375
- WorktreeJanitorService.getInstance().setLowDiskNotifier(async ({ title, message, urgent }) => {
3376
- const slack = getSlackService();
3377
- if (!slack.isConnected())
3378
- return false;
3379
- await slack.sendNotification({
3380
- type: 'alert',
3381
- title,
3382
- message,
3383
- urgency: urgent ? 'critical' : 'normal',
3384
- timestamp: new Date().toISOString(),
3385
- });
3386
- return true;
3387
- });
3480
+ WorktreeJanitorService.getInstance().setLowDiskNotifier(slackOwnerAlertNotifier);
3388
3481
  if (WorktreeJanitorService.getInstance().start()) {
3389
3482
  this.logger.info('WorktreeJanitorService scheduled');
3390
3483
  }
@@ -3848,11 +3941,17 @@ export class CrewlyServer {
3848
3941
  const allItems = await TaskPoolService.getInstance().getAllItems();
3849
3942
  // Work in hand only: active statuses, touched recently (see restore-filter),
3850
3943
  // plus agents whose turn the last restart cut off.
3944
+ const owed = await this.loadOwedWorkAtBoot();
3851
3945
  targets = sessionsToRestore(allItems, [
3852
3946
  ...this.interruptedTurnsAtBoot.map((t) => t.sessionName),
3853
3947
  // Agents with messages still waiting for them (restored from
3854
3948
  // disk by the queue) — someone is owed an answer.
3855
3949
  ...SubAgentMessageQueue.getInstance().sessionsWithPending(),
3950
+ // Agents whose owner promise is past due and was never
3951
+ // nudged: idle or not, they come back to be reminded once
3952
+ // (2026-10-02, Eve). Not-yet-due and already-nudged
3953
+ // promises are left to the open-items sweep.
3954
+ ...owed.map((c) => c.sessionName),
3856
3955
  ]);
3857
3956
  }
3858
3957
  catch (poolErr) {
@@ -4018,6 +4117,14 @@ export class CrewlyServer {
4018
4117
  */
4019
4118
  logNetworkExposure() {
4020
4119
  try {
4120
+ // A token pinned in the service environment is mirrored to the token
4121
+ // file, so the CLI on this machine can present it (#1010 review).
4122
+ const mirrored = mirrorEnvTokenToFile();
4123
+ if (mirrored === 'written' || mirrored === 'updated' || mirrored === 'failed') {
4124
+ this.logger[mirrored === 'failed' ? 'warn' : 'info'](`API token from ${API_SECURITY_CONSTANTS.ENV.API_TOKEN}: token file ${mirrored}`, {
4125
+ file: getApiTokenFilePath(),
4126
+ });
4127
+ }
4021
4128
  const token = resolveApiToken();
4022
4129
  const summary = describeNetworkExposure({
4023
4130
  bindHost: this.config.bindHost,
@@ -4207,6 +4314,32 @@ export class CrewlyServer {
4207
4314
  }
4208
4315
  this.logger.info(`Received ${signal} while shutdown is already past the drain; continuing`);
4209
4316
  }
4317
+ /**
4318
+ * End-of-turn settling: take down "working on it" placeholders the agent
4319
+ * never answered, settle its open DM threads, and submit the tickets it
4320
+ * replied in. Never throws.
4321
+ *
4322
+ * @param sessionName - Agent whose turn ended
4323
+ */
4324
+ settleAfterTurn(sessionName) {
4325
+ // The turn ended: a "working on it" it never answered means it chose
4326
+ // not to reply (an "ok", "好"). Take it down rather than leave a
4327
+ // "still working — the reply will follow" that never follows.
4328
+ void getSlackTypingPlaceholderService()
4329
+ ?.settleTurnWithoutReply(sessionName)
4330
+ .catch(() => undefined);
4331
+ // Same rule for the DM threads it was owed an answer in: one it
4332
+ // chose not to answer must not pull a later unattributed answer
4333
+ // back into it (2026-09-28).
4334
+ void getSlackAgentDmService()
4335
+ ?.settleOpenThreads(sessionName)
4336
+ .catch(() => undefined);
4337
+ // Ticket loop Phase 2: an agent that finished its turn has answered
4338
+ // the tickets it replied in — submit them (待验收 or done).
4339
+ void getTicketReviewService()
4340
+ ?.onAgentIdle(sessionName)
4341
+ .catch(() => undefined);
4342
+ }
4210
4343
  /**
4211
4344
  * Wire the safe-restart pieces: the turn probe, idle-event re-probing,
4212
4345
  * readiness queue counting, and the graceful-shutdown hook used by
@@ -4215,11 +4348,68 @@ export class CrewlyServer {
4215
4348
  wireSafeRestart() {
4216
4349
  const tracker = InFlightTurnTracker.getInstance();
4217
4350
  const activity = PtyActivityTrackerService.getInstance();
4351
+ const turnState = AgentTurnStateService.getInstance();
4352
+ const persistence = getSessionStatePersistence();
4353
+ const metaOf = (sessionName) => {
4354
+ try {
4355
+ return persistence.getSessionMetadata(sessionName);
4356
+ }
4357
+ catch {
4358
+ return undefined;
4359
+ }
4360
+ };
4361
+ // The runtime's own turn state (specs/2026-10-02-restart-busy-and-resume.md):
4362
+ // Claude Code transcripts as the fallback behind its hooks.
4363
+ turnState.setTranscriptLocator((sessionName) => {
4364
+ const meta = metaOf(sessionName);
4365
+ if (!meta || meta.runtimeType !== RUNTIME_TYPES.CLAUDE_CODE || !meta.claudeSessionId || !meta.cwd)
4366
+ return null;
4367
+ const homes = [meta.env?.CLAUDE_CONFIG_DIR, defaultClaudeHome()].filter((h) => typeof h === 'string' && h.length > 0);
4368
+ return findClaudeTranscript({ sessionId: meta.claudeSessionId, cwd: meta.cwd, claudeHomes: homes });
4369
+ });
4218
4370
  tracker.setProbe(createPtyTurnProbe({
4219
4371
  getBackend: () => getSessionBackendSync(),
4220
4372
  getIdleTimeMs: (sessionName) => (activity.hasActivity(sessionName) ? activity.getIdleTimeMs(sessionName) : null),
4373
+ getRuntimeVerdict: (sessionName) => turnState.getVerdict(sessionName),
4374
+ getLastHookEventAt: (sessionName) => turnState.lastHookEventAt(sessionName),
4375
+ getRuntimeType: (sessionName) => metaOf(sessionName)?.runtimeType ?? null,
4221
4376
  }));
4377
+ // Turns no delivery started (a background subagent finishing) and
4378
+ // background work after a turn count as mid-turn too (2026-10-02, Eve).
4379
+ tracker.setRuntimeBusySource((now) => {
4380
+ const backend = getSessionBackendSync();
4381
+ const out = [];
4382
+ for (const sessionName of turnState.knownSessions()) {
4383
+ if (!backend?.sessionExists(sessionName))
4384
+ continue;
4385
+ // An exited runtime is not working, whatever its last hook said.
4386
+ if (backend.isChildProcessAlive?.(sessionName) === false) {
4387
+ turnState.forget(sessionName);
4388
+ continue;
4389
+ }
4390
+ const v = turnState.getVerdict(sessionName, now);
4391
+ if (v.state === 'turn' || v.state === 'background')
4392
+ out.push({ sessionName, since: v.since, longRunning: v.longRunning });
4393
+ }
4394
+ return out;
4395
+ });
4222
4396
  tracker.attachEventSource(this.eventBusService);
4397
+ // Under systemd, TimeoutStopSec decides when we are SIGKILLed: the drain
4398
+ // must end before it, or the interrupted turns are never saved.
4399
+ this.supervisorStopBudgetMs = resolveSupervisorStopBudgetMs();
4400
+ if (this.supervisorStopBudgetMs !== null) {
4401
+ const wanted = resolveBackgroundDrainMs(process.env);
4402
+ const capped = capDrainToSupervisor(wanted, this.supervisorStopBudgetMs, SAFE_RESTART.SHUTDOWN_MARGIN_MS);
4403
+ const log = capped < wanted ? this.logger.warn.bind(this.logger) : this.logger.info.bind(this.logger);
4404
+ log('Restart drain capped by the systemd stop timeout', {
4405
+ timeoutStopMs: this.supervisorStopBudgetMs,
4406
+ drainCapMs: capped,
4407
+ wantedMs: wanted,
4408
+ ...(capped < wanted ? { fix: 'run "crewly service upgrade" (or "crewly service install --force") to regenerate the unit' } : {}),
4409
+ });
4410
+ }
4411
+ // A silent screen is not idle while the runtime reports a turn.
4412
+ this.activityMonitorService.setRuntimeTurnCheck((sessionName) => turnState.getVerdict(sessionName).state === 'turn');
4223
4413
  const drain = RestartDrainService.getInstance();
4224
4414
  drain.setQueueCounter(() => this.messageQueueService.pendingCount + SubAgentMessageQueue.getInstance().getTotalQueued());
4225
4415
  drain.setShutdownHandler((request) => this.shutdown({ reason: request.reason, exitCode: request.exitCode }));
@@ -4554,6 +4744,85 @@ export class CrewlyServer {
4554
4744
  });
4555
4745
  }
4556
4746
  }
4747
+ /**
4748
+ * Owner promises and owed answers left by the previous run. Their agents
4749
+ * are restored on boot even when idle (specs/2026-10-02-restart-busy-and-resume.md).
4750
+ * Never throws.
4751
+ *
4752
+ * @returns Open commitments and the agents owing an answer
4753
+ */
4754
+ async loadOwedWorkAtBoot() {
4755
+ let commitments = [];
4756
+ try {
4757
+ const { owedCommitments } = await import('./services/open-items/open-items.service.js');
4758
+ commitments = owedCommitments(await RequestService.getInstance().listAll(), new Date());
4759
+ }
4760
+ catch (error) {
4761
+ this.logger.warn('Could not read open owner promises at boot (non-fatal)', {
4762
+ error: error instanceof Error ? error.message : String(error),
4763
+ });
4764
+ }
4765
+ this.openCommitmentsAtBoot = commitments;
4766
+ if (commitments.length > 0) {
4767
+ this.logger.info('Owner promises past due and never nudged; their agents will be restored and reminded once', {
4768
+ commitments: commitments.map((c) => ({ session: c.sessionName, ticket: c.ticket, due: c.due })),
4769
+ });
4770
+ }
4771
+ return commitments;
4772
+ }
4773
+ /**
4774
+ * Remind restored agents of the owner promises they still owe, once each,
4775
+ * skipping agents that already get an interrupted-turn note.
4776
+ *
4777
+ * @param interrupted - The interrupted entries being resumed
4778
+ */
4779
+ async remindOpenCommitmentsAfterBoot(interrupted) {
4780
+ const commitments = this.openCommitmentsAtBoot;
4781
+ this.openCommitmentsAtBoot = [];
4782
+ if (commitments.length === 0)
4783
+ return;
4784
+ const registration = this.apiController.agentRegistrationService;
4785
+ const isRunning = (name) => Boolean(getSessionBackendSync()?.sessionExists(name)) || Boolean(registration.getInProcessRuntime(name));
4786
+ // One reminder per promise, ever: recorded (as the nudge) before it is
4787
+ // sent, so neither the next boot nor the sweep sends another.
4788
+ const { markRestartReminded, OpenItemsService } = await import('./services/open-items/open-items.service.js');
4789
+ // Through the service's queue when it runs: the sweep may be nudging the same promise.
4790
+ const openItems = OpenItemsService.getInstance();
4791
+ const markReminded = (requestId, itemId) => openItems ? openItems.markRestartReminded(requestId, itemId) : markRestartReminded(RequestService.getInstance(), requestId, itemId);
4792
+ const covered = new Set(interrupted.map((e) => e.sessionName));
4793
+ const marked = [];
4794
+ for (const c of commitments) {
4795
+ if (covered.has(c.sessionName) || !isRunning(c.sessionName))
4796
+ continue;
4797
+ try {
4798
+ if (await markReminded(c.requestId, c.itemId))
4799
+ marked.push(c);
4800
+ }
4801
+ catch (error) {
4802
+ this.logger.warn('Could not record a restart reminder; not sending it', {
4803
+ sessionName: c.sessionName,
4804
+ error: error instanceof Error ? error.message : String(error),
4805
+ });
4806
+ }
4807
+ }
4808
+ const notes = planCommitmentNotes(marked, interrupted, isRunning);
4809
+ for (const note of notes) {
4810
+ try {
4811
+ const result = await registration.sendMessageToAgent(note.sessionName, note.text);
4812
+ this.logger.info('Reminded a restored agent of the owner promise it still owes', {
4813
+ sessionName: note.sessionName,
4814
+ delivered: result.success,
4815
+ queuedUntilRegistered: result.queued === true,
4816
+ });
4817
+ }
4818
+ catch (error) {
4819
+ this.logger.warn('Could not remind a restored agent of its owner promise', {
4820
+ sessionName: note.sessionName,
4821
+ error: error instanceof Error ? error.message : String(error),
4822
+ });
4823
+ }
4824
+ }
4825
+ }
4557
4826
  /**
4558
4827
  * Re-deliver the turns the previous shutdown cut off, then clear the file.
4559
4828
  * The file is rewritten after each entry so a restart during this pass
@@ -4561,6 +4830,7 @@ export class CrewlyServer {
4561
4830
  */
4562
4831
  async resumeInterruptedTurnsAfterBoot() {
4563
4832
  const entries = this.interruptedTurnsAtBoot;
4833
+ await this.remindOpenCommitmentsAfterBoot(entries);
4564
4834
  if (entries.length === 0)
4565
4835
  return;
4566
4836
  this.interruptedTurnsAtBoot = [];
@@ -4615,8 +4885,11 @@ export class CrewlyServer {
4615
4885
  try {
4616
4886
  const drain = RestartDrainService.getInstance();
4617
4887
  drain.pauseDelivery(reason);
4618
- const timeoutMs = drainEnabled ? resolveRestartDrainMs(process.env) : 0;
4619
- const result = await drain.drain({ timeoutMs });
4888
+ const budget = this.supervisorStopBudgetMs;
4889
+ const margin = SAFE_RESTART.SHUTDOWN_MARGIN_MS;
4890
+ const timeoutMs = drainEnabled ? capDrainToSupervisor(resolveRestartDrainMs(process.env), budget, margin) : 0;
4891
+ const backgroundTimeoutMs = drainEnabled ? capDrainToSupervisor(resolveBackgroundDrainMs(process.env), budget, margin) : 0;
4892
+ const result = await drain.drain({ timeoutMs, backgroundTimeoutMs });
4620
4893
  if (result.remaining.length > 0) {
4621
4894
  const saved = saveInterruptedTurns(interruptedTurnsPath(this.config.crewlyHome), result.remaining, `${reason}: ${result.outcome}`);
4622
4895
  this.logger.warn('Persisted interrupted agent turns for resume after restart', {
@@ -4834,24 +5107,25 @@ export class CrewlyServer {
4834
5107
  const { createDecisionService, attachDecisionSlackListeners, attachSkipAllCommand } = await import('./services/decisions/decision.wiring.js');
4835
5108
  const { DecisionService } = await import('./services/decisions/decision.service.js');
4836
5109
  const RUNNING = new Set(['running', 'accepted', 'proposed']);
5110
+ const sendToAgent = async (session, text) => {
5111
+ let exists = false;
5112
+ try {
5113
+ exists = getSessionBackendSync()?.sessionExists(session) ?? false;
5114
+ }
5115
+ catch {
5116
+ exists = false;
5117
+ }
5118
+ if (!exists) {
5119
+ const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
5120
+ await activateAgentBySession(this.apiController, session).catch(() => undefined);
5121
+ }
5122
+ const result = await this.apiController.agentRegistrationService.sendMessageToAgent(session, text);
5123
+ return result.success;
5124
+ };
4837
5125
  const decisions = createDecisionService({
4838
5126
  crewlyHome: this.config.crewlyHome,
4839
5127
  getTeams: () => this.storageService.getTeams(),
4840
- sendToAgent: async (session, text) => {
4841
- let exists = false;
4842
- try {
4843
- exists = getSessionBackendSync()?.sessionExists(session) ?? false;
4844
- }
4845
- catch {
4846
- exists = false;
4847
- }
4848
- if (!exists) {
4849
- const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
4850
- await activateAgentBySession(this.apiController, session).catch(() => undefined);
4851
- }
4852
- const result = await this.apiController.agentRegistrationService.sendMessageToAgent(session, text);
4853
- return result.success;
4854
- },
5128
+ sendToAgent,
4855
5129
  sendToOrchestrator: async (text) => {
4856
5130
  this.messageQueueService.enqueue({ content: text, conversationId: 'system', source: 'system_event' });
4857
5131
  return true;
@@ -4880,6 +5154,13 @@ export class CrewlyServer {
4880
5154
  await attachSkipAllCommand(decisions).catch((err) => this.logger.warn('Skip-all command not wired (non-critical)', { error: err instanceof Error ? err.message : String(err) }));
4881
5155
  decisions.start();
4882
5156
  this.logger.info('Decision cards started');
5157
+ // Daily signal digest (#987, specs/2026-10-03-signal-digest.md): Do / Skip
5158
+ // per action on one card; Do opens an experiment ticket.
5159
+ const { createSignalDigestService, attachSignalDigestSlackListeners } = await import('./services/signal-digest/signal-digest.wiring.js');
5160
+ const { SignalDigestService } = await import('./services/signal-digest/signal-digest.service.js');
5161
+ const signalDigests = createSignalDigestService({ crewlyHome: this.config.crewlyHome, getTeams: () => this.storageService.getTeams(), sendToAgent });
5162
+ SignalDigestService.setInstance(signalDigests);
5163
+ attachSignalDigestSlackListeners(signalDigests);
4883
5164
  // Runtime Terms consent (specs/2026-10-01-runtime-terms-consent.md): the
4884
5165
  // owner agrees to a runtime's first-run Terms from a Slack card.
4885
5166
  const { startRuntimeTerms } = await import('./services/runtime-terms/runtime-terms.wiring.js');