crewly 1.5.8 → 1.5.10

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 (265) hide show
  1. package/config/skills/_common/lib.sh +47 -0
  2. package/config/skills/agent/browse-stealth/execute.sh +7 -7
  3. package/config/skills/agent/competitor-content-tracker/execute.sh +13 -13
  4. package/config/skills/agent/content-calendar/execute.sh +29 -29
  5. package/config/skills/agent/content-repurposer/execute.sh +8 -8
  6. package/config/skills/agent/content-writer/execute.sh +22 -22
  7. package/config/skills/agent/core/accept-task/execute.sh +6 -6
  8. package/config/skills/agent/core/block-task/execute.sh +5 -5
  9. package/config/skills/agent/core/check-quality-gates/execute.sh +5 -5
  10. package/config/skills/agent/core/complete-task/execute.sh +13 -13
  11. package/config/skills/agent/core/generate-pdf/execute.sh +4 -4
  12. package/config/skills/agent/core/get-my-context/execute.sh +5 -5
  13. package/config/skills/agent/core/get-my-tasks/execute.sh +4 -4
  14. package/config/skills/agent/core/get-sops/execute.sh +4 -4
  15. package/config/skills/agent/core/get-team-norms/execute.sh +4 -4
  16. package/config/skills/agent/core/handoff-task/execute.sh +8 -8
  17. package/config/skills/agent/core/manage-knowledge/execute.sh +14 -14
  18. package/config/skills/agent/core/marketplace-search/execute.sh +6 -6
  19. package/config/skills/agent/core/query-knowledge/execute.sh +5 -5
  20. package/config/skills/agent/core/read-task/execute.sh +2 -2
  21. package/config/skills/agent/core/recall/execute.sh +5 -5
  22. package/config/skills/agent/core/record-learning/execute.sh +7 -7
  23. package/config/skills/agent/core/register-self/execute.sh +6 -6
  24. package/config/skills/agent/core/remember/execute.sh +9 -9
  25. package/config/skills/agent/core/report-progress/execute.sh +5 -5
  26. package/config/skills/agent/core/report-status/execute.sh +14 -14
  27. package/config/skills/agent/core/save-working-state/execute.sh +5 -5
  28. package/config/skills/agent/core/schedule-check/execute.sh +9 -9
  29. package/config/skills/agent/core/send-chat-response/execute.sh +5 -5
  30. package/config/skills/agent/core/send-message/execute.sh +6 -5
  31. package/config/skills/agent/core/update-team-norm/execute.sh +9 -9
  32. package/config/skills/agent/core/update-user-profile/execute.sh +2 -2
  33. package/config/skills/agent/marketing/brand-onboarding/execute.sh +8 -8
  34. package/config/skills/agent/marketing/submit-for-approval/execute.sh +10 -10
  35. package/config/skills/agent/marketing/weekly-content-planning/execute.sh +8 -8
  36. package/config/skills/agent/marketing/weekly-marketing-report/execute.sh +5 -5
  37. package/config/skills/agent/trend-monitor/execute.sh +12 -12
  38. package/config/skills/auditor/score-task/execute.sh +4 -4
  39. package/config/skills/orchestrator/assign-task/execute.sh +1 -1
  40. package/config/skills/orchestrator/assign-team-to-project/execute.sh +2 -2
  41. package/config/skills/orchestrator/broadcast/execute.sh +2 -2
  42. package/config/skills/orchestrator/broadcast-to-org/execute.sh +3 -3
  43. package/config/skills/orchestrator/cancel-all-schedules/execute.sh +3 -3
  44. package/config/skills/orchestrator/cancel-cron/execute.sh +2 -2
  45. package/config/skills/orchestrator/cancel-schedule/execute.sh +2 -2
  46. package/config/skills/orchestrator/complete-task/execute.sh +1 -1
  47. package/config/skills/orchestrator/create-cron/execute.sh +6 -6
  48. package/config/skills/orchestrator/create-project/execute.sh +2 -2
  49. package/config/skills/orchestrator/create-team/execute.sh +2 -2
  50. package/config/skills/orchestrator/delegate-task/execute.sh +19 -19
  51. package/config/skills/orchestrator/get-agent-logs/execute.sh +3 -3
  52. package/config/skills/orchestrator/get-agent-status/execute.sh +2 -2
  53. package/config/skills/orchestrator/get-tasks/execute.sh +2 -2
  54. package/config/skills/orchestrator/handle-agent-failure/execute.sh +7 -7
  55. package/config/skills/orchestrator/list-cron/execute.sh +3 -3
  56. package/config/skills/orchestrator/list-schedules/execute.sh +2 -2
  57. package/config/skills/orchestrator/query-knowledge/execute.sh +5 -5
  58. package/config/skills/orchestrator/read-session-logs/execute.sh +3 -3
  59. package/config/skills/orchestrator/read-system-logs/execute.sh +3 -3
  60. package/config/skills/orchestrator/recall/execute.sh +2 -2
  61. package/config/skills/orchestrator/record-failure/execute.sh +2 -2
  62. package/config/skills/orchestrator/record-learning/execute.sh +2 -2
  63. package/config/skills/orchestrator/record-success/execute.sh +2 -2
  64. package/config/skills/orchestrator/register-self/execute.sh +4 -4
  65. package/config/skills/orchestrator/remember/execute.sh +3 -3
  66. package/config/skills/orchestrator/report-bug/execute.sh +5 -5
  67. package/config/skills/orchestrator/resume-session/execute.sh +2 -2
  68. package/config/skills/orchestrator/schedule-check/execute.sh +10 -10
  69. package/config/skills/orchestrator/send-key/execute.sh +6 -6
  70. package/config/skills/orchestrator/send-message/execute.sh +7 -6
  71. package/config/skills/orchestrator/set-goal/execute.sh +2 -2
  72. package/config/skills/orchestrator/start-agent/execute.sh +3 -3
  73. package/config/skills/orchestrator/start-team/execute.sh +2 -2
  74. package/config/skills/orchestrator/stop-agent/execute.sh +3 -3
  75. package/config/skills/orchestrator/stop-team/execute.sh +2 -2
  76. package/config/skills/orchestrator/subscribe-event/execute.sh +3 -3
  77. package/config/skills/orchestrator/terminate-agent/execute.sh +2 -2
  78. package/config/skills/orchestrator/unsubscribe-event/execute.sh +2 -2
  79. package/config/skills/orchestrator/update-cron/execute.sh +3 -3
  80. package/config/skills/orchestrator/update-focus/execute.sh +2 -2
  81. package/config/skills/orchestrator/update-team/execute.sh +3 -3
  82. package/config/skills/team-leader/aggregate-results/execute.sh +7 -7
  83. package/config/skills/team-leader/decompose-goal/execute.sh +5 -5
  84. package/config/skills/team-leader/delegate-task/execute.sh +13 -13
  85. package/config/skills/team-leader/handle-failure/execute.sh +10 -10
  86. package/config/skills/team-leader/schedule-check/execute.sh +9 -9
  87. package/config/skills/team-leader/start-agent/execute.sh +4 -4
  88. package/config/skills/team-leader/stop-agent/execute.sh +4 -4
  89. package/config/skills/team-leader/verify-output/execute.sh +8 -8
  90. package/config/templates/cloud-deploy.json +119 -0
  91. package/config/templates/dev-fullstack/template.json +64 -17
  92. package/config/templates/research-analysis/template.json +44 -15
  93. package/config/templates/social-media-ops/template.json +43 -15
  94. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts +31 -0
  95. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -0
  96. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +94 -0
  97. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -0
  98. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.d.ts +19 -0
  99. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.d.ts.map +1 -0
  100. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.js +25 -0
  101. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.js.map +1 -0
  102. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +11 -3
  103. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  104. package/dist/backend/backend/src/controllers/browser/browser.controller.js +56 -26
  105. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  106. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  107. package/dist/backend/backend/src/controllers/browser/browser.routes.js +3 -1
  108. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  109. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +16 -0
  110. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  111. package/dist/backend/backend/src/controllers/chat/chat.controller.js +39 -2
  112. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  113. package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -1
  114. package/dist/backend/backend/src/controllers/chat/chat.routes.js +3 -1
  115. package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -1
  116. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +15 -0
  117. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  118. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +45 -0
  119. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  120. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +1 -0
  121. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
  122. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +3 -1
  123. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
  124. package/dist/backend/backend/src/controllers/index.d.ts.map +1 -1
  125. package/dist/backend/backend/src/controllers/index.js +2 -0
  126. package/dist/backend/backend/src/controllers/index.js.map +1 -1
  127. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +15 -0
  128. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
  129. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +35 -1
  130. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
  131. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  132. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +2 -1
  133. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  134. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts.map +1 -1
  135. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js +7 -1
  136. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js.map +1 -1
  137. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  138. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +29 -6
  139. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  140. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts +29 -0
  141. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts.map +1 -1
  142. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js +76 -0
  143. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js.map +1 -1
  144. package/dist/backend/backend/src/controllers/project/project.controller.d.ts +16 -0
  145. package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
  146. package/dist/backend/backend/src/controllers/project/project.controller.js +47 -0
  147. package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
  148. package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -1
  149. package/dist/backend/backend/src/controllers/project/project.routes.js +3 -1
  150. package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -1
  151. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -1
  152. package/dist/backend/backend/src/controllers/system/scheduler.controller.js +10 -2
  153. package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -1
  154. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  155. package/dist/backend/backend/src/controllers/team/team.controller.js +34 -3
  156. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  157. package/dist/backend/backend/src/index.d.ts.map +1 -1
  158. package/dist/backend/backend/src/index.js +18 -4
  159. package/dist/backend/backend/src/index.js.map +1 -1
  160. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  161. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  162. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  163. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +2 -0
  164. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
  165. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +19 -0
  166. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
  167. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.d.ts +145 -0
  168. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.d.ts.map +1 -0
  169. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.js +133 -0
  170. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.js.map +1 -0
  171. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +130 -0
  172. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +1 -0
  173. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +263 -0
  174. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +1 -0
  175. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
  176. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +8 -0
  177. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
  178. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +79 -0
  179. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +1 -0
  180. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +218 -0
  181. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +1 -0
  182. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +91 -0
  183. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +1 -0
  184. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +143 -0
  185. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +1 -0
  186. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +103 -0
  187. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +1 -0
  188. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +256 -0
  189. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +1 -0
  190. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +44 -0
  191. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
  192. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +323 -1
  193. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
  194. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +21 -0
  195. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +7 -0
  197. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  198. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +4 -1
  199. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +26 -11
  201. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  202. package/dist/backend/backend/src/services/chat/chat-highlights.service.d.ts +100 -0
  203. package/dist/backend/backend/src/services/chat/chat-highlights.service.d.ts.map +1 -0
  204. package/dist/backend/backend/src/services/chat/chat-highlights.service.js +145 -0
  205. package/dist/backend/backend/src/services/chat/chat-highlights.service.js.map +1 -0
  206. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.d.ts +76 -0
  207. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.d.ts.map +1 -0
  208. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.js +127 -0
  209. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.js.map +1 -0
  210. package/dist/backend/backend/src/services/chat/chat.service.d.ts +8 -0
  211. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  212. package/dist/backend/backend/src/services/chat/chat.service.js +27 -1
  213. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  214. package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -1
  215. package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
  216. package/dist/backend/backend/src/services/marketplace/index.js +1 -1
  217. package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
  218. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +11 -0
  219. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
  220. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +31 -0
  221. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
  222. package/dist/backend/backend/src/services/monitoring/token-estimator.service.d.ts +197 -0
  223. package/dist/backend/backend/src/services/monitoring/token-estimator.service.d.ts.map +1 -0
  224. package/dist/backend/backend/src/services/monitoring/token-estimator.service.js +408 -0
  225. package/dist/backend/backend/src/services/monitoring/token-estimator.service.js.map +1 -0
  226. package/dist/backend/backend/src/services/project/project-search.service.d.ts +62 -0
  227. package/dist/backend/backend/src/services/project/project-search.service.d.ts.map +1 -0
  228. package/dist/backend/backend/src/services/project/project-search.service.js +107 -0
  229. package/dist/backend/backend/src/services/project/project-search.service.js.map +1 -0
  230. package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts +11 -0
  231. package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts.map +1 -1
  232. package/dist/backend/backend/src/services/quality/quality-gate.service.js +93 -19
  233. package/dist/backend/backend/src/services/quality/quality-gate.service.js.map +1 -1
  234. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  235. package/dist/backend/backend/src/services/session/session-command-helper.js +11 -5
  236. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
  237. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +8 -2
  238. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  239. package/dist/backend/backend/src/services/workflow/scheduler.service.js +30 -6
  240. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  241. package/dist/backend/backend/src/types/settings.types.d.ts +3 -0
  242. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  243. package/dist/backend/backend/src/types/settings.types.js +1 -0
  244. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  245. package/dist/cli/backend/src/types/settings.types.d.ts +3 -0
  246. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  247. package/dist/cli/backend/src/types/settings.types.js +1 -0
  248. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  249. package/dist/cli/cli/src/commands/stop.d.ts.map +1 -1
  250. package/dist/cli/cli/src/commands/stop.js +3 -0
  251. package/dist/cli/cli/src/commands/stop.js.map +1 -1
  252. package/dist/cli/cli/src/utils/license-check.d.ts +70 -0
  253. package/dist/cli/cli/src/utils/license-check.d.ts.map +1 -0
  254. package/dist/cli/cli/src/utils/license-check.js +124 -0
  255. package/dist/cli/cli/src/utils/license-check.js.map +1 -0
  256. package/dist/cli/cli/src/utils/process-cleanup.d.ts +9 -0
  257. package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
  258. package/dist/cli/cli/src/utils/process-cleanup.js +48 -0
  259. package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
  260. package/frontend/dist/assets/index-76782e9e.js +5215 -0
  261. package/frontend/dist/assets/index-b19b2478.css +33 -0
  262. package/frontend/dist/index.html +2 -2
  263. package/package.json +1 -1
  264. package/frontend/dist/assets/index-512efc8e.js +0 -4921
  265. package/frontend/dist/assets/index-dc6ac165.css +0 -33
@@ -4,21 +4,21 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"minutes\":5,\"message\":\"Check on agent\",\"recurring\":true}'
9
9
  Time-based: '{\"message\":\"Supervise\",\"recurring\":true,\"marketHoursMinutes\":5,\"offHoursMinutes\":20,\"marketHours\":\"09:30-11:30,13:00-15:00\",\"timezone\":\"Asia/Shanghai\"}'"
10
10
 
11
- MINUTES=$(echo "$INPUT" | jq -r '.minutes // empty')
12
- MESSAGE=$(echo "$INPUT" | jq -r '.message // empty')
13
- TARGET=$(echo "$INPUT" | jq -r '.target // empty')
14
- RECURRING=$(echo "$INPUT" | jq -r '.recurring // false')
15
- MAX_OCCURRENCES=$(echo "$INPUT" | jq -r '.maxOccurrences // empty')
11
+ MINUTES=$(printf '%s' "$INPUT" | jq -r '.minutes // empty')
12
+ MESSAGE=$(printf '%s' "$INPUT" | jq -r '.message // empty')
13
+ TARGET=$(printf '%s' "$INPUT" | jq -r '.target // empty')
14
+ RECURRING=$(printf '%s' "$INPUT" | jq -r '.recurring // false')
15
+ MAX_OCCURRENCES=$(printf '%s' "$INPUT" | jq -r '.maxOccurrences // empty')
16
16
 
17
17
  # #237: Time-based frequency parameters
18
- MARKET_HOURS_MIN=$(echo "$INPUT" | jq -r '.marketHoursMinutes // empty')
19
- OFF_HOURS_MIN=$(echo "$INPUT" | jq -r '.offHoursMinutes // empty')
20
- MARKET_HOURS=$(echo "$INPUT" | jq -r '.marketHours // empty')
21
- TIMEZONE=$(echo "$INPUT" | jq -r '.timezone // empty')
18
+ MARKET_HOURS_MIN=$(printf '%s' "$INPUT" | jq -r '.marketHoursMinutes // empty')
19
+ OFF_HOURS_MIN=$(printf '%s' "$INPUT" | jq -r '.offHoursMinutes // empty')
20
+ MARKET_HOURS=$(printf '%s' "$INPUT" | jq -r '.marketHours // empty')
21
+ TIMEZONE=$(printf '%s' "$INPUT" | jq -r '.timezone // empty')
22
22
 
23
23
  require_param "message" "$MESSAGE"
24
24
 
@@ -4,12 +4,12 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-""}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"agent-session\",\"key\":\"Enter\"}' or '{\"sessionName\":\"...\",\"keys\":[\"Down\",\"Down\",\"Enter\"]}'"
9
9
 
10
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
11
- KEY=$(echo "$INPUT" | jq -r '.key // empty')
12
- KEYS=$(echo "$INPUT" | jq -r '.keys // empty')
10
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
11
+ KEY=$(printf '%s' "$INPUT" | jq -r '.key // empty')
12
+ KEYS=$(printf '%s' "$INPUT" | jq -r '.keys // empty')
13
13
  require_param "sessionName" "$SESSION_NAME"
14
14
 
15
15
  # Support both single key and key sequence
@@ -17,9 +17,9 @@ if [ -n "$KEY" ]; then
17
17
  BODY=$(jq -n --arg key "$KEY" '{key: $key}')
18
18
  api_call POST "/terminal/${SESSION_NAME}/key" "$BODY"
19
19
  elif [ "$KEYS" != "" ] && [ "$KEYS" != "null" ]; then
20
- KEY_COUNT=$(echo "$INPUT" | jq '.keys | length')
20
+ KEY_COUNT=$(printf '%s' "$INPUT" | jq '.keys | length')
21
21
  for (( i=0; i<KEY_COUNT; i++ )); do
22
- CURRENT_KEY=$(echo "$INPUT" | jq -r ".keys[$i]")
22
+ CURRENT_KEY=$(printf '%s' "$INPUT" | jq -r ".keys[$i]")
23
23
  BODY=$(jq -n --arg key "$CURRENT_KEY" '{key: $key}')
24
24
  api_call POST "/terminal/${SESSION_NAME}/key" "$BODY"
25
25
  # Small delay between keys to allow processing
@@ -1,15 +1,16 @@
1
1
  #!/bin/bash
2
- # Send a message to an agent's terminal session
2
+ # Send a message to an agent's terminal session.
3
+ # Supports: argument, stdin pipe, or @filepath for JSON input (#292, #293).
3
4
  set -euo pipefail
4
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
7
 
7
- INPUT="${1:-}"
8
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"agent-session\",\"message\":\"hello\"}'"
8
+ INPUT=$(read_json_input "${1:-}")
9
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"agent-session\",\"message\":\"hello\"}' or echo '{...}' | execute.sh"
9
10
 
10
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
11
- MESSAGE=$(echo "$INPUT" | jq -r '.message // empty')
12
- FORCE=$(echo "$INPUT" | jq -r '.force // empty')
11
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
12
+ MESSAGE=$(printf '%s' "$INPUT" | jq -r '.message // empty')
13
+ FORCE=$(printf '%s' "$INPUT" | jq -r '.force // empty')
13
14
  require_param "sessionName" "$SESSION_NAME"
14
15
  require_param "message" "$MESSAGE"
15
16
 
@@ -4,10 +4,10 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"goal\":\"...\",\"projectPath\":\"...\",\"setBy\":\"orchestrator\"}'"
9
9
 
10
- GOAL=$(echo "$INPUT" | jq -r '.goal // empty')
10
+ GOAL=$(printf '%s' "$INPUT" | jq -r '.goal // empty')
11
11
  require_param "goal" "$GOAL"
12
12
 
13
13
  api_call POST "/memory/goals" "$INPUT"
@@ -4,11 +4,11 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-uuid\",\"memberId\":\"member-uuid\"}'"
9
9
 
10
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
11
- MEMBER_ID=$(echo "$INPUT" | jq -r '.memberId // empty')
10
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
11
+ MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.memberId // empty')
12
12
  require_param "teamId" "$TEAM_ID"
13
13
  require_param "memberId" "$MEMBER_ID"
14
14
 
@@ -4,10 +4,10 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-uuid\",\"projectId\":\"project-uuid\"}'"
9
9
 
10
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
10
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
11
11
  require_param "teamId" "$TEAM_ID"
12
12
 
13
13
  # Pass the full input as the request body (backend accepts optional projectId)
@@ -4,11 +4,11 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-uuid\",\"memberId\":\"member-uuid\"}'"
9
9
 
10
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
11
- MEMBER_ID=$(echo "$INPUT" | jq -r '.memberId // empty')
10
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
11
+ MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.memberId // empty')
12
12
  require_param "teamId" "$TEAM_ID"
13
13
  require_param "memberId" "$MEMBER_ID"
14
14
 
@@ -4,10 +4,10 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-uuid\"}'"
9
9
 
10
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
10
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
11
11
  require_param "teamId" "$TEAM_ID"
12
12
 
13
13
  api_call POST "/teams/${TEAM_ID}/stop"
@@ -4,16 +4,16 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"eventType\":\"agent:idle\",\"filter\":{\"sessionName\":\"agent-joe\"},\"oneShot\":true}'"
9
9
 
10
- EVENT_TYPE=$(echo "$INPUT" | jq -r '.eventType // empty')
10
+ EVENT_TYPE=$(printf '%s' "$INPUT" | jq -r '.eventType // empty')
11
11
  require_param "eventType" "$EVENT_TYPE"
12
12
 
13
13
  # Inject subscriberSession from env (set by Crewly on each PTY session)
14
14
  # The API requires subscriberSession and filter but the agent doesn't need to provide them
15
15
  SUBSCRIBER_SESSION="${CREWLY_SESSION_NAME:-crewly-orc}"
16
- BODY=$(echo "$INPUT" | jq --arg ss "$SUBSCRIBER_SESSION" \
16
+ BODY=$(printf '%s' "$INPUT" | jq --arg ss "$SUBSCRIBER_SESSION" \
17
17
  '. + {subscriberSession: $ss} | if .filter == null then .filter = {} else . end')
18
18
 
19
19
  api_call POST "/events/subscribe" "$BODY"
@@ -4,10 +4,10 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"agent-session\"}'"
9
9
 
10
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
10
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
11
11
  require_param "sessionName" "$SESSION_NAME"
12
12
 
13
13
  api_call DELETE "/terminal/${SESSION_NAME}"
@@ -4,10 +4,10 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"subscriptionId\":\"sub-123\"}'"
9
9
 
10
- SUB_ID=$(echo "$INPUT" | jq -r '.subscriptionId // empty')
10
+ SUB_ID=$(printf '%s' "$INPUT" | jq -r '.subscriptionId // empty')
11
11
  require_param "subscriptionId" "$SUB_ID"
12
12
 
13
13
  api_call DELETE "/events/subscribe/${SUB_ID}"
@@ -4,13 +4,13 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"id\":\"cron-xxx\",\"taskDescription\":\"Updated task\"}'"
9
9
 
10
- ID=$(echo "$INPUT" | jq -r '.id // empty')
10
+ ID=$(printf '%s' "$INPUT" | jq -r '.id // empty')
11
11
  require_param "id" "$ID"
12
12
 
13
13
  # Build body with only provided fields
14
- BODY=$(echo "$INPUT" | jq 'del(.id)')
14
+ BODY=$(printf '%s' "$INPUT" | jq 'del(.id)')
15
15
 
16
16
  api_call PATCH "/cron-tasks/${ID}" "$BODY"
@@ -4,10 +4,10 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"focus\":\"...\",\"projectPath\":\"...\",\"updatedBy\":\"orchestrator\"}'"
9
9
 
10
- FOCUS=$(echo "$INPUT" | jq -r '.focus // empty')
10
+ FOCUS=$(printf '%s' "$INPUT" | jq -r '.focus // empty')
11
11
  require_param "focus" "$FOCUS"
12
12
 
13
13
  api_call POST "/memory/focus" "$INPUT"
@@ -4,13 +4,13 @@ set -euo pipefail
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  source "${SCRIPT_DIR}/../_common/lib.sh"
6
6
 
7
- INPUT="${1:-}"
7
+ INPUT=$(read_json_input "${1:-}")
8
8
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"uuid\",\"name\":\"New Name\",\"description\":\"...\"}'"
9
9
 
10
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
10
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
11
11
  require_param "teamId" "$TEAM_ID"
12
12
 
13
13
  # Remove teamId from the body before sending (it's in the URL)
14
- BODY=$(echo "$INPUT" | jq 'del(.teamId)')
14
+ BODY=$(printf '%s' "$INPUT" | jq 'del(.teamId)')
15
15
 
16
16
  api_call PUT "/teams/$TEAM_ID" "$BODY"
@@ -5,15 +5,15 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
7
7
 
8
- INPUT="${1:-}"
8
+ INPUT=$(read_json_input "${1:-}")
9
9
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-123\",\"objective\":\"Build auth module\",\"reportType\":\"final\",\"taskPaths\":[\"/path/to/task1.md\",\"/path/to/task2.md\"],\"projectPath\":\"/path/to/project\"}'"
10
10
 
11
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
12
- OBJECTIVE=$(echo "$INPUT" | jq -r '.objective // "Objective not specified"')
13
- REPORT_TYPE=$(echo "$INPUT" | jq -r '.reportType // "final"')
14
- TASK_PATHS=$(echo "$INPUT" | jq -c '.taskPaths // []')
15
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
16
- INCLUDE_VERIFICATION=$(echo "$INPUT" | jq -r '.includeVerification // "true"')
11
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
12
+ OBJECTIVE=$(printf '%s' "$INPUT" | jq -r '.objective // "Objective not specified"')
13
+ REPORT_TYPE=$(printf '%s' "$INPUT" | jq -r '.reportType // "final"')
14
+ TASK_PATHS=$(printf '%s' "$INPUT" | jq -c '.taskPaths // []')
15
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
16
+ INCLUDE_VERIFICATION=$(printf '%s' "$INPUT" | jq -r '.includeVerification // "true"')
17
17
 
18
18
  # Collect task data
19
19
  TASK_RESULTS="[]"
@@ -5,13 +5,13 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
7
7
 
8
- INPUT="${1:-}"
8
+ INPUT=$(read_json_input "${1:-}")
9
9
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"objective\":\"Build auth module\",\"projectPath\":\"/path/to/project\",\"tasks\":[{\"title\":\"...\",\"description\":\"...\",\"requiredRole\":\"developer\",\"acceptanceCriteria\":\"...\",\"priority\":\"high\"}]}'"
10
10
 
11
- OBJECTIVE=$(echo "$INPUT" | jq -r '.objective // empty')
12
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
13
- TASKS=$(echo "$INPUT" | jq -c '.tasks // empty')
14
- MILESTONE=$(echo "$INPUT" | jq -r '.milestone // "delegated"')
11
+ OBJECTIVE=$(printf '%s' "$INPUT" | jq -r '.objective // empty')
12
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
13
+ TASKS=$(printf '%s' "$INPUT" | jq -c '.tasks // empty')
14
+ MILESTONE=$(printf '%s' "$INPUT" | jq -r '.milestone // "delegated"')
15
15
  require_param "objective" "$OBJECTIVE"
16
16
  require_param "tasks" "$TASKS"
17
17
 
@@ -6,17 +6,17 @@ set -euo pipefail
6
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
7
  source "${SCRIPT_DIR}/../_common/lib.sh"
8
8
 
9
- INPUT="${1:-}"
10
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"to\":\"worker-session\",\"task\":\"implement feature X\",\"priority\":\"high\",\"teamId\":\"team-123\",\"tlMemberId\":\"tl-member-id\",\"projectPath\":\"/path/to/project\"}'"
11
-
12
- TO=$(echo "$INPUT" | jq -r '.to // empty')
13
- TASK=$(echo "$INPUT" | jq -r '.task // empty')
14
- PRIORITY=$(echo "$INPUT" | jq -r '.priority // "normal"')
15
- CONTEXT=$(echo "$INPUT" | jq -r '.context // empty')
16
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
17
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
18
- TL_MEMBER_ID=$(echo "$INPUT" | jq -r '.tlMemberId // empty')
19
- FROM_SESSION=$(echo "$INPUT" | jq -r '.fromSession // empty')
9
+ INPUT=$(read_json_input "${1:-}")
10
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"to\":\"worker-session\",\"task\":\"...\"}' or echo '{...}' | execute.sh"
11
+
12
+ TO=$(printf '%s' "$INPUT" | jq -r '.to // empty')
13
+ TASK=$(printf '%s' "$INPUT" | jq -r '.task // empty')
14
+ PRIORITY=$(printf '%s' "$INPUT" | jq -r '.priority // "normal"')
15
+ CONTEXT=$(printf '%s' "$INPUT" | jq -r '.context // empty')
16
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
17
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
18
+ TL_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.tlMemberId // empty')
19
+ FROM_SESSION=$(printf '%s' "$INPUT" | jq -r '.fromSession // empty')
20
20
  require_param "to" "$TO"
21
21
  require_param "task" "$TASK"
22
22
 
@@ -93,8 +93,8 @@ if [ -n "$PROJECT_PATH" ]; then
93
93
  fi
94
94
 
95
95
  # Set up idle event subscription for TL monitoring
96
- MONITOR_IDLE=$(echo "$INPUT" | jq -r 'if .monitor.idleEvent == null then true else .monitor.idleEvent end')
97
- MONITOR_FALLBACK_MINUTES=$(echo "$INPUT" | jq -r 'if .monitor.fallbackCheckMinutes == null then 5 else .monitor.fallbackCheckMinutes end')
96
+ MONITOR_IDLE=$(printf '%s' "$INPUT" | jq -r 'if .monitor.idleEvent == null then true else .monitor.idleEvent end')
97
+ MONITOR_FALLBACK_MINUTES=$(printf '%s' "$INPUT" | jq -r 'if .monitor.fallbackCheckMinutes == null then 5 else .monitor.fallbackCheckMinutes end')
98
98
 
99
99
  COLLECTED_SCHEDULE_IDS="[]"
100
100
  COLLECTED_SUBSCRIPTION_IDS="[]"
@@ -5,20 +5,20 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
7
7
 
8
- INPUT="${1:-}"
8
+ INPUT=$(read_json_input "${1:-}")
9
9
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"workerId\":\"worker-1\",\"workerSession\":\"worker-session\",\"teamId\":\"team-123\",\"failureInfo\":{\"error\":\"tests failed\",\"failedSteps\":[\"tests\"],\"retries\":0,\"failureType\":\"verification\"},\"requiredRole\":\"developer\"}'"
10
10
 
11
- WORKER_ID=$(echo "$INPUT" | jq -r '.workerId // empty')
12
- WORKER_SESSION=$(echo "$INPUT" | jq -r '.workerSession // empty')
13
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
14
- REQUIRED_ROLE=$(echo "$INPUT" | jq -r '.requiredRole // empty')
15
- TASK_DESCRIPTION=$(echo "$INPUT" | jq -r '.taskDescription // empty')
11
+ WORKER_ID=$(printf '%s' "$INPUT" | jq -r '.workerId // empty')
12
+ WORKER_SESSION=$(printf '%s' "$INPUT" | jq -r '.workerSession // empty')
13
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
14
+ REQUIRED_ROLE=$(printf '%s' "$INPUT" | jq -r '.requiredRole // empty')
15
+ TASK_DESCRIPTION=$(printf '%s' "$INPUT" | jq -r '.taskDescription // empty')
16
16
 
17
17
  # Failure info
18
- RETRIES=$(echo "$INPUT" | jq -r '.failureInfo.retries // 0')
19
- FAILURE_TYPE=$(echo "$INPUT" | jq -r '.failureInfo.failureType // "unknown"')
20
- ERROR_MSG=$(echo "$INPUT" | jq -r '.failureInfo.error // "Unknown error"')
21
- FAILED_STEPS=$(echo "$INPUT" | jq -c '.failureInfo.failedSteps // []')
18
+ RETRIES=$(printf '%s' "$INPUT" | jq -r '.failureInfo.retries // 0')
19
+ FAILURE_TYPE=$(printf '%s' "$INPUT" | jq -r '.failureInfo.failureType // "unknown"')
20
+ ERROR_MSG=$(printf '%s' "$INPUT" | jq -r '.failureInfo.error // "Unknown error"')
21
+ FAILED_STEPS=$(printf '%s' "$INPUT" | jq -c '.failureInfo.failedSteps // []')
22
22
 
23
23
  require_param "workerId" "$WORKER_ID"
24
24
 
@@ -5,18 +5,18 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
7
7
 
8
- INPUT="${1:-}"
8
+ INPUT=$(read_json_input "${1:-}")
9
9
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"minutes\":5,\"message\":\"Check worker progress\",\"teamId\":\"team-123\",\"tlMemberId\":\"tl-id\",\"sessionName\":\"my-session\"}'"
10
10
 
11
- MINUTES=$(echo "$INPUT" | jq -r '.minutes // empty')
12
- MESSAGE=$(echo "$INPUT" | jq -r '.message // empty')
13
- TARGET=$(echo "$INPUT" | jq -r '.target // empty')
14
- RECURRING=$(echo "$INPUT" | jq -r '.recurring // false')
15
- MAX_OCCURRENCES=$(echo "$INPUT" | jq -r '.maxOccurrences // empty')
16
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
17
- TL_MEMBER_ID=$(echo "$INPUT" | jq -r '.tlMemberId // empty')
11
+ MINUTES=$(printf '%s' "$INPUT" | jq -r '.minutes // empty')
12
+ MESSAGE=$(printf '%s' "$INPUT" | jq -r '.message // empty')
13
+ TARGET=$(printf '%s' "$INPUT" | jq -r '.target // empty')
14
+ RECURRING=$(printf '%s' "$INPUT" | jq -r '.recurring // false')
15
+ MAX_OCCURRENCES=$(printf '%s' "$INPUT" | jq -r '.maxOccurrences // empty')
16
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
17
+ TL_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.tlMemberId // empty')
18
18
  # sessionName: explicit caller identity, used as fallback when CREWLY_SESSION_NAME is not set
19
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
19
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
20
20
  require_param "minutes" "$MINUTES"
21
21
  require_param "message" "$MESSAGE"
22
22
 
@@ -5,12 +5,12 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
7
7
 
8
- INPUT="${1:-}"
8
+ INPUT=$(read_json_input "${1:-}")
9
9
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-uuid\",\"memberId\":\"member-uuid\",\"tlMemberId\":\"tl-member-id\"}'"
10
10
 
11
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
12
- MEMBER_ID=$(echo "$INPUT" | jq -r '.memberId // empty')
13
- TL_MEMBER_ID=$(echo "$INPUT" | jq -r '.tlMemberId // empty')
11
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
12
+ MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.memberId // empty')
13
+ TL_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.tlMemberId // empty')
14
14
  require_param "teamId" "$TEAM_ID"
15
15
  require_param "memberId" "$MEMBER_ID"
16
16
  require_param "tlMemberId" "$TL_MEMBER_ID"
@@ -5,12 +5,12 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  source "${SCRIPT_DIR}/../_common/lib.sh"
7
7
 
8
- INPUT="${1:-}"
8
+ INPUT=$(read_json_input "${1:-}")
9
9
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"teamId\":\"team-uuid\",\"memberId\":\"member-uuid\",\"tlMemberId\":\"tl-member-id\"}'"
10
10
 
11
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
12
- MEMBER_ID=$(echo "$INPUT" | jq -r '.memberId // empty')
13
- TL_MEMBER_ID=$(echo "$INPUT" | jq -r '.tlMemberId // empty')
11
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
12
+ MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.memberId // empty')
13
+ TL_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.tlMemberId // empty')
14
14
  require_param "teamId" "$TEAM_ID"
15
15
  require_param "memberId" "$MEMBER_ID"
16
16
  require_param "tlMemberId" "$TL_MEMBER_ID"
@@ -12,16 +12,16 @@ set -euo pipefail
12
12
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
13
  source "${SCRIPT_DIR}/../_common/lib.sh"
14
14
 
15
- INPUT="${1:-}"
15
+ INPUT=$(read_json_input "${1:-}")
16
16
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"taskId\":\"...\",\"taskPath\":\"...\",\"workerId\":\"...\",\"teamId\":\"...\",\"projectPath\":\"...\",\"templateId\":\"dev-fullstack\",\"checks\":[...]}'"
17
17
 
18
- TASK_ID=$(echo "$INPUT" | jq -r '.taskId // empty')
19
- TASK_PATH=$(echo "$INPUT" | jq -r '.taskPath // empty')
20
- WORKER_ID=$(echo "$INPUT" | jq -r '.workerId // empty')
21
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
22
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
23
- TEMPLATE_ID=$(echo "$INPUT" | jq -r '.templateId // empty')
24
- CHECKS=$(echo "$INPUT" | jq -c '.checks // []')
18
+ TASK_ID=$(printf '%s' "$INPUT" | jq -r '.taskId // empty')
19
+ TASK_PATH=$(printf '%s' "$INPUT" | jq -r '.taskPath // empty')
20
+ WORKER_ID=$(printf '%s' "$INPUT" | jq -r '.workerId // empty')
21
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
22
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
23
+ TEMPLATE_ID=$(printf '%s' "$INPUT" | jq -r '.templateId // empty')
24
+ CHECKS=$(printf '%s' "$INPUT" | jq -c '.checks // []')
25
25
 
26
26
  # At least taskPath or taskId is needed
27
27
  if [ -z "$TASK_PATH" ] && [ -z "$TASK_ID" ]; then
@@ -0,0 +1,119 @@
1
+ {
2
+ "$schema": "https://crewlyai.com/schemas/cloud-deploy-manifest.json",
3
+ "version": "1.0.0",
4
+ "generatedAt": "2026-03-26T00:00:00.000Z",
5
+ "templates": [
6
+ {
7
+ "templateId": "dev-fullstack",
8
+ "displayName": "Fullstack Development Team",
9
+ "description": "A Tech Lead orchestrates 2 developers and 1 QA engineer to build web applications. Includes code review, quality gates, browser testing, and E2E pipelines.",
10
+ "category": "development",
11
+ "icon": "laptop",
12
+ "tags": ["development", "web", "fullstack", "testing"],
13
+ "agentCount": 4,
14
+ "roles": [
15
+ { "role": "team-leader", "label": "Tech Lead", "count": 1 },
16
+ { "role": "developer", "label": "Developer", "count": 2 },
17
+ { "role": "qa-engineer", "label": "QA Engineer", "count": 1 }
18
+ ],
19
+ "compatibleRuntimes": ["claude-code", "crewly-agent"],
20
+ "defaultRuntime": "crewly-agent",
21
+ "estimatedTokenUsage": {
22
+ "perTaskAvg": 50000,
23
+ "dailyBudget": 5000000,
24
+ "modelBreakdown": {
25
+ "claude-sonnet-4-20250514": 85,
26
+ "claude-haiku-3.5": 15
27
+ }
28
+ },
29
+ "features": [
30
+ "hierarchical-delegation",
31
+ "code-review-pipeline",
32
+ "quality-gates",
33
+ "browser-verification",
34
+ "e2e-testing"
35
+ ],
36
+ "deployConfig": {
37
+ "minMemoryMb": 512,
38
+ "requiresBrowser": true,
39
+ "requiresGit": true,
40
+ "normFiles": ["code-commit-sop.md", "quality-gates.md"],
41
+ "suggestedProviders": ["anthropic"]
42
+ }
43
+ },
44
+ {
45
+ "templateId": "research-analysis",
46
+ "displayName": "Research & Analysis Team",
47
+ "description": "A Research Lead directs 2 analysts for competitive analysis, market research, and strategic planning. Includes source verification, fact-checking, and data validation pipelines.",
48
+ "category": "research",
49
+ "icon": "microscope",
50
+ "tags": ["research", "analysis", "strategy", "competitive"],
51
+ "agentCount": 3,
52
+ "roles": [
53
+ { "role": "team-leader", "label": "Research Lead", "count": 1 },
54
+ { "role": "analyst", "label": "Research Analyst", "count": 2 }
55
+ ],
56
+ "compatibleRuntimes": ["claude-code", "crewly-agent"],
57
+ "defaultRuntime": "crewly-agent",
58
+ "estimatedTokenUsage": {
59
+ "perTaskAvg": 40000,
60
+ "dailyBudget": 3000000,
61
+ "modelBreakdown": {
62
+ "claude-sonnet-4-20250514": 90,
63
+ "claude-haiku-3.5": 10
64
+ }
65
+ },
66
+ "features": [
67
+ "hierarchical-delegation",
68
+ "source-verification",
69
+ "fact-checking",
70
+ "data-validation",
71
+ "web-research"
72
+ ],
73
+ "deployConfig": {
74
+ "minMemoryMb": 256,
75
+ "requiresBrowser": true,
76
+ "requiresGit": false,
77
+ "normFiles": ["research-methodology.md", "source-citation.md"],
78
+ "suggestedProviders": ["anthropic"]
79
+ }
80
+ },
81
+ {
82
+ "templateId": "social-media-ops",
83
+ "displayName": "Social Media Operations Team",
84
+ "description": "A Content Director manages 2 creators for social media content creation, visual review, and multi-platform publishing. Includes visual QA with AI vision analysis.",
85
+ "category": "content",
86
+ "icon": "smartphone",
87
+ "tags": ["content", "social-media", "visual", "marketing"],
88
+ "agentCount": 3,
89
+ "roles": [
90
+ { "role": "team-leader", "label": "Content Director", "count": 1 },
91
+ { "role": "creator", "label": "Content Creator", "count": 2 }
92
+ ],
93
+ "compatibleRuntimes": ["claude-code", "crewly-agent"],
94
+ "defaultRuntime": "crewly-agent",
95
+ "estimatedTokenUsage": {
96
+ "perTaskAvg": 30000,
97
+ "dailyBudget": 2000000,
98
+ "modelBreakdown": {
99
+ "claude-sonnet-4-20250514": 70,
100
+ "claude-haiku-3.5": 30
101
+ }
102
+ },
103
+ "features": [
104
+ "hierarchical-delegation",
105
+ "visual-screenshot-review",
106
+ "ai-vision-analysis",
107
+ "content-guidelines",
108
+ "multi-platform"
109
+ ],
110
+ "deployConfig": {
111
+ "minMemoryMb": 256,
112
+ "requiresBrowser": true,
113
+ "requiresGit": false,
114
+ "normFiles": ["posting-schedule.md", "engagement-rules.md"],
115
+ "suggestedProviders": ["anthropic"]
116
+ }
117
+ }
118
+ ]
119
+ }