office-core 0.1.2 → 0.1.3
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.
|
@@ -182,7 +182,6 @@ async function processRoomMessages(runtime) {
|
|
|
182
182
|
}
|
|
183
183
|
return;
|
|
184
184
|
}
|
|
185
|
-
const runnableSessions = Array.from(sessions.values()).filter((session) => session.status === "running");
|
|
186
185
|
const project = await getJson(runtime, `/api/projects/${runtime.projectId}`).catch(() => null);
|
|
187
186
|
for (const message of messages) {
|
|
188
187
|
hooks.onRoomMessage?.(message, runtime);
|
|
@@ -190,6 +189,7 @@ async function processRoomMessages(runtime) {
|
|
|
190
189
|
runtime.roomCursorSeq = Math.max(runtime.roomCursorSeq, message.seq);
|
|
191
190
|
continue;
|
|
192
191
|
}
|
|
192
|
+
const runnableSessions = Array.from(sessions.values()).filter((session) => session.status === "running");
|
|
193
193
|
const targetSessions = runnableSessions.filter((session) => shouldSessionReceiveMessage(runtime, session, message, settings));
|
|
194
194
|
if (targetSessions.length === 0) {
|
|
195
195
|
console.log(`[room] seq=${message.seq} no sessions matched (runnable=${runnableSessions.length}), skipping`);
|
|
@@ -191,6 +191,27 @@ function clearSlashMenu() {
|
|
|
191
191
|
eraseSlashMenu();
|
|
192
192
|
resetSlashMenuState();
|
|
193
193
|
}
|
|
194
|
+
let _menuRefreshPending = false;
|
|
195
|
+
let _queuedPreserveSelection = false;
|
|
196
|
+
function scheduleSlashMenuRefresh(rl, preserveSelection = false) {
|
|
197
|
+
_queuedPreserveSelection ||= preserveSelection;
|
|
198
|
+
if (_menuRefreshPending) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
_menuRefreshPending = true;
|
|
202
|
+
setImmediate(() => {
|
|
203
|
+
_menuRefreshPending = false;
|
|
204
|
+
const keepSelection = _queuedPreserveSelection;
|
|
205
|
+
_queuedPreserveSelection = false;
|
|
206
|
+
const line = rl.line ?? "";
|
|
207
|
+
if (line.startsWith("/") && line.length >= 1) {
|
|
208
|
+
renderSlashMenu(line.slice(1), keepSelection);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
clearSlashMenu();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
194
215
|
// ─── Tab Completer ──────────────────────────────────────────────────────────
|
|
195
216
|
function completer(line) {
|
|
196
217
|
if (!line.startsWith("/"))
|
|
@@ -586,8 +607,8 @@ async function main() {
|
|
|
586
607
|
const rl = createInterface({
|
|
587
608
|
input: process.stdin,
|
|
588
609
|
output: process.stdout,
|
|
589
|
-
completer,
|
|
590
610
|
terminal: isInteractiveTerminal,
|
|
611
|
+
historySize: 0,
|
|
591
612
|
});
|
|
592
613
|
const ctx = { runtime: null, rl, running: true, isInteractiveTerminal };
|
|
593
614
|
const sentIds = new Set();
|
|
@@ -623,16 +644,16 @@ async function main() {
|
|
|
623
644
|
key.name === "up"
|
|
624
645
|
? (_menuSelection + hits.length - 1) % hits.length
|
|
625
646
|
: (_menuSelection + 1) % hits.length;
|
|
626
|
-
|
|
647
|
+
scheduleSlashMenuRefresh(rl, true);
|
|
627
648
|
return;
|
|
628
649
|
}
|
|
629
650
|
if (hits.length > 0 && key?.name === "tab") {
|
|
630
651
|
const selected = hits[_menuSelection] ?? hits[0];
|
|
631
652
|
replaceInputLine(rl, `/${selected.name} `);
|
|
632
|
-
|
|
653
|
+
scheduleSlashMenuRefresh(rl, false);
|
|
633
654
|
return;
|
|
634
655
|
}
|
|
635
|
-
|
|
656
|
+
scheduleSlashMenuRefresh(rl, false);
|
|
636
657
|
}
|
|
637
658
|
else {
|
|
638
659
|
clearSlashMenu();
|
|
@@ -682,13 +703,16 @@ async function main() {
|
|
|
682
703
|
sentIds.add(messageId);
|
|
683
704
|
console.log(`${GRN}[${ts()}]${R} ${BOLD}You${R}: ${input}`);
|
|
684
705
|
try {
|
|
685
|
-
await postRoomMessageUpsert(ctx.runtime, {
|
|
706
|
+
const result = await postRoomMessageUpsert(ctx.runtime, {
|
|
686
707
|
message_id: messageId,
|
|
687
708
|
author_type: "user",
|
|
688
709
|
author_id: ctx.runtime.hostId,
|
|
689
710
|
author_label: "You",
|
|
690
711
|
text: input,
|
|
691
712
|
});
|
|
713
|
+
if (result?.message_id && result.message_id !== messageId) {
|
|
714
|
+
sentIds.add(String(result.message_id));
|
|
715
|
+
}
|
|
692
716
|
}
|
|
693
717
|
catch (e) {
|
|
694
718
|
sentIds.delete(messageId);
|