@winmatrix/agent-sdk 1.0.4 → 1.0.6

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 (75) hide show
  1. package/dist/adapters/claude/ClaudeAdapter.d.ts +71 -1
  2. package/dist/adapters/claude/ClaudeAdapter.d.ts.map +1 -1
  3. package/dist/adapters/claude/ClaudeAdapter.js +490 -86
  4. package/dist/adapters/claude/ClaudeAdapter.js.map +1 -1
  5. package/dist/adapters/claude/ClaudeInvocationUsageTracker.d.ts +17 -0
  6. package/dist/adapters/claude/ClaudeInvocationUsageTracker.d.ts.map +1 -0
  7. package/dist/adapters/claude/ClaudeInvocationUsageTracker.js +79 -0
  8. package/dist/adapters/claude/ClaudeInvocationUsageTracker.js.map +1 -0
  9. package/dist/adapters/claude/ClaudeStreamParser.d.ts +19 -0
  10. package/dist/adapters/claude/ClaudeStreamParser.d.ts.map +1 -1
  11. package/dist/adapters/claude/ClaudeStreamParser.js +92 -0
  12. package/dist/adapters/claude/ClaudeStreamParser.js.map +1 -1
  13. package/dist/adapters/codex/CodexAdapter.d.ts +15 -1
  14. package/dist/adapters/codex/CodexAdapter.d.ts.map +1 -1
  15. package/dist/adapters/codex/CodexAdapter.js +164 -14
  16. package/dist/adapters/codex/CodexAdapter.js.map +1 -1
  17. package/dist/adapters/codex/CodexSessionStore.d.ts +42 -0
  18. package/dist/adapters/codex/CodexSessionStore.d.ts.map +1 -0
  19. package/dist/adapters/codex/CodexSessionStore.js +279 -0
  20. package/dist/adapters/codex/CodexSessionStore.js.map +1 -0
  21. package/dist/adapters/hermes/HermesAdapter.d.ts +10 -1
  22. package/dist/adapters/hermes/HermesAdapter.d.ts.map +1 -1
  23. package/dist/adapters/hermes/HermesAdapter.js +177 -10
  24. package/dist/adapters/hermes/HermesAdapter.js.map +1 -1
  25. package/dist/adapters/hermes/HermesInvocationUsageReader.d.ts +26 -0
  26. package/dist/adapters/hermes/HermesInvocationUsageReader.d.ts.map +1 -0
  27. package/dist/adapters/hermes/HermesInvocationUsageReader.js +128 -0
  28. package/dist/adapters/hermes/HermesInvocationUsageReader.js.map +1 -0
  29. package/dist/adapters/openclaw/OpenClawAdapter.d.ts +3 -7
  30. package/dist/adapters/openclaw/OpenClawAdapter.d.ts.map +1 -1
  31. package/dist/adapters/openclaw/OpenClawAdapter.js +116 -45
  32. package/dist/adapters/openclaw/OpenClawAdapter.js.map +1 -1
  33. package/dist/core/AgentAdapter.d.ts +51 -2
  34. package/dist/core/AgentAdapter.d.ts.map +1 -1
  35. package/dist/core/AgentAdapter.js.map +1 -1
  36. package/dist/core/WinMatrixAgentClient.d.ts +23 -1
  37. package/dist/core/WinMatrixAgentClient.d.ts.map +1 -1
  38. package/dist/core/WinMatrixAgentClient.js +115 -12
  39. package/dist/core/WinMatrixAgentClient.js.map +1 -1
  40. package/dist/index.d.ts +18 -12
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +10 -13
  43. package/dist/index.js.map +1 -1
  44. package/dist/observability/WorkstationTokenUsageRecorder.d.ts +54 -0
  45. package/dist/observability/WorkstationTokenUsageRecorder.d.ts.map +1 -0
  46. package/dist/observability/WorkstationTokenUsageRecorder.js +264 -0
  47. package/dist/observability/WorkstationTokenUsageRecorder.js.map +1 -0
  48. package/dist/utils/contextBudget.d.ts +27 -0
  49. package/dist/utils/contextBudget.d.ts.map +1 -0
  50. package/dist/utils/contextBudget.js +86 -0
  51. package/dist/utils/contextBudget.js.map +1 -0
  52. package/dist/utils/envSanitizer.d.ts +38 -0
  53. package/dist/utils/envSanitizer.d.ts.map +1 -0
  54. package/dist/utils/envSanitizer.js +94 -0
  55. package/dist/utils/envSanitizer.js.map +1 -0
  56. package/dist/utils/errorClassification.d.ts +26 -0
  57. package/dist/utils/errorClassification.d.ts.map +1 -0
  58. package/dist/utils/errorClassification.js +52 -0
  59. package/dist/utils/errorClassification.js.map +1 -0
  60. package/dist/utils/mcpUrlValidation.d.ts +10 -0
  61. package/dist/utils/mcpUrlValidation.d.ts.map +1 -0
  62. package/dist/utils/mcpUrlValidation.js +18 -0
  63. package/dist/utils/mcpUrlValidation.js.map +1 -0
  64. package/dist/utils/processUtils.d.ts +10 -0
  65. package/dist/utils/processUtils.d.ts.map +1 -1
  66. package/dist/utils/processUtils.js +42 -9
  67. package/dist/utils/processUtils.js.map +1 -1
  68. package/dist/utils/promptGuardrails.d.ts +15 -0
  69. package/dist/utils/promptGuardrails.d.ts.map +1 -0
  70. package/dist/utils/promptGuardrails.js +26 -0
  71. package/dist/utils/promptGuardrails.js.map +1 -0
  72. package/dist/utils/resumeFallback.d.ts.map +1 -1
  73. package/dist/utils/resumeFallback.js +39 -1
  74. package/dist/utils/resumeFallback.js.map +1 -1
  75. package/package.json +3 -4
@@ -4,7 +4,13 @@
4
4
  import { spawn } from 'node:child_process';
5
5
  import { existsSync } from 'node:fs';
6
6
  import { waitForExit, killProcess } from '../../utils/processUtils.js';
7
+ import { sanitizeTaskEnv } from '../../utils/envSanitizer.js';
7
8
  import { executeWithResumeFallback } from '../../utils/resumeFallback.js';
9
+ import { withSecurityPrefix } from '../../utils/promptGuardrails.js';
10
+ import { classifyAdapterError } from '../../utils/errorClassification.js';
11
+ import { applyContextBudget } from '../../utils/contextBudget.js';
12
+ import { CodexSessionStore, ensureCodexHomeSync, resolveCodexHome, writeCodexConfigIfNeeded, } from './CodexSessionStore.js';
13
+ const MCP_TOKEN_ENV = 'WINMATRIX_MCP_TOKEN';
8
14
  function splitLines(buffer, chunk) {
9
15
  const combined = buffer + chunk;
10
16
  const parts = combined.split('\n');
@@ -58,6 +64,15 @@ const TELEMETRY_ONLY_EVENT_TYPES = new Set([
58
64
  function isTelemetryOnlyEventType(value) {
59
65
  return TELEMETRY_ONLY_EVENT_TYPES.has(value.trim().toLowerCase());
60
66
  }
67
+ const CODEX_TOOL_ITEM_TYPES = new Set([
68
+ 'command_execution',
69
+ 'mcp_tool_call',
70
+ 'file_change',
71
+ 'exec',
72
+ ]);
73
+ function isCodexToolItemType(value) {
74
+ return typeof value === 'string' && CODEX_TOOL_ITEM_TYPES.has(value.trim().toLowerCase());
75
+ }
61
76
  function mapCodexJsonLine(line, threadIdRef) {
62
77
  const trimmed = line.trim();
63
78
  if (!trimmed)
@@ -87,20 +102,64 @@ function mapCodexJsonLine(line, threadIdRef) {
87
102
  }
88
103
  const text = extractText(record.item) ?? extractText(record.delta) ?? extractText(record);
89
104
  if (type === 'error') {
105
+ const message = text ?? 'Codex error';
106
+ const classified = classifyAdapterError({ message });
90
107
  return {
91
108
  type: 'error',
92
- message: text ?? 'Codex error',
109
+ message,
110
+ code: classified.code,
111
+ retryable: classified.retryable,
93
112
  };
94
113
  }
95
114
  if (type === 'turn.failed') {
115
+ const message = text ?? 'Codex turn failed';
116
+ const classified = classifyAdapterError({ message });
96
117
  return {
97
118
  type: 'error',
98
- message: text ?? 'Codex turn failed',
119
+ message,
120
+ code: classified.code,
121
+ retryable: classified.retryable,
122
+ };
123
+ }
124
+ const itemType = extractStringField(record.item, 'type');
125
+ const itemRecord = record.item && typeof record.item === 'object' ? record.item : {};
126
+ // G3: Codex 本地工具事件投影为 engineEvent,但不生成 type:'tool_call' AdapterEvent
127
+ // (避免 daemon 路径在服务端真实执行本地工具)。
128
+ if (type === 'item.started' && isCodexToolItemType(itemType)) {
129
+ const name = extractStringField(record.item, 'name')
130
+ ?? extractStringField(record.item, 'command')
131
+ ?? itemType;
132
+ const callId = extractStringField(record.item, 'id') ?? `codex-tool-${name}`;
133
+ return {
134
+ type: 'thinking',
135
+ content: `[Codex] ${type}: ${name}`,
136
+ engineEvent: {
137
+ type: 'tool_call',
138
+ callId,
139
+ name,
140
+ input: itemRecord.args ?? itemRecord.cmd ?? itemRecord.input ?? {},
141
+ },
142
+ };
143
+ }
144
+ if (type === 'item.completed' && isCodexToolItemType(itemType)) {
145
+ const name = extractStringField(record.item, 'name')
146
+ ?? extractStringField(record.item, 'command')
147
+ ?? itemType;
148
+ const callId = extractStringField(record.item, 'id') ?? `codex-tool-${name}`;
149
+ const outputText = text?.trim() ? text : '(no output)';
150
+ return {
151
+ type: 'thinking',
152
+ content: `[Codex] ${type}: ${name}`,
153
+ engineEvent: {
154
+ type: 'tool_result_delta',
155
+ callId,
156
+ name,
157
+ text: outputText,
158
+ },
99
159
  };
100
160
  }
101
161
  // Codex 最终回答的实测格式:item.completed + item.type=agent_message + item.text(顶层字符串)。
102
162
  // 必须作为 delta 抽取才能累加进 resultText;否则会被下面 name→thinking 分支吞掉,导致 result 为空。
103
- const itemType = extractStringField(record.item, 'type');
104
163
  if (type === 'item.completed' && itemType === 'agent_message' && text) {
105
164
  return {
106
165
  type: 'delta',
@@ -157,11 +216,21 @@ export class CodexAdapter {
157
216
  codexPath;
158
217
  sandbox;
159
218
  skipGitRepoCheck;
219
+ mcpBridgeUrl;
220
+ codexHome;
221
+ sessionStore;
160
222
  constructor(config) {
161
223
  const opts = config;
162
224
  this.codexPath = opts?.codexPath ?? 'codex';
163
225
  this.sandbox = opts?.sandbox ?? 'workspace-write';
164
226
  this.skipGitRepoCheck = opts?.skipGitRepoCheck ?? true;
227
+ this.mcpBridgeUrl = opts?.mcpBridgeUrl;
228
+ this.codexHome = opts?.codexHome ?? resolveCodexHome(process.env, opts?.agentId);
229
+ if (this.codexHome) {
230
+ ensureCodexHomeSync(this.codexHome);
231
+ writeCodexConfigIfNeeded(this.codexHome, this.mcpBridgeUrl);
232
+ }
233
+ this.sessionStore = new CodexSessionStore(this.codexHome);
165
234
  }
166
235
  async *execute(task, signal) {
167
236
  yield* executeWithResumeFallback(task, signal, (nextTask, nextSignal) => this.executeOnce(nextTask, nextSignal));
@@ -169,12 +238,38 @@ export class CodexAdapter {
169
238
  async *executeOnce(task, signal) {
170
239
  const workDir = task.workDir;
171
240
  if (workDir && !existsSync(workDir)) {
172
- yield { type: 'error', message: `Work directory does not exist: ${workDir}` };
241
+ yield {
242
+ type: 'error',
243
+ message: `Work directory does not exist: ${workDir}`,
244
+ code: 'cli_crash',
245
+ retryable: false,
246
+ };
173
247
  return;
174
248
  }
175
- const prompt = task.systemPrompt
176
- ? `${task.systemPrompt}\n\n---\n\n${task.input}`
177
- : task.input;
249
+ if (task.mcpToken && !this.mcpBridgeUrl) {
250
+ yield {
251
+ type: 'error',
252
+ message: 'TASK_BOUND_TOOL_PROXY_REQUIRED: MCP_BRIDGE_URL_MISSING',
253
+ code: 'cli_crash',
254
+ retryable: false,
255
+ };
256
+ return;
257
+ }
258
+ const budgeted = applyContextBudget(task);
259
+ if (budgeted.diagnostics) {
260
+ const d = budgeted.diagnostics;
261
+ yield {
262
+ type: 'thinking',
263
+ content: `[ContextBudget] input ${d.originalInputChars}→${d.finalInputChars} chars (${d.compression})`,
264
+ engineEvent: {
265
+ type: 'status',
266
+ text: `[ContextBudget] input ${d.originalInputChars}→${d.finalInputChars} chars (${d.compression})`,
267
+ },
268
+ };
269
+ }
270
+ const prompt = withSecurityPrefix(budgeted.systemPrompt
271
+ ? `${budgeted.systemPrompt}\n\n---\n\n${budgeted.input}`
272
+ : budgeted.input);
178
273
  const resumeSessionId = task.resumeSession ? task.sessionId : undefined;
179
274
  const args = resumeSessionId
180
275
  ? ['exec', 'resume', '--json', resumeSessionId]
@@ -184,16 +279,34 @@ export class CodexAdapter {
184
279
  args.push(prompt);
185
280
  let proc;
186
281
  try {
282
+ // 先剥凭据后显式加(harden-external-computer-daemon P1/D3)
283
+ const { env, strippedKeys } = sanitizeTaskEnv(task.env);
284
+ if (strippedKeys.length > 0) {
285
+ console.warn(`[CodexAdapter] 已剥离 ${strippedKeys.length} 个凭据形态环境变量(仅列 key 名): ${strippedKeys.join(', ')}`);
286
+ }
287
+ if (this.codexHome) {
288
+ env.CODEX_HOME = this.codexHome;
289
+ await this.sessionStore.ensureReady();
290
+ }
291
+ if (task.mcpToken) {
292
+ env[MCP_TOKEN_ENV] = task.mcpToken;
293
+ }
187
294
  proc = spawn(this.codexPath, args, {
188
295
  stdio: ['ignore', 'pipe', 'pipe'],
189
- env: { ...process.env, ...(task.env ?? {}) },
296
+ env,
190
297
  cwd: workDir ?? process.cwd(),
298
+ // POSIX 下独立进程组,killProcess 才能 kill(-pid) 杀整棵树
299
+ detached: process.platform !== 'win32',
191
300
  });
192
301
  }
193
302
  catch (err) {
194
303
  yield {
195
304
  type: 'error',
196
- message: `Failed to spawn codex: ${err instanceof Error ? err.message : String(err)}`,
305
+ message: err instanceof Error && err.message.startsWith('TASK_BOUND_TOOL_PROXY_REQUIRED:')
306
+ ? err.message
307
+ : `Failed to spawn codex: ${err instanceof Error ? err.message : String(err)}`,
308
+ code: 'cli_crash',
309
+ retryable: false,
197
310
  };
198
311
  return;
199
312
  }
@@ -202,6 +315,7 @@ export class CodexAdapter {
202
315
  let stderrText = '';
203
316
  let threadId = task.resumeSession && task.sessionId ? task.sessionId : undefined;
204
317
  const threadIdRef = { current: threadId };
318
+ const firstPrompt = budgeted.input;
205
319
  const onAbort = () => {
206
320
  if (!completed)
207
321
  killProcess(proc);
@@ -243,17 +357,37 @@ export class CodexAdapter {
243
357
  const exitResult = await waitForExit(proc);
244
358
  completed = true;
245
359
  if (exitResult.code === 0) {
360
+ const finalContent = resultText.trim();
361
+ if (threadId) {
362
+ await this.sessionStore.upsert({
363
+ threadId,
364
+ firstPrompt,
365
+ lastResultText: finalContent,
366
+ lastStatus: 'success',
367
+ });
368
+ }
246
369
  yield {
247
370
  type: 'result',
248
- content: resultText.trim(),
371
+ content: finalContent,
249
372
  sessionId: threadId,
250
373
  };
251
374
  return;
252
375
  }
253
- yield {
254
- type: 'error',
255
- message: stderrText.trim() || exitResult.error || `Codex exited with code ${exitResult.code}`,
256
- };
376
+ const message = stderrText.trim() || exitResult.error || `Codex exited with code ${exitResult.code}`;
377
+ if (threadId) {
378
+ await this.sessionStore.upsert({
379
+ threadId,
380
+ firstPrompt,
381
+ lastResultText: message,
382
+ lastStatus: 'failed',
383
+ });
384
+ }
385
+ const classified = classifyAdapterError({
386
+ message,
387
+ exitCode: exitResult.code,
388
+ aborted: signal?.aborted,
389
+ });
390
+ yield { type: 'error', message, code: classified.code, retryable: classified.retryable };
257
391
  }
258
392
  finally {
259
393
  signal?.removeEventListener('abort', onAbort);
@@ -282,5 +416,21 @@ export class CodexAdapter {
282
416
  });
283
417
  });
284
418
  }
419
+ // ── session queries (G1) ──
420
+ async listSessions(options = { dir: '' }) {
421
+ return this.sessionStore.listSessions(options);
422
+ }
423
+ async getSession(sessionId, options = {}) {
424
+ return this.sessionStore.getSession(sessionId, options);
425
+ }
426
+ async searchSessions(options) {
427
+ return this.sessionStore.searchSessions(options);
428
+ }
429
+ async deleteSession(sessionId, request = { requestId: '' }) {
430
+ return this.sessionStore.deleteSession(sessionId, request);
431
+ }
432
+ close() {
433
+ this.sessionStore.close();
434
+ }
285
435
  }
286
436
  //# sourceMappingURL=CodexAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodexAdapter.js","sourceRoot":"","sources":["../../../src/adapters/codex/CodexAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CodexAdapter.js","sourceRoot":"","sources":["../../../src/adapters/codex/CodexAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { SessionDeleteRequest, SessionDeleteResult, SessionDetailOptions, SessionDetailResult, SessionListOptions, SessionListResult, SessionSearchOptions, SessionSearchResult } from '../../core/AgentAdapter.js';
2
+ export interface CodexSessionRecord {
3
+ threadId: string;
4
+ summary?: string;
5
+ firstPrompt?: string;
6
+ createdAt: string;
7
+ lastActivityAt: string;
8
+ messageCount: number;
9
+ lastStatus?: string;
10
+ lastResultText?: string;
11
+ rolloutPath?: string;
12
+ }
13
+ /**
14
+ * Codex 会话台账:在持久 CODEX_HOME 下维护 sqlite 元数据表。
15
+ *
16
+ * - 动态导入 node:sqlite;不可用时降级为 no-op(方法返回空结果或错误)。
17
+ * - 7 天 TTL 惰性清理,并同步删除记录的 rollout 文件。
18
+ * - 不解析 Codex rollout 内容(当前无真实样本),仅保存 last_result_text 与 first_prompt。
19
+ */
20
+ export declare class CodexSessionStore {
21
+ private readonly homePath?;
22
+ private db;
23
+ private closed;
24
+ constructor(homePath?: string | undefined);
25
+ close(): void;
26
+ ensureReady(): Promise<void>;
27
+ upsert(patch: Partial<CodexSessionRecord> & {
28
+ threadId: string;
29
+ }): Promise<void>;
30
+ listSessions(options?: Partial<SessionListOptions>): Promise<SessionListResult>;
31
+ getSession(threadId: string, _options?: SessionDetailOptions): Promise<SessionDetailResult>;
32
+ searchSessions(options: SessionSearchOptions): Promise<SessionSearchResult>;
33
+ deleteSession(threadId: string, _request?: Partial<SessionDeleteRequest>): Promise<SessionDeleteResult>;
34
+ private openDb;
35
+ private pruneExpired;
36
+ private rowToEntry;
37
+ private emptyDetailResult;
38
+ }
39
+ export declare function resolveCodexHome(env?: NodeJS.ProcessEnv, agentId?: string): string | undefined;
40
+ export declare function ensureCodexHomeSync(homePath?: string): void;
41
+ export declare function writeCodexConfigIfNeeded(homePath: string, mcpBridgeUrl?: string): void;
42
+ //# sourceMappingURL=CodexSessionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodexSessionStore.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/CodexSessionStore.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEnB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgCD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAHtC,OAAO,CAAC,EAAE,CAA6B;IACvC,OAAO,CAAC,MAAM,CAAS;gBAEM,QAAQ,CAAC,EAAE,MAAM,YAAA;IAE9C,KAAK,IAAI,IAAI;IAQP,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyChF,YAAY,CAAC,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBnF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgC/F,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoC3E,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAenG,MAAM;IAwCpB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,iBAAiB;CAW1B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI3G;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAG3D;AAID,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CA6BtF"}
@@ -0,0 +1,279 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ const TTL_MS = 7 * 24 * 60 * 60 * 1000;
4
+ function isoNow() {
5
+ return new Date().toISOString();
6
+ }
7
+ function asRecord(row) {
8
+ return (row ?? {});
9
+ }
10
+ function optionalString(value) {
11
+ return typeof value === 'string' ? value : undefined;
12
+ }
13
+ function optionalNumber(value) {
14
+ return typeof value === 'number' ? value : undefined;
15
+ }
16
+ /**
17
+ * Codex 会话台账:在持久 CODEX_HOME 下维护 sqlite 元数据表。
18
+ *
19
+ * - 动态导入 node:sqlite;不可用时降级为 no-op(方法返回空结果或错误)。
20
+ * - 7 天 TTL 惰性清理,并同步删除记录的 rollout 文件。
21
+ * - 不解析 Codex rollout 内容(当前无真实样本),仅保存 last_result_text 与 first_prompt。
22
+ */
23
+ export class CodexSessionStore {
24
+ homePath;
25
+ db = null;
26
+ closed = false;
27
+ constructor(homePath) {
28
+ this.homePath = homePath;
29
+ }
30
+ close() {
31
+ this.closed = true;
32
+ if (this.db) {
33
+ try {
34
+ this.db.close();
35
+ }
36
+ catch { /* best-effort */ }
37
+ this.db = null;
38
+ }
39
+ }
40
+ async ensureReady() {
41
+ await this.openDb();
42
+ }
43
+ async upsert(patch) {
44
+ const db = await this.openDb();
45
+ if (!db)
46
+ return;
47
+ const now = isoNow();
48
+ const existing = db.prepare('SELECT message_count FROM sessions WHERE thread_id = ?')
49
+ .get(patch.threadId);
50
+ if (existing) {
51
+ db.prepare(`UPDATE sessions
52
+ SET last_activity_at = ?,
53
+ last_status = coalesce(?, last_status),
54
+ last_result_text = coalesce(?, last_result_text),
55
+ rollout_path = coalesce(?, rollout_path),
56
+ message_count = message_count + 1
57
+ WHERE thread_id = ?`).run(now, patch.lastStatus ?? null, patch.lastResultText ?? null, patch.rolloutPath ?? null, patch.threadId);
58
+ return;
59
+ }
60
+ const firstPrompt = patch.firstPrompt;
61
+ const summary = patch.summary ?? (firstPrompt ? firstPrompt.slice(0, 120) : undefined);
62
+ db.prepare(`INSERT INTO sessions (
63
+ thread_id, summary, first_prompt, created_at, last_activity_at,
64
+ message_count, last_status, last_result_text, rollout_path
65
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(patch.threadId, summary ?? null, firstPrompt ?? null, patch.createdAt ?? now, patch.lastActivityAt ?? now, patch.messageCount ?? 1, patch.lastStatus ?? null, patch.lastResultText ?? null, patch.rolloutPath ?? null);
66
+ }
67
+ async listSessions(options = {}) {
68
+ const db = await this.openDb();
69
+ if (!db)
70
+ return { sessions: [] };
71
+ this.pruneExpired(db);
72
+ const limit = Math.max(1, Math.min(options.limit ?? 50, 200));
73
+ const rows = db.prepare(`SELECT thread_id, summary, first_prompt, created_at, last_activity_at,
74
+ message_count, last_status
75
+ FROM sessions
76
+ ORDER BY last_activity_at DESC
77
+ LIMIT ?`).all(limit);
78
+ return { sessions: rows.map((r) => this.rowToEntry(asRecord(r))) };
79
+ }
80
+ async getSession(threadId, _options = {}) {
81
+ const db = await this.openDb();
82
+ if (!db) {
83
+ return this.emptyDetailResult(threadId, 'Codex session store unavailable');
84
+ }
85
+ const row = db.prepare(`SELECT thread_id, summary, first_prompt, created_at, last_activity_at,
86
+ message_count, last_status, last_result_text
87
+ FROM sessions
88
+ WHERE thread_id = ?`).get(threadId);
89
+ if (!row) {
90
+ return this.emptyDetailResult(threadId, 'Session not found');
91
+ }
92
+ const entry = this.rowToEntry(row);
93
+ const lastResultText = optionalString(row.last_result_text) ?? '';
94
+ const firstPrompt = optionalString(row.first_prompt);
95
+ return {
96
+ session: entry,
97
+ messageCount: optionalNumber(row.message_count) ?? 0,
98
+ truncated: false,
99
+ userPrompts: firstPrompt ? [firstPrompt] : [],
100
+ assistantText: lastResultText,
101
+ lastAssistantText: lastResultText,
102
+ rawMessages: undefined,
103
+ rawMessagesIncluded: false,
104
+ };
105
+ }
106
+ async searchSessions(options) {
107
+ const db = await this.openDb();
108
+ if (!db)
109
+ return { sessions: [] };
110
+ this.pruneExpired(db);
111
+ const needle = options.query?.trim().toLowerCase();
112
+ if (!needle)
113
+ return { sessions: [] };
114
+ const rows = db.prepare(`SELECT thread_id, summary, first_prompt, created_at, last_activity_at,
115
+ message_count, last_status
116
+ FROM sessions
117
+ ORDER BY last_activity_at DESC`).all();
118
+ const matched = rows
119
+ .map((r) => this.rowToEntry(asRecord(r)))
120
+ .filter((entry) => {
121
+ const haystack = [entry.id, entry.summary, entry.firstPrompt, entry.cwd, entry.projectPath]
122
+ .filter(Boolean)
123
+ .join(' ')
124
+ .toLowerCase();
125
+ return haystack.includes(needle);
126
+ });
127
+ let offset = 0;
128
+ if (options.cursor) {
129
+ const parsed = Number.parseInt(options.cursor, 10);
130
+ if (!Number.isNaN(parsed))
131
+ offset = Math.max(0, parsed);
132
+ }
133
+ const limit = Math.min(options.limit ?? 50, 100);
134
+ const page = matched.slice(offset, offset + limit);
135
+ const nextCursor = matched.length > offset + limit ? String(offset + limit) : undefined;
136
+ return { sessions: page, ...(nextCursor ? { nextCursor } : {}) };
137
+ }
138
+ async deleteSession(threadId, _request = {}) {
139
+ const db = await this.openDb();
140
+ if (!db)
141
+ return { status: 'rejected', error: 'Codex session store unavailable' };
142
+ const row = db.prepare('SELECT rollout_path FROM sessions WHERE thread_id = ?')
143
+ .get(threadId);
144
+ if (row?.rollout_path) {
145
+ try {
146
+ unlinkSync(row.rollout_path);
147
+ }
148
+ catch { /* best-effort */ }
149
+ }
150
+ const result = db.prepare('DELETE FROM sessions WHERE thread_id = ?').run(threadId);
151
+ const deleted = result.changes > 0;
152
+ return { status: deleted ? 'deleted' : 'already_deleted' };
153
+ }
154
+ async openDb() {
155
+ if (this.db)
156
+ return this.db;
157
+ if (this.closed || !this.homePath)
158
+ return null;
159
+ try {
160
+ if (!existsSync(this.homePath))
161
+ mkdirSync(this.homePath, { recursive: true });
162
+ const sqlite = await import('node:sqlite');
163
+ const dbPath = join(this.homePath, 'sessions.db');
164
+ const db = new sqlite.DatabaseSync(dbPath);
165
+ db.exec(`
166
+ PRAGMA journal_mode = WAL;
167
+ PRAGMA foreign_keys = ON;
168
+ PRAGMA busy_timeout = 5000;
169
+ `);
170
+ db.exec(`
171
+ CREATE TABLE IF NOT EXISTS sessions (
172
+ thread_id TEXT PRIMARY KEY,
173
+ summary TEXT,
174
+ first_prompt TEXT,
175
+ created_at TEXT NOT NULL,
176
+ last_activity_at TEXT NOT NULL,
177
+ message_count INTEGER NOT NULL DEFAULT 1,
178
+ last_status TEXT,
179
+ last_result_text TEXT,
180
+ rollout_path TEXT
181
+ )
182
+ `);
183
+ this.pruneExpired(db);
184
+ this.db = db;
185
+ return db;
186
+ }
187
+ catch (err) {
188
+ console.warn(`[CodexSessionStore] Failed to open session database at ${this.homePath}: ${err instanceof Error ? err.message : String(err)}`);
189
+ return null;
190
+ }
191
+ }
192
+ pruneExpired(db) {
193
+ try {
194
+ const cutoff = new Date(Date.now() - TTL_MS).toISOString();
195
+ const rows = db.prepare('SELECT rollout_path FROM sessions WHERE last_activity_at < ?').all(cutoff);
196
+ for (const row of rows) {
197
+ if (row.rollout_path) {
198
+ try {
199
+ unlinkSync(row.rollout_path);
200
+ }
201
+ catch { /* best-effort */ }
202
+ }
203
+ }
204
+ db.prepare('DELETE FROM sessions WHERE last_activity_at < ?').run(cutoff);
205
+ }
206
+ catch { /* best-effort */ }
207
+ }
208
+ rowToEntry(row) {
209
+ return {
210
+ id: String(row.thread_id),
211
+ summary: optionalString(row.summary),
212
+ firstPrompt: optionalString(row.first_prompt),
213
+ createdAt: optionalString(row.created_at),
214
+ lastActivityAt: optionalString(row.last_activity_at),
215
+ messageCount: optionalNumber(row.message_count),
216
+ status: optionalString(row.last_status),
217
+ // Codex rollout 目录就是 CODEX_HOME 本身;按会话解析 rollout 内容后续补充。
218
+ projectPath: this.homePath,
219
+ };
220
+ }
221
+ emptyDetailResult(threadId, error) {
222
+ return {
223
+ session: { id: threadId },
224
+ messageCount: 0,
225
+ truncated: false,
226
+ userPrompts: [],
227
+ assistantText: '',
228
+ lastAssistantText: '',
229
+ error,
230
+ };
231
+ }
232
+ }
233
+ export function resolveCodexHome(env = process.env, agentId) {
234
+ const base = env.WINMATRIX_CODEX_HOME?.trim();
235
+ if (!base)
236
+ return undefined;
237
+ return agentId ? join(base, agentId) : base;
238
+ }
239
+ export function ensureCodexHomeSync(homePath) {
240
+ if (!homePath)
241
+ return;
242
+ if (!existsSync(homePath))
243
+ mkdirSync(homePath, { recursive: true });
244
+ }
245
+ const MCP_TOKEN_ENV = 'WINMATRIX_MCP_TOKEN';
246
+ export function writeCodexConfigIfNeeded(homePath, mcpBridgeUrl) {
247
+ if (!mcpBridgeUrl)
248
+ return;
249
+ const desired = [
250
+ '[mcp_servers.winmatrix]',
251
+ `url = ${JSON.stringify(mcpBridgeUrl)}`,
252
+ `bearer_token_env_var = ${JSON.stringify(MCP_TOKEN_ENV)}`,
253
+ '',
254
+ ].join('\n');
255
+ const configPath = join(homePath, 'config.toml');
256
+ try {
257
+ if (existsSync(configPath) && readFileSync(configPath, 'utf8') === desired) {
258
+ return;
259
+ }
260
+ }
261
+ catch {
262
+ // 无法读取时继续覆写
263
+ }
264
+ const parent = dirname(configPath);
265
+ if (!existsSync(parent))
266
+ mkdirSync(parent, { recursive: true });
267
+ const tmpPath = `${configPath}.tmp.${process.hrtime.bigint().toString(36)}`;
268
+ writeFileSync(tmpPath, desired, { encoding: 'utf8', mode: 0o600 });
269
+ try {
270
+ renameSync(tmpPath, configPath);
271
+ }
272
+ catch {
273
+ try {
274
+ unlinkSync(tmpPath);
275
+ }
276
+ catch { /* ignore */ }
277
+ }
278
+ }
279
+ //# sourceMappingURL=CodexSessionStore.js.map