@botbuddy/cli 1.64.14 → 1.64.15

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.
@@ -1,7 +1,7 @@
1
1
  {
2
- "release_version": "1.64.14",
3
- "source_commit": "2bea99f6e692232d6694356e0fc474daebba622e",
4
- "source_sha256": "abb141ad30727d4a9f32819a3e26be122ab750a919dfc21f7813d6dbd3bcaaa3",
2
+ "release_version": "1.64.15",
3
+ "source_commit": "e14ac43a2273552539b7eda276aaa931cae2281f",
4
+ "source_sha256": "91035987b6b706fd891dbc9dfa9506129496bd12d112095b77918c26cab0f3f7",
5
5
  "target": "darwin-arm64",
6
- "sha256": "2ee00d7621d20c09863a0dc96f862a99ed10a3557ba15df595e512f433020a7c"
6
+ "sha256": "209db97b00d1740ab60be6b3b198cdd9f227ef7964434da5b7025a78fcf59f8c"
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- "release_version": "1.64.14",
3
- "source_commit": "2bea99f6e692232d6694356e0fc474daebba622e",
4
- "source_sha256": "abb141ad30727d4a9f32819a3e26be122ab750a919dfc21f7813d6dbd3bcaaa3",
2
+ "release_version": "1.64.15",
3
+ "source_commit": "e14ac43a2273552539b7eda276aaa931cae2281f",
4
+ "source_sha256": "91035987b6b706fd891dbc9dfa9506129496bd12d112095b77918c26cab0f3f7",
5
5
  "target": "linux-x64",
6
- "sha256": "af268c0f266b387fadc180451ef738760eb95c409c588cc7de62c9ee2b18c8f9"
6
+ "sha256": "fdc1f4af17059c0edd72fd5c776b0b33a564ffaf022610b51852a8f24768fc25"
7
7
  }
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "schema_version": 1,
3
- "release_version": "1.64.14",
4
- "source_commit": "2bea99f6e692232d6694356e0fc474daebba622e",
5
- "source_sha256": "abb141ad30727d4a9f32819a3e26be122ab750a919dfc21f7813d6dbd3bcaaa3",
3
+ "release_version": "1.64.15",
4
+ "source_commit": "e14ac43a2273552539b7eda276aaa931cae2281f",
5
+ "source_sha256": "91035987b6b706fd891dbc9dfa9506129496bd12d112095b77918c26cab0f3f7",
6
6
  "targets": {
7
7
  "darwin-arm64": {
8
8
  "goos": "darwin",
9
9
  "goarch": "arm64",
10
10
  "binary": "daemon/bin/darwin-arm64/botbuddy-daemon",
11
- "sha256": "2ee00d7621d20c09863a0dc96f862a99ed10a3557ba15df595e512f433020a7c",
11
+ "sha256": "209db97b00d1740ab60be6b3b198cdd9f227ef7964434da5b7025a78fcf59f8c",
12
12
  "mode": "0755"
13
13
  },
14
14
  "linux-x64": {
15
15
  "goos": "linux",
16
16
  "goarch": "amd64",
17
17
  "binary": "daemon/bin/linux-x64/botbuddy-daemon",
18
- "sha256": "af268c0f266b387fadc180451ef738760eb95c409c588cc7de62c9ee2b18c8f9",
18
+ "sha256": "fdc1f4af17059c0edd72fd5c776b0b33a564ffaf022610b51852a8f24768fc25",
19
19
  "mode": "0755"
20
20
  }
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botbuddy/cli",
3
- "version": "1.64.14",
3
+ "version": "1.64.15",
4
4
  "description": "BotBuddy \u2014 Swarm coordination CLI for multi-agent workflows",
5
5
  "type": "module",
6
6
  "bin": {
package/src/wait-core.mjs CHANGED
@@ -225,6 +225,17 @@ const VALIDATORS = {
225
225
  if (!CANONICAL_UUID_RE.test(jobId)) throw new Error("staging-pool-refill id must be a canonical UUID");
226
226
  return { jobId };
227
227
  },
228
+ // BOT-2888: a reporter waits for a revision after the last consumed update.
229
+ // The server binds the report to the registering agent and tenant.
230
+ feedback: (p, raw) => {
231
+ const match = /^\s*id\s*=\s*([0-9A-Fa-f-]+)\s*,\s*after\s*=\s*(0|[1-9][0-9]*)\s*$/.exec(raw ?? "");
232
+ if (!match || Object.keys(p).length !== 2 || p.id !== match[1] || String(p.after) !== match[2]) {
233
+ throw new Error("feedback needs exactly id=<feedback UUID>,after=<last consumed revision>");
234
+ }
235
+ const feedbackId = match[1].toLowerCase(), after = Number(match[2]);
236
+ if (!CANONICAL_UUID_RE.test(feedbackId) || !Number.isSafeInteger(after)) throw new Error("feedback requires a canonical UUID and safe nonnegative revision");
237
+ return { feedbackId, after };
238
+ },
228
239
  // BOT-2629: this is deliberately a dedicated condition rather than a raw
229
240
  // event escape hatch. The UUID is chosen before dispatch and the exact subject
230
241
  // prevents another run on the same idle/re-adopted lease waking this waiter.
@@ -1309,6 +1320,11 @@ function conditionMatchesSignal(condition, signal, waitSessionId) {
1309
1320
  signal.subject_key === `staging-pool-refill:${params.jobId}` &&
1310
1321
  signal.payload?.job_id === params.jobId &&
1311
1322
  ["completed", "failed"].includes(signal.payload?.status);
1323
+ case "feedback":
1324
+ return signal.signal_type === "feedback_update" &&
1325
+ signal.subject_key === `feedback:${params.feedbackId}` &&
1326
+ signal.payload?.feedback_id === params.feedbackId &&
1327
+ Number.isSafeInteger(signal.payload?.revision) && signal.payload.revision > params.after;
1312
1328
  case "stack-run":
1313
1329
  return signal.signal_type === "stack_run" && signal.subject_key === `stack-run:${params.id}` &&
1314
1330
  signal.payload?.run_id === params.id && Number.isInteger(signal.payload?.exit_code);
@@ -1523,6 +1539,7 @@ function conditionMatchesSignal(condition, signal, waitSessionId) {
1523
1539
  export function signalTenantBlocked(signal, sessionTenant) {
1524
1540
  if (sessionTenant === undefined) return false;
1525
1541
  if (signal.tenant_id == null) return false;
1542
+ if (signal.signal_type === "feedback_update") return signal.tenant_id !== sessionTenant;
1526
1543
  // Mirror the relay's precedence (recipient > owner > tenant): a signal that is
1527
1544
  // owner- or recipient-scoped keeps THAT isolation and is never tenant-fenced, even
1528
1545
  // though owner-scoped pr_review/ci_run also carry a tenant_id — otherwise a caller who
package/src/wait.mjs CHANGED
@@ -175,6 +175,9 @@ CONDITIONS (TYPE:key=val,key=val — repeat for several; --any wakes on the fir
175
175
  completed or failed. This is the only condition of its
176
176
  wait and is available to each tenant agent that requested
177
177
  the deduped job; its terminal receipt is safe to display.
178
+ feedback:id=<feedback UUID>,after=<revision>
179
+ Wait for a later update to your own feedback; use the
180
+ revision you last consumed and read/acknowledge updates.
178
181
  stack-run:id=<run UUID> one named bb stack run reaching its terminal outcome
179
182
  (BOT-2629). Choose the UUID BEFORE dispatch and pass it as
180
183
  bb stack run --run-id <UUID>; the receipt carries exit_code,
@@ -660,6 +663,7 @@ async function registerWait(opts, conditions, deadlineIso) {
660
663
  "command_run_single_condition_required",
661
664
  "staging_pool_refill_unavailable",
662
665
  "staging_pool_refill_single_condition_required",
666
+ "feedback_wait_unavailable",
663
667
  ]);
664
668
  if (INVALID_CONDITION_CODES.has(body.error)) {
665
669
  const err = new Error(body.detail || body.error);