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
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: To Do Tasks
3
+ description: List the tasks in one of the owner's Microsoft To Do lists — open tasks by default, --all to include completed ones (via the Microsoft grant held by Crewly Cloud). Read-only.
4
+ version: 1.0.0
5
+ category: productivity
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - orchestrator
9
+ - team-leader
10
+ - developer
11
+ - operations
12
+ - ops
13
+ - sales
14
+ - support
15
+ - generalist
16
+ triggers:
17
+ - what is on my to do list
18
+ - list microsoft to do tasks
19
+ - open tasks in to do
20
+ - outlook tasks
21
+ tags:
22
+ - microsoft
23
+ - todo
24
+ - tasks
25
+ execution:
26
+ type: script
27
+ script:
28
+ file: execute.sh
29
+ interpreter: bash
30
+ timeoutMs: 60000
31
+ ---
32
+
33
+ # To Do Tasks
34
+
35
+ ```bash
36
+ bash execute.sh # open tasks of the default list ("Tasks")
37
+ bash execute.sh --list Groceries # name (case-insensitive) or id
38
+ bash execute.sh --list Work --all # include completed tasks
39
+ bash execute.sh --list Work --limit 20 # default 50, max 100
40
+ ```
41
+
42
+ ## Output
43
+
44
+ ```json
45
+ {"list":{"id":"AAMk…","name":"Work"},"count":2,"tasks":[{"id":"AAMk…","title":"Send deck to Ann","status":"notStarted","importance":"high","due":"2026-10-01","note":"v3 is in Drive"},{"id":"AAMk…","title":"Book venue","status":"completed","completedAt":"2026-09-20"}]}
46
+ ```
47
+
48
+ `importance` appears only when not normal; `note` is plain text, cut at
49
+ 200 characters. `hasMore: true` means the list has more tasks than the
50
+ limit. Use the task `id` with todo-update.
51
+
52
+ ## Failures
53
+
54
+ `{"success":false,"reason":"not_connected","hint":"<connect URL>"}` (exit 1)
55
+ when the owner has not connected Microsoft To Do (Connections → Microsoft To Do).
56
+ Other reasons: `not_found` (unknown list / task — the message lists the
57
+ available lists), `forbidden` (the account has no Exchange Online mailbox, or
58
+ the organisation blocks the app), `rate_limited` (with `retryAfter` seconds),
59
+ `validation`, `connector_forbidden` (the owner has not allowed your role).
@@ -0,0 +1,78 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # todo-tasks — List the tasks of one Microsoft To Do list (open ones unless --all)
4
+ #
5
+ # Backed by GET /api/microsoft-todo/tasks.
6
+ #
7
+ # Usage:
8
+ # bash execute.sh # open tasks of the default list ("Tasks")
9
+ # bash execute.sh --list Groceries # list name (case-insensitive) or id
10
+ # bash execute.sh --list Work --all # include completed tasks
11
+ # bash execute.sh '{"list":"Work","limit":20}'
12
+ # =============================================================================
13
+ set -euo pipefail
14
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+ source "${SCRIPT_DIR}/../../_common/lib.sh"
16
+
17
+ print_usage() {
18
+ cat <<'EOF_USAGE'
19
+ Usage:
20
+ bash execute.sh # open tasks of the default list ("Tasks")
21
+ bash execute.sh --list Groceries # list name (case-insensitive) or id
22
+ bash execute.sh --list Work --all # include completed tasks
23
+ bash execute.sh '{"list":"Work","limit":20}'
24
+
25
+ Options:
26
+ --list, -l List name (case-insensitive) or id; default: the owner's default list
27
+ --all Include completed tasks
28
+ --limit, -n Result cap (default 50, max 100)
29
+ --help | -h Show this help
30
+ EOF_USAGE
31
+ }
32
+
33
+ fail_from() {
34
+ printf '%s' "$1" | jq -c '{success: false, reason: (.details.error // .details // .error // "unknown"), hint: (.details.hint // ""), message: (.details.message // "")} + (if (.details | type) == "object" and .details.retryAfter then {retryAfter: .details.retryAfter} else {} end)' 2>/dev/null \
35
+ || jq -n --arg r "$1" '{success: false, reason: $r}'
36
+ exit 1
37
+ }
38
+
39
+ uri() { jq -rn --arg v "$1" '$v|@uri'; }
40
+
41
+ # api_call may print a one-line warning to stderr (no CREWLY_SESSION_NAME);
42
+ # the backend answer is always the last line. On failure print the mapped
43
+ # failure JSON (fail_from) and return 1.
44
+ call() {
45
+ local out
46
+ out=$(api_call "$@" 2>&1) || { fail_from "$(printf '%s\n' "$out" | tail -n 1)"; }
47
+ printf '%s\n' "$out" | tail -n 1
48
+ }
49
+
50
+ INPUT_JSON=""
51
+ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
52
+ INPUT_JSON="$1"
53
+ shift || true
54
+ fi
55
+ LIST=""; ALL=""; LIMIT=""
56
+ while [[ $# -gt 0 ]]; do
57
+ case "$1" in
58
+ --list|-l) [ $# -ge 2 ] || error_exit "--list requires a value"; LIST="$2"; shift 2 ;;
59
+ --all) ALL="1"; shift ;;
60
+ --limit|-n) [ $# -ge 2 ] || error_exit "--limit requires a value"; LIMIT="$2"; shift 2 ;;
61
+ --help|-h) print_usage; exit 0 ;;
62
+ *) error_exit "Unknown option: $1" ;;
63
+ esac
64
+ done
65
+ if [ -n "$INPUT_JSON" ]; then
66
+ INPUT=$(read_json_input "$INPUT_JSON")
67
+ [ -z "$LIST" ] && LIST=$(printf '%s' "$INPUT" | jq -r '.list // empty')
68
+ [ -z "$ALL" ] && ALL=$(printf '%s' "$INPUT" | jq -r 'if .all == true then "1" else empty end')
69
+ [ -z "$LIMIT" ] && LIMIT=$(printf '%s' "$INPUT" | jq -r '.limit // empty')
70
+ fi
71
+ QS=""
72
+ [ -n "$LIST" ] && QS="${QS}&list=$(uri "$LIST")"
73
+ [ -n "$ALL" ] && QS="${QS}&all=1"
74
+ [ -n "$LIMIT" ] && QS="${QS}&limit=$(uri "$LIMIT")"
75
+ QS="${QS#&}"
76
+ RESPONSE=$(call GET "/microsoft-todo/tasks${QS:+?$QS}") || { printf '%s\n' "$RESPONSE"; exit 1; }
77
+ if printf '%s' "$RESPONSE" | jq -e '.truncated == true' >/dev/null 2>&1; then printf '%s\n' "$RESPONSE"; exit 0; fi
78
+ printf '%s' "$RESPONSE" | jq -c '{list: .data.list, count: .data.count, tasks: .data.tasks} + (if .data.hasMore then {hasMore: true} else {} end)'
@@ -0,0 +1,74 @@
1
+ #!/bin/bash
2
+ # Tests for todo-tasks — run with: bash execute.test.sh
3
+ # Python HTTP stub as the backend; asserts the request the skill sends and
4
+ # the JSON it prints. Exit 0 on pass.
5
+ set -u
6
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ EXEC="$HERE/execute.sh"
8
+ PASS=0; FAIL=0
9
+ check() {
10
+ local name="$1"; local got="$2"; local want="$3"
11
+ if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi
12
+ }
13
+
14
+ PORT=18831
15
+ STUB_LOG="$(mktemp)"; export STUB_LOG; export STUB_PORT="$PORT"
16
+ python3 -u <<'PY' >/dev/null 2>&1 &
17
+ from http.server import BaseHTTPRequestHandler, HTTPServer
18
+ import json, os
19
+ LOG = os.environ['STUB_LOG']; PORT = int(os.environ['STUB_PORT'])
20
+ LIST = {'id': 'L1', 'name': 'Groceries'}
21
+ class H(BaseHTTPRequestHandler):
22
+ def _reply(self, method, data=None):
23
+ open(LOG, 'w').write(json.dumps({'method': method, 'path': self.path, 'body': data}))
24
+ if 'no-grant' in self.path or 'no-grant' in json.dumps(data or {}):
25
+ self.send_response(409); self.send_header('Content-Type', 'application/json'); self.end_headers()
26
+ self.wfile.write(json.dumps({'success': False, 'error': 'not_connected', 'message': 'no grant', 'hint': 'https://cloud/start?token=j'}).encode()); return
27
+ path = self.path.split('?')[0]
28
+ if path == '/api/microsoft-todo/lists' and method == 'GET':
29
+ out = {'count': 2, 'lists': [{'id': 'L0', 'name': 'Tasks', 'isDefault': True}, LIST]}
30
+ elif path == '/api/microsoft-todo/lists':
31
+ out = {'id': 'L9', 'name': (data or {}).get('name')}
32
+ elif path == '/api/microsoft-todo/tasks' and method == 'GET':
33
+ out = {'list': LIST, 'count': 1, 'tasks': [{'id': 'T1', 'title': 'Milk', 'status': 'notStarted', 'due': '2026-10-01'}]}
34
+ elif path == '/api/microsoft-todo/tasks':
35
+ out = {'list': LIST, 'task': {'id': 'T2', 'title': (data or {}).get('title'), 'status': 'notStarted'}}
36
+ elif method == 'PATCH':
37
+ out = {'list': LIST, 'task': {'id': path.rsplit('/', 1)[1], 'title': 'Milk', 'status': 'completed'}}
38
+ elif method == 'DELETE':
39
+ out = {'list': LIST, 'taskId': path.rsplit('/', 1)[1], 'deleted': True}
40
+ else:
41
+ out = {}
42
+ self.send_response(200); self.send_header('Content-Type', 'application/json'); self.end_headers()
43
+ self.wfile.write(json.dumps({'success': True, 'data': out}).encode())
44
+ def _body(self):
45
+ n = int(self.headers.get('content-length', '0')); body = self.rfile.read(n).decode() if n else ''
46
+ return json.loads(body or '{}')
47
+ def do_GET(self): self._reply('GET')
48
+ def do_DELETE(self): self._reply('DELETE')
49
+ def do_POST(self): self._reply('POST', self._body())
50
+ def do_PATCH(self): self._reply('PATCH', self._body())
51
+ def log_message(self, *a, **k): pass
52
+ HTTPServer(('127.0.0.1', PORT), H).serve_forever()
53
+ PY
54
+ STUB_PID=$!
55
+ disown "$STUB_PID" 2>/dev/null || true
56
+ trap 'kill "$STUB_PID" >/dev/null 2>&1; rm -f "$STUB_LOG"' EXIT
57
+ for i in $(seq 1 30); do curl -s -o /dev/null -m 0.2 "http://127.0.0.1:${PORT}/" 2>/dev/null && break; sleep 0.1; done
58
+
59
+ run() { CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>/dev/null; }
60
+ run_err() { CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>&1 >/dev/null; }
61
+ last() { jq -c "$1" "$STUB_LOG"; }
62
+
63
+ OUT=$(run --list "Big Shop" --all --limit 5)
64
+ check "list: output" "$OUT" '{"list":{"id":"L1","name":"Groceries"},"count":1,"tasks":[{"id":"T1","title":"Milk","status":"notStarted","due":"2026-10-01"}]}'
65
+ check "list: path" "$(last '.path')" '"/api/microsoft-todo/tasks?list=Big%20Shop&all=1&limit=5"'
66
+ run >/dev/null
67
+ check "default list: bare path" "$(last '.path')" '"/api/microsoft-todo/tasks"'
68
+ run '{"list":"Work","all":true}' >/dev/null
69
+ check "json input" "$(last '.path')" '"/api/microsoft-todo/tasks?list=Work&all=1"'
70
+ OUT=$(run --list no-grant || true)
71
+ check "not connected" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
72
+
73
+ echo "todo-tasks: $PASS passed, $FAIL failed"
74
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: To Do Update
3
+ description: Complete, reopen, retitle, re-date or delete a task in one of the owner's Microsoft To Do lists (via the Microsoft grant held by Crewly Cloud).
4
+ version: 1.0.0
5
+ category: productivity
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - orchestrator
9
+ - team-leader
10
+ - developer
11
+ - operations
12
+ - ops
13
+ - sales
14
+ - support
15
+ - generalist
16
+ triggers:
17
+ - mark to do task done
18
+ - complete microsoft to do task
19
+ - change the due date in to do
20
+ - delete a to do task
21
+ tags:
22
+ - microsoft
23
+ - todo
24
+ - tasks
25
+ execution:
26
+ type: script
27
+ script:
28
+ file: execute.sh
29
+ interpreter: bash
30
+ timeoutMs: 60000
31
+ ---
32
+
33
+ # To Do Update
34
+
35
+ ```bash
36
+ bash execute.sh --list Groceries --task <id> --complete
37
+ bash execute.sh --list Work --task <id> --title "Send v4 deck" --due 2026-10-03
38
+ bash execute.sh --list Work --task <id> --due none # clear the due date
39
+ bash execute.sh --list Work --task <id> --reopen
40
+ bash execute.sh --list Work --task <id> --delete # cannot be undone
41
+ ```
42
+
43
+ `--task` is the id from todo-tasks. `--list` is the list the task is in
44
+ (name or id; the default list when omitted). Changes can be combined in one
45
+ call; `--delete` ignores the others.
46
+
47
+ ## Output
48
+
49
+ ```json
50
+ {"success":true,"list":"Groceries","task":{"id":"AAMk…","title":"Milk","status":"completed","completedAt":"2026-09-23"}}
51
+ {"success":true,"deleted":true,"list":"Work","taskId":"AAMk…"}
52
+ ```
53
+
54
+ Only delete when the owner asked for it; completing keeps the history.
55
+
56
+ ## Failures
57
+
58
+ `{"success":false,"reason":"not_connected","hint":"<connect URL>"}` (exit 1)
59
+ when the owner has not connected Microsoft To Do (Connections → Microsoft To Do).
60
+ Other reasons: `not_found` (unknown list / task — the message lists the
61
+ available lists), `forbidden` (the account has no Exchange Online mailbox, or
62
+ the organisation blocks the app), `rate_limited` (with `retryAfter` seconds),
63
+ `validation`, `connector_forbidden` (the owner has not allowed your role).
@@ -0,0 +1,115 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # todo-update — Complete, reopen, edit or delete a Microsoft To Do task
4
+ #
5
+ # Backed by PATCH / DELETE /api/microsoft-todo/tasks/:taskId.
6
+ #
7
+ # Usage:
8
+ # bash execute.sh --list Groceries --task <taskId> --complete
9
+ # bash execute.sh --list Work --task <taskId> --title "Send v4 deck" --due 2026-10-03
10
+ # bash execute.sh --list Work --task <taskId> --due none # clear the due date
11
+ # bash execute.sh --list Work --task <taskId> --reopen
12
+ # bash execute.sh --list Work --task <taskId> --delete
13
+ # bash execute.sh '{"list":"Work","task":"AAMk…","complete":true}'
14
+ # =============================================================================
15
+ set -euo pipefail
16
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
+ source "${SCRIPT_DIR}/../../_common/lib.sh"
18
+
19
+ print_usage() {
20
+ cat <<'EOF_USAGE'
21
+ Usage:
22
+ bash execute.sh --list Groceries --task <taskId> --complete
23
+ bash execute.sh --list Work --task <taskId> --title "Send v4 deck" --due 2026-10-03
24
+ bash execute.sh --list Work --task <taskId> --due none # clear the due date
25
+ bash execute.sh --list Work --task <taskId> --reopen
26
+ bash execute.sh --list Work --task <taskId> --delete
27
+ bash execute.sh '{"list":"Work","task":"AAMk…","complete":true}'
28
+
29
+ Options:
30
+ --task Task id from todo-tasks (required)
31
+ --list, -l List name (case-insensitive) or id the task is in; default: the owner's default list
32
+ --complete Mark the task completed
33
+ --reopen Mark a completed task not started again
34
+ --title New title
35
+ --due New due date YYYY-MM-DD, or "none" to clear it
36
+ --note Replace the note
37
+ --importance low | normal | high
38
+ --delete Delete the task (cannot be undone)
39
+ --help | -h Show this help
40
+ EOF_USAGE
41
+ }
42
+
43
+ fail_from() {
44
+ printf '%s' "$1" | jq -c '{success: false, reason: (.details.error // .details // .error // "unknown"), hint: (.details.hint // ""), message: (.details.message // "")} + (if (.details | type) == "object" and .details.retryAfter then {retryAfter: .details.retryAfter} else {} end)' 2>/dev/null \
45
+ || jq -n --arg r "$1" '{success: false, reason: $r}'
46
+ exit 1
47
+ }
48
+
49
+ uri() { jq -rn --arg v "$1" '$v|@uri'; }
50
+
51
+ # api_call may print a one-line warning to stderr (no CREWLY_SESSION_NAME);
52
+ # the backend answer is always the last line. On failure print the mapped
53
+ # failure JSON (fail_from) and return 1.
54
+ call() {
55
+ local out
56
+ out=$(api_call "$@" 2>&1) || { fail_from "$(printf '%s\n' "$out" | tail -n 1)"; }
57
+ printf '%s\n' "$out" | tail -n 1
58
+ }
59
+
60
+ INPUT_JSON=""
61
+ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
62
+ INPUT_JSON="$1"
63
+ shift || true
64
+ fi
65
+ TASK=""; LIST=""; COMPLETE=""; TITLE=""; DUE=""; NOTE=""; IMPORTANCE=""; DELETE=""
66
+ while [[ $# -gt 0 ]]; do
67
+ case "$1" in
68
+ --task) [ $# -ge 2 ] || error_exit "--task requires a value"; TASK="$2"; shift 2 ;;
69
+ --list|-l) [ $# -ge 2 ] || error_exit "--list requires a value"; LIST="$2"; shift 2 ;;
70
+ --complete) COMPLETE="true"; shift ;;
71
+ --reopen) COMPLETE="false"; shift ;;
72
+ --title) [ $# -ge 2 ] || error_exit "--title requires a value"; TITLE="$2"; shift 2 ;;
73
+ --due) [ $# -ge 2 ] || error_exit "--due requires a value"; DUE="$2"; shift 2 ;;
74
+ --note) [ $# -ge 2 ] || error_exit "--note requires a value"; NOTE="$2"; shift 2 ;;
75
+ --importance) [ $# -ge 2 ] || error_exit "--importance requires a value"; IMPORTANCE="$2"; shift 2 ;;
76
+ --delete) DELETE="1"; shift ;;
77
+ --help|-h) print_usage; exit 0 ;;
78
+ *) error_exit "Unknown option: $1" ;;
79
+ esac
80
+ done
81
+ if [ -n "$INPUT_JSON" ]; then
82
+ INPUT=$(read_json_input "$INPUT_JSON")
83
+ [ -z "$TASK" ] && TASK=$(printf '%s' "$INPUT" | jq -r '.task // .taskId // .id // empty')
84
+ [ -z "$LIST" ] && LIST=$(printf '%s' "$INPUT" | jq -r '.list // empty')
85
+ [ -z "$COMPLETE" ] && COMPLETE=$(printf '%s' "$INPUT" | jq -r 'if .complete == true then "true" elif .reopen == true then "false" else empty end')
86
+ [ -z "$TITLE" ] && TITLE=$(printf '%s' "$INPUT" | jq -r '.title // empty')
87
+ [ -z "$DUE" ] && DUE=$(printf '%s' "$INPUT" | jq -r '.due // empty')
88
+ [ -z "$NOTE" ] && NOTE=$(printf '%s' "$INPUT" | jq -r '.note // empty')
89
+ [ -z "$IMPORTANCE" ] && IMPORTANCE=$(printf '%s' "$INPUT" | jq -r '.importance // empty')
90
+ [ -z "$DELETE" ] && DELETE=$(printf '%s' "$INPUT" | jq -r 'if .delete == true then "1" else empty end')
91
+ fi
92
+ [ -n "$TASK" ] || error_exit "--task is required (ids come from todo-tasks)"
93
+ if [ -n "$DELETE" ]; then
94
+ QS=""
95
+ [ -n "$LIST" ] && QS="?list=$(uri "$LIST")"
96
+ RESPONSE=$(call DELETE "/microsoft-todo/tasks/$(uri "$TASK")${QS}") || { printf '%s\n' "$RESPONSE"; exit 1; }
97
+ printf '%s' "$RESPONSE" | jq -c '{success: true, deleted: true, list: .data.list.name, taskId: .data.taskId}'
98
+ exit 0
99
+ fi
100
+ if [ -n "$DUE" ] && [ "$DUE" != "none" ] && ! [[ "$DUE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
101
+ error_exit "--due must look like 2026-10-01, or none to clear it"
102
+ fi
103
+ if [ -z "$COMPLETE" ] && [ -z "$TITLE" ] && [ -z "$DUE" ] && [ -z "$NOTE" ] && [ -z "$IMPORTANCE" ]; then
104
+ error_exit "nothing to change: give --complete, --reopen, --title, --due, --note, --importance or --delete"
105
+ fi
106
+ BODY=$(jq -cn --arg list "$LIST" --arg complete "$COMPLETE" --arg title "$TITLE" --arg due "$DUE" --arg note "$NOTE" --arg imp "$IMPORTANCE" \
107
+ '{}
108
+ + (if $list != "" then {list: $list} else {} end)
109
+ + (if $complete != "" then {complete: ($complete == "true")} else {} end)
110
+ + (if $title != "" then {title: $title} else {} end)
111
+ + (if $due == "none" then {due: null} elif $due != "" then {due: $due} else {} end)
112
+ + (if $note != "" then {note: $note} else {} end)
113
+ + (if $imp != "" then {importance: $imp} else {} end)')
114
+ RESPONSE=$(call PATCH "/microsoft-todo/tasks/$(uri "$TASK")" "$BODY") || { printf '%s\n' "$RESPONSE"; exit 1; }
115
+ printf '%s' "$RESPONSE" | jq -c '{success: true, list: .data.list.name, task: .data.task}'
@@ -0,0 +1,82 @@
1
+ #!/bin/bash
2
+ # Tests for todo-update — run with: bash execute.test.sh
3
+ # Python HTTP stub as the backend; asserts the request the skill sends and
4
+ # the JSON it prints. Exit 0 on pass.
5
+ set -u
6
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ EXEC="$HERE/execute.sh"
8
+ PASS=0; FAIL=0
9
+ check() {
10
+ local name="$1"; local got="$2"; local want="$3"
11
+ if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi
12
+ }
13
+
14
+ PORT=18833
15
+ STUB_LOG="$(mktemp)"; export STUB_LOG; export STUB_PORT="$PORT"
16
+ python3 -u <<'PY' >/dev/null 2>&1 &
17
+ from http.server import BaseHTTPRequestHandler, HTTPServer
18
+ import json, os
19
+ LOG = os.environ['STUB_LOG']; PORT = int(os.environ['STUB_PORT'])
20
+ LIST = {'id': 'L1', 'name': 'Groceries'}
21
+ class H(BaseHTTPRequestHandler):
22
+ def _reply(self, method, data=None):
23
+ open(LOG, 'w').write(json.dumps({'method': method, 'path': self.path, 'body': data}))
24
+ if 'no-grant' in self.path or 'no-grant' in json.dumps(data or {}):
25
+ self.send_response(409); self.send_header('Content-Type', 'application/json'); self.end_headers()
26
+ self.wfile.write(json.dumps({'success': False, 'error': 'not_connected', 'message': 'no grant', 'hint': 'https://cloud/start?token=j'}).encode()); return
27
+ path = self.path.split('?')[0]
28
+ if path == '/api/microsoft-todo/lists' and method == 'GET':
29
+ out = {'count': 2, 'lists': [{'id': 'L0', 'name': 'Tasks', 'isDefault': True}, LIST]}
30
+ elif path == '/api/microsoft-todo/lists':
31
+ out = {'id': 'L9', 'name': (data or {}).get('name')}
32
+ elif path == '/api/microsoft-todo/tasks' and method == 'GET':
33
+ out = {'list': LIST, 'count': 1, 'tasks': [{'id': 'T1', 'title': 'Milk', 'status': 'notStarted', 'due': '2026-10-01'}]}
34
+ elif path == '/api/microsoft-todo/tasks':
35
+ out = {'list': LIST, 'task': {'id': 'T2', 'title': (data or {}).get('title'), 'status': 'notStarted'}}
36
+ elif method == 'PATCH':
37
+ out = {'list': LIST, 'task': {'id': path.rsplit('/', 1)[1], 'title': 'Milk', 'status': 'completed'}}
38
+ elif method == 'DELETE':
39
+ out = {'list': LIST, 'taskId': path.rsplit('/', 1)[1], 'deleted': True}
40
+ else:
41
+ out = {}
42
+ self.send_response(200); self.send_header('Content-Type', 'application/json'); self.end_headers()
43
+ self.wfile.write(json.dumps({'success': True, 'data': out}).encode())
44
+ def _body(self):
45
+ n = int(self.headers.get('content-length', '0')); body = self.rfile.read(n).decode() if n else ''
46
+ return json.loads(body or '{}')
47
+ def do_GET(self): self._reply('GET')
48
+ def do_DELETE(self): self._reply('DELETE')
49
+ def do_POST(self): self._reply('POST', self._body())
50
+ def do_PATCH(self): self._reply('PATCH', self._body())
51
+ def log_message(self, *a, **k): pass
52
+ HTTPServer(('127.0.0.1', PORT), H).serve_forever()
53
+ PY
54
+ STUB_PID=$!
55
+ disown "$STUB_PID" 2>/dev/null || true
56
+ trap 'kill "$STUB_PID" >/dev/null 2>&1; rm -f "$STUB_LOG"' EXIT
57
+ for i in $(seq 1 30); do curl -s -o /dev/null -m 0.2 "http://127.0.0.1:${PORT}/" 2>/dev/null && break; sleep 0.1; done
58
+
59
+ run() { CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>/dev/null; }
60
+ run_err() { CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>&1 >/dev/null; }
61
+ last() { jq -c "$1" "$STUB_LOG"; }
62
+
63
+ OUT=$(run --list Groceries --task "AA/k=" --complete)
64
+ check "complete: output" "$OUT" '{"success":true,"list":"Groceries","task":{"id":"AA%2Fk%3D","title":"Milk","status":"completed"}}'
65
+ check "complete: request" "$(last '[.method,.path,.body]')" '["PATCH","/api/microsoft-todo/tasks/AA%2Fk%3D",{"list":"Groceries","complete":true}]'
66
+ run --task T1 --title "Oat milk" --due 2026-10-03 --importance low >/dev/null
67
+ check "edit: body" "$(last '.body')" '{"title":"Oat milk","due":"2026-10-03","importance":"low"}'
68
+ run --task T1 --due none --reopen >/dev/null
69
+ check "clear due + reopen" "$(last '.body')" '{"complete":false,"due":null}'
70
+ OUT=$(run --list Work --task T1 --delete)
71
+ check "delete: output" "$OUT" '{"success":true,"deleted":true,"list":"Groceries","taskId":"T1"}'
72
+ check "delete: request" "$(last '[.method,.path]')" '["DELETE","/api/microsoft-todo/tasks/T1?list=Work"]'
73
+ run '{"list":"Work","task":"T7","complete":true}' >/dev/null
74
+ check "json input" "$(last '[.path,.body]')" '["/api/microsoft-todo/tasks/T7",{"list":"Work","complete":true}]'
75
+ check "task required" "$(run_err --complete | jq -r .error)" "--task is required (ids come from todo-tasks)"
76
+ check "nothing to change" "$(run_err --task T1 | jq -r .error | cut -c1-17)" "nothing to change"
77
+ check "bad due" "$(run_err --task T1 --due 1/10 | jq -r .error)" "--due must look like 2026-10-01, or none to clear it"
78
+ OUT=$(run --list no-grant --task T1 --complete || true)
79
+ check "not connected" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
80
+
81
+ echo "todo-update: $PASS passed, $FAIL failed"
82
+ [ "$FAIL" -eq 0 ]
@@ -69,7 +69,7 @@ fi
69
69
  # ---------------------------------------------------------------------------
70
70
  # Call backend API
71
71
  # ---------------------------------------------------------------------------
72
- CREWLY_PORT="${CREWLY_PORT:-8787}"
72
+ CREWLY_PORT="${CREWLY_PORT:-${WEB_PORT:-8787}}"
73
73
  API_URL="${CREWLY_API_URL:-http://localhost:${CREWLY_PORT}}"
74
74
 
75
75
  RESPONSE=$(curl -s -w "\n%{http_code}" \
@@ -27,7 +27,7 @@ OUTPUT_DIR=$(printf '%s' "$INPUT" | jq -r '.outputDir // ""')
27
27
  PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // ""')
28
28
 
29
29
  # Crewly API base URL
30
- API_BASE="${CREWLY_API_URL:-http://localhost:3000}"
30
+ API_BASE="${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}"
31
31
 
32
32
  # Local storage directory
33
33
  LOCAL_DIR="${PROJECT_PATH:-.}/.crewly/onboarding"
@@ -28,7 +28,7 @@ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // ""')
28
28
  PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // ""')
29
29
 
30
30
  # Crewly API base URL
31
- API_BASE="${CREWLY_API_URL:-http://localhost:3000}"
31
+ API_BASE="${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}"
32
32
 
33
33
  case "$ACTION" in
34
34
  submit)
@@ -131,7 +131,7 @@ bash .../remote-browser/execute.sh '{"action":"navigate","url":"https://labs.goo
131
131
 
132
132
  ```bash
133
133
  # Direct API call (bypasses execute.sh):
134
- curl -s -X POST http://localhost:8787/api/browser/set-file-input \
134
+ curl -s -X POST "$CREWLY_API_URL/api/browser/set-file-input" \
135
135
  -H "Content-Type: application/json" \
136
136
  -d '{"selector":"input[type=file]","filePaths":["/tmp/image.png"]}'
137
137
 
@@ -42,6 +42,11 @@
42
42
  # call (drops the X-Agent-Session header).
43
43
  # --active Only meaningful with `bind-tab`: foreground
44
44
  # the new tab on creation.
45
+ # --goal <text> What you're trying to accomplish. Sent as the
46
+ # X-Agent-Goal header so the user's Chrome takeover
47
+ # banner shows your objective (e.g. "Verify DMARC
48
+ # setup"), not just the current tool. Overrides any
49
+ # inherited CREWLY_AGENT_GOAL for this call.
45
50
  #
46
51
  # Supported actions and their parameters:
47
52
  # status — connection status (no params)
@@ -86,6 +91,9 @@ EXTRA_PARAMS=""
86
91
  TAB_ID="" # --tab-id <N>: explicit override
87
92
  NO_BIND="false" # --no-bind: drop X-Agent-Session for this call
88
93
  FOREGROUND="false" # --active: only meaningful with bind-tab
94
+ GOAL="" # --goal <text>: what the agent is trying to accomplish
95
+ # (shown in the Chrome takeover banner). Overrides any
96
+ # inherited CREWLY_AGENT_GOAL for this call.
89
97
 
90
98
  # Detect legacy JSON argument
91
99
  if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
@@ -119,6 +127,10 @@ while [[ $# -gt 0 ]]; do
119
127
  CODE="$2"
120
128
  shift 2
121
129
  ;;
130
+ --goal|-g)
131
+ GOAL="$2"
132
+ shift 2
133
+ ;;
122
134
  --params|-P)
123
135
  EXTRA_PARAMS="$2"
124
136
  shift 2
@@ -142,6 +154,11 @@ while [[ $# -gt 0 ]]; do
142
154
  --help|-h)
143
155
  echo "Usage: execute.sh --action navigate --url https://example.com"
144
156
  echo " execute.sh '{\"action\":\"screenshot\"}'"
157
+ echo " execute.sh --action navigate --url https://x.com --goal 'Check pricing'"
158
+ echo ""
159
+ echo " --goal <text> What you're trying to accomplish; shown in the"
160
+ echo " user's Chrome takeover banner. Recommended on the"
161
+ echo " first action of a browser task."
145
162
  echo ""
146
163
  echo "Actions: status, navigate, screenshot, read-text, click, fill, type,"
147
164
  echo " scroll, hover, press-key, get-element, wait-for-selector,"
@@ -184,6 +201,7 @@ if [ -n "$INPUT_JSON" ]; then
184
201
  [ -z "$VALUE" ] && VALUE=$(printf '%s' "$INPUT" | jq -r '.value // empty')
185
202
  [ -z "$TEXT" ] && TEXT=$(printf '%s' "$INPUT" | jq -r '.text // empty')
186
203
  [ -z "$CODE" ] && CODE=$(printf '%s' "$INPUT" | jq -r '.code // empty')
204
+ [ -z "$GOAL" ] && GOAL=$(printf '%s' "$INPUT" | jq -r '.goal // empty')
187
205
  # Per-tab dispatch fields surfaced in JSON input. CLI flags win over JSON
188
206
  # (CLI is more explicit). Empty string = "not provided".
189
207
  if [ -z "$TAB_ID" ]; then
@@ -200,7 +218,7 @@ if [ -n "$INPUT_JSON" ]; then
200
218
  # Capture all extra fields from JSON input as pass-through params (strip
201
219
  # per-tab fields too — they're handled by the dedicated branches below).
202
220
  if [ -z "$EXTRA_PARAMS" ]; then
203
- EXTRA_PARAMS=$(printf '%s' "$INPUT" | jq -c 'del(.action, .url, .selector, .value, .text, .code, .tabId, .noBind, .active) | if length == 0 then empty else . end' 2>/dev/null || true)
221
+ EXTRA_PARAMS=$(printf '%s' "$INPUT" | jq -c 'del(.action, .url, .selector, .value, .text, .code, .goal, .tabId, .noBind, .active) | if length == 0 then empty else . end' 2>/dev/null || true)
204
222
  fi
205
223
  fi
206
224
 
@@ -493,6 +511,15 @@ esac
493
511
  # X-Agent-Session header for this single call (api_call reads it from the
494
512
  # env). Using a subshell to scope the unset.
495
513
 
514
+ # An explicit --goal (or JSON `goal`) overrides any inherited CREWLY_AGENT_GOAL
515
+ # for this call. lib.sh::api_call reads CREWLY_AGENT_GOAL and forwards it as the
516
+ # X-Agent-Goal header, which the backend stamps onto the browser command so the
517
+ # Chrome takeover banner shows what the agent is doing. When --goal is absent we
518
+ # leave CREWLY_AGENT_GOAL untouched (auto path).
519
+ if [ -n "$GOAL" ]; then
520
+ export CREWLY_AGENT_GOAL="$GOAL"
521
+ fi
522
+
496
523
  run_api_call() {
497
524
  if [ "$METHOD" = "GET" ]; then
498
525
  api_call GET "$ENDPOINT"
@@ -524,7 +551,12 @@ fi
524
551
  # 404 with `tab_not_found` indicates our cached tabId is stale (Extension
525
552
  # closed the tab while we weren't looking). Purge cache and retry the call
526
553
  # WITHOUT a cached tabId so the backend auto-binds a fresh one.
554
+ #
555
+ # Only for a CACHED tabId. A tab the caller named with --tab-id must be
556
+ # honoured or the call fails: retrying elsewhere would quietly answer about a
557
+ # different tab than the one asked about.
527
558
  if [ "$RESPONSE_EXIT" -ne 0 ] \
559
+ && [ -z "$TAB_ID" ] \
528
560
  && [ -n "$STDERR_CAPTURE" ] \
529
561
  && printf '%s' "$STDERR_CAPTURE" | grep -q '"status":404' \
530
562
  && printf '%s' "$STDERR_CAPTURE" | grep -q 'tab_not_found' \