@keyou007/agent-bot 0.1.18 → 0.1.19-alpha.1
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 +11 -0
- package/README.md +3 -0
- package/README.zh.md +3 -0
- package/dist/cli/controlProtocol.js.map +1 -1
- package/dist/cli/help.js +2 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/codex/CodexProcessManager.js +48 -0
- package/dist/codex/CodexProcessManager.js.map +1 -1
- package/dist/codex/CodexRuntime.js +43 -5
- package/dist/codex/CodexRuntime.js.map +1 -1
- package/dist/codex/ThreadWriterProcess.js +344 -0
- package/dist/codex/ThreadWriterProcess.js.map +1 -0
- package/dist/commands/CommandRouter.js +5 -0
- package/dist/commands/CommandRouter.js.map +1 -1
- package/dist/console/ConsoleTurnPresenter.js +1 -0
- package/dist/console/ConsoleTurnPresenter.js.map +1 -1
- package/dist/feishu/CardRenderer.js +166 -0
- package/dist/feishu/CardRenderer.js.map +1 -1
- package/dist/feishu/FeishuTurnPresenter.js +13 -3
- package/dist/feishu/FeishuTurnPresenter.js.map +1 -1
- package/dist/feishu/MergedForwardMessage.js +6 -1
- package/dist/feishu/MergedForwardMessage.js.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/logging/errorLogValue.js +18 -0
- package/dist/logging/errorLogValue.js.map +1 -0
- package/dist/logging/logger.js +4 -0
- package/dist/logging/logger.js.map +1 -1
- package/dist/presentation/OutboundRouter.js +2 -2
- package/dist/presentation/OutboundRouter.js.map +1 -1
- package/dist/proxy/ProxySessionController.js +778 -19
- package/dist/proxy/ProxySessionController.js.map +1 -1
- package/dist/state/StateStore.js +10 -0
- package/dist/state/StateStore.js.map +1 -1
- package/dist/supervision/SafeRestartScheduler.js +1 -1
- package/dist/supervision/SafeRestartScheduler.js.map +1 -1
- package/docs/technical-reference.md +1 -1
- package/docs/technical-reference.zh.md +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/skills/agent-bot/SKILL.md +3 -0
- package/src/cli/controlProtocol.ts +8 -0
- package/src/cli/help.ts +2 -0
- package/src/cli.ts +33 -0
- package/src/codex/CodexProcessManager.ts +43 -0
- package/src/codex/CodexRuntime.ts +41 -4
- package/src/codex/ThreadWriterProcess.ts +385 -0
- package/src/commands/CommandRouter.ts +4 -0
- package/src/commands/commandTypes.ts +1 -0
- package/src/console/ConsoleTurnPresenter.ts +2 -1
- package/src/feishu/CardRenderer.ts +205 -0
- package/src/feishu/FeishuTurnPresenter.ts +16 -3
- package/src/feishu/MergedForwardMessage.ts +5 -1
- package/src/index.ts +4 -2
- package/src/logging/errorLogValue.ts +26 -0
- package/src/logging/logger.ts +4 -0
- package/src/presentation/OutboundRouter.ts +15 -3
- package/src/proxy/ProxySessionController.ts +1003 -30
- package/src/runtime/types.ts +7 -0
- package/src/state/StateStore.ts +11 -0
- package/src/supervision/SafeRestartScheduler.ts +1 -1
package/src/index.ts
CHANGED
|
@@ -276,7 +276,7 @@ async function requestRestart(
|
|
|
276
276
|
await outbound.sendText(
|
|
277
277
|
contextKey,
|
|
278
278
|
newlyScheduled
|
|
279
|
-
? "已安排安全重启。Agent Bot 会等待所有任务完成、最终结果投递完成,并保持
|
|
279
|
+
? "已安排安全重启。Agent Bot 会等待所有任务完成、最终结果投递完成,并保持 5 秒无新消息后重启。"
|
|
280
280
|
: "安全重启已在等待中;当前会话已加入通知范围,并已更新重启原因。",
|
|
281
281
|
).catch((error: unknown) => {
|
|
282
282
|
logger.warn({ error, contextKey }, "Failed to send safe restart acknowledgement.");
|
|
@@ -396,7 +396,7 @@ async function handleControlRequest(request: ControlRequest): Promise<ControlRes
|
|
|
396
396
|
return {
|
|
397
397
|
ok: true,
|
|
398
398
|
message: newlyScheduled
|
|
399
|
-
? "Safe restart scheduled. It will run after all tasks finish and the server stays idle for
|
|
399
|
+
? "Safe restart scheduled. It will run after all tasks finish and the server stays idle for 5 seconds."
|
|
400
400
|
: "A safe restart is already pending. Its reason has been updated.",
|
|
401
401
|
};
|
|
402
402
|
}
|
|
@@ -432,6 +432,8 @@ async function handleControlRequest(request: ControlRequest): Promise<ControlRes
|
|
|
432
432
|
return { ok: true, data: await controller.controlGetTaskStatus(request.localSessionId) };
|
|
433
433
|
case "task_stop":
|
|
434
434
|
return { ok: true, message: await controller.controlStopTask(request.localSessionId) };
|
|
435
|
+
case "task_release":
|
|
436
|
+
return { ok: true, data: await controller.controlReleaseTask(request.localSessionId) };
|
|
435
437
|
case "task_archive":
|
|
436
438
|
return { ok: true, data: await controller.controlArchiveTask(request.localSessionId) };
|
|
437
439
|
case "task_dismiss":
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ErrorLogValue {
|
|
2
|
+
name: string;
|
|
3
|
+
message: string;
|
|
4
|
+
stack?: string;
|
|
5
|
+
cause?: unknown;
|
|
6
|
+
errors?: unknown[];
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function errorLogValue(error: unknown): unknown {
|
|
11
|
+
if (!(error instanceof Error)) return error;
|
|
12
|
+
|
|
13
|
+
const value: ErrorLogValue = {
|
|
14
|
+
name: error.name,
|
|
15
|
+
message: error.message,
|
|
16
|
+
...(error.stack ? { stack: error.stack } : {}),
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
for (const [key, detail] of Object.entries(error)) {
|
|
20
|
+
value[key] = detail instanceof Error ? errorLogValue(detail) : detail;
|
|
21
|
+
}
|
|
22
|
+
if (error.cause !== undefined) value.cause = errorLogValue(error.cause);
|
|
23
|
+
if (error instanceof AggregateError) value.errors = [...error.errors].map(errorLogValue);
|
|
24
|
+
|
|
25
|
+
return value;
|
|
26
|
+
}
|
package/src/logging/logger.ts
CHANGED
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import pino, { type Logger } from "pino";
|
|
4
4
|
import type { AppConfig } from "../config/schema.js";
|
|
5
5
|
import { DailyLogStream } from "./DailyLogStream.js";
|
|
6
|
+
import { errorLogValue } from "./errorLogValue.js";
|
|
6
7
|
|
|
7
8
|
export function createLogger(config: AppConfig): Logger {
|
|
8
9
|
const streams: pino.StreamEntry[] = [
|
|
@@ -23,6 +24,9 @@ export function createLogger(config: AppConfig): Logger {
|
|
|
23
24
|
level: config.logging.level,
|
|
24
25
|
base: undefined,
|
|
25
26
|
timestamp: pino.stdTimeFunctions.isoTime,
|
|
27
|
+
serializers: {
|
|
28
|
+
error: errorLogValue,
|
|
29
|
+
},
|
|
26
30
|
},
|
|
27
31
|
pino.multistream(streams),
|
|
28
32
|
);
|
|
@@ -26,7 +26,11 @@ export interface TurnPresenter {
|
|
|
26
26
|
replyTarget?: MessageReplyTarget,
|
|
27
27
|
prompt?: string,
|
|
28
28
|
): Promise<string | undefined>;
|
|
29
|
-
failPendingTurn(
|
|
29
|
+
failPendingTurn(
|
|
30
|
+
sessionId: string,
|
|
31
|
+
message: string,
|
|
32
|
+
replacementCard?: Record<string, unknown>,
|
|
33
|
+
): Promise<boolean>;
|
|
30
34
|
interruptTurnForRecovery(sessionId: string, contextKey: string, turnId: string, message: string): Promise<void>;
|
|
31
35
|
appendSteerMessage(sessionId: string, turnId: string, text: string, messageId?: string): Promise<void>;
|
|
32
36
|
onEvent(event: AgentEvent): Promise<void>;
|
|
@@ -109,8 +113,16 @@ export class OutboundRouter {
|
|
|
109
113
|
return route.presenter.startPendingTurn(sessionId, contextKey, taskTitle, replyTarget, prompt);
|
|
110
114
|
}
|
|
111
115
|
|
|
112
|
-
async failPendingTurn(
|
|
113
|
-
|
|
116
|
+
async failPendingTurn(
|
|
117
|
+
sessionId: string,
|
|
118
|
+
message: string,
|
|
119
|
+
replacementCard?: Record<string, unknown>,
|
|
120
|
+
): Promise<boolean> {
|
|
121
|
+
return await this.sessionRoutes.get(sessionId)?.presenter.failPendingTurn(
|
|
122
|
+
sessionId,
|
|
123
|
+
message,
|
|
124
|
+
replacementCard,
|
|
125
|
+
) ?? false;
|
|
114
126
|
}
|
|
115
127
|
|
|
116
128
|
async interruptTurnForRecovery(
|