crewly 1.13.0 → 1.13.1

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 (597) hide show
  1. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  2. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  3. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  4. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  5. package/config/skills/agent/core/block-task/execute.sh +59 -6
  6. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  7. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  8. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  9. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  10. package/config/skills/agent/core/create-task/execute.sh +82 -23
  11. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  12. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  13. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  14. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  15. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  16. package/config/skills/agent/core/report-status/execute.sh +40 -5
  17. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  18. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  19. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  20. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  21. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  22. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  23. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  24. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  25. package/config/vitest-exclude.constants.ts +56 -0
  26. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  28. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  31. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  33. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  35. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  36. package/dist/backend/backend/src/index.d.ts.map +1 -1
  37. package/dist/backend/backend/src/index.js +20 -0
  38. package/dist/backend/backend/src/index.js.map +1 -1
  39. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  40. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  41. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  42. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  43. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  45. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
  48. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
  50. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  53. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  54. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  56. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  58. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  60. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  62. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  64. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  65. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  66. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  68. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  69. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  70. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  72. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  74. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  76. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  78. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  81. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  82. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  83. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  84. package/dist/backend/backend/src/types/v2/index.js +1 -1
  85. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  86. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  87. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  88. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  89. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  90. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  91. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  92. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  93. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  94. package/dist/backend/build-info.json +4 -0
  95. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  96. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  97. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  98. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  99. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  100. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  101. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  102. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  103. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  104. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  105. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  106. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  107. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  108. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  109. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  110. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  111. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  112. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  113. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  114. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  115. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  116. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  118. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  119. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  120. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  121. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  122. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  124. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  126. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  128. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  130. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  132. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  134. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  136. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  138. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  140. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  142. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  144. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  146. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  148. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  150. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  152. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  154. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  156. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  158. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  160. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  162. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  164. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  166. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  168. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  170. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  172. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  174. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  175. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  176. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  178. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  180. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  182. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  183. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  184. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  186. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  187. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  188. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  190. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  191. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  192. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  194. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  195. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  196. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  198. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  200. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  202. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  284. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  286. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  287. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  288. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  290. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  291. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  292. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  294. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  295. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  296. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  298. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  299. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  300. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  302. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  303. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  304. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  306. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  307. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  308. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  310. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  312. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  314. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  316. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  318. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  319. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  320. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  322. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  323. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  324. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  326. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  327. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  328. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  330. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  331. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  332. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  334. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  335. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  336. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  338. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  339. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  340. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  342. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  343. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  344. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  345. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  346. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  347. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  348. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  350. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  351. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  352. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  354. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  355. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  356. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  358. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  359. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  360. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  362. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  364. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  366. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  367. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  368. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  370. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  371. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  372. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  374. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  375. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  376. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  378. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  380. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  382. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  383. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  384. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  386. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  388. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  390. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  392. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  394. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  395. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  396. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  398. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  399. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  400. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  402. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  403. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  404. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  406. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  408. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  410. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  411. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  412. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  414. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  416. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  418. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  420. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  422. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  424. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  426. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  427. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  428. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/session/index.js +50 -0
  430. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  431. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  432. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  434. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  436. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  438. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  439. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  440. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  442. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  443. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  444. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  446. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  447. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  448. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  450. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  451. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  452. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  454. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  456. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  458. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  460. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  462. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  464. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  466. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  468. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  470. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  472. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  474. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  475. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  476. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  478. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  479. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  480. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  482. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  484. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  486. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  487. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  488. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  490. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  491. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  492. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  494. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  495. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  496. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  498. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  500. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  501. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  502. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  503. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  504. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  506. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  508. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  510. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  512. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  514. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  516. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  518. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  519. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  520. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  522. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  524. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  526. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  528. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  529. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  530. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  531. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  532. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  533. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  534. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  535. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  536. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  537. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  538. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  539. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  540. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  541. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  542. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  543. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  544. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  545. package/dist/cli/backend/src/types/v2/index.js +22 -0
  546. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  547. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  548. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  549. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  550. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  551. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  552. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  553. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  554. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  555. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  556. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  557. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  558. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  559. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  560. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  562. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  564. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  565. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  566. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  567. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  568. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  570. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  571. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  572. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  573. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  574. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  575. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  576. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  577. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  578. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  579. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  580. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  581. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  582. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  583. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  584. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  585. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  586. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  587. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  588. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  589. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  590. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  591. package/frontend/dist/assets/index-890d3f9d.js +4961 -0
  592. package/frontend/dist/index.html +1 -1
  593. package/package.json +2 -2
  594. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
  595. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
  596. package/packages/crewly-agent/src/runtime/types.ts +56 -5
  597. package/frontend/dist/assets/index-aa737fd3.js +0 -5254
@@ -0,0 +1,802 @@
1
+ /**
2
+ * Active Work Briefing Service
3
+ *
4
+ * Generates an authoritative-state briefing for an agent at session startup
5
+ * (and on-demand mid-session via the `core/get-my-active-work` skill).
6
+ *
7
+ * Today the agent recovery prompt is memory-only — `SessionMemoryService`
8
+ * dumps the last session summary, agent/project knowledge, daily logs, and
9
+ * recent learning files. That is supplementary; it does NOT capture
10
+ * authoritative runtime state. Symptom: an agent restarts amnesiac about
11
+ * Requests it owes a reply on, queued WorkItems that survived the restart,
12
+ * and in-flight delegations.
13
+ *
14
+ * This service mirrors `SessionMemoryService` (`generate*` + `format*`
15
+ * methods, singleton, soft-fail wrapping at the call site) and produces a
16
+ * per-agent slice of the live Request + WorkItem state. The briefing is
17
+ * prepended ABOVE the memory briefing in the agent's startup prompt so the
18
+ * first thing the agent reads is "what am I on the hook for RIGHT NOW".
19
+ *
20
+ * Sources:
21
+ * - {@link RequestService.listAll} — all Requests on disk
22
+ * - {@link TaskPoolService.getAllItems} — all WorkItems in the pool
23
+ *
24
+ * Design doc: `/tmp/agent-state-recovery-design.md` (architect output)
25
+ * GitHub issue: stevehuang0115/crewly#395
26
+ *
27
+ * @module services/agent/active-work-briefing.service
28
+ */
29
+ import { LoggerService } from '../core/logger.service.js';
30
+ import { ORCHESTRATOR_ROLE, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
31
+ /**
32
+ * Default per-section item caps for non-orchestrator agents.
33
+ * Total cap = 45 items, ~6,300 chars (~1,500 tokens).
34
+ */
35
+ const DEFAULT_CAPS = {
36
+ openRequests: 10,
37
+ activeWorkItems: 15,
38
+ pendingReviews: 5,
39
+ outboundDelegations: 10,
40
+ recentlyAutoResolved: 5,
41
+ };
42
+ /** Orchestrator gets system-wide visibility — caps × 3. */
43
+ const ORCHESTRATOR_CAP_MULTIPLIER = 3;
44
+ /**
45
+ * Hard ceiling on the orchestrator's formatted briefing (chars). If the
46
+ * formatted markdown crosses this threshold, the formatter drops description
47
+ * fields to keep the prompt tractable. Bounded — does not truncate items.
48
+ */
49
+ const ORCHESTRATOR_OVERFLOW_CHARS = 25_000;
50
+ /** Default recently-resolved window: 30 minutes. */
51
+ const DEFAULT_RECENTLY_RESOLVED_WINDOW_MS = 30 * 60 * 1000;
52
+ /** Per-item title cap to prevent unbounded growth. */
53
+ const MAX_TITLE_CHARS = 80;
54
+ /** Per-item description cap. */
55
+ const MAX_DESCRIPTION_CHARS = 120;
56
+ /**
57
+ * Request statuses that count as "open / on the hook" for briefing
58
+ * inclusion. Terminal statuses (`done`, `cancelled`) are excluded —
59
+ * memory recall handles "what did I close last week".
60
+ */
61
+ const ACTIVE_REQUEST_STATUSES = new Set([
62
+ 'open',
63
+ 'ready',
64
+ 'running',
65
+ 'blocked',
66
+ 'waiting_confirmation',
67
+ ]);
68
+ /**
69
+ * WorkItem statuses that are still "in-flight" for the agent (target of a
70
+ * claim or work). Terminal statuses (`done`, `verified`, `cancelled`,
71
+ * `failed`, `rejected`) are excluded — they are recovered via memory.
72
+ */
73
+ const ACTIVE_WORK_ITEM_STATUSES = new Set([
74
+ 'queued',
75
+ 'scheduled',
76
+ 'proposed',
77
+ 'accepted',
78
+ 'running',
79
+ 'blocked',
80
+ 'escalated',
81
+ ]);
82
+ /** Status indicating a WorkItem is awaiting verifier review. */
83
+ const PENDING_REVIEW_STATUS = 'done_by_worker';
84
+ // ---------------------------------------------------------------------------
85
+ // Service
86
+ // ---------------------------------------------------------------------------
87
+ /**
88
+ * Singleton service producing per-agent active-work briefings.
89
+ *
90
+ * Mirrors the `SessionMemoryService.generate* + format*` shape so the
91
+ * `agent-registration.service.ts` glue can call them in parallel and
92
+ * concatenate the markdown.
93
+ *
94
+ * Stateless beyond singleton bookkeeping — every call hits the live
95
+ * `RequestService` + `TaskPoolService` instances.
96
+ */
97
+ export class ActiveWorkBriefingService {
98
+ requestServiceFactory;
99
+ taskPoolFactory;
100
+ static instance = null;
101
+ /**
102
+ * Memoised promise of the in-flight async `getInstance()` resolution.
103
+ *
104
+ * We cache the *promise* (not the resolved value) so that concurrent
105
+ * callers awaiting `getInstance()` during the cold-start window all
106
+ * land on the same async resolution — only ONE pair of dynamic
107
+ * `import()` calls runs, even under heavy parallelism. Once resolved,
108
+ * subsequent `await getInstance()` calls are microtask-only overhead
109
+ * (the promise is already settled, so `await` resolves on the next
110
+ * microtask without re-entering the import pipeline).
111
+ *
112
+ * Cleared by {@link resetInstance} for tests so each test can
113
+ * independently re-load the dynamic imports.
114
+ */
115
+ static instancePromise = null;
116
+ logger;
117
+ /**
118
+ * Private constructor — use {@link getInstance}. The `requestServiceFactory`
119
+ * and `taskPoolFactory` are dependency seams for tests; production code
120
+ * lets {@link getInstance} provide the live singletons.
121
+ */
122
+ constructor(requestServiceFactory, taskPoolFactory) {
123
+ this.requestServiceFactory = requestServiceFactory;
124
+ this.taskPoolFactory = taskPoolFactory;
125
+ this.logger = LoggerService.getInstance().createComponentLogger('ActiveWorkBriefingService');
126
+ }
127
+ /**
128
+ * Returns the singleton instance.
129
+ *
130
+ * **Async** — the `RequestService` and `TaskPoolService` modules are
131
+ * loaded LAZILY via ESM dynamic `import()` so that consumers of this
132
+ * module do not pay the import cost — and more importantly, do not
133
+ * transitively load `chokidar` via `v3-data.service.ts` — until they
134
+ * actually call `getInstance()`. This keeps the agent-registration
135
+ * test suite mockable without forcing every caller to mock the v3
136
+ * pipeline.
137
+ *
138
+ * The async contract was introduced by the build-fix that succeeded
139
+ * PR #494 (`fa05720e`). PR #494 used CJS `require` via a
140
+ * `createRequire` shim anchored to `process.argv[1]`; that anchor
141
+ * worked for bare module names (Node walks up to `node_modules/`)
142
+ * but BROKE relative-path resolution — symptom: this method threw
143
+ * `Cannot find module '../v3/request.service.js'` for every
144
+ * agent registration that flowed through here. The fix replaces
145
+ * `require('<relative-path>')` with `await import('<relative-path>')`
146
+ * which resolves correctly from this file under both ESM (production)
147
+ * and ts-jest's CJS transpile (jest treats dynamic `import()` like a
148
+ * resolvable function).
149
+ *
150
+ * **Promise memoization**: the resolved promise is cached so concurrent
151
+ * cold-start callers all land on the same async resolution — only ONE
152
+ * pair of dynamic imports runs even under heavy parallelism. Once
153
+ * resolved, repeat `await getInstance()` calls are microtask-only
154
+ * overhead.
155
+ *
156
+ * @returns Promise resolving to the singleton instance
157
+ */
158
+ static async getInstance() {
159
+ if (!ActiveWorkBriefingService.instancePromise) {
160
+ ActiveWorkBriefingService.instancePromise = (async () => {
161
+ const { RequestService } = await import('../v3/request.service.js');
162
+ const { TaskPoolService } = await import('../task-pool/task-pool.service.js');
163
+ const built = new ActiveWorkBriefingService(() => RequestService.getInstance(), () => TaskPoolService.getInstance());
164
+ ActiveWorkBriefingService.instance = built;
165
+ return built;
166
+ })();
167
+ }
168
+ return ActiveWorkBriefingService.instancePromise;
169
+ }
170
+ /**
171
+ * Resets the singleton — for tests only.
172
+ *
173
+ * Clears BOTH the resolved instance AND the memoised in-flight
174
+ * promise so the next `await getInstance()` re-runs the dynamic
175
+ * imports cleanly (e.g. picks up freshly-mocked modules).
176
+ */
177
+ static resetInstance() {
178
+ ActiveWorkBriefingService.instance = null;
179
+ ActiveWorkBriefingService.instancePromise = null;
180
+ }
181
+ /**
182
+ * Test-only escape hatch to swap the underlying service factories.
183
+ * Production code never calls this; the public surface is the singleton.
184
+ *
185
+ * @param requestServiceFactory - Returns a `listAll` provider
186
+ * @param taskPoolFactory - Returns a `getAllItems` provider
187
+ */
188
+ static createForTest(requestServiceFactory, taskPoolFactory) {
189
+ return new ActiveWorkBriefingService(requestServiceFactory, taskPoolFactory);
190
+ }
191
+ // -------------------------------------------------------------------------
192
+ // Internal helpers
193
+ // -------------------------------------------------------------------------
194
+ /**
195
+ * Compute the effective per-section caps for the requested role. Orchestrator
196
+ * gets caps × 3 for system-wide visibility; everyone else uses the defaults
197
+ * (with optional overrides from {@link GenerateOptions.caps}).
198
+ *
199
+ * @param role - Agent role (orchestrator gets the multiplier)
200
+ * @param overrides - Optional explicit caps that win over both defaults and
201
+ * the role multiplier.
202
+ * @returns Effective caps for each section
203
+ */
204
+ resolveCaps(role, overrides) {
205
+ const isOrchestrator = role === ORCHESTRATOR_ROLE;
206
+ const multiplier = isOrchestrator ? ORCHESTRATOR_CAP_MULTIPLIER : 1;
207
+ return {
208
+ openRequests: overrides?.openRequests ?? DEFAULT_CAPS.openRequests * multiplier,
209
+ activeWorkItems: overrides?.activeWorkItems ?? DEFAULT_CAPS.activeWorkItems * multiplier,
210
+ pendingReviews: overrides?.pendingReviews ?? DEFAULT_CAPS.pendingReviews * multiplier,
211
+ outboundDelegations: overrides?.outboundDelegations ?? DEFAULT_CAPS.outboundDelegations * multiplier,
212
+ recentlyAutoResolved: overrides?.recentlyAutoResolved ?? DEFAULT_CAPS.recentlyAutoResolved * multiplier,
213
+ };
214
+ }
215
+ /**
216
+ * Convert a 'low' | 'normal' | 'high' priority to a sort key.
217
+ * Higher number = higher priority (sorted DESC).
218
+ *
219
+ * @param p - Priority value
220
+ * @returns Numeric sort key
221
+ */
222
+ priorityRank(p) {
223
+ switch (p) {
224
+ case 'high':
225
+ return 3;
226
+ case 'normal':
227
+ return 2;
228
+ case 'low':
229
+ return 1;
230
+ default:
231
+ return 0;
232
+ }
233
+ }
234
+ /**
235
+ * Compute age in hours since `createdAt`. Negative or NaN inputs are
236
+ * coerced to 0 — defensive against malformed timestamps.
237
+ *
238
+ * @param createdAt - ISO8601 timestamp
239
+ * @param nowMs - Current time in milliseconds
240
+ * @returns Age in hours (>= 0)
241
+ */
242
+ ageHours(createdAt, nowMs) {
243
+ const created = new Date(createdAt).getTime();
244
+ if (!Number.isFinite(created))
245
+ return 0;
246
+ const diff = nowMs - created;
247
+ return diff > 0 ? diff / (60 * 60 * 1000) : 0;
248
+ }
249
+ /**
250
+ * Read a string-typed field from a `metadata` blob, or null if missing /
251
+ * not a string. WorkItem.metadata is typed as `Record<string, unknown>` so
252
+ * every read needs this guard.
253
+ *
254
+ * @param metadata - WorkItem.metadata or undefined
255
+ * @param key - Field name to read
256
+ * @returns Trimmed string value or null
257
+ */
258
+ readMetadataString(metadata, key) {
259
+ if (!metadata)
260
+ return null;
261
+ const value = metadata[key];
262
+ if (typeof value !== 'string' || value.length === 0)
263
+ return null;
264
+ return value;
265
+ }
266
+ /**
267
+ * Apply the per-section cap. Returns the slice + a {@link SectionTruncation}
268
+ * object that the formatter renders as a "... and X more" marker.
269
+ *
270
+ * @param items - Sorted candidate rows
271
+ * @param cap - Per-section cap
272
+ * @returns Truncation metadata + the kept rows
273
+ */
274
+ applyCap(items, cap) {
275
+ const rows = items.slice(0, cap);
276
+ return {
277
+ rows,
278
+ truncation: {
279
+ totalCandidates: items.length,
280
+ cap,
281
+ truncated: items.length > cap,
282
+ },
283
+ };
284
+ }
285
+ // -------------------------------------------------------------------------
286
+ // Filter / project — Request rows
287
+ // -------------------------------------------------------------------------
288
+ /**
289
+ * Project Requests visible to this agent. Non-orchestrator agents only see
290
+ * Requests where they are the `ownerAgent`; the orchestrator sees all open
291
+ * Requests system-wide.
292
+ *
293
+ * @param requests - All Requests from {@link RequestService.listAll}
294
+ * @param sessionName - Agent session name
295
+ * @param role - Agent role
296
+ * @param nowMs - "Now" for age computation
297
+ * @returns Sorted candidate rows (priority DESC, then age DESC — older first)
298
+ */
299
+ projectRequests(requests, sessionName, role, nowMs) {
300
+ const isOrchestrator = role === ORCHESTRATOR_ROLE || sessionName === ORCHESTRATOR_SESSION_NAME;
301
+ const filtered = requests.filter((r) => {
302
+ if (!ACTIVE_REQUEST_STATUSES.has(r.status))
303
+ return false;
304
+ if (isOrchestrator)
305
+ return true;
306
+ // Non-orchestrator agents: must be on the hook (ownerAgent === sessionName).
307
+ return r.ownerAgent === sessionName;
308
+ });
309
+ const rows = filtered.map((r) => ({
310
+ id: r.id,
311
+ title: this.truncateTitle(r.title),
312
+ status: r.status,
313
+ priority: r.priority,
314
+ ageHours: this.ageHours(r.createdAt, nowMs),
315
+ source: r.sourceConversationItemId,
316
+ }));
317
+ rows.sort((a, b) => this.priorityRank(b.priority) - this.priorityRank(a.priority) ||
318
+ b.ageHours - a.ageHours);
319
+ return rows;
320
+ }
321
+ // -------------------------------------------------------------------------
322
+ // Filter / project — WorkItem rows
323
+ // -------------------------------------------------------------------------
324
+ /**
325
+ * Project active WorkItems for this agent: items the agent is on the hook
326
+ * to execute (target=me) OR items the agent has actively claimed
327
+ * (claimedBy=me, surfaced via `metadata.claimedBy`). Items targeted at this
328
+ * agent but already claimed by *another* agent are excluded — they are
329
+ * not actionable for the current session.
330
+ *
331
+ * Orchestrator override: include ALL active work items.
332
+ *
333
+ * @param items - All WorkItems from {@link TaskPoolService.getAllItems}
334
+ * @param sessionName - Agent session name
335
+ * @param role - Agent role
336
+ * @param nowMs - "Now" for age computation
337
+ * @returns Sorted candidate rows
338
+ */
339
+ projectActiveWorkItems(items, sessionName, role, nowMs) {
340
+ const isOrchestrator = role === ORCHESTRATOR_ROLE || sessionName === ORCHESTRATOR_SESSION_NAME;
341
+ const filtered = items.filter((wi) => {
342
+ if (!ACTIVE_WORK_ITEM_STATUSES.has(wi.status))
343
+ return false;
344
+ if (isOrchestrator)
345
+ return true;
346
+ const claimedBy = this.readMetadataString(wi.metadata, 'claimedBy');
347
+ const isTargetMe = wi.target === sessionName;
348
+ const isClaimedByMe = claimedBy === sessionName;
349
+ if (!isTargetMe && !isClaimedByMe)
350
+ return false;
351
+ // Excluded: target is me but another agent already claimed it.
352
+ if (isTargetMe && claimedBy && claimedBy !== sessionName)
353
+ return false;
354
+ return true;
355
+ });
356
+ const rows = filtered.map((wi) => ({
357
+ id: wi.id,
358
+ title: this.truncateTitle(wi.title),
359
+ status: wi.status,
360
+ ageHours: this.ageHours(wi.createdAt, nowMs),
361
+ priority: this.readPriorityFromMetadata(wi.metadata),
362
+ requestId: wi.requestId,
363
+ description: wi.description ? this.truncateDescription(wi.description) : undefined,
364
+ }));
365
+ rows.sort((a, b) => this.priorityRank(b.priority) - this.priorityRank(a.priority) ||
366
+ b.ageHours - a.ageHours);
367
+ return rows;
368
+ }
369
+ /**
370
+ * Pending review rows — WorkItems in `done_by_worker` where this agent
371
+ * is the verifier. Verifier signal = `metadata.verifier === sessionName`
372
+ * (TL/orchestrator pattern). For the orchestrator role we surface ALL
373
+ * `done_by_worker` items system-wide.
374
+ *
375
+ * @param items - All WorkItems from the pool
376
+ * @param sessionName - Agent session name
377
+ * @param role - Agent role
378
+ * @param nowMs - "Now" for age computation
379
+ * @returns Sorted candidate rows (oldest first — review backlog)
380
+ */
381
+ projectPendingReviews(items, sessionName, role, nowMs) {
382
+ const isOrchestrator = role === ORCHESTRATOR_ROLE || sessionName === ORCHESTRATOR_SESSION_NAME;
383
+ const filtered = items.filter((wi) => {
384
+ if (wi.status !== PENDING_REVIEW_STATUS)
385
+ return false;
386
+ if (isOrchestrator)
387
+ return true;
388
+ const verifier = this.readMetadataString(wi.metadata, 'verifier');
389
+ return verifier === sessionName;
390
+ });
391
+ const rows = filtered.map((wi) => ({
392
+ id: wi.id,
393
+ title: this.truncateTitle(wi.title),
394
+ ageHours: this.ageHours(wi.createdAt, nowMs),
395
+ claimedBy: this.readMetadataString(wi.metadata, 'claimedBy') ?? undefined,
396
+ }));
397
+ // Oldest first — review backlog should be drained FIFO.
398
+ rows.sort((a, b) => b.ageHours - a.ageHours);
399
+ return rows;
400
+ }
401
+ /**
402
+ * Outbound delegations — WorkItems this agent delegated and that haven't
403
+ * resolved yet. Identified by `metadata.delegatedBy === sessionName`.
404
+ * Forward-compatible: if upstream code does not yet populate
405
+ * `metadata.delegatedBy`, this section is empty.
406
+ *
407
+ * @param items - All WorkItems from the pool
408
+ * @param sessionName - Agent session name
409
+ * @param nowMs - "Now" for age computation
410
+ * @returns Sorted candidate rows
411
+ */
412
+ projectOutboundDelegations(items, sessionName, nowMs) {
413
+ const filtered = items.filter((wi) => {
414
+ if (!ACTIVE_WORK_ITEM_STATUSES.has(wi.status))
415
+ return false;
416
+ const delegatedBy = this.readMetadataString(wi.metadata, 'delegatedBy');
417
+ return delegatedBy === sessionName;
418
+ });
419
+ const rows = filtered.map((wi) => ({
420
+ id: wi.id,
421
+ title: this.truncateTitle(wi.title),
422
+ status: wi.status,
423
+ ageHours: this.ageHours(wi.createdAt, nowMs),
424
+ target: wi.target,
425
+ }));
426
+ rows.sort((a, b) => b.ageHours - a.ageHours);
427
+ return rows;
428
+ }
429
+ /**
430
+ * Recently auto-resolved WorkItems within the configured window
431
+ * (default 30 minutes). Surfaced so the agent knows what closed
432
+ * automatically while it was down. Identified by
433
+ * `metadata.slaResolvedAt` falling inside the window.
434
+ *
435
+ * @param items - All WorkItems from the pool
436
+ * @param sessionName - Agent session name (filters to items relevant to this agent)
437
+ * @param role - Agent role
438
+ * @param nowMs - "Now" for age computation
439
+ * @param windowMs - Window size in milliseconds
440
+ * @returns Sorted candidate rows (most recent first)
441
+ */
442
+ projectRecentlyResolved(items, sessionName, role, nowMs, windowMs) {
443
+ const isOrchestrator = role === ORCHESTRATOR_ROLE || sessionName === ORCHESTRATOR_SESSION_NAME;
444
+ const cutoff = nowMs - windowMs;
445
+ const filtered = items.filter((wi) => {
446
+ const resolvedAt = this.readMetadataString(wi.metadata, 'slaResolvedAt');
447
+ if (!resolvedAt)
448
+ return false;
449
+ const ts = new Date(resolvedAt).getTime();
450
+ if (!Number.isFinite(ts))
451
+ return false;
452
+ if (ts < cutoff)
453
+ return false;
454
+ if (isOrchestrator)
455
+ return true;
456
+ const claimedBy = this.readMetadataString(wi.metadata, 'claimedBy');
457
+ const delegatedBy = this.readMetadataString(wi.metadata, 'delegatedBy');
458
+ return (wi.target === sessionName ||
459
+ claimedBy === sessionName ||
460
+ delegatedBy === sessionName);
461
+ });
462
+ const rows = filtered.map((wi) => ({
463
+ id: wi.id,
464
+ title: this.truncateTitle(wi.title),
465
+ resolvedAt: this.readMetadataString(wi.metadata, 'slaResolvedAt') ?? '',
466
+ resolvedReason: this.readMetadataString(wi.metadata, 'slaResolvedReason') ?? undefined,
467
+ }));
468
+ rows.sort((a, b) => new Date(b.resolvedAt).getTime() - new Date(a.resolvedAt).getTime());
469
+ return rows;
470
+ }
471
+ /**
472
+ * Read a priority hint from WorkItem.metadata. Falls back to `'normal'`.
473
+ *
474
+ * @param metadata - WorkItem metadata blob
475
+ * @returns Briefing priority
476
+ */
477
+ readPriorityFromMetadata(metadata) {
478
+ const raw = this.readMetadataString(metadata, 'priority');
479
+ if (raw === 'high' || raw === 'normal' || raw === 'low')
480
+ return raw;
481
+ return 'normal';
482
+ }
483
+ /**
484
+ * Truncate a row title to {@link MAX_TITLE_CHARS}.
485
+ *
486
+ * @param title - Raw title
487
+ * @returns Truncated title (with ellipsis suffix if cut)
488
+ */
489
+ truncateTitle(title) {
490
+ if (title.length <= MAX_TITLE_CHARS)
491
+ return title;
492
+ return title.slice(0, MAX_TITLE_CHARS - 1) + '…';
493
+ }
494
+ /**
495
+ * Truncate a row description to {@link MAX_DESCRIPTION_CHARS}. Replaces
496
+ * newlines with spaces so a description never wraps the briefing layout.
497
+ *
498
+ * @param desc - Raw description
499
+ * @returns Truncated description
500
+ */
501
+ truncateDescription(desc) {
502
+ const oneLine = desc.replace(/\s+/g, ' ').trim();
503
+ if (oneLine.length <= MAX_DESCRIPTION_CHARS)
504
+ return oneLine;
505
+ return oneLine.slice(0, MAX_DESCRIPTION_CHARS - 1) + '…';
506
+ }
507
+ // -------------------------------------------------------------------------
508
+ // Public API — generate
509
+ // -------------------------------------------------------------------------
510
+ /**
511
+ * Generates an active-work briefing for the given agent.
512
+ *
513
+ * Pulls from {@link RequestService} + {@link TaskPoolService}, filters
514
+ * to the agent's slice (orchestrator gets system-wide), applies per-section
515
+ * caps, and returns the structured payload. The caller renders it via
516
+ * {@link formatBriefingAsMarkdown}.
517
+ *
518
+ * Soft-fail policy: any error from the underlying services bubbles up.
519
+ * The CALL SITE in `agent-registration.service.ts` wraps this in a try/catch
520
+ * with WARN-level logging — we deliberately do NOT swallow errors here so
521
+ * test scenarios can assert that the rejection occurs, and so the optional
522
+ * skill endpoint can return a structured 500 response.
523
+ *
524
+ * @param sessionName - Agent session name (e.g. `crewly-product-sam-dd2b46f7`)
525
+ * @param role - Agent role (`developer`, `orchestrator`, etc.)
526
+ * @param options - Optional caps + window overrides for testing
527
+ * @returns The structured briefing
528
+ *
529
+ * @throws Rethrows any error from {@link RequestService.listAll} or
530
+ * {@link TaskPoolService.getAllItems}.
531
+ *
532
+ * @example
533
+ * ```typescript
534
+ * const briefing = await ActiveWorkBriefingService.getInstance()
535
+ * .generateActiveWorkBriefing('dev-001', 'developer');
536
+ * const md = ActiveWorkBriefingService.getInstance()
537
+ * .formatBriefingAsMarkdown(briefing);
538
+ * ```
539
+ */
540
+ async generateActiveWorkBriefing(sessionName, role, options = {}) {
541
+ const nowMs = options.nowMs ?? Date.now();
542
+ const windowMs = options.recentlyResolvedWindowMs ?? DEFAULT_RECENTLY_RESOLVED_WINDOW_MS;
543
+ const caps = this.resolveCaps(role, options.caps);
544
+ // Fetch in parallel — both services are independent.
545
+ const [requests, workItems] = await Promise.all([
546
+ this.requestServiceFactory().listAll(),
547
+ this.taskPoolFactory().getAllItems(),
548
+ ]);
549
+ const openRequestsAll = this.projectRequests(requests, sessionName, role, nowMs);
550
+ const activeWorkItemsAll = this.projectActiveWorkItems(workItems, sessionName, role, nowMs);
551
+ const pendingReviewsAll = this.projectPendingReviews(workItems, sessionName, role, nowMs);
552
+ const outboundDelegationsAll = this.projectOutboundDelegations(workItems, sessionName, nowMs);
553
+ const recentlyAutoResolvedAll = this.projectRecentlyResolved(workItems, sessionName, role, nowMs, windowMs);
554
+ const openRequests = this.applyCap(openRequestsAll, caps.openRequests);
555
+ const activeWorkItems = this.applyCap(activeWorkItemsAll, caps.activeWorkItems);
556
+ const pendingReviews = this.applyCap(pendingReviewsAll, caps.pendingReviews);
557
+ const outboundDelegations = this.applyCap(outboundDelegationsAll, caps.outboundDelegations);
558
+ const recentlyAutoResolved = this.applyCap(recentlyAutoResolvedAll, caps.recentlyAutoResolved);
559
+ const truncated = openRequests.truncation.truncated ||
560
+ activeWorkItems.truncation.truncated ||
561
+ pendingReviews.truncation.truncated ||
562
+ outboundDelegations.truncation.truncated ||
563
+ recentlyAutoResolved.truncation.truncated;
564
+ return {
565
+ openRequests: openRequests.rows,
566
+ activeWorkItems: activeWorkItems.rows,
567
+ pendingReviews: pendingReviews.rows,
568
+ outboundDelegations: outboundDelegations.rows,
569
+ recentlyAutoResolved: recentlyAutoResolved.rows,
570
+ truncation: {
571
+ openRequests: openRequests.truncation,
572
+ activeWorkItems: activeWorkItems.truncation,
573
+ pendingReviews: pendingReviews.truncation,
574
+ outboundDelegations: outboundDelegations.truncation,
575
+ recentlyAutoResolved: recentlyAutoResolved.truncation,
576
+ },
577
+ truncated,
578
+ generatedAt: new Date(nowMs).toISOString(),
579
+ totalCounts: {
580
+ requests: requests.length,
581
+ workItems: workItems.length,
582
+ },
583
+ };
584
+ }
585
+ // -------------------------------------------------------------------------
586
+ // Public API — format
587
+ // -------------------------------------------------------------------------
588
+ /**
589
+ * Format a briefing as markdown suitable for prompt injection.
590
+ *
591
+ * Output structure:
592
+ *
593
+ * ```
594
+ * ## Your Active Work
595
+ *
596
+ * ### Open Requests
597
+ * - **request-abc** — Slack inbound — _open · 2h_ *(memory: marked done — verify)*
598
+ * ...
599
+ * ### Active WorkItems
600
+ * - **wi-123** — Implement feature X — _running · 1h_
601
+ * - desc here
602
+ * ...
603
+ * ```
604
+ *
605
+ * If a {@link MemoryHints} map is provided, contradicting memory notes are
606
+ * appended INLINE on each row, per design Q5/decision #2.
607
+ *
608
+ * Soft-formatting policy: empty briefing collapses to "(No active work —
609
+ * fresh start)". Sections with zero rows are omitted (no empty headings).
610
+ *
611
+ * @param briefing - Structured briefing payload
612
+ * @param memoryHints - Optional namespaced map of `req:<id>` / `wi:<id>` →
613
+ * short note string
614
+ * @returns Markdown string
615
+ */
616
+ formatBriefingAsMarkdown(briefing, memoryHints) {
617
+ const totalRows = briefing.openRequests.length +
618
+ briefing.activeWorkItems.length +
619
+ briefing.pendingReviews.length +
620
+ briefing.outboundDelegations.length +
621
+ briefing.recentlyAutoResolved.length;
622
+ if (totalRows === 0) {
623
+ return '## Your Active Work\n\n(No active work — fresh start)';
624
+ }
625
+ const sections = ['## Your Active Work'];
626
+ // First pass — full description rendering. We may re-render in compact
627
+ // mode below if the orchestrator's briefing crosses the overflow ceiling.
628
+ sections.push(...this.renderSections(briefing, memoryHints, /* compact */ false));
629
+ let md = sections.join('\n\n').trim();
630
+ if (md.length > ORCHESTRATOR_OVERFLOW_CHARS) {
631
+ this.logger.debug('Active-work briefing exceeded overflow ceiling — re-rendering compact', {
632
+ chars: md.length,
633
+ ceiling: ORCHESTRATOR_OVERFLOW_CHARS,
634
+ });
635
+ const compact = ['## Your Active Work'];
636
+ compact.push(...this.renderSections(briefing, memoryHints, /* compact */ true));
637
+ md = compact.join('\n\n').trim();
638
+ }
639
+ return md;
640
+ }
641
+ /**
642
+ * Render the five briefing sub-sections to markdown lines. Pulled out of
643
+ * {@link formatBriefingAsMarkdown} so the overflow-recover path can reuse
644
+ * the same renderer with `compact=true` (drops descriptions to bound
645
+ * the orchestrator briefing).
646
+ *
647
+ * @param briefing - Briefing payload
648
+ * @param memoryHints - Optional contradiction notes
649
+ * @param compact - If true, drop description lines under WorkItem rows
650
+ * @returns Array of markdown blocks (joined by blank lines by caller)
651
+ */
652
+ renderSections(briefing, memoryHints, compact) {
653
+ const out = [];
654
+ if (briefing.openRequests.length > 0) {
655
+ out.push(this.renderOpenRequests(briefing.openRequests, briefing.truncation.openRequests, memoryHints));
656
+ }
657
+ if (briefing.activeWorkItems.length > 0) {
658
+ out.push(this.renderActiveWorkItems(briefing.activeWorkItems, briefing.truncation.activeWorkItems, memoryHints, compact));
659
+ }
660
+ if (briefing.pendingReviews.length > 0) {
661
+ out.push(this.renderPendingReviews(briefing.pendingReviews, briefing.truncation.pendingReviews, memoryHints));
662
+ }
663
+ if (briefing.outboundDelegations.length > 0) {
664
+ out.push(this.renderOutboundDelegations(briefing.outboundDelegations, briefing.truncation.outboundDelegations, memoryHints));
665
+ }
666
+ if (briefing.recentlyAutoResolved.length > 0) {
667
+ out.push(this.renderRecentlyResolved(briefing.recentlyAutoResolved, briefing.truncation.recentlyAutoResolved, memoryHints));
668
+ }
669
+ return out;
670
+ }
671
+ /**
672
+ * Render the truncation marker line for a section. No-op when the section
673
+ * was not truncated.
674
+ *
675
+ * @param truncation - Section truncation metadata
676
+ * @returns Marker line (empty string if not truncated)
677
+ */
678
+ renderTruncationMarker(truncation) {
679
+ if (!truncation.truncated)
680
+ return '';
681
+ const more = truncation.totalCandidates - truncation.cap;
682
+ return `\n_… and ${more} more (call \`get-my-active-work\` for full list)_`;
683
+ }
684
+ /**
685
+ * Append a memory-hint annotation to a row line, if a hint exists for the
686
+ * given key. Renders the annotation italicized so it visually subordinates
687
+ * to the actionable state row.
688
+ *
689
+ * @param line - Row line so far
690
+ * @param key - Hint lookup key (e.g. `req:abc-123`)
691
+ * @param hints - Memory hints map (optional)
692
+ * @returns The line with annotation appended, or unchanged
693
+ */
694
+ appendMemoryHint(line, key, hints) {
695
+ if (!hints)
696
+ return line;
697
+ const note = hints.get(key);
698
+ if (!note)
699
+ return line;
700
+ return `${line} *(memory: ${note})*`;
701
+ }
702
+ /** Format hours into a compact "Nh" / "Nm" string for row metadata. */
703
+ formatAge(ageHours) {
704
+ if (ageHours < 1)
705
+ return `${Math.max(1, Math.round(ageHours * 60))}m`;
706
+ return `${Math.round(ageHours)}h`;
707
+ }
708
+ /**
709
+ * Render the Open Requests section.
710
+ *
711
+ * @param rows - Capped rows
712
+ * @param truncation - Section truncation metadata
713
+ * @param hints - Memory hints
714
+ * @returns Markdown block
715
+ */
716
+ renderOpenRequests(rows, truncation, hints) {
717
+ const lines = ['### Open Requests'];
718
+ for (const row of rows) {
719
+ const base = `- **${row.id}** — ${row.title} — _${row.status} · ${row.priority} · ${this.formatAge(row.ageHours)}_`;
720
+ lines.push(this.appendMemoryHint(base, `req:${row.id}`, hints));
721
+ }
722
+ const marker = this.renderTruncationMarker(truncation);
723
+ return lines.join('\n') + marker;
724
+ }
725
+ /**
726
+ * Render the Active WorkItems section.
727
+ *
728
+ * @param rows - Capped rows
729
+ * @param truncation - Section truncation metadata
730
+ * @param hints - Memory hints
731
+ * @param compact - If true, drop description lines (orchestrator overflow)
732
+ * @returns Markdown block
733
+ */
734
+ renderActiveWorkItems(rows, truncation, hints, compact) {
735
+ const lines = ['### Active WorkItems'];
736
+ for (const row of rows) {
737
+ const reqRef = row.requestId ? ` · req=${row.requestId}` : '';
738
+ const base = `- **${row.id}** — ${row.title} — _${row.status} · ${row.priority} · ${this.formatAge(row.ageHours)}${reqRef}_`;
739
+ lines.push(this.appendMemoryHint(base, `wi:${row.id}`, hints));
740
+ if (!compact && row.description) {
741
+ lines.push(` - ${row.description}`);
742
+ }
743
+ }
744
+ const marker = this.renderTruncationMarker(truncation);
745
+ return lines.join('\n') + marker;
746
+ }
747
+ /**
748
+ * Render the Pending Reviews section.
749
+ *
750
+ * @param rows - Capped rows
751
+ * @param truncation - Section truncation metadata
752
+ * @param hints - Memory hints
753
+ * @returns Markdown block
754
+ */
755
+ renderPendingReviews(rows, truncation, hints) {
756
+ const lines = ['### Pending Reviews'];
757
+ for (const row of rows) {
758
+ const claimedBy = row.claimedBy ? ` · by ${row.claimedBy}` : '';
759
+ const base = `- **${row.id}** — ${row.title} — _${this.formatAge(row.ageHours)}${claimedBy}_`;
760
+ lines.push(this.appendMemoryHint(base, `wi:${row.id}`, hints));
761
+ }
762
+ const marker = this.renderTruncationMarker(truncation);
763
+ return lines.join('\n') + marker;
764
+ }
765
+ /**
766
+ * Render the Outbound Delegations section.
767
+ *
768
+ * @param rows - Capped rows
769
+ * @param truncation - Section truncation metadata
770
+ * @param hints - Memory hints
771
+ * @returns Markdown block
772
+ */
773
+ renderOutboundDelegations(rows, truncation, hints) {
774
+ const lines = ['### Outbound Delegations'];
775
+ for (const row of rows) {
776
+ const target = row.target ? ` → ${row.target}` : '';
777
+ const base = `- **${row.id}** — ${row.title} — _${row.status} · ${this.formatAge(row.ageHours)}${target}_`;
778
+ lines.push(this.appendMemoryHint(base, `wi:${row.id}`, hints));
779
+ }
780
+ const marker = this.renderTruncationMarker(truncation);
781
+ return lines.join('\n') + marker;
782
+ }
783
+ /**
784
+ * Render the Recently Auto-Resolved section.
785
+ *
786
+ * @param rows - Capped rows
787
+ * @param truncation - Section truncation metadata
788
+ * @param hints - Memory hints
789
+ * @returns Markdown block
790
+ */
791
+ renderRecentlyResolved(rows, truncation, hints) {
792
+ const lines = ['### Recently Auto-Resolved (last 30min)'];
793
+ for (const row of rows) {
794
+ const reason = row.resolvedReason ? ` — ${row.resolvedReason}` : '';
795
+ const base = `- **${row.id}** — ${row.title}${reason}`;
796
+ lines.push(this.appendMemoryHint(base, `wi:${row.id}`, hints));
797
+ }
798
+ const marker = this.renderTruncationMarker(truncation);
799
+ return lines.join('\n') + marker;
800
+ }
801
+ }
802
+ //# sourceMappingURL=active-work-briefing.service.js.map