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
@@ -224,6 +224,13 @@ api_call() {
224
224
  local args=(-s -w '\n%{http_code}' -X "$method" -H "Content-Type: application/json")
225
225
  # Include agent session identity header for heartbeat tracking
226
226
  # Use ${VAR:-} pattern to avoid 'unbound variable' error under set -u (nounset)
227
+ # The agent badge (#999): the credential that makes the backend treat this
228
+ # call as this agent. Injected by the harness at launch; without it the
229
+ # session header alone is accepted for one release only. Never the owner
230
+ # either way.
231
+ if [ -n "${CREWLY_AGENT_BADGE:-}" ]; then
232
+ args+=(-H "X-Agent-Badge: $CREWLY_AGENT_BADGE")
233
+ fi
227
234
  if [ -n "${CREWLY_SESSION_NAME:-}" ]; then
228
235
  args+=(-H "X-Agent-Session: $CREWLY_SESSION_NAME")
229
236
  # This shell's pid: the backend walks its parents to the agent PTY it
@@ -433,11 +440,27 @@ auto_remember() {
433
440
  # The background curl is non-blocking (~5ms) and errors are silently ignored.
434
441
  # -----------------------------------------------------------------------------
435
442
  _skill_heartbeat() {
436
- curl -s -X POST "${CREWLY_API_URL}/api/heartbeat" \
437
- -H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}" \
438
- -H "X-Agent-Pid: $$" \
439
- -H "Content-Type: application/json" \
440
- -d '{"source":"skill-start"}' >/dev/null 2>&1 &
443
+ local hb_args=(-s -X POST "${CREWLY_API_URL}/api/heartbeat"
444
+ -H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}"
445
+ -H "X-Agent-Pid: $$"
446
+ -H "Content-Type: application/json")
447
+ [ -n "${CREWLY_AGENT_BADGE:-}" ] && hb_args+=(-H "X-Agent-Badge: $CREWLY_AGENT_BADGE")
448
+ curl "${hb_args[@]}" -d '{"source":"skill-start"}' >/dev/null 2>&1 &
449
+ }
450
+
451
+ # -----------------------------------------------------------------------------
452
+ # agent_auth_curl_args
453
+ #
454
+ # For a skill that calls the backend with its own `curl` instead of api_call:
455
+ # prints the identity headers as curl arguments, one per line, so they can be
456
+ # read into an array without word-splitting surprises:
457
+ # mapfile -t AUTH < <(agent_auth_curl_args) # bash 4+
458
+ # while IFS= read -r a; do AUTH+=("$a"); done < <(agent_auth_curl_args) # bash 3.2
459
+ # curl "${AUTH[@]}" ...
460
+ # -----------------------------------------------------------------------------
461
+ agent_auth_curl_args() {
462
+ if [ -n "${CREWLY_AGENT_BADGE:-}" ]; then printf '%s\n' -H "X-Agent-Badge: $CREWLY_AGENT_BADGE"; fi
463
+ if [ -n "${CREWLY_SESSION_NAME:-}" ]; then printf '%s\n' -H "X-Agent-Session: $CREWLY_SESSION_NAME"; fi
441
464
  }
442
465
 
443
466
  # Auto-heartbeat on skill entry when running inside a Crewly agent session
@@ -3,7 +3,7 @@
3
3
  # Tests for lib.sh — shared skills library
4
4
  # Covers: --file preprocessor, read_json_input, require_param, error_exit,
5
5
  # api_call output cap (CREWLY_SKILL_MAX_OUTPUT_BYTES),
6
- # CREWLY_API_URL default (#777)
6
+ # CREWLY_API_URL default (#777), agent badge header (#999)
7
7
  # =============================================================================
8
8
  set -euo pipefail
9
9
 
@@ -88,6 +88,11 @@ SKILL_EOF
88
88
  chmod +x "$TEMP_DIR/test_read_json.sh"
89
89
 
90
90
  export LIB_PATH="$SCRIPT_DIR/lib.sh"
91
+ # Sourcing lib.sh with CREWLY_SESSION_NAME set fires a real skill-start
92
+ # heartbeat (curl in the background). Point it at a closed port so a test
93
+ # run never writes to a Crewly backend running on this machine — it used to
94
+ # post heartbeats for the fake sessions here to the live :8787.
95
+ export CREWLY_API_URL="http://127.0.0.1:9"
91
96
 
92
97
  echo "=== lib.sh Test Suite ==="
93
98
  echo ""
@@ -315,6 +320,32 @@ assert_eq "lib.sh: default API URL without WEB_PORT is 8787" "http://localhost:8
315
320
  RESULT=$(CREWLY_API_URL=http://localhost:9001 WEB_PORT=8797 bash -c 'source "$1"; echo "$CREWLY_API_URL"' _ "$SCRIPT_DIR/lib.sh")
316
321
  assert_eq "lib.sh: CREWLY_API_URL set by the backend wins" "http://localhost:9001" "$RESULT"
317
322
 
323
+ # ---- Test 28: api_call sends the agent badge (#999) ----
324
+ mkdir -p "$TEMP_DIR/skills/fake-badge"
325
+ cat > "$TEMP_DIR/skills/fake-badge/execute.sh" << 'SKILL_EOF'
326
+ #!/bin/bash
327
+ set -euo pipefail
328
+ source "$LIB_PATH"
329
+ # Record every argument curl got, one per line, then answer 200.
330
+ curl() {
331
+ printf '%s\n' "$@" > "$ARGS_OUT"
332
+ printf '%s\n%s' '{"ok":true}' 200
333
+ }
334
+ api_call POST "/decisions" '{}'
335
+ SKILL_EOF
336
+ chmod +x "$TEMP_DIR/skills/fake-badge/execute.sh"
337
+ export ARGS_OUT="$TEMP_DIR/curl-args.txt"
338
+ CREWLY_SESSION_NAME=dev-1 CREWLY_AGENT_BADGE=cab1.ZGV2LTE.sig bash "$TEMP_DIR/skills/fake-badge/execute.sh" >/dev/null 2>&1
339
+ assert_contains "api_call: sends X-Agent-Badge when the harness set CREWLY_AGENT_BADGE" "X-Agent-Badge: cab1.ZGV2LTE.sig" "$(cat "$ARGS_OUT")"
340
+ assert_contains "api_call: still sends X-Agent-Session" "X-Agent-Session: dev-1" "$(cat "$ARGS_OUT")"
341
+ env -u CREWLY_AGENT_BADGE CREWLY_SESSION_NAME=dev-1 bash "$TEMP_DIR/skills/fake-badge/execute.sh" >/dev/null 2>&1
342
+ assert_eq "api_call: no badge header when there is no badge" "0" "$(grep -c 'X-Agent-Badge' "$ARGS_OUT" || true)"
343
+
344
+ # ---- Test 29: agent_auth_curl_args for skills that run their own curl ----
345
+ RESULT=$(CREWLY_SESSION_NAME=dev-1 CREWLY_AGENT_BADGE=b1 bash -c 'source "$1"; agent_auth_curl_args' _ "$SCRIPT_DIR/lib.sh" 2>/dev/null)
346
+ assert_eq "agent_auth_curl_args: badge and session as curl args" "$(printf '%s\n' -H 'X-Agent-Badge: b1' -H 'X-Agent-Session: dev-1')" "$RESULT"
347
+ unset ARGS_OUT
348
+
318
349
  echo ""
319
350
  echo "=== Results: $PASS/$TOTAL passed, $FAIL failed ==="
320
351
 
@@ -182,6 +182,12 @@ bash execute.sh '{"action":"find","mode":"color","target":"0,120,215"}'
182
182
  ```
183
183
  Returns screen coordinates of found elements. Use with click to interact.
184
184
 
185
+ ### click-text -- Find on-screen text and click it in one step
186
+ ```bash
187
+ bash execute.sh '{"action":"click-text","target":"Export"}'
188
+ ```
189
+ Runs `find` in `text` mode and clicks the match; returns `success:false` with `"Text not found"` when nothing matches.
190
+
185
191
  **Modes:**
186
192
  - **button** -- Finds bright/white rectangular regions (buttons, panels, input fields) by scanning for horizontal runs of light pixels (r,g,b > 200) wider than 100px, then clustering vertically adjacent runs into distinct elements.
187
193
  - **avatar** -- Finds colored circles in the center half of the screen (account avatars, profile icons) by detecting saturated pixels, then clusters them and offsets coordinates rightward to target adjacent text/labels.
@@ -73,6 +73,8 @@ API_URL="${CREWLY_API_URL:-http://localhost:${CREWLY_PORT}}"
73
73
  RESPONSE=$(curl -s -w "\n%{http_code}" \
74
74
  -X POST \
75
75
  -H "Content-Type: application/json" \
76
+ -H "X-Agent-Badge: ${CREWLY_AGENT_BADGE:-}" \
77
+ -H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}" \
76
78
  -d "$BODY" \
77
79
  "${API_URL}/api/intent-tasks/batch" 2>&1) || {
78
80
  echo "{\"success\":false,\"error\":\"Failed to connect to backend at ${API_URL}\"}"
@@ -88,6 +88,8 @@ API_URL="${CREWLY_API_URL:-http://localhost:${CREWLY_PORT}}"
88
88
  RESPONSE=$(curl -s -w "\n%{http_code}" \
89
89
  -X POST \
90
90
  -H "Content-Type: application/json" \
91
+ -H "X-Agent-Badge: ${CREWLY_AGENT_BADGE:-}" \
92
+ -H "X-Agent-Session: ${CREWLY_SESSION_NAME:-}" \
91
93
  -d "$BODY" \
92
94
  "${API_URL}/api/intent-tasks/decompose" 2>&1) || {
93
95
  echo "{\"success\":false,\"error\":\"Failed to connect to backend at ${API_URL}\"}"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: Experiment Card
3
3
  description: Attach an experiment to an optimisation ticket — hypothesis ("change X → metric Y from a to b"), a Search Console or GA4 metric (via seo-ops), an observation window (default 14 days). Crewly captures the baseline when the change ships, measures it when the window ends, labels it worked / didn't / inconclusive, resolves your prediction, writes the wiki experiment log and tells the owner.
4
- version: 1.0.0
4
+ version: 1.2.0
5
5
  category: analysis
6
6
  skillType: claude-skill
7
7
  assignableRoles:
@@ -41,7 +41,10 @@ Crewly does the rest:
41
41
 
42
42
  1. **Ship** — when the linked ticket reaches `done` (or you run `ship`), the
43
43
  windows are fixed and the **baseline** is fetched right away: the
44
- `windowDays` days that had settled before the ship day.
44
+ `windowDays` days that had settled before the ship day. The ship time is
45
+ the ticket's move to `done` in its log. If you link a ticket that is
46
+ already done and its log has no done time, `create` asks for
47
+ `--shipped-at` (when the change went live).
45
48
  2. **Wait** — the observation window is the `windowDays` days after the ship
46
49
  day. Nothing to do; don't re-check it by hand.
47
50
  3. **Measure** — once those days have settled (Search Console +3 days, GA4
@@ -76,12 +79,42 @@ bash execute.sh create --hypothesis "3-field inquiry form → submissions from 8
76
79
  - gsc measures: `clicks`, `impressions`, `ctr`, `position` (lower is better;
77
80
  direction defaults to `decrease`). Filters: `--page URL`, `--query Q`,
78
81
  `--page-match` / `--query-match exact|contains`.
79
- - ga4 measures: `sessions` (Organic Search unless `--channel all`) and
80
- `events` (`--event NAME`). Filter: `--page /landing-path`.
82
+ - ga4 measures: `sessions` (Organic Search unless `--channel all`),
83
+ `events` (`--event NAME`) and `conversions` (GA4 key events; `--event NAME`
84
+ for one of them). Filter: `--page /landing-path` (a full URL is reduced to
85
+ its path; the query string is dropped).
81
86
  - `--window-days` 7–90, whole weeks preferred (default 14).
82
87
  - One experiment per change: two changes on the same page in one window
83
88
  can't be told apart.
84
89
 
90
+ ## Measure a ticket-autopilot period (owner / orchestrator / team lead)
91
+
92
+ When the owner lets a project's ticket autopilot drive a feature, one card
93
+ measures both the business number and how autonomous the run was:
94
+
95
+ ```bash
96
+ bash execute.sh create --autopilot --project <project id> --label feed \
97
+ --hypothesis "Autopilot drives /feed for 4 weeks → feed card clicks up" \
98
+ --source ga4 --measure events --event feed_card_click --channel all \
99
+ --config /abs/path/ce.seo-ops.json --metric-label "Feed card clicks" \
100
+ --metric "ga4:sessions:page=/feed,pageMatch=contains,channel=all" \
101
+ --window-days 28 [--started-at ISO]
102
+ ```
103
+
104
+ - **Start** is now (or `--started-at`); the baseline is the equal window
105
+ before it. The card is `running` right away.
106
+ - `--label` (with `--autopilot`): only tickets carrying that label count in
107
+ the process numbers. Use `--metric-label` to name the metric.
108
+ - `--metric "source:measure:key=value,…"` (repeatable): more outcome
109
+ metrics, each with its own baseline, result and verdict. Keys: `page`,
110
+ `pageMatch`, `query`, `queryMatch`, `event`, `channel`, `label`, `config`
111
+ (default: `--config`). The primary metric gives the verdict.
112
+ - **Process**: tickets shipped, owner touches per ticket, stall time and $
113
+ per shipped ticket, from the autopilot stats of the same windows.
114
+ - The owner gets one short note a week while it runs, and the full result
115
+ (outcome verdicts + process) at the end. Everything is in the timeline.
116
+ - While it runs, the team lead's daily autopilot retro is on by default.
117
+
85
118
  ## Follow it
86
119
 
87
120
  ```bash
@@ -93,4 +126,4 @@ bash execute.sh cancel --id EXP-3 --reason "change reverted"
93
126
  ```
94
127
 
95
128
  If a fetch keeps failing (credentials, property access) the owner is told
96
- once with the error; it keeps retrying.
129
+ once with the error; after 6 failures in a row it retries once a day.
@@ -10,7 +10,9 @@
10
10
  # [--page P] [--page-match exact|contains] [--query Q] [--query-match exact|contains]
11
11
  # [--event NAME] [--channel all] [--label "…"] [--title "…"]
12
12
  # [--from A] [--to B] [--direction increase|decrease] [--window-days 14]
13
- # [--confidence 0.6] [--project P --ticket ID | --tkt TKT-12]
13
+ # [--confidence 0.6] [--project P --ticket ID | --tkt TKT-12] [--shipped-at ISO]
14
+ # bash execute.sh create --autopilot --project P [--label feed] [--started-at ISO] --hypothesis "…"
15
+ # --source … --measure … --config … [--metric "ga4:sessions:page=/feed,pageMatch=contains"] …
14
16
  # bash execute.sh ship --id EXP-3 [--shipped-at ISO]
15
17
  # bash execute.sh show --id EXP-3
16
18
  # bash execute.sh list [--status planned|running|done|cancelled] [--ticket ID]
@@ -28,8 +30,16 @@ Usage:
28
30
  bash execute.sh create --hypothesis "change X → metric Y from a to b" --source gsc|ga4 --measure M
29
31
  --config /abs/path/seo-ops.config.json [filters] [--from A] [--to B]
30
32
  [--window-days 14] [--confidence 0.6] [--project P --ticket ID | --tkt TKT-12]
33
+ [--shipped-at ISO] (required when the ticket is already done but has no recorded done time)
34
+ bash execute.sh create --autopilot --project P [--label feed] [--started-at ISO] --hypothesis "…"
35
+ --source S --measure M --config /abs/seo-ops.config.json [filters]
36
+ [--metric "source:measure:key=value,key=value" …] [--window-days 28]
37
+ Measure a period of ticket-autopilot work on project P: the primary metric
38
+ (and each --metric) before vs after the start, plus the process (tickets
39
+ shipped, owner touches per ticket, stall time, $ per shipped ticket).
40
+ --label: only tickets with this label; --metric-label names the metric
31
41
  gsc measures: clicks impressions ctr position (filters: --page URL --query Q, --page-match/--query-match exact|contains)
32
- ga4 measures: sessions events (filters: --page /path, --event NAME, --channel all)
42
+ ga4 measures: sessions events conversions (filters: --page /path, --event NAME, --channel all)
33
43
  bash execute.sh ship --id EXP-3 [--shipped-at ISO] The change is live (automatic when the ticket is done)
34
44
  bash execute.sh show --id EXP-3 Card, baseline, result and timeline
35
45
  bash execute.sh list [--status S] [--ticket ID]
@@ -42,6 +52,7 @@ ACTION=""; ID=""; JSON_BODY=""
42
52
  HYPOTHESIS=""; TITLE=""; SOURCE=""; MEASURE=""; CONFIG=""; PAGE=""; PAGE_MATCH=""; QUERY=""; QUERY_MATCH=""
43
53
  EVENT=""; CHANNEL=""; LABEL=""; FROM=""; TO=""; DIRECTION=""; WINDOW=""; CONFIDENCE=""; PROJECT=""; TICKET=""; TKT=""
44
54
  SHIPPED_AT=""; STATUS=""; REASON=""
55
+ AUTOPILOT=""; STARTED_AT=""; METRIC_LABEL=""; EXTRA_METRICS="[]"
45
56
 
46
57
  if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
47
58
  J=$(read_json_input "$1"); shift
@@ -51,7 +62,7 @@ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
51
62
  STATUS=$(printf '%s' "$J" | jq -r '.status // empty')
52
63
  REASON=$(printf '%s' "$J" | jq -r '.reason // empty')
53
64
  TICKET=$(printf '%s' "$J" | jq -r 'if (.ticket|type) == "string" then .ticket else empty end')
54
- JSON_BODY=$(printf '%s' "$J" | jq -c 'del(.action, .id, .shippedAt, .status, .reason)')
65
+ JSON_BODY=$(printf '%s' "$J" | jq -c 'del(.action, .id, .status, .reason)')
55
66
  fi
56
67
  if [[ -z "$ACTION" && $# -gt 0 && ${1:0:1} != '-' ]]; then ACTION="$1"; shift; fi
57
68
 
@@ -79,6 +90,16 @@ while [[ $# -gt 0 ]]; do
79
90
  --ticket) [ $# -ge 2 ] || error_exit "--ticket requires a value"; TICKET="$2"; shift 2 ;;
80
91
  --tkt) [ $# -ge 2 ] || error_exit "--tkt requires a value"; TKT="$2"; shift 2 ;;
81
92
  --shipped-at) [ $# -ge 2 ] || error_exit "--shipped-at requires a value"; SHIPPED_AT="$2"; shift 2 ;;
93
+ --autopilot) AUTOPILOT=1; shift ;;
94
+ --started-at) [ $# -ge 2 ] || error_exit "--started-at requires a value"; STARTED_AT="$2"; shift 2 ;;
95
+ --metric-label) [ $# -ge 2 ] || error_exit "--metric-label requires a value"; METRIC_LABEL="$2"; shift 2 ;;
96
+ --metric) [ $# -ge 2 ] || error_exit "--metric requires \"source:measure:key=value,…\""
97
+ M=$(jq -cn --arg s "$2" '($s | capture("^(?<source>[^:]+):(?<measure>[^:]+)(:(?<rest>.*))?$")) as $c
98
+ | {source: $c.source, measure: $c.measure}
99
+ + (($c.rest // "") | split(",") | map(select(length > 0) | capture("^(?<k>[^=]+)=(?<v>.*)$") | {(.k): .v}) | add // {})') \
100
+ || M=""
101
+ [ -n "$M" ] || error_exit "--metric must look like ga4:sessions:page=/feed,pageMatch=contains"
102
+ EXTRA_METRICS=$(jq -c --argjson m "$M" '. + [$m]' <<<"$EXTRA_METRICS"); shift 2 ;;
82
103
  --status) [ $# -ge 2 ] || error_exit "--status requires a value"; STATUS="$2"; shift 2 ;;
83
104
  --reason) [ $# -ge 2 ] || error_exit "--reason requires a value"; REASON="$2"; shift 2 ;;
84
105
  --help|-h) print_usage; exit 0 ;;
@@ -87,7 +108,8 @@ while [[ $# -gt 0 ]]; do
87
108
  done
88
109
 
89
110
  enc() { jq -rn --arg v "$1" '$v|@uri'; }
90
- CARD='{id, status, title, hypothesis, metric: (.metric | {source, measure, page, query, event, label} | with_entries(select(.value != null))), windowDays, ticket, shippedAt, dueAt, baseline: (.baseline.total // null), result: (.result.total // null), verdict, verdictReason, lastError, traceId}'
111
+ CARD='{id, status, title, hypothesis, metric: (.metric | {source, measure, page, query, event, label} | with_entries(select(.value != null))), windowDays, ticket, shippedAt, dueAt, baseline: (.baseline.total // null), result: (.result.total // null), verdict, verdictReason, lastError, traceId}
112
+ + (if .autopilot then {autopilot: (.autopilot | {projectName, label, outcomes: [.outcomes[]? | {metric: (.metric | {source, measure, page, event}), baseline: (.baseline.total // null), result: (.result.total // null), verdict}], processBaseline, processResult, checkIns})} else {} end)'
91
113
 
92
114
  case "$ACTION" in
93
115
  create)
@@ -99,6 +121,14 @@ case "$ACTION" in
99
121
  require_param "measure (--measure)" "$MEASURE"
100
122
  require_param "config (--config, the seo-ops site config)" "$CONFIG"
101
123
  if [ -n "$TICKET" ] && [ -z "$PROJECT" ]; then error_exit "--ticket needs --project (or use --tkt TKT-n for a harness ticket)"; fi
124
+ if [ -n "$AUTOPILOT" ]; then
125
+ require_param "project (--project, the autopilot project)" "$PROJECT"
126
+ [ -z "$TICKET" ] || error_exit "--autopilot measures a period of the project's work; leave out --ticket"
127
+ AP_LABEL="$LABEL"; LABEL="$METRIC_LABEL"; AP_PROJECT="$PROJECT"; PROJECT=""
128
+ else
129
+ [ "$EXTRA_METRICS" = "[]" ] || error_exit "--metric (extra outcome metrics) needs --autopilot"
130
+ [ -z "$METRIC_LABEL" ] || LABEL="$METRIC_LABEL"
131
+ fi
102
132
  BODY=$(jq -cn \
103
133
  --arg h "$HYPOTHESIS" --arg t "$TITLE" --arg s "$SOURCE" --arg m "$MEASURE" --arg c "$CONFIG" \
104
134
  --arg page "$PAGE" --arg pm "$PAGE_MATCH" --arg q "$QUERY" --arg qm "$QUERY_MATCH" --arg ev "$EVENT" \
@@ -116,6 +146,12 @@ case "$ACTION" in
116
146
  elif $tic != "" then {ticket: {kind: "project", project: $proj, id: $tic}}
117
147
  else {} end)')
118
148
  fi
149
+ if [ -n "$AUTOPILOT" ] && [ -n "${AP_PROJECT:-}" ]; then
150
+ BODY=$(printf '%s' "$BODY" | jq -c --arg p "$AP_PROJECT" --arg l "${AP_LABEL:-}" --argjson m "$EXTRA_METRICS" \
151
+ '. + {autopilot: ({project: $p} + (if $l != "" then {label: $l} else {} end))} + (if ($m | length) > 0 then {metrics: $m} else {} end)')
152
+ fi
153
+ if [ -n "$STARTED_AT" ]; then BODY=$(printf '%s' "$BODY" | jq -c --arg at "$STARTED_AT" '. + {startedAt: $at}'); fi
154
+ if [ -n "$SHIPPED_AT" ]; then BODY=$(printf '%s' "$BODY" | jq -c --arg at "$SHIPPED_AT" '. + {shippedAt: $at}'); fi
119
155
  api_call POST "/experiments" "$BODY" | jq "{success, experiment: (.data | ${CARD})}"
120
156
  ;;
121
157
  ship)
@@ -64,6 +64,23 @@ check "create ga4: body" "$(last '.body | tostring')" '{"hypothesis":"Shorter fo
64
64
  run '{"action":"create","hypothesis":"J","metric":{"source":"gsc","measure":"ctr","config":"/c.json"}}' >/dev/null
65
65
  check "create json: body" "$(last '.body | tostring')" '{"hypothesis":"J","metric":{"source":"gsc","measure":"ctr","config":"/c.json"}}'
66
66
 
67
+ # --- create on an already-done ticket with an explicit ship time ---
68
+ run create --hypothesis "Late card" --source gsc --measure clicks --config /c.json --project ce --ticket T-9 --shipped-at 2026-10-01T10:00:00Z >/dev/null
69
+ check "create shipped-at: body" "$(last '.body.shippedAt')" "2026-10-01T10:00:00Z"
70
+ run '{"action":"create","hypothesis":"J","metric":{"source":"gsc","measure":"ctr","config":"/c.json"},"shippedAt":"2026-10-01T10:00:00Z"}' >/dev/null
71
+ check "create json shipped-at: body" "$(last '.body.shippedAt')" "2026-10-01T10:00:00Z"
72
+
73
+ # --- autopilot scope: project + label, extra outcome metrics, start time ---
74
+ run create --autopilot --project 7667a919 --label feed --started-at 2026-10-03T00:00:00Z \
75
+ --hypothesis "Autopilot on /feed → feed clicks up" --source ga4 --measure events --event feed_card_click --channel all --config /c.json \
76
+ --metric "ga4:sessions:page=/feed,pageMatch=contains,channel=all" --metric "gsc:clicks:page=https://visa.careerengine.us/feed,pageMatch=contains" \
77
+ --metric-label "Feed card clicks" --window-days 28 >/dev/null
78
+ check "autopilot: body" "$(last '.body | tostring')" '{"hypothesis":"Autopilot on /feed → feed clicks up","metric":{"source":"ga4","measure":"events","config":"/c.json","event":"feed_card_click","channel":"all","label":"Feed card clicks"},"windowDays":"28","autopilot":{"project":"7667a919","label":"feed"},"metrics":[{"source":"ga4","measure":"sessions","page":"/feed","pageMatch":"contains","channel":"all"},{"source":"gsc","measure":"clicks","page":"https://visa.careerengine.us/feed","pageMatch":"contains"}],"startedAt":"2026-10-03T00:00:00Z"}'
79
+ check "autopilot: needs project" "$(run_err create --autopilot --hypothesis h --source gsc --measure clicks --config /c | grep -c 'project')" "1"
80
+ check "autopilot: no ticket" "$(run_err create --autopilot --project p --ticket T-1 --hypothesis h --source gsc --measure clicks --config /c | grep -c 'leave out --ticket')" "1"
81
+ check "metric needs autopilot" "$(run_err create --hypothesis h --source gsc --measure clicks --config /c --metric gsc:clicks | grep -c 'needs --autopilot')" "1"
82
+ check "bad metric spec" "$(run_err create --autopilot --project p --hypothesis h --source gsc --measure clicks --config /c --metric nonsense | grep -c 'must look like')" "1"
83
+
67
84
  # --- missing params / a ticket without its project ---
68
85
  check "create: missing" "$(run_err create --hypothesis h --source gsc --measure clicks | grep -c 'config')" "1"
69
86
  check "create: ticket w/o project" "$(run_err create --hypothesis h --source gsc --measure clicks --config /c --ticket T-1 | grep -c 'needs --project')" "1"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: Project Tickets
3
- description: A project's own backlog — list, read, create, update, claim, release, assign, link, log and ask-owner (structured decision cards) on project tickets (markdown files in <project>/.crewly/tickets/, tracked in git), plus the per-project ticket autopilot switch.
4
- version: 1.0.0
3
+ description: A project's own backlog — list, read, create, update, claim, release, assign, link, log and ask-owner (structured decision cards) on project tickets (markdown files in <project>/.crewly/tickets/, tracked in git), plus the per-project ticket autopilot switch, its stats and the daily retro.
4
+ version: 1.1.0
5
5
  category: task-management
6
6
  skillType: claude-skill
7
7
  assignableRoles:
@@ -189,3 +189,36 @@ split, ask the owner, or cancel), pauses for the day at the daily token budget
189
189
  sends the owner the batched questions plus one evening digest. Only switch it
190
190
  on when the owner asked for it. Refused for anyone but the owner and the
191
191
  orchestrator.
192
+
193
+ `--retro on|off|default` switches the team lead's daily retro (default: on
194
+ while an autopilot experiment on the project is running).
195
+
196
+ ## Autopilot numbers and retro (owner / orchestrator / team lead)
197
+
198
+ ```bash
199
+ bash execute.sh stats --project P [--days 14] [--label feed] # per day + total
200
+ bash execute.sh runs --project P [--days 7] [--label feed] # run trace + ticket traces per day
201
+ ```
202
+
203
+ `stats` counts tickets triaged / started / done (worker finished) / verified
204
+ (ticket done) / sent back / stalled, cycle times, owner touches by kind,
205
+ stalls by cause, harness interventions, traced tokens and $ against the daily
206
+ budget, and time paused on the budget. Read a day's run with `trace-read
207
+ --trace <runTraceId>`.
208
+
209
+ Once a day (09:00) the driver gets an `autopilot_retro` WorkItem for the
210
+ previous day. File it with:
211
+
212
+ ```bash
213
+ bash execute.sh retro --project P --day 2026-10-02 \
214
+ --summary "Shipped CE-12 and CE-14. CE-15 stalled 3h waiting on the owner for the copy." \
215
+ --problem "owner_dependency|CE-15 waited 3h for copy approval|Decision D-40 open 3h|tr-20261002-ab12cd34" \
216
+ --problem "harness_gap|Triage brief listed a stopped member as busy"
217
+ ```
218
+
219
+ `--problem "class|title|detail|evidence"`, class one of `agent_judgment`,
220
+ `missing_skill`, `harness_gap`, `owner_dependency`. Crewly writes the retro to
221
+ the project wiki (`llm-curated/autopilot-retros/<day>.md`); harness gaps
222
+ become backlog tickets on the Crewly project, deduplicated and at most 3 a
223
+ day, and the owner approves them with one card. Never file harness gaps as
224
+ tickets yourself.
@@ -23,6 +23,10 @@
23
23
  # bash execute.sh ask-owner --project P --id APP-12 --clear [--note "answer"]
24
24
  # bash execute.sh autopilot --project P [--on|--off] [--driver <session>|--driver default]
25
25
  # [--daily-budget <tokens, e.g. 20M>] [--max-in-flight <n>] (owner / orchestrator)
26
+ # [--retro on|off|default]
27
+ # bash execute.sh stats --project P [--days 14] [--label feed] (owner / orc / lead)
28
+ # bash execute.sh runs --project P [--days 7] [--label feed] (owner / orc / lead)
29
+ # bash execute.sh retro --project P --day YYYY-MM-DD --summary "…" [--problem "class|title|detail|evidence" …]
26
30
  # bash execute.sh '{"action":"create","project":"P","title":"…"}'
27
31
  #
28
32
  # P = project id, name, or absolute path.
@@ -58,9 +62,23 @@ Usage:
58
62
  bash execute.sh ask-owner --project P --id APP-12 --clear [--note "answer"]
59
63
  The owner answered: remove the needs-owner mark
60
64
  bash execute.sh autopilot --project P [--on|--off] [--driver <session>|default]
61
- [--daily-budget <tokens, e.g. 20M>] [--max-in-flight <n>]
65
+ [--daily-budget <tokens, e.g. 20M>] [--max-in-flight <n>] [--retro on|off|default]
62
66
  Owner / orchestrator: show or change the ticket
63
- autopilot (no flags = show)
67
+ autopilot (no flags = show). --retro: the lead's
68
+ daily retro (default: on while an autopilot
69
+ experiment runs)
70
+ bash execute.sh stats --project P [--days 14] [--label feed]
71
+ Autopilot numbers per day: tickets triaged /
72
+ started / done / verified / sent back / stalled,
73
+ cycle times, owner touches, stalls by cause,
74
+ interventions, cost vs the daily budget
75
+ bash execute.sh runs --project P [--days 7] [--label feed]
76
+ Run trace + ticket traces per day (for trace-read)
77
+ bash execute.sh retro --project P --day YYYY-MM-DD --summary "what shipped, where it stalled, why"
78
+ [--problem "class|title|detail|evidence" …]
79
+ Team lead: file the daily autopilot retro.
80
+ class = agent_judgment | missing_skill |
81
+ harness_gap | owner_dependency
64
82
 
65
83
  P = project id, name or absolute path. Workers' new tickets start in backlog;
66
84
  the owner, the orchestrator or a team lead makes them ready.
@@ -72,6 +90,7 @@ STATUS=""; SOURCE=""; REQUEST_ID=""; NOTE=""; OWNER_REVIEW=""; ASSIGNEE=""; STAR
72
90
  ACCEPTANCE_JSON="null"
73
91
  HAS_DESCRIPTION=0
74
92
  QUESTION=""; CLEAR=""; OPTIONS_JSON="[]"; DEFAULT_OPT=""; DEADLINE=""; SENSITIVE=""; AP_ENABLED=""; AP_DRIVER=""; AP_BUDGET=""; AP_MAX=""
93
+ AP_RETRO=""; DAYS=""; LABEL=""; DAY=""; SUMMARY=""; PROBLEMS_JSON="[]"
75
94
 
76
95
  if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
77
96
  J="$1"; shift
@@ -104,6 +123,12 @@ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
104
123
  AP_DRIVER=$(printf '%s' "$J" | jq -r '.driver // empty')
105
124
  AP_BUDGET=$(printf '%s' "$J" | jq -r '.dailyBudgetTokens // empty')
106
125
  AP_MAX=$(printf '%s' "$J" | jq -r '.maxInFlightPerMember // empty')
126
+ AP_RETRO=$(printf '%s' "$J" | jq -r 'if (.retro|type) == "boolean" then (if .retro then "on" else "off" end) else (.retro // empty) end')
127
+ DAYS=$(printf '%s' "$J" | jq -r '.days // empty')
128
+ LABEL=$(printf '%s' "$J" | jq -r '.label // empty')
129
+ DAY=$(printf '%s' "$J" | jq -r '.day // empty')
130
+ SUMMARY=$(printf '%s' "$J" | jq -r '.summary // empty')
131
+ PROBLEMS_JSON=$(printf '%s' "$J" | jq -c 'if (.problems|type) == "array" then .problems else [] end')
107
132
  fi
108
133
  if [[ -z "$ACTION" && $# -gt 0 && ${1:0:1} != '-' ]]; then ACTION="$1"; shift; fi
109
134
 
@@ -140,13 +165,20 @@ while [[ $# -gt 0 ]]; do
140
165
  --daily-budget|--budget)
141
166
  [ $# -ge 2 ] || error_exit "--daily-budget requires a value"; AP_BUDGET="$2"; shift 2 ;;
142
167
  --max-in-flight) [ $# -ge 2 ] || error_exit "--max-in-flight requires a value"; AP_MAX="$2"; shift 2 ;;
168
+ --retro) [ $# -ge 2 ] || error_exit "--retro requires on, off or default"; AP_RETRO="$2"; shift 2 ;;
169
+ --days) [ $# -ge 2 ] || error_exit "--days requires a value"; DAYS="$2"; shift 2 ;;
170
+ --label) [ $# -ge 2 ] || error_exit "--label requires a value"; LABEL="$2"; shift 2 ;;
171
+ --day) [ $# -ge 2 ] || error_exit "--day requires a value"; DAY="$2"; shift 2 ;;
172
+ --summary) [ $# -ge 2 ] || error_exit "--summary requires a value"; SUMMARY="$2"; shift 2 ;;
173
+ --problem) [ $# -ge 2 ] || error_exit "--problem requires \"class|title|detail|evidence\""
174
+ PROBLEMS_JSON=$(jq -c --arg p "$2" '. + [($p | split("|")) as $f | {class: ($f[0] // "" | gsub("^\\s+|\\s+$"; "")), title: ($f[1] // "")} + (if ($f[2] // "") != "" then {detail: $f[2]} else {} end) + (if ($f[3:] | join("|")) != "" then {evidence: ($f[3:] | join("|"))} else {} end)]' <<<"$PROBLEMS_JSON"); shift 2 ;;
143
175
  --full) shift ;;
144
176
  --help|-h) print_usage; exit 0 ;;
145
177
  *) error_exit "Unknown option: $1" ;;
146
178
  esac
147
179
  done
148
180
 
149
- [ -n "$ACTION" ] || { print_usage >&2; error_exit "Missing action: list | show | create | update | claim | release | assign | log | link | ask-owner | autopilot"; }
181
+ [ -n "$ACTION" ] || { print_usage >&2; error_exit "Missing action: list | show | create | update | claim | release | assign | log | link | ask-owner | autopilot | stats | runs | retro"; }
150
182
 
151
183
  # URL-encode a path segment (project paths contain slashes).
152
184
  enc() { jq -rn --arg v "$1" '$v|@uri'; }
@@ -250,19 +282,40 @@ case "$ACTION" in
250
282
  ;;
251
283
  autopilot)
252
284
  require_param "project" "$PROJECT"
253
- if [ -z "$AP_ENABLED$AP_DRIVER$AP_BUDGET$AP_MAX" ]; then
285
+ if [ -z "$AP_ENABLED$AP_DRIVER$AP_BUDGET$AP_MAX$AP_RETRO" ]; then
254
286
  api_call GET "/project-ticket-autopilot/$(enc "$PROJECT")" | jq '{success, autopilot: .data}'
255
287
  else
256
- BODY=$(jq -n --arg enabled "$AP_ENABLED" --arg driver "$AP_DRIVER" --arg budget "$AP_BUDGET" --arg max "$AP_MAX" \
288
+ BODY=$(jq -n --arg enabled "$AP_ENABLED" --arg driver "$AP_DRIVER" --arg budget "$AP_BUDGET" --arg max "$AP_MAX" --arg retro "$AP_RETRO" \
257
289
  '{}
258
290
  + (if $enabled != "" then {enabled: ($enabled == "true")} else {} end)
291
+ + (if $retro == "default" then {retro: null} elif $retro != "" then {retro: $retro} else {} end)
259
292
  + (if $driver == "default" then {driver: null} elif $driver != "" then {driver: $driver} else {} end)
260
293
  + (if $budget == "default" then {dailyBudgetTokens: null} elif $budget != "" then {dailyBudgetTokens: ($budget | tonumber? // $budget)} else {} end)
261
294
  + (if $max == "default" then {maxInFlightPerMember: null} elif $max != "" then {maxInFlightPerMember: ($max | tonumber? // $max)} else {} end)')
262
295
  api_call POST "/project-ticket-autopilot/$(enc "$PROJECT")" "$BODY" | jq '{success, autopilot: .data}'
263
296
  fi
264
297
  ;;
298
+ stats|runs)
299
+ require_param "project" "$PROJECT"
300
+ QS=""
301
+ [ -n "$DAYS" ] && QS="days=$(enc "$DAYS")"
302
+ [ -n "$LABEL" ] && QS="${QS:+$QS&}label=$(enc "$LABEL")"
303
+ if [ "$ACTION" = "stats" ]; then
304
+ api_call GET "/project-ticket-autopilot/$(enc "$PROJECT")/stats${QS:+?$QS}" \
305
+ | jq '{success, stats: (.data | if . == null then null else {project, label, range, pausedForToday, total, labels,
306
+ days: [.days[] | {day, triaged, started, done, verified, sentBack, stalled, ownerTouches: .ownerTouches.total, stallMs: .stalls.totalMs, costUsd, pausedMs, runTraceId}]} end)}'
307
+ else
308
+ api_call GET "/project-ticket-autopilot/$(enc "$PROJECT")/runs${QS:+?$QS}" | jq '{success, runs: .data}'
309
+ fi
310
+ ;;
311
+ retro)
312
+ require_param "project" "$PROJECT"
313
+ require_param "day (--day YYYY-MM-DD)" "$DAY"
314
+ require_param "summary (--summary)" "$SUMMARY"
315
+ BODY=$(jq -n --arg d "$DAY" --arg s "$SUMMARY" --argjson p "$PROBLEMS_JSON" '{day: $d, summary: $s, problems: $p}')
316
+ api_call POST "/project-ticket-autopilot/$(enc "$PROJECT")/retro" "$BODY" | jq '{success, retro: .data, error}'
317
+ ;;
265
318
  *)
266
- error_exit "Unknown action: $ACTION (use list | show | create | update | claim | release | assign | log | link | ask-owner | autopilot)"
319
+ error_exit "Unknown action: $ACTION (use list | show | create | update | claim | release | assign | log | link | ask-owner | autopilot | stats | runs | retro)"
267
320
  ;;
268
321
  esac
@@ -31,6 +31,13 @@ class H(BaseHTTPRequestHandler):
31
31
  if self.path.count('/') >= 4 and not self.path.split('?')[0].endswith('%2Fapp'):
32
32
  return self.reply(200, {'success': True, 'data': T})
33
33
  return self.reply(200, {'success': True, 'data': {'project': {'id': 'p1'}, 'tickets': [T], 'invalid': []}})
34
+ if self.path.startswith('/api/project-ticket-autopilot/') and '/stats' in self.path:
35
+ day = {'day': '2026-10-02', 'triaged': 3, 'started': 2, 'done': 2, 'verified': 1, 'sentBack': 0, 'stalled': 1,
36
+ 'ownerTouches': {'total': 2}, 'stalls': {'totalMs': 60000}, 'costUsd': 1.5, 'pausedMs': 0, 'runTraceId': 'tr-x', 'extra': 1}
37
+ return self.reply(200, {'success': True, 'data': {'project': {'id': 'p1'}, 'label': 'feed', 'range': {}, 'pausedForToday': False,
38
+ 'total': {'verified': 1}, 'labels': ['feed'], 'days': [day]}})
39
+ if self.path.startswith('/api/project-ticket-autopilot/') and '/runs' in self.path:
40
+ return self.reply(200, {'success': True, 'data': {'project': {'id': 'p1'}, 'days': [{'day': '2026-10-02', 'runTraceId': 'tr-x', 'traces': []}]}})
34
41
  if self.path.startswith('/api/project-ticket-autopilot/'):
35
42
  return self.reply(200, {'success': True, 'data': {'settings': {'enabled': False}}})
36
43
  if self.path.startswith('/api/project-tickets'):
@@ -147,6 +154,23 @@ check "autopilot off: body" "$(last '.body | tostring')" '{"enabled":false,"driv
147
154
  run '{"action":"autopilot","project":"p1","enabled":true,"driver":"ce-owen"}' >/dev/null
148
155
  check "autopilot json: body" "$(last '.body | tostring')" '{"enabled":true,"driver":"ce-owen"}'
149
156
 
157
+ run autopilot --project p1 --retro on >/dev/null
158
+ check "autopilot retro on: body" "$(last '.body | tostring')" '{"retro":"on"}'
159
+ run autopilot --project p1 --retro default >/dev/null
160
+ check "autopilot retro default: body" "$(last '.body | tostring')" '{"retro":null}'
161
+
162
+ # --- stats / runs / retro (specs/2026-10-03-autopilot-experiments.md) ---
163
+ OUT=$(run stats --project p1 --days 7 --label feed)
164
+ check "stats: path" "$(last .path)" "/api/project-ticket-autopilot/p1/stats?days=7&label=feed"
165
+ check "stats: day row" "$(printf '%s' "$OUT" | jq -c '.stats.days[0] | [.day, .verified, .ownerTouches, .stallMs, .runTraceId, has("extra")]')" '["2026-10-02",1,2,60000,"tr-x",false]'
166
+ OUT=$(run runs --project p1)
167
+ check "runs: path" "$(last .path)" "/api/project-ticket-autopilot/p1/runs"
168
+ check "runs: output" "$(printf '%s' "$OUT" | jq -c '.runs.days[0].runTraceId')" '"tr-x"'
169
+ run retro --project p1 --day 2026-10-02 --summary "Shipped CE-1; CE-2 stalled on the owner." --problem "owner_dependency|CE-2 waited for copy|D-4 open 3h|tr-a" --problem "harness_gap|Triage listed a stopped member as busy" >/dev/null
170
+ check "retro: path" "$(last .path)" "/api/project-ticket-autopilot/p1/retro"
171
+ check "retro: body" "$(last '.body | tostring')" '{"day":"2026-10-02","summary":"Shipped CE-1; CE-2 stalled on the owner.","problems":[{"class":"owner_dependency","title":"CE-2 waited for copy","detail":"D-4 open 3h","evidence":"tr-a"},{"class":"harness_gap","title":"Triage listed a stopped member as busy"}]}'
172
+ check "retro: missing day" "$(run_err retro --project p1 --summary x | grep -c 'day')" "1"
173
+
150
174
  # --- errors ---
151
175
  check "missing action" "$(run_err | grep -c 'Missing action')" "1"
152
176
  check "unknown action" "$(run_err explode | grep -c 'Unknown action')" "1"
@@ -39,7 +39,23 @@ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
39
39
  shift || true
40
40
  fi
41
41
 
42
+ # A value flag at the end of the line (or followed by another of this skill's
43
+ # flags) has no value: say so instead of failing on an unset "$2". Any other
44
+ # value is kept, so a message may still start with "-".
45
+ flag_value() {
46
+ if [[ $# -lt 2 ]]; then
47
+ error_exit "Flag $1 needs a value, e.g. $1 <value>. Use --help for usage."
48
+ fi
49
+ case "$2" in
50
+ --to|-t|--message|-m|--message-file|--json|-j|--help|-h)
51
+ error_exit "Flag $1 needs a value, e.g. $1 <value>. Use --help for usage." ;;
52
+ esac
53
+ }
54
+
42
55
  while [[ $# -gt 0 ]]; do
56
+ case "$1" in
57
+ --to|-t|--message|-m|--message-file|--json|-j) flag_value "$@" ;;
58
+ esac
43
59
  case "$1" in
44
60
  --to|-t)
45
61
  TO="$2"
@@ -12,6 +12,7 @@
12
12
  # queued, not delivered, with a do-not-resend note (#937)
13
13
  # 4. another queued answer is reported as queued, not delivered
14
14
  # 5. an HTTP error still fails the skill
15
+ # 6. a value flag with no value prints a clear error (#997)
15
16
 
16
17
  set -euo pipefail
17
18
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -76,6 +77,15 @@ else
76
77
  echo " PASS: an HTTP error fails the skill"; PASS=$((PASS + 1))
77
78
  fi
78
79
 
80
+ OUT=$(bash "$RUN" --to 2>&1 >/dev/null || true)
81
+ check "--to with no value names the flag" "$OUT" 'Flag --to needs a value'
82
+
83
+ OUT=$(bash "$RUN" --to qa-1 --message 2>&1 >/dev/null || true)
84
+ check "--message with no value names the flag" "$OUT" 'Flag --message needs a value'
85
+
86
+ OUT=$(bash "$RUN" --to --message hi 2>&1 >/dev/null || true)
87
+ check "--to followed by another flag is refused" "$OUT" 'Flag --to needs a value'
88
+
79
89
  echo ""
80
90
  echo "Results: $PASS passed, $FAIL failed"
81
91
  [ "$FAIL" -eq 0 ]