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 @@
1
+ {"version":3,"file":"mission-paths.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAEtD,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAE1C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEhD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC/D,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,WAAoB;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,IAAI,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,WAAoB;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,WAAoB;IACtE,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC/E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mission-period.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,iCAAiC,CAAC;AA2B7F,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;;OASG;IACG,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkD3D;;;;;OAKG;IACG,uBAAuB,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY7D;;;;;;;OAOG;IACG,0BAA0B,CAC9B,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAa,EAC3D,GAAG,CAAC,EAAE,IAAI,GACT,OAAO,CAAC,OAAO,EAAE,CAAC;IAkCrB;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,mBAAmB;CAYlC"}
1
+ {"version":3,"file":"mission-period.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,iCAAiC,CAAC;AAkB7F,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;;OASG;IACG,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkD3D;;;;;OAKG;IACG,uBAAuB,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY7D;;;;;;;OAOG;IACG,0BAA0B,CAC9B,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAa,EAC3D,GAAG,CAAC,EAAE,IAAI,GACT,OAAO,CAAC,OAAO,EAAE,CAAC;IAkCrB;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,mBAAmB;CAYlC"}
@@ -17,21 +17,10 @@
17
17
  */
18
18
  import * as fs from 'fs/promises';
19
19
  import * as path from 'path';
20
+ import { getMissionsDir } from './mission-paths.js';
20
21
  import { LoggerService } from '../core/logger.service.js';
21
22
  import { isPeriodActive, isPeriodPast, isPeriodFuture, sortMissionsByPriority, TERMINAL_MISSION_STATUSES, } from '../../types/v2/mission.types.js';
22
23
  // ---------------------------------------------------------------------------
23
- // Constants
24
- // ---------------------------------------------------------------------------
25
- /**
26
- * Resolve the mission store directory. Defaults to `<cwd>/.crewly/missions`
27
- * (the production store). Honors the `CREWLY_MISSIONS_DIR` env override so tests
28
- * can isolate to a temp directory and never read/delete the real store — without
29
- * this override a test's cleanup would wipe production missions.
30
- */
31
- function getMissionsDir() {
32
- return process.env['CREWLY_MISSIONS_DIR'] || path.join(process.cwd(), '.crewly', 'missions');
33
- }
34
- // ---------------------------------------------------------------------------
35
24
  // Service
36
25
  // ---------------------------------------------------------------------------
37
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mission-period.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mission-period.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  *
14
14
  * @module services/v3/mission-reminder.service
15
15
  */
16
+ import type { EventBusService } from '../event-bus/event-bus.service.js';
16
17
  import type { ReviewReason } from '../../types/review-reason.types.js';
17
18
  export type { ReviewReason };
18
19
  /**
@@ -39,6 +40,23 @@ export declare class MissionReminderService {
39
40
  * {@link cronParseFailureCount} for tests + (future) Prom metric.
40
41
  */
41
42
  private cronParseFailures;
43
+ /**
44
+ * Optional EventBus for `mission:stale` publication. Wired from the
45
+ * backend boot path via {@link setEventBusService}; when absent the
46
+ * stale detection still bumps `staleCycles` but publishes nothing.
47
+ */
48
+ private eventBus;
49
+ /**
50
+ * Consecutive idle sweeps per mission (no active WI + no KR measurement
51
+ * since the previous sweep). In-memory by design — a restart simply
52
+ * restarts the count, and the per-day publish id keeps the downstream
53
+ * review WI idempotent regardless.
54
+ */
55
+ private readonly idleSweeps;
56
+ /** Wall-clock of the previous sweep (for "measurement since last sweep"). */
57
+ private lastSweepAt;
58
+ /** `<missionId>:stale:<YYYY-MM-DD>` ids already published (FIFO-bounded). */
59
+ private readonly publishedStale;
42
60
  private constructor();
43
61
  /**
44
62
  * Total number of cron-parse failures observed since this service
@@ -57,6 +75,13 @@ export declare class MissionReminderService {
57
75
  private getTaskPool;
58
76
  static getInstance(): MissionReminderService;
59
77
  static resetInstance(): void;
78
+ /**
79
+ * Wire the EventBus used to publish `mission:stale`. Idempotent; pass
80
+ * `null` to disable publication (tests / CLI).
81
+ *
82
+ * @param bus - The live EventBusService, or null
83
+ */
84
+ setEventBusService(bus: EventBusService | null): void;
60
85
  /**
61
86
  * Run a full sweep of all active missions, sending Slack OKR reminders
62
87
  * AND (per REVIEW-1, Phase E pre-beta) creating cadence-driven review
@@ -83,14 +108,56 @@ export declare class MissionReminderService {
83
108
  skipped: number;
84
109
  reviewsCreated: number;
85
110
  reviewsSkipped: number;
111
+ /** Cadence boundaries where the deterministic review said `continue` — no WI raised. */
112
+ reviewsAutoContinued: number;
113
+ /** Missions flagged stale this sweep (`mission:stale` published, staleCycles bumped). */
114
+ staleFlagged: number;
115
+ /** KRs re-measured from skill output this sweep */
116
+ skillMeasured: number;
86
117
  }>;
87
118
  /**
88
119
  * Result of {@link maybeCreateReviewWorkItem} — `'created'` when a new
89
120
  * review WorkItem was added to the pool, `'skipped'` when the
90
121
  * reentrancy lock or cadence boundary blocked creation, `'noop'` when
91
- * the mission has no executionCadence configured (legacy missions).
122
+ * the mission has no executionCadence configured (legacy missions),
123
+ * `'auto_continued'` when the cadence boundary fired but the
124
+ * deterministic OKR review recommended `continue` with no off-track KR
125
+ * — the review is persisted on the mission and NO WorkItem is raised.
92
126
  */
93
127
  private maybeCreateReviewWorkItem;
128
+ /**
129
+ * Run {@link MissionPeriodService.reconcile} so period-bound missions
130
+ * auto-activate / get flagged at period end. Previously nothing called
131
+ * reconcile(), so periods never advanced on their own. Failure-soft.
132
+ */
133
+ private reconcilePeriods;
134
+ /**
135
+ * Stale detector. A mission is "idle" this sweep when it has no
136
+ * non-terminal WorkItem in the pool AND no KR measurement recorded since
137
+ * the previous sweep. After {@link STALE_SWEEP_THRESHOLD} consecutive
138
+ * idle sweeps the mission's `staleCycles` is bumped, persisted, and a
139
+ * `mission:stale` event is published with the idempotent id
140
+ * `<missionId>:stale:<YYYY-MM-DD>` (once per mission per UTC day). The
141
+ * bridge turns that into a `no_active_work` review WorkItem.
142
+ *
143
+ * @returns `true` when the mission was flagged stale on this sweep
144
+ */
145
+ private detectStale;
146
+ /** Whether any KR carries a measurement taken at/after `since`. */
147
+ private hasMeasurementSince;
148
+ /**
149
+ * Run {@link OKRReviewService.executeReview} for a mission at its cadence
150
+ * boundary and fold the persisted bookkeeping (`lastReviewSummary`,
151
+ * `staleCycles`, `lastReviewAt`) back into the caller's in-memory copy.
152
+ *
153
+ * Failure-soft: any error is logged and `null` is returned so the sweep
154
+ * falls back to the legacy behaviour (create the review WI with an
155
+ * inferred reason) rather than dropping the cadence tick.
156
+ *
157
+ * @param mission - In-memory mission (mutated with the persisted fields)
158
+ * @returns The review result, or `null` if the review could not run
159
+ */
160
+ private runDeterministicReview;
94
161
  /**
95
162
  * Pick the {@link ReviewReason} for this sweep tick.
96
163
  *
@@ -137,9 +204,16 @@ export declare class MissionReminderService {
137
204
  */
138
205
  private resolveOwnerName;
139
206
  /**
140
- * Load all missions with 'active' status.
207
+ * Load all executable missions — `status: 'active'` AND approved (or
208
+ * legacy, no approval metadata). A cascade child still awaiting its
209
+ * owner's approval is skipped so it is neither reminded about nor handed
210
+ * review WorkItems before anyone said yes. See {@link isMissionExecutable}.
141
211
  */
142
212
  private loadAllActiveMissions;
213
+ /**
214
+ * Load a single mission from disk (null when missing/corrupt).
215
+ */
216
+ private loadMission;
143
217
  /**
144
218
  * Save a mission back to disk.
145
219
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mission-reminder.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-reminder.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAOvE,YAAY,EAAE,YAAY,EAAE,CAAC;AAiE7B;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAAK;IAE9B,OAAO;IAMP;;;;;;OAMG;IACH,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAOnB,MAAM,CAAC,WAAW,IAAI,sBAAsB;IAO5C,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,QAAQ,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAgFF;;;;;OAKG;YACW,yBAAyB;IAwIvC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;;;;;;;;;;;OAYG;YACW,sBAAsB;IAcpC;;OAEG;YACW,YAAY;IAoC1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,qBAAqB;IAuBnC;;OAEG;YACW,WAAW;CAI1B"}
1
+ {"version":3,"file":"mission-reminder.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-reminder.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAUzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAOvE,YAAY,EAAE,YAAY,EAAE,CAAC;AAuE7B;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAAK;IAE9B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IAExD,6EAA6E;IAC7E,OAAO,CAAC,WAAW,CAAqB;IAExC,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAE/C,OAAO;IAMP;;;;;;OAMG;IACH,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAOnB,MAAM,CAAC,WAAW,IAAI,sBAAsB;IAO5C,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;OAKG;IACH,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAIrD;;;;;;;;;;;;;;;;;;;OAmBG;IACG,QAAQ,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,wFAAwF;QACxF,oBAAoB,EAAE,MAAM,CAAC;QAC7B,yFAAyF;QACzF,YAAY,EAAE,MAAM,CAAC;QACrB,mDAAmD;QACnD,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAoIF;;;;;;;;OAQG;YACW,yBAAyB;IAoLvC;;;;OAIG;YACW,gBAAgB;IAa9B;;;;;;;;;;OAUG;YACW,WAAW;IAyDzB,mEAAmE;IACnE,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;;;;OAWG;YACW,sBAAsB;IAmBpC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;;;;;;;;;;;OAYG;YACW,sBAAsB;IAcpC;;OAEG;YACW,YAAY;IAoC1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;YACW,gBAAgB;IAqB9B;;;;;OAKG;YACW,qBAAqB;IAuBnC;;OAEG;YACW,WAAW;IASzB;;OAEG;YACW,WAAW;CAI1B"}
@@ -15,12 +15,17 @@
15
15
  */
16
16
  import * as fs from 'fs/promises';
17
17
  import * as path from 'path';
18
+ import { getMissionsDir } from './mission-paths.js';
18
19
  import { CronExpressionParser } from 'cron-parser';
19
20
  import { LoggerService } from '../core/logger.service.js';
20
21
  import { StorageService } from '../core/storage.service.js';
21
22
  import { KRTrackingService } from './kr-tracking.service.js';
23
+ import { OKRReviewService } from './okr-review.service.js';
24
+ import { MissionPeriodService } from './mission-period.service.js';
25
+ import { KRSkillMeasurerService } from './kr-skill-measurer.service.js';
22
26
  import { getSlackOrchestratorBridge } from '../slack/slack-orchestrator-bridge.js';
23
27
  import { TaskPoolService } from '../task-pool/task-pool.service.js';
28
+ import { isMissionExecutable } from '../../types/v2/mission.types.js';
24
29
  import { SLA_TERMINAL_WORK_ITEM_STATUSES } from '../../types/v2/work-item.types.js';
25
30
  import { atomicWriteJson } from '../../utils/file-io.utils.js';
26
31
  import { pickTeamLead } from '../../utils/team.utils.js';
@@ -30,6 +35,14 @@ import { ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
30
35
  // ---------------------------------------------------------------------------
31
36
  /** Minimum interval between reminders for the same mission (24 hours) */
32
37
  const REMINDER_COOLDOWN_MS = 24 * 60 * 60 * 1000;
38
+ /**
39
+ * Consecutive sweeps a mission must show no active WorkItem AND no fresh
40
+ * KR measurement before it is flagged stale (`mission:stale` published,
41
+ * `staleCycles` bumped). Two sweeps ≈ two hours on the production timer.
42
+ */
43
+ const STALE_SWEEP_THRESHOLD = 2;
44
+ /** Bounded size of the per-day `mission:stale` publish dedup set. */
45
+ const STALE_DEDUP_CAPACITY = 1000;
33
46
  /**
34
47
  * Statuses that *clear* a Mission's `pendingReviewWorkItemId` so the next
35
48
  * sweep tick can fire a new review. Aliases the canonical
@@ -54,9 +67,6 @@ const REMINDER_COOLDOWN_MS = 24 * 60 * 60 * 1000;
54
67
  * and clear the lock when it's in any of the SLA-terminal states.
55
68
  */
56
69
  const PENDING_REVIEW_TERMINAL_STATUSES = SLA_TERMINAL_WORK_ITEM_STATUSES;
57
- function getMissionsDir() {
58
- return path.join(process.cwd(), '.crewly', 'missions');
59
- }
60
70
  /**
61
71
  * Default timezone used when a mission's `policy.executionCadence.workHours`
62
72
  * does not specify one. UTC keeps the dedup key globally consistent across
@@ -104,6 +114,23 @@ export class MissionReminderService {
104
114
  * {@link cronParseFailureCount} for tests + (future) Prom metric.
105
115
  */
106
116
  cronParseFailures = 0;
117
+ /**
118
+ * Optional EventBus for `mission:stale` publication. Wired from the
119
+ * backend boot path via {@link setEventBusService}; when absent the
120
+ * stale detection still bumps `staleCycles` but publishes nothing.
121
+ */
122
+ eventBus = null;
123
+ /**
124
+ * Consecutive idle sweeps per mission (no active WI + no KR measurement
125
+ * since the previous sweep). In-memory by design — a restart simply
126
+ * restarts the count, and the per-day publish id keeps the downstream
127
+ * review WI idempotent regardless.
128
+ */
129
+ idleSweeps = new Map();
130
+ /** Wall-clock of the previous sweep (for "measurement since last sweep"). */
131
+ lastSweepAt = null;
132
+ /** `<missionId>:stale:<YYYY-MM-DD>` ids already published (FIFO-bounded). */
133
+ publishedStale = [];
107
134
  constructor() {
108
135
  this.logger = LoggerService.getInstance().createComponentLogger('MissionReminder');
109
136
  this.storageService = StorageService.getInstance();
@@ -140,6 +167,15 @@ export class MissionReminderService {
140
167
  static resetInstance() {
141
168
  MissionReminderService.instance = null;
142
169
  }
170
+ /**
171
+ * Wire the EventBus used to publish `mission:stale`. Idempotent; pass
172
+ * `null` to disable publication (tests / CLI).
173
+ *
174
+ * @param bus - The live EventBusService, or null
175
+ */
176
+ setEventBusService(bus) {
177
+ this.eventBus = bus;
178
+ }
143
179
  /**
144
180
  * Run a full sweep of all active missions, sending Slack OKR reminders
145
181
  * AND (per REVIEW-1, Phase E pre-beta) creating cadence-driven review
@@ -162,6 +198,11 @@ export class MissionReminderService {
162
198
  */
163
199
  async runSweep(force = false) {
164
200
  const now = new Date();
201
+ const previousSweepAt = this.lastSweepAt;
202
+ this.lastSweepAt = now;
203
+ // Period lifecycle first: a paused mission whose period just started
204
+ // becomes active and is then picked up by loadAllActiveMissions below.
205
+ await this.reconcilePeriods(now);
165
206
  const missions = await this.loadAllActiveMissions();
166
207
  const result = {
167
208
  checked: 0,
@@ -169,10 +210,56 @@ export class MissionReminderService {
169
210
  skipped: 0,
170
211
  reviewsCreated: 0,
171
212
  reviewsSkipped: 0,
213
+ reviewsAutoContinued: 0,
214
+ staleFlagged: 0,
215
+ skillMeasured: 0,
172
216
  };
173
217
  this.logger.info('Starting Mission OKR reminder sweep', { count: missions.length });
218
+ // One pool read per sweep for the stale detector (not per mission).
219
+ let poolItems = null;
220
+ if (missions.length > 0) {
221
+ try {
222
+ poolItems = await this.getTaskPool().getAllItems();
223
+ }
224
+ catch (err) {
225
+ this.logger.warn('Stale detection skipped — pool unavailable', {
226
+ error: err instanceof Error ? err.message : String(err),
227
+ });
228
+ }
229
+ }
174
230
  for (const mission of missions) {
175
231
  result.checked++;
232
+ // -------------------------------------------------------------------
233
+ // Stale detection: no active WorkItem AND no KR measurement since the
234
+ // previous sweep, for STALE_SWEEP_THRESHOLD consecutive sweeps.
235
+ // -------------------------------------------------------------------
236
+ if (poolItems) {
237
+ try {
238
+ const flagged = await this.detectStale(mission, poolItems, previousSweepAt, now);
239
+ if (flagged)
240
+ result.staleFlagged++;
241
+ }
242
+ catch (err) {
243
+ this.logger.warn('Stale detection failed for mission', {
244
+ missionId: mission.id,
245
+ error: err instanceof Error ? err.message : String(err),
246
+ });
247
+ }
248
+ }
249
+ // Refresh skill-measured KRs before reading progress, so the sweep
250
+ // reviews this hour's numbers rather than whatever was typed in last.
251
+ try {
252
+ const measured = await KRSkillMeasurerService.getInstance().measureMission(mission.id);
253
+ const recorded = measured.filter((m) => m.status === 'recorded').length;
254
+ if (recorded > 0)
255
+ result.skillMeasured += recorded;
256
+ }
257
+ catch (err) {
258
+ this.logger.warn('skill_output measurement failed for mission', {
259
+ missionId: mission.id,
260
+ error: err instanceof Error ? err.message : String(err),
261
+ });
262
+ }
176
263
  let summary = null;
177
264
  try {
178
265
  // Get OKR progress summary — needed for both the reminder DM
@@ -225,6 +312,8 @@ export class MissionReminderService {
225
312
  result.reviewsCreated++;
226
313
  else if (created === 'skipped')
227
314
  result.reviewsSkipped++;
315
+ else if (created === 'auto_continued')
316
+ result.reviewsAutoContinued++;
228
317
  }
229
318
  catch (err) {
230
319
  this.logger.error('Failed to create mission review WorkItem', {
@@ -241,7 +330,10 @@ export class MissionReminderService {
241
330
  * Result of {@link maybeCreateReviewWorkItem} — `'created'` when a new
242
331
  * review WorkItem was added to the pool, `'skipped'` when the
243
332
  * reentrancy lock or cadence boundary blocked creation, `'noop'` when
244
- * the mission has no executionCadence configured (legacy missions).
333
+ * the mission has no executionCadence configured (legacy missions),
334
+ * `'auto_continued'` when the cadence boundary fired but the
335
+ * deterministic OKR review recommended `continue` with no off-track KR
336
+ * — the review is persisted on the mission and NO WorkItem is raised.
245
337
  */
246
338
  async maybeCreateReviewWorkItem(mission, summary, now) {
247
339
  const cadence = mission.policy?.executionCadence;
@@ -318,23 +410,54 @@ export class MissionReminderService {
318
410
  }
319
411
  }
320
412
  // -----------------------------------------------------------------
413
+ // Cadence boundary fired. Run the deterministic OKR review FIRST
414
+ // (aggregate → recommendation, no LLM) so the loop actually closes
415
+ // on the clock instead of only when someone POSTs /okr-review.
416
+ // `executeReview` persists lastReviewSummary / staleCycles /
417
+ // lastReviewAt on disk; we fold those back into our in-memory copy
418
+ // so the single saveMission below does not clobber them.
419
+ // -----------------------------------------------------------------
420
+ const review = await this.runDeterministicReview(mission);
421
+ const cycleId = boundary.toISOString().slice(0, 10);
422
+ const offTrack = (summary?.offTrack ?? 0) > 0 || (review?.okrSummary.offTrack ?? 0) > 0;
423
+ if (review && review.recommendation === 'continue' && !offTrack) {
424
+ // Healthy on the clock: nothing for the TL to decide. Persist the
425
+ // bookkeeping (lastReviewAt from the review, any cleared lock) and
426
+ // move on without waking anyone.
427
+ mission.lastReviewAt = review.reviewedAt;
428
+ await this.saveMission(mission);
429
+ this.logger.info('Mission cadence review: continue — no review WorkItem raised', {
430
+ missionId: mission.id,
431
+ cycleId,
432
+ progress: review.okrSummary.overallProgress,
433
+ staleCycles: mission.staleCycles ?? 0,
434
+ });
435
+ return 'auto_continued';
436
+ }
437
+ // -----------------------------------------------------------------
321
438
  // Build the deterministic review WorkItem.
322
439
  //
323
440
  // The id collapses to the date-form of the boundary so a sweep
324
441
  // replay within the same cycle hits the existing addToPool
325
442
  // dedup-by-id guard (V1 satisfied without a TaskPoolService change).
326
443
  // -----------------------------------------------------------------
327
- const cycleId = boundary.toISOString().slice(0, 10);
328
444
  const reviewWorkItemId = `${mission.id}:review:${cycleId}`;
329
- const reviewReason = this.inferReviewReason(mission, summary);
445
+ const reviewReason = this.inferReviewReason(mission, summary ?? review?.okrSummary ?? null);
330
446
  const target = await this.resolveTeamLeadSession(mission);
447
+ const recommendationLine = review
448
+ ? ` Recommendation: ${review.recommendation} (${review.action}) — ` +
449
+ `progress ${review.okrSummary.overallProgress}%, ` +
450
+ `${review.okrSummary.achieved}/${review.okrSummary.totalKRs} KRs achieved, ` +
451
+ `${review.okrSummary.offTrack} off-track, ${review.okrSummary.atRisk} at-risk, ` +
452
+ `staleCycles=${mission.staleCycles ?? 0}.`
453
+ : '';
331
454
  const reviewWorkItem = {
332
455
  id: reviewWorkItemId,
333
456
  type: 'review',
334
457
  owner: 'team_lead',
335
458
  target,
336
459
  title: `Mission review — ${mission.objective.slice(0, 60)}${mission.objective.length > 60 ? '…' : ''}`,
337
- description: `Cadence-driven review for mission ${mission.id}. Reason: ${reviewReason}.`,
460
+ description: `Cadence-driven review for mission ${mission.id}. Reason: ${reviewReason}.${recommendationLine}`,
338
461
  status: 'queued',
339
462
  createdAt: now.toISOString(),
340
463
  retryCount: 0,
@@ -349,6 +472,16 @@ export class MissionReminderService {
349
472
  reviewReason,
350
473
  reviewCycleId: cycleId,
351
474
  cadenceSchedule: cadence.reviewSchedule,
475
+ ...(review
476
+ ? {
477
+ recommendation: review.recommendation,
478
+ reviewAction: review.action,
479
+ okrProgress: review.okrSummary.overallProgress,
480
+ okrOffTrack: review.okrSummary.offTrack,
481
+ okrAtRisk: review.okrSummary.atRisk,
482
+ staleCycles: mission.staleCycles ?? 0,
483
+ }
484
+ : {}),
352
485
  },
353
486
  };
354
487
  await this.getTaskPool().addToPool(reviewWorkItem);
@@ -367,6 +500,116 @@ export class MissionReminderService {
367
500
  });
368
501
  return 'created';
369
502
  }
503
+ /**
504
+ * Run {@link MissionPeriodService.reconcile} so period-bound missions
505
+ * auto-activate / get flagged at period end. Previously nothing called
506
+ * reconcile(), so periods never advanced on their own. Failure-soft.
507
+ */
508
+ async reconcilePeriods(now) {
509
+ try {
510
+ const outcome = await MissionPeriodService.getInstance().reconcile(now);
511
+ if (outcome.activated.length > 0 || outcome.endOfPeriod.length > 0) {
512
+ this.logger.info('Mission periods reconciled', outcome);
513
+ }
514
+ }
515
+ catch (err) {
516
+ this.logger.warn('Mission period reconcile failed (non-fatal)', {
517
+ error: err instanceof Error ? err.message : String(err),
518
+ });
519
+ }
520
+ }
521
+ /**
522
+ * Stale detector. A mission is "idle" this sweep when it has no
523
+ * non-terminal WorkItem in the pool AND no KR measurement recorded since
524
+ * the previous sweep. After {@link STALE_SWEEP_THRESHOLD} consecutive
525
+ * idle sweeps the mission's `staleCycles` is bumped, persisted, and a
526
+ * `mission:stale` event is published with the idempotent id
527
+ * `<missionId>:stale:<YYYY-MM-DD>` (once per mission per UTC day). The
528
+ * bridge turns that into a `no_active_work` review WorkItem.
529
+ *
530
+ * @returns `true` when the mission was flagged stale on this sweep
531
+ */
532
+ async detectStale(mission, poolItems, previousSweepAt, now) {
533
+ const hasActiveWork = poolItems.some((wi) => wi.missionId === mission.id && !SLA_TERMINAL_WORK_ITEM_STATUSES.has(wi.status));
534
+ const krs = await this.krTrackingService.listByMission(mission.id);
535
+ const measuredSinceLastSweep = previousSweepAt !== null && this.hasMeasurementSince(krs, previousSweepAt);
536
+ if (hasActiveWork || measuredSinceLastSweep) {
537
+ this.idleSweeps.delete(mission.id);
538
+ return false;
539
+ }
540
+ const idle = (this.idleSweeps.get(mission.id) ?? 0) + 1;
541
+ this.idleSweeps.set(mission.id, idle);
542
+ if (idle < STALE_SWEEP_THRESHOLD)
543
+ return false;
544
+ const day = now.toISOString().slice(0, 10);
545
+ const eventId = `${mission.id}:stale:${day}`;
546
+ if (this.publishedStale.includes(eventId))
547
+ return false;
548
+ this.publishedStale.push(eventId);
549
+ if (this.publishedStale.length > STALE_DEDUP_CAPACITY)
550
+ this.publishedStale.shift();
551
+ mission.staleCycles = (mission.staleCycles ?? 0) + 1;
552
+ await this.saveMission(mission);
553
+ if (this.eventBus) {
554
+ this.eventBus.publish({
555
+ id: eventId,
556
+ type: 'mission:stale',
557
+ timestamp: now.toISOString(),
558
+ teamId: mission.ownerTeamId,
559
+ teamName: '',
560
+ memberId: '',
561
+ memberName: '',
562
+ sessionName: '',
563
+ previousValue: String(mission.staleCycles - 1),
564
+ newValue: String(mission.staleCycles),
565
+ changedField: 'taskStatus',
566
+ missionId: mission.id,
567
+ });
568
+ }
569
+ this.logger.info('Mission flagged stale', {
570
+ missionId: mission.id,
571
+ idleSweeps: idle,
572
+ staleCycles: mission.staleCycles,
573
+ published: this.eventBus !== null,
574
+ });
575
+ return true;
576
+ }
577
+ /** Whether any KR carries a measurement taken at/after `since`. */
578
+ hasMeasurementSince(krs, since) {
579
+ const sinceMs = since.getTime();
580
+ return krs.some((kr) => (kr.measurements ?? []).some((m) => new Date(m.measuredAt).getTime() >= sinceMs));
581
+ }
582
+ /**
583
+ * Run {@link OKRReviewService.executeReview} for a mission at its cadence
584
+ * boundary and fold the persisted bookkeeping (`lastReviewSummary`,
585
+ * `staleCycles`, `lastReviewAt`) back into the caller's in-memory copy.
586
+ *
587
+ * Failure-soft: any error is logged and `null` is returned so the sweep
588
+ * falls back to the legacy behaviour (create the review WI with an
589
+ * inferred reason) rather than dropping the cadence tick.
590
+ *
591
+ * @param mission - In-memory mission (mutated with the persisted fields)
592
+ * @returns The review result, or `null` if the review could not run
593
+ */
594
+ async runDeterministicReview(mission) {
595
+ try {
596
+ const review = await OKRReviewService.getInstance().executeReview(mission.id);
597
+ const persisted = await this.loadMission(mission.id);
598
+ if (persisted) {
599
+ mission.lastReviewSummary = persisted.lastReviewSummary;
600
+ mission.staleCycles = persisted.staleCycles;
601
+ mission.lastReviewAt = persisted.lastReviewAt;
602
+ }
603
+ return review;
604
+ }
605
+ catch (err) {
606
+ this.logger.warn('Deterministic OKR review failed at cadence boundary — falling back to review WI', {
607
+ missionId: mission.id,
608
+ error: err instanceof Error ? err.message : String(err),
609
+ });
610
+ return null;
611
+ }
612
+ }
370
613
  /**
371
614
  * Pick the {@link ReviewReason} for this sweep tick.
372
615
  *
@@ -507,7 +750,10 @@ cc: @${ORCHESTRATOR_SESSION_NAME}`;
507
750
  return 'Team Lead';
508
751
  }
509
752
  /**
510
- * Load all missions with 'active' status.
753
+ * Load all executable missions — `status: 'active'` AND approved (or
754
+ * legacy, no approval metadata). A cascade child still awaiting its
755
+ * owner's approval is skipped so it is neither reminded about nor handed
756
+ * review WorkItems before anyone said yes. See {@link isMissionExecutable}.
511
757
  */
512
758
  async loadAllActiveMissions() {
513
759
  const dir = getMissionsDir();
@@ -520,7 +766,7 @@ cc: @${ORCHESTRATOR_SESSION_NAME}`;
520
766
  try {
521
767
  const raw = await fs.readFile(path.join(dir, file), 'utf-8');
522
768
  const mission = JSON.parse(raw);
523
- if (mission.status === 'active') {
769
+ if (isMissionExecutable(mission)) {
524
770
  missions.push(mission);
525
771
  }
526
772
  }
@@ -534,6 +780,18 @@ cc: @${ORCHESTRATOR_SESSION_NAME}`;
534
780
  return [];
535
781
  }
536
782
  }
783
+ /**
784
+ * Load a single mission from disk (null when missing/corrupt).
785
+ */
786
+ async loadMission(missionId) {
787
+ try {
788
+ const raw = await fs.readFile(path.join(getMissionsDir(), `${missionId}.json`), 'utf-8');
789
+ return JSON.parse(raw);
790
+ }
791
+ catch {
792
+ return null;
793
+ }
794
+ }
537
795
  /**
538
796
  * Save a mission back to disk.
539
797
  */