crewly 1.20.186 → 1.20.188

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 (321) hide show
  1. package/config/skills/agent/core/project-tickets/SKILL.md +3 -2
  2. package/config/skills/agent/core/project-tickets/execute.sh +4 -4
  3. package/config/skills/agent/core/project-tickets/execute.test.sh +2 -2
  4. package/config/skills/agent/core/remember/SKILL.md +1 -0
  5. package/config/skills/agent/core/remember/execute.sh +12 -0
  6. package/config/skills/agent/core/report-status/SKILL.md +7 -1
  7. package/config/skills/agent/core/report-status/execute.sh +41 -0
  8. package/config/skills/agent/core/slack-post/SKILL.md +1 -0
  9. package/config/skills/agent/core/slack-post/execute.sh +9 -2
  10. package/config/skills/team-leader/_common/lib.sh +45 -0
  11. package/config/skills/team-leader/start-agent/SKILL.md +6 -6
  12. package/config/skills/team-leader/start-agent/execute.sh +3 -12
  13. package/config/skills/team-leader/stop-agent/SKILL.md +6 -6
  14. package/config/skills/team-leader/stop-agent/execute.sh +3 -12
  15. package/dist/backend/backend/src/constants.d.ts +114 -2
  16. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  17. package/dist/backend/backend/src/constants.js +114 -2
  18. package/dist/backend/backend/src/constants.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +62 -0
  21. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
  23. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +5 -1
  25. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +1 -1
  27. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +1 -1
  28. package/dist/backend/backend/src/controllers/request/open-items.controller.js +1 -1
  29. package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -1
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  31. package/dist/backend/backend/src/controllers/slack/slack.controller.js +4 -1
  32. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  33. package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts +18 -1
  34. package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts.map +1 -1
  35. package/dist/backend/backend/src/controllers/standing/standing.controller.js +77 -4
  36. package/dist/backend/backend/src/controllers/standing/standing.controller.js.map +1 -1
  37. package/dist/backend/backend/src/controllers/system/system.controller.d.ts +12 -0
  38. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  39. package/dist/backend/backend/src/controllers/system/system.controller.js +28 -3
  40. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  41. package/dist/backend/backend/src/controllers/system/usage.controller.d.ts +46 -0
  42. package/dist/backend/backend/src/controllers/system/usage.controller.d.ts.map +1 -0
  43. package/dist/backend/backend/src/controllers/system/usage.controller.js +181 -0
  44. package/dist/backend/backend/src/controllers/system/usage.controller.js.map +1 -0
  45. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +7 -0
  46. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  47. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +64 -1
  48. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  49. package/dist/backend/backend/src/index.d.ts +7 -0
  50. package/dist/backend/backend/src/index.d.ts.map +1 -1
  51. package/dist/backend/backend/src/index.js +115 -1
  52. package/dist/backend/backend/src/index.js.map +1 -1
  53. package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
  54. package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
  55. package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
  56. package/dist/backend/backend/src/scripts/open-items-stale-followups.d.ts +51 -0
  57. package/dist/backend/backend/src/scripts/open-items-stale-followups.d.ts.map +1 -0
  58. package/dist/backend/backend/src/scripts/open-items-stale-followups.js +142 -0
  59. package/dist/backend/backend/src/scripts/open-items-stale-followups.js.map +1 -0
  60. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/agent/agent-registration.service.js +32 -1
  62. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  63. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +28 -0
  64. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +83 -2
  66. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  67. package/dist/backend/backend/src/services/memory/memory.service.d.ts +14 -2
  68. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/memory/memory.service.js +12 -1
  70. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts +18 -1
  72. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/memory/project-memory.service.js +38 -1
  74. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
  75. package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts +11 -0
  76. package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/memory/standing-answers.service.js +40 -2
  78. package/dist/backend/backend/src/services/memory/standing-answers.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/messaging/offline-agent-message.d.ts +70 -0
  80. package/dist/backend/backend/src/services/messaging/offline-agent-message.d.ts.map +1 -0
  81. package/dist/backend/backend/src/services/messaging/offline-agent-message.js +92 -0
  82. package/dist/backend/backend/src/services/messaging/offline-agent-message.js.map +1 -0
  83. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +7 -1
  84. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +16 -2
  86. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  87. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +2 -0
  89. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
  90. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  91. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +9 -1
  92. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  93. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +41 -1
  94. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +87 -2
  96. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +30 -12
  98. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  99. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +87 -15
  100. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  101. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts +130 -0
  102. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts.map +1 -0
  103. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js +274 -0
  104. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js.map +1 -0
  105. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts +152 -0
  106. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts.map +1 -0
  107. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js +311 -0
  108. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js.map +1 -0
  109. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +78 -1
  110. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  111. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +96 -4
  112. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  113. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +10 -1
  114. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  115. package/dist/backend/backend/src/services/open-items/open-item-extractor.js +86 -5
  116. package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  117. package/dist/backend/backend/src/services/open-items/open-items-backfill.d.ts +2 -1
  118. package/dist/backend/backend/src/services/open-items/open-items-backfill.d.ts.map +1 -1
  119. package/dist/backend/backend/src/services/open-items/open-items-backfill.js +17 -6
  120. package/dist/backend/backend/src/services/open-items/open-items-backfill.js.map +1 -1
  121. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +62 -1
  122. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  123. package/dist/backend/backend/src/services/open-items/open-items.service.js +203 -9
  124. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  125. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +4 -4
  126. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +1 -1
  128. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
  129. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +4 -3
  130. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +7 -4
  132. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -1
  133. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +40 -9
  134. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +68 -20
  136. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/reconciler/idle-holder-surfacer.d.ts +40 -0
  138. package/dist/backend/backend/src/services/reconciler/idle-holder-surfacer.d.ts.map +1 -0
  139. package/dist/backend/backend/src/services/reconciler/idle-holder-surfacer.js +82 -0
  140. package/dist/backend/backend/src/services/reconciler/idle-holder-surfacer.js.map +1 -0
  141. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +29 -0
  142. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  143. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +49 -0
  144. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  145. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  146. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +6 -11
  147. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  148. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +23 -0
  149. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  150. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +55 -1
  151. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  152. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
  153. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +10 -4
  154. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
  155. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +13 -2
  156. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  157. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +19 -5
  158. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  159. package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts +129 -0
  160. package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts.map +1 -0
  161. package/dist/backend/backend/src/services/spend/spend-cap-command.js +323 -0
  162. package/dist/backend/backend/src/services/spend/spend-cap-command.js.map +1 -0
  163. package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts +60 -0
  164. package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -0
  165. package/dist/backend/backend/src/services/spend/spend-cap.gate.js +66 -0
  166. package/dist/backend/backend/src/services/spend/spend-cap.gate.js.map +1 -0
  167. package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts +340 -0
  168. package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts.map +1 -0
  169. package/dist/backend/backend/src/services/spend/spend-cap.service.js +760 -0
  170. package/dist/backend/backend/src/services/spend/spend-cap.service.js.map +1 -0
  171. package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts +126 -0
  172. package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts.map +1 -0
  173. package/dist/backend/backend/src/services/spend/spend-cap.store.js +141 -0
  174. package/dist/backend/backend/src/services/spend/spend-cap.store.js.map +1 -0
  175. package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts +52 -0
  176. package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts.map +1 -0
  177. package/dist/backend/backend/src/services/spend/spend-cap.wiring.js +112 -0
  178. package/dist/backend/backend/src/services/spend/spend-cap.wiring.js.map +1 -0
  179. package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts +145 -0
  180. package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts.map +1 -0
  181. package/dist/backend/backend/src/services/spend/spend-ledger.service.js +214 -0
  182. package/dist/backend/backend/src/services/spend/spend-ledger.service.js.map +1 -0
  183. package/dist/backend/backend/src/services/task-pool/claim-target-waker.d.ts +51 -0
  184. package/dist/backend/backend/src/services/task-pool/claim-target-waker.d.ts.map +1 -0
  185. package/dist/backend/backend/src/services/task-pool/claim-target-waker.js +43 -0
  186. package/dist/backend/backend/src/services/task-pool/claim-target-waker.js.map +1 -0
  187. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +38 -0
  188. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +73 -1
  190. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  191. package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts +53 -0
  192. package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -0
  193. package/dist/backend/backend/src/services/task-pool/work-item-usage.js +39 -0
  194. package/dist/backend/backend/src/services/task-pool/work-item-usage.js.map +1 -0
  195. package/dist/backend/backend/src/services/usage/token-format.d.ts +49 -0
  196. package/dist/backend/backend/src/services/usage/token-format.d.ts.map +1 -0
  197. package/dist/backend/backend/src/services/usage/token-format.js +81 -0
  198. package/dist/backend/backend/src/services/usage/token-format.js.map +1 -0
  199. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +132 -0
  200. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -0
  201. package/dist/backend/backend/src/services/usage/usage-stats.service.js +226 -0
  202. package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -0
  203. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  204. package/dist/backend/backend/src/services/v3/v3-data.service.js +11 -14
  205. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  206. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +25 -0
  207. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  208. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +50 -0
  209. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  210. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +9 -1
  211. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  212. package/dist/backend/backend/src/services/workflow/scheduler.service.js +16 -2
  213. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  214. package/dist/backend/backend/src/types/decision.types.d.ts +3 -1
  215. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  216. package/dist/backend/backend/src/types/event-bus.types.d.ts +9 -1
  217. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  218. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  219. package/dist/backend/backend/src/types/review-reason.types.d.ts +3 -1
  220. package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -1
  221. package/dist/backend/backend/src/types/review-reason.types.js +1 -0
  222. package/dist/backend/backend/src/types/review-reason.types.js.map +1 -1
  223. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +24 -7
  224. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  225. package/dist/backend/backend/src/types/ticket-autopilot.types.js +29 -13
  226. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
  227. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +5 -1
  228. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  229. package/dist/backend/backend/src/types/v2/open-item.types.js +1 -1
  230. package/dist/backend/backend/src/types/v2/open-item.types.js.map +1 -1
  231. package/dist/backend/build-info.json +2 -2
  232. package/dist/cli/backend/src/constants.d.ts +114 -2
  233. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  234. package/dist/cli/backend/src/constants.js +114 -2
  235. package/dist/cli/backend/src/constants.js.map +1 -1
  236. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  237. package/dist/cli/backend/src/services/agent/agent-registration.service.js +32 -1
  238. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  239. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts +28 -0
  240. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  241. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +83 -2
  242. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  243. package/dist/cli/backend/src/services/memory/memory.service.d.ts +14 -2
  244. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  245. package/dist/cli/backend/src/services/memory/memory.service.js +12 -1
  246. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  247. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +18 -1
  248. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  249. package/dist/cli/backend/src/services/memory/project-memory.service.js +38 -1
  250. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
  251. package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts +11 -0
  252. package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts.map +1 -1
  253. package/dist/cli/backend/src/services/memory/standing-answers.service.js +40 -2
  254. package/dist/cli/backend/src/services/memory/standing-answers.service.js.map +1 -1
  255. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +7 -1
  256. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  257. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +16 -2
  258. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  259. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  260. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +9 -1
  261. package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  262. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +41 -1
  263. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  264. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +87 -2
  265. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  266. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +30 -12
  267. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  268. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +87 -15
  269. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  270. package/dist/cli/backend/src/services/monitoring/model-pricing.d.ts +97 -0
  271. package/dist/cli/backend/src/services/monitoring/model-pricing.d.ts.map +1 -0
  272. package/dist/cli/backend/src/services/monitoring/model-pricing.js +120 -0
  273. package/dist/cli/backend/src/services/monitoring/model-pricing.js.map +1 -0
  274. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +78 -1
  275. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  276. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +96 -4
  277. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  278. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +10 -1
  279. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  280. package/dist/cli/backend/src/services/open-items/open-item-extractor.js +86 -5
  281. package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  282. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +13 -2
  283. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  284. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +19 -5
  285. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  286. package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts +60 -0
  287. package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -0
  288. package/dist/cli/backend/src/services/spend/spend-cap.gate.js +66 -0
  289. package/dist/cli/backend/src/services/spend/spend-cap.gate.js.map +1 -0
  290. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +38 -0
  291. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  292. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +73 -1
  293. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  294. package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts +53 -0
  295. package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -0
  296. package/dist/cli/backend/src/services/task-pool/work-item-usage.js +39 -0
  297. package/dist/cli/backend/src/services/task-pool/work-item-usage.js.map +1 -0
  298. package/dist/cli/backend/src/services/usage/token-format.d.ts +49 -0
  299. package/dist/cli/backend/src/services/usage/token-format.d.ts.map +1 -0
  300. package/dist/cli/backend/src/services/usage/token-format.js +81 -0
  301. package/dist/cli/backend/src/services/usage/token-format.js.map +1 -0
  302. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  303. package/dist/cli/backend/src/services/v3/v3-data.service.js +11 -14
  304. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  305. package/dist/cli/backend/src/types/decision.types.d.ts +3 -1
  306. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  307. package/dist/cli/backend/src/types/event-bus.types.d.ts +9 -1
  308. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  309. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  310. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +24 -7
  311. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  312. package/dist/cli/backend/src/types/ticket-autopilot.types.js +29 -13
  313. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
  314. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +5 -1
  315. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  316. package/dist/cli/backend/src/types/v2/open-item.types.js +1 -1
  317. package/dist/cli/backend/src/types/v2/open-item.types.js.map +1 -1
  318. package/frontend/dist/assets/{index-a79c7852.css → index-20a67829.css} +1 -1
  319. package/frontend/dist/assets/{index-1ee8a9a2.js → index-49f50b45.js} +282 -282
  320. package/frontend/dist/index.html +2 -2
  321. package/package.json +1 -1
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Token amounts for owners: "12.4M tokens" out, "20M" / "500k" / "2000万" in.
3
+ *
4
+ * specs/2026-10-02-spend-cap.md §Token unit
5
+ *
6
+ * @module services/usage/token-format
7
+ */
8
+ import { USAGE_CONSTANTS } from '../../constants.js';
9
+ /**
10
+ * Short token count: `950`, `12.4K`, `12.4M`, `1.2B`.
11
+ *
12
+ * @param tokens - Token count
13
+ * @returns Compact text (no unit)
14
+ *
15
+ * @example
16
+ * compactTokens(12_400_000) // '12.4M'
17
+ */
18
+ export function compactTokens(tokens) {
19
+ const n = Math.max(0, Math.round(Number.isFinite(tokens) ? tokens : 0));
20
+ const units = [
21
+ [1e9, 'B'],
22
+ [1e6, 'M'],
23
+ [1e3, 'K'],
24
+ ];
25
+ for (const [size, suffix] of units) {
26
+ if (n >= size) {
27
+ const v = n / size;
28
+ const text = v >= 100 ? v.toFixed(0) : v.toFixed(1).replace(/\.0$/, '');
29
+ return `${text}${suffix}`;
30
+ }
31
+ }
32
+ return String(n);
33
+ }
34
+ /**
35
+ * Token count for owner text.
36
+ *
37
+ * @param tokens - Token count
38
+ * @returns e.g. `12.4M tokens`
39
+ */
40
+ export function formatTokens(tokens) {
41
+ return `${compactTokens(tokens)} tokens`;
42
+ }
43
+ /**
44
+ * Parse a token amount the owner typed.
45
+ *
46
+ * Accepts a plain number, `K`/`M`/`B` suffixes (any case, `mil`/`million`
47
+ * too), Chinese `万` (10k) / `亿` (100M), commas, and an optional trailing
48
+ * `tokens` / `token`.
49
+ *
50
+ * @param text - Amount text
51
+ * @returns Whole tokens, or null when it is not a positive amount
52
+ *
53
+ * @example
54
+ * parseTokenAmount('20M') // 20_000_000
55
+ * parseTokenAmount('2000万') // 20_000_000
56
+ * parseTokenAmount('1.5b tokens') // 1_500_000_000
57
+ */
58
+ export function parseTokenAmount(text) {
59
+ if (typeof text === 'number')
60
+ return Number.isFinite(text) && text > 0 ? Math.round(text) : null;
61
+ if (typeof text !== 'string')
62
+ return null;
63
+ const t = text.trim().toLowerCase().replace(/,/g, '').replace(/\s*(?:tokens?|个)?\s*$/u, '');
64
+ const m = /^(\d+(?:\.\d+)?)\s*(k|m|mil|million|b|bn|billion|万|亿)?$/u.exec(t);
65
+ if (!m)
66
+ return null;
67
+ const mult = { k: 1e3, m: 1e6, mil: 1e6, million: 1e6, b: 1e9, bn: 1e9, billion: 1e9, 万: 1e4, 亿: 1e8 };
68
+ const n = Number(m[1]) * (m[2] ? mult[m[2]] : 1);
69
+ return Number.isFinite(n) && n >= 1 ? Math.round(n) : null;
70
+ }
71
+ /**
72
+ * Convert a USD setting to tokens with the documented migration rate
73
+ * ({@link USAGE_CONSTANTS.TOKENS_PER_USD}), rounded to a whole thousand.
74
+ *
75
+ * @param usd - Dollars
76
+ * @returns Tokens
77
+ */
78
+ export function usdToTokens(usd) {
79
+ return Math.max(1000, Math.round((usd * USAGE_CONSTANTS.TOKENS_PER_USD) / 1000) * 1000);
80
+ }
81
+ //# sourceMappingURL=token-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-format.js","sourceRoot":"","sources":["../../../../../../backend/src/services/usage/token-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Usage stats — tokens grouped by agent, team, project, work item, runtime
3
+ * or day, over the last N local days (`GET /api/system/usage`).
4
+ *
5
+ * The unit is the token unit ({@link eventTokens}: input incl. cached +
6
+ * output); cached input is reported beside it. Every event lands in exactly
7
+ * one row of a grouping (unattributable usage gets its own row), so each
8
+ * grouping sums to the same total — except `workItem`, which lists the top
9
+ * work items only.
10
+ *
11
+ * Attribution:
12
+ * - team: the session's team membership (the orc and unknown sessions are
13
+ * "(unattributed)");
14
+ * - work item: {@link computeWorkItemUsage} — the agent's usage between the
15
+ * item's start and completion (clipped to the window);
16
+ * - project: the work item running when the event happened, if it names a
17
+ * project (`metadata.projectId`) or its agent's team works on exactly one
18
+ * project; otherwise the session's team when it works on exactly one
19
+ * project; otherwise "(unattributed)".
20
+ *
21
+ * specs/2026-10-02-spend-cap.md §Stats
22
+ *
23
+ * @module services/usage/usage-stats.service
24
+ */
25
+ import { type TokenUsageEvent } from '../monitoring/token-usage.service.js';
26
+ import { type SessionUsageWindowSource } from '../task-pool/work-item-usage.js';
27
+ /** A grouping. */
28
+ export type UsageGroupBy = 'agent' | 'team' | 'project' | 'workItem' | 'runtime' | 'day';
29
+ /** Token figures. */
30
+ export interface UsageTokens {
31
+ /** Input tokens, cached included */
32
+ input: number;
33
+ /** Of `input`, the cached part */
34
+ cachedInput: number;
35
+ output: number;
36
+ /** input + output — the unit caps count */
37
+ total: number;
38
+ /** Usage events (model calls / turns) */
39
+ events: number;
40
+ }
41
+ /** One row of a grouping. */
42
+ export interface UsageRow extends UsageTokens {
43
+ /** Session / team id / project id / work item id / runtime / `YYYY-MM-DD` */
44
+ key: string;
45
+ label: string;
46
+ /** Share of the window total (0–1) */
47
+ share: number;
48
+ /** Dashboard link (work items) */
49
+ link?: string;
50
+ /** Extra facts: `team` / `agent` / `status` / `runtimes` */
51
+ meta?: Record<string, string | string[]>;
52
+ }
53
+ /** What `GET /api/system/usage` returns. */
54
+ export interface UsageStats {
55
+ days: number;
56
+ /** Window start (local midnight), ISO */
57
+ since: string;
58
+ /** Local day of now */
59
+ today: string;
60
+ totals: UsageTokens;
61
+ todayTotals: UsageTokens;
62
+ groupBy: UsageGroupBy[];
63
+ /** Rows of the first grouping */
64
+ rows: UsageRow[];
65
+ /** Rows of every requested grouping */
66
+ groups: Partial<Record<UsageGroupBy, UsageRow[]>>;
67
+ }
68
+ /** A team as stats need it. */
69
+ export interface UsageTeam {
70
+ id: string;
71
+ name: string;
72
+ members: Array<{
73
+ session: string;
74
+ name: string;
75
+ }>;
76
+ projectIds: string[];
77
+ }
78
+ /** A work item as stats need it. */
79
+ export interface UsageWorkItem {
80
+ id: string;
81
+ title: string;
82
+ status: string;
83
+ /** Agent session that ran it */
84
+ target?: string;
85
+ createdAt: string;
86
+ startedAt?: string;
87
+ completedAt?: string;
88
+ metadata?: Record<string, unknown>;
89
+ }
90
+ /** Collaborators. */
91
+ export interface UsageStatsDeps {
92
+ /** The token ledger (TokenUsageService) */
93
+ ledger: SessionUsageWindowSource & {
94
+ forEachEvent(visit: (sessionName: string, event: TokenUsageEvent) => void, since?: Date): void;
95
+ };
96
+ teams: () => Promise<UsageTeam[]>;
97
+ projects: () => Promise<Array<{
98
+ id: string;
99
+ name: string;
100
+ }>>;
101
+ workItems: () => Promise<UsageWorkItem[]>;
102
+ now?: () => Date;
103
+ }
104
+ /**
105
+ * Parse `groupBy` (one value or a comma list).
106
+ *
107
+ * @param raw - Query value
108
+ * @returns Valid groupings (default `agent`)
109
+ */
110
+ export declare function parseGroupBy(raw: unknown): UsageGroupBy[];
111
+ /**
112
+ * Token usage stats.
113
+ */
114
+ export declare class UsageStatsService {
115
+ private readonly deps;
116
+ private readonly now;
117
+ /** @param deps - Collaborators */
118
+ constructor(deps: UsageStatsDeps);
119
+ /**
120
+ * Aggregate the window.
121
+ *
122
+ * @param days - Local days, today included (clamped to 1…MAX_DAYS)
123
+ * @param groupBy - Groupings
124
+ * @returns Stats
125
+ */
126
+ query(days: number, groupBy: UsageGroupBy[]): Promise<UsageStats>;
127
+ /**
128
+ * Top work items in the window by tokens.
129
+ */
130
+ private workItemRows;
131
+ }
132
+ //# sourceMappingURL=usage-stats.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-stats.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/usage/usage-stats.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Usage stats — tokens grouped by agent, team, project, work item, runtime
3
+ * or day, over the last N local days (`GET /api/system/usage`).
4
+ *
5
+ * The unit is the token unit ({@link eventTokens}: input incl. cached +
6
+ * output); cached input is reported beside it. Every event lands in exactly
7
+ * one row of a grouping (unattributable usage gets its own row), so each
8
+ * grouping sums to the same total — except `workItem`, which lists the top
9
+ * work items only.
10
+ *
11
+ * Attribution:
12
+ * - team: the session's team membership (the orc and unknown sessions are
13
+ * "(unattributed)");
14
+ * - work item: {@link computeWorkItemUsage} — the agent's usage between the
15
+ * item's start and completion (clipped to the window);
16
+ * - project: the work item running when the event happened, if it names a
17
+ * project (`metadata.projectId`) or its agent's team works on exactly one
18
+ * project; otherwise the session's team when it works on exactly one
19
+ * project; otherwise "(unattributed)".
20
+ *
21
+ * specs/2026-10-02-spend-cap.md §Stats
22
+ *
23
+ * @module services/usage/usage-stats.service
24
+ */
25
+ import { ORCHESTRATOR_SESSION_NAME, SPEND_CAP_CONSTANTS, USAGE_CONSTANTS as U } from '../../constants.js';
26
+ import { eventTokens } from '../monitoring/token-usage.service.js';
27
+ import { localDateKey } from '../project-tickets/ticket-autopilot-decision.js';
28
+ import { runtimeOfEvent, windowDays } from '../spend/spend-ledger.service.js';
29
+ import { computeWorkItemUsage } from '../task-pool/work-item-usage.js';
30
+ /** Zero figures. */
31
+ function zero() {
32
+ return { input: 0, cachedInput: 0, output: 0, total: 0, events: 0 };
33
+ }
34
+ /** Add one event's tokens. */
35
+ function add(into, e) {
36
+ const t = eventTokens(e);
37
+ into.input += t.input;
38
+ into.cachedInput += t.cachedInput;
39
+ into.output += t.output;
40
+ into.total += t.total;
41
+ into.events += 1;
42
+ }
43
+ /**
44
+ * Parse `groupBy` (one value or a comma list).
45
+ *
46
+ * @param raw - Query value
47
+ * @returns Valid groupings (default `agent`)
48
+ */
49
+ export function parseGroupBy(raw) {
50
+ const parts = String(raw ?? '')
51
+ .split(',')
52
+ .map((s) => s.trim())
53
+ .filter((s) => U.GROUP_BY.includes(s));
54
+ return parts.length > 0 ? [...new Set(parts)] : ['agent'];
55
+ }
56
+ /**
57
+ * Token usage stats.
58
+ */
59
+ export class UsageStatsService {
60
+ deps;
61
+ now;
62
+ /** @param deps - Collaborators */
63
+ constructor(deps) {
64
+ this.deps = deps;
65
+ this.now = deps.now ?? (() => new Date());
66
+ }
67
+ /**
68
+ * Aggregate the window.
69
+ *
70
+ * @param days - Local days, today included (clamped to 1…MAX_DAYS)
71
+ * @param groupBy - Groupings
72
+ * @returns Stats
73
+ */
74
+ async query(days, groupBy) {
75
+ const now = this.now();
76
+ const n = Math.min(SPEND_CAP_CONSTANTS.MAX_DAYS, Math.max(1, Math.floor(Number.isFinite(days) ? days : SPEND_CAP_CONSTANTS.DEFAULT_DAYS)));
77
+ const { since } = windowDays(now, n);
78
+ const today = localDateKey(now);
79
+ const [teams, projects, items] = await Promise.all([
80
+ this.deps.teams().catch(() => []),
81
+ this.deps.projects().catch(() => []),
82
+ groupBy.includes('workItem') || groupBy.includes('project') ? this.deps.workItems().catch(() => []) : Promise.resolve([]),
83
+ ]);
84
+ const teamOf = new Map();
85
+ const nameOf = new Map([[ORCHESTRATOR_SESSION_NAME, 'Orc']]);
86
+ for (const t of teams) {
87
+ for (const m of t.members) {
88
+ if (!m.session)
89
+ continue;
90
+ if (!teamOf.has(m.session))
91
+ teamOf.set(m.session, t);
92
+ nameOf.set(m.session, m.name || m.session);
93
+ }
94
+ }
95
+ const projectName = new Map(projects.map((p) => [p.id, p.name]));
96
+ const teamProject = (t) => (t && t.projectIds.length === 1 ? t.projectIds[0] : null);
97
+ // Work item windows per session, for project attribution.
98
+ const windows = new Map();
99
+ for (const wi of items) {
100
+ if (!wi.target)
101
+ continue;
102
+ const pid = typeof wi.metadata?.projectId === 'string' ? wi.metadata.projectId : teamProject(teamOf.get(wi.target));
103
+ if (!pid)
104
+ continue;
105
+ const start = new Date(wi.startedAt ?? wi.createdAt).getTime();
106
+ const end = wi.completedAt ? new Date(wi.completedAt).getTime() : now.getTime();
107
+ if (!Number.isFinite(start) || !Number.isFinite(end) || end < start)
108
+ continue;
109
+ const list = windows.get(wi.target) ?? [];
110
+ list.push({ start, end, projectId: pid });
111
+ windows.set(wi.target, list);
112
+ }
113
+ for (const list of windows.values())
114
+ list.sort((a, b) => b.start - a.start);
115
+ const projectOfEvent = (session, ms) => {
116
+ const hit = windows.get(session)?.find((w) => w.start <= ms && ms <= w.end);
117
+ return hit?.projectId ?? teamProject(teamOf.get(session));
118
+ };
119
+ const totals = zero();
120
+ const todayTotals = zero();
121
+ const buckets = new Map();
122
+ const bucketOf = (g, key, label, meta) => {
123
+ let map = buckets.get(g);
124
+ if (!map) {
125
+ map = new Map();
126
+ buckets.set(g, map);
127
+ }
128
+ let row = map.get(key);
129
+ if (!row) {
130
+ row = { key, label, share: 0, ...zero(), ...(meta ? { meta } : {}) };
131
+ map.set(key, row);
132
+ }
133
+ return row;
134
+ };
135
+ const eventGroupings = groupBy.filter((g) => g !== 'workItem');
136
+ const runtimesOf = new Map();
137
+ this.deps.ledger.forEachEvent((session, e) => {
138
+ const ms = new Date(e.timestamp).getTime();
139
+ if (!Number.isFinite(ms) || ms > now.getTime())
140
+ return;
141
+ add(totals, e);
142
+ const day = localDateKey(new Date(ms));
143
+ if (day === today)
144
+ add(todayTotals, e);
145
+ const runtime = runtimeOfEvent(e);
146
+ runtimesOf.set(session, (runtimesOf.get(session) ?? new Set()).add(runtime));
147
+ for (const g of eventGroupings) {
148
+ let row;
149
+ if (g === 'agent') {
150
+ const team = teamOf.get(session);
151
+ row = bucketOf(g, session, nameOf.get(session) ?? session, team ? { team: team.name } : undefined);
152
+ }
153
+ else if (g === 'team') {
154
+ const team = teamOf.get(session);
155
+ row = team ? bucketOf(g, team.id, team.name) : bucketOf(g, U.UNATTRIBUTED, session === ORCHESTRATOR_SESSION_NAME ? 'Orc (no team)' : U.UNATTRIBUTED);
156
+ }
157
+ else if (g === 'runtime') {
158
+ row = bucketOf(g, runtime, runtime);
159
+ }
160
+ else if (g === 'day') {
161
+ row = bucketOf(g, day, day);
162
+ }
163
+ else {
164
+ const pid = projectOfEvent(session, ms);
165
+ row = pid ? bucketOf(g, pid, projectName.get(pid) ?? pid) : bucketOf(g, U.UNATTRIBUTED, U.UNATTRIBUTED);
166
+ }
167
+ add(row, e);
168
+ }
169
+ }, since);
170
+ const groups = {};
171
+ for (const g of groupBy) {
172
+ let rows;
173
+ if (g === 'workItem') {
174
+ rows = this.workItemRows(items, since, now, teamOf, nameOf);
175
+ }
176
+ else {
177
+ rows = [...(buckets.get(g)?.values() ?? [])];
178
+ if (g === 'agent')
179
+ for (const r of rows)
180
+ r.meta = { ...(r.meta ?? {}), runtimes: [...(runtimesOf.get(r.key) ?? [])].sort() };
181
+ if (g === 'day')
182
+ rows.sort((a, b) => a.key.localeCompare(b.key));
183
+ else
184
+ rows.sort((a, b) => b.total - a.total);
185
+ }
186
+ for (const r of rows)
187
+ r.share = totals.total > 0 ? r.total / totals.total : 0;
188
+ groups[g] = rows;
189
+ }
190
+ return { days: n, since: since.toISOString(), today, totals, todayTotals, groupBy, rows: groups[groupBy[0]] ?? [], groups };
191
+ }
192
+ /**
193
+ * Top work items in the window by tokens.
194
+ */
195
+ workItemRows(items, since, now, teamOf, nameOf) {
196
+ const rows = [];
197
+ for (const wi of items) {
198
+ if (!wi.target)
199
+ continue;
200
+ const startMs = new Date(wi.startedAt ?? wi.createdAt).getTime();
201
+ const endMs = wi.completedAt ? new Date(wi.completedAt).getTime() : now.getTime();
202
+ if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < since.getTime() || startMs > now.getTime())
203
+ continue;
204
+ const clipped = { createdAt: wi.createdAt, startedAt: new Date(Math.max(startMs, since.getTime())).toISOString(), completedAt: wi.completedAt };
205
+ const usage = computeWorkItemUsage(clipped, wi.target, this.deps.ledger, now);
206
+ if (!usage || usage.totalTokens <= 0)
207
+ continue;
208
+ const team = teamOf.get(wi.target);
209
+ rows.push({
210
+ key: wi.id,
211
+ label: wi.title || wi.id,
212
+ share: 0,
213
+ input: usage.totalTokens - usage.outputTokens,
214
+ cachedInput: usage.cachedInputTokens,
215
+ output: usage.outputTokens,
216
+ total: usage.totalTokens,
217
+ events: 0,
218
+ link: `/workitems/${wi.id}`,
219
+ meta: { agent: nameOf.get(wi.target) ?? wi.target, status: wi.status, ...(team ? { team: team.name } : {}) },
220
+ });
221
+ }
222
+ rows.sort((a, b) => b.total - a.total);
223
+ return rows.slice(0, U.MAX_WORK_ITEM_ROWS);
224
+ }
225
+ }
226
+ //# sourceMappingURL=usage-stats.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-stats.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/usage/usage-stats.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"v3-data.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/v3-data.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v3-data.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/v3-data.service.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ import { isValidRequestTransition } from '../../types/v2/request.types.js';
33
33
  import { classifyIntentLevel, classifyIntentCategory, } from '../../types/intent-task.types.js';
34
34
  import { ensureDir, atomicWriteJson } from '../../utils/file-io.utils.js';
35
35
  import { TokenUsageService } from '../monitoring/token-usage.service.js';
36
+ import { computeWorkItemUsage } from '../task-pool/work-item-usage.js';
36
37
  import { collectRequestWorkItems, evaluateRequestCompletion, } from './request-completion.js';
37
38
  import * as path from 'path';
38
39
  // ---------------------------------------------------------------------------
@@ -260,23 +261,19 @@ export class V3DataService {
260
261
  ...(event.sessionName ? { session: event.sessionName } : {}),
261
262
  via: 'v3-data:task-completed',
262
263
  });
263
- // Look up token usage for this work item
264
+ // Token usage for this work item: the session's usage while the item
265
+ // ran, not the session's cumulative total (#812).
264
266
  try {
265
- const tokenUsageService = TokenUsageService.getInstance();
266
- const sessionUsage = tokenUsageService.getUsageBySessions();
267
- // Find usage for the agent session that completed this task
268
- const sessionSummary = sessionUsage.find(s => s.sessionName === event.sessionName);
269
- if (sessionSummary) {
270
- const totalInput = sessionSummary.totalInput || 0;
271
- const totalOutput = sessionSummary.totalOutput || 0;
272
- const totalCost = sessionSummary.cost || 0;
273
- if (totalInput > 0 || totalOutput > 0) {
274
- await taskPool.updateTokenUsage(match.id, totalInput, totalOutput, totalCost);
267
+ if (event.sessionName) {
268
+ // `match` was read before completion, so the window ends now.
269
+ const usage = computeWorkItemUsage(match, event.sessionName, TokenUsageService.getInstance());
270
+ if (usage && (usage.inputTokens > 0 || usage.outputTokens > 0)) {
271
+ await taskPool.updateTokenUsage(match.id, usage.inputTokens, usage.outputTokens, usage.cost);
275
272
  this.logger.debug('Updated WorkItem token usage', {
276
273
  workItemId: match.id,
277
- inputTokens: totalInput,
278
- outputTokens: totalOutput,
279
- cost: totalCost,
274
+ inputTokens: usage.inputTokens,
275
+ outputTokens: usage.outputTokens,
276
+ cost: usage.cost,
280
277
  });
281
278
  }
282
279
  }