@keyou007/agent-bot 0.1.19 → 0.1.20-alpha.0

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.
@@ -46,7 +46,6 @@ const RECOVERY_HEARTBEAT_INTERVAL_MS = 60 * 1_000;
46
46
  const SHELL_COMMAND_JOB_POLL_INTERVAL_MS = 1_000;
47
47
  const SHELL_COMMAND_JOB_RELAUNCH_DELAY_MS = 5_000;
48
48
  const APP_SERVER_RELEASE_POLL_INTERVAL_MS = 500;
49
- const APP_SERVER_RELEASE_IDLE_DELAY_MS = 5_000;
50
49
  const FORWARD_ATTACHMENT_WINDOW_MS = 800;
51
50
  const DEFAULT_MERGED_FORWARD_INSTRUCTION = "请参考以下内容回复用户";
52
51
  const DEFAULT_REFERENCED_MESSAGE_INSTRUCTION = "请参考引用消息回复用户";
@@ -907,7 +906,6 @@ export class ProxySessionController {
907
906
  agentName: result.agentName,
908
907
  status: result.status,
909
908
  blockingTaskCount: result.blockingTaskCount,
910
- ...(result.releaseInSeconds !== undefined ? { releaseInSeconds: result.releaseInSeconds } : {}),
911
909
  };
912
910
  }
913
911
  async controlArchiveTask(localSessionId) {
@@ -5640,20 +5638,17 @@ export class ProxySessionController {
5640
5638
  let schedule = this.appServerReleaseSchedules.get(record.agentName);
5641
5639
  const created = !schedule;
5642
5640
  if (!schedule) {
5643
- const blockingTaskCount = this.appServerReleaseBlockers(record.agentName, runtime).length;
5641
+ const blockers = this.appServerReleaseBlockers(record.agentName, runtime);
5642
+ const blockingTaskCount = blockers.length;
5644
5643
  schedule = {
5645
5644
  id: this.nextAppServerReleaseScheduleId++,
5646
5645
  agentName: record.agentName,
5647
5646
  runtime,
5648
5647
  status: "waiting",
5649
5648
  blockingTaskCount,
5649
+ blockingTaskTitles: this.appServerReleaseTaskTitles(blockers),
5650
5650
  targets: new Map(),
5651
5651
  forced: false,
5652
- ...(blockingTaskCount === 0
5653
- ? {
5654
- releaseCountdownSeconds: Math.ceil(APP_SERVER_RELEASE_IDLE_DELAY_MS / 1_000),
5655
- }
5656
- : {}),
5657
5652
  };
5658
5653
  this.appServerReleaseSchedules.set(record.agentName, schedule);
5659
5654
  }
@@ -5662,12 +5657,6 @@ export class ProxySessionController {
5662
5657
  if (messageId) {
5663
5658
  schedule.targets.set(`${contextKey}\u0000${messageId}`, { contextKey, messageId });
5664
5659
  }
5665
- if (schedule.status === "waiting"
5666
- && schedule.blockingTaskCount === 0
5667
- && schedule.releaseCountdownSeconds !== undefined
5668
- && schedule.releaseAt === undefined) {
5669
- schedule.releaseAt = Date.now() + APP_SERVER_RELEASE_IDLE_DELAY_MS;
5670
- }
5671
5660
  }
5672
5661
  catch (error) {
5673
5662
  if (created && schedule.targets.size === 0) {
@@ -5680,9 +5669,6 @@ export class ProxySessionController {
5680
5669
  agentName: schedule.agentName,
5681
5670
  status: schedule.status === "failed" ? "failed" : schedule.status === "released" ? "released" : "waiting",
5682
5671
  blockingTaskCount: schedule.blockingTaskCount,
5683
- ...(schedule.releaseCountdownSeconds !== undefined
5684
- ? { releaseInSeconds: schedule.releaseCountdownSeconds }
5685
- : {}),
5686
5672
  ...(schedule.error ? { error: schedule.error } : {}),
5687
5673
  };
5688
5674
  }
@@ -5693,7 +5679,7 @@ export class ProxySessionController {
5693
5679
  if (!Number.isSafeInteger(scheduleId) || !schedule || schedule.id !== scheduleId || schedule.status !== "waiting") {
5694
5680
  throw new Error("释放卡片已失效,请重新发送 /release。");
5695
5681
  }
5696
- await this.performAppServerRelease(schedule, true);
5682
+ await this.performAppServerRelease(schedule);
5697
5683
  }
5698
5684
  async cancelAppServerRelease(action) {
5699
5685
  const scheduleId = Number(action.value.scheduleId);
@@ -5727,6 +5713,9 @@ export class ProxySessionController {
5727
5713
  || Boolean(runtime.getSession(session.localSessionId)?.activeTurnId);
5728
5714
  });
5729
5715
  }
5716
+ appServerReleaseTaskTitles(blockers) {
5717
+ return blockers.map((session) => session.title?.trim() || "未命名任务");
5718
+ }
5730
5719
  armAppServerReleaseCheck(schedule) {
5731
5720
  if (schedule.status !== "waiting" || schedule.timer || schedule.inFlight)
5732
5721
  return;
@@ -5742,36 +5731,22 @@ export class ProxySessionController {
5742
5731
  async refreshAppServerReleaseSchedule(schedule) {
5743
5732
  if (this.appServerReleaseSchedules.get(schedule.agentName) !== schedule || schedule.status !== "waiting")
5744
5733
  return;
5745
- const blockingTaskCount = this.appServerReleaseBlockers(schedule.agentName, schedule.runtime).length;
5746
- if (blockingTaskCount > 0) {
5747
- const changed = schedule.blockingTaskCount !== blockingTaskCount || schedule.releaseAt !== undefined;
5748
- schedule.releaseAt = undefined;
5749
- schedule.releaseCountdownSeconds = undefined;
5750
- if (changed) {
5751
- schedule.blockingTaskCount = blockingTaskCount;
5752
- await this.publishAppServerReleaseSchedule(schedule);
5753
- }
5754
- this.armAppServerReleaseCheck(schedule);
5755
- return;
5734
+ const blockers = this.appServerReleaseBlockers(schedule.agentName, schedule.runtime);
5735
+ const blockingTaskCount = blockers.length;
5736
+ const blockingTaskTitles = this.appServerReleaseTaskTitles(blockers);
5737
+ const titlesChanged = schedule.blockingTaskTitles.length !== blockingTaskTitles.length
5738
+ || schedule.blockingTaskTitles.some((title, index) => title !== blockingTaskTitles[index]);
5739
+ if (schedule.blockingTaskCount !== blockingTaskCount || titlesChanged) {
5740
+ schedule.blockingTaskCount = blockingTaskCount;
5741
+ schedule.blockingTaskTitles = blockingTaskTitles;
5742
+ await this.publishAppServerReleaseSchedule(schedule);
5756
5743
  }
5757
- schedule.blockingTaskCount = 0;
5758
- if (schedule.releaseAt !== undefined) {
5759
- const releaseCountdownSeconds = Math.max(0, Math.ceil((schedule.releaseAt - Date.now()) / 1_000));
5760
- if (releaseCountdownSeconds > 0) {
5761
- if (schedule.releaseCountdownSeconds !== releaseCountdownSeconds) {
5762
- schedule.releaseCountdownSeconds = releaseCountdownSeconds;
5763
- await this.publishAppServerReleaseSchedule(schedule);
5764
- }
5765
- this.armAppServerReleaseCheck(schedule);
5766
- return;
5767
- }
5768
- }
5769
- await this.performAppServerRelease(schedule, false);
5744
+ this.armAppServerReleaseCheck(schedule);
5770
5745
  }
5771
- async performAppServerRelease(schedule, force) {
5746
+ async performAppServerRelease(schedule) {
5772
5747
  if (schedule.inFlight)
5773
5748
  return schedule.inFlight;
5774
- const operation = this.performAppServerReleaseNow(schedule, force);
5749
+ const operation = this.performAppServerReleaseNow(schedule);
5775
5750
  schedule.inFlight = operation;
5776
5751
  try {
5777
5752
  await operation;
@@ -5783,31 +5758,16 @@ export class ProxySessionController {
5783
5758
  this.armAppServerReleaseCheck(schedule);
5784
5759
  }
5785
5760
  }
5786
- async performAppServerReleaseNow(schedule, force) {
5761
+ async performAppServerReleaseNow(schedule) {
5787
5762
  if (schedule.timer) {
5788
5763
  clearTimeout(schedule.timer);
5789
5764
  schedule.timer = undefined;
5790
5765
  }
5791
- const interruptedWork = force && this.appServerReleaseBlockers(schedule.agentName, schedule.runtime).length > 0;
5792
- if (force)
5793
- await this.cancelQueuedPromptsForAppServerRelease(schedule.agentName);
5794
- else {
5795
- const blockingTaskCount = this.appServerReleaseBlockers(schedule.agentName, schedule.runtime).length;
5796
- if (blockingTaskCount > 0) {
5797
- schedule.status = "waiting";
5798
- schedule.blockingTaskCount = blockingTaskCount;
5799
- schedule.releaseAt = undefined;
5800
- schedule.releaseCountdownSeconds = undefined;
5801
- schedule.releaseStarted = false;
5802
- await this.publishAppServerReleaseSchedule(schedule);
5803
- this.armAppServerReleaseCheck(schedule);
5804
- return;
5805
- }
5806
- }
5766
+ const interruptedWork = this.appServerReleaseBlockers(schedule.agentName, schedule.runtime).length > 0;
5767
+ await this.cancelQueuedPromptsForAppServerRelease(schedule.agentName);
5807
5768
  schedule.status = "releasing";
5808
5769
  schedule.blockingTaskCount = 0;
5809
- schedule.releaseAt = undefined;
5810
- schedule.releaseCountdownSeconds = undefined;
5770
+ schedule.blockingTaskTitles = [];
5811
5771
  schedule.releaseStarted = false;
5812
5772
  schedule.forced = interruptedWork;
5813
5773
  await this.publishAppServerReleaseSchedule(schedule);
@@ -5816,15 +5776,15 @@ export class ProxySessionController {
5816
5776
  return;
5817
5777
  schedule.releaseStarted = true;
5818
5778
  try {
5819
- const result = await schedule.runtime.release?.({ force });
5779
+ const result = await schedule.runtime.release?.({ force: true });
5820
5780
  if (!result)
5821
5781
  throw new Error("当前 Agent 不支持释放 App Server。");
5822
5782
  if (result.status === "busy") {
5783
+ const blockers = this.appServerReleaseBlockers(schedule.agentName, schedule.runtime);
5823
5784
  schedule.status = "waiting";
5824
- schedule.blockingTaskCount = Math.max(result.activeSessionIds?.length ?? 0, this.appServerReleaseBlockers(schedule.agentName, schedule.runtime).length, 1);
5785
+ schedule.blockingTaskCount = Math.max(result.activeSessionIds?.length ?? 0, blockers.length, 1);
5786
+ schedule.blockingTaskTitles = this.appServerReleaseTaskTitles(blockers);
5825
5787
  schedule.forced = false;
5826
- schedule.releaseAt = undefined;
5827
- schedule.releaseCountdownSeconds = undefined;
5828
5788
  schedule.releaseStarted = false;
5829
5789
  await this.publishAppServerReleaseSchedule(schedule);
5830
5790
  this.armAppServerReleaseCheck(schedule);
@@ -5875,9 +5835,7 @@ export class ProxySessionController {
5875
5835
  scheduleId: schedule.id,
5876
5836
  agentName: schedule.agentName,
5877
5837
  ...(schedule.blockingTaskCount > 0 ? { blockingTaskCount: schedule.blockingTaskCount } : {}),
5878
- ...(schedule.releaseCountdownSeconds !== undefined
5879
- ? { releaseInSeconds: schedule.releaseCountdownSeconds }
5880
- : {}),
5838
+ ...(schedule.blockingTaskTitles.length > 0 ? { blockingTaskTitles: schedule.blockingTaskTitles } : {}),
5881
5839
  ...(schedule.forced ? { forced: true } : {}),
5882
5840
  ...(schedule.error ? { error: schedule.error } : {}),
5883
5841
  };