@songsid/agend 2.3.3-beta.5 → 2.3.3-beta.6

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.
Files changed (42) hide show
  1. package/dist/backend/claude-code.js +4 -2
  2. package/dist/backend/claude-code.js.map +1 -1
  3. package/dist/backend/grok.js +57 -11
  4. package/dist/backend/grok.js.map +1 -1
  5. package/dist/backend/types.d.ts +18 -0
  6. package/dist/backend/types.js.map +1 -1
  7. package/dist/daemon.d.ts +6 -0
  8. package/dist/daemon.js +17 -0
  9. package/dist/daemon.js.map +1 -1
  10. package/dist/fleet-manager.d.ts +5 -0
  11. package/dist/fleet-manager.js +24 -1
  12. package/dist/fleet-manager.js.map +1 -1
  13. package/dist/instance-lifecycle.d.ts +6 -0
  14. package/dist/instance-lifecycle.js +19 -3
  15. package/dist/instance-lifecycle.js.map +1 -1
  16. package/dist/locale.js +12 -4
  17. package/dist/locale.js.map +1 -1
  18. package/dist/outbound-schemas.js +1 -1
  19. package/dist/outbound-schemas.js.map +1 -1
  20. package/dist/settings-confirmation.d.ts +17 -3
  21. package/dist/settings-confirmation.js +8 -5
  22. package/dist/settings-confirmation.js.map +1 -1
  23. package/dist/settings-http-confirmation.js +31 -1
  24. package/dist/settings-http-confirmation.js.map +1 -1
  25. package/dist/topic-commands.d.ts +21 -5
  26. package/dist/topic-commands.js +92 -36
  27. package/dist/topic-commands.js.map +1 -1
  28. package/dist/ui/chat-strings.js +6 -4
  29. package/dist/ui/chat-thread.js +45 -15
  30. package/dist/ui/fleet-office-skin.js +37 -14
  31. package/dist/ui/fleet-office.js +31 -7
  32. package/dist/ui/html-attachment.js +22 -8
  33. package/dist/ui/preview-panel.js +9 -6
  34. package/dist/ui/preview.js +10 -3
  35. package/dist/ui/settings-confirm.js +18 -0
  36. package/dist/ui/shared/app-i18n.js +13 -2
  37. package/dist/ui/shared/app-shell.js +35 -1
  38. package/dist/ui/shared/app.css +15 -0
  39. package/dist/web-preview.d.ts +5 -2
  40. package/dist/web-preview.js +6 -3
  41. package/dist/web-preview.js.map +1 -1
  42. package/package.json +1 -1
@@ -4040,6 +4040,11 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
4040
4040
  private classicStartKey;
4041
4041
  /** Approval is a system notification: General's agent need not be running. */
4042
4042
  private findClassicApprovalGeneral;
4043
+ /**
4044
+ * #2870: someone ClassicBot does not serve in this private chat: not on allowed_users, not a ClassicBot admin, not a
4045
+ * fleet admin of this bot, and no ClassicBot room here. Their commands other than /start get no answer.
4046
+ */
4047
+ private isClassicPrivateStranger;
4043
4048
  /** Return a user-facing blocker without mutating ClassicBot state. */
4044
4049
  private validateClassicStart;
4045
4050
  /** #2072: from the published snapshot (no `which` on the loop); not checked yet counts as installed (no false alarm). */
@@ -1762,7 +1762,7 @@ export class FleetManager {
1762
1762
  retire();
1763
1763
  continue;
1764
1764
  }
1765
- if (store.attachPrompt(view.id, retire))
1765
+ if (store.attachPrompt(view.id, retire, { platform: adapter.type, connection: adapterId }))
1766
1766
  return;
1767
1767
  }
1768
1768
  catch {
@@ -10245,6 +10245,11 @@ export class FleetManager {
10245
10245
  }
10246
10246
  return;
10247
10247
  }
10248
+ // #2870 (the user's choice): in a private chat, a command from someone ClassicBot does not serve here — not an
10249
+ // allowed user, not a ClassicBot admin, not a fleet admin, no room in this chat — gets no answer at all. /start
10250
+ // above still asks for access; a guest's /web is handled before it.
10251
+ if (isPrivateChat && text.startsWith("/") && this.isClassicPrivateStranger(msg.userId, chatId, msg.adapterId))
10252
+ return;
10248
10253
  // Handle /stop command
10249
10254
  if (text === "/stop" || text.startsWith("/stop ")) {
10250
10255
  if (!this.classicChannels.isAdmin(msg.userId)) {
@@ -17421,6 +17426,13 @@ export class FleetManager {
17421
17426
  lines.push(t(admin === "added" ? "classic.approve_done_admin" : "classic.approve_done_admin_already", adminUserId ?? ""));
17422
17427
  }
17423
17428
  this.notifyInstanceTopic(entry.instanceName, lines.join("\n"));
17429
+ // #2870: the chat just allowed — and the new ClassicBot admin's own chat — get the ClassicBot menu now, not at the
17430
+ // bot's next start (Telegram only; the menu is per chat there).
17431
+ const reply = entry.classicReplyTo;
17432
+ if (reply && reply.adapter.type === "telegram" && scope !== "guild") {
17433
+ for (const chat of new Set([groupId, ...(adminUserId ? [adminUserId] : [])]))
17434
+ void this.topicCommands.addClassicMenuChat(reply.adapterId, chat);
17435
+ }
17424
17436
  await this.notifyClassicRequester(entry, "classic.request_allowed");
17425
17437
  }
17426
17438
  async notifyClassicRequester(entry, key) {
@@ -20689,6 +20701,17 @@ Plus the operational skills (fleet-health, instance-lifecycle, scheduling, sessi
20689
20701
  return (adapterId ? generals.find(([name, cfg]) => (cfg.channel_id ?? this.getInstanceAdapterId(name)) === adapterId) : undefined)?.[0]
20690
20702
  ?? generals[0]?.[0];
20691
20703
  }
20704
+ /**
20705
+ * #2870: someone ClassicBot does not serve in this private chat: not on allowed_users, not a ClassicBot admin, not a
20706
+ * fleet admin of this bot, and no ClassicBot room here. Their commands other than /start get no answer.
20707
+ */
20708
+ isClassicPrivateStranger(userId, chatId, adapterId) {
20709
+ const classic = this.classicChannels;
20710
+ if (!classic)
20711
+ return false;
20712
+ return !classic.isAdmin(userId) && !classic.isUserAllowed(userId) && !this.isFleetAdmin(userId, adapterId ?? "")
20713
+ && !classic.isClassicChannel(chatId, adapterId);
20714
+ }
20692
20715
  /** Return a user-facing blocker without mutating ClassicBot state. */
20693
20716
  validateClassicStart(channelId, userId, guildId, adapterId) {
20694
20717
  const classic = this.classicChannels;