@keyou007/agent-bot 0.1.18-alpha.0 → 0.1.18-alpha.2

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.
@@ -15,6 +15,7 @@ export class ShellCommandJobManager {
15
15
  jobsRoot;
16
16
  runnerEntry;
17
17
  spawnRunner;
18
+ jobIdByCardMessageId = new Map();
18
19
  constructor(jobsRoot, options = {}) {
19
20
  this.jobsRoot = jobsRoot;
20
21
  this.runnerEntry = options.runnerEntry ?? resolveRunnerEntry();
@@ -42,8 +43,40 @@ export class ShellCommandJobManager {
42
43
  const jobDirectory = this.jobDirectory(jobId);
43
44
  const spec = await readJson(path.join(jobDirectory, JOB_SPEC_FILE));
44
45
  await writeJsonAtomic(path.join(jobDirectory, JOB_SPEC_FILE), { ...spec, cardMessageId });
46
+ this.jobIdByCardMessageId.set(cardMessageId, jobId);
45
47
  return this.readJob(jobId);
46
48
  }
49
+ async findJobByCardMessageId(cardMessageId) {
50
+ const cachedJobId = this.jobIdByCardMessageId.get(cardMessageId);
51
+ if (cachedJobId) {
52
+ try {
53
+ return await this.readJob(cachedJobId);
54
+ }
55
+ catch {
56
+ this.jobIdByCardMessageId.delete(cardMessageId);
57
+ }
58
+ }
59
+ const entries = await fs.readdir(this.jobsRoot, { withFileTypes: true }).catch((error) => {
60
+ if (error.code === "ENOENT")
61
+ return [];
62
+ throw error;
63
+ });
64
+ for (const entry of entries) {
65
+ if (!entry.isDirectory())
66
+ continue;
67
+ try {
68
+ const spec = await readJson(path.join(this.jobsRoot, entry.name, JOB_SPEC_FILE));
69
+ if (spec.cardMessageId)
70
+ this.jobIdByCardMessageId.set(spec.cardMessageId, spec.id);
71
+ if (spec.cardMessageId === cardMessageId)
72
+ return this.readJob(spec.id);
73
+ }
74
+ catch {
75
+ // Ignore partially written or unrelated job directories while rebuilding the card index.
76
+ }
77
+ }
78
+ return undefined;
79
+ }
47
80
  async startJob(jobId) {
48
81
  const jobDirectory = this.jobDirectory(jobId);
49
82
  await this.spawnRunner(this.runnerEntry, jobDirectory);
@@ -1 +1 @@
1
- {"version":3,"file":"ShellCommandJobManager.js","sourceRoot":"","sources":["../../src/shell/ShellCommandJobManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShellCommandJobManager.js","sourceRoot":"","sources":["../../src/shell/ShellCommandJobManager.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@keyou007/agent-bot",
3
- "version": "0.1.18-alpha.0",
3
+ "version": "0.1.18-alpha.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@keyou007/agent-bot",
9
- "version": "0.1.18-alpha.0",
9
+ "version": "0.1.18-alpha.2",
10
10
  "license": "GPL-3.0-only",
11
11
  "dependencies": {
12
12
  "@agentclientprotocol/sdk": "1.2.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keyou007/agent-bot",
3
- "version": "0.1.18-alpha.0",
3
+ "version": "0.1.18-alpha.2",
4
4
  "type": "module",
5
5
  "description": "Use Codex, TraeX, and compatible coding agents from Lark/Feishu.",
6
6
  "license": "GPL-3.0-only",
@@ -39,6 +39,7 @@ const WINDOWS_SCREENSHOT_DEVELOPER_INSTRUCTIONS = [
39
39
  const SESSION_REQUEST_TIMEOUT_MS = 60_000;
40
40
  const CONTROL_REQUEST_TIMEOUT_MS = 10_000;
41
41
  const SYNC_REQUEST_TIMEOUT_MS = 5_000;
42
+ const THREAD_TURN_PAGE_SIZE = 100;
42
43
  // A timed-out fork keeps running in App Server and can create an orphan thread.
43
44
  // Wait for its response; connection closure still rejects the request.
44
45
  const FORK_REQUEST_TIMEOUT_MS = 0;
@@ -291,11 +292,8 @@ export class CodexRuntime implements AgentRuntime {
291
292
  }
292
293
 
293
294
  async readRemoteSession(remoteSessionId: string): Promise<RemoteSessionSummary> {
294
- const response = await (await this.client()).request<ThreadReadResponse>(
295
- "thread/read",
296
- { threadId: remoteSessionId, includeTurns: true },
297
- SYNC_REQUEST_TIMEOUT_MS,
298
- );
295
+ const client = await this.client();
296
+ const response = await this.readThreadWithTurns(client, remoteSessionId);
299
297
  const summary = remoteSessionSummary(response.thread);
300
298
  const activeThreads = await this.localActivityDetector?.activeThreads([remoteSessionId]);
301
299
  const activeSummary = activeThreads ? markLocallyDetectedActive(summary, activeThreads) : summary;
@@ -306,6 +304,71 @@ export class CodexRuntime implements AgentRuntime {
306
304
  };
307
305
  }
308
306
 
307
+ private async readThreadWithTurns(
308
+ client: AppServerClient,
309
+ remoteSessionId: string,
310
+ ): Promise<ThreadReadResponse> {
311
+ try {
312
+ return await client.request<ThreadReadResponse>(
313
+ "thread/read",
314
+ { threadId: remoteSessionId, includeTurns: true },
315
+ SYNC_REQUEST_TIMEOUT_MS,
316
+ );
317
+ } catch (error) {
318
+ const paginated = isPaginatedThreadReadError(error);
319
+ if (!paginated && !isUnmaterializedThreadReadError(error)) throw error;
320
+
321
+ const metadata = await client.request<ThreadReadResponse>(
322
+ "thread/read",
323
+ { threadId: remoteSessionId, includeTurns: false },
324
+ SYNC_REQUEST_TIMEOUT_MS,
325
+ );
326
+ if (!paginated) return { thread: { ...metadata.thread, turns: [] } };
327
+
328
+ return {
329
+ thread: {
330
+ ...metadata.thread,
331
+ turns: await this.listThreadTurns(client, remoteSessionId),
332
+ },
333
+ };
334
+ }
335
+ }
336
+
337
+ private async listThreadTurns(
338
+ client: AppServerClient,
339
+ remoteSessionId: string,
340
+ ): Promise<CodexTurnSnapshot[]> {
341
+ const turns: CodexTurnSnapshot[] = [];
342
+ const seenCursors = new Set<string>();
343
+ let cursor: string | undefined;
344
+ do {
345
+ const response = await client.request<ThreadTurnsListResponse>(
346
+ "thread/turns/list",
347
+ {
348
+ threadId: remoteSessionId,
349
+ ...(cursor ? { cursor } : {}),
350
+ limit: THREAD_TURN_PAGE_SIZE,
351
+ sortDirection: "asc",
352
+ itemsView: "full",
353
+ },
354
+ SYNC_REQUEST_TIMEOUT_MS,
355
+ );
356
+ turns.push(...response.data);
357
+ const nextCursor = response.nextCursor ?? undefined;
358
+ if (!nextCursor) break;
359
+ if (seenCursors.has(nextCursor)) {
360
+ this.logger.warn(
361
+ { remoteSessionId, cursor: nextCursor },
362
+ "App Server repeated a thread Turn pagination cursor; stopping pagination.",
363
+ );
364
+ break;
365
+ }
366
+ seenCursors.add(nextCursor);
367
+ cursor = nextCursor;
368
+ } while (cursor);
369
+ return turns;
370
+ }
371
+
309
372
  async inspectRemoteSessionActivity(remoteSessionId: string): Promise<RemoteSessionActivity> {
310
373
  const [response, activeThreads] = await Promise.all([
311
374
  (await this.client()).request<ThreadReadResponse>(
@@ -984,6 +1047,11 @@ interface ThreadListResponse {
984
1047
  nextCursor?: string | null;
985
1048
  }
986
1049
 
1050
+ interface ThreadTurnsListResponse {
1051
+ data: CodexTurnSnapshot[];
1052
+ nextCursor?: string | null;
1053
+ }
1054
+
987
1055
  interface CodexThreadSnapshot {
988
1056
  id: string;
989
1057
  name?: string | null;
@@ -1119,6 +1187,27 @@ function isUnsupportedRecencySortError(error: unknown): boolean {
1119
1187
  && /unknown|unrecognized|unexpected|unsupported|not supported|invalid/i.test(details);
1120
1188
  }
1121
1189
 
1190
+ function isPaginatedThreadReadError(error: unknown): boolean {
1191
+ const details = appServerErrorDetails(error);
1192
+ return /paginated threads?[^\n]*do(?:es)? not support[^\n]*thread\/read[^\n]*includeTurns\s*=\s*true/i.test(details);
1193
+ }
1194
+
1195
+ function isUnmaterializedThreadReadError(error: unknown): boolean {
1196
+ const details = appServerErrorDetails(error);
1197
+ return /thread[^\n]*(?:not materialized|not loaded)[^\n]*includeTurns[^\n]*(?:unavailable|before first user message)/i
1198
+ .test(details);
1199
+ }
1200
+
1201
+ function appServerErrorDetails(error: unknown): string {
1202
+ if (!(error instanceof AppServerRequestError)) return error instanceof Error ? error.message : String(error);
1203
+ const data = typeof error.data === "string"
1204
+ ? error.data
1205
+ : error.data === undefined
1206
+ ? ""
1207
+ : JSON.stringify(error.data);
1208
+ return `${error.message} ${error.serverMessage} ${data}`;
1209
+ }
1210
+
1122
1211
  function remoteSessionSummary(thread: CodexThreadSnapshot): RemoteSessionSummary {
1123
1212
  const lastTurn = thread.turns?.at(-1);
1124
1213
  const lastCompletedTurn = [...(thread.turns ?? [])]
@@ -284,8 +284,11 @@ function toIncomingMessage(
284
284
  }
285
285
 
286
286
  function mentionsOpenId(value: unknown, openId: string): boolean {
287
- return Array.isArray(value) && value.some((mention) =>
288
- isRecord(mention) && mention.id === openId);
287
+ return Array.isArray(value) && value.some((mention) => {
288
+ if (!isRecord(mention)) return false;
289
+ if (mention.id === openId || mention.open_id === openId) return true;
290
+ return isRecord(mention.id) && mention.id.open_id === openId;
291
+ });
289
292
  }
290
293
 
291
294
  function parseMessageContent(
@@ -2817,10 +2817,35 @@ export class ProxySessionController {
2817
2817
  if (!runtime.readRemoteSession && !source) {
2818
2818
  throw new Error("当前 App Server Agent 不支持读取指定任务。");
2819
2819
  }
2820
- remote ??= runtime.readRemoteSession
2821
- ? await runtime.readRemoteSession(remoteSessionId)
2822
- : undefined;
2823
- const latestTurnId = remote?.lastTurnId ?? source?.lastTurnId;
2820
+ const persistedCompletedTurns = source ? this.localForkCompletedTurns(source) : [];
2821
+ const sourceLastSnapshot = turnViewSnapshot(
2822
+ source?.lastTurnId ? this.store.getTurnSnapshot(source.lastTurnId) : undefined,
2823
+ );
2824
+ const localCompletedTurns = persistedCompletedTurns.length > 0
2825
+ ? persistedCompletedTurns
2826
+ : source?.lastTurnId
2827
+ && (source.lastTurnStatus === "completed" || sourceLastSnapshot?.status === "completed")
2828
+ ? [{
2829
+ id: source.lastTurnId,
2830
+ prompt: latestUserPromptFromTurnView(sourceLastSnapshot) ?? source.title,
2831
+ startedAt: sourceLastSnapshot?.startedAt ?? parseIsoTimestamp(source.updatedAt),
2832
+ completedAt: sourceLastSnapshot?.completedAt
2833
+ ?? sourceLastSnapshot?.startedAt
2834
+ ?? parseIsoTimestamp(source.updatedAt),
2835
+ }]
2836
+ : [];
2837
+ if (!remote && runtime.readRemoteSession && (!source || persistedCompletedTurns.length === 0)) {
2838
+ try {
2839
+ remote = await runtime.readRemoteSession(remoteSessionId);
2840
+ } catch (error) {
2841
+ if (localCompletedTurns.length === 0) throw error;
2842
+ this.logger.warn(
2843
+ { error, contextKey, remoteSessionId, sourceTurnId: localCompletedTurns.at(-1)?.id },
2844
+ "Failed to read the complete source task before Fork; using the locally persisted completed Turn.",
2845
+ );
2846
+ }
2847
+ }
2848
+ const latestTurnId = remote?.lastTurnId ?? source?.lastTurnId ?? localCompletedTurns.at(-1)?.id;
2824
2849
  const latestSnapshot = turnViewSnapshot(latestTurnId ? this.store.getTurnSnapshot(latestTurnId) : undefined);
2825
2850
  const isRunning = remote
2826
2851
  ? isRemoteSessionActive(remote)
@@ -2829,7 +2854,9 @@ export class ProxySessionController {
2829
2854
  || source?.lastTurnStatus === "running"
2830
2855
  || isTurnStillRunning(latestSnapshot?.status),
2831
2856
  );
2832
- const lastTurnId = isRunning ? remote?.lastCompletedTurnId : latestTurnId;
2857
+ const lastTurnId = remote?.lastCompletedTurnId
2858
+ ?? (remote?.lastTurnStatus === "completed" ? remote.lastTurnId : undefined)
2859
+ ?? localCompletedTurns.at(-1)?.id;
2833
2860
  if (!lastTurnId) {
2834
2861
  if (isRunning) {
2835
2862
  throw new Error(`${sourceLabel}正在执行,且还没有已完成轮次可供 fork。请等待当前轮次完成后重试。`);
@@ -2837,7 +2864,9 @@ export class ProxySessionController {
2837
2864
  throw new Error(`${sourceLabel}还没有可供 fork 的轮次。请先完成至少一轮对话。`);
2838
2865
  }
2839
2866
  const snapshot = turnViewSnapshot(this.store.getTurnSnapshot(lastTurnId));
2840
- const forkedFromHistoricalTurn = isRunning && lastTurnId !== latestTurnId;
2867
+ const forkedFromHistoricalTurn = lastTurnId !== latestTurnId;
2868
+ const completedTurn = (remote?.completedTurns ?? localCompletedTurns)
2869
+ .find((turn) => turn.id === lastTurnId);
2841
2870
 
2842
2871
  const cwd = remote?.cwd || source?.cwd;
2843
2872
  if (!cwd) throw new Error("指定的 App Server 任务没有可用的工作目录,暂时不能 fork。");
@@ -2849,6 +2878,7 @@ export class ProxySessionController {
2849
2878
  const permissionMode = source?.permissionMode ?? "auto";
2850
2879
  const sourceTurnPrompt = truncateText(
2851
2880
  latestUserPromptFromTurnView(snapshot)
2881
+ ?? completedTurn?.prompt
2852
2882
  ?? (lastTurnId === latestTurnId ? remote?.lastUserPrompt : undefined)
2853
2883
  ?? remote?.preview
2854
2884
  ?? source?.title
@@ -2858,6 +2888,8 @@ export class ProxySessionController {
2858
2888
  );
2859
2889
  const sourceTurnCompletedAt = snapshot?.completedAt
2860
2890
  ?? snapshot?.startedAt
2891
+ ?? completedTurn?.completedAt
2892
+ ?? completedTurn?.startedAt
2861
2893
  ?? (lastTurnId === latestTurnId
2862
2894
  ? latestRemoteTimestamp(remote?.recencyAt, remote?.updatedAt)
2863
2895
  : undefined)
@@ -2876,20 +2908,33 @@ export class ProxySessionController {
2876
2908
  model,
2877
2909
  reasoningEffort,
2878
2910
  permissionMode,
2879
- lastTurnStatus: forkedFromHistoricalTurn
2880
- ? "completed"
2881
- : mapRemoteTurnStatus(remote?.lastTurnStatus)
2882
- ?? forkedTurnStatus(snapshot?.status)
2883
- ?? source?.lastTurnStatus,
2911
+ lastTurnStatus: "completed",
2884
2912
  sourceTurnPrompt,
2885
2913
  sourceTurnStartedAt: snapshot?.startedAt ?? sourceTurnCompletedAt,
2886
2914
  sourceTurnCompletedAt,
2887
- sourceCompletedTurns: remote?.completedTurns ?? [],
2915
+ sourceCompletedTurns: remote?.completedTurns
2916
+ ?? (persistedCompletedTurns.length > 0 ? [] : localCompletedTurns),
2888
2917
  sourceWasRunning: isRunning,
2889
2918
  forkedFromHistoricalTurn,
2890
2919
  };
2891
2920
  }
2892
2921
 
2922
+ private localForkCompletedTurns(source: SessionRecord): RemoteCompletedTurnSummary[] {
2923
+ return this.store.listTaskTurnGraph(source.localSessionId)
2924
+ .slice()
2925
+ .reverse()
2926
+ .map((record) => {
2927
+ const snapshot = turnViewSnapshot(record.snapshot);
2928
+ const startedAt = snapshot?.startedAt ?? parseIsoTimestamp(record.updatedAt);
2929
+ return {
2930
+ id: record.turnId,
2931
+ prompt: latestUserPromptFromTurnView(snapshot),
2932
+ startedAt,
2933
+ completedAt: snapshot?.completedAt ?? startedAt,
2934
+ };
2935
+ });
2936
+ }
2937
+
2893
2938
  private async prepareForkGroupSession(
2894
2939
  contextKey: string,
2895
2940
  requestedTitle: string | undefined,
@@ -4965,7 +5010,7 @@ export class ProxySessionController {
4965
5010
  sourceMessageId?: string,
4966
5011
  incomingMessage?: IncomingMessage,
4967
5012
  ): Promise<void> {
4968
- const cwd = this.shellCommandCwd(contextKey, incomingMessage);
5013
+ const cwd = await this.shellCommandCwd(contextKey, incomingMessage);
4969
5014
  const created = await this.shellCommandJobs.createJob({ contextKey, sourceMessageId, command, cwd });
4970
5015
  let cardMessageId: string | undefined;
4971
5016
  const initialState: ShellCommandCardView = {
@@ -5011,12 +5056,13 @@ export class ProxySessionController {
5011
5056
  }
5012
5057
  }
5013
5058
 
5014
- private shellCommandCwd(contextKey: string, incomingMessage?: IncomingMessage): string {
5059
+ private async shellCommandCwd(contextKey: string, incomingMessage?: IncomingMessage): Promise<string> {
5015
5060
  const current = this.currentSession(contextKey);
5016
5061
  if (current) return current.cwd;
5017
5062
 
5018
5063
  if (incomingMessage?.threadContext) {
5019
- const anchor = threadForkAnchorMessageIds(incomingMessage)
5064
+ const anchorMessageIds = threadForkAnchorMessageIds(incomingMessage);
5065
+ const anchor = anchorMessageIds
5020
5066
  .map((messageId) => this.store.findTurnAnchorByMessageId(messageId))
5021
5067
  .find((candidate) => candidate !== undefined);
5022
5068
  const source = anchor?.contextKey
@@ -5028,6 +5074,19 @@ export class ProxySessionController {
5028
5074
  if (source && sourceContextKey && baseChatContextKey(sourceContextKey) === baseChatContextKey(contextKey)) {
5029
5075
  return source.cwd;
5030
5076
  }
5077
+
5078
+ for (const messageId of anchorMessageIds) {
5079
+ const commandJob = await this.shellCommandJobs.findJobByCardMessageId(messageId);
5080
+ if (commandJob && baseChatContextKey(commandJob.contextKey) === baseChatContextKey(contextKey)) {
5081
+ return commandJob.cwd;
5082
+ }
5083
+ }
5084
+
5085
+ const baseContextKey = baseChatContextKey(contextKey);
5086
+ const baseSession = this.currentSession(baseContextKey);
5087
+ if (baseSession) return baseSession.cwd;
5088
+ const boundProjectCwd = this.store.getUserContext(baseContextKey)?.boundProjectCwd;
5089
+ if (boundProjectCwd) return boundProjectCwd;
5031
5090
  }
5032
5091
 
5033
5092
  return this.config.defaults.cwd;
@@ -52,6 +52,7 @@ export interface ShellCommandJobSnapshot extends ShellCommandJobSpec, Omit<Shell
52
52
  export interface ShellCommandJobManagerLike {
53
53
  createJob(input: Pick<ShellCommandJobSpec, "contextKey" | "sourceMessageId" | "command" | "cwd">): Promise<ShellCommandJobSnapshot>;
54
54
  bindCard(jobId: string, cardMessageId: string): Promise<ShellCommandJobSnapshot>;
55
+ findJobByCardMessageId(cardMessageId: string): Promise<ShellCommandJobSnapshot | undefined>;
55
56
  startJob(jobId: string): Promise<void>;
56
57
  failJob(jobId: string, error: string): Promise<void>;
57
58
  readJob(jobId: string): Promise<ShellCommandJobSnapshot>;
@@ -68,6 +69,7 @@ export interface ShellCommandJobManagerOptions {
68
69
  export class ShellCommandJobManager implements ShellCommandJobManagerLike {
69
70
  private readonly runnerEntry: string;
70
71
  private readonly spawnRunner: (entry: string, jobDirectory: string) => Promise<void>;
72
+ private readonly jobIdByCardMessageId = new Map<string, string>();
71
73
 
72
74
  constructor(
73
75
  private readonly jobsRoot: string,
@@ -102,9 +104,37 @@ export class ShellCommandJobManager implements ShellCommandJobManagerLike {
102
104
  const jobDirectory = this.jobDirectory(jobId);
103
105
  const spec = await readJson<ShellCommandJobSpec>(path.join(jobDirectory, JOB_SPEC_FILE));
104
106
  await writeJsonAtomic(path.join(jobDirectory, JOB_SPEC_FILE), { ...spec, cardMessageId });
107
+ this.jobIdByCardMessageId.set(cardMessageId, jobId);
105
108
  return this.readJob(jobId);
106
109
  }
107
110
 
111
+ async findJobByCardMessageId(cardMessageId: string): Promise<ShellCommandJobSnapshot | undefined> {
112
+ const cachedJobId = this.jobIdByCardMessageId.get(cardMessageId);
113
+ if (cachedJobId) {
114
+ try {
115
+ return await this.readJob(cachedJobId);
116
+ } catch {
117
+ this.jobIdByCardMessageId.delete(cardMessageId);
118
+ }
119
+ }
120
+
121
+ const entries = await fs.readdir(this.jobsRoot, { withFileTypes: true }).catch((error: NodeJS.ErrnoException) => {
122
+ if (error.code === "ENOENT") return [];
123
+ throw error;
124
+ });
125
+ for (const entry of entries) {
126
+ if (!entry.isDirectory()) continue;
127
+ try {
128
+ const spec = await readJson<ShellCommandJobSpec>(path.join(this.jobsRoot, entry.name, JOB_SPEC_FILE));
129
+ if (spec.cardMessageId) this.jobIdByCardMessageId.set(spec.cardMessageId, spec.id);
130
+ if (spec.cardMessageId === cardMessageId) return this.readJob(spec.id);
131
+ } catch {
132
+ // Ignore partially written or unrelated job directories while rebuilding the card index.
133
+ }
134
+ }
135
+ return undefined;
136
+ }
137
+
108
138
  async startJob(jobId: string): Promise<void> {
109
139
  const jobDirectory = this.jobDirectory(jobId);
110
140
  await this.spawnRunner(this.runnerEntry, jobDirectory);