crewly 1.20.302 → 1.20.304

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 (276) hide show
  1. package/config/roles/developer/prompt.md +7 -0
  2. package/config/roles/fullstack-dev/prompt.md +7 -0
  3. package/config/roles/product-manager/prompt.md +7 -0
  4. package/config/skills/orchestrator/move-team/SKILL.md +53 -0
  5. package/config/skills/orchestrator/move-team/execute.sh +42 -0
  6. package/config/skills/orchestrator/usage-categories/SKILL.md +59 -0
  7. package/config/skills/orchestrator/usage-categories/execute.sh +81 -0
  8. package/config/skills/orchestrator/usage-categories/execute.test.sh +45 -0
  9. package/config/skills/orchestrator/usage-report/SKILL.md +71 -0
  10. package/config/skills/orchestrator/usage-report/execute.sh +84 -0
  11. package/config/skills/orchestrator/usage-report/execute.test.sh +39 -0
  12. package/config/skills/team-leader/usage-report/SKILL.md +71 -0
  13. package/config/skills/team-leader/usage-report/execute.sh +84 -0
  14. package/config/skills/team-leader/usage-report/execute.test.sh +39 -0
  15. package/dist/backend/backend/src/constants.d.ts +80 -0
  16. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  17. package/dist/backend/backend/src/constants.js +80 -0
  18. package/dist/backend/backend/src/constants.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts +45 -0
  20. package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts.map +1 -0
  21. package/dist/backend/backend/src/controllers/team-move/team-move.controller.js +214 -0
  22. package/dist/backend/backend/src/controllers/team-move/team-move.controller.js.map +1 -0
  23. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.d.ts +36 -0
  24. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.d.ts.map +1 -0
  25. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.js +158 -0
  26. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.controller.js.map +1 -0
  27. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.d.ts +15 -0
  28. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.d.ts.map +1 -0
  29. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.js +26 -0
  30. package/dist/backend/backend/src/controllers/usage-ledger/usage-ledger.routes.js.map +1 -0
  31. package/dist/backend/backend/src/index.d.ts +10 -0
  32. package/dist/backend/backend/src/index.d.ts.map +1 -1
  33. package/dist/backend/backend/src/index.js +97 -20
  34. package/dist/backend/backend/src/index.js.map +1 -1
  35. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  36. package/dist/backend/backend/src/routes/api.routes.js +6 -0
  37. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  38. package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts +32 -0
  39. package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/agent/follow-through.wiring.js +42 -1
  41. package/dist/backend/backend/src/services/agent/follow-through.wiring.js.map +1 -1
  42. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +26 -6
  43. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/resource-mode.service.js +59 -5
  45. package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  47. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
  49. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  50. package/dist/backend/backend/src/services/core/storage.service.d.ts +18 -0
  51. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/core/storage.service.js +16 -0
  53. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  54. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +19 -0
  55. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/decisions/decision.service.js +46 -0
  57. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +35 -0
  59. package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +101 -0
  61. package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -1
  62. package/dist/backend/backend/src/services/monitoring/background-work-watchdog.d.ts +58 -0
  63. package/dist/backend/backend/src/services/monitoring/background-work-watchdog.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/monitoring/background-work-watchdog.js +100 -0
  65. package/dist/backend/backend/src/services/monitoring/background-work-watchdog.js.map +1 -0
  66. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +3 -0
  68. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  69. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +7 -0
  70. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +15 -0
  72. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  73. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
  75. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  76. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  77. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +25 -0
  79. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  80. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +24 -0
  81. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +63 -1
  83. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  84. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
  85. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +41 -0
  87. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  88. package/dist/backend/backend/src/services/team-move/team-move-archive.d.ts +122 -0
  89. package/dist/backend/backend/src/services/team-move/team-move-archive.d.ts.map +1 -0
  90. package/dist/backend/backend/src/services/team-move/team-move-archive.js +202 -0
  91. package/dist/backend/backend/src/services/team-move/team-move-archive.js.map +1 -0
  92. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +59 -0
  93. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -0
  94. package/dist/backend/backend/src/services/team-move/team-move-chat.js +133 -0
  95. package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -0
  96. package/dist/backend/backend/src/services/team-move/team-move-cloud.client.d.ts +102 -0
  97. package/dist/backend/backend/src/services/team-move/team-move-cloud.client.d.ts.map +1 -0
  98. package/dist/backend/backend/src/services/team-move/team-move-cloud.client.js +217 -0
  99. package/dist/backend/backend/src/services/team-move/team-move-cloud.client.js.map +1 -0
  100. package/dist/backend/backend/src/services/team-move/team-move-crypto.d.ts +102 -0
  101. package/dist/backend/backend/src/services/team-move/team-move-crypto.d.ts.map +1 -0
  102. package/dist/backend/backend/src/services/team-move/team-move-crypto.js +348 -0
  103. package/dist/backend/backend/src/services/team-move/team-move-crypto.js.map +1 -0
  104. package/dist/backend/backend/src/services/team-move/team-move-driver.service.d.ts +209 -0
  105. package/dist/backend/backend/src/services/team-move/team-move-driver.service.d.ts.map +1 -0
  106. package/dist/backend/backend/src/services/team-move/team-move-driver.service.js +504 -0
  107. package/dist/backend/backend/src/services/team-move/team-move-driver.service.js.map +1 -0
  108. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +156 -0
  109. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -0
  110. package/dist/backend/backend/src/services/team-move/team-move-exporter.js +462 -0
  111. package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -0
  112. package/dist/backend/backend/src/services/team-move/team-move-fs.d.ts +157 -0
  113. package/dist/backend/backend/src/services/team-move/team-move-fs.d.ts.map +1 -0
  114. package/dist/backend/backend/src/services/team-move/team-move-fs.js +298 -0
  115. package/dist/backend/backend/src/services/team-move/team-move-fs.js.map +1 -0
  116. package/dist/backend/backend/src/services/team-move/team-move-git.d.ts +69 -0
  117. package/dist/backend/backend/src/services/team-move/team-move-git.d.ts.map +1 -0
  118. package/dist/backend/backend/src/services/team-move/team-move-git.js +198 -0
  119. package/dist/backend/backend/src/services/team-move/team-move-git.js.map +1 -0
  120. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +121 -0
  121. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -0
  122. package/dist/backend/backend/src/services/team-move/team-move-importer.js +462 -0
  123. package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -0
  124. package/dist/backend/backend/src/services/team-move/team-move-journal.d.ts +110 -0
  125. package/dist/backend/backend/src/services/team-move/team-move-journal.d.ts.map +1 -0
  126. package/dist/backend/backend/src/services/team-move/team-move-journal.js +198 -0
  127. package/dist/backend/backend/src/services/team-move/team-move-journal.js.map +1 -0
  128. package/dist/backend/backend/src/services/team-move/team-move-preflight.d.ts +71 -0
  129. package/dist/backend/backend/src/services/team-move/team-move-preflight.d.ts.map +1 -0
  130. package/dist/backend/backend/src/services/team-move/team-move-preflight.js +102 -0
  131. package/dist/backend/backend/src/services/team-move/team-move-preflight.js.map +1 -0
  132. package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts +29 -0
  133. package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -0
  134. package/dist/backend/backend/src/services/team-move/team-move-runtime.js +173 -0
  135. package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -0
  136. package/dist/backend/backend/src/services/team-move/team-move-secret-scan.d.ts +50 -0
  137. package/dist/backend/backend/src/services/team-move/team-move-secret-scan.d.ts.map +1 -0
  138. package/dist/backend/backend/src/services/team-move/team-move-secret-scan.js +96 -0
  139. package/dist/backend/backend/src/services/team-move/team-move-secret-scan.js.map +1 -0
  140. package/dist/backend/backend/src/services/team-move/team-move-select.d.ts +94 -0
  141. package/dist/backend/backend/src/services/team-move/team-move-select.d.ts.map +1 -0
  142. package/dist/backend/backend/src/services/team-move/team-move-select.js +124 -0
  143. package/dist/backend/backend/src/services/team-move/team-move-select.js.map +1 -0
  144. package/dist/backend/backend/src/services/team-move/team-move.fixture.d.ts +46 -0
  145. package/dist/backend/backend/src/services/team-move/team-move.fixture.d.ts.map +1 -0
  146. package/dist/backend/backend/src/services/team-move/team-move.fixture.js +202 -0
  147. package/dist/backend/backend/src/services/team-move/team-move.fixture.js.map +1 -0
  148. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +269 -0
  149. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -0
  150. package/dist/backend/backend/src/services/team-move/team-move.types.js +44 -0
  151. package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -0
  152. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +42 -2
  153. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
  154. package/dist/backend/backend/src/services/trace/trace-context.service.js +66 -5
  155. package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -1
  156. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -1
  157. package/dist/backend/backend/src/services/trace/trace-recorder.js +11 -0
  158. package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -1
  159. package/dist/backend/backend/src/services/usage-ledger/categories-param.d.ts +28 -0
  160. package/dist/backend/backend/src/services/usage-ledger/categories-param.d.ts.map +1 -0
  161. package/dist/backend/backend/src/services/usage-ledger/categories-param.js +67 -0
  162. package/dist/backend/backend/src/services/usage-ledger/categories-param.js.map +1 -0
  163. package/dist/backend/backend/src/services/usage-ledger/excerpt.d.ts +37 -0
  164. package/dist/backend/backend/src/services/usage-ledger/excerpt.d.ts.map +1 -0
  165. package/dist/backend/backend/src/services/usage-ledger/excerpt.js +49 -0
  166. package/dist/backend/backend/src/services/usage-ledger/excerpt.js.map +1 -0
  167. package/dist/backend/backend/src/services/usage-ledger/index.d.ts +14 -0
  168. package/dist/backend/backend/src/services/usage-ledger/index.d.ts.map +1 -0
  169. package/dist/backend/backend/src/services/usage-ledger/index.js +14 -0
  170. package/dist/backend/backend/src/services/usage-ledger/index.js.map +1 -0
  171. package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.d.ts +44 -0
  172. package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.d.ts.map +1 -0
  173. package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.js +52 -0
  174. package/dist/backend/backend/src/services/usage-ledger/ledger-hooks.js.map +1 -0
  175. package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.d.ts +100 -0
  176. package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.d.ts.map +1 -0
  177. package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.js +189 -0
  178. package/dist/backend/backend/src/services/usage-ledger/ledger-rollup.js.map +1 -0
  179. package/dist/backend/backend/src/services/usage-ledger/owner-spans.d.ts +41 -0
  180. package/dist/backend/backend/src/services/usage-ledger/owner-spans.d.ts.map +1 -0
  181. package/dist/backend/backend/src/services/usage-ledger/owner-spans.js +71 -0
  182. package/dist/backend/backend/src/services/usage-ledger/owner-spans.js.map +1 -0
  183. package/dist/backend/backend/src/services/usage-ledger/team-directory.d.ts +47 -0
  184. package/dist/backend/backend/src/services/usage-ledger/team-directory.d.ts.map +1 -0
  185. package/dist/backend/backend/src/services/usage-ledger/team-directory.js +106 -0
  186. package/dist/backend/backend/src/services/usage-ledger/team-directory.js.map +1 -0
  187. package/dist/backend/backend/src/services/usage-ledger/unit-classifier.d.ts +101 -0
  188. package/dist/backend/backend/src/services/usage-ledger/unit-classifier.d.ts.map +1 -0
  189. package/dist/backend/backend/src/services/usage-ledger/unit-classifier.js +263 -0
  190. package/dist/backend/backend/src/services/usage-ledger/unit-classifier.js.map +1 -0
  191. package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.d.ts +96 -0
  192. package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.d.ts.map +1 -0
  193. package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.js +166 -0
  194. package/dist/backend/backend/src/services/usage-ledger/usage-categories.store.js.map +1 -0
  195. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.d.ts +90 -0
  196. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.d.ts.map +1 -0
  197. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.js +294 -0
  198. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.backfill.js.map +1 -0
  199. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.d.ts +102 -0
  200. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.d.ts.map +1 -0
  201. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.js +314 -0
  202. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.recorder.js.map +1 -0
  203. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.d.ts +62 -0
  204. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.d.ts.map +1 -0
  205. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.js +106 -0
  206. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.runtime.js.map +1 -0
  207. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.d.ts +52 -0
  208. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.d.ts.map +1 -0
  209. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.js +95 -0
  210. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.store.js.map +1 -0
  211. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.d.ts +127 -0
  212. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.d.ts.map +1 -0
  213. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.js +19 -0
  214. package/dist/backend/backend/src/services/usage-ledger/usage-ledger.types.js.map +1 -0
  215. package/dist/backend/backend/src/services/usage-ledger/usage-report.service.d.ts +124 -0
  216. package/dist/backend/backend/src/services/usage-ledger/usage-report.service.d.ts.map +1 -0
  217. package/dist/backend/backend/src/services/usage-ledger/usage-report.service.js +372 -0
  218. package/dist/backend/backend/src/services/usage-ledger/usage-report.service.js.map +1 -0
  219. package/dist/backend/build-info.json +2 -2
  220. package/dist/cli/backend/src/constants.d.ts +80 -0
  221. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  222. package/dist/cli/backend/src/constants.js +80 -0
  223. package/dist/cli/backend/src/constants.js.map +1 -1
  224. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +26 -6
  225. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  226. package/dist/cli/backend/src/services/agent/resource-mode.service.js +59 -5
  227. package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
  228. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  229. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  230. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
  231. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  232. package/dist/cli/backend/src/services/core/storage.service.d.ts +18 -0
  233. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  234. package/dist/cli/backend/src/services/core/storage.service.js +16 -0
  235. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  236. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +19 -0
  237. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  238. package/dist/cli/backend/src/services/decisions/decision.service.js +46 -0
  239. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  240. package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +35 -0
  241. package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -1
  242. package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +101 -0
  243. package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -1
  244. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  245. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +3 -0
  246. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  247. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  248. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  249. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +25 -0
  250. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  251. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +24 -0
  252. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  253. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +63 -1
  254. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  255. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
  256. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  257. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +41 -0
  258. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  259. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +42 -2
  260. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -1
  261. package/dist/cli/backend/src/services/trace/trace-context.service.js +66 -5
  262. package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -1
  263. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -1
  264. package/dist/cli/backend/src/services/trace/trace-recorder.js +11 -0
  265. package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -1
  266. package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.d.ts +44 -0
  267. package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.d.ts.map +1 -0
  268. package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.js +52 -0
  269. package/dist/cli/backend/src/services/usage-ledger/ledger-hooks.js.map +1 -0
  270. package/dist/cli/cli/src/commands/team-move.d.ts +68 -0
  271. package/dist/cli/cli/src/commands/team-move.d.ts.map +1 -0
  272. package/dist/cli/cli/src/commands/team-move.js +155 -0
  273. package/dist/cli/cli/src/commands/team-move.js.map +1 -0
  274. package/dist/cli/cli/src/index.js +33 -0
  275. package/dist/cli/cli/src/index.js.map +1 -1
  276. package/package.json +1 -1
@@ -77,6 +77,7 @@ import { parseSlackThreadKey } from './services/slack/slack-thread-key.js';
77
77
  import { LIVENESS_MONITOR_CONSTANTS, INPUT_CIRCUIT_CONSTANTS, INPUT_BLOCKED_RETRY_CONSTANTS } from './constants.js';
78
78
  import { InputBlockedRetryService } from './services/messaging/input-blocked-retry.service.js';
79
79
  import { driveCapabilities } from './services/drive/drive-agent.service.js';
80
+ import { teamMoveCapabilities } from './services/team-move/team-move-driver.service.js';
80
81
  import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, TICKET_HYGIENE_CONSTANTS, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS, OWNER_AUTH_CONSTANTS, CREWLY_APPS_CONSTANTS, SLACK_AGENT_DM_CONSTANTS, BRIEFING_CONSTANTS, DRIVE_CONSTANTS, POOL_PRUNE_CONSTANTS } from './constants.js';
81
82
  import { randomUUID } from 'crypto';
82
83
  import { PtyActivityTrackerService } from './services/agent/pty-activity-tracker.service.js';
@@ -142,7 +143,10 @@ import { getRuntimeFallbackService } from './services/runtime-fallback/runtime-f
142
143
  import { getSlackAgentIdentityService } from './services/slack/slack-agent-identity.service.js';
143
144
  import { getChatV2Service } from './services/chat-v2/chat-v2.singleton.js';
144
145
  import { isOwnerStopped } from './services/agent/owner-stopped.registry.js';
145
- import { createFollowThrough, settleFollowThrough, idlePendingWorkCheck, releaseWorkForStop, owedWorkReminder } from './services/agent/follow-through.wiring.js';
146
+ import { pausedTeamOfSession } from './services/team/team-pause.registry.js';
147
+ import { getFollowThrough } from './services/agent/follow-through.service.js';
148
+ import { BackgroundWorkWatchdog } from './services/monitoring/background-work-watchdog.js';
149
+ import { createFollowThrough, settleFollowThrough, idlePendingWorkCheck, releaseWorkForStop, restoreStoppedOwingWork, owedWorkReminder, OWED_REMINDER_MARKER } from './services/agent/follow-through.wiring.js';
146
150
  import { isSessionPaused } from './services/team/team-pause.registry.js';
147
151
  import { findPackageRoot } from './utils/package-root.js';
148
152
  import { getLocalApiBaseUrl, setLocalApiPort } from './utils/local-api-url.utils.js';
@@ -184,6 +188,7 @@ import { sessionsToRestore } from './services/agent/restore-filter.js';
184
188
  import { ProjectMemoryService } from './services/memory/project-memory.service.js';
185
189
  import { TaskHistorySubscriber } from './services/memory/task-history.subscriber.js';
186
190
  import { TeamHealthWatchdogService, LiveTeamHealthDataProvider, loadTeamHealthConfig, setTeamHealthWatchdogSingleton, getTeamHealthWatchdogSingleton, } from './services/team-health/index.js';
191
+ import { getUsageLedger } from './services/usage-ledger/usage-ledger.runtime.js';
187
192
  import { traceHarness, traceTurnActivity } from './services/trace/trace-recorder.js';
188
193
  import { inputCircuitStats, setInputCircuitOpenListener } from './services/session/input-circuit-breaker.js';
189
194
  import { looksLikeShellPrompt } from './utils/screen-excerpt.js';
@@ -350,6 +355,7 @@ export class CrewlyServer {
350
355
  /** Owner promises past due and never nudged at boot; their agents are restored and reminded once */
351
356
  openCommitmentsAtBoot = [];
352
357
  healthMonitoringInterval = null;
358
+ backgroundWatchdog = null;
353
359
  constructor(config) {
354
360
  // Resolve ~ to actual home directory
355
361
  const resolveHomePath = (inputPath) => {
@@ -1297,7 +1303,14 @@ export class CrewlyServer {
1297
1303
  setSlackImageService(slackImageService);
1298
1304
  // Wire agent:idle events to thread status queue for delegation completion
1299
1305
  this.eventBusService.on('eventPublished', (event) => {
1306
+ if (event.type === 'agent:busy' && event.sessionName)
1307
+ getSlackTypingPlaceholderService()?.releaseHold(event.sessionName);
1308
+ if ((event.type === 'agent:idle' || event.type === 'agent:busy') && event.sessionName) {
1309
+ ResourceModeService.getInstance().noteWorkingStatus(event.sessionName, event.type === 'agent:idle');
1310
+ }
1300
1311
  if (event.type === 'agent:inactive' && event.sessionName) {
1312
+ // A runtime that exited while the agent owed work: same hook as the other stop paths.
1313
+ void this.restoreStoppedOwing(event.sessionName, 'runtime exited');
1301
1314
  this.wakeIfMessagesQueued(event.sessionName);
1302
1315
  }
1303
1316
  // A turn started: the harness's "working on it" watch may be waiting
@@ -1385,6 +1398,7 @@ export class CrewlyServer {
1385
1398
  // 2026-05-16: queued WIs for inactive Atlas could not get woken
1386
1399
  // because the floor was held by idle product/marketing agents).
1387
1400
  liveDataProvider.setAgentRegistrationService(this.apiController.agentRegistrationService);
1401
+ liveDataProvider.setAgentStoppedHook((name, why) => { void this.restoreStoppedOwing(name, why); });
1388
1402
  // Initialize Reconciler Service (V2 — system truth recomputation)
1389
1403
  {
1390
1404
  const reconcilerLogger = LoggerService.getInstance().createComponentLogger('ReconcilerInit');
@@ -1960,6 +1974,14 @@ export class CrewlyServer {
1960
1974
  crewlyHome: this.config.crewlyHome,
1961
1975
  sendToAgent: (session, text) => this.apiController.agentRegistrationService.sendMessageToAgent(session, text),
1962
1976
  });
1977
+ // Background subagents / forks that stopped writing are not busy work:
1978
+ // the agent is told and no longer counted busy (2026-10-12, Pia).
1979
+ this.backgroundWatchdog?.stop();
1980
+ this.backgroundWatchdog = new BackgroundWorkWatchdog({
1981
+ turnState: AgentTurnStateService.getInstance(),
1982
+ sendToAgent: (session, text) => this.apiController.agentRegistrationService.sendMessageToAgent(session, text),
1983
+ });
1984
+ this.backgroundWatchdog.start();
1963
1985
  // An agent that owes work — a WorkItem (queued, accepted or running),
1964
1986
  // an assigned ticket, a promise to the owner, an unfulfilled "doing X
1965
1987
  // now" — is never idle-stopped. Under memory pressure it still can
@@ -1970,20 +1992,7 @@ export class CrewlyServer {
1970
1992
  // a slot frees, with a reminder of what it promised (the work itself is
1971
1993
  // already queued for it by the releaser).
1972
1994
  idleDetection.setOwedStopHook((sessionName) => {
1973
- void (async () => {
1974
- const reminder = owedWorkReminder(await TaskPoolService.getInstance().getAllItems(), sessionName);
1975
- if (!reminder)
1976
- return;
1977
- SubAgentMessageQueue.getInstance().enqueue(sessionName, reminder);
1978
- this.logger.info('Stopped agent owes work — it will be restarted when a slot frees', { sessionName });
1979
- const { scheduleDeferredStartRetry } = await import('./services/messaging/deferred-start-retry.js');
1980
- const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
1981
- await scheduleDeferredStartRetry(sessionName, {
1982
- activate: (name) => activateAgentBySession(this.apiController, name),
1983
- hasPending: (name) => SubAgentMessageQueue.getInstance().hasPending(name),
1984
- firstPauseMs: 60_000,
1985
- });
1986
- })().catch(() => undefined);
1995
+ void this.restoreStoppedOwing(sessionName, 'idle stop under memory pressure');
1987
1996
  });
1988
1997
  idleDetection.start();
1989
1998
  // Adaptive agent limits (pressure mode cap + start queue).
@@ -2031,12 +2040,21 @@ export class CrewlyServer {
2031
2040
  // An agent mid-conversation with the owner is the last one stopped
2032
2041
  // for a slot, and its owner thread hears when it is
2033
2042
  // (specs/2026-10-08-owner-thread-sentinel.md).
2034
- owesOwnerThread: (name) => getOwnerThreadSentinel()?.owesRecently(name) === true,
2035
- onStoppedForSlot: (name) => reportOwnerThreadBlocking(name, { kind: 'stopped', why: 'slot' }),
2043
+ owesOwnerThread: (name) => getOwnerThreadSentinel()?.owesOwner(name) === true || getFollowThrough()?.holdsIntent(name) === true,
2044
+ onStoppedForSlot: (name) => {
2045
+ reportOwnerThreadBlocking(name, { kind: 'stopped', why: 'slot' });
2046
+ // Same hook as every other stop path: what it owes goes back to the queue and it is brought back.
2047
+ void this.restoreStoppedOwing(name, 'stopped to free a running-agent slot');
2048
+ },
2036
2049
  onStartDeferred: (name) => reportOwnerThreadBlocking(name, { kind: 'start_deferred' }),
2037
2050
  stopAgent: async (name, role) => {
2038
2051
  // Its work survives the stop: back in the queue, redelivered on the next start.
2039
2052
  await releaseWorkForStop(name, 'stopped to free a running-agent slot');
2053
+ // An agent that still owes the answer keeps its "will pick this up" placeholder:
2054
+ // the turn-end settle the stop triggers must not call the thread answered.
2055
+ const owed = TaskPoolService.getInstance().getAllItems().then((items) => owedWorkReminder(items, name) !== null);
2056
+ if (await owed.catch(() => false))
2057
+ await getSlackTypingPlaceholderService()?.holdForRestart(name);
2040
2058
  await agentRegistration.terminateAgentSession(name, role);
2041
2059
  await StorageService.getInstance().updateAgentStatus(name, CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE, 'idle_exit');
2042
2060
  },
@@ -2658,6 +2676,24 @@ export class CrewlyServer {
2658
2676
  error: talkErr instanceof Error ? talkErr.message : String(talkErr),
2659
2677
  });
2660
2678
  }
2679
+ // Team move (crewly#1189): Cloud tells this machine what to do in a
2680
+ // move of a team to or from another machine. Starting the driver is
2681
+ // what advertises `teamMove:1` to Cloud, and it resumes pending moves.
2682
+ try {
2683
+ const [{ createTeamMoveDriver }, { setTeamMoveDriver }] = await Promise.all([
2684
+ import('./services/team-move/team-move-runtime.js'),
2685
+ import('./services/team-move/team-move-driver.service.js'),
2686
+ ]);
2687
+ const moveDriver = createTeamMoveDriver({ storage: this.storageService, relay: sync });
2688
+ setTeamMoveDriver(moveDriver);
2689
+ moveDriver.start();
2690
+ void moveDriver.housekeeping().catch(() => undefined);
2691
+ }
2692
+ catch (moveErr) {
2693
+ this.logger.warn('Team move handler wiring skipped', {
2694
+ error: moveErr instanceof Error ? moveErr.message : String(moveErr),
2695
+ });
2696
+ }
2661
2697
  // "Let me check with the teams" (Drive kickoff): set below, once the
2662
2698
  // status snapshot sync exists, and read by the Drive handler at run time.
2663
2699
  let driveStatusCheck = null;
@@ -3507,7 +3543,7 @@ export class CrewlyServer {
3507
3543
  if (event.kind === 'team-saved') {
3508
3544
  await reconciler.reconcile(event.team);
3509
3545
  }
3510
- else if (event.kind === 'team-deleted') {
3546
+ else if (event.kind === 'team-deleted' || event.kind === 'team-moved-away') {
3511
3547
  await reconciler.unregisterAll(event.teamId);
3512
3548
  }
3513
3549
  });
@@ -3844,6 +3880,9 @@ export class CrewlyServer {
3844
3880
  const tokenUsageService = TokenUsageService.getInstance();
3845
3881
  await tokenUsageService.loadFromDisk();
3846
3882
  tokenUsageService.startPeriodicFlush();
3883
+ // Per-ticket time / token accounting (specs/2026-10-11-usage-ledger.md):
3884
+ // records facts from here on and rebuilds history once, shortly after boot.
3885
+ await getUsageLedger().start();
3847
3886
  // Read Claude Code's own session transcripts on an interval so
3848
3887
  // the Usage dashboard reflects claude-code agents, and so the
3849
3888
  // context monitor gets a real context size for them (Claude
@@ -5330,7 +5369,7 @@ export class CrewlyServer {
5330
5369
  // whether this machine takes `talk_message` — also for machines
5331
5370
  // without Slack, which never send the registry heartbeat.
5332
5371
  roster: async () => buildAgentRoster(await this.storageService.getTeams()),
5333
- capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities()],
5372
+ capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
5334
5373
  onNewMessage: (listener) => {
5335
5374
  chat.on('chat_message', listener);
5336
5375
  return () => chat.off('chat_message', listener);
@@ -5402,7 +5441,7 @@ export class CrewlyServer {
5402
5441
  agentNames: async () => new Map(buildAgentRoster(await this.storageService.getTeams())
5403
5442
  .filter((a) => a.displayName)
5404
5443
  .map((a) => [a.agentSession, a.displayName])),
5405
- capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities()],
5444
+ capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
5406
5445
  onTicketChange: (listener) => RequestService.getInstance().onChange(() => listener()),
5407
5446
  });
5408
5447
  setWaitingItemsSyncService(service);
@@ -6238,6 +6277,34 @@ export class CrewlyServer {
6238
6277
  });
6239
6278
  }
6240
6279
  }
6280
+ /**
6281
+ * The one hook every stop path runs: what the stopped agent owes goes back
6282
+ * in the queue and the agent is brought back with a reminder.
6283
+ *
6284
+ * @param sessionName - The agent that stopped
6285
+ * @param why - Reason text
6286
+ * @returns True when the agent is being brought back
6287
+ */
6288
+ restoreStoppedOwing(sessionName, why) {
6289
+ if (sessionName === ORCHESTRATOR_SESSION_NAME)
6290
+ return Promise.resolve(false);
6291
+ return restoreStoppedOwingWork(sessionName, why, {
6292
+ listWorkItems: () => TaskPoolService.getInstance().getAllItems(),
6293
+ isHeldBack: (name) => isOwnerStopped(name) || !!pausedTeamOfSession(name),
6294
+ hasReminder: (name) => SubAgentMessageQueue.getInstance().peek(name).some((m) => m.data.startsWith(OWED_REMINDER_MARKER)),
6295
+ enqueue: (name, text) => SubAgentMessageQueue.getInstance().enqueue(name, text),
6296
+ holdPlaceholders: (name) => getSlackTypingPlaceholderService()?.holdForRestart(name) ?? Promise.resolve(0),
6297
+ restart: async (name) => {
6298
+ const { scheduleDeferredStartRetry } = await import('./services/messaging/deferred-start-retry.js');
6299
+ const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
6300
+ void scheduleDeferredStartRetry(name, {
6301
+ activate: (n) => activateAgentBySession(this.apiController, n),
6302
+ hasPending: (n) => SubAgentMessageQueue.getInstance().hasPending(n),
6303
+ firstPauseMs: 60_000,
6304
+ });
6305
+ },
6306
+ });
6307
+ }
6241
6308
  /**
6242
6309
  * An agent went down with messages still queued for it: start it again so
6243
6310
  * they are delivered (registration drains the queue). Without this the
@@ -6708,6 +6775,7 @@ export class CrewlyServer {
6708
6775
  }, timeoutMs);
6709
6776
  try {
6710
6777
  // Clear health monitoring interval first
6778
+ this.backgroundWatchdog?.stop();
6711
6779
  if (this.healthMonitoringInterval) {
6712
6780
  clearInterval(this.healthMonitoringInterval);
6713
6781
  this.healthMonitoringInterval = null;
@@ -6935,6 +7003,15 @@ export class CrewlyServer {
6935
7003
  WorktreeJanitorService.getInstance().stop();
6936
7004
  // Stop auditor scheduler
6937
7005
  AuditorSchedulerService.getInstance().stop();
7006
+ // Write the usage ledger's buffered buckets
7007
+ try {
7008
+ await getUsageLedger().stop();
7009
+ }
7010
+ catch (ledgerErr) {
7011
+ this.logger.warn('Usage ledger flush on shutdown failed (non-fatal)', {
7012
+ error: ledgerErr instanceof Error ? ledgerErr.message : String(ledgerErr),
7013
+ });
7014
+ }
6938
7015
  // Persist the token ledger: it flushes every 5 minutes, so a restart
6939
7016
  // used to drop everything recorded since the last tick (2026-09-18).
6940
7017
  try {