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,20 +4,20 @@ 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 '{\"action\":\"create\",\"title\":\"...\",\"content\":\"...\",\"category\":\"SOPs\",\"scope\":\"global\"}'"
9
9
 
10
- ACTION=$(echo "$INPUT" | jq -r '.action // empty')
10
+ ACTION=$(printf '%s' "$INPUT" | jq -r '.action // empty')
11
11
  require_param "action" "$ACTION"
12
12
 
13
13
  if [ "$ACTION" = "create" ]; then
14
- TITLE=$(echo "$INPUT" | jq -r '.title // empty')
15
- CONTENT=$(echo "$INPUT" | jq -r '.content // empty')
16
- CATEGORY=$(echo "$INPUT" | jq -r '.category // "General"')
17
- SCOPE=$(echo "$INPUT" | jq -r '.scope // "global"')
18
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
19
- TAGS=$(echo "$INPUT" | jq -c '.tags // []')
20
- CREATED_BY=$(echo "$INPUT" | jq -r '.createdBy // "agent"')
14
+ TITLE=$(printf '%s' "$INPUT" | jq -r '.title // empty')
15
+ CONTENT=$(printf '%s' "$INPUT" | jq -r '.content // empty')
16
+ CATEGORY=$(printf '%s' "$INPUT" | jq -r '.category // "General"')
17
+ SCOPE=$(printf '%s' "$INPUT" | jq -r '.scope // "global"')
18
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
19
+ TAGS=$(printf '%s' "$INPUT" | jq -c '.tags // []')
20
+ CREATED_BY=$(printf '%s' "$INPUT" | jq -r '.createdBy // "agent"')
21
21
 
22
22
  require_param "title" "$TITLE"
23
23
  require_param "content" "$CONTENT"
@@ -35,15 +35,15 @@ if [ "$ACTION" = "create" ]; then
35
35
  api_call POST "/knowledge/documents" "$BODY"
36
36
 
37
37
  elif [ "$ACTION" = "update" ]; then
38
- ID=$(echo "$INPUT" | jq -r '.id // empty')
38
+ ID=$(printf '%s' "$INPUT" | jq -r '.id // empty')
39
39
  require_param "id" "$ID"
40
40
 
41
- SCOPE=$(echo "$INPUT" | jq -r '.scope // "global"')
42
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
43
- UPDATED_BY=$(echo "$INPUT" | jq -r '.updatedBy // "agent"')
41
+ SCOPE=$(printf '%s' "$INPUT" | jq -r '.scope // "global"')
42
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
43
+ UPDATED_BY=$(printf '%s' "$INPUT" | jq -r '.updatedBy // "agent"')
44
44
 
45
45
  # Build update body with only provided fields
46
- BODY=$(echo "$INPUT" | jq '{
46
+ BODY=$(printf '%s' "$INPUT" | jq '{
47
47
  title: .title,
48
48
  content: .content,
49
49
  category: .category,
@@ -4,14 +4,14 @@ 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 '{\"action\":\"search\",\"query\":\"code review\"}'"
9
9
 
10
- ACTION=$(echo "$INPUT" | jq -r '.action // "search"')
11
- QUERY=$(echo "$INPUT" | jq -r '.query // empty')
12
- ITEM_ID=$(echo "$INPUT" | jq -r '.id // empty')
13
- TYPE_FILTER=$(echo "$INPUT" | jq -r '.type // empty')
14
- CATEGORY_FILTER=$(echo "$INPUT" | jq -r '.category // empty')
10
+ ACTION=$(printf '%s' "$INPUT" | jq -r '.action // "search"')
11
+ QUERY=$(printf '%s' "$INPUT" | jq -r '.query // empty')
12
+ ITEM_ID=$(printf '%s' "$INPUT" | jq -r '.id // empty')
13
+ TYPE_FILTER=$(printf '%s' "$INPUT" | jq -r '.type // empty')
14
+ CATEGORY_FILTER=$(printf '%s' "$INPUT" | jq -r '.category // empty')
15
15
 
16
16
  case "$ACTION" in
17
17
  search)
@@ -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 '{\"query\":\"deployment\",\"scope\":\"global\"}'"
9
9
 
10
- QUERY=$(echo "$INPUT" | jq -r '.query // empty')
11
- SCOPE=$(echo "$INPUT" | jq -r '.scope // "global"')
12
- CATEGORY=$(echo "$INPUT" | jq -r '.category // empty')
13
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
10
+ QUERY=$(printf '%s' "$INPUT" | jq -r '.query // empty')
11
+ SCOPE=$(printf '%s' "$INPUT" | jq -r '.scope // "global"')
12
+ CATEGORY=$(printf '%s' "$INPUT" | jq -r '.category // empty')
13
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
14
14
  require_param "query" "$QUERY"
15
15
 
16
16
  # URL-encode the query parameters
@@ -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 '{\"absoluteTaskPath\":\"/path/to/task\"}'"
9
9
 
10
- ABSOLUTE_TASK_PATH=$(echo "$INPUT" | jq -r '.absoluteTaskPath // empty')
10
+ ABSOLUTE_TASK_PATH=$(printf '%s' "$INPUT" | jq -r '.absoluteTaskPath // empty')
11
11
  require_param "absoluteTaskPath" "$ABSOLUTE_TASK_PATH"
12
12
 
13
13
  BODY=$(jq -n --arg absoluteTaskPath "$ABSOLUTE_TASK_PATH" '{absoluteTaskPath: $absoluteTaskPath}')
@@ -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:-}"
8
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"agentId\":\"dev-1\",\"context\":\"authentication patterns\"}'"
7
+ INPUT=$(read_json_input "${1:-}")
8
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"agentId\":\"dev-1\",\"context\":\"...\"}' or echo '{...}' | execute.sh"
9
9
 
10
- AGENT_ID=$(echo "$INPUT" | jq -r '.agentId // empty')
11
- CONTEXT=$(echo "$INPUT" | jq -r '.context // empty')
10
+ AGENT_ID=$(printf '%s' "$INPUT" | jq -r '.agentId // empty')
11
+ CONTEXT=$(printf '%s' "$INPUT" | jq -r '.context // empty')
12
12
  require_param "agentId" "$AGENT_ID"
13
13
  require_param "context" "$CONTEXT"
14
14
 
15
15
  # Build body with required and optional fields
16
- BODY=$(echo "$INPUT" | jq '{
16
+ BODY=$(printf '%s' "$INPUT" | jq '{
17
17
  agentId: .agentId,
18
18
  context: .context
19
19
  } +
@@ -4,20 +4,20 @@ 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:-}"
8
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"agentId\":\"dev-1\",\"agentRole\":\"developer\",\"projectPath\":\"/projects/app\",\"learning\":\"Jest mock resets are needed between tests\"}'"
7
+ INPUT=$(read_json_input "${1:-}")
8
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"agentId\":\"dev-1\",\"agentRole\":\"developer\",\"projectPath\":\"...\",\"learning\":\"...\"}' or echo '{...}' | execute.sh"
9
9
 
10
- AGENT_ID=$(echo "$INPUT" | jq -r '.agentId // empty')
11
- AGENT_ROLE=$(echo "$INPUT" | jq -r '.agentRole // empty')
12
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
13
- LEARNING=$(echo "$INPUT" | jq -r '.learning // empty')
10
+ AGENT_ID=$(printf '%s' "$INPUT" | jq -r '.agentId // empty')
11
+ AGENT_ROLE=$(printf '%s' "$INPUT" | jq -r '.agentRole // empty')
12
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
13
+ LEARNING=$(printf '%s' "$INPUT" | jq -r '.learning // empty')
14
14
  require_param "agentId" "$AGENT_ID"
15
15
  require_param "agentRole" "$AGENT_ROLE"
16
16
  require_param "projectPath" "$PROJECT_PATH"
17
17
  require_param "learning" "$LEARNING"
18
18
 
19
19
  # Build body with required and optional fields
20
- BODY=$(echo "$INPUT" | jq '{
20
+ BODY=$(printf '%s' "$INPUT" | jq '{
21
21
  agentId: .agentId,
22
22
  agentRole: .agentRole,
23
23
  projectPath: .projectPath,
@@ -4,18 +4,18 @@ 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:-}"
8
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"role\":\"developer\",\"sessionName\":\"dev-1\"}'"
7
+ INPUT=$(read_json_input "${1:-}")
8
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"role\":\"developer\",\"sessionName\":\"dev-1\"}' or echo '{...}' | execute.sh"
9
9
 
10
10
  # Accept both canonical (role/sessionName) and legacy (agentRole/agentId) parameter names
11
- ROLE=$(echo "$INPUT" | jq -r '.role // .agentRole // empty')
12
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // .agentId // empty')
11
+ ROLE=$(printf '%s' "$INPUT" | jq -r '.role // .agentRole // empty')
12
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // .agentId // empty')
13
13
  require_param "role" "$ROLE"
14
14
  require_param "sessionName" "$SESSION_NAME"
15
15
 
16
16
  # Optional: claudeSessionId for resume support
17
- CLAUDE_SESSION_ID=$(echo "$INPUT" | jq -r '.claudeSessionId // empty')
18
- TEAM_MEMBER_ID=$(echo "$INPUT" | jq -r '.teamMemberId // empty')
17
+ CLAUDE_SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.claudeSessionId // empty')
18
+ TEAM_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.teamMemberId // empty')
19
19
 
20
20
  BODY=$(jq -n \
21
21
  --arg role "$ROLE" \
@@ -4,26 +4,26 @@ 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:-}"
8
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"agentId\":\"dev-1\",\"content\":\"The auth module uses JWT\",\"category\":\"architecture\",\"scope\":\"project\"}'"
7
+ INPUT=$(read_json_input "${1:-}")
8
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"agentId\":\"dev-1\",\"content\":\"...\",\"category\":\"...\",\"scope\":\"...\"}' or echo '{...}' | execute.sh"
9
9
 
10
- AGENT_ID=$(echo "$INPUT" | jq -r '.agentId // empty')
11
- CONTENT=$(echo "$INPUT" | jq -r '.content // empty')
12
- CATEGORY=$(echo "$INPUT" | jq -r '.category // empty')
13
- SCOPE=$(echo "$INPUT" | jq -r '.scope // empty')
10
+ AGENT_ID=$(printf '%s' "$INPUT" | jq -r '.agentId // empty')
11
+ CONTENT=$(printf '%s' "$INPUT" | jq -r '.content // empty')
12
+ CATEGORY=$(printf '%s' "$INPUT" | jq -r '.category // empty')
13
+ SCOPE=$(printf '%s' "$INPUT" | jq -r '.scope // empty')
14
14
  require_param "agentId" "$AGENT_ID"
15
15
  require_param "content" "$CONTENT"
16
16
  require_param "category" "$CATEGORY"
17
17
  require_param "scope" "$SCOPE"
18
18
 
19
19
  # #187: Auto-inject projectPath from CREWLY_PROJECT_PATH env var when not provided
20
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
20
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
21
21
  if [ -z "$PROJECT_PATH" ] && [ -n "${CREWLY_PROJECT_PATH:-}" ]; then
22
- INPUT=$(echo "$INPUT" | jq --arg pp "$CREWLY_PROJECT_PATH" '. + {projectPath: $pp}')
22
+ INPUT=$(printf '%s' "$INPUT" | jq --arg pp "$CREWLY_PROJECT_PATH" '. + {projectPath: $pp}')
23
23
  fi
24
24
 
25
25
  # Build body with required and optional fields
26
- BODY=$(echo "$INPUT" | jq '{
26
+ BODY=$(printf '%s' "$INPUT" | jq '{
27
27
  agentId: .agentId,
28
28
  content: .content,
29
29
  category: .category,
@@ -4,18 +4,18 @@ 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\":\"dev-1\",\"progress\":50,\"current\":\"Implementing tests\"}'"
9
9
 
10
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
11
- PROGRESS=$(echo "$INPUT" | jq -r '.progress // empty')
12
- CURRENT=$(echo "$INPUT" | jq -r '.current // empty')
10
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
11
+ PROGRESS=$(printf '%s' "$INPUT" | jq -r '.progress // empty')
12
+ CURRENT=$(printf '%s' "$INPUT" | jq -r '.current // empty')
13
13
  require_param "sessionName" "$SESSION_NAME"
14
14
  require_param "progress" "$PROGRESS"
15
15
  require_param "current" "$CURRENT"
16
16
 
17
17
  # Build body with required and optional fields
18
- BODY=$(echo "$INPUT" | jq '{
18
+ BODY=$(printf '%s' "$INPUT" | jq '{
19
19
  sessionName: .sessionName,
20
20
  progress: (.progress | tonumber),
21
21
  current: .current
@@ -4,23 +4,23 @@ 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:-}"
8
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"dev-1\",\"status\":\"done\",\"summary\":\"Finished implementing auth module\",\"taskPath\":\"/path/to/task.md\"}'"
7
+ INPUT=$(read_json_input "${1:-}")
8
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"dev-1\",\"status\":\"done\",\"summary\":\"...\"}' or echo '{...}' | execute.sh"
9
9
 
10
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
11
- STATUS=$(echo "$INPUT" | jq -r '.status // empty')
12
- SUMMARY=$(echo "$INPUT" | jq -r '.summary // empty')
13
- TASK_PATH=$(echo "$INPUT" | jq -r '.taskPath // empty')
10
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
11
+ STATUS=$(printf '%s' "$INPUT" | jq -r '.status // empty')
12
+ SUMMARY=$(printf '%s' "$INPUT" | jq -r '.summary // empty')
13
+ TASK_PATH=$(printf '%s' "$INPUT" | jq -r '.taskPath // empty')
14
14
  require_param "sessionName" "$SESSION_NAME"
15
15
  require_param "status" "$STATUS"
16
16
  require_param "summary" "$SUMMARY"
17
17
 
18
18
  # Optional structured StatusReport fields (for hierarchical workflows)
19
- TASK_ID=$(echo "$INPUT" | jq -r '.taskId // empty')
20
- PROGRESS=$(echo "$INPUT" | jq -r '.progress // empty')
21
- ARTIFACTS=$(echo "$INPUT" | jq -c '.artifacts // empty')
22
- BLOCKERS=$(echo "$INPUT" | jq -c '.blockers // empty')
23
- USE_STRUCTURED=$(echo "$INPUT" | jq -r '.structured // "false"')
19
+ TASK_ID=$(printf '%s' "$INPUT" | jq -r '.taskId // empty')
20
+ PROGRESS=$(printf '%s' "$INPUT" | jq -r '.progress // empty')
21
+ ARTIFACTS=$(printf '%s' "$INPUT" | jq -c '.artifacts // empty')
22
+ BLOCKERS=$(printf '%s' "$INPUT" | jq -c '.blockers // empty')
23
+ USE_STRUCTURED=$(printf '%s' "$INPUT" | jq -r '.structured // "false"')
24
24
 
25
25
  # Map simple status strings to InProgressTaskStatus values
26
26
  map_status_to_state() {
@@ -43,7 +43,7 @@ if [ "$USE_STRUCTURED" = "true" ] && [ -n "$TASK_ID" ]; then
43
43
 
44
44
  # Add artifacts if provided
45
45
  if [ -n "$ARTIFACTS" ] && [ "$ARTIFACTS" != "" ]; then
46
- ARTIFACT_LINES=$(echo "$ARTIFACTS" | jq -r '.[]? | "- **\(.name)** (\(.type)): \(.content)"' 2>/dev/null || true)
46
+ ARTIFACT_LINES=$(printf '%s' "$ARTIFACTS" | jq -r '.[]? | "- **\(.name)** (\(.type)): \(.content)"' 2>/dev/null || true)
47
47
  if [ -n "$ARTIFACT_LINES" ]; then
48
48
  MESSAGE="${MESSAGE}\n\n## Artifacts\n${ARTIFACT_LINES}"
49
49
  fi
@@ -51,7 +51,7 @@ if [ "$USE_STRUCTURED" = "true" ] && [ -n "$TASK_ID" ]; then
51
51
 
52
52
  # Add blockers if provided
53
53
  if [ -n "$BLOCKERS" ] && [ "$BLOCKERS" != "" ]; then
54
- BLOCKER_LINES=$(echo "$BLOCKERS" | jq -r '.[]? // empty' 2>/dev/null | while read -r b; do echo "- ${b}"; done)
54
+ BLOCKER_LINES=$(printf '%s' "$BLOCKERS" | jq -r '.[]? // empty' 2>/dev/null | while read -r b; do printf '%s\n' "- ${b}"; done)
55
55
  if [ -n "$BLOCKER_LINES" ]; then
56
56
  MESSAGE="${MESSAGE}\n\n## Blockers\n${BLOCKER_LINES}"
57
57
  fi
@@ -93,6 +93,6 @@ fi
93
93
  # Use [COMPLETED] prefix so recall can distinguish completed tasks from other patterns.
94
94
  # This prevents PM from re-delegating tasks that were already done.
95
95
  if [ "$STATUS" = "done" ] && [ -n "$SUMMARY" ]; then
96
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
96
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
97
97
  auto_remember "$SESSION_NAME" "[COMPLETED] Task completed by ${SESSION_NAME}: ${SUMMARY}" "decision" "project" "$PROJECT_PATH"
98
98
  fi
@@ -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 '{\"taskId\":\"xxx\",\"sessionName\":\"crewly-product-sam-xxx\",\"notes\":\"current state...\"}'"
9
9
 
10
- TASK_ID=$(echo "$INPUT" | jq -r '.taskId // empty')
11
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
12
- NOTES=$(echo "$INPUT" | jq -r '.notes // empty')
10
+ TASK_ID=$(printf '%s' "$INPUT" | jq -r '.taskId // empty')
11
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
12
+ NOTES=$(printf '%s' "$INPUT" | jq -r '.notes // empty')
13
13
  require_param "taskId" "$TASK_ID"
14
14
  require_param "sessionName" "$SESSION_NAME"
15
15
  require_param "notes" "$NOTES"
16
16
 
17
- BODY=$(echo "$INPUT" | jq '{taskId: .taskId, sessionName: .sessionName, notes: .notes}')
17
+ BODY=$(printf '%s' "$INPUT" | jq '{taskId: .taskId, sessionName: .sessionName, notes: .notes}')
18
18
 
19
19
  api_call POST "/task-management/save-working-notes" "$BODY"
@@ -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 '{\"minutes\":20,\"message\":\"Run supervision\",\"recurring\":true}'
10
10
  Time-based: '{\"message\":\"Supervise\",\"recurring\":true,\"marketHoursMinutes\":5,\"offHoursMinutes\":20,\"marketHours\":\"09:30-11:30,13:00-15:00\",\"timezone\":\"Asia/Shanghai\"}'"
11
11
 
12
- MINUTES=$(echo "$INPUT" | jq -r '.minutes // empty')
13
- MESSAGE=$(echo "$INPUT" | jq -r '.message // empty')
14
- RECURRING=$(echo "$INPUT" | jq -r '.recurring // false')
15
- MAX_OCCURRENCES=$(echo "$INPUT" | jq -r '.maxOccurrences // empty')
12
+ MINUTES=$(printf '%s' "$INPUT" | jq -r '.minutes // empty')
13
+ MESSAGE=$(printf '%s' "$INPUT" | jq -r '.message // 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,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 '{\"content\":\"Task completed successfully\",\"senderName\":\"dev-1\"}'"
9
9
 
10
- CONTENT=$(echo "$INPUT" | jq -r '.content // empty')
11
- SENDER_NAME=$(echo "$INPUT" | jq -r '.senderName // empty')
12
- SENDER_TYPE=$(echo "$INPUT" | jq -r '.senderType // empty')
13
- CONVERSATION_ID=$(echo "$INPUT" | jq -r '.conversationId // empty')
10
+ CONTENT=$(printf '%s' "$INPUT" | jq -r '.content // empty')
11
+ SENDER_NAME=$(printf '%s' "$INPUT" | jq -r '.senderName // empty')
12
+ SENDER_TYPE=$(printf '%s' "$INPUT" | jq -r '.senderType // empty')
13
+ CONVERSATION_ID=$(printf '%s' "$INPUT" | jq -r '.conversationId // empty')
14
14
  require_param "content" "$CONTENT"
15
15
  require_param "senderName" "$SENDER_NAME"
16
16
 
@@ -1,15 +1,16 @@
1
1
  #!/bin/bash
2
- # Send a direct message to another agent's terminal session
2
+ # Send a direct message to another 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 '{\"to\":\"agent-session\",\"message\":\"Can you review my PR?\"}'"
8
+ INPUT=$(read_json_input "${1:-}")
9
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"to\":\"agent-session\",\"message\":\"...\"}' or echo '{...}' | execute.sh"
9
10
 
10
11
  # Accept both "to" and "sessionName" for compatibility (#231)
11
- TO=$(echo "$INPUT" | jq -r '.to // .sessionName // empty')
12
- MESSAGE=$(echo "$INPUT" | jq -r '.message // empty')
12
+ TO=$(printf '%s' "$INPUT" | jq -r '.to // .sessionName // empty')
13
+ MESSAGE=$(printf '%s' "$INPUT" | jq -r '.message // empty')
13
14
  require_param "to (or sessionName)" "$TO"
14
15
  require_param "message" "$MESSAGE"
15
16
 
@@ -7,17 +7,17 @@ source "${SCRIPT_DIR}/../../_common/lib.sh"
7
7
 
8
8
  CREWLY_HOME="${HOME}/.crewly"
9
9
 
10
- INPUT="${1:-}"
10
+ INPUT=$(read_json_input "${1:-}")
11
11
  [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"normId\":\"code-commit\",\"title\":\"Code Commit SOP\",\"content\":\"...\"}'"
12
12
 
13
- NORM_ID=$(echo "$INPUT" | jq -r '.normId // empty')
14
- TITLE=$(echo "$INPUT" | jq -r '.title // empty')
15
- TRIGGER=$(echo "$INPUT" | jq -r '.trigger // empty')
16
- CONTENT=$(echo "$INPUT" | jq -r '.content // empty')
17
- APPEND=$(echo "$INPUT" | jq -r '.append // "false"')
18
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // empty')
19
- SESSION_NAME=$(echo "$INPUT" | jq -r '.sessionName // empty')
20
- UPDATED_BY=$(echo "$INPUT" | jq -r '.updatedBy // empty')
13
+ NORM_ID=$(printf '%s' "$INPUT" | jq -r '.normId // empty')
14
+ TITLE=$(printf '%s' "$INPUT" | jq -r '.title // empty')
15
+ TRIGGER=$(printf '%s' "$INPUT" | jq -r '.trigger // empty')
16
+ CONTENT=$(printf '%s' "$INPUT" | jq -r '.content // empty')
17
+ APPEND=$(printf '%s' "$INPUT" | jq -r '.append // "false"')
18
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
19
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
20
+ UPDATED_BY=$(printf '%s' "$INPUT" | jq -r '.updatedBy // empty')
21
21
 
22
22
  require_param "normId" "$NORM_ID"
23
23
  require_param "content" "$CONTENT"
@@ -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 '{\"updatedBy\":\"crewly-orc\",\"language\":\"zh-CN\",\"reportingStyle\":\"detailed\"}'"
9
9
 
10
- UPDATED_BY=$(echo "$INPUT" | jq -r '.updatedBy // empty')
10
+ UPDATED_BY=$(printf '%s' "$INPUT" | jq -r '.updatedBy // empty')
11
11
  require_param "updatedBy" "$UPDATED_BY"
12
12
 
13
13
  api_call POST "/memory/user-profile" "$INPUT"
@@ -18,13 +18,13 @@ set -euo pipefail
18
18
  INPUT="${1:-"{}"}"
19
19
 
20
20
  # Parse input fields
21
- ACTION=$(echo "$INPUT" | jq -r '.action // "start"')
22
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // ""')
23
- TEMPLATE_ID=$(echo "$INPUT" | jq -r '.templateId // "marketing-team"')
24
- SESSION_ID=$(echo "$INPUT" | jq -r '.sessionId // ""')
25
- VALUE=$(echo "$INPUT" | jq -r '.value // ""')
26
- OUTPUT_DIR=$(echo "$INPUT" | jq -r '.outputDir // ""')
27
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // ""')
21
+ ACTION=$(printf '%s' "$INPUT" | jq -r '.action // "start"')
22
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // ""')
23
+ TEMPLATE_ID=$(printf '%s' "$INPUT" | jq -r '.templateId // "marketing-team"')
24
+ SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.sessionId // ""')
25
+ VALUE=$(printf '%s' "$INPUT" | jq -r '.value // ""')
26
+ OUTPUT_DIR=$(printf '%s' "$INPUT" | jq -r '.outputDir // ""')
27
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // ""')
28
28
 
29
29
  # Crewly API base URL
30
30
  API_BASE="${CREWLY_API_URL:-http://localhost:3000}"
@@ -242,7 +242,7 @@ case "$ACTION" in
242
242
  mkdir -p "$LOCAL_DIR"
243
243
 
244
244
  # Extract answers from input
245
- ANSWERS=$(echo "$INPUT" | jq '.answers // {}')
245
+ ANSWERS=$(printf '%s' "$INPUT" | jq '.answers // {}')
246
246
 
247
247
  # Create completed session
248
248
  echo "$ANSWERS" | jq --arg id "$SESSION_ID" --arg teamId "$TEAM_ID" \
@@ -16,16 +16,16 @@ set -euo pipefail
16
16
  INPUT="${1:-"{}"}"
17
17
 
18
18
  # Parse input fields
19
- ACTION=$(echo "$INPUT" | jq -r '.action // "submit"')
20
- PLATFORM=$(echo "$INPUT" | jq -r '.platform // ""')
21
- CONTENT_TYPE=$(echo "$INPUT" | jq -r '.contentType // "post"')
22
- CONTENT=$(echo "$INPUT" | jq -r '.content // ""')
23
- HASHTAGS=$(echo "$INPUT" | jq -r '.hashtags // [] | join(", ")')
24
- VISUAL_DIRECTION=$(echo "$INPUT" | jq -r '.visualDirection // ""')
25
- SCHEDULED_TIME=$(echo "$INPUT" | jq -r '.scheduledTime // ""')
26
- APPROVAL_ID=$(echo "$INPUT" | jq -r '.approvalId // ""')
27
- TEAM_ID=$(echo "$INPUT" | jq -r '.teamId // ""')
28
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // ""')
19
+ ACTION=$(printf '%s' "$INPUT" | jq -r '.action // "submit"')
20
+ PLATFORM=$(printf '%s' "$INPUT" | jq -r '.platform // ""')
21
+ CONTENT_TYPE=$(printf '%s' "$INPUT" | jq -r '.contentType // "post"')
22
+ CONTENT=$(printf '%s' "$INPUT" | jq -r '.content // ""')
23
+ HASHTAGS=$(printf '%s' "$INPUT" | jq -r '.hashtags // [] | join(", ")')
24
+ VISUAL_DIRECTION=$(printf '%s' "$INPUT" | jq -r '.visualDirection // ""')
25
+ SCHEDULED_TIME=$(printf '%s' "$INPUT" | jq -r '.scheduledTime // ""')
26
+ APPROVAL_ID=$(printf '%s' "$INPUT" | jq -r '.approvalId // ""')
27
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // ""')
28
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // ""')
29
29
 
30
30
  # Crewly API base URL
31
31
  API_BASE="${CREWLY_API_URL:-http://localhost:3000}"
@@ -4,17 +4,17 @@ 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 '{\"businessName\":\"...\",\"industry\":\"...\",\"platforms\":[\"x\",\"linkedin\"],\"weekStartDate\":\"YYYY-MM-DD\"}'"
9
9
 
10
10
  # Parse parameters
11
- BUSINESS_NAME=$(echo "$INPUT" | jq -r '.businessName // empty')
12
- INDUSTRY=$(echo "$INPUT" | jq -r '.industry // empty')
13
- PLATFORMS=$(echo "$INPUT" | jq -r '.platforms // empty')
14
- CONTENT_MIX=$(echo "$INPUT" | jq -r '.contentMix // "{\"educational\":40,\"engagement\":30,\"promotional\":20,\"community\":10}"')
15
- WEEK_START=$(echo "$INPUT" | jq -r '.weekStartDate // empty')
16
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
17
- POST_COUNT=$(echo "$INPUT" | jq -r '.postCount // "5"')
11
+ BUSINESS_NAME=$(printf '%s' "$INPUT" | jq -r '.businessName // empty')
12
+ INDUSTRY=$(printf '%s' "$INPUT" | jq -r '.industry // empty')
13
+ PLATFORMS=$(printf '%s' "$INPUT" | jq -r '.platforms // empty')
14
+ CONTENT_MIX=$(printf '%s' "$INPUT" | jq -r '.contentMix // "{\"educational\":40,\"engagement\":30,\"promotional\":20,\"community\":10}"')
15
+ WEEK_START=$(printf '%s' "$INPUT" | jq -r '.weekStartDate // empty')
16
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
17
+ POST_COUNT=$(printf '%s' "$INPUT" | jq -r '.postCount // "5"')
18
18
 
19
19
  require_param "businessName" "$BUSINESS_NAME"
20
20
  require_param "industry" "$INDUSTRY"
@@ -4,14 +4,14 @@ 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 '{\"projectPath\":\"/path\",\"weekEndDate\":\"YYYY-MM-DD\",\"businessName\":\"...\"}'"
9
9
 
10
10
  # Parse parameters
11
- PROJECT_PATH=$(echo "$INPUT" | jq -r '.projectPath // empty')
12
- WEEK_END=$(echo "$INPUT" | jq -r '.weekEndDate // empty')
13
- BUSINESS_NAME=$(echo "$INPUT" | jq -r '.businessName // empty')
14
- CALENDAR_PATH=$(echo "$INPUT" | jq -r '.calendarPath // empty')
11
+ PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
12
+ WEEK_END=$(printf '%s' "$INPUT" | jq -r '.weekEndDate // empty')
13
+ BUSINESS_NAME=$(printf '%s' "$INPUT" | jq -r '.businessName // empty')
14
+ CALENDAR_PATH=$(printf '%s' "$INPUT" | jq -r '.calendarPath // empty')
15
15
 
16
16
  require_param "weekEndDate" "$WEEK_END"
17
17
  require_param "businessName" "$BUSINESS_NAME"