@winmatrix/agent-sdk 0.1.5 → 0.1.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.
@@ -1,7 +1,10 @@
1
1
  export interface ClaudeSpawnSpec {
2
2
  command: string;
3
3
  shell: boolean;
4
+ resolvedPath?: string;
5
+ source?: 'direct' | 'where' | 'npm-prefix' | 'common-dir' | 'fallback';
4
6
  }
5
7
  /** Resolve the Claude CLI command without assuming a Windows .cmd shim exists. */
6
8
  export declare function resolveClaudeCommand(command: string, platform?: NodeJS.Platform): ClaudeSpawnSpec;
9
+ export declare const resolveClaudeRuntimeCommand: typeof resolveClaudeCommand;
7
10
  //# sourceMappingURL=claudeCommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCommand.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude/claudeCommand.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,kBAAmB,GAC1B,eAAe,CAWjB"}
1
+ {"version":3,"file":"claudeCommand.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude/claudeCommand.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACxE;AA8ID,kFAAkF;AAClF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,kBAAmB,GAC1B,eAAe,CAmBjB;AAED,eAAO,MAAM,2BAA2B,6BAAuB,CAAC"}
@@ -1,12 +1,138 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { extname, isAbsolute, join } from 'node:path';
5
+ const WINDOWS_SCRIPT_EXTENSIONS = new Set(['.cmd', '.bat']);
6
+ function isWindowsScriptPath(command) {
7
+ return WINDOWS_SCRIPT_EXTENSIONS.has(extname(command).toLowerCase());
8
+ }
9
+ function buildSpawnSpec(command, source) {
10
+ return {
11
+ command,
12
+ shell: isWindowsScriptPath(command),
13
+ resolvedPath: command,
14
+ source,
15
+ };
16
+ }
17
+ function readCommandOutput(command, args) {
18
+ const result = spawnSync(command, args, {
19
+ encoding: 'utf-8',
20
+ stdio: ['ignore', 'pipe', 'pipe'],
21
+ shell: false,
22
+ });
23
+ if (result.error || result.status !== 0) {
24
+ return [];
25
+ }
26
+ const output = `${result.stdout ?? ''}\n${result.stderr ?? ''}`.trim();
27
+ if (!output) {
28
+ return [];
29
+ }
30
+ return output
31
+ .split(/\r?\n/)
32
+ .map((line) => line.trim())
33
+ .filter(Boolean);
34
+ }
35
+ function resolveAbsoluteCandidate(command) {
36
+ if (!isAbsolute(command) && !command.includes('\\') && !command.includes('/')) {
37
+ return null;
38
+ }
39
+ if (!existsSync(command)) {
40
+ return null;
41
+ }
42
+ return buildSpawnSpec(command, 'direct');
43
+ }
44
+ function lookupWindowsPaths(command) {
45
+ const candidates = new Map();
46
+ const lookupNames = command.toLowerCase().endsWith('.exe') || command.toLowerCase().endsWith('.cmd') || command.toLowerCase().endsWith('.bat')
47
+ ? [command]
48
+ : [command, `${command}.exe`, `${command}.cmd`, `${command}.bat`];
49
+ for (const name of lookupNames) {
50
+ for (const found of readCommandOutput('where.exe', [name])) {
51
+ if (!candidates.has(found)) {
52
+ candidates.set(found, 'where');
53
+ }
54
+ }
55
+ }
56
+ return [...candidates.entries()].map(([path, source]) => ({ path, source }));
57
+ }
58
+ function lookupNpmPrefixCandidates(command) {
59
+ const prefixes = new Set();
60
+ for (const output of [
61
+ ...readCommandOutput('npm', ['prefix', '-g']),
62
+ ...readCommandOutput('npm', ['config', 'get', 'prefix']),
63
+ ]) {
64
+ prefixes.add(output);
65
+ }
66
+ const candidates = [];
67
+ for (const prefix of prefixes) {
68
+ if (!prefix)
69
+ continue;
70
+ candidates.push(join(prefix, `${command}.exe`));
71
+ candidates.push(join(prefix, `${command}.cmd`));
72
+ candidates.push(join(prefix, `${command}.bat`));
73
+ }
74
+ return candidates.map((path) => ({ path, source: 'npm-prefix' }));
75
+ }
76
+ function lookupCommonWindowsCandidates(command) {
77
+ const roots = new Set();
78
+ const appData = process.env.APPDATA?.trim();
79
+ const localAppData = process.env.LOCALAPPDATA?.trim();
80
+ roots.add(join(homedir(), '.local', 'bin'));
81
+ if (appData) {
82
+ roots.add(join(appData, 'npm'));
83
+ }
84
+ if (localAppData) {
85
+ roots.add(join(localAppData, 'npm'));
86
+ }
87
+ const candidates = [];
88
+ for (const root of roots) {
89
+ candidates.push(join(root, `${command}.exe`));
90
+ candidates.push(join(root, `${command}.cmd`));
91
+ candidates.push(join(root, `${command}.bat`));
92
+ }
93
+ return candidates.map((path) => ({ path, source: 'common-dir' }));
94
+ }
95
+ function resolveWindowsClaudeCommand(command) {
96
+ const direct = resolveAbsoluteCandidate(command);
97
+ if (direct) {
98
+ return direct;
99
+ }
100
+ const lookupCandidates = [
101
+ ...lookupWindowsPaths(command),
102
+ ...lookupNpmPrefixCandidates(command),
103
+ ...lookupCommonWindowsCandidates(command),
104
+ ];
105
+ for (const candidate of lookupCandidates) {
106
+ if (candidate.source === 'where') {
107
+ return buildSpawnSpec(candidate.path, candidate.source);
108
+ }
109
+ if (!existsSync(candidate.path)) {
110
+ continue;
111
+ }
112
+ return buildSpawnSpec(candidate.path, candidate.source);
113
+ }
114
+ return {
115
+ command,
116
+ shell: false,
117
+ source: 'fallback',
118
+ };
119
+ }
1
120
  /** Resolve the Claude CLI command without assuming a Windows .cmd shim exists. */
2
121
  export function resolveClaudeCommand(command, platform = process.platform) {
122
+ const normalized = command.trim();
123
+ if (normalized.length === 0) {
124
+ return { command: 'claude', shell: false, source: 'fallback' };
125
+ }
3
126
  if (platform !== 'win32') {
4
- return { command, shell: false };
127
+ return { command: normalized, shell: false, source: 'fallback' };
128
+ }
129
+ if (normalized.toLowerCase() === 'claude.cmd') {
130
+ return { command: 'claude.cmd', shell: true, source: 'direct' };
5
131
  }
6
- const normalized = command.trim().toLowerCase();
7
- if (normalized === 'claude.cmd') {
8
- return { command: 'claude.cmd', shell: true };
132
+ if (normalized.toLowerCase() === 'claude.exe') {
133
+ return { command: 'claude.exe', shell: false, source: 'direct' };
9
134
  }
10
- return { command, shell: false };
135
+ return resolveWindowsClaudeCommand(normalized);
11
136
  }
137
+ export const resolveClaudeRuntimeCommand = resolveClaudeCommand;
12
138
  //# sourceMappingURL=claudeCommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCommand.js","sourceRoot":"","sources":["../../../src/adapters/claude/claudeCommand.ts"],"names":[],"mappings":"AAKA,kFAAkF;AAClF,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"claudeCommand.js","sourceRoot":"","sources":["../../../src/adapters/claude/claudeCommand.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeDetector.d.ts","sourceRoot":"","sources":["../../src/core/RuntimeDetector.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAkCD,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAK1C"}
1
+ {"version":3,"file":"RuntimeDetector.d.ts","sourceRoot":"","sources":["../../src/core/RuntimeDetector.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AA2DD,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAK1C"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * RuntimeDetector - 本地 AI CLI 运行时检测
3
- *
4
3
  * 扫描 PATH 中已知 AI CLI 工具,返回可用列表和版本信息。
5
4
  */
6
- import { execSync } from 'node:child_process';
5
+ import { execSync, spawnSync } from 'node:child_process';
6
+ import { resolveClaudeCommand } from '../adapters/claude/claudeCommand.js';
7
7
  const KNOWN_RUNTIMES = [
8
8
  { name: 'claude', command: 'claude' },
9
9
  { name: 'cursor', command: 'cursor' },
@@ -12,10 +12,30 @@ const KNOWN_RUNTIMES = [
12
12
  { name: 'copilot', command: 'copilot' },
13
13
  { name: 'gemini', command: 'gemini' },
14
14
  ];
15
+ function tryGetClaudeVersion(command) {
16
+ const spawnSpec = resolveClaudeCommand(command);
17
+ const result = spawnSync(spawnSpec.command, ['--version'], {
18
+ timeout: 5_000,
19
+ stdio: ['ignore', 'pipe', 'pipe'],
20
+ encoding: 'utf-8',
21
+ shell: spawnSpec.shell,
22
+ });
23
+ if (result.status !== 0) {
24
+ return undefined;
25
+ }
26
+ const output = `${result.stdout ?? ''}\n${result.stderr ?? ''}`.trim();
27
+ if (!output) {
28
+ return undefined;
29
+ }
30
+ return output.split('\n')[0].slice(0, 100);
31
+ }
15
32
  function tryGetVersion(command) {
33
+ if (command.trim().toLowerCase() === 'claude') {
34
+ return tryGetClaudeVersion(command);
35
+ }
16
36
  try {
17
37
  const output = execSync(`${command} --version`, {
18
- timeout: 5000,
38
+ timeout: 5_000,
19
39
  stdio: ['ignore', 'pipe', 'pipe'],
20
40
  encoding: 'utf-8',
21
41
  });
@@ -23,9 +43,9 @@ function tryGetVersion(command) {
23
43
  }
24
44
  catch {
25
45
  try {
26
- // 有些 CLI 使用 -v 而不是 --version
46
+ // Some CLIs use -v instead of --version.
27
47
  const output = execSync(`${command} -v`, {
28
- timeout: 5000,
48
+ timeout: 5_000,
29
49
  stdio: ['ignore', 'pipe', 'pipe'],
30
50
  encoding: 'utf-8',
31
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeDetector.js","sourceRoot":"","sources":["../../src/core/RuntimeDetector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAQ9C,MAAM,cAAc,GAA6C;IAC/D,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IACjC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;CACtC,CAAC;AAEF,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,YAAY,EAAE;YAC9C,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,KAAK,EAAE;gBACvC,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"RuntimeDetector.js","sourceRoot":"","sources":["../../src/core/RuntimeDetector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winmatrix/agent-sdk",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,6 +15,11 @@
15
15
  "import": "./dist/adapters/claude/ClaudeAdapter.js",
16
16
  "default": "./dist/adapters/claude/ClaudeAdapter.js"
17
17
  },
18
+ "./adapters/claude/claudeCommand": {
19
+ "types": "./dist/adapters/claude/claudeCommand.d.ts",
20
+ "import": "./dist/adapters/claude/claudeCommand.js",
21
+ "default": "./dist/adapters/claude/claudeCommand.js"
22
+ },
18
23
  "./adapters/claude/parser": {
19
24
  "types": "./dist/adapters/claude/ClaudeStreamParser.d.ts",
20
25
  "import": "./dist/adapters/claude/ClaudeStreamParser.js",
@@ -49,7 +54,7 @@
49
54
  "node": ">=18"
50
55
  },
51
56
  "dependencies": {
52
- "@winmatrix/protocol": "^1.0.1",
57
+ "@winmatrix/protocol": "^1.0.2",
53
58
  "ws": "^8.16.0"
54
59
  },
55
60
  "peerDependencies": {