crewly 1.20.105 → 1.20.107

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 (580) hide show
  1. package/README.md +22 -12
  2. package/config/constants.ts +43 -0
  3. package/config/index.ts +2 -0
  4. package/config/skills/_common/lib.sh +55 -2
  5. package/config/skills/_common/lib.test.sh +58 -1
  6. package/config/skills/_common/task-pool-body-shape.test.sh +60 -0
  7. package/config/skills/agent/core/cancel-followup/execute.sh +18 -3
  8. package/config/skills/agent/core/cancel-followup/execute.test.sh +73 -0
  9. package/config/skills/agent/core/complete-task/execute.sh +1 -1
  10. package/config/skills/agent/core/create-intent-tasks/execute.sh +1 -1
  11. package/config/skills/agent/core/create-task/SKILL.md +1 -0
  12. package/config/skills/agent/core/create-task/execute.sh +10 -0
  13. package/config/skills/agent/core/decompose-intent/execute.sh +1 -1
  14. package/config/skills/agent/core/handoff-task/execute.sh +1 -1
  15. package/config/skills/agent/core/list-my-followups/SKILL.md +1 -1
  16. package/config/skills/agent/core/list-my-followups/execute.sh +25 -3
  17. package/config/skills/agent/core/list-my-followups/execute.test.sh +72 -0
  18. package/config/skills/agent/core/poll-tasks/execute.sh +3 -3
  19. package/config/skills/agent/core/reply-channel/SKILL.md +1 -1
  20. package/config/skills/agent/core/report-progress/execute.sh +1 -1
  21. package/config/skills/agent/core/report-status/execute.sh +1 -1
  22. package/config/skills/agent/core/slack-post/SKILL.md +1 -1
  23. package/config/skills/agent/core/todo-add/SKILL.md +64 -0
  24. package/config/skills/agent/core/todo-add/execute.sh +84 -0
  25. package/config/skills/agent/core/todo-add/execute.test.sh +76 -0
  26. package/config/skills/agent/core/todo-lists/SKILL.md +58 -0
  27. package/config/skills/agent/core/todo-lists/execute.sh +70 -0
  28. package/config/skills/agent/core/todo-lists/execute.test.sh +77 -0
  29. package/config/skills/agent/core/todo-tasks/SKILL.md +59 -0
  30. package/config/skills/agent/core/todo-tasks/execute.sh +78 -0
  31. package/config/skills/agent/core/todo-tasks/execute.test.sh +74 -0
  32. package/config/skills/agent/core/todo-update/SKILL.md +63 -0
  33. package/config/skills/agent/core/todo-update/execute.sh +115 -0
  34. package/config/skills/agent/core/todo-update/execute.test.sh +82 -0
  35. package/config/skills/agent/core/update-intent-task/execute.sh +1 -1
  36. package/config/skills/agent/marketing/brand-onboarding/execute.sh +1 -1
  37. package/config/skills/agent/marketing/submit-for-approval/execute.sh +1 -1
  38. package/config/skills/agent/remote-browser/SOP-google-flow-video.md +1 -1
  39. package/config/skills/agent/remote-browser/execute.sh +33 -1
  40. package/config/skills/agent/remote-browser/execute.test.sh +62 -0
  41. package/config/skills/agent/screenshot-compare/execute.sh +1 -1
  42. package/config/skills/agent/transcribe-audio/SKILL.md +1 -1
  43. package/config/skills/agent/transcribe-audio/execute.sh +1 -1
  44. package/config/skills/agent/transcribe-audio/instructions.md +1 -1
  45. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  46. package/config/skills/orchestrator/get-tasks/SKILL.md +7 -1
  47. package/config/skills/orchestrator/get-tasks/execute.sh +51 -28
  48. package/config/skills/orchestrator/get-tasks/execute.test.sh +67 -0
  49. package/config/skills/orchestrator/heartbeat/execute.sh +2 -2
  50. package/config/skills/orchestrator/list-missions/execute.sh +1 -1
  51. package/config/skills/orchestrator/list-missions/execute.test.sh +38 -11
  52. package/config/skills/team-leader/decompose-goal/SKILL.md +1 -0
  53. package/config/skills/team-leader/decompose-goal/execute.sh +17 -2
  54. package/config/skills/team-leader/delegate-task/SKILL.md +1 -0
  55. package/config/skills/team-leader/delegate-task/execute.sh +6 -2
  56. package/dist/backend/backend/src/constants.d.ts +264 -2
  57. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  58. package/dist/backend/backend/src/constants.js +255 -3
  59. package/dist/backend/backend/src/constants.js.map +1 -1
  60. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +33 -0
  61. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  62. package/dist/backend/backend/src/controllers/browser/browser.controller.js +176 -9
  63. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  64. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  65. package/dist/backend/backend/src/controllers/chat/chat.controller.js +38 -35
  66. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  67. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +10 -45
  68. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  69. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +40 -89
  70. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  71. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +51 -0
  72. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -0
  73. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +223 -0
  74. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -0
  75. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts +25 -0
  76. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -0
  77. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +42 -0
  78. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -0
  79. package/dist/backend/backend/src/controllers/session/session.controller.d.ts +2 -1
  80. package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
  81. package/dist/backend/backend/src/controllers/session/session.controller.js +21 -0
  82. package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
  83. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  84. package/dist/backend/backend/src/controllers/slack/slack.controller.js +51 -3
  85. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  86. package/dist/backend/backend/src/controllers/system/restart-readiness.controller.d.ts +23 -0
  87. package/dist/backend/backend/src/controllers/system/restart-readiness.controller.d.ts.map +1 -0
  88. package/dist/backend/backend/src/controllers/system/restart-readiness.controller.js +35 -0
  89. package/dist/backend/backend/src/controllers/system/restart-readiness.controller.js.map +1 -0
  90. package/dist/backend/backend/src/controllers/system/system.controller.d.ts +5 -3
  91. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  92. package/dist/backend/backend/src/controllers/system/system.controller.js +27 -6
  93. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  94. package/dist/backend/backend/src/controllers/system/system.routes.d.ts.map +1 -1
  95. package/dist/backend/backend/src/controllers/system/system.routes.js +3 -0
  96. package/dist/backend/backend/src/controllers/system/system.routes.js.map +1 -1
  97. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  98. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +29 -1
  99. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  100. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  101. package/dist/backend/backend/src/controllers/team/team.controller.js +86 -6
  102. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  103. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +41 -0
  104. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -0
  105. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +135 -0
  106. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -0
  107. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +18 -0
  108. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -0
  109. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +25 -0
  110. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -0
  111. package/dist/backend/backend/src/index.d.ts +70 -1
  112. package/dist/backend/backend/src/index.d.ts.map +1 -1
  113. package/dist/backend/backend/src/index.js +352 -71
  114. package/dist/backend/backend/src/index.js.map +1 -1
  115. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  116. package/dist/backend/backend/src/routes/api.routes.js +6 -0
  117. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  118. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts +128 -0
  119. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts.map +1 -0
  120. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js +200 -0
  121. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js.map +1 -0
  122. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +2 -2
  123. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +3 -1
  125. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +4 -0
  127. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/agent/agent-registration.service.js +61 -4
  129. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  130. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +30 -0
  131. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/agent/claude-runtime.service.js +62 -1
  133. package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  134. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +2 -1
  136. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +0 -2
  138. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  139. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +0 -2
  140. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  141. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +65 -1
  142. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  143. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +113 -10
  144. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  145. package/dist/backend/backend/src/services/agent/restore-filter.d.ts +12 -0
  146. package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/agent/restore-filter.js +19 -0
  148. package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
  149. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  150. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +3 -2
  151. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  152. package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts +28 -0
  153. package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -0
  154. package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js +34 -0
  155. package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -0
  156. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +57 -5
  157. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  158. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +98 -18
  159. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  160. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +12 -1
  161. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  162. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +25 -4
  163. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  164. package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts +2 -1
  165. package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts.map +1 -1
  166. package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js +5 -1
  167. package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js.map +1 -1
  168. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +38 -0
  169. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
  170. package/dist/backend/backend/src/services/browser/browser-session.service.js +34 -0
  171. package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
  172. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +6 -0
  173. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  174. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +5 -0
  175. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  176. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts.map +1 -1
  177. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js +7 -2
  178. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js.map +1 -1
  179. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -1
  180. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +58 -1
  182. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  183. package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.d.ts +63 -0
  184. package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.d.ts.map +1 -0
  185. package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.js +72 -0
  186. package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.js.map +1 -0
  187. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
  188. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +15 -0
  190. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  191. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  192. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +6 -1
  193. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  194. package/dist/backend/backend/src/services/connector/connector-access.service.d.ts +2 -2
  195. package/dist/backend/backend/src/services/connector/connector-access.service.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/connector/connector-access.service.js +2 -2
  197. package/dist/backend/backend/src/services/connector/connector-access.service.js.map +1 -1
  198. package/dist/backend/backend/src/services/core/retry.util.d.ts +5 -0
  199. package/dist/backend/backend/src/services/core/retry.util.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/core/retry.util.js +2 -2
  201. package/dist/backend/backend/src/services/core/retry.util.js.map +1 -1
  202. package/dist/backend/backend/src/services/factory.service.js +3 -3
  203. package/dist/backend/backend/src/services/factory.service.js.map +1 -1
  204. package/dist/backend/backend/src/services/messaging/google-chat-initializer.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/messaging/google-chat-initializer.js +24 -1
  206. package/dist/backend/backend/src/services/messaging/google-chat-initializer.js.map +1 -1
  207. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +9 -0
  208. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  209. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +55 -0
  210. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  211. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +7 -0
  212. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +12 -0
  214. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  215. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +36 -1
  216. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  217. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +90 -2
  218. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  219. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +250 -0
  220. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -0
  221. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +367 -0
  222. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -0
  223. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +116 -0
  224. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -0
  225. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +220 -0
  226. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -0
  227. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
  228. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +22 -16
  229. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
  230. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +11 -1
  231. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -1
  232. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  233. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +9 -9
  234. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  235. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +189 -0
  236. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -0
  237. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +246 -0
  238. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -0
  239. package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +153 -0
  240. package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -0
  241. package/dist/backend/backend/src/services/restart/interrupted-turns.js +279 -0
  242. package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -0
  243. package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +176 -0
  244. package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -0
  245. package/dist/backend/backend/src/services/restart/restart-drain.service.js +298 -0
  246. package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -0
  247. package/dist/backend/backend/src/services/restart/turn-probe.d.ts +52 -0
  248. package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -0
  249. package/dist/backend/backend/src/services/restart/turn-probe.js +61 -0
  250. package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -0
  251. package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.d.ts +70 -0
  252. package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.d.ts.map +1 -0
  253. package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.js +105 -0
  254. package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.js.map +1 -0
  255. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +2 -0
  256. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  257. package/dist/backend/backend/src/services/session/pty/pty-session.js +53 -1
  258. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  259. package/dist/backend/backend/src/services/session/session-binding.d.ts +125 -0
  260. package/dist/backend/backend/src/services/session/session-binding.d.ts.map +1 -0
  261. package/dist/backend/backend/src/services/session/session-binding.js +183 -0
  262. package/dist/backend/backend/src/services/session/session-binding.js.map +1 -0
  263. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  264. package/dist/backend/backend/src/services/session/session-handoff.service.js +19 -0
  265. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  266. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +10 -0
  267. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  268. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +37 -1
  269. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  270. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts +4 -3
  271. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts.map +1 -1
  272. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js +4 -3
  273. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js.map +1 -1
  274. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +72 -7
  275. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  276. package/dist/backend/backend/src/services/slack/slack-initializer.js +185 -23
  277. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  278. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +4 -45
  279. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  280. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +57 -190
  281. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  282. package/dist/backend/backend/src/services/slack/slack-source-preference.service.d.ts +59 -0
  283. package/dist/backend/backend/src/services/slack/slack-source-preference.service.d.ts.map +1 -0
  284. package/dist/backend/backend/src/services/slack/slack-source-preference.service.js +69 -0
  285. package/dist/backend/backend/src/services/slack/slack-source-preference.service.js.map +1 -0
  286. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +18 -0
  287. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  288. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +64 -3
  289. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  290. package/dist/backend/backend/src/services/slack/slack.service.d.ts +33 -1
  291. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/slack/slack.service.js +129 -4
  293. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  294. package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts +108 -0
  295. package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts.map +1 -0
  296. package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js +193 -0
  297. package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js.map +1 -0
  298. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts +15 -0
  299. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  300. package/dist/backend/backend/src/services/task-pool/pool-storage.js +30 -0
  301. package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
  302. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +41 -1
  303. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  304. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +55 -1
  305. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  306. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts +7 -0
  307. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -1
  308. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +32 -1
  309. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -1
  310. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  311. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +4 -3
  312. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  313. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
  314. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +12 -0
  315. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
  316. package/dist/backend/backend/src/services/v3/request.service.d.ts +7 -0
  317. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  318. package/dist/backend/backend/src/services/v3/request.service.js +17 -0
  319. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  320. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts +279 -0
  321. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -0
  322. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +458 -0
  323. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -0
  324. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +376 -0
  325. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -0
  326. package/dist/backend/backend/src/services/v3/ticket-intake.service.js +566 -0
  327. package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -0
  328. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
  329. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +3 -3
  330. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
  331. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +28 -4
  332. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
  333. package/dist/backend/backend/src/services/v3/trigger-engine.service.js +40 -10
  334. package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
  335. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +1 -0
  336. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  337. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +3 -3
  338. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  339. package/dist/backend/backend/src/types/slack.types.d.ts +29 -0
  340. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  341. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  342. package/dist/backend/backend/src/types/thread-status.types.d.ts +26 -0
  343. package/dist/backend/backend/src/types/thread-status.types.d.ts.map +1 -1
  344. package/dist/backend/backend/src/types/thread-status.types.js +17 -0
  345. package/dist/backend/backend/src/types/thread-status.types.js.map +1 -1
  346. package/dist/backend/backend/src/types/v2/index.d.ts +3 -2
  347. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  348. package/dist/backend/backend/src/types/v2/index.js +1 -1
  349. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  350. package/dist/backend/backend/src/types/v2/request.types.d.ts +39 -3
  351. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  352. package/dist/backend/backend/src/types/v2/request.types.js +11 -2
  353. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  354. package/dist/backend/backend/src/types/v2/ticket.types.d.ts +173 -0
  355. package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -0
  356. package/dist/backend/backend/src/types/v2/ticket.types.js +203 -0
  357. package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -0
  358. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +26 -0
  359. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
  360. package/dist/backend/backend/src/utils/agent-caller.utils.js +40 -3
  361. package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
  362. package/dist/backend/backend/src/utils/gemini-auth-settings.d.ts +62 -0
  363. package/dist/backend/backend/src/utils/gemini-auth-settings.d.ts.map +1 -0
  364. package/dist/backend/backend/src/utils/gemini-auth-settings.js +104 -0
  365. package/dist/backend/backend/src/utils/gemini-auth-settings.js.map +1 -0
  366. package/dist/backend/backend/src/utils/local-api-url.utils.d.ts +56 -0
  367. package/dist/backend/backend/src/utils/local-api-url.utils.d.ts.map +1 -0
  368. package/dist/backend/backend/src/utils/local-api-url.utils.js +80 -0
  369. package/dist/backend/backend/src/utils/local-api-url.utils.js.map +1 -0
  370. package/dist/backend/build-info.json +2 -2
  371. package/dist/backend/config/constants.d.ts +40 -0
  372. package/dist/backend/config/constants.d.ts.map +1 -1
  373. package/dist/backend/config/constants.js +41 -0
  374. package/dist/backend/config/constants.js.map +1 -1
  375. package/dist/backend/config/index.d.ts +4 -2
  376. package/dist/backend/config/index.d.ts.map +1 -1
  377. package/dist/backend/config/index.js +2 -2
  378. package/dist/backend/config/index.js.map +1 -1
  379. package/dist/cli/backend/src/constants.d.ts +264 -2
  380. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  381. package/dist/cli/backend/src/constants.js +255 -3
  382. package/dist/cli/backend/src/constants.js.map +1 -1
  383. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +2 -2
  384. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
  385. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +3 -1
  386. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
  387. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +4 -0
  388. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  389. package/dist/cli/backend/src/services/agent/agent-registration.service.js +61 -4
  390. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  391. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +30 -0
  392. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  393. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +62 -1
  394. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  395. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  396. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +2 -1
  397. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  398. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +0 -2
  399. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  400. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +0 -2
  401. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  402. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +65 -1
  403. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  404. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +113 -10
  405. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  406. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  407. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +3 -2
  408. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  409. package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts +28 -0
  410. package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -0
  411. package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js +34 -0
  412. package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -0
  413. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +6 -0
  414. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  415. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +5 -0
  416. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  417. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -1
  418. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  419. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +58 -1
  420. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  421. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
  422. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  423. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +15 -0
  424. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  425. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +7 -0
  426. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  427. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +12 -0
  428. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  429. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +36 -1
  430. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  431. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +90 -2
  432. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  433. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +189 -0
  434. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -0
  435. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +246 -0
  436. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -0
  437. package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +176 -0
  438. package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -0
  439. package/dist/cli/backend/src/services/restart/restart-drain.service.js +298 -0
  440. package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -0
  441. package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.d.ts +70 -0
  442. package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.d.ts.map +1 -0
  443. package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.js +105 -0
  444. package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.js.map +1 -0
  445. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +2 -0
  446. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  447. package/dist/cli/backend/src/services/session/pty/pty-session.js +53 -1
  448. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
  449. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  450. package/dist/cli/backend/src/services/session/session-handoff.service.js +19 -0
  451. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  452. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +10 -0
  453. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  454. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +37 -1
  455. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  456. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +4 -45
  457. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  458. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +57 -190
  459. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  460. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +18 -0
  461. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  462. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +64 -3
  463. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  464. package/dist/cli/backend/src/services/slack/slack.service.d.ts +33 -1
  465. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  466. package/dist/cli/backend/src/services/slack/slack.service.js +129 -4
  467. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  468. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts +15 -0
  469. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  470. package/dist/cli/backend/src/services/task-pool/pool-storage.js +30 -0
  471. package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
  472. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +41 -1
  473. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  474. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +55 -1
  475. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  476. package/dist/cli/backend/src/services/v3/request.service.d.ts +7 -0
  477. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  478. package/dist/cli/backend/src/services/v3/request.service.js +17 -0
  479. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  480. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts +279 -0
  481. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -0
  482. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +458 -0
  483. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -0
  484. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +376 -0
  485. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -0
  486. package/dist/cli/backend/src/services/v3/ticket-intake.service.js +566 -0
  487. package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -0
  488. package/dist/cli/backend/src/types/slack.types.d.ts +29 -0
  489. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  490. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  491. package/dist/cli/backend/src/types/thread-status.types.d.ts +26 -0
  492. package/dist/cli/backend/src/types/thread-status.types.d.ts.map +1 -1
  493. package/dist/cli/backend/src/types/thread-status.types.js +17 -0
  494. package/dist/cli/backend/src/types/thread-status.types.js.map +1 -1
  495. package/dist/cli/backend/src/types/v2/index.d.ts +3 -2
  496. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  497. package/dist/cli/backend/src/types/v2/index.js +1 -1
  498. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  499. package/dist/cli/backend/src/types/v2/request.types.d.ts +39 -3
  500. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  501. package/dist/cli/backend/src/types/v2/request.types.js +11 -2
  502. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  503. package/dist/cli/backend/src/types/v2/ticket.types.d.ts +173 -0
  504. package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -0
  505. package/dist/cli/backend/src/types/v2/ticket.types.js +203 -0
  506. package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -0
  507. package/dist/cli/backend/src/utils/gemini-auth-settings.d.ts +62 -0
  508. package/dist/cli/backend/src/utils/gemini-auth-settings.d.ts.map +1 -0
  509. package/dist/cli/backend/src/utils/gemini-auth-settings.js +104 -0
  510. package/dist/cli/backend/src/utils/gemini-auth-settings.js.map +1 -0
  511. package/dist/cli/backend/src/utils/local-api-url.utils.d.ts +56 -0
  512. package/dist/cli/backend/src/utils/local-api-url.utils.d.ts.map +1 -0
  513. package/dist/cli/backend/src/utils/local-api-url.utils.js +80 -0
  514. package/dist/cli/backend/src/utils/local-api-url.utils.js.map +1 -0
  515. package/dist/cli/cli/src/commands/doctor.d.ts +73 -2
  516. package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -1
  517. package/dist/cli/cli/src/commands/doctor.js +250 -8
  518. package/dist/cli/cli/src/commands/doctor.js.map +1 -1
  519. package/dist/cli/cli/src/commands/install.js +2 -0
  520. package/dist/cli/cli/src/commands/install.js.map +1 -1
  521. package/dist/cli/cli/src/commands/onboard.d.ts +68 -0
  522. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  523. package/dist/cli/cli/src/commands/onboard.js +149 -18
  524. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  525. package/dist/cli/cli/src/commands/service.d.ts +6 -0
  526. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  527. package/dist/cli/cli/src/commands/service.js +152 -50
  528. package/dist/cli/cli/src/commands/service.js.map +1 -1
  529. package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
  530. package/dist/cli/cli/src/commands/start.js +25 -80
  531. package/dist/cli/cli/src/commands/start.js.map +1 -1
  532. package/dist/cli/cli/src/commands/status.d.ts +17 -1
  533. package/dist/cli/cli/src/commands/status.d.ts.map +1 -1
  534. package/dist/cli/cli/src/commands/status.js +133 -68
  535. package/dist/cli/cli/src/commands/status.js.map +1 -1
  536. package/dist/cli/cli/src/commands/stop.d.ts +28 -1
  537. package/dist/cli/cli/src/commands/stop.d.ts.map +1 -1
  538. package/dist/cli/cli/src/commands/stop.js +260 -100
  539. package/dist/cli/cli/src/commands/stop.js.map +1 -1
  540. package/dist/cli/cli/src/index.js +3 -2
  541. package/dist/cli/cli/src/index.js.map +1 -1
  542. package/dist/cli/cli/src/scripts/ensure-node-pty.d.ts +68 -0
  543. package/dist/cli/cli/src/scripts/ensure-node-pty.d.ts.map +1 -0
  544. package/dist/cli/cli/src/scripts/ensure-node-pty.js +167 -0
  545. package/dist/cli/cli/src/scripts/ensure-node-pty.js.map +1 -0
  546. package/dist/cli/cli/src/utils/backend-status.d.ts +175 -0
  547. package/dist/cli/cli/src/utils/backend-status.d.ts.map +1 -0
  548. package/dist/cli/cli/src/utils/backend-status.js +322 -0
  549. package/dist/cli/cli/src/utils/backend-status.js.map +1 -0
  550. package/dist/cli/cli/src/utils/marketplace.d.ts +31 -2
  551. package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
  552. package/dist/cli/cli/src/utils/marketplace.js +78 -20
  553. package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
  554. package/dist/cli/cli/src/utils/native-toolchain.d.ts +53 -8
  555. package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -1
  556. package/dist/cli/cli/src/utils/native-toolchain.js +107 -15
  557. package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -1
  558. package/dist/cli/cli/src/utils/process-cleanup.d.ts +38 -6
  559. package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
  560. package/dist/cli/cli/src/utils/process-cleanup.js +83 -53
  561. package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
  562. package/dist/cli/cli/src/utils/runtime-auth.d.ts +130 -0
  563. package/dist/cli/cli/src/utils/runtime-auth.d.ts.map +1 -0
  564. package/dist/cli/cli/src/utils/runtime-auth.js +248 -0
  565. package/dist/cli/cli/src/utils/runtime-auth.js.map +1 -0
  566. package/dist/cli/cli/src/utils/safe-shutdown.d.ts +137 -0
  567. package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -0
  568. package/dist/cli/cli/src/utils/safe-shutdown.js +236 -0
  569. package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -0
  570. package/dist/cli/config/constants.d.ts +40 -0
  571. package/dist/cli/config/constants.d.ts.map +1 -1
  572. package/dist/cli/config/constants.js +41 -0
  573. package/dist/cli/config/constants.js.map +1 -1
  574. package/dist/cli/config/index.d.ts +4 -2
  575. package/dist/cli/config/index.d.ts.map +1 -1
  576. package/dist/cli/config/index.js +2 -2
  577. package/dist/cli/config/index.js.map +1 -1
  578. package/frontend/dist/assets/{index-1fd45a2a.js → index-f7b99e81.js} +262 -262
  579. package/frontend/dist/index.html +1 -1
  580. package/package.json +4 -4
@@ -318,6 +318,26 @@ assert_contains "first request had stale tabId:100" "$first_body" '"tabId":100'
318
318
  || pass "cache purged on 404"
319
319
  scenario_teardown
320
320
 
321
+ # Scenario 6b: an explicit --tab-id that 404s is NOT retried on another tab
322
+ scenario_init "scenario 6b: explicit --tab-id 404 fails without retry"
323
+ mkdir -p "${RUNTIME_DIR}/agent-6b"
324
+ echo "55" > "${RUNTIME_DIR}/agent-6b/browser-tab-id"
325
+ queue_response '404|{"id":"x","success":false,"error":"Tab 100 no longer exists. Bind a new tab instead of reusing this tabId.","code":"tab_not_found"}'
326
+ queue_response '{"success":true,"data":{"text":"some other tab"}}'
327
+ start_stub
328
+ export CREWLY_SESSION_NAME="agent-6b"
329
+ set +e
330
+ "$SKILL" --action read-text --tab-id 100 > /dev/null 2>&1
331
+ rc=$?
332
+ set -e
333
+ total_reqs=$(wc -l < "$LOG_FILE")
334
+ assert_eq "stub received exactly 1 request" "1" "$(printf '%s' "$total_reqs" | tr -d ' ')"
335
+ [ "$rc" -ne 0 ] && pass "explicit --tab-id 404 exits non-zero" || fail "explicit --tab-id 404 exits non-zero" "rc=$rc"
336
+ [ -f "${RUNTIME_DIR}/agent-6b/browser-tab-id" ] \
337
+ && pass "cached tab left alone for an explicit --tab-id failure" \
338
+ || fail "cached tab left alone" "cache was purged"
339
+ scenario_teardown
340
+
321
341
  # Scenario 7: bind-tab with --active sends active:true
322
342
  scenario_init "scenario 7: bind-tab --active forwards foreground flag"
323
343
  queue_response '{"success":true,"data":{"tabId":7}}'
@@ -468,6 +488,48 @@ total_reqs=$(wc -l < "$LOG_FILE" | tr -d ' ')
468
488
  assert_eq "stub received 0 requests" "0" "$total_reqs"
469
489
  scenario_teardown
470
490
 
491
+ # The goal header is sent as b64:<base64 of UTF-8>; decode it for comparison.
492
+ decode_goal() {
493
+ case "$1" in
494
+ b64:*) printf '%s' "${1#b64:}" | base64 --decode 2>/dev/null || printf '%s' "${1#b64:}" | base64 -D ;;
495
+ *) printf 'NOT-B64:%s' "$1" ;;
496
+ esac
497
+ }
498
+
499
+ # Scenario 20: --goal forwards the X-Agent-Goal header (takeover banner)
500
+ scenario_init "scenario 20: --goal forwards X-Agent-Goal"
501
+ queue_response '{"success":true,"data":{}}'
502
+ start_stub
503
+ unset CREWLY_SESSION_NAME
504
+ unset CREWLY_AGENT_GOAL 2>/dev/null || true
505
+ "$SKILL" --action navigate --url https://x.com --goal "Verify DMARC setup" > /dev/null 2>&1 || true
506
+ assert_eq "X-Agent-Goal from --goal" "Verify DMARC setup" "$(decode_goal "$(request_field 0 headers.X-Agent-Goal)")"
507
+ scenario_teardown
508
+
509
+ # Scenario 21: CREWLY_AGENT_GOAL env auto-forwards; --goal overrides it
510
+ scenario_init "scenario 21: CREWLY_AGENT_GOAL auto-forwards + --goal override"
511
+ queue_response '{"success":true,"data":{}}'
512
+ queue_response '{"success":true,"data":{}}'
513
+ start_stub
514
+ unset CREWLY_SESSION_NAME
515
+ export CREWLY_AGENT_GOAL="Goal from env"
516
+ "$SKILL" --action navigate --url https://x.com > /dev/null 2>&1 || true
517
+ assert_eq "auto X-Agent-Goal from env" "Goal from env" "$(decode_goal "$(request_field 0 headers.X-Agent-Goal)")"
518
+ "$SKILL" --action navigate --url https://y.com --goal "Override goal" > /dev/null 2>&1 || true
519
+ assert_eq "--goal overrides env" "Override goal" "$(decode_goal "$(request_field 1 headers.X-Agent-Goal)")"
520
+ unset CREWLY_AGENT_GOAL
521
+ scenario_teardown
522
+
523
+ # Scenario 22: a non-ASCII goal survives the header (base64-encoded)
524
+ scenario_init "scenario 22: non-ASCII --goal round-trips"
525
+ queue_response '{"success":true,"data":{}}'
526
+ start_stub
527
+ unset CREWLY_SESSION_NAME
528
+ unset CREWLY_AGENT_GOAL 2>/dev/null || true
529
+ "$SKILL" --action navigate --url https://x.com --goal "核对 DMARC 设置" > /dev/null 2>&1 || true
530
+ assert_eq "non-ASCII goal decoded" "核对 DMARC 设置" "$(decode_goal "$(request_field 0 headers.X-Agent-Goal)")"
531
+ scenario_teardown
532
+
471
533
  # ---------------------------------------------------------------------------
472
534
  # Summary
473
535
  # ---------------------------------------------------------------------------
@@ -50,7 +50,7 @@ fi
50
50
  # ── API key resolution ─────────────────────────────────────────────────────────
51
51
  if [ -z "${GEMINI_API_KEY:-}" ]; then
52
52
  # Try loading from settings via Crewly API
53
- GEMINI_API_KEY=$(curl -sf "http://localhost:8787/api/settings" 2>/dev/null | jq -r '.data.apiKeys.global.gemini // empty' 2>/dev/null || true)
53
+ GEMINI_API_KEY=$(curl -sf "${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}/api/settings" 2>/dev/null | jq -r '.data.apiKeys.global.gemini // empty' 2>/dev/null || true)
54
54
  fi
55
55
 
56
56
  if [ -z "${GEMINI_API_KEY:-}" ]; then
@@ -99,7 +99,7 @@ downstream consumers have a stable shape).
99
99
  - If the binary or model is missing, the skill falls back to OpenAI (or reports a clear hint when `engine:"local"` is forced).
100
100
  - **OpenAI engine** — needs an OpenAI API key. Resolution order:
101
101
  1. `OPENAI_API_KEY` environment variable (injected by Crewly secrets).
102
- 2. Crewly Settings → API Keys (`GET http://localhost:8787/api/settings` → `data.apiKeys.global.openai`).
102
+ 2. Crewly Settings → API Keys (`GET $CREWLY_API_URL/api/settings` → `data.apiKeys.global.openai`).
103
103
  No key is ever hard-coded.
104
104
 
105
105
  ## Notes
@@ -24,7 +24,7 @@ FLOPOST_WHISPER_DIR="${HOME}/.flopost/whisper"
24
24
  WHISPER_CACHE_DIR="${HOME}/.cache/whisper-models"
25
25
  OPENAI_TRANSCRIBE_URL="https://api.openai.com/v1/audio/transcriptions"
26
26
  OPENAI_MODEL="whisper-1"
27
- SETTINGS_URL="http://localhost:8787/api/settings"
27
+ SETTINGS_URL="${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}/api/settings"
28
28
 
29
29
  err_json() { printf '{"success":false,"error":%s}\n' "$(printf '%s' "$1" | jq -Rsa .)"; exit 1; }
30
30
 
@@ -81,7 +81,7 @@ downstream consumers have a stable shape).
81
81
  - If the binary or model is missing, the skill falls back to OpenAI (or reports a clear hint when `engine:"local"` is forced).
82
82
  - **OpenAI engine** — needs an OpenAI API key. Resolution order:
83
83
  1. `OPENAI_API_KEY` environment variable (injected by Crewly secrets).
84
- 2. Crewly Settings → API Keys (`GET http://localhost:8787/api/settings` → `data.apiKeys.global.openai`).
84
+ 2. Crewly Settings → API Keys (`GET $CREWLY_API_URL/api/settings` → `data.apiKeys.global.openai`).
85
85
  No key is ever hard-coded.
86
86
 
87
87
  ## Notes
@@ -46,7 +46,7 @@ The script auto-resolves `config/skills/...` references to absolute paths so del
46
46
  | `--team` / `-g` | `teamId` | No | Team ID for cross-team validation |
47
47
  | `--task-type` | `taskType` | No | Task type: `general`, `technical` (default: `general`) |
48
48
  | `--force-cross-team` | `forceCrossTeam` | No | Allow cross-team delegation |
49
- | `--request-id` / `-R` | `requestId` | No | Parent V3 Request ID; tags the resulting WorkItem so `Request.workItemIds[]` is populated by the SLA subscriber (Pipeline-#4 fix) |
49
+ | `--request-id` / `-R` | `requestId` | No | Ticket (Request) this work is for — the id or `TKT-123` from the `[TICKET:TKT-123 <id>]` line of the message you are acting on. Links the WorkItem into `Request.workItemIds[]`. Omit it and the WorkItem is still linked when your current turn has exactly one ticket |
50
50
  | `--fallback-minutes` | — | No | Minutes until the ONE §3.0 fallback check fires for this delegation (default `120` ≈ 2× a TL milestone ETA). `0` disables it. Not cancelled on completion — keep it at 2× ETA, never a poll interval |
51
51
 
52
52
  ## Usage — CLI Flags (preferred)
@@ -50,4 +50,10 @@ The whole pool can be several MB.
50
50
 
51
51
  ## Output
52
52
 
53
- JSON with team task progress including assigned, completed, and blocked tasks.
53
+ `{ success, stats, examined, matched, shown, workItems, hint }`.
54
+
55
+ - `stats` — the pool's `/task-pool/stats` aggregate (totals by type/status).
56
+ - `examined` — number of pool rows fetched before filtering (the whole pool).
57
+ - `matched` / `shown` — rows that passed the filters, and how many of them are listed (`limit`).
58
+ - `workItems` — the compact items described above.
59
+ - If the item list could not be fetched or was not a list, the skill prints `success:false` with an `error` and exits 1 — an unknown list is never reported as an empty one.
@@ -23,19 +23,28 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
23
23
  source "${SCRIPT_DIR}/../_common/lib.sh"
24
24
 
25
25
  INPUT=$(read_json_input "${1:-}" 2>/dev/null || echo '{}')
26
+ # No argument and no stdin gives an empty string, not '{}'. Without this
27
+ # default LIMIT came out empty, `--argjson limit ""` failed, and a bare
28
+ # `get-tasks` reported "could not read the task pool".
29
+ [ -n "${INPUT//[[:space:]]/}" ] || INPUT='{}'
26
30
 
27
31
  PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
28
32
  STATUS=$(printf '%s' "$INPUT" | jq -r '.status // empty')
29
33
  ALL=$(printf '%s' "$INPUT" | jq -r '.all // false')
30
- LIMIT=$(printf '%s' "$INPUT" | jq -r '.limit // 50')
34
+ LIMIT=$(printf '%s' "$INPUT" | jq -r '(.limit // 50) | tonumber? // 50')
31
35
  TARGET=$(printf '%s' "$INPUT" | jq -r '.target // empty')
32
36
 
33
37
  STATS=$(api_call GET "/task-pool/stats" 2>/dev/null || echo '{"data":{}}')
34
38
 
35
- # The item list goes through a pipe, never argv, however large the pool is,
36
- # and bypasses the skill output cap — it is filtered down below, and a
37
- # truncation envelope in its place would read as "no work items".
38
- CREWLY_SKILL_MAX_OUTPUT_BYTES=0 api_call GET "/task-pool/items" 2>/dev/null \
39
+ # The item list goes through a pipe, never argv, however large the pool is.
40
+ # api_call_full bypasses the skill output cap (or reads the parked body); it
41
+ # fails rather than hand back a truncation envelope that would read as "no
42
+ # work items". An unknown list is reported as success:false and exit 1.
43
+ if ! ITEMS=$(api_call_full GET "/task-pool/items" 2>/dev/null); then
44
+ ITEMS='{"data":null}'
45
+ fi
46
+
47
+ OUT=$(printf '%s' "$ITEMS" \
39
48
  | jq -c \
40
49
  --argjson stats "$STATS" \
41
50
  --arg projectPath "$PROJECT_PATH" \
@@ -45,26 +54,40 @@ CREWLY_SKILL_MAX_OUTPUT_BYTES=0 api_call GET "/task-pool/items" 2>/dev/null \
45
54
  --argjson limit "$LIMIT" \
46
55
  '
47
56
  def finished: ["done","verified","cancelled","failed","rejected"];
48
- (.data // .workItems // []) as $items
49
- | ($items
50
- | map(select(
51
- ($status == "" or (.status as $s | ($status | split(",") | index($s)) != null))
52
- and ($all == "true" or $status != "" or ((.status as $s | finished | index($s)) == null))
53
- and ($target == "" or .target == $target)
54
- ))
55
- | sort_by(.createdAt) | reverse) as $matched
56
- | {
57
- success: true,
58
- projectPath: (if $projectPath == "" then null else $projectPath end),
59
- stats: ($stats.data // $stats),
60
- matched: ($matched | length),
61
- shown: ([$matched | length, $limit] | min),
62
- workItems: ($matched[:$limit] | map({
63
- id, title, status, target,
64
- createdAt,
65
- blockedReason: (.blockedReason // null)
66
- })),
67
- hint: "Compact view: open items only, newest first. Finished ones: {\"all\":true}. One agent: {\"target\":\"<session>\"}."
68
- }
69
- ' \
70
- || echo '{"success":false,"error":"could not read the task pool"}'
57
+ (.data // .workItems) as $raw
58
+ | if ($raw | type) != "array" then
59
+ {
60
+ success: false,
61
+ projectPath: (if $projectPath == "" then null else $projectPath end),
62
+ stats: ($stats.data // $stats),
63
+ examined: 0,
64
+ error: "GET /task-pool/items failed or did not return a list; workItems is UNKNOWN, not empty"
65
+ }
66
+ else
67
+ $raw as $items
68
+ | ($items
69
+ | map(select(
70
+ ($status == "" or (.status as $s | ($status | split(",") | index($s)) != null))
71
+ and ($all == "true" or $status != "" or ((.status as $s | finished | index($s)) == null))
72
+ and ($target == "" or .target == $target)
73
+ ))
74
+ | sort_by(.createdAt) | reverse) as $matched
75
+ | {
76
+ success: true,
77
+ projectPath: (if $projectPath == "" then null else $projectPath end),
78
+ stats: ($stats.data // $stats),
79
+ examined: ($items | length),
80
+ matched: ($matched | length),
81
+ shown: ([$matched | length, $limit] | min),
82
+ workItems: ($matched[:$limit] | map({
83
+ id, title, status, target,
84
+ createdAt,
85
+ blockedReason: (.blockedReason // null)
86
+ })),
87
+ hint: "Compact view: open items only, newest first. Finished ones: {\"all\":true}. One agent: {\"target\":\"<session>\"}."
88
+ }
89
+ end
90
+ ') || OUT='{"success":false,"examined":0,"error":"could not read the task pool"}'
91
+ printf '%s\n' "$OUT"
92
+ # Exit non-zero when the item list is unknown, so callers cannot mistake it for empty.
93
+ printf '%s' "$OUT" | jq -e '.success' >/dev/null
@@ -0,0 +1,67 @@
1
+ #!/bin/bash
2
+ # Tests for get-tasks — run with: bash execute.test.sh
3
+ #
4
+ # The pool is fetched whole (3.5 MB / 760 rows on a busy install) and reduced
5
+ # here, so the skill must (a) report how many rows it examined, (b) print only
6
+ # non-terminal items in compact form, and (c) fail loudly — never print
7
+ # workItems: [] — when the list is unknown.
8
+ set -u
9
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ PASS=0; FAIL=0
11
+ check() { local name="$1"; local got="$2"; local want="$3"; if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi; }
12
+
13
+ TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
14
+ mkdir -p "$TMP/skills/orchestrator/get-tasks" "$TMP/skills/orchestrator/_common"
15
+ cp "$HERE/execute.sh" "$TMP/skills/orchestrator/get-tasks/execute.sh"
16
+ # Real lib.sh plus an api_call double, so the real api_call_full is exercised.
17
+ REAL_LIB="$(cd "$HERE/../../_common" && pwd)/lib.sh"
18
+ cat > "$TMP/skills/orchestrator/_common/lib.sh" <<'STUB'
19
+ source "$REAL_LIB"
20
+ api_call() {
21
+ case "$2" in
22
+ /task-pool/stats) printf '{"success":true,"data":{"total":4,"byStatus":{"verified":2,"running":1,"queued":1}}}' ;;
23
+ /task-pool/items) printf '%s' "$MOCK_ITEMS" ;;
24
+ esac
25
+ }
26
+ STUB
27
+
28
+ run() {
29
+ CODE=0
30
+ OUT=$(env -u CREWLY_SESSION_NAME REAL_LIB="$REAL_LIB" MOCK_ITEMS="$1" bash "$TMP/skills/orchestrator/get-tasks/execute.sh" 2>/dev/null) || CODE=$?
31
+ }
32
+
33
+ ITEMS='{"success":true,"data":[
34
+ {"id":"w-1","type":"delegate","status":"verified","owner":"team_lead","target":"a","title":"old","briefMarkdown":"huge","createdAt":"t1"},
35
+ {"id":"w-2","type":"delegate","status":"running","owner":"team_lead","target":"b","title":"'"$(printf 'x%.0s' $(seq 1 200))"'","briefMarkdown":"huge","createdAt":"t2","startedAt":"t3"},
36
+ {"id":"w-3","type":"review","status":"queued","owner":"orchestrator","target":"c","title":"pending review","createdAt":"t4"},
37
+ {"id":"w-4","type":"delegate","status":"cancelled","owner":"team_lead","target":"d","title":"gone","createdAt":"t5"}]}'
38
+
39
+ run "$ITEMS"
40
+ check "exit 0" "$CODE" "0"
41
+ check "success" "$(printf '%s' "$OUT" | jq -r '.success')" "true"
42
+ check "examined = every row before filtering" "$(printf '%s' "$OUT" | jq -r '.examined')" "4"
43
+ check "only open items are listed, newest first" "$(printf '%s' "$OUT" | jq -r '.workItems | map(.id) | join(",")')" "w-3,w-2"
44
+ check "matched counts the open items" "$(printf '%s' "$OUT" | jq -r '.matched')" "2"
45
+ check "items are compacted (no briefMarkdown)" "$(printf '%s' "$OUT" | jq -r '.workItems[0] | has("briefMarkdown")')" "false"
46
+ check "stats passed through" "$(printf '%s' "$OUT" | jq -r '.stats.byStatus.running')" "1"
47
+ check "no error field on success" "$(printf '%s' "$OUT" | jq -r 'has("error")')" "false"
48
+
49
+ # A truncated envelope (parked file missing) must be an error, not an empty pool.
50
+ run '{"truncated":true,"bytes":3487577,"file":"'"$TMP"'/nope.json","head":"","hint":"x"}'
51
+ check "envelope -> exit 1" "$CODE" "1"
52
+ check "envelope -> success:false" "$(printf '%s' "$OUT" | jq -r '.success')" "false"
53
+ check "envelope -> examined 0, not a fake count" "$(printf '%s' "$OUT" | jq -r '.examined')" "0"
54
+ check "envelope -> error says UNKNOWN" "$(printf '%s' "$OUT" | jq -r '.error' | grep -c UNKNOWN)" "1"
55
+
56
+ # A body whose .data is not an array is likewise unknown.
57
+ run '{"success":true,"data":{"oops":1}}'
58
+ check "non-array -> exit 1" "$CODE" "1"
59
+ check "non-array -> success:false with error" "$(printf '%s' "$OUT" | jq -r '.success, (.error|type)' | paste -sd, -)" "false,string"
60
+
61
+ # An empty pool is a legitimate zero: success, examined 0, exit 0.
62
+ run '{"success":true,"data":[]}'
63
+ check "empty pool -> exit 0" "$CODE" "0"
64
+ check "empty pool -> success with examined 0" "$(printf '%s' "$OUT" | jq -r '"\(.success)/\(.examined)/\(.workItems|length)"')" "true/0/0"
65
+
66
+ echo "=== Results: $PASS passed, $FAIL failed ==="
67
+ [ "$FAIL" -eq 0 ]
@@ -11,8 +11,8 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
  source "$SCRIPT_DIR/../../_common/lib.sh"
12
12
 
13
13
  # Collect status from multiple endpoints (each call updates heartbeat via middleware)
14
- teams_response=$(api_call GET "/teams" 2>/dev/null) || teams_response='{"error":"unavailable"}'
15
- projects_response=$(api_call GET "/projects" 2>/dev/null) || projects_response='{"error":"unavailable"}'
14
+ teams_response=$(api_call_full GET "/teams" 2>/dev/null) || teams_response='{"error":"unavailable"}'
15
+ projects_response=$(api_call_full GET "/projects" 2>/dev/null) || projects_response='{"error":"unavailable"}'
16
16
  queue_response=$(api_call GET "/messaging/queue/status" 2>/dev/null) || queue_response='{"error":"unavailable"}'
17
17
 
18
18
  # Parse helpers:
@@ -13,7 +13,7 @@ for arg in "$@"; do
13
13
  esac
14
14
  done
15
15
 
16
- RAW=$(api_call GET "/missions") || exit 1
16
+ RAW=$(api_call_full GET "/missions") || exit 1
17
17
  if [ "$FULL" = "true" ]; then printf '%s\n' "$RAW"; exit 0; fi
18
18
 
19
19
  printf '%s' "$RAW" | jq --arg pending "$PENDING" '
@@ -6,28 +6,55 @@ PASS=0; FAIL=0
6
6
  check() { local name="$1"; local got="$2"; local want="$3"; if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi; }
7
7
 
8
8
  TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
9
- # Stand-in for api_call: a shell function defined in a wrapper lib.
10
9
  mkdir -p "$TMP/skills/orchestrator/list-missions" "$TMP/skills/orchestrator/_common"
11
10
  cp "$HERE/execute.sh" "$TMP/skills/orchestrator/list-missions/execute.sh"
12
- cat > "$TMP/skills/orchestrator/_common/lib.sh" <<'EOF'
13
- api_call() {
14
- cat <<'JSON'
15
- {"success":true,"data":[
11
+ # The wrapper lib is the REAL lib.sh plus an api_call double, so the real
12
+ # api_call_full is what the skill exercises (a passthrough stub would let an
13
+ # envelope crash jq on both the fixed and the unfixed skill, guarding nothing).
14
+ # The double returns $MOCK_RESPONSE when set, else the canned missions.
15
+ REAL_LIB="$(cd "$HERE/../../_common" && pwd)/lib.sh"
16
+ MISSIONS='{"success":true,"data":[
16
17
  {"id":"m-company","level":"company","objective":"Q4 stable delivery","status":"active","approval":{"state":"approved"},"keyResults":[]},
17
18
  {"id":"m-team","level":"team","objective":"Portal team flow","status":"active","approval":{"state":"pending_approval"},"parentMissionId":"m-company",
18
19
  "keyResults":[{"id":"k1","title":"KR1 review backlog","current":3,"target":2,"unit":"tickets","status":"on_track","measurementSource":"skill_output","measurements":[]}]}
19
- ]}
20
- JSON
20
+ ]}'
21
+ cat > "$TMP/skills/orchestrator/_common/lib.sh" <<'STUB'
22
+ source "$REAL_LIB"
23
+ api_call() { printf '%s' "${MOCK_RESPONSE:-$MISSIONS}"; }
24
+ STUB
25
+ export REAL_LIB MISSIONS
26
+
27
+ run() { # run [skill args...] -> CODE, OUT (stdout), ERR (stderr)
28
+ CODE=0
29
+ OUT=$(env -u CREWLY_SESSION_NAME bash "$TMP/skills/orchestrator/list-missions/execute.sh" "$@" 2>"$TMP/err") || CODE=$?
30
+ ERR=$(cat "$TMP/err")
21
31
  }
22
- EOF
23
- OUT=$(bash "$TMP/skills/orchestrator/list-missions/execute.sh")
32
+
33
+ run
24
34
  check "count" "$(printf '%s' "$OUT" | jq '.count')" "2"
25
35
  check "pending count" "$(printf '%s' "$OUT" | jq '.pendingApproval')" "1"
26
36
  check "approval defaulted for legacy" "$(printf '%s' "$OUT" | jq -r '.missions[0].approval')" "approved"
27
37
  check "KR compacted" "$(printf '%s' "$OUT" | jq -c '.missions[1].keyResults[0]')" '{"title":"KR1 review backlog","current":3,"target":2,"unit":"tickets","status":"on_track","measurementSource":"skill_output"}'
28
- OUT=$(bash "$TMP/skills/orchestrator/list-missions/execute.sh" --pending)
38
+ run --pending
29
39
  check "--pending filters" "$(printf '%s' "$OUT" | jq -r '.missions | map(.id) | join(",")')" "m-team"
30
- OUT=$(bash "$TMP/skills/orchestrator/list-missions/execute.sh" --full)
40
+ run --full
31
41
  check "--full is raw" "$(printf '%s' "$OUT" | jq -r '.success')" "true"
42
+
43
+ # --- Truncated envelope: the skill must not turn it into "no missions" -------
44
+ # What api_call hands back when GET /missions is over the output cap. With the
45
+ # parked file unreadable there is no way to get the rows: exit 1, print
46
+ # nothing a caller could mistake for a list, and say why (explicit error field).
47
+ ENVELOPE='{"truncated":true,"bytes":70000,"file":"'"$TMP"'/nonexistent.json","head":"{\"success\":true,\"data\":[{","hint":"pass --full or read the file"}'
48
+ MOCK_RESPONSE="$ENVELOPE" run
49
+ check "envelope, unreadable file -> exit 1 (not a jq crash, not 0)" "$CODE" "1"
50
+ check "envelope, unreadable file -> no rows on stdout" "$OUT" ""
51
+ check "envelope, unreadable file -> explicit truncated error on stderr" "$(printf '%s' "$ERR" | grep -c '"truncated":true')" "1"
52
+
53
+ # With the parked file readable, the real rows are recovered from it.
54
+ printf '%s' "$MISSIONS" > "$TMP/parked.json"
55
+ MOCK_RESPONSE='{"truncated":true,"bytes":70000,"file":"'"$TMP"'/parked.json","head":"","hint":"x"}' run
56
+ check "envelope, readable file -> exit 0" "$CODE" "0"
57
+ check "envelope, readable file -> rows recovered from the parked file" "$(printf '%s' "$OUT" | jq -r '.count')" "2"
58
+
32
59
  echo "=== Results: $PASS passed, $FAIL failed ==="
33
60
  [ "$FAIL" -eq 0 ]
@@ -73,6 +73,7 @@ Where `/tmp/decompose.json` contains:
73
73
  | `objective` | Yes | The high-level objective being decomposed |
74
74
  | `projectPath` | No | Project path for task file creation |
75
75
  | `milestone` | No | Milestone folder name (default: `delegated`) |
76
+ | `requestId` (or `--request-id <id>` after the JSON) | No | Ticket this work is for: the id (or `TKT-123`) from the `[TICKET:TKT-123 <id>]` line of the message you are acting on. Omit it and the task is still linked when your current turn has exactly one ticket; applied to every sub-task |
76
77
  | `tasks` | Yes | Array of sub-task objects |
77
78
  | `tasks[].title` | Yes | Sub-task title |
78
79
  | `tasks[].description` | Yes | Detailed task description |
@@ -9,13 +9,27 @@ set -euo pipefail
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  source "${SCRIPT_DIR}/../_common/lib.sh"
11
11
 
12
+ # `--request-id <id|TKT-123>` links every sub-task to the ticket they are for
13
+ # (the [TICKET:TKT-123 <id>] line of the message being worked on). Also
14
+ # accepted as `"requestId"` in the JSON.
15
+ REQUEST_ID=""
16
+ POSITIONAL=()
17
+ while [[ $# -gt 0 ]]; do
18
+ case "$1" in
19
+ --request-id|-R) REQUEST_ID="${2:-}"; shift 2 ;;
20
+ *) POSITIONAL+=("$1"); shift ;;
21
+ esac
22
+ done
23
+ set -- "${POSITIONAL[@]+"${POSITIONAL[@]}"}"
24
+
12
25
  INPUT=$(read_json_input "${1:-}")
13
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"objective\":\"Build auth module\",\"projectPath\":\"/path/to/project\",\"tasks\":[{\"title\":\"...\",\"description\":\"...\",\"requiredRole\":\"developer\",\"acceptanceCriteria\":\"...\",\"priority\":\"high\"}]}'"
26
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"objective\":\"Build auth module\",\"projectPath\":\"/path/to/project\",\"requestId\":\"<ticket id, optional>\",\"tasks\":[{\"title\":\"...\",\"description\":\"...\",\"requiredRole\":\"developer\",\"acceptanceCriteria\":\"...\",\"priority\":\"high\"}]}' [--request-id <id>]"
14
27
 
15
28
  OBJECTIVE=$(printf '%s' "$INPUT" | jq -r '.objective // empty')
16
29
  PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
17
30
  TASKS=$(printf '%s' "$INPUT" | jq -c '.tasks // empty')
18
31
  MILESTONE=$(printf '%s' "$INPUT" | jq -r '.milestone // "delegated"')
32
+ [ -z "$REQUEST_ID" ] && REQUEST_ID=$(printf '%s' "$INPUT" | jq -r '.requestId // empty')
19
33
  require_param "objective" "$OBJECTIVE"
20
34
  require_param "tasks" "$TASKS"
21
35
 
@@ -68,13 +82,14 @@ Required role: ${TASK_ROLE}"
68
82
  --arg milestone "$MILESTONE" \
69
83
  --arg role "$TASK_ROLE" \
70
84
  --arg priority "$TASK_PRIORITY" \
85
+ --arg requestId "$REQUEST_ID" \
71
86
  '{
72
87
  title: $title,
73
88
  type: "delegate",
74
89
  owner: "system",
75
90
  briefMarkdown: $brief,
76
91
  metadata: { projectPath: $projectPath, milestone: $milestone, requiredRole: $role, priority: $priority }
77
- }')
92
+ } + (if $requestId != "" then {requestId: $requestId} else {} end)')
78
93
 
79
94
  # No envelope: addItem reads req.body directly as the CreateWorkItemInput.
80
95
  CREATE_BODY="$WORK_ITEM"
@@ -47,6 +47,7 @@ Assigns a task to a worker within the Team Leader's subordinate scope. Validates
47
47
  | `--team` / `-g` | `teamId` | No | Team ID for hierarchy validation |
48
48
  | `--tl-member` | `tlMemberId` | No | TL's member ID for hierarchy validation |
49
49
  | `--from` | `fromSession` | No | Delegating TL's session name (for monitoring) |
50
+ | `--request-id` / `-R` | `requestId` | No | Ticket this work is for: the id (or `TKT-123`) from the `[TICKET:TKT-123 <id>]` line of the message you are acting on. Omit it and the task is still linked when your current turn has exactly one ticket |
50
51
 
51
52
  ## Request Contract check
52
53
 
@@ -16,6 +16,7 @@ PROJECT_PATH=""
16
16
  TEAM_ID=""
17
17
  TL_MEMBER_ID=""
18
18
  FROM_SESSION=""
19
+ REQUEST_ID=""
19
20
 
20
21
  # Detect legacy JSON argument
21
22
  if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
@@ -34,9 +35,10 @@ while [[ $# -gt 0 ]]; do
34
35
  --team|-g) TEAM_ID="$2"; shift 2 ;;
35
36
  --tl-member) TL_MEMBER_ID="$2"; shift 2 ;;
36
37
  --from) FROM_SESSION="$2"; shift 2 ;;
38
+ --request-id|-R) REQUEST_ID="$2"; shift 2 ;;
37
39
  --json|-j) INPUT_JSON="$2"; shift 2 ;;
38
40
  --help|-h)
39
- echo "Usage: execute.sh --to worker-session --task 'implement feature' --priority high --project /path [--team teamId] [--tl-member memberId]"
41
+ echo "Usage: execute.sh --to worker-session --task 'implement feature' --priority high --project /path [--team teamId] [--tl-member memberId] [--request-id <ticket id from the [TICKET:TKT-123 <id>] line>]"
40
42
  exit 0
41
43
  ;;
42
44
  --) shift; break ;;
@@ -72,6 +74,7 @@ if [ -n "$INPUT_JSON" ]; then
72
74
  [ -z "$TEAM_ID" ] && TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
73
75
  [ -z "$TL_MEMBER_ID" ] && TL_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.tlMemberId // empty')
74
76
  [ -z "$FROM_SESSION" ] && FROM_SESSION=$(printf '%s' "$INPUT" | jq -r '.fromSession // empty')
77
+ [ -z "$REQUEST_ID" ] && REQUEST_ID=$(printf '%s' "$INPUT" | jq -r '.requestId // empty')
75
78
  fi
76
79
 
77
80
  require_param "to (--to)" "$TO"
@@ -208,7 +211,8 @@ POOL_BODY=$(jq -n \
208
211
  --arg briefMarkdown "$TASK" \
209
212
  --arg priority "$WI_PRIORITY" \
210
213
  --arg projectPath "${PROJECT_PATH:-}" \
211
- '{type: $type, owner: $owner, target: $target, title: $title, description: $description, briefMarkdown: $briefMarkdown, metadata: ({priority: $priority} + (if $projectPath != "" then {projectPath: $projectPath} else {} end))}')
214
+ --arg requestId "${REQUEST_ID:-}" \
215
+ '{type: $type, owner: $owner, target: $target, title: $title, description: $description, briefMarkdown: $briefMarkdown, metadata: ({priority: $priority} + (if $projectPath != "" then {projectPath: $projectPath} else {} end))} + (if $requestId != "" then {requestId: $requestId} else {} end)')
212
216
 
213
217
  POOL_RESULT=$(api_call POST "/task-pool/add" "$POOL_BODY" 2>/dev/null || echo '{"success":false}')
214
218
  POOL_OK=$(echo "$POOL_RESULT" | jq -r '.success // "false"' 2>/dev/null)