crewly 1.20.315 → 1.20.317

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 (154) hide show
  1. package/config/skills/_common/lib.sh +20 -0
  2. package/config/skills/_common/lib.test.sh +18 -0
  3. package/config/skills/agent/core/app-comments/execute.sh +1 -1
  4. package/config/skills/agent/core/app-data/execute.sh +1 -1
  5. package/config/skills/agent/core/attach-file/SKILL.md +6 -0
  6. package/config/skills/agent/core/attach-file/execute.sh +1 -1
  7. package/config/skills/agent/core/break-down-request/execute.sh +1 -1
  8. package/config/skills/agent/core/calendar-create/execute.sh +1 -1
  9. package/config/skills/agent/core/calendar-create/execute.test.sh +1 -1
  10. package/config/skills/agent/core/calendar-list/execute.sh +1 -1
  11. package/config/skills/agent/core/calendar-list/execute.test.sh +1 -1
  12. package/config/skills/agent/core/cancel-followup/execute.sh +1 -2
  13. package/config/skills/agent/core/canva-create/execute.sh +1 -1
  14. package/config/skills/agent/core/canva-designs/execute.sh +1 -1
  15. package/config/skills/agent/core/canva-export/execute.sh +1 -1
  16. package/config/skills/agent/core/canva-upload/execute.sh +1 -1
  17. package/config/skills/agent/core/create-mission/execute.sh +1 -1
  18. package/config/skills/agent/core/create-request/execute.sh +1 -1
  19. package/config/skills/agent/core/create-task/execute.sh +1 -1
  20. package/config/skills/agent/core/docs-comment/execute.sh +1 -1
  21. package/config/skills/agent/core/docs-read/execute.sh +1 -1
  22. package/config/skills/agent/core/docs-write/execute.sh +1 -1
  23. package/config/skills/agent/core/drive-read/execute.sh +1 -1
  24. package/config/skills/agent/core/drive-search/execute.sh +1 -1
  25. package/config/skills/agent/core/drive-upload/execute.sh +1 -1
  26. package/config/skills/agent/core/experiment-card/execute.sh +1 -1
  27. package/config/skills/agent/core/experiment-card/execute.test.sh +1 -1
  28. package/config/skills/agent/core/find-app-template/execute.sh +1 -1
  29. package/config/skills/agent/core/find-skill/execute.sh +1 -1
  30. package/config/skills/agent/core/find-skill/execute.test.sh +1 -1
  31. package/config/skills/agent/core/get-my-active-work/execute.sh +1 -1
  32. package/config/skills/agent/core/get-my-context/execute.sh +1 -1
  33. package/config/skills/agent/core/get-my-tasks/execute.sh +1 -1
  34. package/config/skills/agent/core/gmail-attachment/execute.sh +1 -1
  35. package/config/skills/agent/core/gmail-read/execute.sh +1 -1
  36. package/config/skills/agent/core/gmail-read/execute.test.sh +1 -1
  37. package/config/skills/agent/core/gmail-search/execute.sh +1 -1
  38. package/config/skills/agent/core/gmail-search/execute.test.sh +1 -1
  39. package/config/skills/agent/core/gmail-send/execute.sh +1 -1
  40. package/config/skills/agent/core/gmail-send/execute.test.sh +1 -1
  41. package/config/skills/agent/core/google-connect/execute.sh +1 -1
  42. package/config/skills/agent/core/install-skill/execute.sh +1 -1
  43. package/config/skills/agent/core/install-skill/execute.test.sh +1 -1
  44. package/config/skills/agent/core/list-channels/execute.sh +1 -1
  45. package/config/skills/agent/core/list-my-crons/execute.sh +1 -2
  46. package/config/skills/agent/core/list-my-followups/execute.sh +1 -2
  47. package/config/skills/agent/core/project-tickets/execute.sh +1 -1
  48. package/config/skills/agent/core/publish-app/execute.sh +1 -1
  49. package/config/skills/agent/core/recall/execute.sh +1 -1
  50. package/config/skills/agent/core/receive-file/execute.sh +1 -1
  51. package/config/skills/agent/core/record-learning/execute.sh +1 -1
  52. package/config/skills/agent/core/record-prediction/execute.sh +1 -1
  53. package/config/skills/agent/core/register-self/execute.sh +1 -1
  54. package/config/skills/agent/core/remember/execute.sh +1 -1
  55. package/config/skills/agent/core/reply/SKILL.md +5 -0
  56. package/config/skills/agent/core/reply/execute.sh +1 -1
  57. package/config/skills/agent/core/reply-channel/SKILL.md +8 -0
  58. package/config/skills/agent/core/reply-channel/execute.sh +1 -2
  59. package/config/skills/agent/core/reply-chat/execute.sh +1 -1
  60. package/config/skills/agent/core/report-status/execute.sh +1 -1
  61. package/config/skills/agent/core/request-file/execute.sh +1 -1
  62. package/config/skills/agent/core/resolve-prediction/execute.sh +1 -1
  63. package/config/skills/agent/core/schedule-followup/execute.sh +1 -2
  64. package/config/skills/agent/core/search-chat/execute.sh +1 -1
  65. package/config/skills/agent/core/send-file/execute.sh +1 -1
  66. package/config/skills/agent/core/send-message/execute.sh +1 -1
  67. package/config/skills/agent/core/set-focus/execute.sh +1 -1
  68. package/config/skills/agent/core/set-focus/execute.test.sh +1 -1
  69. package/config/skills/agent/core/sheets-read/execute.sh +1 -1
  70. package/config/skills/agent/core/sheets-write/execute.sh +1 -1
  71. package/config/skills/agent/core/slack-file/execute.sh +1 -1
  72. package/config/skills/agent/core/slack-post/execute.sh +1 -1
  73. package/config/skills/agent/core/slides-create/execute.sh +1 -1
  74. package/config/skills/agent/core/slides-read/execute.sh +1 -1
  75. package/config/skills/agent/core/split-ticket/execute.sh +1 -1
  76. package/config/skills/agent/core/standing-update/execute.sh +1 -1
  77. package/config/skills/agent/core/supersede-memory/execute.sh +1 -1
  78. package/config/skills/agent/core/suppress-noise/execute.sh +1 -1
  79. package/config/skills/agent/core/ticket-check/execute.sh +1 -1
  80. package/config/skills/agent/core/todo-add/execute.sh +1 -1
  81. package/config/skills/agent/core/todo-lists/execute.sh +1 -1
  82. package/config/skills/agent/core/todo-lists/execute.test.sh +1 -1
  83. package/config/skills/agent/core/todo-tasks/execute.sh +1 -1
  84. package/config/skills/agent/core/todo-update/execute.sh +1 -1
  85. package/config/skills/agent/core/use-app-template/execute.sh +1 -1
  86. package/config/skills/agent/core/watch-for-event/execute.sh +1 -2
  87. package/config/skills/agent/core/whatsapp-draft/execute.sh +1 -1
  88. package/config/skills/agent/core/whatsapp-draft/execute.test.sh +1 -1
  89. package/config/skills/agent/core/whatsapp-inbox/execute.sh +1 -1
  90. package/config/skills/agent/core/whatsapp-inbox/execute.test.sh +1 -1
  91. package/config/skills/agent/core/whatsapp-read/execute.sh +1 -1
  92. package/config/skills/agent/core/whatsapp-read/execute.test.sh +1 -1
  93. package/config/skills/agent/core/whatsapp-send/execute.sh +1 -1
  94. package/config/skills/agent/core/whatsapp-send/execute.test.sh +1 -1
  95. package/config/skills/agent/core/wiki-query/execute.sh +1 -1
  96. package/config/skills/agent/core/workspace/execute.sh +1 -1
  97. package/config/skills/agent/core/zoho-draft/execute.sh +1 -1
  98. package/config/skills/agent/onboarding/materialize-team/execute.sh +1 -1
  99. package/config/skills/agent/onboarding/recommend-team/execute.sh +1 -1
  100. package/config/skills/agent/onboarding/synthesize-hierarchy/execute.sh +1 -1
  101. package/config/skills/agent/remote-browser/execute.sh +1 -1
  102. package/config/skills/agent/v3/plan-request/execute.sh +1 -1
  103. package/config/skills/orchestrator/delegate-task/execute.sh +1 -1
  104. package/config/skills/orchestrator/harness-login/execute.sh +1 -1
  105. package/config/skills/orchestrator/harness-login/execute.test.sh +1 -1
  106. package/config/skills/orchestrator/reply-chat/execute.sh +1 -1
  107. package/config/skills/orchestrator/reply-gchat/execute.sh +1 -1
  108. package/config/skills/orchestrator/reply-remote/execute.sh +1 -1
  109. package/config/skills/orchestrator/reply-slack/execute.sh +1 -1
  110. package/config/skills/orchestrator/send-message/execute.sh +1 -1
  111. package/config/skills/orchestrator/send-message/execute.test.sh +1 -1
  112. package/config/skills/orchestrator/send-pdf-to-slack/execute.sh +1 -1
  113. package/config/skills/orchestrator/send-to-remote/execute.sh +1 -1
  114. package/config/skills/orchestrator/wiki-bookkeep/execute.sh +1 -1
  115. package/config/skills/orchestrator/wiki-cleanup/execute.sh +1 -1
  116. package/config/skills/orchestrator/wiki-ingest/execute.sh +1 -1
  117. package/config/skills/orchestrator/wiki-lint/execute.sh +1 -1
  118. package/config/skills/orchestrator/wiki-migrate/execute.sh +1 -1
  119. package/config/skills/orchestrator/wiki-process-queue/execute.sh +1 -1
  120. package/config/skills/orchestrator/wiki-queue-add/execute.sh +1 -1
  121. package/config/skills/team-leader/assign-ticket/execute.sh +1 -1
  122. package/config/skills/team-leader/assign-ticket/execute.test.sh +1 -1
  123. package/config/skills/team-leader/delegate-task/execute.sh +1 -1
  124. package/config/skills/team-leader/signal-digest/execute.sh +1 -1
  125. package/config/skills/team-leader/wiki-review-proposals/execute.sh +1 -1
  126. package/config/skills/team-leader/wiki-supersede/execute.sh +1 -1
  127. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  128. package/dist/backend/backend/src/controllers/slack/slack.controller.js +23 -0
  129. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  130. package/dist/backend/backend/src/services/slack/attach-file-chat-record.d.ts +49 -0
  131. package/dist/backend/backend/src/services/slack/attach-file-chat-record.d.ts.map +1 -0
  132. package/dist/backend/backend/src/services/slack/attach-file-chat-record.js +77 -0
  133. package/dist/backend/backend/src/services/slack/attach-file-chat-record.js.map +1 -0
  134. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  136. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  138. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +3 -0
  139. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  140. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +8 -0
  141. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -1
  142. package/dist/backend/backend/src/services/team-move/team-move-importer.js +15 -0
  143. package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -1
  144. package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -1
  145. package/dist/backend/backend/src/services/team-move/team-move-runtime.js +6 -0
  146. package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -1
  147. package/dist/backend/build-info.json +2 -2
  148. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  149. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  150. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  151. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  152. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +3 -0
  153. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  154. package/package.json +1 -1
@@ -40,6 +40,14 @@ bash config/skills/agent/core/reply-channel/execute.sh \
40
40
  [--cmid <clientMessageId>]
41
41
  ```
42
42
 
43
+ **Quotes in your text:** a double quote inside `--content "..."` ends the
44
+ string and splits your text into extra arguments, and nothing is sent. For
45
+ text with double quotes, quotes of any kind, or several lines, write it to a
46
+ file and use `--content-file <path>` (or pipe it on stdin). Do not hide the
47
+ output behind `| tail -1`: a failure prints `{"success":false,...}`, and
48
+ success prints `{"success":true,...}` -- read that line before you tell
49
+ anyone it was sent.
50
+
43
51
  `--thread` replies inside an existing thread. When the prompt you received
44
52
  came from a **Slack team channel** it names the thread id
45
53
  (`--thread <id>`); pass it through so your reply shows up in the same Slack
@@ -120,9 +120,8 @@ while [[ $# -gt 0 ]]; do
120
120
  exit 0
121
121
  ;;
122
122
  *)
123
- echo "Unknown argument: $1" >&2
124
123
  print_usage >&2
125
- exit 2
124
+ unknown_arg_exit "$1"
126
125
  ;;
127
126
  esac
128
127
  done
@@ -34,7 +34,7 @@ while [[ $# -gt 0 ]]; do
34
34
  --work-item) WORK_ITEM="$2"; shift 2 ;;
35
35
  --json|-j) INPUT_JSON="$2"; shift 2 ;;
36
36
  --) shift; break ;;
37
- *) if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then INPUT_JSON="$1"; shift; else error_exit "Unknown argument: $1"; fi ;;
37
+ *) if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then INPUT_JSON="$1"; shift; else unknown_arg_exit "$1"; fi ;;
38
38
  esac
39
39
  done
40
40
 
@@ -190,7 +190,7 @@ while [[ $# -gt 0 ]]; do
190
190
  INPUT_JSON="$1"
191
191
  shift
192
192
  else
193
- error_exit "Unknown argument: $1. Use --help for usage."
193
+ unknown_arg_exit "$1"
194
194
  fi
195
195
  ;;
196
196
  esac
@@ -54,7 +54,7 @@ while [[ $# -gt 0 ]]; do
54
54
  --status) [ $# -ge 2 ] || error_exit "--status requires a request id"; STATUS="$2"; shift 2 ;;
55
55
  --cancel) [ $# -ge 2 ] || error_exit "--cancel requires a request id"; CANCEL="$2"; shift 2 ;;
56
56
  --help|-h) print_usage; exit 0 ;;
57
- *) error_exit "Unknown option: $1" ;;
57
+ *) unknown_arg_exit "$1" ;;
58
58
  esac
59
59
  done
60
60
 
@@ -55,7 +55,7 @@ while [[ $# -gt 0 ]]; do
55
55
  [ $# -ge 2 ] || error_exit "--session requires a value"
56
56
  SESSION_NAME="$2"; shift 2 ;;
57
57
  --help|-h) print_usage; exit 0 ;;
58
- *) error_exit "Unknown option: $1" ;;
58
+ *) unknown_arg_exit "$1" ;;
59
59
  esac
60
60
  done
61
61
 
@@ -88,8 +88,7 @@ while [[ $# -gt 0 ]]; do
88
88
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
89
89
  INPUT_JSON="$1"; shift
90
90
  else
91
- echo '{"error":"Unknown argument: '"$1"'"}' >&2
92
- exit 1
91
+ unknown_arg_exit "$1"
93
92
  fi
94
93
  ;;
95
94
  esac
@@ -31,7 +31,7 @@ while [[ $# -gt 0 ]]; do
31
31
  echo " or: bash execute.sh '{\"query\":\"keywords\",\"channel\":\"#name\",\"from\":\"YYYY-MM-DD\",\"to\":\"YYYY-MM-DD\",\"limit\":10}'"
32
32
  echo " Searches chat messages you can see. All keywords must appear. Newest first."
33
33
  exit 0 ;;
34
- *) echo "Unknown argument: $1" >&2; exit 2 ;;
34
+ *) unknown_arg_exit "$1" ;;
35
35
  esac
36
36
  done
37
37
 
@@ -99,7 +99,7 @@ while [[ $# -gt 0 ]]; do
99
99
  --content-type) [ $# -ge 2 ] || error_exit "--content-type requires a value"; CTYPE="$2"; shift 2 ;;
100
100
  --cancel) [ $# -ge 2 ] || error_exit "--cancel requires a handoff id"; CANCEL="$2"; shift 2 ;;
101
101
  --help|-h) print_usage; exit 0 ;;
102
- *) error_exit "Unknown option: $1" ;;
102
+ *) unknown_arg_exit "$1" ;;
103
103
  esac
104
104
  done
105
105
 
@@ -86,7 +86,7 @@ while [[ $# -gt 0 ]]; do
86
86
  INPUT_JSON="$1"
87
87
  shift
88
88
  else
89
- error_exit "Unknown argument: $1. Use --help for usage."
89
+ unknown_arg_exit "$1"
90
90
  fi
91
91
  ;;
92
92
  esac
@@ -46,7 +46,7 @@ while [[ $# -gt 0 ]]; do
46
46
  [ $# -ge 2 ] || error_exit "--session requires a value"
47
47
  SESSION_NAME="$2"; shift 2 ;;
48
48
  --help|-h) print_usage; exit 0 ;;
49
- *) error_exit "Unknown option: $1" ;;
49
+ *) unknown_arg_exit "$1" ;;
50
50
  esac
51
51
  done
52
52
 
@@ -61,7 +61,7 @@ check "backend 400: reason" "$(printf '%s' "$OUT" | jq -r .reason)" "items must
61
61
  # --- validation ---
62
62
  check "missing items errors" "$(run_err --session s1)" "Missing required parameter: items (--item)"
63
63
  check "missing session errors" "$(run_err --item x)" "Missing required parameter: sessionName (--session or CREWLY_SESSION_NAME)"
64
- check "unknown option errors" "$(run_err --bogus 1)" "Unknown option: --bogus"
64
+ check "unknown option errors" "$(run_err --bogus 1)" "Unknown argument: --bogus"
65
65
 
66
66
  echo "=== Results: $PASS passed, $FAIL failed ==="
67
67
  [ "$FAIL" -eq 0 ]
@@ -61,7 +61,7 @@ while [[ $# -gt 0 ]]; do
61
61
  --info) INFO=1; shift ;;
62
62
  --account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
63
63
  --help|-h) print_usage; exit 0 ;;
64
- *) error_exit "Unknown option: $1" ;;
64
+ *) unknown_arg_exit "$1" ;;
65
65
  esac
66
66
  done
67
67
  if [ -n "$INPUT_JSON" ]; then
@@ -71,7 +71,7 @@ while [[ $# -gt 0 ]]; do
71
71
  --mode) [ $# -ge 2 ] || error_exit "--mode requires a value"; MODE="$2"; shift 2 ;;
72
72
  --account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
73
73
  --help|-h) print_usage; exit 0 ;;
74
- *) error_exit "Unknown option: $1" ;;
74
+ *) unknown_arg_exit "$1" ;;
75
75
  esac
76
76
  done
77
77
  if [ -n "$INPUT_JSON" ]; then
@@ -26,7 +26,7 @@ while [ $# -gt 0 ]; do
26
26
  get) CMD="get"; REF="${2:-}"; shift; [ $# -gt 0 ] && shift ;;
27
27
  --out|-o) OUT="${2:-}"; shift 2 ;;
28
28
  -h|--help) usage; exit 0 ;;
29
- *) if [ -z "$REF" ] && [ "$CMD" = "get" ]; then REF="$1"; shift; else echo "{\"error\":\"Unknown argument: $1\"}" >&2; exit 1; fi ;;
29
+ *) if [ -z "$REF" ] && [ "$CMD" = "get" ]; then REF="$1"; shift; else unknown_arg_exit "$1"; fi ;;
30
30
  esac
31
31
  done
32
32
 
@@ -50,7 +50,7 @@ while [[ $# -gt 0 ]]; do
50
50
  --new-topic) NEW_TOPIC="1"; shift ;;
51
51
  --json|-j) INPUT_JSON="$2"; shift 2 ;;
52
52
  --help|-h) print_usage; exit 0 ;;
53
- *) echo "Unknown argument: $1" >&2; print_usage >&2; exit 2 ;;
53
+ *) print_usage >&2; unknown_arg_exit "$1" ;;
54
54
  esac
55
55
  done
56
56
 
@@ -61,7 +61,7 @@ while [[ $# -gt 0 ]]; do
61
61
  --outline-file) [ $# -ge 2 ] || error_exit "--outline-file requires a value"; OUTLINE_FILE="$2"; shift 2 ;;
62
62
  --account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
63
63
  --help|-h) print_usage; exit 0 ;;
64
- *) error_exit "Unknown option: $1" ;;
64
+ *) unknown_arg_exit "$1" ;;
65
65
  esac
66
66
  done
67
67
  if [ -n "$INPUT_JSON" ]; then
@@ -55,7 +55,7 @@ while [[ $# -gt 0 ]]; do
55
55
  --id) [ $# -ge 2 ] || error_exit "--id requires a value"; ID="$2"; shift 2 ;;
56
56
  --account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
57
57
  --help|-h) print_usage; exit 0 ;;
58
- *) error_exit "Unknown option: $1" ;;
58
+ *) unknown_arg_exit "$1" ;;
59
59
  esac
60
60
  done
61
61
  if [ -n "$INPUT_JSON" ]; then
@@ -55,7 +55,7 @@ while [[ $# -gt 0 ]]; do
55
55
  --assignee) [ $# -ge 2 ] || error_exit "--assignee requires a value"; ASSIGNEE="$2"; shift 2 ;;
56
56
  --question) QUESTION="true"; shift ;;
57
57
  --help|-h) print_usage; exit 0 ;;
58
- *) error_exit "Unknown option: $1" ;;
58
+ *) unknown_arg_exit "$1" ;;
59
59
  esac
60
60
  done
61
61
 
@@ -61,7 +61,7 @@ while [[ $# -gt 0 ]]; do
61
61
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
62
62
  INPUT_JSON="$1"; shift
63
63
  else
64
- error_exit "Unknown argument: $1. Use --help for usage."
64
+ unknown_arg_exit "$1"
65
65
  fi
66
66
  ;;
67
67
  esac
@@ -72,7 +72,7 @@ while [[ $# -gt 0 ]]; do
72
72
  INPUT_JSON="$1"
73
73
  shift
74
74
  else
75
- error_exit "Unknown argument: $1. Use --help for usage."
75
+ unknown_arg_exit "$1"
76
76
  fi
77
77
  ;;
78
78
  esac
@@ -43,7 +43,7 @@ while [[ $# -gt 0 ]]; do
43
43
  [ $# -ge 2 ] || error_exit "--session requires a value"
44
44
  SESSION_NAME="$2"; shift 2 ;;
45
45
  --help|-h) print_usage; exit 0 ;;
46
- *) error_exit "Unknown option: $1" ;;
46
+ *) unknown_arg_exit "$1" ;;
47
47
  esac
48
48
  done
49
49
 
@@ -44,7 +44,7 @@ while [[ $# -gt 0 ]]; do
44
44
  --result) [ $# -ge 2 ] || error_exit "--result requires a value"; RESULT="$2"; shift 2 ;;
45
45
  --evidence) [ $# -ge 2 ] || error_exit "--evidence requires a value"; EVIDENCE="$2"; shift 2 ;;
46
46
  --help|-h) print_usage; exit 0 ;;
47
- *) error_exit "Unknown option: $1" ;;
47
+ *) unknown_arg_exit "$1" ;;
48
48
  esac
49
49
  done
50
50
 
@@ -73,7 +73,7 @@ while [[ $# -gt 0 ]]; do
73
73
  --steps) [ $# -ge 2 ] || error_exit "--steps requires a value"; STEPS=$(add_steps "$STEPS" "$2" split); shift 2 ;;
74
74
  --step) [ $# -ge 2 ] || error_exit "--step requires a value"; STEPS=$(add_steps "$STEPS" "$2"); shift 2 ;;
75
75
  --help|-h) print_usage; exit 0 ;;
76
- *) error_exit "Unknown option: $1" ;;
76
+ *) unknown_arg_exit "$1" ;;
77
77
  esac
78
78
  done
79
79
  if [ -n "$INPUT_JSON" ]; then
@@ -53,7 +53,7 @@ while [[ $# -gt 0 ]]; do
53
53
  case "$1" in
54
54
  --create) [ $# -ge 2 ] || error_exit "--create requires a value"; CREATE="$2"; shift 2 ;;
55
55
  --help|-h) print_usage; exit 0 ;;
56
- *) error_exit "Unknown option: $1" ;;
56
+ *) unknown_arg_exit "$1" ;;
57
57
  esac
58
58
  done
59
59
  if [ -n "$INPUT_JSON" ]; then
@@ -71,7 +71,7 @@ check "json create" "$(last '.body.name')" '"Holiday"'
71
71
  OUT=$(run --create no-grant || true)
72
72
  check "not connected: reason" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
73
73
  check "not connected: hint" "$(printf '%s' "$OUT" | jq -r .hint)" "https://cloud/start?token=j"
74
- check "unknown flag" "$(run_err --bogus | jq -r .error)" "Unknown option: --bogus"
74
+ check "unknown flag" "$(run_err --bogus | jq -r .error)" "Unknown argument: --bogus"
75
75
 
76
76
  echo "todo-lists: $PASS passed, $FAIL failed"
77
77
  [ "$FAIL" -eq 0 ]
@@ -59,7 +59,7 @@ while [[ $# -gt 0 ]]; do
59
59
  --all) ALL="1"; shift ;;
60
60
  --limit|-n) [ $# -ge 2 ] || error_exit "--limit requires a value"; LIMIT="$2"; shift 2 ;;
61
61
  --help|-h) print_usage; exit 0 ;;
62
- *) error_exit "Unknown option: $1" ;;
62
+ *) unknown_arg_exit "$1" ;;
63
63
  esac
64
64
  done
65
65
  if [ -n "$INPUT_JSON" ]; then
@@ -103,7 +103,7 @@ while [[ $# -gt 0 ]]; do
103
103
  --remove-steps) [ $# -ge 2 ] || error_exit "--remove-steps requires a value"; REMOVE_STEPS=$(add_steps "$REMOVE_STEPS" "$2" split); shift 2 ;;
104
104
  --remove-step) [ $# -ge 2 ] || error_exit "--remove-step requires a value"; REMOVE_STEPS=$(add_steps "$REMOVE_STEPS" "$2"); shift 2 ;;
105
105
  --help|-h) print_usage; exit 0 ;;
106
- *) error_exit "Unknown option: $1" ;;
106
+ *) unknown_arg_exit "$1" ;;
107
107
  esac
108
108
  done
109
109
  if [ -n "$INPUT_JSON" ]; then
@@ -37,7 +37,7 @@ while [[ $# -gt 0 ]]; do
37
37
  --name) [ $# -ge 2 ] || error_exit "--name requires a value"; NAME="$2"; shift 2 ;;
38
38
  --app) [ $# -ge 2 ] || error_exit "--app requires a value"; APP="$2"; shift 2 ;;
39
39
  --help|-h) print_usage; exit 0 ;;
40
- *) if [ -z "$TEMPLATE" ] && [ "${1:0:1}" != "-" ]; then TEMPLATE="$1"; shift; else error_exit "Unknown option: $1"; fi ;;
40
+ *) if [ -z "$TEMPLATE" ] && [ "${1:0:1}" != "-" ]; then TEMPLATE="$1"; shift; else unknown_arg_exit "$1"; fi ;;
41
41
  esac
42
42
  done
43
43
 
@@ -78,8 +78,7 @@ while [[ $# -gt 0 ]]; do
78
78
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
79
79
  INPUT_JSON="$1"; shift
80
80
  else
81
- echo '{"error":"Unknown argument: '"$1"'"}' >&2
82
- exit 1
81
+ unknown_arg_exit "$1"
83
82
  fi
84
83
  ;;
85
84
  esac
@@ -46,7 +46,7 @@ while [[ $# -gt 0 ]]; do
46
46
  --text) [ $# -ge 2 ] || error_exit "--text requires a value"; TEXT="$2"; shift 2 ;;
47
47
  --text-file) [ $# -ge 2 ] || error_exit "--text-file requires a value"; TEXT_FILE="$2"; shift 2 ;;
48
48
  --help|-h) print_usage; exit 0 ;;
49
- *) error_exit "Unknown option: $1" ;;
49
+ *) unknown_arg_exit "$1" ;;
50
50
  esac
51
51
  done
52
52
 
@@ -64,7 +64,7 @@ check "404: reason" "$(printf '%s' "$OUT" | jq -r .reason)" "chat_not_found"
64
64
  check "missing chat" "$(run_err --text hi)" "Missing required parameter: chat (--chat)"
65
65
  check "missing text" "$(run_err --chat 491@s.whatsapp.net)" "Missing required parameter: text (--text or --text-file)"
66
66
  check "missing text file" "$(run_err --chat x --text-file /nonexistent/file)" "text file not found: /nonexistent/file"
67
- check "unknown option errors" "$(run_err --send)" "Unknown option: --send"
67
+ check "unknown option errors" "$(run_err --send)" "Unknown argument: --send"
68
68
 
69
69
  echo "=== Results: $PASS passed, $FAIL failed ==="
70
70
  [ "$FAIL" -eq 0 ]
@@ -43,7 +43,7 @@ while [[ $# -gt 0 ]]; do
43
43
  --limit|-n) [ $# -ge 2 ] || error_exit "--limit requires a value"; LIMIT="$2"; shift 2 ;;
44
44
  --include-groups) INCLUDE_GROUPS=1; shift ;;
45
45
  --help|-h) print_usage; exit 0 ;;
46
- *) error_exit "Unknown option: $1" ;;
46
+ *) unknown_arg_exit "$1" ;;
47
47
  esac
48
48
  done
49
49
 
@@ -61,7 +61,7 @@ OUT=$(CREWLY_SESSION_NAME=test-agent CREWLY_API_URL="http://127.0.0.1:${PORT}" b
61
61
  check "500: exit code" "$RC" "1"
62
62
  check "500: reason" "$(printf '%s' "$OUT" | jq -r .reason)" "db locked"
63
63
 
64
- check "unknown option errors" "$(run_err --bogus)" "Unknown option: --bogus"
64
+ check "unknown option errors" "$(run_err --bogus)" "Unknown argument: --bogus"
65
65
  check "--limit needs a value" "$(run_err --limit)" "--limit requires a value"
66
66
 
67
67
  echo "=== Results: $PASS passed, $FAIL failed ==="
@@ -51,7 +51,7 @@ while [[ $# -gt 0 ]]; do
51
51
  --before) [ $# -ge 2 ] || error_exit "--before requires a value"; BEFORE="$2"; shift 2 ;;
52
52
  --chats) LIST_CHATS=1; shift ;;
53
53
  --help|-h) print_usage; exit 0 ;;
54
- *) error_exit "Unknown option: $1" ;;
54
+ *) unknown_arg_exit "$1" ;;
55
55
  esac
56
56
  done
57
57
 
@@ -78,7 +78,7 @@ check "404: exit code" "$RC" "1"
78
78
  check "404: reason" "$OUT" '{"success":false,"reason":"chat_not_found","message":"Unknown chat: nobody@s.whatsapp.net"}'
79
79
 
80
80
  check "needs a mode" "$(run_err)" "Pass --chat <jid>, --q <text>, or --chats"
81
- check "unknown option errors" "$(run_err --bogus)" "Unknown option: --bogus"
81
+ check "unknown option errors" "$(run_err --bogus)" "Unknown argument: --bogus"
82
82
 
83
83
  echo "=== Results: $PASS passed, $FAIL failed ==="
84
84
  [ "$FAIL" -eq 0 ]
@@ -41,7 +41,7 @@ while [[ $# -gt 0 ]]; do
41
41
  case "$1" in
42
42
  --draft|-d) [ $# -ge 2 ] || error_exit "--draft requires a value"; DRAFT="$2"; shift 2 ;;
43
43
  --help|-h) print_usage; exit 0 ;;
44
- *) error_exit "Unknown option: $1" ;;
44
+ *) unknown_arg_exit "$1" ;;
45
45
  esac
46
46
  done
47
47
 
@@ -73,7 +73,7 @@ check "no session: refused" "$OK" "yes"
73
73
  check "no session: no request made" "$(cat "$STUB_LOG")" ""
74
74
 
75
75
  check "missing draft" "$(run_err)" "Missing required parameter: draft (--draft)"
76
- check "unknown option errors" "$(run_err --force)" "Unknown option: --force"
76
+ check "unknown option errors" "$(run_err --force)" "Unknown argument: --force"
77
77
 
78
78
  echo "=== Results: $PASS passed, $FAIL failed ==="
79
79
  [ "$FAIL" -eq 0 ]
@@ -83,7 +83,7 @@ EOF
83
83
  INPUT_JSON="$1"
84
84
  shift
85
85
  else
86
- error_exit "Unknown argument: $1"
86
+ unknown_arg_exit "$1"
87
87
  fi
88
88
  ;;
89
89
  esac
@@ -140,7 +140,7 @@ while [[ $# -gt 0 ]]; do
140
140
  INPUT_JSON="$1"
141
141
  shift
142
142
  else
143
- error_exit "Unknown argument: $1. Use --help for usage."
143
+ unknown_arg_exit "$1"
144
144
  fi
145
145
  ;;
146
146
  esac
@@ -25,7 +25,7 @@ while [[ $# -gt 0 ]]; do
25
25
  --references) [ $# -ge 2 ] || error_exit "--references requires a value"; REFS="$2"; shift 2 ;;
26
26
  --account-id) [ $# -ge 2 ] || error_exit "--account-id requires a value"; ACCT="$2"; shift 2 ;;
27
27
  --help|-h) sed -n 2,6p "$0"; exit 0 ;;
28
- *) error_exit "Unknown option: $1" ;;
28
+ *) unknown_arg_exit "$1" ;;
29
29
  esac
30
30
  done
31
31
  if [ -n "$INPUT_JSON" ]; then
@@ -57,7 +57,7 @@ EOF
57
57
  INPUT_JSON="$1"
58
58
  shift
59
59
  else
60
- error_exit "Unknown argument: $1"
60
+ unknown_arg_exit "$1"
61
61
  fi
62
62
  ;;
63
63
  esac
@@ -54,7 +54,7 @@ EOF
54
54
  INPUT_JSON="$1"
55
55
  shift
56
56
  else
57
- error_exit "Unknown argument: $1"
57
+ unknown_arg_exit "$1"
58
58
  fi
59
59
  ;;
60
60
  esac
@@ -28,7 +28,7 @@ Materialize: execute.sh --materialize '<plan JSON from the plan step>'
28
28
  HELP
29
29
  exit 0
30
30
  ;;
31
- *) error_exit "Unknown argument: $1" ;;
31
+ *) unknown_arg_exit "$1" ;;
32
32
  esac
33
33
  done
34
34
 
@@ -180,7 +180,7 @@ while [[ $# -gt 0 ]]; do
180
180
  INPUT_JSON="$1"
181
181
  shift
182
182
  else
183
- error_exit "Unknown argument: $1"
183
+ unknown_arg_exit "$1"
184
184
  fi
185
185
  ;;
186
186
  esac
@@ -66,7 +66,7 @@ while [[ $# -gt 0 ]]; do
66
66
  INPUT_JSON="$1"
67
67
  shift
68
68
  else
69
- error_exit "Unknown argument: $1. Use --help for usage."
69
+ unknown_arg_exit "$1"
70
70
  fi
71
71
  ;;
72
72
  esac
@@ -69,7 +69,7 @@ while [[ $# -gt 0 ]]; do
69
69
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
70
70
  INPUT_JSON="$1"; shift
71
71
  else
72
- error_exit "Unknown argument: $1"
72
+ unknown_arg_exit "$1"
73
73
  fi
74
74
  ;;
75
75
  esac
@@ -49,7 +49,7 @@ while [[ $# -gt 0 ]]; do
49
49
  --switch-account) SWITCH=true; shift ;;
50
50
  --account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
51
51
  --help|-h) print_usage; exit 0 ;;
52
- *) error_exit "Unknown option: $1" ;;
52
+ *) unknown_arg_exit "$1" ;;
53
53
  esac
54
54
  done
55
55
  if [ -n "$INPUT_JSON" ]; then
@@ -72,7 +72,7 @@ check "other agents refused" "$(printf '%s' "$OUT" | jq -r .reason)" "orchestrat
72
72
 
73
73
  check "missing harness" "$(run_err)" "Missing required parameter: harness (--harness)"
74
74
  check "path injection refused" "$(run_err --harness '../orc')" "Invalid harness: ../orc (use claude, codex or antigravity)"
75
- check "unknown option" "$(run_err --yes)" "Unknown option: --yes"
75
+ check "unknown option" "$(run_err --yes)" "Unknown argument: --yes"
76
76
  check "invalid account" "$(run_err --harness claude --account '../x')" "Invalid account: ../x (lower-case letters, digits, - or _)"
77
77
 
78
78
  echo "=== Results: $PASS passed, $FAIL failed ==="
@@ -88,7 +88,7 @@ while [[ $# -gt 0 ]]; do
88
88
  INPUT_JSON="$1"
89
89
  shift
90
90
  else
91
- error_exit "Unknown argument: $1"
91
+ unknown_arg_exit "$1"
92
92
  fi
93
93
  ;;
94
94
  esac
@@ -78,7 +78,7 @@ while [[ $# -gt 0 ]]; do
78
78
  INPUT_JSON="$1"
79
79
  shift
80
80
  else
81
- error_exit "Unknown argument: $1"
81
+ unknown_arg_exit "$1"
82
82
  fi
83
83
  ;;
84
84
  esac
@@ -33,7 +33,7 @@ while [[ $# -gt 0 ]]; do
33
33
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
34
34
  INPUT_JSON="$1"; shift
35
35
  else
36
- echo '{"error":"Unknown argument: '"$1"'"}' >&2; exit 1
36
+ unknown_arg_exit "$1"
37
37
  fi ;;
38
38
  esac
39
39
  done
@@ -108,7 +108,7 @@ while [[ $# -gt 0 ]]; do
108
108
  INPUT_JSON="$1"
109
109
  shift
110
110
  else
111
- error_exit "Unknown argument: $1"
111
+ unknown_arg_exit "$1"
112
112
  fi
113
113
  ;;
114
114
  esac
@@ -22,7 +22,7 @@ if [ "${1:-}" != "" ] && [ "${1#--}" != "${1}" ]; then
22
22
  --session|--sessionName|--to) flag_value "$@"; FLAG_SESSION="$2"; shift 2 ;;
23
23
  --message) flag_value "$@"; FLAG_MESSAGE="$2"; shift 2 ;;
24
24
  --force) FLAG_FORCE="true"; shift ;;
25
- *) error_exit "Unknown option: $1" ;;
25
+ *) unknown_arg_exit "$1" ;;
26
26
  esac
27
27
  done
28
28
  INPUT=$(jq -n --arg s "$FLAG_SESSION" --arg m "$FLAG_MESSAGE" --arg f "$FLAG_FORCE" \
@@ -91,7 +91,7 @@ run --to --message hi
91
91
  check "--to followed by another flag is refused" "Flag --to needs a value" "$OUT"
92
92
 
93
93
  run --bogus x
94
- check "unknown flag is refused" "Unknown option: --bogus" "$OUT"
94
+ check "unknown flag is refused" "Unknown argument: --bogus" "$OUT"
95
95
 
96
96
  rm -rf "$STUB_DIR"
97
97
  echo ""
@@ -52,7 +52,7 @@ while [[ $# -gt 0 ]]; do
52
52
  exit 0
53
53
  ;;
54
54
  *)
55
- error_exit "Unknown argument: $1"
55
+ unknown_arg_exit "$1"
56
56
  ;;
57
57
  esac
58
58
  done
@@ -38,7 +38,7 @@ while [[ $# -gt 0 ]]; do
38
38
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
39
39
  INPUT_JSON="$1"; shift
40
40
  else
41
- echo '{"error":"Unknown argument: '"$1"'"}' >&2; exit 1
41
+ unknown_arg_exit "$1"
42
42
  fi ;;
43
43
  esac
44
44
  done
@@ -50,7 +50,7 @@ EOF
50
50
  --) shift; break ;;
51
51
  *)
52
52
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then INPUT_JSON="$1"; shift
53
- else error_exit "Unknown argument: $1"; fi ;;
53
+ else unknown_arg_exit "$1"; fi ;;
54
54
  esac
55
55
  done
56
56
 
@@ -78,7 +78,7 @@ EOF
78
78
  --) shift; break ;;
79
79
  *)
80
80
  if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then INPUT_JSON="$1"; shift
81
- else error_exit "Unknown argument: $1"; fi ;;
81
+ else unknown_arg_exit "$1"; fi ;;
82
82
  esac
83
83
  done
84
84