@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.
- package/CHANGELOG.md +4 -0
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/dist/cli/controlProtocol.js.map +1 -1
- package/dist/cli/help.js +2 -2
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/feishu/CardRenderer.js +10 -6
- package/dist/feishu/CardRenderer.js.map +1 -1
- package/dist/proxy/ProxySessionController.js +28 -70
- package/dist/proxy/ProxySessionController.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/skills/agent-bot/SKILL.md +2 -1
- package/src/cli/controlProtocol.ts +0 -1
- package/src/cli/help.ts +2 -2
- package/src/cli.ts +6 -7
- package/src/feishu/CardRenderer.ts +11 -7
- package/src/proxy/ProxySessionController.ts +30 -75
|
@@ -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
|
|
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
|
|
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
|
|
5746
|
-
|
|
5747
|
-
|
|
5748
|
-
|
|
5749
|
-
schedule.
|
|
5750
|
-
|
|
5751
|
-
|
|
5752
|
-
|
|
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
|
|
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
|
|
5746
|
+
async performAppServerRelease(schedule) {
|
|
5772
5747
|
if (schedule.inFlight)
|
|
5773
5748
|
return schedule.inFlight;
|
|
5774
|
-
const operation = this.performAppServerReleaseNow(schedule
|
|
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
|
|
5761
|
+
async performAppServerReleaseNow(schedule) {
|
|
5787
5762
|
if (schedule.timer) {
|
|
5788
5763
|
clearTimeout(schedule.timer);
|
|
5789
5764
|
schedule.timer = undefined;
|
|
5790
5765
|
}
|
|
5791
|
-
const interruptedWork =
|
|
5792
|
-
|
|
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.
|
|
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,
|
|
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.
|
|
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
|
};
|