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
- renderSlashMenu(line.slice(1), true);
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
- renderSlashMenu(selected.name, false);
653
+ scheduleSlashMenuRefresh(rl, false);
633
654
  return;
634
655
  }
635
- renderSlashMenu(line.slice(1), false);
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "office-core",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Installable CLI and local host runtime for Office Core",
5
5
  "type": "module",
6
6
  "bin": {