@keyou007/agent-bot 0.1.18-alpha.3 → 0.1.19-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.
Files changed (37) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/codex/CodexRuntime.js +8 -3
  3. package/dist/codex/CodexRuntime.js.map +1 -1
  4. package/dist/codex/ThreadWriterProcess.js +344 -0
  5. package/dist/codex/ThreadWriterProcess.js.map +1 -0
  6. package/dist/console/ConsoleTurnPresenter.js +1 -0
  7. package/dist/console/ConsoleTurnPresenter.js.map +1 -1
  8. package/dist/feishu/CardRenderer.js +83 -0
  9. package/dist/feishu/CardRenderer.js.map +1 -1
  10. package/dist/feishu/FeishuTurnPresenter.js +13 -3
  11. package/dist/feishu/FeishuTurnPresenter.js.map +1 -1
  12. package/dist/index.js +2 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/logging/errorLogValue.js +18 -0
  15. package/dist/logging/errorLogValue.js.map +1 -0
  16. package/dist/logging/logger.js +4 -0
  17. package/dist/logging/logger.js.map +1 -1
  18. package/dist/presentation/OutboundRouter.js +2 -2
  19. package/dist/presentation/OutboundRouter.js.map +1 -1
  20. package/dist/proxy/ProxySessionController.js +329 -15
  21. package/dist/proxy/ProxySessionController.js.map +1 -1
  22. package/dist/supervision/SafeRestartScheduler.js +1 -1
  23. package/dist/supervision/SafeRestartScheduler.js.map +1 -1
  24. package/npm-shrinkwrap.json +2 -2
  25. package/package.json +1 -1
  26. package/src/codex/CodexRuntime.ts +8 -2
  27. package/src/codex/ThreadWriterProcess.ts +385 -0
  28. package/src/console/ConsoleTurnPresenter.ts +2 -1
  29. package/src/feishu/CardRenderer.ts +109 -0
  30. package/src/feishu/FeishuTurnPresenter.ts +16 -3
  31. package/src/index.ts +2 -2
  32. package/src/logging/errorLogValue.ts +26 -0
  33. package/src/logging/logger.ts +4 -0
  34. package/src/presentation/OutboundRouter.ts +15 -3
  35. package/src/proxy/ProxySessionController.ts +459 -24
  36. package/src/runtime/types.ts +1 -0
  37. 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 会等待所有任务完成、最终结果投递完成,并保持 15 秒无新消息后重启。"
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 15 seconds."
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
  }
@@ -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
+ }
@@ -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(sessionId: string, message: string): Promise<void>;
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(sessionId: string, message: string): Promise<void> {
113
- await this.sessionRoutes.get(sessionId)?.presenter.failPendingTurn(sessionId, message);
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(