crewly 1.20.439 → 1.20.440

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.
@@ -67,3 +67,7 @@ Output: `{ "data": { "count": N, "hits": [ { "id", "time", "channelId", "channel
67
67
  - Try a shorter or different keyword when nothing comes back; CJK text is
68
68
  matched as written, without word splitting.
69
69
  - To read around a hit, search again with `--channel` and a one-day range.
70
+
71
+ ## What it does not search
72
+
73
+ Replies a team member posts with `reply --work-item`, `--new-thread` or `--ticket` can go straight to Slack and are not stored in this chat history. The result carries a `note` saying so. A missing hit does **not** mean such a post failed: the `reply` call itself returns `slackChannelId` and `messageTs` as proof it landed. Ask the member for those, or read the Slack thread, before posting the answer again.
@@ -65,4 +65,16 @@ if [ "${CREWLY_SKILL_DRY_RUN:-}" = "1" ]; then
65
65
  exit 0
66
66
  fi
67
67
 
68
- api_call GET "$ENDPOINT"
68
+ # Posts a team member makes with `reply --work-item` / `--new-thread` go straight to
69
+ # Slack and are not stored in the chat history this searches (CREW-877). Say so in
70
+ # the output: an empty or partial result is not proof that such a post failed. The
71
+ # reply itself returned the proof (slackChannelId + messageTs) to the member.
72
+ NOTE="Not searched: replies a team member posts with 'reply --work-item', '--new-thread' or '--ticket' can go straight to Slack and are then not in this history. A missing hit does not mean such a post failed; ask the member for its messageTs (the reply returns it) or read the Slack thread."
73
+ if ! RESP=$(api_call GET "$ENDPOINT"); then
74
+ exit 1
75
+ fi
76
+ if printf '%s' "$RESP" | jq -e 'type == "object"' >/dev/null 2>&1; then
77
+ printf '%s' "$RESP" | jq -c --arg note "$NOTE" '. + {note: $note}'
78
+ else
79
+ printf '%s\n' "$RESP"
80
+ fi
@@ -20,5 +20,25 @@ assert_contains "missing --query is an error" "--query is required" "$(bash "$SC
20
20
  assert_contains "bad --limit is an error" "--limit must be a number" "$(bash "$SCRIPT_DIR/execute.sh" --query x --limit abc 2>&1 || true)"
21
21
  assert_contains "--help prints usage" "Usage:" "$(bash "$SCRIPT_DIR/execute.sh" --help)"
22
22
 
23
+ # The result carries a note that work-item posts are not searched (CREW-877).
24
+ unset CREWLY_SKILL_DRY_RUN
25
+ PORT=18877
26
+ python3 -u - <<'PY' >/dev/null 2>&1 &
27
+ from http.server import BaseHTTPRequestHandler, HTTPServer
28
+ class H(BaseHTTPRequestHandler):
29
+ def do_GET(self):
30
+ self.send_response(200); self.send_header('Content-Type', 'application/json'); self.end_headers()
31
+ self.wfile.write(b'{"success":true,"data":{"count":0,"hits":[]}}')
32
+ def log_message(self, *a, **k): pass
33
+ HTTPServer(('127.0.0.1', 18877), H).serve_forever()
34
+ PY
35
+ STUB_PID=$!
36
+ trap 'kill "$STUB_PID" >/dev/null 2>&1' EXIT
37
+ for i in $(seq 1 30); do curl -s -o /dev/null -m 0.2 "http://127.0.0.1:${PORT}/" 2>/dev/null && break; sleep 0.1; done
38
+ OUT=$(CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$SCRIPT_DIR/execute.sh" --query anything 2>/dev/null)
39
+ assert_eq "result keeps its data" "0" "$(printf '%s' "$OUT" | jq -r '.data.count')"
40
+ assert_contains "result says work-item posts are not searched" "reply --work-item" "$(printf '%s' "$OUT" | jq -r '.note')"
41
+ assert_eq "output is one line" "1" "$(printf '%s\n' "$OUT" | wc -l | tr -d ' ')"
42
+
23
43
  echo "=== Results: $PASS passed, $FAIL failed ==="
24
44
  [ "$FAIL" -eq 0 ]
@@ -1,4 +1,4 @@
1
1
  {
2
- "commit": "482ac2aedc409da8f790e36ed583ca81123e4ac2",
3
- "builtAt": "2026-10-26T11:39:05.432Z"
2
+ "commit": "2972ea36bb1a5c6d904ef44da19cca160a3da99f",
3
+ "builtAt": "2026-10-26T12:03:10.159Z"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewly",
3
- "version": "1.20.439",
3
+ "version": "1.20.440",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
6
6
  "workspaces": [