@winmatrix/agent-sdk 0.1.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 (93) hide show
  1. package/dist/adapters/claude/ClaudeAdapter.d.ts +40 -0
  2. package/dist/adapters/claude/ClaudeAdapter.d.ts.map +1 -0
  3. package/dist/adapters/claude/ClaudeAdapter.js +515 -0
  4. package/dist/adapters/claude/ClaudeAdapter.js.map +1 -0
  5. package/dist/adapters/claude/ClaudeStreamParser.d.ts +39 -0
  6. package/dist/adapters/claude/ClaudeStreamParser.d.ts.map +1 -0
  7. package/dist/adapters/claude/ClaudeStreamParser.js +80 -0
  8. package/dist/adapters/claude/ClaudeStreamParser.js.map +1 -0
  9. package/dist/adapters/hermes/HermesAdapter.d.ts +37 -0
  10. package/dist/adapters/hermes/HermesAdapter.d.ts.map +1 -0
  11. package/dist/adapters/hermes/HermesAdapter.js +342 -0
  12. package/dist/adapters/hermes/HermesAdapter.js.map +1 -0
  13. package/dist/adapters/openclaw/OpenClawAdapter.d.ts +77 -0
  14. package/dist/adapters/openclaw/OpenClawAdapter.d.ts.map +1 -0
  15. package/dist/adapters/openclaw/OpenClawAdapter.js +798 -0
  16. package/dist/adapters/openclaw/OpenClawAdapter.js.map +1 -0
  17. package/dist/adapters/openclaw/unwrapOpenClawPayloads.d.ts +6 -0
  18. package/dist/adapters/openclaw/unwrapOpenClawPayloads.d.ts.map +1 -0
  19. package/dist/adapters/openclaw/unwrapOpenClawPayloads.js +24 -0
  20. package/dist/adapters/openclaw/unwrapOpenClawPayloads.js.map +1 -0
  21. package/dist/core/AdapterRegistry.d.ts +21 -0
  22. package/dist/core/AdapterRegistry.d.ts.map +1 -0
  23. package/dist/core/AdapterRegistry.js +37 -0
  24. package/dist/core/AdapterRegistry.js.map +1 -0
  25. package/dist/core/AgentAdapter.d.ts +165 -0
  26. package/dist/core/AgentAdapter.d.ts.map +1 -0
  27. package/dist/core/AgentAdapter.js +23 -0
  28. package/dist/core/AgentAdapter.js.map +1 -0
  29. package/dist/core/DaemonClient.d.ts +102 -0
  30. package/dist/core/DaemonClient.d.ts.map +1 -0
  31. package/dist/core/DaemonClient.js +225 -0
  32. package/dist/core/DaemonClient.js.map +1 -0
  33. package/dist/core/Protocol.d.ts +257 -0
  34. package/dist/core/Protocol.d.ts.map +1 -0
  35. package/dist/core/Protocol.js +140 -0
  36. package/dist/core/Protocol.js.map +1 -0
  37. package/dist/core/RuntimeDetector.d.ts +7 -0
  38. package/dist/core/RuntimeDetector.d.ts.map +1 -0
  39. package/dist/core/RuntimeDetector.js +45 -0
  40. package/dist/core/RuntimeDetector.js.map +1 -0
  41. package/dist/core/WinMatrixAgentClient.d.ts +134 -0
  42. package/dist/core/WinMatrixAgentClient.d.ts.map +1 -0
  43. package/dist/core/WinMatrixAgentClient.js +382 -0
  44. package/dist/core/WinMatrixAgentClient.js.map +1 -0
  45. package/dist/index.d.ts +36 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +33 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/runtime/DualRuntimeBridge.d.ts +38 -0
  50. package/dist/runtime/DualRuntimeBridge.d.ts.map +1 -0
  51. package/dist/runtime/DualRuntimeBridge.js +305 -0
  52. package/dist/runtime/DualRuntimeBridge.js.map +1 -0
  53. package/dist/runtime/bridgeConfigLoader.d.ts +14 -0
  54. package/dist/runtime/bridgeConfigLoader.d.ts.map +1 -0
  55. package/dist/runtime/bridgeConfigLoader.js +133 -0
  56. package/dist/runtime/bridgeConfigLoader.js.map +1 -0
  57. package/dist/runtime/bridgeConfigTypes.d.ts +26 -0
  58. package/dist/runtime/bridgeConfigTypes.d.ts.map +1 -0
  59. package/dist/runtime/bridgeConfigTypes.js +6 -0
  60. package/dist/runtime/bridgeConfigTypes.js.map +1 -0
  61. package/dist/runtime/bridgeHome.d.ts +19 -0
  62. package/dist/runtime/bridgeHome.d.ts.map +1 -0
  63. package/dist/runtime/bridgeHome.js +61 -0
  64. package/dist/runtime/bridgeHome.js.map +1 -0
  65. package/dist/runtime/bridgeReconnectPolicy.d.ts +8 -0
  66. package/dist/runtime/bridgeReconnectPolicy.d.ts.map +1 -0
  67. package/dist/runtime/bridgeReconnectPolicy.js +16 -0
  68. package/dist/runtime/bridgeReconnectPolicy.js.map +1 -0
  69. package/dist/runtime/bridgeTaskJournal.d.ts +7 -0
  70. package/dist/runtime/bridgeTaskJournal.d.ts.map +1 -0
  71. package/dist/runtime/bridgeTaskJournal.js +66 -0
  72. package/dist/runtime/bridgeTaskJournal.js.map +1 -0
  73. package/dist/runtime/localRuntimeAvailabilityMonitor.d.ts +22 -0
  74. package/dist/runtime/localRuntimeAvailabilityMonitor.d.ts.map +1 -0
  75. package/dist/runtime/localRuntimeAvailabilityMonitor.js +81 -0
  76. package/dist/runtime/localRuntimeAvailabilityMonitor.js.map +1 -0
  77. package/dist/runtime/runDualRuntimeBridge.d.ts +2 -0
  78. package/dist/runtime/runDualRuntimeBridge.d.ts.map +1 -0
  79. package/dist/runtime/runDualRuntimeBridge.js +32 -0
  80. package/dist/runtime/runDualRuntimeBridge.js.map +1 -0
  81. package/dist/utils/parseSkillMd.d.ts +10 -0
  82. package/dist/utils/parseSkillMd.d.ts.map +1 -0
  83. package/dist/utils/parseSkillMd.js +34 -0
  84. package/dist/utils/parseSkillMd.js.map +1 -0
  85. package/dist/utils/processUtils.d.ts +8 -0
  86. package/dist/utils/processUtils.d.ts.map +1 -0
  87. package/dist/utils/processUtils.js +31 -0
  88. package/dist/utils/processUtils.js.map +1 -0
  89. package/dist/utils/spawnHelper.d.ts +38 -0
  90. package/dist/utils/spawnHelper.d.ts.map +1 -0
  91. package/dist/utils/spawnHelper.js +122 -0
  92. package/dist/utils/spawnHelper.js.map +1 -0
  93. package/package.json +61 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ClaudeAdapter — spawn Claude Code CLI,通过 stream-json over stdio 通信
3
+ *
4
+ * 不依赖 @anthropic-ai/claude-agent-sdk。
5
+ * 会话查询直接读取 ~/.claude/projects/ 目录结构。
6
+ */
7
+ import { parseSkillMd } from '../../utils/parseSkillMd.js';
8
+ export { parseSkillMd };
9
+ import type { AgentAdapter, AdapterEvent, AdapterMeta, AgentTaskContext, HealthStatus, SessionListOptions, SessionListResult, SessionDetailOptions, SessionDetailResult } from '../../core/AgentAdapter.js';
10
+ export declare class ClaudeAdapter implements AgentAdapter {
11
+ readonly meta: AdapterMeta;
12
+ private claudePath;
13
+ private mcpBridgeUrl?;
14
+ private mcpApiKey?;
15
+ private mcpConfigWritten;
16
+ constructor(config?: Record<string, unknown>);
17
+ execute(task: AgentTaskContext, signal?: AbortSignal): AsyncGenerator<AdapterEvent>;
18
+ healthCheck(): Promise<HealthStatus>;
19
+ listSessions(options: SessionListOptions): Promise<SessionListResult>;
20
+ getSession(sessionId: string, options?: SessionDetailOptions): Promise<SessionDetailResult>;
21
+ discoverSkills(context: {
22
+ workDir?: string;
23
+ }): Promise<Array<{
24
+ name: string;
25
+ description?: string;
26
+ source?: string;
27
+ category?: string;
28
+ }>>;
29
+ private scanSkillDir;
30
+ /**
31
+ * 生成 Claude Code MCP 配置文件。
32
+ *
33
+ * @param workDir - 工作目录
34
+ * @param mcpToken - 本任务的 MCP token(per-task session ID),优先级高于 this.mcpApiKey
35
+ */
36
+ private generateMcpConfig;
37
+ private strHash;
38
+ private dirToProjectHash;
39
+ }
40
+ //# sourceMappingURL=ClaudeAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude/ClaudeAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AAepC,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAiBxB;IAEF,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAsC;gBAElD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQrC,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;IAmMpF,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;IA0BpC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+CrE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0G/F,cAAc,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA+B/I,OAAO,CAAC,YAAY;IAsBpB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2DzB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,gBAAgB;CAGzB"}
@@ -0,0 +1,515 @@
1
+ /**
2
+ * ClaudeAdapter — spawn Claude Code CLI,通过 stream-json over stdio 通信
3
+ *
4
+ * 不依赖 @anthropic-ai/claude-agent-sdk。
5
+ * 会话查询直接读取 ~/.claude/projects/ 目录结构。
6
+ */
7
+ import { spawn } from 'node:child_process';
8
+ import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { randomUUID } from 'node:crypto';
11
+ import { homedir } from 'node:os';
12
+ import { parseSkillMd } from '../../utils/parseSkillMd.js';
13
+ import { waitForExit, killProcess } from '../../utils/processUtils.js';
14
+ export { parseSkillMd };
15
+ import { isLocalTool } from '../../core/AgentAdapter.js';
16
+ import { parseClaudeLine, splitLines, } from './ClaudeStreamParser.js';
17
+ const CLAUDE_BASE_ARGS = [
18
+ '--print',
19
+ '--verbose',
20
+ '--input-format', 'stream-json',
21
+ '--output-format', 'stream-json',
22
+ '--include-partial-messages',
23
+ ];
24
+ export class ClaudeAdapter {
25
+ meta = {
26
+ agentType: 'claude-code',
27
+ runtime: 'claude',
28
+ capabilities: {
29
+ streaming: true,
30
+ toolCall: true,
31
+ session: true,
32
+ cancellation: false,
33
+ },
34
+ tools: ['Bash', 'Read', 'Write', 'Edit', 'Glob', 'Grep', 'WebSearch', 'WebFetch', 'Task', 'Agent', 'NotebookEdit', 'EnterPlanMode'],
35
+ skills: [],
36
+ toolCategories: {
37
+ fileOps: ['Read', 'Write', 'Edit', 'Glob', 'Grep', 'NotebookEdit'],
38
+ shell: ['Bash'],
39
+ search: ['WebSearch', 'WebFetch'],
40
+ agent: ['Task', 'Agent', 'EnterPlanMode'],
41
+ },
42
+ };
43
+ claudePath;
44
+ mcpBridgeUrl;
45
+ mcpApiKey;
46
+ mcpConfigWritten = new Map();
47
+ constructor(config) {
48
+ this.claudePath = config?.claudePath ?? 'claude';
49
+ this.mcpBridgeUrl = config?.mcpBridgeUrl;
50
+ this.mcpApiKey = config?.mcpApiKey;
51
+ }
52
+ // ── execute ──
53
+ async *execute(task, signal) {
54
+ const workDir = task.workDir;
55
+ if (workDir && !existsSync(workDir)) {
56
+ yield { type: 'error', message: `Work directory does not exist: ${workDir}` };
57
+ return;
58
+ }
59
+ const args = [...CLAUDE_BASE_ARGS];
60
+ // Permission mode
61
+ args.push('--permission-mode', task.claude?.permissionMode ?? 'bypassPermissions');
62
+ // workDir
63
+ if (workDir) {
64
+ args.push('--add-dir', workDir);
65
+ }
66
+ // Session management
67
+ let sessionId;
68
+ const isOneshot = task.mode === 'oneshot';
69
+ if (!isOneshot) {
70
+ if (task.forkSession) {
71
+ sessionId = randomUUID();
72
+ args.push('--session-id', sessionId);
73
+ }
74
+ else if (task.resumeSession && task.sessionId) {
75
+ sessionId = task.sessionId;
76
+ args.push('--resume', sessionId);
77
+ }
78
+ else if (task.sessionId) {
79
+ sessionId = task.sessionId;
80
+ args.push('--session-id', sessionId);
81
+ }
82
+ else {
83
+ sessionId = randomUUID();
84
+ args.push('--session-id', sessionId);
85
+ }
86
+ }
87
+ // Local tools (whitelist)
88
+ const tools = task.claude?.tools ?? ['Bash', 'Read', 'Write', 'Edit'];
89
+ args.push('--allowedTools', tools.join(','));
90
+ // Disallowed tools
91
+ if (task.claude?.disallowedTools?.length) {
92
+ args.push('--disallowedTools', task.claude.disallowedTools.join(','));
93
+ }
94
+ // Budget
95
+ if (task.claude?.maxBudgetUsd !== undefined) {
96
+ args.push('--max-budget-usd', String(task.claude.maxBudgetUsd));
97
+ }
98
+ // System prompt: task.systemPrompt 优先于 task.claude.systemPrompt
99
+ const effectiveSystemPrompt = task.systemPrompt ?? task.claude?.systemPrompt;
100
+ if (effectiveSystemPrompt) {
101
+ args.push('--append-system-prompt', effectiveSystemPrompt);
102
+ }
103
+ // MCP Bridge 配置:在 workDir 下生成 .claude/mcp.json,让 Claude Code 能调用 WinMatrix 工具
104
+ let mcpConfigFile;
105
+ if (this.mcpBridgeUrl) {
106
+ const mcpArgs = this.generateMcpConfig(workDir, task.mcpToken);
107
+ if (mcpArgs) {
108
+ args.push(...mcpArgs);
109
+ // Per-task MCP 文件需要清理,避免磁盘泄露
110
+ if (task.mcpToken && mcpArgs.length >= 2 && mcpArgs[0] === '--mcp-config') {
111
+ mcpConfigFile = mcpArgs[1];
112
+ }
113
+ }
114
+ }
115
+ // Build env
116
+ const env = { ...process.env, ...(task.env ?? {}) };
117
+ // Spawn
118
+ let proc;
119
+ try {
120
+ proc = spawn(this.claudePath, args, {
121
+ stdio: ['pipe', 'pipe', 'pipe'],
122
+ env,
123
+ cwd: workDir ?? process.cwd(),
124
+ });
125
+ }
126
+ catch (err) {
127
+ yield { type: 'error', message: `Failed to spawn claude: ${err instanceof Error ? err.message : String(err)}` };
128
+ return;
129
+ }
130
+ // Send user message via stdin (stream-json protocol)
131
+ const userMessage = JSON.stringify({
132
+ type: 'user',
133
+ message: { role: 'user', content: task.input },
134
+ }) + '\n';
135
+ proc.stdin?.write(userMessage);
136
+ proc.stdin?.end();
137
+ // Track result fields
138
+ let extractedSessionId;
139
+ let extractedResultText;
140
+ let extractedUsage;
141
+ let completed = false;
142
+ // Abort handler
143
+ const onAbort = () => {
144
+ if (!completed) {
145
+ killProcess(proc);
146
+ }
147
+ };
148
+ signal?.addEventListener('abort', onAbort, { once: true });
149
+ try {
150
+ let stdoutBuffer = '';
151
+ for await (const chunk of proc.stdout) {
152
+ if (signal?.aborted)
153
+ break;
154
+ const text = typeof chunk === 'string' ? chunk : chunk.toString('utf-8');
155
+ const { lines, remainder } = splitLines(stdoutBuffer, text);
156
+ stdoutBuffer = remainder;
157
+ for (const line of lines) {
158
+ const action = parseClaudeLine(line);
159
+ switch (action.type) {
160
+ case 'delta':
161
+ yield { type: 'delta', content: action.text };
162
+ break;
163
+ case 'tool_use':
164
+ if (isLocalTool(action.toolName)) {
165
+ yield { type: 'delta', content: `[调用本地工具: ${action.toolName}]` };
166
+ }
167
+ else {
168
+ yield {
169
+ type: 'tool_call',
170
+ callId: randomUUID(),
171
+ name: action.toolName,
172
+ args: action.toolInput ?? {},
173
+ };
174
+ }
175
+ break;
176
+ case 'result':
177
+ if (action.sessionId)
178
+ extractedSessionId = action.sessionId;
179
+ if (action.result)
180
+ extractedResultText = action.result;
181
+ if (action.usage) {
182
+ extractedUsage = {
183
+ input_tokens: action.usage.input_tokens,
184
+ output_tokens: action.usage.output_tokens,
185
+ };
186
+ }
187
+ break;
188
+ case 'error':
189
+ completed = true;
190
+ yield { type: 'error', message: action.message };
191
+ return;
192
+ case 'skip':
193
+ break;
194
+ }
195
+ }
196
+ }
197
+ // Wait for process exit
198
+ const exitResult = await waitForExit(proc);
199
+ if (!completed) {
200
+ completed = true;
201
+ if (extractedSessionId || exitResult.code === 0) {
202
+ yield {
203
+ type: 'result',
204
+ content: extractedResultText ?? '',
205
+ sessionId: isOneshot ? undefined : (extractedSessionId ?? sessionId),
206
+ usage: extractedUsage
207
+ ? { input: extractedUsage.input_tokens, output: extractedUsage.output_tokens }
208
+ : undefined,
209
+ };
210
+ }
211
+ else {
212
+ yield {
213
+ type: 'error',
214
+ message: exitResult.error ?? `Claude Code exited with code ${exitResult.code}`,
215
+ };
216
+ }
217
+ }
218
+ }
219
+ finally {
220
+ signal?.removeEventListener('abort', onAbort);
221
+ killProcess(proc);
222
+ if (mcpConfigFile) {
223
+ try {
224
+ unlinkSync(mcpConfigFile);
225
+ }
226
+ catch { /* best-effort */ }
227
+ }
228
+ }
229
+ }
230
+ // ── healthCheck ──
231
+ async healthCheck() {
232
+ return new Promise((resolve) => {
233
+ const proc = spawn(this.claudePath, ['--version'], {
234
+ stdio: ['ignore', 'pipe', 'pipe'],
235
+ timeout: 10_000,
236
+ });
237
+ let output = '';
238
+ proc.stdout?.on('data', (d) => { output += d.toString('utf-8'); });
239
+ proc.on('exit', (code) => {
240
+ if (code === 0) {
241
+ resolve({ available: true, version: output.trim() });
242
+ }
243
+ else {
244
+ resolve({ available: false, error: `claude --version exited with code ${code}` });
245
+ }
246
+ });
247
+ proc.on('error', (err) => {
248
+ resolve({ available: false, error: `claude CLI not found: ${err.message}` });
249
+ });
250
+ });
251
+ }
252
+ // ── listSessions ──
253
+ async listSessions(options) {
254
+ try {
255
+ const dir = options.dir || '';
256
+ const projectHash = this.dirToProjectHash(dir);
257
+ const sessionsDir = join(homedir(), '.claude', 'projects', projectHash);
258
+ if (!existsSync(sessionsDir)) {
259
+ return { sessions: [] };
260
+ }
261
+ const entries = [];
262
+ const sessionDirs = readdirSync(sessionsDir, { withFileTypes: true })
263
+ .filter((d) => d.isDirectory());
264
+ for (const dir of sessionDirs) {
265
+ const metaPath = join(sessionsDir, dir.name, 'metadata.json');
266
+ if (!existsSync(metaPath))
267
+ continue;
268
+ try {
269
+ const meta = JSON.parse(readFileSync(metaPath, 'utf-8'));
270
+ entries.push({
271
+ id: dir.name,
272
+ cwd: meta.cwd,
273
+ projectPath: options.dir,
274
+ summary: meta.summary,
275
+ createdAt: meta.createdAt ?? meta.created_at,
276
+ lastActivityAt: meta.lastActivityAt ?? meta.last_activity_at,
277
+ messageCount: meta.messageCount ?? meta.message_count,
278
+ status: meta.status,
279
+ });
280
+ }
281
+ catch { /* skip malformed */ }
282
+ }
283
+ const limit = options.limit ?? 50;
284
+ entries.sort((a, b) => {
285
+ const da = a.lastActivityAt ?? a.createdAt ?? '';
286
+ const db = b.lastActivityAt ?? b.createdAt ?? '';
287
+ return db.localeCompare(da);
288
+ });
289
+ return { sessions: entries.slice(0, limit) };
290
+ }
291
+ catch (err) {
292
+ return { sessions: [], error: err instanceof Error ? err.message : String(err) };
293
+ }
294
+ }
295
+ // ── getSession ──
296
+ async getSession(sessionId, options = {}) {
297
+ try {
298
+ const dir = options.dir;
299
+ if (!dir) {
300
+ return {
301
+ session: { id: sessionId },
302
+ messageCount: 0,
303
+ truncated: false,
304
+ userPrompts: [],
305
+ assistantText: '',
306
+ lastAssistantText: '',
307
+ error: 'dir is required for ClaudeAdapter.getSession',
308
+ };
309
+ }
310
+ const projectHash = this.dirToProjectHash(dir);
311
+ const sessionDir = join(homedir(), '.claude', 'projects', projectHash, sessionId);
312
+ if (!existsSync(sessionDir)) {
313
+ return {
314
+ session: { id: sessionId },
315
+ messageCount: 0,
316
+ truncated: false,
317
+ userPrompts: [],
318
+ assistantText: '',
319
+ lastAssistantText: '',
320
+ error: 'Session not found',
321
+ };
322
+ }
323
+ // Read metadata
324
+ let sessionEntry = { id: sessionId };
325
+ const metaPath = join(sessionDir, 'metadata.json');
326
+ if (existsSync(metaPath)) {
327
+ try {
328
+ const meta = JSON.parse(readFileSync(metaPath, 'utf-8'));
329
+ sessionEntry = {
330
+ id: sessionId,
331
+ cwd: meta.cwd,
332
+ projectPath: dir,
333
+ summary: meta.summary,
334
+ createdAt: meta.createdAt ?? meta.created_at,
335
+ lastActivityAt: meta.lastActivityAt ?? meta.last_activity_at,
336
+ messageCount: meta.messageCount ?? meta.message_count,
337
+ status: meta.status,
338
+ };
339
+ }
340
+ catch { /* keep default */ }
341
+ }
342
+ // Read messages
343
+ const messageLimit = options.messageLimit ?? 100;
344
+ const includeRaw = options.includeRawMessages === true;
345
+ let messages = [];
346
+ let userPrompts = [];
347
+ let assistantText = '';
348
+ let lastAssistantText = '';
349
+ const msgPath = join(sessionDir, 'messages.jsonl');
350
+ let parsedLen = 0;
351
+ if (existsSync(msgPath)) {
352
+ try {
353
+ const allLines = readFileSync(msgPath, 'utf-8').trim().split('\n');
354
+ const selected = allLines.slice(-messageLimit);
355
+ const parsed = selected.map((l) => JSON.parse(l));
356
+ parsedLen = parsed.length;
357
+ messages = includeRaw ? parsed : [];
358
+ for (const msg of parsed) {
359
+ if (msg.role === 'user' && msg.content) {
360
+ const content = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);
361
+ userPrompts.push(content);
362
+ }
363
+ if (msg.role === 'assistant' && msg.content) {
364
+ const content = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);
365
+ assistantText += content + '\n';
366
+ lastAssistantText = content;
367
+ }
368
+ }
369
+ }
370
+ catch { /* keep empty */ }
371
+ }
372
+ return {
373
+ session: sessionEntry,
374
+ messageCount: parsedLen,
375
+ truncated: parsedLen >= messageLimit,
376
+ userPrompts,
377
+ assistantText: assistantText.trim(),
378
+ lastAssistantText,
379
+ rawMessages: includeRaw ? messages : undefined,
380
+ rawMessagesIncluded: includeRaw,
381
+ };
382
+ }
383
+ catch (err) {
384
+ return {
385
+ session: { id: sessionId },
386
+ messageCount: 0,
387
+ truncated: false,
388
+ userPrompts: [],
389
+ assistantText: '',
390
+ lastAssistantText: '',
391
+ error: err instanceof Error ? err.message : String(err),
392
+ };
393
+ }
394
+ }
395
+ // ── discoverSkills ──
396
+ async discoverSkills(context) {
397
+ const result = [];
398
+ const seen = new Set();
399
+ // 1. Bundled skills: {workDir}/.claude/skills/
400
+ if (context.workDir) {
401
+ const bundledDir = join(context.workDir, '.claude', 'skills');
402
+ if (existsSync(bundledDir)) {
403
+ for (const entry of this.scanSkillDir(bundledDir, 'bundled')) {
404
+ if (!seen.has(entry.name)) {
405
+ seen.add(entry.name);
406
+ result.push(entry);
407
+ }
408
+ }
409
+ }
410
+ }
411
+ // 2. Plugin skills (installed via Claude Code plugins): ~/.claude/skills/
412
+ const pluginDir = join(homedir(), '.claude', 'skills');
413
+ if (existsSync(pluginDir)) {
414
+ for (const entry of this.scanSkillDir(pluginDir, 'plugin')) {
415
+ if (!seen.has(entry.name)) {
416
+ seen.add(entry.name);
417
+ result.push(entry);
418
+ }
419
+ }
420
+ }
421
+ return result;
422
+ }
423
+ scanSkillDir(dir, source) {
424
+ const skills = [];
425
+ try {
426
+ const entries = readdirSync(dir, { withFileTypes: true });
427
+ for (const entry of entries) {
428
+ if (!entry.isDirectory())
429
+ continue;
430
+ const skillMdPath = join(dir, entry.name, 'SKILL.md');
431
+ if (!existsSync(skillMdPath))
432
+ continue;
433
+ const parsed = parseSkillMd(skillMdPath);
434
+ if (parsed) {
435
+ skills.push({ ...parsed, source });
436
+ }
437
+ }
438
+ }
439
+ catch { /* silently skip */ }
440
+ return skills;
441
+ }
442
+ // ── MCP 配置生成 ──
443
+ /**
444
+ * 生成 Claude Code MCP 配置文件。
445
+ *
446
+ * @param workDir - 工作目录
447
+ * @param mcpToken - 本任务的 MCP token(per-task session ID),优先级高于 this.mcpApiKey
448
+ */
449
+ generateMcpConfig(workDir, mcpToken) {
450
+ if (!this.mcpBridgeUrl)
451
+ return null;
452
+ const effectiveToken = mcpToken ?? this.mcpApiKey;
453
+ const configDir = workDir ? join(workDir, '.claude') : join(homedir(), '.claude');
454
+ // 仅当使用 Agent 级 token 且无 per-task token 时才使用缓存
455
+ if (!mcpToken) {
456
+ const cached = this.mcpConfigWritten.get(configDir);
457
+ if (cached !== undefined)
458
+ return cached;
459
+ }
460
+ const mcpConfig = {
461
+ mcpServers: {
462
+ winmatrix: {
463
+ type: 'http',
464
+ url: this.mcpBridgeUrl,
465
+ ...(effectiveToken ? { headers: { Authorization: `Bearer ${effectiveToken}` } } : {}),
466
+ },
467
+ },
468
+ };
469
+ // 使用 per-task token 时写入专用文件以避免与其他任务冲突
470
+ const suffix = mcpToken ? `.${this.strHash(mcpToken)}` : '';
471
+ const primaryPath = join(configDir, `mcp${suffix}.json`);
472
+ const fallbackPath = join(configDir, `mcp.winmatrix${suffix}.json`);
473
+ try {
474
+ if (!existsSync(configDir)) {
475
+ mkdirSync(configDir, { recursive: true });
476
+ }
477
+ // per-task token:总是写入专用文件并通过 --mcp-config 指定
478
+ if (mcpToken) {
479
+ writeFileSync(fallbackPath, JSON.stringify(mcpConfig, null, 2), 'utf-8');
480
+ return ['--mcp-config', fallbackPath];
481
+ }
482
+ // Agent 级 token:使用标准路径
483
+ if (existsSync(primaryPath)) {
484
+ writeFileSync(fallbackPath, JSON.stringify(mcpConfig, null, 2), 'utf-8');
485
+ const result = ['--mcp-config', fallbackPath];
486
+ this.mcpConfigWritten.set(configDir, result);
487
+ return result;
488
+ }
489
+ writeFileSync(primaryPath, JSON.stringify(mcpConfig, null, 2), 'utf-8');
490
+ const result = ['--mcp-config', primaryPath];
491
+ this.mcpConfigWritten.set(configDir, result);
492
+ return result;
493
+ }
494
+ catch (err) {
495
+ console.warn(`[ClaudeAdapter] MCP 配置写入失败: ${err instanceof Error ? err.message : String(err)}`);
496
+ if (!mcpToken)
497
+ this.mcpConfigWritten.set(configDir, null);
498
+ return null;
499
+ }
500
+ }
501
+ // ── helpers ──
502
+ strHash(s) {
503
+ let hash = 0;
504
+ for (let i = 0; i < s.length; i++) {
505
+ const ch = s.charCodeAt(i);
506
+ hash = ((hash << 5) - hash) + ch;
507
+ hash |= 0;
508
+ }
509
+ return Math.abs(hash).toString(16);
510
+ }
511
+ dirToProjectHash(dir) {
512
+ return this.strHash(dir);
513
+ }
514
+ }
515
+ //# sourceMappingURL=ClaudeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeAdapter.js","sourceRoot":"","sources":["../../../src/adapters/claude/ClaudeAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Claude Code stream-json 输出解析器
3
+ *
4
+ * 解析 Claude Code CLI 在 --output-format stream-json --include-partial-messages 模式下的 stdout 输出。
5
+ * 每行是一个独立的 JSON 对象,类型为 stream_event / result / error。
6
+ */
7
+ export interface ClaudeDeltaAction {
8
+ type: 'delta';
9
+ text: string;
10
+ }
11
+ export interface ClaudeToolUseAction {
12
+ type: 'tool_use';
13
+ toolName: string;
14
+ toolInput: unknown;
15
+ }
16
+ export interface ClaudeResultAction {
17
+ type: 'result';
18
+ sessionId?: string;
19
+ result?: string;
20
+ usage?: {
21
+ input_tokens: number;
22
+ output_tokens: number;
23
+ };
24
+ durationMs?: number;
25
+ }
26
+ export interface ClaudeErrorAction {
27
+ type: 'error';
28
+ message: string;
29
+ }
30
+ export interface ClaudeSkipAction {
31
+ type: 'skip';
32
+ }
33
+ export type ClaudeLineAction = ClaudeDeltaAction | ClaudeToolUseAction | ClaudeResultAction | ClaudeErrorAction | ClaudeSkipAction;
34
+ export declare function parseClaudeLine(line: string): ClaudeLineAction;
35
+ export declare function splitLines(buffer: string, chunk: string): {
36
+ lines: string[];
37
+ remainder: string;
38
+ };
39
+ //# sourceMappingURL=ClaudeStreamParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeStreamParser.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude/ClaudeStreamParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAmE9D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAKhG"}