@lesscap/baton-cli 0.7.10 → 0.7.11
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.
- package/dist/baton.mjs +33 -6
- package/package.json +1 -1
package/dist/baton.mjs
CHANGED
|
@@ -6706,9 +6706,23 @@ var startedMessageIds = (events) => {
|
|
|
6706
6706
|
}
|
|
6707
6707
|
return ids;
|
|
6708
6708
|
};
|
|
6709
|
+
var messageLoopId = (event) => {
|
|
6710
|
+
if (event.type !== "user_message") return void 0;
|
|
6711
|
+
const id = event.payload?.loopId;
|
|
6712
|
+
return typeof id === "number" ? id : void 0;
|
|
6713
|
+
};
|
|
6709
6714
|
var unstartedUserMessages = (events) => {
|
|
6710
6715
|
const started = startedMessageIds(events);
|
|
6711
|
-
|
|
6716
|
+
const latest = /* @__PURE__ */ new Map();
|
|
6717
|
+
events.forEach((event) => {
|
|
6718
|
+
const loopId = messageLoopId(event);
|
|
6719
|
+
if (loopId !== void 0) latest.set(loopId, Math.max(latest.get(loopId) ?? -1, event.sequence));
|
|
6720
|
+
});
|
|
6721
|
+
return events.filter((event) => {
|
|
6722
|
+
if (event.type !== "user_message" || started.has(event.id)) return false;
|
|
6723
|
+
const loopId = messageLoopId(event);
|
|
6724
|
+
return loopId === void 0 || event.sequence === latest.get(loopId);
|
|
6725
|
+
});
|
|
6712
6726
|
};
|
|
6713
6727
|
var opensTurn = (e) => e.type === "user_message" || e.type === "turn_start";
|
|
6714
6728
|
var closesTurn = (e) => e.type === "turn_complete" || e.type === "turn_error";
|
|
@@ -8628,16 +8642,27 @@ var runDaemon = async (config, deps, signal) => {
|
|
|
8628
8642
|
log(`bin: ${claudeExecutable() ?? "(sdk bundled)"} cwd: ${config.worktreePath}`);
|
|
8629
8643
|
log(`runtime env keys: ${maskedEnvKeys(deps.env)}`);
|
|
8630
8644
|
const state = { seen: /* @__PURE__ */ new Set() };
|
|
8631
|
-
|
|
8645
|
+
let pendingQueue = [];
|
|
8646
|
+
const latestLoops = /* @__PURE__ */ new Map();
|
|
8632
8647
|
let busy = false;
|
|
8633
8648
|
let reconciling = false;
|
|
8634
8649
|
let lastActivity = Date.now();
|
|
8635
8650
|
let currentTurn;
|
|
8651
|
+
const trackLoopMessage = (event) => {
|
|
8652
|
+
const loopId = messageLoopId(event);
|
|
8653
|
+
if (loopId === void 0) return true;
|
|
8654
|
+
if (event.sequence < (latestLoops.get(loopId) ?? -1)) return false;
|
|
8655
|
+
latestLoops.set(loopId, event.sequence);
|
|
8656
|
+
pendingQueue = pendingQueue.filter(
|
|
8657
|
+
(queued) => messageLoopId(queued) !== loopId || queued.sequence >= event.sequence
|
|
8658
|
+
);
|
|
8659
|
+
return true;
|
|
8660
|
+
};
|
|
8636
8661
|
const drain = async () => {
|
|
8637
|
-
if (busy) return;
|
|
8662
|
+
if (busy || reconciling) return;
|
|
8638
8663
|
busy = true;
|
|
8639
8664
|
try {
|
|
8640
|
-
while (pendingQueue.length > 0 && !signal.aborted) {
|
|
8665
|
+
while (pendingQueue.length > 0 && !signal.aborted && !reconciling) {
|
|
8641
8666
|
const msg = pendingQueue.shift();
|
|
8642
8667
|
if (!msg) break;
|
|
8643
8668
|
const resuming = isAgentConversationResumable(config);
|
|
@@ -8673,10 +8698,11 @@ var runDaemon = async (config, deps, signal) => {
|
|
|
8673
8698
|
reconciling = true;
|
|
8674
8699
|
try {
|
|
8675
8700
|
const events = await deps.worker.listEvents();
|
|
8701
|
+
events.forEach(trackLoopMessage);
|
|
8676
8702
|
const pending = unstartedUserMessages(events);
|
|
8677
8703
|
let added = 0;
|
|
8678
8704
|
for (const ev of pending) {
|
|
8679
|
-
if (state.seen.has(ev.sequence)) continue;
|
|
8705
|
+
if (state.seen.has(ev.sequence) || !trackLoopMessage(ev)) continue;
|
|
8680
8706
|
state.seen.add(ev.sequence);
|
|
8681
8707
|
pendingQueue.push(ev);
|
|
8682
8708
|
added++;
|
|
@@ -8684,7 +8710,6 @@ var runDaemon = async (config, deps, signal) => {
|
|
|
8684
8710
|
if (added > 0) {
|
|
8685
8711
|
log(`reconciled ${added} queued message(s) from transcript`);
|
|
8686
8712
|
lastActivity = Date.now();
|
|
8687
|
-
void drain();
|
|
8688
8713
|
} else if (pendingQueue.length === 0 && !busy && !currentTurn && isAgentWorking(events)) {
|
|
8689
8714
|
await deps.worker.emitEvent("turn_error", {
|
|
8690
8715
|
message: "turn abandoned \u2014 runner restarted",
|
|
@@ -8696,6 +8721,7 @@ var runDaemon = async (config, deps, signal) => {
|
|
|
8696
8721
|
log(`reconcile failed: ${String(e)}`);
|
|
8697
8722
|
} finally {
|
|
8698
8723
|
reconciling = false;
|
|
8724
|
+
if (pendingQueue.length > 0) void drain();
|
|
8699
8725
|
}
|
|
8700
8726
|
};
|
|
8701
8727
|
const es = subscribeStream(
|
|
@@ -8706,6 +8732,7 @@ var runDaemon = async (config, deps, signal) => {
|
|
|
8706
8732
|
state.seen,
|
|
8707
8733
|
log,
|
|
8708
8734
|
(ev) => {
|
|
8735
|
+
if (!trackLoopMessage(ev)) return;
|
|
8709
8736
|
lastActivity = Date.now();
|
|
8710
8737
|
pendingQueue.push(ev);
|
|
8711
8738
|
void drain();
|