crewly 1.14.1 → 1.16.0

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 (601) hide show
  1. package/README.md +34 -4
  2. package/config/constants.ts +57 -0
  3. package/config/index.ts +6 -2
  4. package/config/roles/architect/soul.md +31 -0
  5. package/config/roles/auditor/soul.md +30 -0
  6. package/config/roles/backend-developer/soul.md +30 -0
  7. package/config/roles/content-strategist/soul.md +29 -0
  8. package/config/roles/designer/soul.md +30 -0
  9. package/config/roles/developer/prompt.md +1 -1
  10. package/config/roles/developer/soul.md +4 -1
  11. package/config/roles/frontend-developer/soul.md +28 -0
  12. package/config/roles/fullstack-dev/soul.md +28 -0
  13. package/config/roles/generalist/soul.md +28 -0
  14. package/config/roles/ops/soul.md +31 -0
  15. package/config/roles/orchestrator/fragments/lifecycle.md +2 -22
  16. package/config/roles/orchestrator/fragments/recovery.md +1 -1
  17. package/config/roles/orchestrator/prompt.md +18 -49
  18. package/config/roles/orchestrator/soul.md +2 -1
  19. package/config/roles/product-manager/prompt.md +1 -1
  20. package/config/roles/product-manager/soul.md +30 -0
  21. package/config/roles/qa/soul.md +31 -0
  22. package/config/roles/qa-engineer/soul.md +31 -0
  23. package/config/roles/researcher/soul.md +4 -1
  24. package/config/roles/sales/soul.md +30 -0
  25. package/config/roles/support/soul.md +30 -0
  26. package/config/roles/team-leader/prompt.md +1 -1
  27. package/config/roles/team-leader/soul.md +32 -0
  28. package/config/roles/tpm/soul.md +31 -0
  29. package/config/roles/ux-designer/soul.md +31 -0
  30. package/config/runtime_scripts/runtime-config.json +7 -0
  31. package/config/skills/_common/lib.sh +124 -2
  32. package/config/skills/_common/lib.test.sh +68 -1
  33. package/config/skills/agent/core/count-json/SKILL.md +61 -0
  34. package/config/skills/agent/core/count-json/execute.sh +52 -0
  35. package/config/skills/agent/core/count-json/execute.test.sh +35 -0
  36. package/config/skills/agent/core/record-prediction/SKILL.md +61 -0
  37. package/config/skills/agent/core/record-prediction/execute.sh +90 -0
  38. package/config/skills/agent/core/record-prediction/execute.test.sh +67 -0
  39. package/config/skills/agent/core/resolve-prediction/SKILL.md +61 -0
  40. package/config/skills/agent/core/resolve-prediction/execute.sh +87 -0
  41. package/config/skills/agent/core/resolve-prediction/execute.test.sh +74 -0
  42. package/config/skills/agent/core/set-focus/SKILL.md +64 -0
  43. package/config/skills/agent/core/set-focus/execute.sh +73 -0
  44. package/config/skills/agent/core/set-focus/execute.test.sh +67 -0
  45. package/config/skills/agent/core/suppress-noise/SKILL.md +59 -0
  46. package/config/skills/agent/core/suppress-noise/execute.sh +68 -0
  47. package/config/skills/agent/core/suppress-noise/execute.test.sh +58 -0
  48. package/config/skills/orchestrator/delegate-task/SKILL.md +17 -21
  49. package/config/skills/orchestrator/delegate-task/execute.sh +18 -9
  50. package/config/skills/orchestrator/delegate-task/execute.test.sh +1 -1
  51. package/config/skills/orchestrator/wiki-migrate/SKILL.md +33 -3
  52. package/config/skills/orchestrator/wiki-migrate/compact.jq +36 -0
  53. package/config/skills/orchestrator/wiki-migrate/execute.sh +35 -5
  54. package/config/skills/orchestrator/wiki-migrate/execute.test.sh +124 -0
  55. package/config/skills/team-leader/verify-output/execute.sh +14 -6
  56. package/config/skills/team-leader/verify-output/execute.test.sh +117 -0
  57. package/dist/backend/backend/src/constants.d.ts +161 -0
  58. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  59. package/dist/backend/backend/src/constants.js +159 -1
  60. package/dist/backend/backend/src/constants.js.map +1 -1
  61. package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.d.ts +76 -0
  62. package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.d.ts.map +1 -0
  63. package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.js +262 -0
  64. package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.js.map +1 -0
  65. package/dist/backend/backend/src/controllers/mission/mission-policy.controller.d.ts.map +1 -1
  66. package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js +4 -6
  67. package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js.map +1 -1
  68. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts +10 -0
  69. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
  70. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +78 -16
  71. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
  72. package/dist/backend/backend/src/controllers/oauth/oauth.routes.d.ts.map +1 -1
  73. package/dist/backend/backend/src/controllers/oauth/oauth.routes.js +31 -0
  74. package/dist/backend/backend/src/controllers/oauth/oauth.routes.js.map +1 -1
  75. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
  76. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +11 -1
  77. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
  78. package/dist/backend/backend/src/controllers/request-types.d.ts +6 -2
  79. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  80. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +14 -0
  81. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  82. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +59 -0
  83. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  84. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts +9 -0
  85. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
  86. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +14 -1
  87. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
  88. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  89. package/dist/backend/backend/src/controllers/team/team.controller.js +20 -1
  90. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  91. package/dist/backend/backend/src/index.d.ts +13 -0
  92. package/dist/backend/backend/src/index.d.ts.map +1 -1
  93. package/dist/backend/backend/src/index.js +240 -9
  94. package/dist/backend/backend/src/index.js.map +1 -1
  95. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +139 -0
  96. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
  97. package/dist/backend/backend/src/middleware/api-token.middleware.js +301 -0
  98. package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -0
  99. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  100. package/dist/backend/backend/src/routes/api.routes.js +9 -1
  101. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  102. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +78 -0
  103. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/agent/agent-registration.service.js +311 -13
  105. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
  107. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/agent/claude-runtime.service.js +10 -1
  109. package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  110. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
  111. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/agent/codex-runtime.service.js +11 -1
  113. package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  114. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
  115. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
  117. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
  119. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +10 -1
  121. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
  123. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
  125. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/agent/opencode-runtime.service.d.ts +114 -0
  127. package/dist/backend/backend/src/services/agent/opencode-runtime.service.d.ts.map +1 -0
  128. package/dist/backend/backend/src/services/agent/opencode-runtime.service.js +185 -0
  129. package/dist/backend/backend/src/services/agent/opencode-runtime.service.js.map +1 -0
  130. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
  131. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +71 -1
  133. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  134. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +1 -1
  135. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +15 -3
  137. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  138. package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
  139. package/dist/backend/backend/src/services/agent/runtime-service.factory.js +9 -0
  140. package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
  141. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +23 -0
  142. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  143. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +45 -0
  144. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  145. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
  146. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -1
  148. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  149. package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +43 -3
  150. package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -1
  151. package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js +85 -4
  152. package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -1
  153. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
  154. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
  156. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  157. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +44 -0
  158. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  159. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +33 -0
  160. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  161. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  162. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
  163. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  164. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  165. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
  166. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  167. package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts +45 -0
  168. package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts.map +1 -0
  169. package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.js +59 -0
  170. package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.js.map +1 -0
  171. package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.d.ts +137 -0
  172. package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.d.ts.map +1 -0
  173. package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.js +216 -0
  174. package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.js.map +1 -0
  175. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +4 -1
  176. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -1
  177. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js +3 -1
  178. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -1
  179. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +26 -2
  180. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/backup/backup-archive.service.js +91 -10
  182. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  183. package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts +15 -2
  184. package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
  185. package/dist/backend/backend/src/services/backup/backup-restore.service.js +100 -21
  186. package/dist/backend/backend/src/services/backup/backup-restore.service.js.map +1 -1
  187. package/dist/backend/backend/src/services/backup/backup.types.d.ts +85 -2
  188. package/dist/backend/backend/src/services/backup/backup.types.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/backup/backup.types.js +21 -0
  190. package/dist/backend/backend/src/services/backup/backup.types.js.map +1 -1
  191. package/dist/backend/backend/src/services/backup/project-file-filter.d.ts +35 -0
  192. package/dist/backend/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
  193. package/dist/backend/backend/src/services/backup/project-file-filter.js +90 -0
  194. package/dist/backend/backend/src/services/backup/project-file-filter.js.map +1 -0
  195. package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
  196. package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
  197. package/dist/backend/backend/src/services/budget/team-budget-gate.service.js +364 -0
  198. package/dist/backend/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
  199. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -3
  200. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  201. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +34 -3
  202. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  203. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +5 -3
  204. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +6 -4
  206. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  207. package/dist/backend/backend/src/services/core/api-token.service.d.ts +78 -0
  208. package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -0
  209. package/dist/backend/backend/src/services/core/api-token.service.js +149 -0
  210. package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -0
  211. package/dist/backend/backend/src/services/core/logger.service.d.ts +10 -1
  212. package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/core/logger.service.js +18 -3
  214. package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
  215. package/dist/backend/backend/src/services/core/storage.service.d.ts +11 -0
  216. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  217. package/dist/backend/backend/src/services/core/storage.service.js +34 -0
  218. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  219. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +7 -1
  220. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  221. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +29 -7
  222. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  223. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts +140 -0
  224. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts.map +1 -0
  225. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js +346 -0
  226. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js.map +1 -0
  227. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +1 -1
  228. package/dist/backend/backend/src/services/mcp-tool-definitions.js +1 -1
  229. package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
  230. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
  231. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  232. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +42 -7
  233. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  234. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
  235. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
  237. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  238. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +22 -15
  239. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  240. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +24 -15
  241. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  242. package/dist/backend/backend/src/services/runtime-adapter.d.ts +10 -1
  243. package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
  244. package/dist/backend/backend/src/services/runtime-adapter.js +12 -1
  245. package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -1
  246. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +7 -1
  247. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  248. package/dist/backend/backend/src/services/session/pty/pty-session.js +9 -3
  249. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  250. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +27 -0
  251. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  252. package/dist/backend/backend/src/services/session/session-handoff.service.js +110 -22
  253. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  254. package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -1
  255. package/dist/backend/backend/src/services/settings/settings.service.js +1 -0
  256. package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
  257. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
  258. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +7 -1
  259. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
  260. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
  261. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  262. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +132 -6
  263. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  264. package/dist/backend/backend/src/services/v3/escalation-boot.d.ts +87 -0
  265. package/dist/backend/backend/src/services/v3/escalation-boot.d.ts.map +1 -0
  266. package/dist/backend/backend/src/services/v3/escalation-boot.js +128 -0
  267. package/dist/backend/backend/src/services/v3/escalation-boot.js.map +1 -0
  268. package/dist/backend/backend/src/services/v3/escalation.service.d.ts +1 -1
  269. package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
  270. package/dist/backend/backend/src/services/v3/escalation.service.js +4 -4
  271. package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
  272. package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.d.ts +78 -0
  273. package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.d.ts.map +1 -0
  274. package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.js +129 -0
  275. package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.js.map +1 -0
  276. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts +118 -0
  277. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts.map +1 -0
  278. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js +277 -0
  279. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js.map +1 -0
  280. package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.d.ts +117 -0
  281. package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.d.ts.map +1 -0
  282. package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.js +214 -0
  283. package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.js.map +1 -0
  284. package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
  285. package/dist/backend/backend/src/services/v3/kr-tracking.service.js +3 -6
  286. package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
  287. package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts +5 -0
  288. package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
  289. package/dist/backend/backend/src/services/v3/mission-executor.service.js +36 -0
  290. package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
  291. package/dist/backend/backend/src/services/v3/mission-paths.d.ts +69 -0
  292. package/dist/backend/backend/src/services/v3/mission-paths.d.ts.map +1 -0
  293. package/dist/backend/backend/src/services/v3/mission-paths.js +92 -0
  294. package/dist/backend/backend/src/services/v3/mission-paths.js.map +1 -0
  295. package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
  296. package/dist/backend/backend/src/services/v3/mission-period.service.js +1 -12
  297. package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
  298. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +76 -2
  299. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
  300. package/dist/backend/backend/src/services/v3/mission-reminder.service.js +267 -9
  301. package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
  302. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +6 -4
  303. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -1
  304. package/dist/backend/backend/src/services/v3/okr-cascade.service.js +11 -10
  305. package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -1
  306. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +24 -0
  307. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
  308. package/dist/backend/backend/src/services/v3/okr-review.service.js +63 -3
  309. package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
  310. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts +17 -0
  311. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
  312. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +62 -13
  313. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
  314. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +6 -2
  315. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  316. package/dist/backend/backend/src/services/v3/v3-data.service.js +14 -9
  317. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  318. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +14 -0
  319. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  320. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +31 -0
  321. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  322. package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -2
  323. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  324. package/dist/backend/backend/src/types/event-bus.types.js +15 -0
  325. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  326. package/dist/backend/backend/src/types/index.d.ts +27 -1
  327. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  328. package/dist/backend/backend/src/types/index.js.map +1 -1
  329. package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
  330. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  331. package/dist/backend/backend/src/types/settings.types.js +7 -0
  332. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  333. package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
  334. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  335. package/dist/backend/backend/src/types/team-template.types.js +1 -1
  336. package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
  337. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  338. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  339. package/dist/backend/backend/src/types/v2/index.js +1 -1
  340. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  341. package/dist/backend/backend/src/types/v2/mission.types.d.ts +41 -0
  342. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  343. package/dist/backend/backend/src/types/v2/mission.types.js +29 -0
  344. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  345. package/dist/backend/backend/src/utils/network-exposure.utils.d.ts +67 -0
  346. package/dist/backend/backend/src/utils/network-exposure.utils.d.ts.map +1 -0
  347. package/dist/backend/backend/src/utils/network-exposure.utils.js +92 -0
  348. package/dist/backend/backend/src/utils/network-exposure.utils.js.map +1 -0
  349. package/dist/backend/backend/src/utils/terminal-string-ops.d.ts +2 -0
  350. package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
  351. package/dist/backend/backend/src/utils/terminal-string-ops.js +14 -0
  352. package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
  353. package/dist/backend/build-info.json +2 -2
  354. package/dist/backend/config/constants.d.ts +53 -0
  355. package/dist/backend/config/constants.d.ts.map +1 -1
  356. package/dist/backend/config/constants.js +54 -0
  357. package/dist/backend/config/constants.js.map +1 -1
  358. package/dist/backend/config/index.d.ts +2 -2
  359. package/dist/backend/config/index.d.ts.map +1 -1
  360. package/dist/backend/config/index.js +6 -6
  361. package/dist/backend/config/index.js.map +1 -1
  362. package/dist/cli/backend/src/constants.d.ts +161 -0
  363. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  364. package/dist/cli/backend/src/constants.js +159 -1
  365. package/dist/cli/backend/src/constants.js.map +1 -1
  366. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +78 -0
  367. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  368. package/dist/cli/backend/src/services/agent/agent-registration.service.js +311 -13
  369. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  370. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
  371. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  372. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +10 -1
  373. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  374. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
  375. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  376. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +11 -1
  377. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  378. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
  379. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  380. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
  381. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  382. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
  383. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  384. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +10 -1
  385. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  386. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
  387. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  388. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
  389. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  390. package/dist/cli/backend/src/services/agent/opencode-runtime.service.d.ts +114 -0
  391. package/dist/cli/backend/src/services/agent/opencode-runtime.service.d.ts.map +1 -0
  392. package/dist/cli/backend/src/services/agent/opencode-runtime.service.js +185 -0
  393. package/dist/cli/backend/src/services/agent/opencode-runtime.service.js.map +1 -0
  394. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
  395. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  396. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +71 -1
  397. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  398. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +1 -1
  399. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  400. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +15 -3
  401. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  402. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
  403. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +9 -0
  404. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -1
  405. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +23 -0
  406. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  407. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +45 -0
  408. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  409. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +43 -3
  410. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -1
  411. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +85 -4
  412. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -1
  413. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
  414. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  415. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
  416. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  417. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +44 -0
  418. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  419. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +33 -0
  420. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  421. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  422. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
  423. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  424. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  425. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
  426. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  427. package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts +45 -0
  428. package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.js +59 -0
  430. package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.js.map +1 -0
  431. package/dist/cli/backend/src/services/ai/self-improvement/attention.service.d.ts +74 -0
  432. package/dist/cli/backend/src/services/ai/self-improvement/attention.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/ai/self-improvement/attention.service.js +132 -0
  434. package/dist/cli/backend/src/services/ai/self-improvement/attention.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts +107 -0
  436. package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.js +183 -0
  438. package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.js.map +1 -0
  439. package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +100 -0
  440. package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.js +130 -0
  442. package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -0
  443. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +26 -2
  444. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  445. package/dist/cli/backend/src/services/backup/backup-archive.service.js +91 -10
  446. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  447. package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts +15 -2
  448. package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
  449. package/dist/cli/backend/src/services/backup/backup-restore.service.js +100 -21
  450. package/dist/cli/backend/src/services/backup/backup-restore.service.js.map +1 -1
  451. package/dist/cli/backend/src/services/backup/backup.types.d.ts +85 -2
  452. package/dist/cli/backend/src/services/backup/backup.types.d.ts.map +1 -1
  453. package/dist/cli/backend/src/services/backup/backup.types.js +21 -0
  454. package/dist/cli/backend/src/services/backup/backup.types.js.map +1 -1
  455. package/dist/cli/backend/src/services/backup/project-file-filter.d.ts +35 -0
  456. package/dist/cli/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/backup/project-file-filter.js +90 -0
  458. package/dist/cli/backend/src/services/backup/project-file-filter.js.map +1 -0
  459. package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
  460. package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/budget/team-budget-gate.service.js +364 -0
  462. package/dist/cli/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
  463. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -3
  464. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  465. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +34 -3
  466. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  467. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +5 -3
  468. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  469. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +6 -4
  470. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  471. package/dist/cli/backend/src/services/core/api-token.service.d.ts +78 -0
  472. package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/core/api-token.service.js +149 -0
  474. package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -0
  475. package/dist/cli/backend/src/services/core/logger.service.d.ts +10 -1
  476. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
  477. package/dist/cli/backend/src/services/core/logger.service.js +18 -3
  478. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
  479. package/dist/cli/backend/src/services/core/storage.service.d.ts +11 -0
  480. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  481. package/dist/cli/backend/src/services/core/storage.service.js +34 -0
  482. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  483. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +1 -1
  484. package/dist/cli/backend/src/services/mcp-tool-definitions.js +1 -1
  485. package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
  486. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
  487. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  488. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +42 -7
  489. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  490. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
  491. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  492. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
  493. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  494. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +7 -1
  495. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  496. package/dist/cli/backend/src/services/session/pty/pty-session.js +9 -3
  497. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
  498. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +27 -0
  499. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  500. package/dist/cli/backend/src/services/session/session-handoff.service.js +110 -22
  501. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  502. package/dist/cli/backend/src/services/settings/settings.service.d.ts.map +1 -1
  503. package/dist/cli/backend/src/services/settings/settings.service.js +1 -0
  504. package/dist/cli/backend/src/services/settings/settings.service.js.map +1 -1
  505. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
  506. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  507. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +132 -6
  508. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  509. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
  510. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +3 -6
  511. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -1
  512. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +5 -0
  513. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
  514. package/dist/cli/backend/src/services/v3/mission-executor.service.js +36 -0
  515. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
  516. package/dist/cli/backend/src/services/v3/mission-paths.d.ts +69 -0
  517. package/dist/cli/backend/src/services/v3/mission-paths.d.ts.map +1 -0
  518. package/dist/cli/backend/src/services/v3/mission-paths.js +92 -0
  519. package/dist/cli/backend/src/services/v3/mission-paths.js.map +1 -0
  520. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +6 -2
  521. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  522. package/dist/cli/backend/src/services/v3/v3-data.service.js +14 -9
  523. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  524. package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
  525. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  526. package/dist/cli/backend/src/types/event-bus.types.js +15 -0
  527. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  528. package/dist/cli/backend/src/types/index.d.ts +27 -1
  529. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  530. package/dist/cli/backend/src/types/index.js.map +1 -1
  531. package/dist/cli/backend/src/types/settings.types.d.ts +1 -1
  532. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  533. package/dist/cli/backend/src/types/settings.types.js +7 -0
  534. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  535. package/dist/cli/backend/src/types/team-template.types.d.ts +2 -2
  536. package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
  537. package/dist/cli/backend/src/types/team-template.types.js +1 -1
  538. package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
  539. package/dist/cli/backend/src/types/v2/index.d.ts +1 -1
  540. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  541. package/dist/cli/backend/src/types/v2/index.js +1 -1
  542. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  543. package/dist/cli/backend/src/types/v2/mission.types.d.ts +41 -0
  544. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -1
  545. package/dist/cli/backend/src/types/v2/mission.types.js +29 -0
  546. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -1
  547. package/dist/cli/backend/src/utils/terminal-string-ops.d.ts +2 -0
  548. package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
  549. package/dist/cli/backend/src/utils/terminal-string-ops.js +14 -0
  550. package/dist/cli/backend/src/utils/terminal-string-ops.js.map +1 -1
  551. package/dist/cli/cli/src/commands/backup.d.ts +25 -0
  552. package/dist/cli/cli/src/commands/backup.d.ts.map +1 -1
  553. package/dist/cli/cli/src/commands/backup.js +120 -6
  554. package/dist/cli/cli/src/commands/backup.js.map +1 -1
  555. package/dist/cli/cli/src/commands/doctor.d.ts +58 -0
  556. package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -0
  557. package/dist/cli/cli/src/commands/doctor.js +163 -0
  558. package/dist/cli/cli/src/commands/doctor.js.map +1 -0
  559. package/dist/cli/cli/src/commands/onboard.d.ts +2 -2
  560. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  561. package/dist/cli/cli/src/commands/onboard.js +15 -7
  562. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  563. package/dist/cli/cli/src/commands/service.d.ts +68 -11
  564. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  565. package/dist/cli/cli/src/commands/service.js +183 -51
  566. package/dist/cli/cli/src/commands/service.js.map +1 -1
  567. package/dist/cli/cli/src/commands/token.d.ts +53 -0
  568. package/dist/cli/cli/src/commands/token.d.ts.map +1 -0
  569. package/dist/cli/cli/src/commands/token.js +70 -0
  570. package/dist/cli/cli/src/commands/token.js.map +1 -0
  571. package/dist/cli/cli/src/index.js +40 -5
  572. package/dist/cli/cli/src/index.js.map +1 -1
  573. package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts +21 -0
  574. package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts.map +1 -0
  575. package/dist/cli/cli/src/scripts/check-native-toolchain.js +40 -0
  576. package/dist/cli/cli/src/scripts/check-native-toolchain.js.map +1 -0
  577. package/dist/cli/cli/src/utils/native-toolchain.d.ts +111 -0
  578. package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -0
  579. package/dist/cli/cli/src/utils/native-toolchain.js +146 -0
  580. package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -0
  581. package/dist/cli/cli/src/utils/package-root.d.ts +55 -0
  582. package/dist/cli/cli/src/utils/package-root.d.ts.map +1 -0
  583. package/dist/cli/cli/src/utils/package-root.js +107 -0
  584. package/dist/cli/cli/src/utils/package-root.js.map +1 -0
  585. package/dist/cli/cli/src/utils/version-check.d.ts +18 -2
  586. package/dist/cli/cli/src/utils/version-check.d.ts.map +1 -1
  587. package/dist/cli/cli/src/utils/version-check.js +51 -4
  588. package/dist/cli/cli/src/utils/version-check.js.map +1 -1
  589. package/dist/cli/config/constants.d.ts +53 -0
  590. package/dist/cli/config/constants.d.ts.map +1 -1
  591. package/dist/cli/config/constants.js +54 -0
  592. package/dist/cli/config/constants.js.map +1 -1
  593. package/dist/cli/config/index.d.ts +2 -2
  594. package/dist/cli/config/index.d.ts.map +1 -1
  595. package/dist/cli/config/index.js +6 -6
  596. package/dist/cli/config/index.js.map +1 -1
  597. package/frontend/dist/assets/index-019817e2.js +4961 -0
  598. package/frontend/dist/assets/{index-88feb412.css → index-a56613e7.css} +1 -1
  599. package/frontend/dist/index.html +2 -2
  600. package/package.json +3 -2
  601. package/frontend/dist/assets/index-190a957f.js +0 -4961
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Fallback Trigger Cleanup — cancels a delegation's "fallback check" timer
3
+ * the moment the delegated WorkItem reaches a terminal status.
4
+ *
5
+ * `delegate-task` arms a one-shot time trigger named
6
+ * `fallback-<target>-<wi8>` whose action creates a self-targeted "Fallback
7
+ * check on <target> for task <wi8>" WorkItem for the orchestrator. Nothing
8
+ * ever cancelled it, so on steamfun-ops it fired after every delegation
9
+ * whether the work was long verified or not: 26 of 65 real WorkItems in
10
+ * three days were these checks, each one a full orchestrator turn
11
+ * (2026-09-18). The skill's default was raised to 2 h; this subscriber
12
+ * removes the timer as soon as the work is done, verified or cancelled so it
13
+ * never fires for finished work at all.
14
+ *
15
+ * @module services/v3/fallback-trigger-cleanup.subscriber
16
+ */
17
+ import { LoggerService } from '../core/logger.service.js';
18
+ import { formatError } from '../../utils/format-error.js';
19
+ import { TriggerEngine } from './trigger-engine.service.js';
20
+ /** Events after which a delegation's fallback timer is pointless. */
21
+ export const FALLBACK_CLEANUP_EVENTS = [
22
+ 'task:done',
23
+ 'task:verified',
24
+ 'task:cancelled',
25
+ ];
26
+ /** Length of the WorkItem-id prefix `delegate-task` puts in the trigger name. */
27
+ const WI_ID_PREFIX_LENGTH = 8;
28
+ /**
29
+ * Name `delegate-task` gives the fallback timer for a WorkItem.
30
+ *
31
+ * @param workItemId - Full WorkItem id
32
+ * @param target - Session the work was delegated to
33
+ * @returns The trigger name
34
+ */
35
+ export function fallbackTriggerName(workItemId, target) {
36
+ return `fallback-${target}-${workItemId.slice(0, WI_ID_PREFIX_LENGTH)}`;
37
+ }
38
+ /**
39
+ * Whether a trigger is the fallback timer for the given WorkItem, regardless
40
+ * of target (the event may not carry the target session).
41
+ *
42
+ * @param trigger - Candidate trigger
43
+ * @param workItemId - Full WorkItem id
44
+ * @returns True when the name matches `fallback-*-<wi8>`
45
+ */
46
+ export function isFallbackTriggerFor(trigger, workItemId) {
47
+ const name = trigger.name ?? '';
48
+ return name.startsWith('fallback-') && name.endsWith(`-${workItemId.slice(0, WI_ID_PREFIX_LENGTH)}`);
49
+ }
50
+ /**
51
+ * Subscribes to task terminal events and cancels matching fallback timers.
52
+ */
53
+ export class FallbackTriggerCleanupSubscriber {
54
+ logger;
55
+ eventBus;
56
+ triggers;
57
+ unsubscribers = [];
58
+ started = false;
59
+ constructor(deps) {
60
+ this.logger = LoggerService.getInstance().createComponentLogger('FallbackTriggerCleanup');
61
+ this.eventBus = deps.eventBus;
62
+ this.triggers = deps.triggers;
63
+ }
64
+ /**
65
+ * Production wiring.
66
+ *
67
+ * @param eventBus - The process event bus
68
+ * @returns A subscriber bound to the trigger engine singleton
69
+ */
70
+ static boot(eventBus) {
71
+ return new FallbackTriggerCleanupSubscriber({ eventBus, triggers: TriggerEngine.getInstance() });
72
+ }
73
+ /** Subscribe. Idempotent. */
74
+ start() {
75
+ if (this.started)
76
+ return;
77
+ this.started = true;
78
+ for (const eventType of FALLBACK_CLEANUP_EVENTS) {
79
+ this.unsubscribers.push(this.eventBus.onInProcess(eventType, (e) => {
80
+ void this.handle(e).catch((err) => {
81
+ this.logger.warn('Fallback trigger cleanup failed', { eventType, error: formatError(err) });
82
+ });
83
+ }));
84
+ }
85
+ this.logger.info('FallbackTriggerCleanup subscribed', { eventTypes: [...FALLBACK_CLEANUP_EVENTS] });
86
+ }
87
+ /** Unsubscribe. Safe to call twice. */
88
+ stop() {
89
+ for (const u of this.unsubscribers) {
90
+ try {
91
+ u();
92
+ }
93
+ catch {
94
+ // ignore
95
+ }
96
+ }
97
+ this.unsubscribers = [];
98
+ this.started = false;
99
+ }
100
+ /**
101
+ * Cancel every live fallback timer for the event's WorkItem.
102
+ *
103
+ * @param event - A task terminal event
104
+ * @returns Number of triggers cancelled
105
+ */
106
+ async handle(event) {
107
+ const workItemId = event.workItemId;
108
+ if (!workItemId)
109
+ return 0;
110
+ let cancelled = 0;
111
+ for (const trigger of this.triggers.list()) {
112
+ if (trigger.status !== 'active' && trigger.status !== 'paused')
113
+ continue;
114
+ if (!isFallbackTriggerFor(trigger, workItemId))
115
+ continue;
116
+ if (await this.triggers.cancel(trigger.id)) {
117
+ cancelled += 1;
118
+ this.logger.info('Cancelled fallback timer for finished WorkItem', {
119
+ workItemId,
120
+ triggerId: trigger.id,
121
+ name: trigger.name,
122
+ event: event.type,
123
+ });
124
+ }
125
+ }
126
+ return cancelled;
127
+ }
128
+ }
129
+ //# sourceMappingURL=fallback-trigger-cleanup.subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback-trigger-cleanup.subscriber.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/fallback-trigger-cleanup.subscriber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * KR Completion Subscriber
3
+ *
4
+ * Closes two gaps in the OKR runtime loop that the data model already
5
+ * supported but nothing ever drove:
6
+ *
7
+ * 1. **KR auto-measurement from task completion.**
8
+ * `KRTrackingService.onWorkItemCompleted` maps completed/total linked
9
+ * WorkItems onto a KR whose `measurementSource === 'task_completion'`,
10
+ * but had zero production callers. This subscriber listens to the
11
+ * pool's terminal-success events (`task:done`, `task:verified`),
12
+ * resolves the KR either from `workItem.metadata.krId` or from any KR
13
+ * of the mission whose `linkedWorkItemIds` contains the WI, and calls
14
+ * `onWorkItemCompleted`.
15
+ *
16
+ * 2. **`team:all_tasks_done` publication.**
17
+ * The event was declared, CRITICAL, subscribed to by the orchestrator
18
+ * and handled by the EventToWorkItemBridge (→ `mission:review_due` →
19
+ * review WI) — but nothing published it. On every task terminal event
20
+ * (`task:done`, `task:verified`, `task:cancelled`) this subscriber
21
+ * checks whether the WI's mission has zero non-terminal WorkItems left
22
+ * and, if so, publishes once per mission per UTC day (idempotent id
23
+ * `<missionId>:all_tasks_done:<YYYY-MM-DD>`).
24
+ *
25
+ * Follows the same shape as the other in-process subscribers (bridge,
26
+ * auto-learning, milestone): `onInProcess` subscriptions, per-dispatch
27
+ * try/catch, `flushPending()` for tests, idempotent `start()`/`stop()`.
28
+ *
29
+ * @module services/v3/kr-completion.subscriber
30
+ */
31
+ import { type ComponentLogger } from '../core/logger.service.js';
32
+ import type { EventBusService } from '../event-bus/event-bus.service.js';
33
+ import type { EventType } from '../../types/event-bus.types.js';
34
+ import type { WorkItem } from '../../types/v2/work-item.types.js';
35
+ import type { KeyResult } from '../../types/v2/key-result.types.js';
36
+ import type { Mission } from '../../types/v2/mission.types.js';
37
+ /** Terminal-success events that may move a `task_completion` KR. */
38
+ export declare const KR_MEASURE_EVENTS: readonly EventType[];
39
+ /**
40
+ * Task terminal events after which a mission may have no active work left.
41
+ * `task:cancelled` is included so a mission whose last item was cancelled
42
+ * still gets its "all done — review" nudge.
43
+ */
44
+ export declare const ALL_TASKS_DONE_TRIGGER_EVENTS: readonly EventType[];
45
+ /** Minimal pool surface the subscriber needs. */
46
+ export interface KRCompletionTaskPool {
47
+ findWorkItem(id: string): Promise<WorkItem | null | undefined>;
48
+ getAllItems(): Promise<WorkItem[]>;
49
+ }
50
+ /** Minimal KR-tracking surface the subscriber needs. */
51
+ export interface KRCompletionTracker {
52
+ listByMission(missionId: string): Promise<KeyResult[]>;
53
+ get(missionId: string, krId: string): Promise<KeyResult | null>;
54
+ onWorkItemCompleted(workItem: WorkItem): Promise<void>;
55
+ }
56
+ /** Constructor dependencies (all injectable for tests). */
57
+ export interface KRCompletionSubscriberDependencies {
58
+ eventBus: EventBusService;
59
+ taskPool: KRCompletionTaskPool;
60
+ krTracking: KRCompletionTracker;
61
+ /** Loads a mission by id (for `ownerTeamId` on the published event). */
62
+ loadMission?: (missionId: string) => Promise<Mission | null>;
63
+ logger?: ComponentLogger;
64
+ /** Clock override for the per-day dedup key. */
65
+ now?: () => Date;
66
+ }
67
+ /**
68
+ * Drives KR auto-measurement and `team:all_tasks_done` from task terminal
69
+ * events. See module docs.
70
+ */
71
+ export declare class KRCompletionSubscriber {
72
+ private readonly eventBus;
73
+ private readonly taskPool;
74
+ private readonly krTracking;
75
+ private readonly loadMission;
76
+ private readonly logger;
77
+ private readonly now;
78
+ private unsubscribers;
79
+ private started;
80
+ private readonly pendingDispatches;
81
+ /** `<missionId>:<YYYY-MM-DD>` keys already published today (FIFO-bounded). */
82
+ private readonly publishedAllDone;
83
+ constructor(deps: KRCompletionSubscriberDependencies);
84
+ /**
85
+ * Production wiring helper — constructs from singletons.
86
+ *
87
+ * @param eventBus - The live event bus
88
+ * @returns A subscriber ready to `start()`
89
+ */
90
+ static boot(eventBus: EventBusService): KRCompletionSubscriber;
91
+ /** Subscribe to the task terminal events. Idempotent. */
92
+ start(): void;
93
+ /** Detach all subscriptions. Idempotent. */
94
+ stop(): void;
95
+ /** Await every in-flight dispatch. Test affordance. */
96
+ flushPending(): Promise<void>;
97
+ private safeDispatch;
98
+ /**
99
+ * Resolve the source WI, then run the KR measurement (success events
100
+ * only) and the all-tasks-done check (every trigger event). The two
101
+ * halves are independent — a failure in one is logged and does not stop
102
+ * the other.
103
+ */
104
+ private handle;
105
+ /**
106
+ * Find the KR the WI contributes to and feed it to
107
+ * {@link KRTrackingService.onWorkItemCompleted} when that KR is measured
108
+ * by task completion.
109
+ */
110
+ private measureKR;
111
+ /**
112
+ * Publish `team:all_tasks_done` once per mission per UTC day when the
113
+ * mission has no non-terminal WorkItems left in the pool.
114
+ */
115
+ private maybePublishAllTasksDone;
116
+ private rememberPublished;
117
+ }
118
+ //# sourceMappingURL=kr-completion.subscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kr-completion.subscriber.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/kr-completion.subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,mCAAmC,CAAC;AAC/F,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAW/D,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EAA4C,CAAC;AAE/F;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,SAAS,EAIpD,CAAC;AAYX,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC/D,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAChE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,2DAA2D;AAC3D,MAAM,WAAW,kCAAkC;IACjD,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAwBD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IACnE,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;gBAErC,IAAI,EAAE,kCAAkC;IAUpD;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,sBAAsB;IAQ9D,yDAAyD;IACzD,KAAK,IAAI,IAAI;IAab,4CAA4C;IAC5C,IAAI,IAAI,IAAI;IAYZ,uDAAuD;IACjD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAUnC,OAAO,CAAC,YAAY;IAiBpB;;;;;OAKG;YACW,MAAM;IAoBpB;;;;OAIG;YACW,SAAS;IAoCvB;;;OAGG;YACW,wBAAwB;IAoCtC,OAAO,CAAC,iBAAiB;CAM1B"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * KR Completion Subscriber
3
+ *
4
+ * Closes two gaps in the OKR runtime loop that the data model already
5
+ * supported but nothing ever drove:
6
+ *
7
+ * 1. **KR auto-measurement from task completion.**
8
+ * `KRTrackingService.onWorkItemCompleted` maps completed/total linked
9
+ * WorkItems onto a KR whose `measurementSource === 'task_completion'`,
10
+ * but had zero production callers. This subscriber listens to the
11
+ * pool's terminal-success events (`task:done`, `task:verified`),
12
+ * resolves the KR either from `workItem.metadata.krId` or from any KR
13
+ * of the mission whose `linkedWorkItemIds` contains the WI, and calls
14
+ * `onWorkItemCompleted`.
15
+ *
16
+ * 2. **`team:all_tasks_done` publication.**
17
+ * The event was declared, CRITICAL, subscribed to by the orchestrator
18
+ * and handled by the EventToWorkItemBridge (→ `mission:review_due` →
19
+ * review WI) — but nothing published it. On every task terminal event
20
+ * (`task:done`, `task:verified`, `task:cancelled`) this subscriber
21
+ * checks whether the WI's mission has zero non-terminal WorkItems left
22
+ * and, if so, publishes once per mission per UTC day (idempotent id
23
+ * `<missionId>:all_tasks_done:<YYYY-MM-DD>`).
24
+ *
25
+ * Follows the same shape as the other in-process subscribers (bridge,
26
+ * auto-learning, milestone): `onInProcess` subscriptions, per-dispatch
27
+ * try/catch, `flushPending()` for tests, idempotent `start()`/`stop()`.
28
+ *
29
+ * @module services/v3/kr-completion.subscriber
30
+ */
31
+ import { LoggerService } from '../core/logger.service.js';
32
+ import { SLA_TERMINAL_WORK_ITEM_STATUSES } from '../../types/v2/work-item.types.js';
33
+ import { formatError } from '../../utils/format-error.js';
34
+ import { safeReadJson } from '../../utils/file-io.utils.js';
35
+ import { getMissionPath } from './mission-paths.js';
36
+ import { KRTrackingService } from './kr-tracking.service.js';
37
+ import { TaskPoolService } from '../task-pool/task-pool.service.js';
38
+ // ---------------------------------------------------------------------------
39
+ // Constants
40
+ // ---------------------------------------------------------------------------
41
+ /** Terminal-success events that may move a `task_completion` KR. */
42
+ export const KR_MEASURE_EVENTS = ['task:done', 'task:verified'];
43
+ /**
44
+ * Task terminal events after which a mission may have no active work left.
45
+ * `task:cancelled` is included so a mission whose last item was cancelled
46
+ * still gets its "all done — review" nudge.
47
+ */
48
+ export const ALL_TASKS_DONE_TRIGGER_EVENTS = [
49
+ 'task:done',
50
+ 'task:verified',
51
+ 'task:cancelled',
52
+ ];
53
+ /** Bounded size of the per-day `team:all_tasks_done` dedup set. */
54
+ const ALL_TASKS_DONE_DEDUP_CAPACITY = 1000;
55
+ /** KR measurement source that this subscriber is allowed to drive. */
56
+ const TASK_COMPLETION_SOURCE = 'task_completion';
57
+ // ---------------------------------------------------------------------------
58
+ // Helpers
59
+ // ---------------------------------------------------------------------------
60
+ /** UTC calendar-day key (`YYYY-MM-DD`). */
61
+ function dayKey(now) {
62
+ return now.toISOString().slice(0, 10);
63
+ }
64
+ /** Default production mission loader — reads the shared missions dir. */
65
+ async function defaultLoadMission(missionId) {
66
+ try {
67
+ return await safeReadJson(getMissionPath(missionId), null);
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // Subscriber
75
+ // ---------------------------------------------------------------------------
76
+ /**
77
+ * Drives KR auto-measurement and `team:all_tasks_done` from task terminal
78
+ * events. See module docs.
79
+ */
80
+ export class KRCompletionSubscriber {
81
+ eventBus;
82
+ taskPool;
83
+ krTracking;
84
+ loadMission;
85
+ logger;
86
+ now;
87
+ unsubscribers = [];
88
+ started = false;
89
+ pendingDispatches = new Set();
90
+ /** `<missionId>:<YYYY-MM-DD>` keys already published today (FIFO-bounded). */
91
+ publishedAllDone = [];
92
+ constructor(deps) {
93
+ this.eventBus = deps.eventBus;
94
+ this.taskPool = deps.taskPool;
95
+ this.krTracking = deps.krTracking;
96
+ this.loadMission = deps.loadMission ?? defaultLoadMission;
97
+ this.logger =
98
+ deps.logger ?? LoggerService.getInstance().createComponentLogger('KRCompletionSubscriber');
99
+ this.now = deps.now ?? (() => new Date());
100
+ }
101
+ /**
102
+ * Production wiring helper — constructs from singletons.
103
+ *
104
+ * @param eventBus - The live event bus
105
+ * @returns A subscriber ready to `start()`
106
+ */
107
+ static boot(eventBus) {
108
+ return new KRCompletionSubscriber({
109
+ eventBus,
110
+ taskPool: TaskPoolService.getInstance(),
111
+ krTracking: KRTrackingService.getInstance(),
112
+ });
113
+ }
114
+ /** Subscribe to the task terminal events. Idempotent. */
115
+ start() {
116
+ if (this.started)
117
+ return;
118
+ this.started = true;
119
+ for (const eventType of ALL_TASKS_DONE_TRIGGER_EVENTS) {
120
+ this.unsubscribers.push(this.eventBus.onInProcess(eventType, (e) => this.safeDispatch(eventType, e)));
121
+ }
122
+ this.logger.info('KRCompletionSubscriber subscribed', {
123
+ eventTypes: ALL_TASKS_DONE_TRIGGER_EVENTS,
124
+ });
125
+ }
126
+ /** Detach all subscriptions. Idempotent. */
127
+ stop() {
128
+ for (const u of this.unsubscribers) {
129
+ try {
130
+ u();
131
+ }
132
+ catch (err) {
133
+ this.logger.warn('KRCompletion unsubscribe threw', { error: formatError(err) });
134
+ }
135
+ }
136
+ this.unsubscribers = [];
137
+ this.started = false;
138
+ }
139
+ /** Await every in-flight dispatch. Test affordance. */
140
+ async flushPending() {
141
+ while (this.pendingDispatches.size > 0) {
142
+ await Promise.allSettled(Array.from(this.pendingDispatches));
143
+ }
144
+ }
145
+ // -------------------------------------------------------------------------
146
+ // Dispatch
147
+ // -------------------------------------------------------------------------
148
+ safeDispatch(eventType, event) {
149
+ const promise = (async () => {
150
+ try {
151
+ await this.handle(eventType, event);
152
+ }
153
+ catch (err) {
154
+ this.logger.warn('KRCompletion dispatch threw — swallowed', {
155
+ eventType,
156
+ eventId: event.id,
157
+ error: formatError(err),
158
+ });
159
+ }
160
+ })();
161
+ this.pendingDispatches.add(promise);
162
+ promise.finally(() => this.pendingDispatches.delete(promise));
163
+ return promise;
164
+ }
165
+ /**
166
+ * Resolve the source WI, then run the KR measurement (success events
167
+ * only) and the all-tasks-done check (every trigger event). The two
168
+ * halves are independent — a failure in one is logged and does not stop
169
+ * the other.
170
+ */
171
+ async handle(eventType, event) {
172
+ if (!event.workItemId)
173
+ return;
174
+ const workItem = await this.taskPool.findWorkItem(event.workItemId);
175
+ if (!workItem || !workItem.missionId)
176
+ return;
177
+ if (KR_MEASURE_EVENTS.includes(eventType)) {
178
+ try {
179
+ await this.measureKR(workItem);
180
+ }
181
+ catch (err) {
182
+ this.logger.warn('KR auto-measure failed', {
183
+ workItemId: workItem.id,
184
+ missionId: workItem.missionId,
185
+ error: formatError(err),
186
+ });
187
+ }
188
+ }
189
+ await this.maybePublishAllTasksDone(workItem.missionId);
190
+ }
191
+ /**
192
+ * Find the KR the WI contributes to and feed it to
193
+ * {@link KRTrackingService.onWorkItemCompleted} when that KR is measured
194
+ * by task completion.
195
+ */
196
+ async measureKR(workItem) {
197
+ const missionId = workItem.missionId;
198
+ const explicitKrId = typeof workItem.metadata?.krId === 'string' ? workItem.metadata.krId : undefined;
199
+ let kr = null;
200
+ if (explicitKrId) {
201
+ kr = await this.krTracking.get(missionId, explicitKrId);
202
+ }
203
+ else {
204
+ const krs = await this.krTracking.listByMission(missionId);
205
+ kr = krs.find((k) => k.linkedWorkItemIds.includes(workItem.id)) ?? null;
206
+ }
207
+ if (!kr)
208
+ return;
209
+ if (kr.measurementSource !== TASK_COMPLETION_SOURCE) {
210
+ this.logger.debug('KR not measured by task completion — skipping auto-measure', {
211
+ krId: kr.id,
212
+ measurementSource: kr.measurementSource,
213
+ });
214
+ return;
215
+ }
216
+ // `onWorkItemCompleted` keys on `metadata.krId`; inject it when the link
217
+ // was discovered via `linkedWorkItemIds` so the existing service method
218
+ // can stay untouched.
219
+ const withKr = explicitKrId
220
+ ? workItem
221
+ : { ...workItem, metadata: { ...(workItem.metadata ?? {}), krId: kr.id } };
222
+ await this.krTracking.onWorkItemCompleted(withKr);
223
+ this.logger.info('KR auto-measured from task completion', {
224
+ krId: kr.id,
225
+ missionId,
226
+ workItemId: workItem.id,
227
+ });
228
+ }
229
+ /**
230
+ * Publish `team:all_tasks_done` once per mission per UTC day when the
231
+ * mission has no non-terminal WorkItems left in the pool.
232
+ */
233
+ async maybePublishAllTasksDone(missionId) {
234
+ const key = `${missionId}:${dayKey(this.now())}`;
235
+ if (this.publishedAllDone.includes(key))
236
+ return;
237
+ const allItems = await this.taskPool.getAllItems();
238
+ const missionItems = allItems.filter((wi) => wi.missionId === missionId);
239
+ if (missionItems.length === 0)
240
+ return;
241
+ const active = missionItems.filter((wi) => !SLA_TERMINAL_WORK_ITEM_STATUSES.has(wi.status));
242
+ if (active.length > 0)
243
+ return;
244
+ // Re-check after the awaits: two WIs finishing in the same tick both
245
+ // pass the early check above; only the first to reach this synchronous
246
+ // section may publish.
247
+ if (this.publishedAllDone.includes(key))
248
+ return;
249
+ this.rememberPublished(key);
250
+ const mission = await this.loadMission(missionId);
251
+ this.eventBus.publish({
252
+ id: `${missionId}:all_tasks_done:${dayKey(this.now())}`,
253
+ type: 'team:all_tasks_done',
254
+ timestamp: this.now().toISOString(),
255
+ teamId: mission?.ownerTeamId ?? '',
256
+ teamName: '',
257
+ memberId: '',
258
+ memberName: '',
259
+ sessionName: '',
260
+ previousValue: String(missionItems.length),
261
+ newValue: 'all_tasks_done',
262
+ changedField: 'taskStatus',
263
+ missionId,
264
+ });
265
+ this.logger.info('team:all_tasks_done published', {
266
+ missionId,
267
+ totalItems: missionItems.length,
268
+ });
269
+ }
270
+ rememberPublished(key) {
271
+ this.publishedAllDone.push(key);
272
+ if (this.publishedAllDone.length > ALL_TASKS_DONE_DEDUP_CAPACITY) {
273
+ this.publishedAllDone.shift();
274
+ }
275
+ }
276
+ }
277
+ //# sourceMappingURL=kr-completion.subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kr-completion.subscriber.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/kr-completion.subscriber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * KR Skill Measurer — fills `measurementSource: 'skill_output'` Key Results
3
+ * from a skill's JSON output.
4
+ *
5
+ * Until 2026-09-18 a KR's value had exactly three ways to change and all of
6
+ * them were a hand-made API call, so "tickets waiting for acceptance" or
7
+ * "build pass rate" could only be tracked by someone remembering to type the
8
+ * number in. A KR configured as
9
+ *
10
+ * ```json
11
+ * { "measurementSource": "skill_output",
12
+ * "measurementConfig": { "skill": "steamfun-ticket-count",
13
+ * "args": { "status": "review" },
14
+ * "jsonPath": ".count" } }
15
+ * ```
16
+ *
17
+ * is now measured on every mission sweep: the named skill's `execute.sh` is
18
+ * run with the JSON args, the number at `jsonPath` is read from its stdout
19
+ * and recorded as a measurement (deduped when unchanged since the last one).
20
+ *
21
+ * Safety: `skill` is a bare name (`[a-z0-9-]`) resolved against the known
22
+ * skill roots only — never a path — and runs with a hard timeout and a
23
+ * bounded output size. This is the same trust boundary as an agent running
24
+ * the skill itself, not a new one.
25
+ *
26
+ * @module services/v3/kr-skill-measurer.service
27
+ */
28
+ import { KRTrackingService } from './kr-tracking.service.js';
29
+ import type { KeyResult } from '../../types/v2/key-result.types.js';
30
+ /** Shape of `measurementConfig` for a `skill_output` KR. */
31
+ export interface SkillOutputMeasurementConfig {
32
+ /** Bare skill directory name, e.g. `steamfun-ticket-count`. */
33
+ skill: string;
34
+ /** JSON object passed to the skill as its single argument. */
35
+ args?: Record<string, unknown>;
36
+ /** Dot path into the skill's JSON stdout, e.g. `.count` or `.data.total`. Default `.value`. */
37
+ jsonPath?: string;
38
+ }
39
+ /** What one measurement attempt produced. */
40
+ export interface SkillMeasurementOutcome {
41
+ krId: string;
42
+ status: 'recorded' | 'unchanged' | 'skipped' | 'failed';
43
+ value?: number;
44
+ reason?: string;
45
+ }
46
+ /** Runs a resolved skill and returns its stdout. Injectable for tests. */
47
+ export type SkillRunner = (executePath: string, argsJson: string, timeoutMs: number) => Promise<string>;
48
+ /**
49
+ * Default runner: `bash <execute.sh> '<json>'` with a timeout and output cap.
50
+ *
51
+ * @param executePath - Absolute path of the skill's execute.sh
52
+ * @param argsJson - JSON argument string
53
+ * @param timeoutMs - Kill the skill after this long
54
+ * @returns stdout
55
+ */
56
+ export declare const defaultSkillRunner: SkillRunner;
57
+ /**
58
+ * Read a dot path (`.a.b.c`, leading dot optional) out of parsed JSON.
59
+ *
60
+ * @param value - Parsed JSON
61
+ * @param jsonPath - Dot path
62
+ * @returns The value at the path, or undefined
63
+ */
64
+ export declare function readJsonPath(value: unknown, jsonPath: string): unknown;
65
+ /**
66
+ * Coerce a skill output value to a number: numbers as is, booleans to 1/0,
67
+ * numeric strings parsed. Anything else is undefined.
68
+ *
69
+ * @param raw - Value read from the skill output
70
+ * @returns A finite number or undefined
71
+ */
72
+ export declare function coerceMeasurement(raw: unknown): number | undefined;
73
+ /**
74
+ * Measures `skill_output` Key Results by running their skill.
75
+ */
76
+ export declare class KRSkillMeasurerService {
77
+ private static instance;
78
+ private readonly logger;
79
+ private readonly runner;
80
+ private readonly skillRoots;
81
+ private readonly krTracking;
82
+ /**
83
+ * @param opts - Test seams: skill roots to search, a runner, a KR service
84
+ */
85
+ constructor(opts?: {
86
+ skillRoots?: string[];
87
+ runner?: SkillRunner;
88
+ krTracking?: KRTrackingService;
89
+ projectRoot?: string;
90
+ });
91
+ static getInstance(): KRSkillMeasurerService;
92
+ static setInstance(next: KRSkillMeasurerService | null): void;
93
+ /**
94
+ * Resolve a bare skill name to its `execute.sh`, searching the known roots.
95
+ *
96
+ * @param skill - Bare directory name
97
+ * @returns Absolute path, or null when the name is invalid or not found
98
+ */
99
+ resolveSkill(skill: string): string | null;
100
+ /**
101
+ * Measure every `skill_output` KR of a mission. Failure-soft: one KR's
102
+ * error never stops the others, and nothing throws to the sweep.
103
+ *
104
+ * @param missionId - Mission whose KRs to measure
105
+ * @returns One outcome per skill_output KR
106
+ */
107
+ measureMission(missionId: string): Promise<SkillMeasurementOutcome[]>;
108
+ /**
109
+ * Measure one KR. Exposed for the manual `POST …/measure-now` path.
110
+ *
111
+ * @param missionId - Owning mission
112
+ * @param kr - The KR (must be `skill_output`)
113
+ * @returns The outcome
114
+ */
115
+ measureOne(missionId: string, kr: KeyResult): Promise<SkillMeasurementOutcome>;
116
+ }
117
+ //# sourceMappingURL=kr-skill-measurer.service.d.ts.map