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
@@ -22,7 +22,7 @@ import { TerminalGateway, setTerminalGateway } from './websocket/terminal.gatewa
22
22
  import { initializeChatGateway } from './websocket/chat.gateway.js';
23
23
  import { LoggerService } from './services/core/logger.service.js';
24
24
  import { retryWithBackoff } from './services/core/retry.util.js';
25
- import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, } from './constants.js';
25
+ import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, API_SECURITY_CONSTANTS, } from './constants.js';
26
26
  import { getSettingsService } from './services/settings/index.js';
27
27
  import { MemoryService } from './services/memory/memory.service.js';
28
28
  import { getImprovementStartupService } from './services/orchestrator/improvement-startup.service.js';
@@ -35,6 +35,13 @@ import { MessageQueueService, QueueProcessorService, ResponseRouterService } fro
35
35
  import { ThreadStatusQueueService } from './services/messaging/thread-status-queue.service.js';
36
36
  import { EventBusService } from './services/event-bus/index.js';
37
37
  import { EventToWorkItemBridge } from './services/event-bus/event-to-workitem-bridge.service.js';
38
+ import { KRCompletionSubscriber } from './services/v3/kr-completion.subscriber.js';
39
+ import { FallbackTriggerCleanupSubscriber } from './services/v3/fallback-trigger-cleanup.subscriber.js';
40
+ import { MissionReminderService } from './services/v3/mission-reminder.service.js';
41
+ import { OKRReviewService } from './services/v3/okr-review.service.js';
42
+ import { bootEscalationService } from './services/v3/escalation-boot.js';
43
+ import { TeamBudgetGateService } from './services/budget/team-budget-gate.service.js';
44
+ import { HierarchyEscalationMonitor } from './services/hierarchy/hierarchy-escalation-monitor.service.js';
38
45
  import { AutoLearningSubscriber } from './services/memory/auto-learning.subscriber.js';
39
46
  import { MilestoneNotificationSubscriber } from './services/notification/milestone-notification.subscriber.js';
40
47
  import { RequestSlaSubscriber, setRequestSlaSubscriber, getRequestSlaSubscriber, } from './services/v3/request-sla.subscriber.js';
@@ -56,6 +63,9 @@ import { setMessageQueueService as setMessagingControllerQueueService } from './
56
63
  import { SystemResourceAlertService } from './services/monitoring/system-resource-alert.service.js';
57
64
  import { TokenUsageService } from './services/monitoring/token-usage.service.js';
58
65
  import { agentHeartbeatMiddleware } from './middleware/agent-heartbeat.middleware.js';
66
+ import { apiTokenMiddleware, socketIoAllowRequest, installWebSocketGate, } from './middleware/api-token.middleware.js';
67
+ import { resolveApiToken } from './services/core/api-token.service.js';
68
+ import { isHeadlessEnvironment, describeNetworkExposure } from './utils/network-exposure.utils.js';
59
69
  import { RedisCacheService } from './services/cache/redis-cache.service.js';
60
70
  import { OrchestratorRestartService } from './services/orchestrator/orchestrator-restart.service.js';
61
71
  import { setOrchestratorSetupDependencies } from './services/orchestrator/orchestrator-setup.service.js';
@@ -66,6 +76,7 @@ import { OrchestratorHeartbeatMonitorService } from './services/orchestrator/orc
66
76
  import { RuntimeExitMonitorService } from './services/agent/runtime-exit-monitor.service.js';
67
77
  import { ContextWindowMonitorService } from './services/agent/context-window-monitor.service.js';
68
78
  import { OAuthReloginMonitorService } from './services/agent/oauth-relogin-monitor.service.js';
79
+ import { getChatV2Service } from './services/chat-v2/chat-v2.singleton.js';
69
80
  import { findPackageRoot } from './utils/package-root.js';
70
81
  import { assertBuildProvenance } from './utils/build-provenance.js';
71
82
  import { isNativeBindingFatalError } from './utils/native-binding.utils.js';
@@ -146,6 +157,10 @@ export class CrewlyServer {
146
157
  eventBusService;
147
158
  /** BRIDGE-1: subscribes to autonomy events and creates WorkItems. */
148
159
  eventToWorkItemBridge = null;
160
+ krCompletionSubscriber = null;
161
+ fallbackTriggerCleanup = null;
162
+ escalationService = null;
163
+ hierarchyEscalationMonitor = null;
149
164
  /** LEARN-1: subscribes to terminal task / mission:replanned events and auto-records learnings. */
150
165
  autoLearningSubscriber = null;
151
166
  // DF-1 #438 — symmetric to AutoLearningSubscriber; surfaces milestones
@@ -188,6 +203,9 @@ export class CrewlyServer {
188
203
  parseIntWithFallback(process.env.DEFAULT_CHECK_INTERVAL, 30, 'DEFAULT_CHECK_INTERVAL'),
189
204
  autoCommitInterval: config?.autoCommitInterval || parseIntWithFallback(process.env.AUTO_COMMIT_INTERVAL, 30, 'AUTO_COMMIT_INTERVAL'),
190
205
  headless: config?.headless ?? process.env.CREWLY_HEADLESS === 'true',
206
+ bindHost: config?.bindHost ||
207
+ process.env[API_SECURITY_CONSTANTS.ENV.BIND_HOST] ||
208
+ API_SECURITY_CONSTANTS.DEFAULT_BIND_HOST,
191
209
  };
192
210
  this.app = express();
193
211
  this.httpServer = createServer(this.app);
@@ -214,6 +232,10 @@ export class CrewlyServer {
214
232
  // that doesn't match /socket.io/ — killing Crewly in Chrome connections before
215
233
  // any data is exchanged (manifests as "Invalid frame header" errors).
216
234
  destroyUpgrade: false,
235
+ // Non-loopback clients must present the API token (query `token`
236
+ // or the `crewly_token` cookie). Engine.IO's polling handshake
237
+ // bypasses Express, so the gate has to live here as well.
238
+ allowRequest: socketIoAllowRequest,
217
239
  });
218
240
  this.initializeServices();
219
241
  this.configureMiddleware();
@@ -275,6 +297,15 @@ export class CrewlyServer {
275
297
  // triggers addToPool — the slack listener / TaskPool router below both
276
298
  // depend on this for the auto-close path b chain. Idempotent.
277
299
  TaskPoolService.getInstance().setEventBusService(this.eventBusService);
300
+ // Team budget gate (Team.budget was stored + prompt-injected but never
301
+ // evaluated). Enforced in claimFromPool + WorkItemDispatchSubscriber;
302
+ // here we give it the bus + queue so cap crossings reach the owner.
303
+ const teamBudgetGate = TeamBudgetGateService.getInstance();
304
+ teamBudgetGate.setNotifiers({
305
+ eventBus: this.eventBusService,
306
+ messageQueue: this.messageQueueService,
307
+ });
308
+ TaskPoolService.getInstance().setTeamBudgetGate(teamBudgetGate);
278
309
  // Memory: TaskHistorySubscriber listens on the bus for
279
310
  // task:done_by_worker / task:rejected / task:cancelled and writes
280
311
  // the resulting TaskHistoryEntry into ProjectMemory. This is the
@@ -444,6 +475,48 @@ export class CrewlyServer {
444
475
  error: reflectErr.message,
445
476
  });
446
477
  }
478
+ // Daily memory consolidation (self-improvement wiring): the
479
+ // MemoryConsolidationService existed but nothing ever called
480
+ // consolidate(), so no agent ever had a consolidation.json. Run it
481
+ // for every active member once per day, with a boot-time catch-up
482
+ // when the last recorded sweep (CREWLY_HOME/self-improvement-
483
+ // state.json) is older than the interval. Non-fatal throughout.
484
+ try {
485
+ const { ConsolidationSchedulerService } = await import('./services/ai/self-improvement/consolidation-scheduler.service.js');
486
+ const { createMemoryConsolidationService } = await import('./services/ai/self-improvement/agent-memory-provider.js');
487
+ const { SELF_IMPROVEMENT_CONSTANTS } = await import('./constants.js');
488
+ const posIntMs = (raw, fallback) => {
489
+ const n = Number(raw);
490
+ return Number.isFinite(n) && n > 0 ? n : fallback;
491
+ };
492
+ const consolidation = createMemoryConsolidationService();
493
+ const scheduler = new ConsolidationSchedulerService({
494
+ intervalMs: posIntMs(process.env[SELF_IMPROVEMENT_CONSTANTS.CONSOLIDATION_INTERVAL_ENV], SELF_IMPROVEMENT_CONSTANTS.CONSOLIDATION_INTERVAL_MS),
495
+ consolidate: (sessionName) => consolidation.consolidate(sessionName),
496
+ listActiveSessions: async () => {
497
+ const sessions = [];
498
+ const orc = await this.storageService.getOrchestratorStatus();
499
+ if (orc && orc.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE)
500
+ sessions.push(orc.sessionName);
501
+ const teams = await this.storageService.getTeams();
502
+ for (const team of teams) {
503
+ for (const member of team.members ?? []) {
504
+ if (member.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE && member.sessionName) {
505
+ sessions.push(member.sessionName);
506
+ }
507
+ }
508
+ }
509
+ return sessions;
510
+ },
511
+ });
512
+ ConsolidationSchedulerService.setInstance(scheduler);
513
+ scheduler.start();
514
+ }
515
+ catch (consolidationErr) {
516
+ this.logger.warn('Memory consolidation scheduler failed to start (non-fatal)', {
517
+ error: consolidationErr.message,
518
+ });
519
+ }
447
520
  // LLM-wiki → WorkItem bridge (2026-05-27): pending wiki queue
448
521
  // items + legacy migration candidates become claimable
449
522
  // WorkItems in the V3 pool. Replaces the bookkeep/reflect
@@ -479,6 +552,10 @@ export class CrewlyServer {
479
552
  // actually delivers OR the budget is exhausted.
480
553
  try {
481
554
  const { OrcDeliveryEnforcerService } = await import('./services/orc/orc-delivery-enforcer.service.js');
555
+ const [{ getChatV2Service }, { synthesizeSlackConversationId }] = await Promise.all([
556
+ import('./services/chat-v2/chat-v2.singleton.js'),
557
+ import('./services/chat-v2/legacy-dto.utils.js'),
558
+ ]);
482
559
  const enforcer = new OrcDeliveryEnforcerService({
483
560
  reminderSink: ({ conversationId, text }) => {
484
561
  if (!this.messageQueueService)
@@ -489,6 +566,12 @@ export class CrewlyServer {
489
566
  source: 'system_event',
490
567
  });
491
568
  },
569
+ // Issue #731: let the enforcer see the thread's real activity
570
+ // (owner silence → don't track; reply via any path → stop).
571
+ // Every Slack thread is a chat-v2 channel keyed by its
572
+ // synthesized conversation id, and every outbound Slack
573
+ // reply is mirrored into it.
574
+ threadActivityProvider: ({ channelId, threadTs }) => getChatV2Service().getChannelActivity(synthesizeSlackConversationId(channelId, threadTs)),
492
575
  });
493
576
  OrcDeliveryEnforcerService.setInstance(enforcer);
494
577
  enforcer.start();
@@ -521,6 +604,28 @@ export class CrewlyServer {
521
604
  // for idempotency contract + retry cap + cron-recursion guard.
522
605
  this.eventToWorkItemBridge = EventToWorkItemBridge.boot(this.eventBusService);
523
606
  this.eventToWorkItemBridge.start();
607
+ // OKR loop closure: auto-measure `task_completion` KRs from task:done /
608
+ // task:verified and publish `team:all_tasks_done` when a mission has no
609
+ // active WorkItems left (the bridge turns that into a review WI). See
610
+ // `kr-completion.subscriber.ts`.
611
+ this.krCompletionSubscriber = KRCompletionSubscriber.boot(this.eventBusService);
612
+ this.krCompletionSubscriber.start();
613
+ // A delegation's fallback timer is cancelled the moment its WorkItem
614
+ // finishes, so the orchestrator stops being woken to "check" work that
615
+ // is already verified (26 of 65 WorkItems on steamfun-ops, 2026-09-18).
616
+ this.fallbackTriggerCleanup = FallbackTriggerCleanupSubscriber.boot(this.eventBusService);
617
+ this.fallbackTriggerCleanup.start();
618
+ // OKR loop closure: give the reminder sweep (mission:stale) and the
619
+ // review service (mission:replanned) a bus to publish on. Both were
620
+ // declared + bridged events with no publisher before this.
621
+ MissionReminderService.getInstance().setEventBusService(this.eventBusService);
622
+ OKRReviewService.getInstance().setEventBusService(this.eventBusService);
623
+ // Hierarchy escalation: a TL that has not acted on a worker's
624
+ // verification handoff within 15 min triggers the documented bypass to
625
+ // the orchestrator (`hierarchy:escalation` + [ESCALATION] queue message).
626
+ // HierarchyEscalationService had the rules but no runtime consumer.
627
+ this.hierarchyEscalationMonitor = HierarchyEscalationMonitor.boot(this.eventBusService, this.messageQueueService);
628
+ this.hierarchyEscalationMonitor.start();
524
629
  // LEARN-1: subscribe to terminal task / mission:replanned events and
525
630
  // auto-record a learning entry via MemoryService.recordLearning. Closes
526
631
  // the prompt-driven "agents-forget-to-record" gap. See
@@ -908,6 +1013,10 @@ export class CrewlyServer {
908
1013
  // Note: Static files are configured in configureRoutes() after API routes
909
1014
  }
910
1015
  configureRoutes() {
1016
+ // API token gate — loopback callers (local skills, local dashboard)
1017
+ // pass; every other address must present the API token. `/health`,
1018
+ // static assets and the SPA shell are outside `/api` and stay open.
1019
+ this.app.use('/api', apiTokenMiddleware);
911
1020
  // Agent heartbeat middleware - any API call with X-Agent-Session header updates heartbeat
912
1021
  this.app.use('/api', agentHeartbeatMiddleware);
913
1022
  // API routes
@@ -1291,12 +1400,44 @@ export class CrewlyServer {
1291
1400
  error: error instanceof Error ? error.message : String(error),
1292
1401
  });
1293
1402
  }
1294
- // Wire OAuthReloginMonitorService EventBus dependency
1403
+ // Wire OAuthReloginMonitorService: event bus, orchestrator queue,
1404
+ // chat + Slack sinks for the owner-facing login notice, and the
1405
+ // boot-level sign-in-screen sweep (server-install finding 7).
1295
1406
  try {
1296
- OAuthReloginMonitorService.getInstance().setEventBusService(this.eventBusService);
1407
+ const oauthMonitor = OAuthReloginMonitorService.getInstance();
1408
+ oauthMonitor.setEventBusService(this.eventBusService);
1409
+ oauthMonitor.setNoticeQueue(this.messageQueueService);
1410
+ oauthMonitor.setSlackProvider(async () => {
1411
+ const slack = getSlackService();
1412
+ return slack.isConnected() ? slack : null;
1413
+ });
1414
+ oauthMonitor.setChatProvider(() => {
1415
+ const gateway = this.terminalGateway;
1416
+ if (!gateway)
1417
+ return null;
1418
+ return {
1419
+ getActiveConversationId: () => gateway.getActiveConversationId(),
1420
+ recordSystemTurn: (conversationId, content) => {
1421
+ const chatV2 = getChatV2Service();
1422
+ const channel = chatV2.ensureChannelForLegacyConversation({
1423
+ conversationId,
1424
+ agentSession: ORCHESTRATOR_SESSION_NAME,
1425
+ });
1426
+ chatV2.recordTurn({
1427
+ channelId: channel.id,
1428
+ senderType: 'system',
1429
+ senderId: 'system',
1430
+ content,
1431
+ metadata: { source: 'system' },
1432
+ });
1433
+ },
1434
+ broadcastSystemNotification: (message, type) => gateway.broadcastSystemNotification(message, type),
1435
+ };
1436
+ });
1437
+ oauthMonitor.start();
1297
1438
  }
1298
1439
  catch (error) {
1299
- this.logger.warn('Failed to wire OAuthReloginMonitorService EventBus (non-critical)', {
1440
+ this.logger.warn('Failed to wire OAuthReloginMonitorService (non-critical)', {
1300
1441
  error: error instanceof Error ? error.message : String(error),
1301
1442
  });
1302
1443
  }
@@ -1832,6 +1973,15 @@ export class CrewlyServer {
1832
1973
  });
1833
1974
  await triggerEngine.start();
1834
1975
  this.logger.info('TriggerEngine started with action handler wired');
1976
+ // MissionPolicy escalation loop (every 5 min: cost/time/failure rules →
1977
+ // notify/pause/block). Sequenced AFTER the action handler above because
1978
+ // EscalationService.start() wraps the installed handler and delegates
1979
+ // non-escalation triggers back to it. Gated by CREWLY_ESCALATION_ENABLED
1980
+ // (default on); a no-op when no mission carries escalation rules.
1981
+ this.escalationService = await bootEscalationService({
1982
+ messageQueue: this.messageQueueService,
1983
+ logger: this.logger,
1984
+ });
1835
1985
  // Wire team-scoped triggers: reconcile declarative Team.triggers spec
1836
1986
  // against the running engine on every team save, and cancel all of a
1837
1987
  // team's triggers when it's deleted. Listener is fire-and-forget.
@@ -1894,6 +2044,7 @@ export class CrewlyServer {
1894
2044
  try {
1895
2045
  const { WorkItemDispatchSubscriber } = await import('./services/v3/workitem-dispatch.subscriber.js');
1896
2046
  const dispatchSubscriber = WorkItemDispatchSubscriber.getInstance();
2047
+ dispatchSubscriber.setTeamBudgetGate(TeamBudgetGateService.getInstance());
1897
2048
  dispatchSubscriber.initialize(this.eventBusService);
1898
2049
  dispatchSubscriber.start();
1899
2050
  this.logger.info('WorkItemDispatchSubscriber started — workitem:queued events push to target sessions');
@@ -2067,6 +2218,12 @@ export class CrewlyServer {
2067
2218
  const loadedAddons = await addonLoader.loadAddons(this.app, this.httpServer);
2068
2219
  if (loadedAddons.length > 0) {
2069
2220
  this.logger.info('Addons loaded successfully', { addons: loadedAddons });
2221
+ // An addon that attaches its own WebSocket gateway wraps
2222
+ // `httpServer.emit` after our gate did; re-install so the
2223
+ // gate is outermost again (double-wrapping is harmless —
2224
+ // an allowed upgrade passes both, a refused one is
2225
+ // answered once by the outer wrapper).
2226
+ installWebSocketGate(this.httpServer);
2070
2227
  }
2071
2228
  }
2072
2229
  catch (addonErr) {
@@ -2669,9 +2826,9 @@ export class CrewlyServer {
2669
2826
  const { createServer } = await import('net');
2670
2827
  const testServer = createServer();
2671
2828
  return new Promise((resolve, reject) => {
2672
- testServer.listen(this.config.webPort, () => {
2829
+ testServer.listen(this.config.webPort, this.config.bindHost, () => {
2673
2830
  testServer.close(() => {
2674
- this.logger.info('Port is available', { port: this.config.webPort });
2831
+ this.logger.info('Port is available', { port: this.config.webPort, host: this.config.bindHost });
2675
2832
  resolve();
2676
2833
  });
2677
2834
  });
@@ -2685,18 +2842,63 @@ export class CrewlyServer {
2685
2842
  });
2686
2843
  });
2687
2844
  }
2845
+ /**
2846
+ * Log where the API token lives and how reachable the API is.
2847
+ *
2848
+ * Resolving the token here also performs the first-boot generation so
2849
+ * the file exists (0600) before the first non-loopback caller arrives.
2850
+ * Emits a WARN for a headless install that binds every interface with
2851
+ * neither `CREWLY_BIND_HOST` nor `CREWLY_API_TOKEN` set.
2852
+ */
2853
+ logNetworkExposure() {
2854
+ try {
2855
+ const token = resolveApiToken();
2856
+ const summary = describeNetworkExposure({
2857
+ bindHost: this.config.bindHost,
2858
+ port: this.config.webPort,
2859
+ bindHostExplicit: Boolean(process.env[API_SECURITY_CONSTANTS.ENV.BIND_HOST]),
2860
+ tokenSource: token.source,
2861
+ tokenFilePath: token.filePath,
2862
+ headless: this.config.headless || isHeadlessEnvironment(),
2863
+ });
2864
+ if (token.source === 'generated') {
2865
+ this.logger.info('Generated API token for non-loopback callers', {
2866
+ file: token.filePath,
2867
+ usage: 'crewly token | curl -H "X-Crewly-Token: $(crewly token)" http://<host>:<port>/api/teams',
2868
+ });
2869
+ }
2870
+ if (summary.level === 'warn') {
2871
+ this.logger.warn(summary.message, summary.details);
2872
+ }
2873
+ else {
2874
+ this.logger.info(summary.message, summary.details);
2875
+ }
2876
+ }
2877
+ catch (error) {
2878
+ this.logger.error('Failed to resolve API token', {
2879
+ error: error instanceof Error ? error.message : String(error),
2880
+ });
2881
+ }
2882
+ }
2688
2883
  async startHttpServer() {
2689
2884
  return new Promise((resolve, reject) => {
2690
2885
  const startTime = Date.now();
2691
- this.httpServer.listen(this.config.webPort, () => {
2886
+ // Outermost upgrade wrapper: every gateway (Socket.IO, browser
2887
+ // bridge, chat-v2, terminal) has attached by now, so this gate
2888
+ // runs before any of them sees a non-loopback upgrade.
2889
+ installWebSocketGate(this.httpServer);
2890
+ this.httpServer.listen(this.config.webPort, this.config.bindHost, () => {
2692
2891
  const duration = Date.now() - startTime;
2693
2892
  this.logger.info('Crewly server started', {
2893
+ host: this.config.bindHost,
2694
2894
  port: this.config.webPort,
2895
+ listening: `${this.config.bindHost}:${this.config.webPort}`,
2695
2896
  durationMs: duration,
2696
2897
  dashboardUrl: `http://localhost:${this.config.webPort}`,
2697
2898
  websocketUrl: `ws://localhost:${this.config.webPort}`,
2698
2899
  home: this.config.crewlyHome
2699
2900
  });
2901
+ this.logNetworkExposure();
2700
2902
  // B0 (interim) per `.crewly/specs/2026-05-05-trigger-persistence-bug.md`:
2701
2903
  // Broadcast `system:backend_restarted` exactly once per boot. The
2702
2904
  // trigger engine (`backend/src/services/v3/trigger-engine.service.ts`)
@@ -2831,7 +3033,6 @@ export class CrewlyServer {
2831
3033
  // Scans active missions and sends Slack alerts for off-track KRs
2832
3034
  setInterval(async () => {
2833
3035
  try {
2834
- const { MissionReminderService } = await import('./services/v3/mission-reminder.service.js');
2835
3036
  await MissionReminderService.getInstance().runSweep();
2836
3037
  }
2837
3038
  catch (err) {
@@ -2844,7 +3045,6 @@ export class CrewlyServer {
2844
3045
  setTimeout(() => this.purgeCompletedData(), 30 * 1000);
2845
3046
  setTimeout(async () => {
2846
3047
  try {
2847
- const { MissionReminderService } = await import('./services/v3/mission-reminder.service.js');
2848
3048
  await MissionReminderService.getInstance().runSweep();
2849
3049
  }
2850
3050
  catch (err) {
@@ -3187,6 +3387,25 @@ export class CrewlyServer {
3187
3387
  this.eventToWorkItemBridge.stop();
3188
3388
  this.eventToWorkItemBridge = null;
3189
3389
  }
3390
+ if (this.krCompletionSubscriber) {
3391
+ this.krCompletionSubscriber.stop();
3392
+ this.krCompletionSubscriber = null;
3393
+ }
3394
+ if (this.fallbackTriggerCleanup) {
3395
+ this.fallbackTriggerCleanup.stop();
3396
+ this.fallbackTriggerCleanup = null;
3397
+ }
3398
+ if (this.escalationService) {
3399
+ try {
3400
+ await this.escalationService.stop();
3401
+ }
3402
+ catch { /* best-effort */ }
3403
+ this.escalationService = null;
3404
+ }
3405
+ if (this.hierarchyEscalationMonitor) {
3406
+ this.hierarchyEscalationMonitor.stop();
3407
+ this.hierarchyEscalationMonitor = null;
3408
+ }
3190
3409
  // LEARN-1: stop the AutoLearningSubscriber on the same window as the
3191
3410
  // bridge so its in-flight recordLearning calls drain before the bus
3192
3411
  // is cleaned.
@@ -3255,6 +3474,18 @@ export class CrewlyServer {
3255
3474
  LogRotationService.getInstance().stop();
3256
3475
  // Stop auditor scheduler
3257
3476
  AuditorSchedulerService.getInstance().stop();
3477
+ // Persist the token ledger: it flushes every 5 minutes, so a restart
3478
+ // used to drop everything recorded since the last tick (2026-09-18).
3479
+ try {
3480
+ const ledger = TokenUsageService.getInstance();
3481
+ ledger.stopPeriodicFlush();
3482
+ await ledger.flushToDisk();
3483
+ }
3484
+ catch (flushErr) {
3485
+ this.logger.warn('Token ledger flush on shutdown failed (non-fatal)', {
3486
+ error: flushErr instanceof Error ? flushErr.message : String(flushErr),
3487
+ });
3488
+ }
3258
3489
  // Flush and shutdown OpenTelemetry tracing
3259
3490
  try {
3260
3491
  const { TracingService: TracingSvc } = await import('./services/core/tracing.service.js');